From f8812ffec436df4c39dcb7a3025403a26fb6cc3b Mon Sep 17 00:00:00 2001 From: Saad Najmi Date: Wed, 25 Mar 2026 19:09:26 -0500 Subject: [PATCH 1/5] chore(lint): migrate repo from eslint to oxlint --- .vscode/settings.json | 6 - apps/E2E/eslint.config.js | 11 - apps/E2E/oxlint.config.ts | 12 + apps/E2E/package.json | 4 +- apps/E2E/wdio.conf.android.js | 3 +- apps/E2E/wdio.conf.ios.js | 3 +- apps/E2E/wdio.conf.macos.js | 3 +- apps/E2E/wdio.conf.win32.js | 3 +- apps/E2E/wdio.conf.windows.js | 3 +- .../ComponentTemplate/eslint.config.js | 3 - .../ComponentTemplate/package.json | 4 +- apps/fluent-tester/eslint.config.js | 3 - apps/fluent-tester/package.json | 4 +- apps/tester-core/eslint.config.js | 3 - apps/tester-core/package.json | 4 +- apps/win32-81/eslint.config.js | 3 - apps/win32-81/package.json | 4 +- apps/win32/eslint.config.js | 3 - apps/win32/package.json | 4 +- package.json | 4 +- packages/codemods/eslint.config.js | 8 - packages/codemods/oxlint.config.ts | 10 + packages/codemods/package.json | 4 +- packages/components/Avatar/eslint.config.js | 3 - packages/components/Avatar/package.json | 4 +- packages/components/Badge/eslint.config.js | 3 - packages/components/Badge/package.json | 4 +- packages/components/Button/eslint.config.js | 3 - packages/components/Button/package.json | 4 +- packages/components/Callout/eslint.config.js | 3 - packages/components/Callout/package.json | 4 +- packages/components/Checkbox/eslint.config.js | 3 - packages/components/Checkbox/package.json | 4 +- packages/components/Chip/eslint.config.js | 3 - packages/components/Chip/package.json | 4 +- .../ContextualMenu/eslint.config.js | 3 - .../components/ContextualMenu/package.json | 4 +- packages/components/Divider/eslint.config.js | 3 - packages/components/Divider/package.json | 4 +- .../components/FocusTrapZone/eslint.config.js | 3 - .../components/FocusTrapZone/package.json | 4 +- .../components/FocusZone/eslint.config.js | 3 - packages/components/FocusZone/package.json | 4 +- packages/components/Icon/eslint.config.js | 3 - packages/components/Icon/package.json | 4 +- packages/components/Input/eslint.config.js | 3 - packages/components/Input/package.json | 4 +- packages/components/Link/eslint.config.js | 3 - packages/components/Link/package.json | 4 +- packages/components/Menu/eslint.config.js | 3 - packages/components/Menu/package.json | 4 +- .../components/MenuButton/eslint.config.js | 3 - packages/components/MenuButton/package.json | 4 +- .../components/Notification/eslint.config.js | 3 - packages/components/Notification/package.json | 4 +- packages/components/Persona/eslint.config.js | 3 - packages/components/Persona/package.json | 4 +- .../components/PersonaCoin/eslint.config.js | 3 - packages/components/PersonaCoin/package.json | 4 +- .../components/Pressable/eslint.config.js | 3 - packages/components/Pressable/package.json | 4 +- .../components/RadioGroup/eslint.config.js | 3 - packages/components/RadioGroup/package.json | 4 +- .../components/Separator/eslint.config.js | 3 - packages/components/Separator/package.json | 4 +- packages/components/Stack/eslint.config.js | 3 - packages/components/Stack/package.json | 4 +- packages/components/Switch/eslint.config.js | 3 - packages/components/Switch/package.json | 4 +- packages/components/TabList/eslint.config.js | 3 - packages/components/TabList/package.json | 4 +- packages/components/Text/eslint.config.js | 3 - packages/components/Text/package.json | 4 +- .../eslint-config-rules/eslint.config.js | 90 -- packages/configs/jest-config/eslint.config.js | 2 - packages/configs/jest-config/package.json | 4 +- .../.npmignore | 0 .../CHANGELOG.json | 0 .../CHANGELOG.md | 0 .../lint-config-rules/oxlint.config.ts | 1 + .../package.json | 25 +- packages/configs/lint-config-rules/private.ts | 45 + .../tsconfig.json | 2 +- .../foundation-composable/eslint.config.js | 3 - .../foundation-composable/package.json | 4 +- .../foundation-compose/eslint.config.js | 3 - .../foundation-compose/package.json | 4 +- .../foundation-settings/eslint.config.js | 3 - .../foundation-settings/package.json | 4 +- .../foundation-tokens/eslint.config.js | 3 - .../deprecated/foundation-tokens/package.json | 4 +- .../theme-registry/eslint.config.js | 3 - .../deprecated/theme-registry/package.json | 4 +- .../themed-settings/eslint.config.js | 3 - .../deprecated/themed-settings/package.json | 4 +- .../deprecated/theming-ramp/eslint.config.js | 3 - packages/deprecated/theming-ramp/package.json | 4 +- .../theming-react-native/eslint.config.js | 3 - .../theming-react-native/package.json | 4 +- .../ActivityIndicator/eslint.config.js | 3 - .../ActivityIndicator/package.json | 4 +- .../AppearanceAdditions/eslint.config.js | 3 - .../AppearanceAdditions/package.json | 4 +- packages/experimental/Avatar/eslint.config.js | 3 - packages/experimental/Avatar/package.json | 4 +- .../experimental/Checkbox/eslint.config.js | 3 - packages/experimental/Checkbox/package.json | 4 +- packages/experimental/Drawer/eslint.config.js | 3 - packages/experimental/Drawer/package.json | 4 +- .../experimental/Dropdown/eslint.config.js | 3 - packages/experimental/Dropdown/package.json | 4 +- .../experimental/Expander/eslint.config.js | 3 - packages/experimental/Expander/package.json | 4 +- .../experimental/MenuButton/eslint.config.js | 3 - packages/experimental/MenuButton/package.json | 4 +- .../NativeDatePicker/eslint.config.js | 3 - .../NativeDatePicker/package.json | 4 +- .../NativeFontMetrics/eslint.config.js | 3 - .../NativeFontMetrics/package.json | 4 +- .../experimental/Overflow/eslint.config.js | 3 - packages/experimental/Overflow/package.json | 4 +- .../experimental/Popover/eslint.config.js | 3 - packages/experimental/Popover/package.json | 4 +- packages/experimental/Shadow/eslint.config.js | 3 - packages/experimental/Shadow/package.json | 4 +- .../experimental/Shimmer/eslint.config.js | 3 - packages/experimental/Shimmer/package.json | 4 +- .../experimental/Spinner/eslint.config.js | 3 - packages/experimental/Spinner/package.json | 4 +- .../experimental/Tooltip/eslint.config.js | 3 - packages/experimental/Tooltip/package.json | 4 +- .../VibrancyView/eslint.config.js | 3 - .../experimental/VibrancyView/package.json | 4 +- packages/framework-base/eslint.config.js | 3 - packages/framework-base/package.json | 4 +- .../framework/composition/eslint.config.js | 3 - packages/framework/composition/package.json | 4 +- packages/framework/framework/eslint.config.js | 3 - packages/framework/framework/package.json | 4 +- packages/framework/theme/eslint.config.js | 3 - packages/framework/theme/package.json | 4 +- .../themed-stylesheet/eslint.config.js | 3 - .../framework/themed-stylesheet/package.json | 4 +- packages/framework/use-slot/eslint.config.js | 3 - packages/framework/use-slot/package.json | 4 +- packages/framework/use-slots/eslint.config.js | 3 - packages/framework/use-slots/package.json | 4 +- .../framework/use-styling/eslint.config.js | 3 - packages/framework/use-styling/package.json | 4 +- .../framework/use-tokens/eslint.config.js | 3 - packages/framework/use-tokens/package.json | 4 +- packages/libraries/core/eslint.config.js | 3 - packages/libraries/core/package.json | 4 +- .../theming/android-theme/eslint.config.js | 3 - packages/theming/android-theme/package.json | 4 +- packages/theming/apple-theme/eslint.config.js | 3 - packages/theming/apple-theme/package.json | 4 +- .../theming/default-theme/eslint.config.js | 3 - packages/theming/default-theme/package.json | 4 +- .../theming/theme-tokens/eslint.config.js | 3 - packages/theming/theme-tokens/package.json | 4 +- packages/theming/theme-types/eslint.config.js | 3 - packages/theming/theme-types/package.json | 4 +- .../theming/theming-utils/eslint.config.js | 10 - .../theming/theming-utils/oxlint.config.ts | 9 + packages/theming/theming-utils/package.json | 4 +- packages/theming/win32-theme/eslint.config.js | 3 - packages/theming/win32-theme/package.json | 4 +- packages/utils/adapters/eslint.config.js | 3 - packages/utils/adapters/package.json | 4 +- .../utils/interactive-hooks/eslint.config.js | 10 - .../utils/interactive-hooks/oxlint.config.ts | 9 + packages/utils/interactive-hooks/package.json | 4 +- packages/utils/styling/eslint.config.js | 10 - packages/utils/styling/oxlint.config.ts | 9 + packages/utils/styling/package.json | 4 +- packages/utils/test-tools/eslint.config.js | 10 - packages/utils/test-tools/oxlint.config.ts | 9 + packages/utils/test-tools/package.json | 4 +- packages/utils/tokens/eslint.config.js | 3 - packages/utils/tokens/package.json | 4 +- scripts/dynamic.extensions.mjs | 2 +- scripts/eslint.config.js | 38 - scripts/oxlint.config.ts | 22 + scripts/package.json | 6 +- scripts/src/cli.mjs | 2 +- scripts/src/preinstall/tool-versions.js | 3 + scripts/src/tasks/depcheck.ts | 1 + scripts/src/tasks/eslint.js | 27 - scripts/src/tasks/lint.js | 52 + yarn.lock | 1038 +++++++---------- 191 files changed, 777 insertions(+), 1260 deletions(-) delete mode 100644 apps/E2E/eslint.config.js create mode 100644 apps/E2E/oxlint.config.ts delete mode 100644 apps/component-generator/component-templates/ComponentTemplate/eslint.config.js delete mode 100644 apps/fluent-tester/eslint.config.js delete mode 100644 apps/tester-core/eslint.config.js delete mode 100644 apps/win32-81/eslint.config.js delete mode 100644 apps/win32/eslint.config.js delete mode 100644 packages/codemods/eslint.config.js create mode 100644 packages/codemods/oxlint.config.ts delete mode 100644 packages/components/Avatar/eslint.config.js delete mode 100644 packages/components/Badge/eslint.config.js delete mode 100644 packages/components/Button/eslint.config.js delete mode 100644 packages/components/Callout/eslint.config.js delete mode 100644 packages/components/Checkbox/eslint.config.js delete mode 100644 packages/components/Chip/eslint.config.js delete mode 100644 packages/components/ContextualMenu/eslint.config.js delete mode 100644 packages/components/Divider/eslint.config.js delete mode 100644 packages/components/FocusTrapZone/eslint.config.js delete mode 100644 packages/components/FocusZone/eslint.config.js delete mode 100644 packages/components/Icon/eslint.config.js delete mode 100644 packages/components/Input/eslint.config.js delete mode 100644 packages/components/Link/eslint.config.js delete mode 100644 packages/components/Menu/eslint.config.js delete mode 100644 packages/components/MenuButton/eslint.config.js delete mode 100644 packages/components/Notification/eslint.config.js delete mode 100644 packages/components/Persona/eslint.config.js delete mode 100644 packages/components/PersonaCoin/eslint.config.js delete mode 100644 packages/components/Pressable/eslint.config.js delete mode 100644 packages/components/RadioGroup/eslint.config.js delete mode 100644 packages/components/Separator/eslint.config.js delete mode 100644 packages/components/Stack/eslint.config.js delete mode 100644 packages/components/Switch/eslint.config.js delete mode 100644 packages/components/TabList/eslint.config.js delete mode 100644 packages/components/Text/eslint.config.js delete mode 100644 packages/configs/eslint-config-rules/eslint.config.js delete mode 100644 packages/configs/jest-config/eslint.config.js rename packages/configs/{eslint-config-rules => lint-config-rules}/.npmignore (100%) rename packages/configs/{eslint-config-rules => lint-config-rules}/CHANGELOG.json (100%) rename packages/configs/{eslint-config-rules => lint-config-rules}/CHANGELOG.md (100%) create mode 100644 packages/configs/lint-config-rules/oxlint.config.ts rename packages/configs/{eslint-config-rules => lint-config-rules}/package.json (53%) create mode 100644 packages/configs/lint-config-rules/private.ts rename packages/configs/{eslint-config-rules => lint-config-rules}/tsconfig.json (78%) delete mode 100644 packages/deprecated/foundation-composable/eslint.config.js delete mode 100644 packages/deprecated/foundation-compose/eslint.config.js delete mode 100644 packages/deprecated/foundation-settings/eslint.config.js delete mode 100644 packages/deprecated/foundation-tokens/eslint.config.js delete mode 100644 packages/deprecated/theme-registry/eslint.config.js delete mode 100644 packages/deprecated/themed-settings/eslint.config.js delete mode 100644 packages/deprecated/theming-ramp/eslint.config.js delete mode 100644 packages/deprecated/theming-react-native/eslint.config.js delete mode 100644 packages/experimental/ActivityIndicator/eslint.config.js delete mode 100644 packages/experimental/AppearanceAdditions/eslint.config.js delete mode 100644 packages/experimental/Avatar/eslint.config.js delete mode 100644 packages/experimental/Checkbox/eslint.config.js delete mode 100644 packages/experimental/Drawer/eslint.config.js delete mode 100644 packages/experimental/Dropdown/eslint.config.js delete mode 100644 packages/experimental/Expander/eslint.config.js delete mode 100644 packages/experimental/MenuButton/eslint.config.js delete mode 100644 packages/experimental/NativeDatePicker/eslint.config.js delete mode 100644 packages/experimental/NativeFontMetrics/eslint.config.js delete mode 100644 packages/experimental/Overflow/eslint.config.js delete mode 100644 packages/experimental/Popover/eslint.config.js delete mode 100644 packages/experimental/Shadow/eslint.config.js delete mode 100644 packages/experimental/Shimmer/eslint.config.js delete mode 100644 packages/experimental/Spinner/eslint.config.js delete mode 100644 packages/experimental/Tooltip/eslint.config.js delete mode 100644 packages/experimental/VibrancyView/eslint.config.js delete mode 100644 packages/framework-base/eslint.config.js delete mode 100644 packages/framework/composition/eslint.config.js delete mode 100644 packages/framework/framework/eslint.config.js delete mode 100644 packages/framework/theme/eslint.config.js delete mode 100644 packages/framework/themed-stylesheet/eslint.config.js delete mode 100644 packages/framework/use-slot/eslint.config.js delete mode 100644 packages/framework/use-slots/eslint.config.js delete mode 100644 packages/framework/use-styling/eslint.config.js delete mode 100644 packages/framework/use-tokens/eslint.config.js delete mode 100644 packages/libraries/core/eslint.config.js delete mode 100644 packages/theming/android-theme/eslint.config.js delete mode 100644 packages/theming/apple-theme/eslint.config.js delete mode 100644 packages/theming/default-theme/eslint.config.js delete mode 100644 packages/theming/theme-tokens/eslint.config.js delete mode 100644 packages/theming/theme-types/eslint.config.js delete mode 100644 packages/theming/theming-utils/eslint.config.js create mode 100644 packages/theming/theming-utils/oxlint.config.ts delete mode 100644 packages/theming/win32-theme/eslint.config.js delete mode 100644 packages/utils/adapters/eslint.config.js delete mode 100644 packages/utils/interactive-hooks/eslint.config.js create mode 100644 packages/utils/interactive-hooks/oxlint.config.ts delete mode 100644 packages/utils/styling/eslint.config.js create mode 100644 packages/utils/styling/oxlint.config.ts delete mode 100644 packages/utils/test-tools/eslint.config.js create mode 100644 packages/utils/test-tools/oxlint.config.ts delete mode 100644 packages/utils/tokens/eslint.config.js delete mode 100644 scripts/eslint.config.js create mode 100644 scripts/oxlint.config.ts delete mode 100644 scripts/src/tasks/eslint.js create mode 100644 scripts/src/tasks/lint.js diff --git a/.vscode/settings.json b/.vscode/settings.json index cd67b1d819a..ca57aa4e7ed 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,9 +4,6 @@ "editor.trimAutoWhitespace": true, "editor.insertSpaces": true, "editor.tabSize": 2, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" - }, // Use the OXC formatter as the default formatter which matches what yarn format will do "editor.defaultFormatter": "oxc.oxc-vscode", @@ -16,9 +13,6 @@ "prettier.printWidth": 140, "prettier.trailingComma": "all", - "eslint.enable": true, - "eslint.workingDirectories": [{ "pattern": "./packages/framework/eslint-config-rules" }], // use the common eslint config file - "explorer.fileNesting.enabled": true, "explorer.fileNesting.patterns": { "*.js": "${capture}.js.map, ${capture}.d.ts, ${capture}.d.ts.map", diff --git a/apps/E2E/eslint.config.js b/apps/E2E/eslint.config.js deleted file mode 100644 index 5ed9a7bc328..00000000000 --- a/apps/E2E/eslint.config.js +++ /dev/null @@ -1,11 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = [ - ...baseConfig, - { - rules: { - '@typescript-eslint/no-duplicate-enum-values': 'off', - '@typescript-eslint/no-invalid-void-type': 'off', - }, - }, -]; diff --git a/apps/E2E/oxlint.config.ts b/apps/E2E/oxlint.config.ts new file mode 100644 index 00000000000..8b7f9d7bfb9 --- /dev/null +++ b/apps/E2E/oxlint.config.ts @@ -0,0 +1,12 @@ +import baseConfig from '@fluentui-react-native/lint-config-rules'; +import { defineConfig } from 'oxlint'; + +export default defineConfig({ + extends: [baseConfig], + rules: { + '@rnx-kit/no-export-all': 'off', + 'typescript/class-literal-property-style': 'off', + 'typescript/no-duplicate-enum-values': 'off', + 'typescript/no-invalid-void-type': 'off', + }, +}); diff --git a/apps/E2E/package.json b/apps/E2E/package.json index c5809cf009e..55d6141f238 100644 --- a/apps/E2E/package.json +++ b/apps/E2E/package.json @@ -38,7 +38,7 @@ "e2etest:macos": "cross-env APPIUM_HOME=.appium wdio run wdio.conf.macos.js", "e2etest:win32": "cross-env APPIUM_HOME=.appium wdio run wdio.conf.win32.js", "e2etest:windows": "rimraf errorShots reports && cross-env APPIUM_HOME=.appium wdio run wdio.conf.windows.js", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package" }, "dependencies": { @@ -47,9 +47,9 @@ "devDependencies": { "@babel/core": "catalog:", "@babel/runtime": "catalog:", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/focus-zone": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.81.0", "@react-native/metro-babel-transformer": "^0.81.0", diff --git a/apps/E2E/wdio.conf.android.js b/apps/E2E/wdio.conf.android.js index 57f2b3bb6bc..a8f3dac579d 100644 --- a/apps/E2E/wdio.conf.android.js +++ b/apps/E2E/wdio.conf.android.js @@ -34,7 +34,6 @@ exports.config = { bail: 1, // If you only want to run your tests until a specific amount of tests have failed use bail (default is 0 - don't bail, run all tests). waitforTimeout: defaultWaitForTimeout, // Default timeout for all waitForXXX commands. connectionRetryTimeout: defaultConnectionRetryTimeout, // Timeout for any WebDriver request to a driver or grid. - connectionRetryCount: 2, // Maximum count of request retries to the Selenium server. specFileRetries: 2, // The number of times to retry the entire spec file when it fails as a whole. port: 4723, // default appium port @@ -141,7 +140,7 @@ exports.config = { /** * Function to be executed after a test (in Mocha/Jasmine). */ - afterTest: (test, context, results) => { + afterTest: (test, _context, results) => { const resultString = results.passed ? 'Passed' : 'Failed'; console.log('\n Test Case: ' + test.description + '. Result: ' + resultString + '\n'); diff --git a/apps/E2E/wdio.conf.ios.js b/apps/E2E/wdio.conf.ios.js index ee4704a42c3..b46f95936f3 100644 --- a/apps/E2E/wdio.conf.ios.js +++ b/apps/E2E/wdio.conf.ios.js @@ -32,7 +32,6 @@ exports.config = { bail: 1, // If you only want to run your tests until a specific amount of tests have failed use bail (default is 0 - don't bail, run all tests). waitforTimeout: defaultWaitForTimeout, // Default timeout for all waitForXXX commands. connectionRetryTimeout: defaultConnectionRetryTimeout, // Timeout for any WebDriver request to a driver or grid. - connectionRetryCount: 2, // Maximum count of request retries to the Selenium server. specFileRetries: 2, // The number of times to retry the entire spec file when it fails as a whole. port: 4723, // default appium port @@ -139,7 +138,7 @@ exports.config = { /** * Function to be executed after a test (in Mocha/Jasmine). */ - afterTest: (test, context, results) => { + afterTest: (test, _context, results) => { const resultString = results.passed ? 'Passed' : 'Failed'; console.log(`\nTest Case: "${test.description}".\nResult: "${resultString}".\nDuration: "${(results.duration / 600).toFixed(2)}s". \n`); diff --git a/apps/E2E/wdio.conf.macos.js b/apps/E2E/wdio.conf.macos.js index 02879bbb353..9794683e7ce 100644 --- a/apps/E2E/wdio.conf.macos.js +++ b/apps/E2E/wdio.conf.macos.js @@ -31,7 +31,6 @@ exports.config = { bail: 1, // If you only want to run your tests until a specific amount of tests have failed use bail (default is 0 - don't bail, run all tests). waitforTimeout: defaultWaitForTimeout, // Default timeout for all waitForXXX commands. connectionRetryTimeout: defaultConnectionRetryTimeout, // Timeout for any WebDriver request to a driver or grid. - connectionRetryCount: 2, // Maximum count of request retries to the Selenium server. specFileRetries: 1, // The number of times to retry the entire spec file when it fails as a whole. port: 4723, // default appium port @@ -154,7 +153,7 @@ exports.config = { /** * Function to be executed after a test (in Mocha/Jasmine). */ - afterTest: (test, context, results) => { + afterTest: (test, _context, results) => { const resultString = results.passed ? 'Passed' : 'Failed'; console.log(`\nTest Case: "${test.description}".\nResult: "${resultString}".\nDuration: "${(results.duration / 600).toFixed(2)}s". \n`); diff --git a/apps/E2E/wdio.conf.win32.js b/apps/E2E/wdio.conf.win32.js index 581ceb6a1dd..b25a0b0a44a 100644 --- a/apps/E2E/wdio.conf.win32.js +++ b/apps/E2E/wdio.conf.win32.js @@ -37,7 +37,6 @@ exports.config = { bail: 1, // If you only want to run your tests until a specific amount of tests have failed use bail (default is 0 - don't bail, run all tests). waitforTimeout: defaultWaitForTimeout, // Default timeout for all waitForXXX commands. connectionRetryTimeout: defaultConnectionRetryTimeout, // Timeout for any WebDriver request to a driver or grid. - connectionRetryCount: 2, // Maximum count of request retries to the Selenium server. specFileRetries: 1, // The number of times to retry the entire spec file when it fails as a whole. port: 4723, // default appium port @@ -147,7 +146,7 @@ exports.config = { /** * Function to be executed after a test (in Mocha/Jasmine). */ - afterTest: async (test, context, results) => { + afterTest: async (test, _context, results) => { const resultString = results.passed ? 'Passed' : 'Failed'; console.log(`\nTest Case: "${test.description}".\nResult: "${resultString}".\nDuration: "${(results.duration / 600).toFixed(2)}s". \n`); diff --git a/apps/E2E/wdio.conf.windows.js b/apps/E2E/wdio.conf.windows.js index e2a1a45b8c1..c324c920945 100644 --- a/apps/E2E/wdio.conf.windows.js +++ b/apps/E2E/wdio.conf.windows.js @@ -49,7 +49,6 @@ exports.config = { bail: 1, // If you only want to run your tests until a specific amount of tests have failed use bail (default is 0 - don't bail, run all tests). waitforTimeout: defaultWaitForTimeout, // Default timeout for all waitForXXX commands. connectionRetryTimeout: defaultConnectionRetryTimeout, // Timeout for any WebDriver request to a driver or grid. - connectionRetryCount: 2, // Maximum count of request retries to the Selenium server. specFileRetries: 1, // The number of times to retry the entire spec file when it fails as a whole. port: 4723, // default appium port @@ -161,7 +160,7 @@ exports.config = { /** * Function to be executed after a test (in Mocha/Jasmine). */ - afterTest: (test, context, results) => { + afterTest: (test, _context, results) => { const resultString = results.passed ? 'Passed' : 'Failed'; console.log(`\nTest Case: "${test.description}".\nResult: "${resultString}".\nDuration: "${(results.duration / 600).toFixed(2)}s". \n`); diff --git a/apps/component-generator/component-templates/ComponentTemplate/eslint.config.js b/apps/component-generator/component-templates/ComponentTemplate/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/apps/component-generator/component-templates/ComponentTemplate/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/apps/component-generator/component-templates/ComponentTemplate/package.json b/apps/component-generator/component-templates/ComponentTemplate/package.json index 7b3117d4ba3..706fd38778b 100644 --- a/apps/component-generator/component-templates/ComponentTemplate/package.json +++ b/apps/component-generator/component-templates/ComponentTemplate/package.json @@ -18,7 +18,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "just": "fluentui-scripts", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u", @@ -28,7 +28,7 @@ "dependencies": {}, "devDependencies": { "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", diff --git a/apps/fluent-tester/eslint.config.js b/apps/fluent-tester/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/apps/fluent-tester/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/apps/fluent-tester/package.json b/apps/fluent-tester/package.json index 2f752705294..24febf3c920 100644 --- a/apps/fluent-tester/package.json +++ b/apps/fluent-tester/package.json @@ -34,7 +34,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "ios": "rnx-cli run --platform ios", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "macos": "rnx-cli run --platform macos", "format": "fluentui-scripts format", @@ -55,7 +55,6 @@ "@babel/runtime": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", "@fluentui-react-native/callout": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/experimental-appearance-additions": "workspace:*", "@fluentui-react-native/experimental-avatar": "workspace:*", "@fluentui-react-native/experimental-checkbox": "workspace:*", @@ -65,6 +64,7 @@ "@fluentui-react-native/experimental-shimmer": "workspace:*", "@fluentui-react-native/focus-zone": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/menu-button": "workspace:*", "@fluentui-react-native/radio-group": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", diff --git a/apps/tester-core/eslint.config.js b/apps/tester-core/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/apps/tester-core/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/apps/tester-core/package.json b/apps/tester-core/package.json index 300f21266a0..67d181497e8 100644 --- a/apps/tester-core/package.json +++ b/apps/tester-core/package.json @@ -29,7 +29,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package" }, "dependencies": { @@ -95,8 +95,8 @@ "@babel/core": "catalog:", "@babel/runtime": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.81.0", "@react-native-community/cli": "^20.0.0", diff --git a/apps/win32-81/eslint.config.js b/apps/win32-81/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/apps/win32-81/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/apps/win32-81/package.json b/apps/win32-81/package.json index 078f4d5d1ad..6722f3b0f0e 100644 --- a/apps/win32-81/package.json +++ b/apps/win32-81/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "run-win32": "rex-win32 --bundle index.win32 --component FluentTester --basePath ./dist --useDirectDebugger --windowTitle \"FluentUI Tester\" --pluginProps --debugBundlePath index --jsEngine v8", "run-win32-dev": "rex-win32 --bundle index --component FluentTester --basePath ./dist --useDirectDebugger --windowTitle \"FluentUI Tester\" --pluginProps --debugBundlePath index --jsEngine v8 --useFastRefresh", @@ -48,8 +48,8 @@ "@babel/core": "catalog:", "@babel/runtime": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/rex-win32": "0.81.0-preview.0", "@react-native-community/cli": "^20.0.0", diff --git a/apps/win32/eslint.config.js b/apps/win32/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/apps/win32/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/apps/win32/package.json b/apps/win32/package.json index 59b7566ee67..bb7c29a7451 100644 --- a/apps/win32/package.json +++ b/apps/win32/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "run-win32": "rex-win32 --bundle index.win32 --component FluentTester --basePath ./dist --useDirectDebugger --windowTitle \"FluentUI Tester\" --pluginProps --debugBundlePath index --jsEngine v8", "run-win32-dev": "rex-win32 --bundle index --component FluentTester --basePath ./dist --useDirectDebugger --windowTitle \"FluentUI Tester\" --pluginProps --debugBundlePath index --jsEngine v8 --useFastRefresh", @@ -48,8 +48,8 @@ "@babel/core": "catalog:", "@babel/runtime": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/rex-win32": "0.73.11-devmain.16.0.17615.15030", "@react-native-community/cli": "^13.6.4", diff --git a/package.json b/package.json index 165bdab4fa2..fbce17aab9b 100644 --- a/package.json +++ b/package.json @@ -45,11 +45,11 @@ "@rnx-kit/lint-lockfile": "catalog:", "babel-jest": "^29.7.0", "cross-env": "catalog:", - "eslint": "^9.39.2", - "eslint-plugin-import": "^2.32.0", "lage": "catalog:", "markdown-link-check": "^3.8.7", "oxfmt": "^0.35.0", + "oxlint": "^1.57.0", + "oxlint-tsgolint": "^0.17.4", "typescript": "^5.8.0", "zx": "^8.2.4" }, diff --git a/packages/codemods/eslint.config.js b/packages/codemods/eslint.config.js deleted file mode 100644 index 50bbe55be75..00000000000 --- a/packages/codemods/eslint.config.js +++ /dev/null @@ -1,8 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = [ - ...baseConfig, - { - ignores: ['src/transforms/__testfixtures__/**/*'], - }, -]; diff --git a/packages/codemods/oxlint.config.ts b/packages/codemods/oxlint.config.ts new file mode 100644 index 00000000000..6f6abf6dab5 --- /dev/null +++ b/packages/codemods/oxlint.config.ts @@ -0,0 +1,10 @@ +import baseConfig from '@fluentui-react-native/lint-config-rules'; +import { defineConfig } from 'oxlint'; + +export default defineConfig({ + extends: [baseConfig], + rules: { + 'typescript/consistent-type-definitions': 'off', + }, + ignorePatterns: ['src/transforms/__testfixtures__/**/*'], +}); diff --git a/packages/codemods/package.json b/packages/codemods/package.json index d5fb6df4307..28411636e94 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -30,7 +30,7 @@ "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "format": "fluentui-scripts format", "test": "fluentui-scripts jest" @@ -42,8 +42,8 @@ "devDependencies": { "@babel/core": "catalog:", "@babel/preset-env": "catalog:", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/react-configs": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", diff --git a/packages/components/Avatar/eslint.config.js b/packages/components/Avatar/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Avatar/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Avatar/package.json b/packages/components/Avatar/package.json index 7c05f5993ce..c902b194dd1 100644 --- a/packages/components/Avatar/package.json +++ b/packages/components/Avatar/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -47,10 +47,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/components/Badge/eslint.config.js b/packages/components/Badge/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Badge/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Badge/package.json b/packages/components/Badge/package.json index a61d2a09aa3..f38c98c12f0 100644 --- a/packages/components/Badge/package.json +++ b/packages/components/Badge/package.json @@ -24,7 +24,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -45,10 +45,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/Button/eslint.config.js b/packages/components/Button/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Button/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Button/package.json b/packages/components/Button/package.json index 6269de10c34..5f5ceed795b 100644 --- a/packages/components/Button/package.json +++ b/packages/components/Button/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -55,10 +55,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/Callout/eslint.config.js b/packages/components/Callout/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Callout/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Callout/package.json b/packages/components/Callout/package.json index d01fe2e0549..3e4e778ff08 100644 --- a/packages/components/Callout/package.json +++ b/packages/components/Callout/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -43,9 +43,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/components/Checkbox/eslint.config.js b/packages/components/Checkbox/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Checkbox/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Checkbox/package.json b/packages/components/Checkbox/package.json index e6e82436c9f..b5c002dfc1f 100644 --- a/packages/components/Checkbox/package.json +++ b/packages/components/Checkbox/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -51,10 +51,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/Chip/eslint.config.js b/packages/components/Chip/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Chip/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Chip/package.json b/packages/components/Chip/package.json index 79c5d255ddb..00ac9d76b7b 100644 --- a/packages/components/Chip/package.json +++ b/packages/components/Chip/package.json @@ -23,7 +23,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -41,10 +41,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/ContextualMenu/eslint.config.js b/packages/components/ContextualMenu/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/ContextualMenu/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/ContextualMenu/package.json b/packages/components/ContextualMenu/package.json index a7f48e5acf5..210abfd11a6 100644 --- a/packages/components/ContextualMenu/package.json +++ b/packages/components/ContextualMenu/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -48,10 +48,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/pressable": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/Divider/eslint.config.js b/packages/components/Divider/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Divider/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Divider/package.json b/packages/components/Divider/package.json index fd2c72eeb9d..1f3677c1d3f 100644 --- a/packages/components/Divider/package.json +++ b/packages/components/Divider/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -42,10 +42,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/FocusTrapZone/eslint.config.js b/packages/components/FocusTrapZone/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/FocusTrapZone/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/FocusTrapZone/package.json b/packages/components/FocusTrapZone/package.json index 7a4548ad829..4c8f5f63523 100644 --- a/packages/components/FocusTrapZone/package.json +++ b/packages/components/FocusTrapZone/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -41,9 +41,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/components/FocusZone/eslint.config.js b/packages/components/FocusZone/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/FocusZone/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/FocusZone/package.json b/packages/components/FocusZone/package.json index c65058cd3a9..b3ff5bb8c20 100644 --- a/packages/components/FocusZone/package.json +++ b/packages/components/FocusZone/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -41,9 +41,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/components/Icon/eslint.config.js b/packages/components/Icon/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Icon/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Icon/package.json b/packages/components/Icon/package.json index 839d4fe3805..19a166dae34 100644 --- a/packages/components/Icon/package.json +++ b/packages/components/Icon/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -41,9 +41,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/Input/eslint.config.js b/packages/components/Input/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Input/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Input/package.json b/packages/components/Input/package.json index 08a13344d2d..52c95e8af63 100644 --- a/packages/components/Input/package.json +++ b/packages/components/Input/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -45,10 +45,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@react-native-community/cli": "^20.0.0", diff --git a/packages/components/Link/eslint.config.js b/packages/components/Link/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Link/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Link/package.json b/packages/components/Link/package.json index f81df8b0828..94a1ffff6bd 100644 --- a/packages/components/Link/package.json +++ b/packages/components/Link/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -46,10 +46,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@react-native-community/cli": "^20.0.0", diff --git a/packages/components/Menu/eslint.config.js b/packages/components/Menu/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Menu/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Menu/package.json b/packages/components/Menu/package.json index 9eac7646652..bc915a40f10 100644 --- a/packages/components/Menu/package.json +++ b/packages/components/Menu/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -51,10 +51,10 @@ "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", "@fluentui-react-native/button": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/MenuButton/eslint.config.js b/packages/components/MenuButton/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/MenuButton/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/MenuButton/package.json b/packages/components/MenuButton/package.json index ceb1fd20fc5..95283c8aa8d 100644 --- a/packages/components/MenuButton/package.json +++ b/packages/components/MenuButton/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -45,10 +45,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/components/Notification/eslint.config.js b/packages/components/Notification/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Notification/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Notification/package.json b/packages/components/Notification/package.json index b7583f33d75..240cc44c82d 100644 --- a/packages/components/Notification/package.json +++ b/packages/components/Notification/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -50,10 +50,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/Persona/eslint.config.js b/packages/components/Persona/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Persona/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Persona/package.json b/packages/components/Persona/package.json index 23de0977fbe..bfcdc34d2cb 100644 --- a/packages/components/Persona/package.json +++ b/packages/components/Persona/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -45,9 +45,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/components/PersonaCoin/eslint.config.js b/packages/components/PersonaCoin/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/PersonaCoin/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/PersonaCoin/package.json b/packages/components/PersonaCoin/package.json index 01275d71d2b..4deac0c42bb 100644 --- a/packages/components/PersonaCoin/package.json +++ b/packages/components/PersonaCoin/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -45,9 +45,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/components/Pressable/eslint.config.js b/packages/components/Pressable/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Pressable/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Pressable/package.json b/packages/components/Pressable/package.json index 52a87a455a9..4c7d2d23e3d 100644 --- a/packages/components/Pressable/package.json +++ b/packages/components/Pressable/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -41,8 +41,8 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/components/RadioGroup/eslint.config.js b/packages/components/RadioGroup/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/RadioGroup/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/RadioGroup/package.json b/packages/components/RadioGroup/package.json index dd9cea1473c..21cf8dec9db 100644 --- a/packages/components/RadioGroup/package.json +++ b/packages/components/RadioGroup/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -50,10 +50,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/Separator/eslint.config.js b/packages/components/Separator/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Separator/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Separator/package.json b/packages/components/Separator/package.json index e08b5aa51e2..71b2e7e647d 100644 --- a/packages/components/Separator/package.json +++ b/packages/components/Separator/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -40,10 +40,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/components/Stack/eslint.config.js b/packages/components/Stack/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Stack/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Stack/package.json b/packages/components/Stack/package.json index fd1835500ab..11258349658 100644 --- a/packages/components/Stack/package.json +++ b/packages/components/Stack/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -44,10 +44,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/text": "workspace:*", "@react-native-community/cli": "^20.0.0", diff --git a/packages/components/Switch/eslint.config.js b/packages/components/Switch/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Switch/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Switch/package.json b/packages/components/Switch/package.json index 786f52fd5e2..95fbdb054a7 100644 --- a/packages/components/Switch/package.json +++ b/packages/components/Switch/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -44,10 +44,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/TabList/eslint.config.js b/packages/components/TabList/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/TabList/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/TabList/package.json b/packages/components/TabList/package.json index 93afcf022eb..3ade2667fbf 100644 --- a/packages/components/TabList/package.json +++ b/packages/components/TabList/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -46,10 +46,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/components/Text/eslint.config.js b/packages/components/Text/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/components/Text/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/components/Text/package.json b/packages/components/Text/package.json index e917ddf7d54..3fc4780e96a 100644 --- a/packages/components/Text/package.json +++ b/packages/components/Text/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -43,10 +43,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@react-native-community/cli": "^20.0.0", diff --git a/packages/configs/eslint-config-rules/eslint.config.js b/packages/configs/eslint-config-rules/eslint.config.js deleted file mode 100644 index 1d55aeb842d..00000000000 --- a/packages/configs/eslint-config-rules/eslint.config.js +++ /dev/null @@ -1,90 +0,0 @@ -const rnx = require('@rnx-kit/eslint-plugin'); -const sdl = require('@microsoft/eslint-plugin-sdl'); - -module.exports = [ - ...sdl.configs.common, - ...rnx.configs.strict, - // Base configuration for all files - { - languageOptions: { - parserOptions: { - projectService: true, - tsconfigRootDir: process.cwd(), - }, - }, - rules: { - indent: 'off', - 'no-unused-vars': 'off', - quotes: [ - 'error', - 'single', - { - avoidEscape: true, - allowTemplateLiterals: true, - }, - ], - '@rnx-kit/no-const-enum': 'error', - '@rnx-kit/no-export-all': ['error', { expand: 'external-only' }], - '@typescript-eslint/consistent-type-assertions': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/interface-name-prefix': 'off', - '@typescript-eslint/no-array-constructor': 'off', - '@typescript-eslint/no-dynamic-delete': 'off', - '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-inferrable-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/consistent-type-exports': 'error', - 'no-prototype-builtins': 'off', - 'no-undef': 'off', - 'react/display-name': 'off', - 'react/react-in-jsx-scope': 'off', // unnecessary with new JSX transform - 'react-hooks/exhaustive-deps': 'off', // This should be fixed in the future but is a big change - 'no-restricted-exports': [ - 'error', - { - restrictDefaultExports: { - direct: false, - named: true, - defaultFrom: true, - namedFrom: true, - namespaceFrom: true, - }, - }, - ], - }, - }, - // Override configuration for index files - { - files: ['**/src/index.{js,ts,tsx}'], - rules: { - '@rnx-kit/no-export-all': ['error', { expand: 'all' }], - }, - }, - { - files: ['**/*.test.{js,ts,tsx}', '**/*.spec.{js,ts,tsx}'], - languageOptions: { - globals: { - // These are provided by the jest environment - // https://jestjs.io/docs/using-matchers - expect: 'readonly', - test: 'readonly', - describe: 'readonly', - beforeAll: 'readonly', - afterAll: 'readonly', - beforeEach: 'readonly', - afterEach: 'readonly', - jest: 'readonly', - }, - }, - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - }, - }, - // Common ignore patterns - { - ignores: ['node_modules/**', '*.config.js', 'dist/**/*', 'coverage/**/*', 'lib/**/*', 'out/**/*'], - }, -]; diff --git a/packages/configs/jest-config/eslint.config.js b/packages/configs/jest-config/eslint.config.js deleted file mode 100644 index a4f7e7df548..00000000000 --- a/packages/configs/jest-config/eslint.config.js +++ /dev/null @@ -1,2 +0,0 @@ -import baseConfig from '@fluentui-react-native/eslint-config-rules'; -export default baseConfig; diff --git a/packages/configs/jest-config/package.json b/packages/configs/jest-config/package.json index 3a4ac51e206..bd25e0c0b04 100644 --- a/packages/configs/jest-config/package.json +++ b/packages/configs/jest-config/package.json @@ -24,7 +24,7 @@ "build": "tsgo", "build-core": "tsgo", "depcheck": "fluentui-scripts depcheck", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package" }, "dependencies": { @@ -33,8 +33,8 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native/babel-preset": "^0.81.0", "@types/node": "catalog:", diff --git a/packages/configs/eslint-config-rules/.npmignore b/packages/configs/lint-config-rules/.npmignore similarity index 100% rename from packages/configs/eslint-config-rules/.npmignore rename to packages/configs/lint-config-rules/.npmignore diff --git a/packages/configs/eslint-config-rules/CHANGELOG.json b/packages/configs/lint-config-rules/CHANGELOG.json similarity index 100% rename from packages/configs/eslint-config-rules/CHANGELOG.json rename to packages/configs/lint-config-rules/CHANGELOG.json diff --git a/packages/configs/eslint-config-rules/CHANGELOG.md b/packages/configs/lint-config-rules/CHANGELOG.md similarity index 100% rename from packages/configs/eslint-config-rules/CHANGELOG.md rename to packages/configs/lint-config-rules/CHANGELOG.md diff --git a/packages/configs/lint-config-rules/oxlint.config.ts b/packages/configs/lint-config-rules/oxlint.config.ts new file mode 100644 index 00000000000..01932bcf709 --- /dev/null +++ b/packages/configs/lint-config-rules/oxlint.config.ts @@ -0,0 +1 @@ +export { default } from './private.ts'; diff --git a/packages/configs/eslint-config-rules/package.json b/packages/configs/lint-config-rules/package.json similarity index 53% rename from packages/configs/eslint-config-rules/package.json rename to packages/configs/lint-config-rules/package.json index 5c71424f3c7..62dd61e058b 100644 --- a/packages/configs/eslint-config-rules/package.json +++ b/packages/configs/lint-config-rules/package.json @@ -1,17 +1,23 @@ { - "name": "@fluentui-react-native/eslint-config-rules", + "name": "@fluentui-react-native/lint-config-rules", "version": "0.1.2", - "description": "ESLint ruleset for UI Fabric React Native", + "description": "Oxlint config for Fluent UI React Native", "license": "MIT", "repository": { "type": "git", "url": "https://github.com/microsoft/fluentui-react-native", - "directory": "packages/framework/eslint-config-rules" + "directory": "packages/configs/lint-config-rules" }, - "main": "./eslint.config.js", + "type": "module", + "main": "./private.ts", "exports": { - ".": "./eslint.config.js", - "./eslint.config.js": "./eslint.config.js" + ".": { + "default": "./private.ts" + }, + "./private": { + "default": "./private.ts" + }, + "./package.json": "./package.json" }, "scripts": { "build": "tsgo", @@ -19,15 +25,14 @@ "lint-package": "fluentui-scripts lint-package" }, "dependencies": { - "@microsoft/eslint-plugin-sdl": "^1.1.0", - "@rnx-kit/eslint-plugin": "catalog:" + "@rnx-kit/oxlint-config": "^1.0.3", + "oxlint": "^1.57.0" }, "devDependencies": { "@fluentui-react-native/kit-config": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", - "@types/eslint": "^9.6.1", "@types/node": "catalog:", - "eslint": "^9.39.2" + "typescript": "^5.8.0" }, "furn": { "packageType": "tooling" diff --git a/packages/configs/lint-config-rules/private.ts b/packages/configs/lint-config-rules/private.ts new file mode 100644 index 00000000000..14b212fa294 --- /dev/null +++ b/packages/configs/lint-config-rules/private.ts @@ -0,0 +1,45 @@ +import { defineConfig } from 'oxlint'; +import sdlRequired from '@rnx-kit/oxlint-config/sdl-required'; +import strict from '@rnx-kit/oxlint-config/strict'; +import stylistic from '@rnx-kit/oxlint-config/typescript-stylistic'; + +export default defineConfig({ + extends: [sdlRequired, strict, stylistic], + rules: { + '@rnx-kit/no-foreach-with-captured-variables': 'error', + 'import/no-default-export': 'off', + 'no-prototype-builtins': 'off', + 'no-unneeded-ternary': 'off', + 'typescript/consistent-indexed-object-style': 'off', + 'typescript/consistent-type-definitions': 'off', + 'typescript/no-explicit-any': 'off', + 'typescript/no-inferrable-types': 'off', + }, + overrides: [ + { + files: ['**/*.config.[jt]s'], + rules: { + 'import/no-default-export': 'off', + }, + }, + { + files: ['**/types.ts'], + rules: { + '@rnx-kit/type-definitions-only': 'error', + }, + }, + { + files: ['**/src/index.{js,ts,tsx}'], + rules: { + '@rnx-kit/no-export-all': ['error', { expand: 'all' }], + }, + }, + { + files: ['**/*.test.{js,ts,tsx}', '**/*.spec.{js,ts,tsx}'], + rules: { + 'no-empty-function': 'off', + }, + }, + ], + ignorePatterns: ['node_modules/**', '*.config.js', 'dist/**/*', 'coverage/**/*', 'lib/**/*', 'out/**/*'], +}); diff --git a/packages/configs/eslint-config-rules/tsconfig.json b/packages/configs/lint-config-rules/tsconfig.json similarity index 78% rename from packages/configs/eslint-config-rules/tsconfig.json rename to packages/configs/lint-config-rules/tsconfig.json index b9730600120..1222fc76d6f 100644 --- a/packages/configs/eslint-config-rules/tsconfig.json +++ b/packages/configs/lint-config-rules/tsconfig.json @@ -5,6 +5,6 @@ "checkJs": true, "noEmit": true }, - "include": ["eslint.config.js"], + "include": ["private.ts", "oxlint.config.ts"], "exclude": [] } diff --git a/packages/deprecated/foundation-composable/eslint.config.js b/packages/deprecated/foundation-composable/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/deprecated/foundation-composable/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/deprecated/foundation-composable/package.json b/packages/deprecated/foundation-composable/package.json index 975bc46dda0..8124303eb79 100644 --- a/packages/deprecated/foundation-composable/package.json +++ b/packages/deprecated/foundation-composable/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -40,8 +40,8 @@ "@uifabricshared/foundation-settings": "workspace:*" }, "devDependencies": { - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@types/react": "~19.1.4", "react": "19.1.4", diff --git a/packages/deprecated/foundation-compose/eslint.config.js b/packages/deprecated/foundation-compose/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/deprecated/foundation-compose/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/deprecated/foundation-compose/package.json b/packages/deprecated/foundation-compose/package.json index efde898d38f..f7febfb15ac 100644 --- a/packages/deprecated/foundation-compose/package.json +++ b/packages/deprecated/foundation-compose/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -46,8 +46,8 @@ "@uifabricshared/theming-ramp": "workspace:*" }, "devDependencies": { - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.81.0", "@types/react": "~19.1.4", diff --git a/packages/deprecated/foundation-settings/eslint.config.js b/packages/deprecated/foundation-settings/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/deprecated/foundation-settings/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/deprecated/foundation-settings/package.json b/packages/deprecated/foundation-settings/package.json index 00fae293ff5..5078641cfdf 100644 --- a/packages/deprecated/foundation-settings/package.json +++ b/packages/deprecated/foundation-settings/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -40,8 +40,8 @@ }, "devDependencies": { "@babel/core": "catalog:", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/react-configs": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@types/jest": "^29.0.0", diff --git a/packages/deprecated/foundation-tokens/eslint.config.js b/packages/deprecated/foundation-tokens/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/deprecated/foundation-tokens/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/deprecated/foundation-tokens/package.json b/packages/deprecated/foundation-tokens/package.json index 5a5e69ff4e3..cd771555d57 100644 --- a/packages/deprecated/foundation-tokens/package.json +++ b/packages/deprecated/foundation-tokens/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -43,8 +43,8 @@ }, "devDependencies": { "@babel/core": "catalog:", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/react-configs": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.81.0", diff --git a/packages/deprecated/theme-registry/eslint.config.js b/packages/deprecated/theme-registry/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/deprecated/theme-registry/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/deprecated/theme-registry/package.json b/packages/deprecated/theme-registry/package.json index 7e61d00c901..aa0bcbf9f6d 100644 --- a/packages/deprecated/theme-registry/package.json +++ b/packages/deprecated/theme-registry/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -37,9 +37,9 @@ }, "devDependencies": { "@babel/core": "catalog:", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/react-configs": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native/babel-preset": "^0.74.0", diff --git a/packages/deprecated/themed-settings/eslint.config.js b/packages/deprecated/themed-settings/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/deprecated/themed-settings/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/deprecated/themed-settings/package.json b/packages/deprecated/themed-settings/package.json index 687c4ed0af3..31bf92b8548 100644 --- a/packages/deprecated/themed-settings/package.json +++ b/packages/deprecated/themed-settings/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -41,8 +41,8 @@ }, "devDependencies": { "@babel/core": "catalog:", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/react-configs": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native/babel-preset": "^0.81.0", diff --git a/packages/deprecated/theming-ramp/eslint.config.js b/packages/deprecated/theming-ramp/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/deprecated/theming-ramp/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/deprecated/theming-ramp/package.json b/packages/deprecated/theming-ramp/package.json index 59b32b57056..2d7e0142103 100644 --- a/packages/deprecated/theming-ramp/package.json +++ b/packages/deprecated/theming-ramp/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -42,8 +42,8 @@ }, "devDependencies": { "@babel/core": "catalog:", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/react-configs": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", diff --git a/packages/deprecated/theming-react-native/eslint.config.js b/packages/deprecated/theming-react-native/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/deprecated/theming-react-native/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/deprecated/theming-react-native/package.json b/packages/deprecated/theming-react-native/package.json index ed61ecda77b..4d8c277ae6b 100644 --- a/packages/deprecated/theming-react-native/package.json +++ b/packages/deprecated/theming-react-native/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -44,9 +44,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/experimental/ActivityIndicator/eslint.config.js b/packages/experimental/ActivityIndicator/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/ActivityIndicator/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/ActivityIndicator/package.json b/packages/experimental/ActivityIndicator/package.json index 483feb8ca97..b6826305105 100644 --- a/packages/experimental/ActivityIndicator/package.json +++ b/packages/experimental/ActivityIndicator/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -38,9 +38,9 @@ }, "devDependencies": { "@babel/core": "catalog:", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/experimental/AppearanceAdditions/eslint.config.js b/packages/experimental/AppearanceAdditions/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/AppearanceAdditions/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/AppearanceAdditions/package.json b/packages/experimental/AppearanceAdditions/package.json index 5aa44148050..e2b36c44079 100644 --- a/packages/experimental/AppearanceAdditions/package.json +++ b/packages/experimental/AppearanceAdditions/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -40,9 +40,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/experimental/Avatar/eslint.config.js b/packages/experimental/Avatar/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/Avatar/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/Avatar/package.json b/packages/experimental/Avatar/package.json index 40d25a4429b..68cfe14150d 100644 --- a/packages/experimental/Avatar/package.json +++ b/packages/experimental/Avatar/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -39,9 +39,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/experimental/Checkbox/eslint.config.js b/packages/experimental/Checkbox/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/Checkbox/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/Checkbox/package.json b/packages/experimental/Checkbox/package.json index fe49707af8d..f82b902bc03 100644 --- a/packages/experimental/Checkbox/package.json +++ b/packages/experimental/Checkbox/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -39,9 +39,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/experimental/Drawer/eslint.config.js b/packages/experimental/Drawer/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/Drawer/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/Drawer/package.json b/packages/experimental/Drawer/package.json index 2bec16bd57f..4bfe8c690f3 100644 --- a/packages/experimental/Drawer/package.json +++ b/packages/experimental/Drawer/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -41,10 +41,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/experimental/Dropdown/eslint.config.js b/packages/experimental/Dropdown/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/Dropdown/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/Dropdown/package.json b/packages/experimental/Dropdown/package.json index 95320686509..4c124633538 100644 --- a/packages/experimental/Dropdown/package.json +++ b/packages/experimental/Dropdown/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -44,9 +44,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@react-native-community/cli": "^20.0.0", diff --git a/packages/experimental/Expander/eslint.config.js b/packages/experimental/Expander/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/Expander/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/Expander/package.json b/packages/experimental/Expander/package.json index 4cc9ac3203d..e6b1b1e2ea5 100644 --- a/packages/experimental/Expander/package.json +++ b/packages/experimental/Expander/package.json @@ -27,7 +27,7 @@ "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-api": "fluentui-scripts update-api-extractor", @@ -41,9 +41,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/experimental/MenuButton/eslint.config.js b/packages/experimental/MenuButton/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/MenuButton/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/MenuButton/package.json b/packages/experimental/MenuButton/package.json index b0833efe400..2c5159a0bf3 100644 --- a/packages/experimental/MenuButton/package.json +++ b/packages/experimental/MenuButton/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -41,10 +41,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/experimental/NativeDatePicker/eslint.config.js b/packages/experimental/NativeDatePicker/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/NativeDatePicker/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/NativeDatePicker/package.json b/packages/experimental/NativeDatePicker/package.json index 91411626ba3..08c21e056b5 100644 --- a/packages/experimental/NativeDatePicker/package.json +++ b/packages/experimental/NativeDatePicker/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -36,8 +36,8 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/experimental/NativeFontMetrics/eslint.config.js b/packages/experimental/NativeFontMetrics/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/NativeFontMetrics/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/NativeFontMetrics/package.json b/packages/experimental/NativeFontMetrics/package.json index ba7a851f1d6..08b0c2b0428 100644 --- a/packages/experimental/NativeFontMetrics/package.json +++ b/packages/experimental/NativeFontMetrics/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -39,8 +39,8 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/experimental/Overflow/eslint.config.js b/packages/experimental/Overflow/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/Overflow/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/Overflow/package.json b/packages/experimental/Overflow/package.json index e0e6c7ee82b..e520912260e 100644 --- a/packages/experimental/Overflow/package.json +++ b/packages/experimental/Overflow/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -40,9 +40,9 @@ "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", "@fluentui-react-native/button": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/menu": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", diff --git a/packages/experimental/Popover/eslint.config.js b/packages/experimental/Popover/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/Popover/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/Popover/package.json b/packages/experimental/Popover/package.json index 8eac64fe6c3..1776fac9d0c 100644 --- a/packages/experimental/Popover/package.json +++ b/packages/experimental/Popover/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -39,9 +39,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/experimental/Shadow/eslint.config.js b/packages/experimental/Shadow/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/Shadow/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/Shadow/package.json b/packages/experimental/Shadow/package.json index 9a2823f8adf..348420082c8 100644 --- a/packages/experimental/Shadow/package.json +++ b/packages/experimental/Shadow/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -41,9 +41,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@react-native-community/cli": "^20.0.0", diff --git a/packages/experimental/Shimmer/eslint.config.js b/packages/experimental/Shimmer/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/Shimmer/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/Shimmer/package.json b/packages/experimental/Shimmer/package.json index a92e77471d1..5a53dd5206b 100644 --- a/packages/experimental/Shimmer/package.json +++ b/packages/experimental/Shimmer/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -42,10 +42,10 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/experimental/Spinner/eslint.config.js b/packages/experimental/Spinner/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/Spinner/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/Spinner/package.json b/packages/experimental/Spinner/package.json index 2ed2b59cc01..db9540551c7 100644 --- a/packages/experimental/Spinner/package.json +++ b/packages/experimental/Spinner/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -41,9 +41,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/experimental/Tooltip/eslint.config.js b/packages/experimental/Tooltip/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/Tooltip/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/Tooltip/package.json b/packages/experimental/Tooltip/package.json index f9b60f6a389..642ce0c2436 100644 --- a/packages/experimental/Tooltip/package.json +++ b/packages/experimental/Tooltip/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -40,9 +40,9 @@ "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", "@fluentui-react-native/button": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/experimental/VibrancyView/eslint.config.js b/packages/experimental/VibrancyView/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/experimental/VibrancyView/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/experimental/VibrancyView/package.json b/packages/experimental/VibrancyView/package.json index f8c69996cb8..f893f1a3790 100644 --- a/packages/experimental/VibrancyView/package.json +++ b/packages/experimental/VibrancyView/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -39,8 +39,8 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.81.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/framework-base/eslint.config.js b/packages/framework-base/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/framework-base/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/framework-base/package.json b/packages/framework-base/package.json index 664595cfa42..aae0b50ee68 100644 --- a/packages/framework-base/package.json +++ b/packages/framework-base/package.json @@ -34,7 +34,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -43,8 +43,8 @@ }, "devDependencies": { "@babel/core": "catalog:", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/react-configs": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@types/jest": "^29.0.0", diff --git a/packages/framework/composition/eslint.config.js b/packages/framework/composition/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/framework/composition/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/framework/composition/package.json b/packages/framework/composition/package.json index fca31e12f37..68f7beec7b6 100644 --- a/packages/framework/composition/package.json +++ b/packages/framework/composition/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -43,9 +43,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native/babel-preset": "^0.81.0", "@types/react": "~19.1.4", diff --git a/packages/framework/framework/eslint.config.js b/packages/framework/framework/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/framework/framework/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/framework/framework/package.json b/packages/framework/framework/package.json index e44ceda1b64..26eba9074c0 100644 --- a/packages/framework/framework/package.json +++ b/packages/framework/framework/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start-test": "fluentui-scripts jest-watch", "start:tester": "rnx-cli start", @@ -48,9 +48,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/framework/theme/eslint.config.js b/packages/framework/theme/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/framework/theme/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/framework/theme/package.json b/packages/framework/theme/package.json index 70c1198fe50..e8bf0f2f21e 100644 --- a/packages/framework/theme/package.json +++ b/packages/framework/theme/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -42,9 +42,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@react-native-community/cli": "^20.0.0", diff --git a/packages/framework/themed-stylesheet/eslint.config.js b/packages/framework/themed-stylesheet/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/framework/themed-stylesheet/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/framework/themed-stylesheet/package.json b/packages/framework/themed-stylesheet/package.json index ce520a6ce35..c86b0a186e8 100644 --- a/packages/framework/themed-stylesheet/package.json +++ b/packages/framework/themed-stylesheet/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -41,9 +41,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/framework/use-slot/eslint.config.js b/packages/framework/use-slot/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/framework/use-slot/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/framework/use-slot/package.json b/packages/framework/use-slot/package.json index 64cbae3f298..62255086088 100644 --- a/packages/framework/use-slot/package.json +++ b/packages/framework/use-slot/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -41,9 +41,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/framework/use-slots/eslint.config.js b/packages/framework/use-slots/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/framework/use-slots/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/framework/use-slots/package.json b/packages/framework/use-slots/package.json index 53bc5a2aaba..7d0740d6f96 100644 --- a/packages/framework/use-slots/package.json +++ b/packages/framework/use-slots/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -42,9 +42,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/framework/use-styling/eslint.config.js b/packages/framework/use-styling/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/framework/use-styling/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/framework/use-styling/package.json b/packages/framework/use-styling/package.json index 5ee144eb775..938cb31b56c 100644 --- a/packages/framework/use-styling/package.json +++ b/packages/framework/use-styling/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -42,9 +42,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/framework/use-tokens/eslint.config.js b/packages/framework/use-tokens/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/framework/use-tokens/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/framework/use-tokens/package.json b/packages/framework/use-tokens/package.json index f8d1a1623d5..d83774d783c 100644 --- a/packages/framework/use-tokens/package.json +++ b/packages/framework/use-tokens/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -41,9 +41,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/libraries/core/eslint.config.js b/packages/libraries/core/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/libraries/core/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/libraries/core/package.json b/packages/libraries/core/package.json index 5358e019d7e..7e1bab88630 100644 --- a/packages/libraries/core/package.json +++ b/packages/libraries/core/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start-test": "fluentui-scripts jest-watch", "start:tester": "rnx-cli start", @@ -55,8 +55,8 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/theming/android-theme/eslint.config.js b/packages/theming/android-theme/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/theming/android-theme/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/theming/android-theme/package.json b/packages/theming/android-theme/package.json index 9c641f7453c..cb09593ccf7 100644 --- a/packages/theming/android-theme/package.json +++ b/packages/theming/android-theme/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -45,9 +45,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/theming/apple-theme/eslint.config.js b/packages/theming/apple-theme/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/theming/apple-theme/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/theming/apple-theme/package.json b/packages/theming/apple-theme/package.json index bcd83b1d12a..ddb47343035 100644 --- a/packages/theming/apple-theme/package.json +++ b/packages/theming/apple-theme/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -50,9 +50,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/theming/default-theme/eslint.config.js b/packages/theming/default-theme/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/theming/default-theme/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/theming/default-theme/package.json b/packages/theming/default-theme/package.json index a494e4118fc..8637f42ba72 100644 --- a/packages/theming/default-theme/package.json +++ b/packages/theming/default-theme/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -46,9 +46,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/theming/theme-tokens/eslint.config.js b/packages/theming/theme-tokens/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/theming/theme-tokens/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/theming/theme-tokens/package.json b/packages/theming/theme-tokens/package.json index 5b487d8eed3..c6920a367b2 100644 --- a/packages/theming/theme-tokens/package.json +++ b/packages/theming/theme-tokens/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -46,8 +46,8 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/theming/theme-types/eslint.config.js b/packages/theming/theme-types/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/theming/theme-types/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/theming/theme-types/package.json b/packages/theming/theme-types/package.json index 3754e944713..e4ded4fc5b7 100644 --- a/packages/theming/theme-types/package.json +++ b/packages/theming/theme-types/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -38,8 +38,8 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/theming/theming-utils/eslint.config.js b/packages/theming/theming-utils/eslint.config.js deleted file mode 100644 index 04916a6adb2..00000000000 --- a/packages/theming/theming-utils/eslint.config.js +++ /dev/null @@ -1,10 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = [ - ...baseConfig, - { - rules: { - '@typescript-eslint/no-var-requires': 0, - }, - }, -]; diff --git a/packages/theming/theming-utils/oxlint.config.ts b/packages/theming/theming-utils/oxlint.config.ts new file mode 100644 index 00000000000..d1e027f0edf --- /dev/null +++ b/packages/theming/theming-utils/oxlint.config.ts @@ -0,0 +1,9 @@ +import baseConfig from '@fluentui-react-native/lint-config-rules'; +import { defineConfig } from 'oxlint'; + +export default defineConfig({ + extends: [baseConfig], + rules: { + 'typescript/no-var-requires': 'off', + }, +}); diff --git a/packages/theming/theming-utils/package.json b/packages/theming/theming-utils/package.json index f3e79ab99ce..ca3afa9ee5c 100644 --- a/packages/theming/theming-utils/package.json +++ b/packages/theming/theming-utils/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -41,9 +41,9 @@ "@fluentui-react-native/babel-config": "workspace:*", "@fluentui-react-native/design-tokens-win32": "^0.53.0", "@fluentui-react-native/design-tokens-windows": "^0.53.0", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/theming/win32-theme/eslint.config.js b/packages/theming/win32-theme/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/theming/win32-theme/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/theming/win32-theme/package.json b/packages/theming/win32-theme/package.json index 0b758ddeb4a..b6b807a321c 100644 --- a/packages/theming/win32-theme/package.json +++ b/packages/theming/win32-theme/package.json @@ -28,7 +28,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "start": "fluentui-scripts dev", "start-test": "fluentui-scripts jest-watch", @@ -47,9 +47,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", "@react-native-community/cli": "^20.0.0", diff --git a/packages/utils/adapters/eslint.config.js b/packages/utils/adapters/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/utils/adapters/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/utils/adapters/package.json b/packages/utils/adapters/package.json index 055492ec06a..32a3a605779 100644 --- a/packages/utils/adapters/package.json +++ b/packages/utils/adapters/package.json @@ -27,15 +27,15 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" }, "devDependencies": { "@babel/core": "catalog:", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/react-configs": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@office-iss/react-native-win32": "^0.81.0", diff --git a/packages/utils/interactive-hooks/eslint.config.js b/packages/utils/interactive-hooks/eslint.config.js deleted file mode 100644 index 04916a6adb2..00000000000 --- a/packages/utils/interactive-hooks/eslint.config.js +++ /dev/null @@ -1,10 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = [ - ...baseConfig, - { - rules: { - '@typescript-eslint/no-var-requires': 0, - }, - }, -]; diff --git a/packages/utils/interactive-hooks/oxlint.config.ts b/packages/utils/interactive-hooks/oxlint.config.ts new file mode 100644 index 00000000000..d1e027f0edf --- /dev/null +++ b/packages/utils/interactive-hooks/oxlint.config.ts @@ -0,0 +1,9 @@ +import baseConfig from '@fluentui-react-native/lint-config-rules'; +import { defineConfig } from 'oxlint'; + +export default defineConfig({ + extends: [baseConfig], + rules: { + 'typescript/no-var-requires': 'off', + }, +}); diff --git a/packages/utils/interactive-hooks/package.json b/packages/utils/interactive-hooks/package.json index 1ba8bd5d65c..0f4f3cb6291 100644 --- a/packages/utils/interactive-hooks/package.json +++ b/packages/utils/interactive-hooks/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -39,9 +39,9 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/test-tools": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", diff --git a/packages/utils/styling/eslint.config.js b/packages/utils/styling/eslint.config.js deleted file mode 100644 index 04916a6adb2..00000000000 --- a/packages/utils/styling/eslint.config.js +++ /dev/null @@ -1,10 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = [ - ...baseConfig, - { - rules: { - '@typescript-eslint/no-var-requires': 0, - }, - }, -]; diff --git a/packages/utils/styling/oxlint.config.ts b/packages/utils/styling/oxlint.config.ts new file mode 100644 index 00000000000..d1e027f0edf --- /dev/null +++ b/packages/utils/styling/oxlint.config.ts @@ -0,0 +1,9 @@ +import baseConfig from '@fluentui-react-native/lint-config-rules'; +import { defineConfig } from 'oxlint'; + +export default defineConfig({ + extends: [baseConfig], + rules: { + 'typescript/no-var-requires': 'off', + }, +}); diff --git a/packages/utils/styling/package.json b/packages/utils/styling/package.json index 8b695262a2a..b72366e6b00 100644 --- a/packages/utils/styling/package.json +++ b/packages/utils/styling/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -35,8 +35,8 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/packages/utils/test-tools/eslint.config.js b/packages/utils/test-tools/eslint.config.js deleted file mode 100644 index 04916a6adb2..00000000000 --- a/packages/utils/test-tools/eslint.config.js +++ /dev/null @@ -1,10 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = [ - ...baseConfig, - { - rules: { - '@typescript-eslint/no-var-requires': 0, - }, - }, -]; diff --git a/packages/utils/test-tools/oxlint.config.ts b/packages/utils/test-tools/oxlint.config.ts new file mode 100644 index 00000000000..d1e027f0edf --- /dev/null +++ b/packages/utils/test-tools/oxlint.config.ts @@ -0,0 +1,9 @@ +import baseConfig from '@fluentui-react-native/lint-config-rules'; +import { defineConfig } from 'oxlint'; + +export default defineConfig({ + extends: [baseConfig], + rules: { + 'typescript/no-var-requires': 'off', + }, +}); diff --git a/packages/utils/test-tools/package.json b/packages/utils/test-tools/package.json index 79d6bc139c6..3a1e83e3b63 100644 --- a/packages/utils/test-tools/package.json +++ b/packages/utils/test-tools/package.json @@ -28,16 +28,16 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "update-snapshots": "fluentui-scripts jest -u" }, "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/jest-config": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@fluentui-react-native/theme-types": "workspace:*", "@react-native/babel-preset": "^0.81.0", diff --git a/packages/utils/tokens/eslint.config.js b/packages/utils/tokens/eslint.config.js deleted file mode 100644 index c98098e0680..00000000000 --- a/packages/utils/tokens/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('@fluentui-react-native/eslint-config-rules'); - -module.exports = baseConfig; diff --git a/packages/utils/tokens/package.json b/packages/utils/tokens/package.json index a9fa73368ba..7e3bc1a0fec 100644 --- a/packages/utils/tokens/package.json +++ b/packages/utils/tokens/package.json @@ -27,7 +27,7 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", - "lint": "fluentui-scripts eslint", + "lint": "fluentui-scripts lint", "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u" @@ -39,8 +39,8 @@ "devDependencies": { "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", - "@fluentui-react-native/eslint-config-rules": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", + "@fluentui-react-native/lint-config-rules": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", "@react-native-community/cli-platform-android": "^20.0.0", diff --git a/scripts/dynamic.extensions.mjs b/scripts/dynamic.extensions.mjs index 939c0f47447..7223e09006b 100644 --- a/scripts/dynamic.extensions.mjs +++ b/scripts/dynamic.extensions.mjs @@ -66,7 +66,7 @@ export default function ({ cwd, manifest }) { ...conditionallyAdd(['typescript', '@types/node', '@types/jest', '@typescript/native-preview'], manifest, () => fs.existsSync(path.join(cwd, 'tsconfig.json')), ), - ...conditionallyAdd(['eslint'], manifest, enableLinting), + ...conditionallyAdd(['oxlint', 'oxlint-tsgolint'], manifest, enableLinting), ...conditionallyAdd(['oxfmt'], manifest, () => addOxfmt(manifest)), ...conditionallyAdd(['jest', '@types/jest'], manifest, () => addJest(cwd, manifest)), }, diff --git a/scripts/eslint.config.js b/scripts/eslint.config.js deleted file mode 100644 index d9e3f1445b2..00000000000 --- a/scripts/eslint.config.js +++ /dev/null @@ -1,38 +0,0 @@ -import js from '@eslint/js'; -// @ts-expect-error - no types available -import rnx from '@rnx-kit/eslint-plugin'; - -// We keep a separate ESLint config to avoid circular dependency -export default [ - ...rnx.configs.strict, - ...rnx.configs.stylistic, - js.configs.recommended, - { - languageOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - globals: { - __dirname: 'readonly', - console: 'readonly', - module: 'readonly', - process: 'readonly', - require: 'readonly', - }, - }, - rules: { - 'no-restricted-exports': [ - 'error', - { - restrictDefaultExports: { - direct: false, - named: true, - defaultFrom: true, - namedFrom: true, - namespaceFrom: true, - }, - }, - ], - '@typescript-eslint/consistent-type-definitions': ['error', 'type'], - }, - }, -]; diff --git a/scripts/oxlint.config.ts b/scripts/oxlint.config.ts new file mode 100644 index 00000000000..028370112ac --- /dev/null +++ b/scripts/oxlint.config.ts @@ -0,0 +1,22 @@ +import config from '../packages/configs/lint-config-rules/private.ts'; +import { defineConfig } from 'oxlint'; + +export default defineConfig({ + extends: [config], + rules: { + '@rnx-kit/no-foreach-with-captured-variables': 'off', + 'import/no-default-export': 'off', + 'no-restricted-exports': [ + 'error', + { + restrictDefaultExports: { + direct: false, + named: true, + defaultFrom: true, + namedFrom: true, + namespaceFrom: true, + }, + }, + ], + }, +}); diff --git a/scripts/package.json b/scripts/package.json index f24ac900e83..fe1b200a6b0 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -23,12 +23,11 @@ "lint-package": "node ./src/cli.mjs lint-package" }, "devDependencies": { - "@eslint/js": "^9.0.0", "@fluentui-react-native/kit-config": "workspace:*", "@rnx-kit/align-deps": "catalog:", "@rnx-kit/config": "catalog:", - "@rnx-kit/eslint-plugin": "catalog:", "@rnx-kit/jest-preset": "catalog:", + "@rnx-kit/oxlint-config": "^1.0.3", "@rnx-kit/reporter": "catalog:", "@rnx-kit/tools-packages": "catalog:", "@rnx-kit/tools-typescript": "catalog:", @@ -40,12 +39,13 @@ "chalk": "^4.0.0", "clipanion": "^4.0.0-rc.4", "depcheck": "^1.0.0", - "eslint": "^9.0.0", "find-up": "^5.0.0", "jest": "^29.2.1", "knip": "catalog:", "lage": "catalog:", "micromatch": "^4.0.8", + "oxlint": "^1.57.0", + "oxlint-tsgolint": "^0.17.4", "react": "18.2.0", "react-native": "^0.74.0", "typescript": "^5.8.0", diff --git a/scripts/src/cli.mjs b/scripts/src/cli.mjs index 79203e1b3f6..8220c1e8462 100755 --- a/scripts/src/cli.mjs +++ b/scripts/src/cli.mjs @@ -5,7 +5,7 @@ import { Builtins, Cli } from 'clipanion'; import { BuildCommand } from './tasks/build.ts'; import { CleanCommand } from './tasks/clean.js'; import { FormatCommand } from './tasks/format.js'; -import { LintCommand } from './tasks/eslint.js'; +import { LintCommand } from './tasks/lint.js'; import { LintPackageCommand } from './tasks/lintPackage.ts'; import { JestCommand } from './tasks/jest.js'; import { CheckPublishingCommand } from './tasks/checkPublishingTask.js'; diff --git a/scripts/src/preinstall/tool-versions.js b/scripts/src/preinstall/tool-versions.js index b67261a22e1..d062f5c176e 100644 --- a/scripts/src/preinstall/tool-versions.js +++ b/scripts/src/preinstall/tool-versions.js @@ -25,6 +25,7 @@ const devToolVersions = { '@react-native-community/cli-platform-android': '^13.6.4', '@react-native-community/cli-platform-ios': '^13.6.4', '@rnx-kit/eslint-plugin': '^0.8.6', + '@rnx-kit/oxlint-config': '^1.0.3', '@rnx-kit/jest-preset': '^0.2.1', '@rnx-kit/tools-packages': '^0.1.1', '@rnx-kit/tools-typescript': '^0.1.1', @@ -47,6 +48,8 @@ const devToolVersions = { jsdom: '^25.0.0', 'metro-config': '^0.80.3', 'metro-react-native-babel-transformer': '^0.76.5', + oxlint: '^1.57.0', + 'oxlint-tsgolint': '^0.17.4', 'react-test-renderer': '18.2.0', rimraf: '^5.0.1', // Fill versions from scripts first diff --git a/scripts/src/tasks/depcheck.ts b/scripts/src/tasks/depcheck.ts index c6564ab2c0b..67ddbc5f313 100644 --- a/scripts/src/tasks/depcheck.ts +++ b/scripts/src/tasks/depcheck.ts @@ -271,5 +271,6 @@ function isTestFile(fileName: string): boolean { '**/babel.config.*', '**/jest.config.*', '**/eslint.config.*', + '**/oxlint.config.*', ]); } diff --git a/scripts/src/tasks/eslint.js b/scripts/src/tasks/eslint.js deleted file mode 100644 index 67093973031..00000000000 --- a/scripts/src/tasks/eslint.js +++ /dev/null @@ -1,27 +0,0 @@ -// @ts-check - -import { Command, Option } from 'clipanion'; -import { runScript } from '../utils/runScript.js'; -import { isFixMode } from '../utils/env.ts'; - -export class LintCommand extends Command { - /** @override */ - static paths = [['lint'], ['eslint']]; - - /** @override */ - static usage = Command.Usage({ - description: 'Lints the current package', - details: 'This command lints the current package using ESLint.', - examples: [['Lint the current package', '$0 lint']], - }); - - args = Option.Proxy(); - - async execute() { - const args = [...this.args]; - if (isFixMode()) { - args.push('--fix'); - } - return await runScript('eslint', 'src/', ...args); - } -} diff --git a/scripts/src/tasks/lint.js b/scripts/src/tasks/lint.js new file mode 100644 index 00000000000..9c1d68b9808 --- /dev/null +++ b/scripts/src/tasks/lint.js @@ -0,0 +1,52 @@ +// @ts-check + +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { Command, Option } from 'clipanion'; +import { isFixMode } from '../utils/env.ts'; + +export class LintCommand extends Command { + /** @override */ + static paths = [['lint']]; + + /** @override */ + static usage = Command.Usage({ + description: 'Lints the current package', + details: 'This command lints the current package using oxlint.', + examples: [['Lint the current package', '$0 lint']], + }); + + args = Option.Proxy(); + + async execute() { + const oxlint = new URL('./cli.js', import.meta.resolve('oxlint')); + const args = [process.argv0, fileURLToPath(oxlint), '-c', this.configPath, '--ignore-pattern=__fixtures__', ...this.args]; + + if (isFixMode()) { + args.push('--fix'); + } + + if (process.platform === 'win32') { + args.push('--threads=1'); + } + + process.argv = args; + await import(oxlint.href); + + if (process.exitCode == null) { + return 0; + } + + return typeof process.exitCode === 'number' ? process.exitCode : -1; + } + + get configPath() { + const localConfig = path.join(process.cwd(), 'oxlint.config.ts'); + if (fs.existsSync(localConfig)) { + return localConfig; + } + + return fileURLToPath(new URL('../../../packages/configs/lint-config-rules/private.ts', import.meta.url)); + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 2189f577531..96889026154 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2567,7 +2567,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.4.0, @eslint-community/eslint-utils@npm:^4.8.0, @eslint-community/eslint-utils@npm:^4.9.1": +"@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.4.0, @eslint-community/eslint-utils@npm:^4.9.1": version: 4.9.1 resolution: "@eslint-community/eslint-utils@npm:4.9.1" dependencies: @@ -2578,90 +2578,20 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.12.2": +"@eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.12.2": version: 4.12.2 resolution: "@eslint-community/regexpp@npm:4.12.2" checksum: 10c0/fddcbc66851b308478d04e302a4d771d6917a0b3740dc351513c0da9ca2eab8a1adf99f5e0aa7ab8b13fa0df005c81adeee7e63a92f3effd7d367a163b721c2d languageName: node linkType: hard -"@eslint/config-array@npm:^0.21.1": - version: 0.21.1 - resolution: "@eslint/config-array@npm:0.21.1" - dependencies: - "@eslint/object-schema": "npm:^2.1.7" - debug: "npm:^4.3.1" - minimatch: "npm:^3.1.2" - checksum: 10c0/2f657d4edd6ddcb920579b72e7a5b127865d4c3fb4dda24f11d5c4f445a93ca481aebdbd6bf3291c536f5d034458dbcbb298ee3b698bc6c9dd02900fe87eec3c - languageName: node - linkType: hard - -"@eslint/config-helpers@npm:^0.4.2": - version: 0.4.2 - resolution: "@eslint/config-helpers@npm:0.4.2" - dependencies: - "@eslint/core": "npm:^0.17.0" - checksum: 10c0/92efd7a527b2d17eb1a148409d71d80f9ac160b565ac73ee092252e8bf08ecd08670699f46b306b94f13d22e88ac88a612120e7847570dd7cdc72f234d50dcb4 - languageName: node - linkType: hard - -"@eslint/core@npm:^0.17.0": - version: 0.17.0 - resolution: "@eslint/core@npm:0.17.0" - dependencies: - "@types/json-schema": "npm:^7.0.15" - checksum: 10c0/9a580f2246633bc752298e7440dd942ec421860d1946d0801f0423830e67887e4aeba10ab9a23d281727a978eb93d053d1922a587d502942a713607f40ed704e - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^3.3.1": - version: 3.3.1 - resolution: "@eslint/eslintrc@npm:3.3.1" - dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^10.0.1" - globals: "npm:^14.0.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 10c0/b0e63f3bc5cce4555f791a4e487bf999173fcf27c65e1ab6e7d63634d8a43b33c3693e79f192cbff486d7df1be8ebb2bd2edc6e70ddd486cbfa84a359a3e3b41 - languageName: node - linkType: hard - -"@eslint/js@npm:9.39.2, @eslint/js@npm:^9.0.0": - version: 9.39.2 - resolution: "@eslint/js@npm:9.39.2" - checksum: 10c0/00f51c52b04ac79faebfaa65a9652b2093b9c924e945479f1f3945473f78aee83cbc76c8d70bbffbf06f7024626575b16d97b66eab16182e1d0d39daff2f26f5 - languageName: node - linkType: hard - -"@eslint/object-schema@npm:^2.1.7": - version: 2.1.7 - resolution: "@eslint/object-schema@npm:2.1.7" - checksum: 10c0/936b6e499853d1335803f556d526c86f5fe2259ed241bc665000e1d6353828edd913feed43120d150adb75570cae162cf000b5b0dfc9596726761c36b82f4e87 - languageName: node - linkType: hard - -"@eslint/plugin-kit@npm:^0.4.1": - version: 0.4.1 - resolution: "@eslint/plugin-kit@npm:0.4.1" - dependencies: - "@eslint/core": "npm:^0.17.0" - levn: "npm:^0.4.1" - checksum: 10c0/51600f78b798f172a9915dffb295e2ffb44840d583427bc732baf12ecb963eb841b253300e657da91d890f4b323d10a1bd12934bf293e3018d8bb66fdce5217b - languageName: node - linkType: hard - "@fluentui-react-native/adapters@workspace:*, @fluentui-react-native/adapters@workspace:packages/utils/adapters": version: 0.0.0-use.local resolution: "@fluentui-react-native/adapters@workspace:packages/utils/adapters" dependencies: "@babel/core": "catalog:" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/react-configs": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@office-iss/react-native-win32": "npm:^0.81.0" @@ -2699,10 +2629,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme": "workspace:*" "@fluentui-react-native/theme-tokens": "workspace:*" @@ -2746,11 +2676,11 @@ __metadata: "@fluentui-react-native/default-theme": "workspace:*" "@fluentui-react-native/design-tokens-ios": "npm:^0.53.0" "@fluentui-react-native/design-tokens-macos": "npm:^0.53.0" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/experimental-appearance-additions": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme": "workspace:*" "@fluentui-react-native/theme-tokens": "workspace:*" @@ -2794,12 +2724,12 @@ __metadata: "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/badge": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/icon": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme-tokens": "workspace:*" "@fluentui-react-native/theming-utils": "workspace:*" @@ -2868,13 +2798,13 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/experimental-shadow": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/icon": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@fluentui-react-native/text": "workspace:*" @@ -2924,7 +2854,6 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/experimental-activity-indicator": "workspace:*" "@fluentui-react-native/experimental-shadow": "workspace:*" "@fluentui-react-native/framework": "workspace:*" @@ -2933,6 +2862,7 @@ __metadata: "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/pressable": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/styling-utils": "workspace:*" @@ -2987,9 +2917,9 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/tokens": "workspace:*" "@office-iss/react-native-win32": "npm:^0.74.0" @@ -3034,12 +2964,12 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/pressable": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/styling-utils": "workspace:*" @@ -3093,13 +3023,13 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/icon": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@fluentui-react-native/text": "workspace:*" @@ -3146,8 +3076,8 @@ __metadata: dependencies: "@babel/core": "catalog:" "@babel/preset-env": "catalog:" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/react-configs": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" @@ -3166,10 +3096,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/use-slots": "workspace:*" "@fluentui-react-native/use-styling": "workspace:*" @@ -3196,13 +3126,13 @@ __metadata: "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/callout": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/focus-zone": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/icon": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/pressable": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/text": "workspace:*" @@ -3253,10 +3183,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme": "workspace:*" "@fluentui-react-native/theme-tokens": "workspace:*" @@ -3564,12 +3494,12 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/icon": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@fluentui-react-native/text": "workspace:*" @@ -3615,12 +3545,12 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme-tokens": "workspace:*" "@fluentui-react-native/use-styling": "workspace:*" @@ -3664,11 +3594,11 @@ __metadata: "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/button": "workspace:*" "@fluentui-react-native/callout": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@fluentui-react-native/text": "workspace:*" @@ -3710,9 +3640,9 @@ __metadata: dependencies: "@babel/core": "catalog:" "@babel/runtime": "catalog:" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/focus-zone": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@office-iss/react-native-win32": "npm:^0.81.0" "@office-iss/rex-win32": "npm:0.73.11-devmain.16.0.17615.15030" @@ -3764,29 +3694,15 @@ __metadata: languageName: unknown linkType: soft -"@fluentui-react-native/eslint-config-rules@workspace:*, @fluentui-react-native/eslint-config-rules@workspace:packages/configs/eslint-config-rules": - version: 0.0.0-use.local - resolution: "@fluentui-react-native/eslint-config-rules@workspace:packages/configs/eslint-config-rules" - dependencies: - "@fluentui-react-native/kit-config": "workspace:*" - "@fluentui-react-native/scripts": "workspace:*" - "@microsoft/eslint-plugin-sdl": "npm:^1.1.0" - "@rnx-kit/eslint-plugin": "catalog:" - "@types/eslint": "npm:^9.6.1" - "@types/node": "catalog:" - eslint: "npm:^9.39.2" - languageName: unknown - linkType: soft - "@fluentui-react-native/experimental-activity-indicator@workspace:*, @fluentui-react-native/experimental-activity-indicator@workspace:packages/experimental/ActivityIndicator": version: 0.0.0-use.local resolution: "@fluentui-react-native/experimental-activity-indicator@workspace:packages/experimental/ActivityIndicator" dependencies: "@babel/core": "catalog:" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -3826,9 +3742,9 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -3866,10 +3782,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -3908,10 +3824,10 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/checkbox": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@office-iss/react-native-win32": "npm:^0.74.0" "@react-native-community/cli": "npm:^20.0.0" @@ -3951,10 +3867,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -3992,11 +3908,11 @@ __metadata: "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/button": "workspace:*" "@fluentui-react-native/contextual-menu": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/tokens": "workspace:*" "@office-iss/react-native-win32": "npm:^0.74.0" @@ -4039,8 +3955,8 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -4065,8 +3981,8 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -4093,11 +4009,11 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/pressable": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" @@ -4139,11 +4055,11 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theming-utils": "workspace:*" "@fluentui-react-native/tokens": "workspace:*" @@ -4189,10 +4105,10 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@office-iss/react-native-win32": "npm:^0.74.0" "@react-native-community/cli": "npm:^20.0.0" @@ -4235,10 +4151,10 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@office-iss/react-native-win32": "npm:^0.74.0" "@react-native-community/cli": "npm:^20.0.0" @@ -4280,8 +4196,8 @@ __metadata: resolution: "@fluentui-react-native/framework-base@workspace:packages/framework-base" dependencies: "@babel/core": "catalog:" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/react-configs": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@types/jest": "npm:^29.0.0" @@ -4306,10 +4222,10 @@ __metadata: "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/composition": "workspace:*" "@fluentui-react-native/default-theme": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme-types": "workspace:*" "@fluentui-react-native/tokens": "workspace:*" @@ -4356,11 +4272,11 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@fluentui-react-native/text": "workspace:*" @@ -4404,13 +4320,13 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/icon": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/styling-utils": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" @@ -4458,10 +4374,10 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@office-iss/react-native-win32": "npm:^0.74.0" @@ -4504,8 +4420,8 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native/babel-preset": "npm:^0.81.0" "@rnx-kit/jest-preset": "catalog:" @@ -4535,12 +4451,12 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@fluentui-react-native/text": "workspace:*" @@ -4580,6 +4496,19 @@ __metadata: languageName: unknown linkType: soft +"@fluentui-react-native/lint-config-rules@workspace:*, @fluentui-react-native/lint-config-rules@workspace:packages/configs/lint-config-rules": + version: 0.0.0-use.local + resolution: "@fluentui-react-native/lint-config-rules@workspace:packages/configs/lint-config-rules" + dependencies: + "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/scripts": "workspace:*" + "@rnx-kit/oxlint-config": "npm:^1.0.3" + "@types/node": "catalog:" + oxlint: "npm:^1.57.0" + typescript: "npm:^5.8.0" + languageName: unknown + linkType: soft + "@fluentui-react-native/menu-button@workspace:*, @fluentui-react-native/menu-button@workspace:packages/components/MenuButton": version: 0.0.0-use.local resolution: "@fluentui-react-native/menu-button@workspace:packages/components/MenuButton" @@ -4588,11 +4517,11 @@ __metadata: "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/button": "workspace:*" "@fluentui-react-native/contextual-menu": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/icon": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/tokens": "workspace:*" "@office-iss/react-native-win32": "npm:^0.74.0" @@ -4641,7 +4570,6 @@ __metadata: "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/button": "workspace:*" "@fluentui-react-native/callout": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/focus-zone": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" @@ -4649,6 +4577,7 @@ __metadata: "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@fluentui-react-native/text": "workspace:*" @@ -4699,7 +4628,6 @@ __metadata: "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/button": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/experimental-appearance-additions": "workspace:*" "@fluentui-react-native/experimental-shadow": "workspace:*" "@fluentui-react-native/framework": "workspace:*" @@ -4708,6 +4636,7 @@ __metadata: "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/pressable": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" @@ -4757,11 +4686,11 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/button": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/menu": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" @@ -4802,10 +4731,10 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme-tokens": "workspace:*" "@fluentui-react-native/tokens": "workspace:*" @@ -4849,10 +4778,10 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/persona-coin": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/tokens": "workspace:*" @@ -4895,10 +4824,10 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -4935,9 +4864,9 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -4976,13 +4905,13 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/focus-zone": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/pressable": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" @@ -5061,11 +4990,11 @@ __metadata: "@rnx-kit/lint-lockfile": "catalog:" babel-jest: "npm:^29.7.0" cross-env: "catalog:" - eslint: "npm:^9.39.2" - eslint-plugin-import: "npm:^2.32.0" lage: "catalog:" markdown-link-check: "npm:^3.8.7" oxfmt: "npm:^0.35.0" + oxlint: "npm:^1.57.0" + oxlint-tsgolint: "npm:^0.17.4" typescript: "npm:^5.8.0" zx: "npm:^8.2.4" languageName: unknown @@ -5075,12 +5004,11 @@ __metadata: version: 0.0.0-use.local resolution: "@fluentui-react-native/scripts@workspace:scripts" dependencies: - "@eslint/js": "npm:^9.0.0" "@fluentui-react-native/kit-config": "workspace:*" "@rnx-kit/align-deps": "catalog:" "@rnx-kit/config": "catalog:" - "@rnx-kit/eslint-plugin": "catalog:" "@rnx-kit/jest-preset": "catalog:" + "@rnx-kit/oxlint-config": "npm:^1.0.3" "@rnx-kit/reporter": "catalog:" "@rnx-kit/tools-packages": "catalog:" "@rnx-kit/tools-typescript": "catalog:" @@ -5092,12 +5020,13 @@ __metadata: chalk: "npm:^4.0.0" clipanion: "npm:^4.0.0-rc.4" depcheck: "npm:^1.0.0" - eslint: "npm:^9.0.0" find-up: "npm:^5.0.0" jest: "npm:^29.2.1" knip: "catalog:" lage: "catalog:" micromatch: "npm:^4.0.8" + oxlint: "npm:^1.57.0" + oxlint-tsgolint: "npm:^0.17.4" react: "npm:18.2.0" react-native: "npm:^0.74.0" typescript: "npm:^5.8.0" @@ -5114,11 +5043,11 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme-tokens": "workspace:*" "@fluentui-react-native/use-styling": "workspace:*" @@ -5160,10 +5089,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/text": "workspace:*" "@fluentui-react-native/theme-tokens": "workspace:*" @@ -5206,11 +5135,11 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/text": "workspace:*" "@fluentui-react-native/tokens": "workspace:*" @@ -5255,8 +5184,8 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -5281,12 +5210,12 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@fluentui-react-native/text": "workspace:*" @@ -5332,7 +5261,6 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/focus-zone": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" @@ -5340,6 +5268,7 @@ __metadata: "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@fluentui-react-native/text": "workspace:*" @@ -5386,9 +5315,9 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme-types": "workspace:*" "@react-native/babel-preset": "npm:^0.81.0" @@ -5428,7 +5357,6 @@ __metadata: "@fluentui-react-native/drawer": "workspace:*" "@fluentui-react-native/dropdown": "workspace:*" "@fluentui-react-native/e2e-testing": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/experimental-activity-indicator": "workspace:*" "@fluentui-react-native/experimental-appearance-additions": "workspace:*" "@fluentui-react-native/experimental-avatar": "workspace:*" @@ -5446,6 +5374,7 @@ __metadata: "@fluentui-react-native/input": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/menu": "workspace:*" "@fluentui-react-native/menu-button": "workspace:*" "@fluentui-react-native/notification": "workspace:*" @@ -5571,8 +5500,8 @@ __metadata: "@babel/core": "catalog:" "@babel/runtime": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/tester-core": "workspace:*" "@office-iss/react-native-win32": "npm:^0.81.0" @@ -5614,8 +5543,8 @@ __metadata: "@babel/core": "catalog:" "@babel/runtime": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/tester-core": "workspace:*" "@office-iss/react-native-win32": "npm:^0.74.0" @@ -5653,7 +5582,6 @@ __metadata: "@babel/runtime": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/callout": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/experimental-appearance-additions": "workspace:*" "@fluentui-react-native/experimental-avatar": "workspace:*" "@fluentui-react-native/experimental-checkbox": "workspace:*" @@ -5663,6 +5591,7 @@ __metadata: "@fluentui-react-native/experimental-shimmer": "workspace:*" "@fluentui-react-native/focus-zone": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/menu-button": "workspace:*" "@fluentui-react-native/radio-group": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" @@ -5715,12 +5644,12 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@fluentui-react-native/theme-tokens": "workspace:*" @@ -5767,8 +5696,8 @@ __metadata: "@fluentui-react-native/design-tokens-ios": "npm:^0.53.0" "@fluentui-react-native/design-tokens-win32": "npm:^0.53.0" "@fluentui-react-native/design-tokens-windows": "npm:^0.53.0" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme-types": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" @@ -5795,8 +5724,8 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -5821,10 +5750,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@fluentui-react-native/theme-types": "workspace:*" @@ -5852,10 +5781,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -5883,9 +5812,9 @@ __metadata: "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/design-tokens-win32": "npm:^0.53.0" "@fluentui-react-native/design-tokens-windows": "npm:^0.53.0" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme-types": "workspace:*" "@fluentui-react-native/tokens": "workspace:*" @@ -5925,8 +5854,8 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme-types": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" @@ -5965,10 +5894,10 @@ __metadata: "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/button": "workspace:*" "@fluentui-react-native/callout": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" "@office-iss/react-native-win32": "npm:^0.74.0" @@ -6007,10 +5936,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -6038,10 +5967,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/use-slot": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" @@ -6069,10 +5998,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/use-tokens": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" @@ -6101,10 +6030,10 @@ __metadata: dependencies: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" "@react-native-community/cli-platform-android": "npm:^20.0.0" @@ -6133,8 +6062,8 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/adapters": "workspace:*" "@fluentui-react-native/babel-config": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@office-iss/react-native-win32": "npm:^0.81.0" "@react-native-community/cli": "npm:^20.0.0" @@ -6173,10 +6102,10 @@ __metadata: "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/default-theme": "workspace:*" "@fluentui-react-native/design-tokens-win32": "npm:^0.53.0" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/jest-config": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme": "workspace:*" "@fluentui-react-native/theme-tokens": "workspace:*" @@ -6235,12 +6164,12 @@ __metadata: "@fluentui-react-native/callout": "workspace:*" "@fluentui-react-native/checkbox": "workspace:*" "@fluentui-react-native/contextual-menu": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/focus-trap-zone": "workspace:*" "@fluentui-react-native/focus-zone": "workspace:*" "@fluentui-react-native/interactive-hooks": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" "@fluentui-react-native/link": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/menu-button": "workspace:*" "@fluentui-react-native/persona": "workspace:*" "@fluentui-react-native/persona-coin": "workspace:*" @@ -6346,44 +6275,6 @@ __metadata: languageName: node linkType: hard -"@humanfs/core@npm:^0.19.1": - version: 0.19.1 - resolution: "@humanfs/core@npm:0.19.1" - checksum: 10c0/aa4e0152171c07879b458d0e8a704b8c3a89a8c0541726c6b65b81e84fd8b7564b5d6c633feadc6598307d34564bd53294b533491424e8e313d7ab6c7bc5dc67 - languageName: node - linkType: hard - -"@humanfs/node@npm:^0.16.6": - version: 0.16.6 - resolution: "@humanfs/node@npm:0.16.6" - dependencies: - "@humanfs/core": "npm:^0.19.1" - "@humanwhocodes/retry": "npm:^0.3.0" - checksum: 10c0/8356359c9f60108ec204cbd249ecd0356667359b2524886b357617c4a7c3b6aace0fd5a369f63747b926a762a88f8a25bc066fa1778508d110195ce7686243e1 - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 - languageName: node - linkType: hard - -"@humanwhocodes/retry@npm:^0.3.0": - version: 0.3.1 - resolution: "@humanwhocodes/retry@npm:0.3.1" - checksum: 10c0/f0da1282dfb45e8120480b9e2e275e2ac9bbe1cf016d046fdad8e27cc1285c45bb9e711681237944445157b430093412b4446c1ab3fc4bb037861b5904101d3b - languageName: node - linkType: hard - -"@humanwhocodes/retry@npm:^0.4.2": - version: 0.4.3 - resolution: "@humanwhocodes/retry@npm:0.4.3" - checksum: 10c0/3775bb30087d4440b3f7406d5a057777d90e4b9f435af488a4923ef249e93615fb78565a85f173a186a076c7706a81d0d57d563a2624e4de2c5c9c66c486ce42 - languageName: node - linkType: hard - "@img/colour@npm:^1.0.0": version: 1.0.0 resolution: "@img/colour@npm:1.0.0" @@ -7372,7 +7263,7 @@ __metadata: languageName: node linkType: hard -"@microsoft/eslint-plugin-sdl@npm:^1.1.0": +"@microsoft/eslint-plugin-sdl@npm:^1.0.0": version: 1.1.0 resolution: "@microsoft/eslint-plugin-sdl@npm:1.1.0" dependencies: @@ -7972,6 +7863,181 @@ __metadata: languageName: node linkType: hard +"@oxlint-tsgolint/darwin-arm64@npm:0.17.4": + version: 0.17.4 + resolution: "@oxlint-tsgolint/darwin-arm64@npm:0.17.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/darwin-x64@npm:0.17.4": + version: 0.17.4 + resolution: "@oxlint-tsgolint/darwin-x64@npm:0.17.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/linux-arm64@npm:0.17.4": + version: 0.17.4 + resolution: "@oxlint-tsgolint/linux-arm64@npm:0.17.4" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/linux-x64@npm:0.17.4": + version: 0.17.4 + resolution: "@oxlint-tsgolint/linux-x64@npm:0.17.4" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/win32-arm64@npm:0.17.4": + version: 0.17.4 + resolution: "@oxlint-tsgolint/win32-arm64@npm:0.17.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/win32-x64@npm:0.17.4": + version: 0.17.4 + resolution: "@oxlint-tsgolint/win32-x64@npm:0.17.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@oxlint/binding-android-arm-eabi@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-android-arm-eabi@npm:1.57.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@oxlint/binding-android-arm64@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-android-arm64@npm:1.57.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-darwin-arm64@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-darwin-arm64@npm:1.57.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-darwin-x64@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-darwin-x64@npm:1.57.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxlint/binding-freebsd-x64@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-freebsd-x64@npm:1.57.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm-gnueabihf@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-arm-gnueabihf@npm:1.57.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm-musleabihf@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-arm-musleabihf@npm:1.57.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm64-gnu@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-arm64-gnu@npm:1.57.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm64-musl@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-arm64-musl@npm:1.57.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/binding-linux-ppc64-gnu@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-ppc64-gnu@npm:1.57.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-riscv64-gnu@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-riscv64-gnu@npm:1.57.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-riscv64-musl@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-riscv64-musl@npm:1.57.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/binding-linux-s390x-gnu@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-s390x-gnu@npm:1.57.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-x64-gnu@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-x64-gnu@npm:1.57.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-x64-musl@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-x64-musl@npm:1.57.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/binding-openharmony-arm64@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-openharmony-arm64@npm:1.57.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-win32-arm64-msvc@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-win32-arm64-msvc@npm:1.57.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-win32-ia32-msvc@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-win32-ia32-msvc@npm:1.57.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@oxlint/binding-win32-x64-msvc@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-win32-x64-msvc@npm:1.57.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -9643,6 +9709,23 @@ __metadata: languageName: node linkType: hard +"@rnx-kit/oxlint-config@npm:^1.0.3": + version: 1.0.3 + resolution: "@rnx-kit/oxlint-config@npm:1.0.3" + dependencies: + "@microsoft/eslint-plugin-sdl": "npm:^1.0.0" + "@react-native/eslint-plugin": "npm:^0.84.0" + "@rnx-kit/eslint-plugin": "npm:^0.9.8" + peerDependencies: + eslint: ^9.0.0 + oxlint: ^1.50.0 + peerDependenciesMeta: + eslint: + optional: true + checksum: 10c0/f1b0e813219d57321d67412dba9b800ab2496df1221852c1ce87a50e51f4c71c0f1bb5a9c6c668acd86f3af8e4e7c4fc81996a939ea2396301ba551d676c3e98 + languageName: node + linkType: hard + "@rnx-kit/react-native-host@npm:^0.5.0, @rnx-kit/react-native-host@npm:^0.5.11": version: 0.5.16 resolution: "@rnx-kit/react-native-host@npm:0.5.16" @@ -9862,13 +9945,6 @@ __metadata: languageName: node linkType: hard -"@rtsao/scc@npm:^1.1.0": - version: 1.1.0 - resolution: "@rtsao/scc@npm:1.1.0" - checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b - languageName: node - linkType: hard - "@sec-ant/readable-stream@npm:^0.4.1": version: 0.4.1 resolution: "@sec-ant/readable-stream@npm:0.4.1" @@ -10205,23 +10281,6 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:^9.6.1": - version: 9.6.1 - resolution: "@types/eslint@npm:9.6.1" - dependencies: - "@types/estree": "npm:*" - "@types/json-schema": "npm:*" - checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e - languageName: node - linkType: hard - -"@types/estree@npm:*, @types/estree@npm:^1.0.6": - version: 1.0.8 - resolution: "@types/estree@npm:1.0.8" - checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 - languageName: node - linkType: hard - "@types/graceful-fs@npm:^4.1.3": version: 4.1.6 resolution: "@types/graceful-fs@npm:4.1.6" @@ -10297,20 +10356,6 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db - languageName: node - linkType: hard - -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac - languageName: node - linkType: hard - "@types/micromatch@npm:^4.0.9": version: 4.0.9 resolution: "@types/micromatch@npm:4.0.9" @@ -10788,9 +10833,9 @@ __metadata: version: 0.0.0-use.local resolution: "@uifabricshared/foundation-composable@workspace:packages/deprecated/foundation-composable" dependencies: - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@types/react": "npm:~19.1.4" "@uifabricshared/foundation-settings": "workspace:*" @@ -10811,9 +10856,9 @@ __metadata: resolution: "@uifabricshared/foundation-compose@workspace:packages/deprecated/foundation-compose" dependencies: "@fluentui-react-native/default-theme": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/theme-types": "workspace:*" "@office-iss/react-native-win32": "npm:^0.81.0" @@ -10851,9 +10896,9 @@ __metadata: resolution: "@uifabricshared/foundation-settings@workspace:packages/deprecated/foundation-settings" dependencies: "@babel/core": "catalog:" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/react-configs": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@types/jest": "npm:^29.0.0" @@ -10874,9 +10919,9 @@ __metadata: resolution: "@uifabricshared/foundation-tokens@workspace:packages/deprecated/foundation-tokens" dependencies: "@babel/core": "catalog:" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/react-configs": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/tokens": "workspace:*" @@ -10918,9 +10963,9 @@ __metadata: resolution: "@uifabricshared/theme-registry@workspace:packages/deprecated/theme-registry" dependencies: "@babel/core": "catalog:" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/react-configs": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native/babel-preset": "npm:^0.74.0" @@ -10943,9 +10988,9 @@ __metadata: resolution: "@uifabricshared/themed-settings@workspace:packages/deprecated/themed-settings" dependencies: "@babel/core": "catalog:" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/react-configs": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@react-native/babel-preset": "npm:^0.81.0" @@ -10969,9 +11014,9 @@ __metadata: resolution: "@uifabricshared/theming-ramp@workspace:packages/deprecated/theming-ramp" dependencies: "@babel/core": "catalog:" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/react-configs": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/test-tools": "workspace:*" @@ -10998,9 +11043,9 @@ __metadata: "@babel/core": "catalog:" "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/default-theme": "workspace:*" - "@fluentui-react-native/eslint-config-rules": "workspace:*" "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" + "@fluentui-react-native/lint-config-rules": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/win32-theme": "workspace:*" "@react-native-community/cli": "npm:^20.0.0" @@ -11518,15 +11563,6 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 - languageName: node - linkType: hard - "acorn-walk@npm:^8.1.1": version: 8.3.2 resolution: "acorn-walk@npm:8.3.2" @@ -11534,7 +11570,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.15.0, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.8.2": +"acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.8.2": version: 8.15.0 resolution: "acorn@npm:8.15.0" bin: @@ -11585,18 +11621,6 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.4": - version: 6.14.0 - resolution: "ajv@npm:6.14.0" - dependencies: - fast-deep-equal: "npm:^3.1.1" - fast-json-stable-stringify: "npm:^2.0.0" - json-schema-traverse: "npm:^0.4.1" - uri-js: "npm:^4.2.2" - checksum: 10c0/a2bc39b0555dc9802c899f86990eb8eed6e366cddbf65be43d5aa7e4f3c4e1a199d5460fd7ca4fb3d864000dbbc049253b72faa83b3b30e641ca52cb29a68c22 - languageName: node - linkType: hard - "anser@npm:^1.4.9": version: 1.4.10 resolution: "anser@npm:1.4.10" @@ -12199,7 +12223,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.5, array-includes@npm:^3.1.8, array-includes@npm:^3.1.9": +"array-includes@npm:^3.1.5, array-includes@npm:^3.1.8": version: 3.1.9 resolution: "array-includes@npm:3.1.9" dependencies: @@ -12252,33 +12276,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.6": - version: 1.2.6 - resolution: "array.prototype.findlastindex@npm:1.2.6" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.4" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.9" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - es-shim-unscopables: "npm:^1.1.0" - checksum: 10c0/82559310d2e57ec5f8fc53d7df420e3abf0ba497935de0a5570586035478ba7d07618cb18e2d4ada2da514c8fb98a034aaf5c06caa0a57e2f7f4c4adedef5956 - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.3": - version: 1.3.3 - resolution: "array.prototype.flat@npm:1.3.3" - dependencies: - call-bind: "npm:^1.0.8" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.5" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/d90e04dfbc43bb96b3d2248576753d1fb2298d2d972e29ca7ad5ec621f0d9e16ff8074dae647eac4f31f4fb7d3f561a7ac005fb01a71f51705a13b5af06a7d8a - languageName: node - linkType: hard - "array.prototype.flatmap@npm:^1.3.3": version: 1.3.3 resolution: "array.prototype.flatmap@npm:1.3.3" @@ -14002,7 +13999,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.0, debug@npm:^4.4.1, debug@npm:^4.4.3": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.4.0, debug@npm:^4.4.1, debug@npm:^4.4.3": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -14014,7 +14011,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.1.0, debug@npm:^3.2.7": +"debug@npm:^3.1.0": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -14063,13 +14060,6 @@ __metadata: languageName: node linkType: hard -"deep-is@npm:^0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c - languageName: node - linkType: hard - "deepmerge-ts@npm:^7.0.3": version: 7.1.5 resolution: "deepmerge-ts@npm:7.1.5" @@ -14738,7 +14728,7 @@ __metadata: languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0": +"es-shim-unscopables@npm:^1.0.2": version: 1.1.0 resolution: "es-shim-unscopables@npm:1.1.0" dependencies: @@ -15004,29 +14994,6 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-node@npm:^0.3.9": - version: 0.3.9 - resolution: "eslint-import-resolver-node@npm:0.3.9" - dependencies: - debug: "npm:^3.2.7" - is-core-module: "npm:^2.13.0" - resolve: "npm:^1.22.4" - checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 - languageName: node - linkType: hard - -"eslint-module-utils@npm:^2.12.1": - version: 2.12.1 - resolution: "eslint-module-utils@npm:2.12.1" - dependencies: - debug: "npm:^3.2.7" - peerDependenciesMeta: - eslint: - optional: true - checksum: 10c0/6f4efbe7a91ae49bf67b4ab3644cb60bc5bd7db4cb5521de1b65be0847ffd3fb6bce0dd68f0995e1b312d137f768e2a1f842ee26fe73621afa05f850628fdc40 - languageName: node - linkType: hard - "eslint-plugin-es-x@npm:^7.5.0": version: 7.8.0 resolution: "eslint-plugin-es-x@npm:7.8.0" @@ -15040,35 +15007,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-import@npm:^2.32.0": - version: 2.32.0 - resolution: "eslint-plugin-import@npm:2.32.0" - dependencies: - "@rtsao/scc": "npm:^1.1.0" - array-includes: "npm:^3.1.9" - array.prototype.findlastindex: "npm:^1.2.6" - array.prototype.flat: "npm:^1.3.3" - array.prototype.flatmap: "npm:^1.3.3" - debug: "npm:^3.2.7" - doctrine: "npm:^2.1.0" - eslint-import-resolver-node: "npm:^0.3.9" - eslint-module-utils: "npm:^2.12.1" - hasown: "npm:^2.0.2" - is-core-module: "npm:^2.16.1" - is-glob: "npm:^4.0.3" - minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.8" - object.groupby: "npm:^1.0.3" - object.values: "npm:^1.2.1" - semver: "npm:^6.3.1" - string.prototype.trimend: "npm:^1.0.9" - tsconfig-paths: "npm:^3.15.0" - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - checksum: 10c0/bfb1b8fc8800398e62ddfefbf3638d185286edfed26dfe00875cc2846d954491b4f5112457831588b757fa789384e1ae585f812614c4797f0499fa234fd4a48b - languageName: node - linkType: hard - "eslint-plugin-n@npm:17.10.3": version: 17.10.3 resolution: "eslint-plugin-n@npm:17.10.3" @@ -15161,16 +15099,6 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.4.0": - version: 8.4.0 - resolution: "eslint-scope@npm:8.4.0" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^5.2.0" - checksum: 10c0/407f6c600204d0f3705bd557f81bd0189e69cd7996f408f8971ab5779c0af733d1af2f1412066b40ee1588b085874fc37a2333986c6521669cdbdd36ca5058e0 - languageName: node - linkType: hard - "eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" @@ -15185,66 +15113,6 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^9.0.0, eslint@npm:^9.39.2": - version: 9.39.2 - resolution: "eslint@npm:9.39.2" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.8.0" - "@eslint-community/regexpp": "npm:^4.12.1" - "@eslint/config-array": "npm:^0.21.1" - "@eslint/config-helpers": "npm:^0.4.2" - "@eslint/core": "npm:^0.17.0" - "@eslint/eslintrc": "npm:^3.3.1" - "@eslint/js": "npm:9.39.2" - "@eslint/plugin-kit": "npm:^0.4.1" - "@humanfs/node": "npm:^0.16.6" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@humanwhocodes/retry": "npm:^0.4.2" - "@types/estree": "npm:^1.0.6" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.6" - debug: "npm:^4.3.2" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.4.0" - eslint-visitor-keys: "npm:^4.2.1" - espree: "npm:^10.4.0" - esquery: "npm:^1.5.0" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^8.0.0" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - peerDependencies: - jiti: "*" - peerDependenciesMeta: - jiti: - optional: true - bin: - eslint: bin/eslint.js - checksum: 10c0/bb88ca8fd16bb7e1ac3e13804c54d41c583214460c0faa7b3e7c574e69c5600c7122295500fb4b0c06067831111db740931e98da1340329527658e1cf80073d3 - languageName: node - linkType: hard - -"espree@npm:^10.0.1, espree@npm:^10.4.0": - version: 10.4.0 - resolution: "espree@npm:10.4.0" - dependencies: - acorn: "npm:^8.15.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.1" - checksum: 10c0/c63fe06131c26c8157b4083313cb02a9a54720a08e21543300e55288c40e06c3fc284bdecf108d3a1372c5934a0a88644c98714f38b6ae8ed272b40d9ea08d6b - languageName: node - linkType: hard - "esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -15255,25 +15123,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.5.0": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" - dependencies: - estraverse: "npm:^5.1.0" - checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: "npm:^5.2.0" - checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": +"estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 @@ -15554,7 +15404,7 @@ __metadata: languageName: node linkType: hard -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": +"fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 @@ -15581,20 +15431,13 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b languageName: node linkType: hard -"fast-levenshtein@npm:^2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 - languageName: node - linkType: hard - "fast-uri@npm:^3.0.1": version: 3.0.1 resolution: "fast-uri@npm:3.0.1" @@ -15706,15 +15549,6 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^8.0.0": - version: 8.0.0 - resolution: "file-entry-cache@npm:8.0.0" - dependencies: - flat-cache: "npm:^4.0.0" - checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 - languageName: node - linkType: hard - "filelist@npm:^1.0.1": version: 1.0.4 resolution: "filelist@npm:1.0.4" @@ -15840,23 +15674,6 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^4.0.0": - version: 4.0.1 - resolution: "flat-cache@npm:4.0.1" - dependencies: - flatted: "npm:^3.2.9" - keyv: "npm:^4.5.4" - checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.4.2 - resolution: "flatted@npm:3.4.2" - checksum: 10c0/a65b67aae7172d6cdf63691be7de6c5cd5adbdfdfe2e9da1a09b617c9512ed794037741ee53d93114276bff3f93cd3b0d97d54f9b316e1e4885dde6e9ffdf7ed - languageName: node - linkType: hard - "flow-bin@npm:^0.113.0": version: 0.113.0 resolution: "flow-bin@npm:0.113.0" @@ -16309,15 +16126,6 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - "glob@npm:13.0.0, glob@npm:^13.0.0": version: 13.0.0 resolution: "glob@npm:13.0.0" @@ -16383,13 +16191,6 @@ __metadata: languageName: node linkType: hard -"globals@npm:^14.0.0": - version: 14.0.0 - resolution: "globals@npm:14.0.0" - checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d - languageName: node - linkType: hard - "globals@npm:^15.8.0": version: 15.15.0 resolution: "globals@npm:15.15.0" @@ -17129,7 +16930,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.12.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.0, is-core-module@npm:^2.16.1, is-core-module@npm:^2.8.1": +"is-core-module@npm:^2.12.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.0, is-core-module@npm:^2.8.1": version: 2.16.1 resolution: "is-core-module@npm:2.16.1" dependencies: @@ -17224,7 +17025,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": +"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -18332,13 +18133,6 @@ __metadata: languageName: node linkType: hard -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 - languageName: node - linkType: hard - "json-parse-better-errors@npm:^1.0.1": version: 1.0.2 resolution: "json-parse-better-errors@npm:1.0.2" @@ -18367,13 +18161,6 @@ __metadata: languageName: node linkType: hard -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce - languageName: node - linkType: hard - "json-schema-traverse@npm:^1.0.0": version: 1.0.0 resolution: "json-schema-traverse@npm:1.0.0" @@ -18388,24 +18175,6 @@ __metadata: languageName: node linkType: hard -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 - languageName: node - linkType: hard - -"json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" - dependencies: - minimist: "npm:^1.2.0" - bin: - json5: lib/cli.js - checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f - languageName: node - linkType: hard - "json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" @@ -18462,15 +18231,6 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.4": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: "npm:3.0.1" - checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e - languageName: node - linkType: hard - "kind-of@npm:^6.0.2": version: 6.0.3 resolution: "kind-of@npm:6.0.3" @@ -18590,16 +18350,6 @@ __metadata: languageName: node linkType: hard -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: "npm:^1.2.1" - type-check: "npm:~0.4.0" - checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e - languageName: node - linkType: hard - "lie@npm:~3.3.0": version: 3.3.0 resolution: "lie@npm:3.3.0" @@ -20017,7 +19767,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.6, minimist@npm:^1.2.8": +"minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 @@ -20667,17 +20417,6 @@ __metadata: languageName: node linkType: hard -"object.groupby@npm:^1.0.3": - version: 1.0.3 - resolution: "object.groupby@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c - languageName: node - linkType: hard - "object.values@npm:^1.2.1": version: 1.2.1 resolution: "object.values@npm:1.2.1" @@ -20777,20 +20516,6 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.9.3": - version: 0.9.4 - resolution: "optionator@npm:0.9.4" - dependencies: - deep-is: "npm:^0.1.3" - fast-levenshtein: "npm:^2.0.6" - levn: "npm:^0.4.1" - prelude-ls: "npm:^1.2.1" - type-check: "npm:^0.4.0" - word-wrap: "npm:^1.2.5" - checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 - languageName: node - linkType: hard - "ora@npm:5.4.1, ora@npm:^5.4.1": version: 5.4.1 resolution: "ora@npm:5.4.1" @@ -20989,6 +20714,108 @@ __metadata: languageName: node linkType: hard +"oxlint-tsgolint@npm:^0.17.4": + version: 0.17.4 + resolution: "oxlint-tsgolint@npm:0.17.4" + dependencies: + "@oxlint-tsgolint/darwin-arm64": "npm:0.17.4" + "@oxlint-tsgolint/darwin-x64": "npm:0.17.4" + "@oxlint-tsgolint/linux-arm64": "npm:0.17.4" + "@oxlint-tsgolint/linux-x64": "npm:0.17.4" + "@oxlint-tsgolint/win32-arm64": "npm:0.17.4" + "@oxlint-tsgolint/win32-x64": "npm:0.17.4" + dependenciesMeta: + "@oxlint-tsgolint/darwin-arm64": + optional: true + "@oxlint-tsgolint/darwin-x64": + optional: true + "@oxlint-tsgolint/linux-arm64": + optional: true + "@oxlint-tsgolint/linux-x64": + optional: true + "@oxlint-tsgolint/win32-arm64": + optional: true + "@oxlint-tsgolint/win32-x64": + optional: true + bin: + tsgolint: bin/tsgolint.js + checksum: 10c0/afe329e7fca1fef373d424c6cc02e6b5e0ef4f9f2f118c974d41c59a323db50d300308a261b9d1775e4262477d2ecad95e07529636b0f728a4f9d1bf48a55f78 + languageName: node + linkType: hard + +"oxlint@npm:^1.57.0": + version: 1.57.0 + resolution: "oxlint@npm:1.57.0" + dependencies: + "@oxlint/binding-android-arm-eabi": "npm:1.57.0" + "@oxlint/binding-android-arm64": "npm:1.57.0" + "@oxlint/binding-darwin-arm64": "npm:1.57.0" + "@oxlint/binding-darwin-x64": "npm:1.57.0" + "@oxlint/binding-freebsd-x64": "npm:1.57.0" + "@oxlint/binding-linux-arm-gnueabihf": "npm:1.57.0" + "@oxlint/binding-linux-arm-musleabihf": "npm:1.57.0" + "@oxlint/binding-linux-arm64-gnu": "npm:1.57.0" + "@oxlint/binding-linux-arm64-musl": "npm:1.57.0" + "@oxlint/binding-linux-ppc64-gnu": "npm:1.57.0" + "@oxlint/binding-linux-riscv64-gnu": "npm:1.57.0" + "@oxlint/binding-linux-riscv64-musl": "npm:1.57.0" + "@oxlint/binding-linux-s390x-gnu": "npm:1.57.0" + "@oxlint/binding-linux-x64-gnu": "npm:1.57.0" + "@oxlint/binding-linux-x64-musl": "npm:1.57.0" + "@oxlint/binding-openharmony-arm64": "npm:1.57.0" + "@oxlint/binding-win32-arm64-msvc": "npm:1.57.0" + "@oxlint/binding-win32-ia32-msvc": "npm:1.57.0" + "@oxlint/binding-win32-x64-msvc": "npm:1.57.0" + peerDependencies: + oxlint-tsgolint: ">=0.15.0" + dependenciesMeta: + "@oxlint/binding-android-arm-eabi": + optional: true + "@oxlint/binding-android-arm64": + optional: true + "@oxlint/binding-darwin-arm64": + optional: true + "@oxlint/binding-darwin-x64": + optional: true + "@oxlint/binding-freebsd-x64": + optional: true + "@oxlint/binding-linux-arm-gnueabihf": + optional: true + "@oxlint/binding-linux-arm-musleabihf": + optional: true + "@oxlint/binding-linux-arm64-gnu": + optional: true + "@oxlint/binding-linux-arm64-musl": + optional: true + "@oxlint/binding-linux-ppc64-gnu": + optional: true + "@oxlint/binding-linux-riscv64-gnu": + optional: true + "@oxlint/binding-linux-riscv64-musl": + optional: true + "@oxlint/binding-linux-s390x-gnu": + optional: true + "@oxlint/binding-linux-x64-gnu": + optional: true + "@oxlint/binding-linux-x64-musl": + optional: true + "@oxlint/binding-openharmony-arm64": + optional: true + "@oxlint/binding-win32-arm64-msvc": + optional: true + "@oxlint/binding-win32-ia32-msvc": + optional: true + "@oxlint/binding-win32-x64-msvc": + optional: true + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + bin: + oxlint: bin/oxlint + checksum: 10c0/e2ccd23280615068335c603c7fe9d2590812d7b2f16ee55a3fca1260d600795847e94926026a0d4ef46026c97c3868aee070ecca125eeaac68a8abbbe309d4a1 + languageName: node + linkType: hard + "p-defer@npm:^1.0.0": version: 1.0.0 resolution: "p-defer@npm:1.0.0" @@ -21575,13 +21402,6 @@ __metadata: languageName: node linkType: hard -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd - languageName: node - linkType: hard - "prettier@npm:^2.7.1": version: 2.8.8 resolution: "prettier@npm:2.8.8" @@ -21742,13 +21562,6 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0": - version: 2.3.1 - resolution: "punycode@npm:2.3.1" - checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 - languageName: node - linkType: hard - "pure-rand@npm:^6.0.0": version: 6.1.0 resolution: "pure-rand@npm:6.1.0" @@ -22801,7 +22614,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.10, resolve@npm:^1.22.3, resolve@npm:^1.22.4": +"resolve@npm:^1.1.6, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.10, resolve@npm:^1.22.3": version: 1.22.10 resolution: "resolve@npm:1.22.10" dependencies: @@ -22827,7 +22640,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.3#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": +"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin, resolve@patch:resolve@npm%3A^1.22.3#optional!builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" dependencies: @@ -24512,18 +24325,6 @@ __metadata: languageName: node linkType: hard -"tsconfig-paths@npm:^3.15.0": - version: 3.15.0 - resolution: "tsconfig-paths@npm:3.15.0" - dependencies: - "@types/json5": "npm:^0.0.29" - json5: "npm:^1.0.2" - minimist: "npm:^1.2.6" - strip-bom: "npm:^3.0.0" - checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 - languageName: node - linkType: hard - "tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": version: 2.7.0 resolution: "tslib@npm:2.7.0" @@ -24554,15 +24355,6 @@ __metadata: languageName: node linkType: hard -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: "npm:^1.2.1" - checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 - languageName: node - linkType: hard - "type-detect@npm:4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" @@ -24898,15 +24690,6 @@ __metadata: languageName: node linkType: hard -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c - languageName: node - linkType: hard - "urlpattern-polyfill@npm:^10.0.0": version: 10.1.0 resolution: "urlpattern-polyfill@npm:10.1.0" @@ -25359,13 +25142,6 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:^1.2.5": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 - languageName: node - linkType: hard - "wordwrapjs@npm:^3.0.0": version: 3.0.0 resolution: "wordwrapjs@npm:3.0.0" From 3917f58d948a316e9f7511b0d072b305e6d7d7f2 Mon Sep 17 00:00:00 2001 From: Saad Najmi Date: Wed, 25 Mar 2026 19:09:54 -0500 Subject: [PATCH 2/5] fix(lint): resolve oxlint violations across packages --- apps/tester-core/oxlint.config.ts | 12 +++ .../Button/ButtonHOCTestSection.tsx | 2 +- packages/components/Avatar/src/Avatar.tsx | 2 +- .../Avatar/src/stylingUtils.android.ts | 2 +- .../components/Avatar/src/stylingUtils.ios.ts | 2 +- .../Badge/src/CounterBadge/index.ts | 12 ++- .../PresenceBadgeTokens.android.ts | 2 +- .../PresenceBadge/PresenceBadgeTokens.ios.ts | 2 +- .../Badge/src/PresenceBadge/index.ts | 17 +++- .../src/PresenceBadge/stylingUtils.android.ts | 2 +- .../src/PresenceBadge/stylingUtils.ios.ts | 2 +- .../Button/src/CompoundButton/index.ts | 10 ++- packages/components/Button/src/FAB/index.ts | 5 +- .../Button/src/ToggleButton/index.ts | 11 ++- .../src/deprecated/PrimaryButton/index.ts | 2 +- .../src/deprecated/StealthButton/index.ts | 2 +- .../src/deprecated/Checkbox.settings.ios.ts | 2 +- .../src/deprecated/Checkbox.settings.macos.ts | 2 +- .../Checkbox/src/deprecated/Checkbox.tsx | 2 +- packages/components/Chip/src/useChip.ts | 2 +- .../ContextualMenu/src/ContextualMenu.tsx | 6 +- .../ContextualMenu/src/ContextualMenuItem.tsx | 2 +- .../components/ContextualMenu/src/Submenu.tsx | 40 ++++++---- .../ContextualMenu/src/SubmenuItem.tsx | 30 +++++--- .../Link/src/legacy/Link.settings.ts | 2 +- .../Menu/src/Menu/useMenu.android.ts | 15 ++-- .../src/MenuItemRadio/useMenuItemRadio.ts | 8 +- .../Menu/src/MenuList/useMenuList.ts | 2 +- .../Menu/src/MenuPopover/useMenuPopover.ts | 12 +-- .../Menu/src/MenuTrigger/useMergeRefs.ts | 2 +- .../MenuButton/src/MenuButton.macos.tsx | 4 +- .../components/MenuButton/src/MenuButton.tsx | 2 +- .../RadioGroup/src/Radio/useRadio.ts | 25 +++--- .../RadioGroup/src/Radio/useRadio.win32.ts | 73 +++++++++++------- .../src/legacy/RadioButton.macos.tsx | 19 ++--- .../RadioGroup/src/legacy/RadioButton.tsx | 25 +++--- .../src/legacy/RadioButton.win32.tsx | 77 +++++++++++-------- .../RadioGroup/src/legacy/RadioGroup.tsx | 12 +-- packages/components/Stack/src/Stack.tsx | 2 +- packages/components/Switch/src/useSwitch.ts | 4 +- packages/components/TabList/src/Tab/useTab.ts | 2 +- .../TabList/src/Tab/useTab.win32.ts | 11 +-- .../TabList/src/Tab/useTabAnimation.ts | 3 +- .../TabList/src/TabList/useTabList.ts | 9 ++- .../useAnimatedIndicatorStyles.ts | 8 +- .../foundation-tokens/src/Token.function.ts | 4 +- .../foundation-tokens/src/Token.test.ts | 12 +-- .../deprecated/foundation-tokens/src/Token.ts | 4 +- .../theme-registry/src/Registry.test.ts | 2 +- .../src/platform/index.ts | 2 +- .../src/ActivityIndicator.mobile.tsx | 4 +- .../src/NativeAppearanceAdditions.ts | 4 +- packages/experimental/Drawer/src/useDrawer.ts | 23 ++++-- .../MenuButton/src/renderContextualMenu.tsx | 2 +- .../src/NativeFontMetrics.ts | 4 +- .../Overflow/src/Overflow/useOverflow.ts | 5 +- .../src/OverflowItem/useOverflowItem.ts | 12 +-- .../experimental/Shimmer/src/Shimmer.test.tsx | 2 +- packages/experimental/Shimmer/src/Shimmer.tsx | 8 +- .../Shimmer/src/Shimmer.types.shared.ts | 2 +- .../Spinner/src/Spinner.android.tsx | 21 ++--- packages/framework/use-slot/src/useSlot.ts | 2 +- .../use-styling/src/buildUseStyling.test.ts | 4 +- .../use-styling/src/buildUseStyling.ts | 4 +- .../apple-theme/src/appleColors.macos.ts | 2 +- .../apple-theme/src/createAppleTheme.macos.ts | 4 +- .../default-theme/src/stockWebPalette.ts | 40 +++++----- .../interactive-hooks/src/useAsPressable.ts | 39 +++++----- .../interactive-hooks/src/useAsToggle.ts | 2 +- scripts/src/tasks/lint.js | 2 +- 70 files changed, 394 insertions(+), 306 deletions(-) create mode 100644 apps/tester-core/oxlint.config.ts diff --git a/apps/tester-core/oxlint.config.ts b/apps/tester-core/oxlint.config.ts new file mode 100644 index 00000000000..ea61b574c96 --- /dev/null +++ b/apps/tester-core/oxlint.config.ts @@ -0,0 +1,12 @@ +import baseConfig from '@fluentui-react-native/lint-config-rules'; +import { defineConfig } from 'oxlint'; + +export default defineConfig({ + extends: [baseConfig], + rules: { + '@rnx-kit/no-export-all': 'off', + '@rnx-kit/no-foreach-with-captured-variables': 'off', + 'react-hooks/exhaustive-deps': 'off', + 'typescript/array-type': 'off', + }, +}); \ No newline at end of file diff --git a/apps/tester-core/src/TestComponents/Button/ButtonHOCTestSection.tsx b/apps/tester-core/src/TestComponents/Button/ButtonHOCTestSection.tsx index cb2d0f1b345..8af26457403 100644 --- a/apps/tester-core/src/TestComponents/Button/ButtonHOCTestSection.tsx +++ b/apps/tester-core/src/TestComponents/Button/ButtonHOCTestSection.tsx @@ -14,7 +14,7 @@ const CustomButton = Button.customize({ backgroundColor: 'pink' }); const CustomIconButton = Button.customize({ iconColor: 'yellow' }); const ComposedButton = Button.compose({ // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore Not all slots have to be overridden for compose to work + // @ts-expect-error Not all slots have to be overridden for compose to work slots: { content: CustomText, }, diff --git a/packages/components/Avatar/src/Avatar.tsx b/packages/components/Avatar/src/Avatar.tsx index 4a3d006d278..ec46540f36f 100644 --- a/packages/components/Avatar/src/Avatar.tsx +++ b/packages/components/Avatar/src/Avatar.tsx @@ -87,7 +87,7 @@ function renderAvatar(final: AvatarProps, avatarProps: AvatarProps, Slots: Slots {initials} ) : avatarProps.icon ? ( // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - TODO, fix typing error + // @ts-expect-error - TODO, fix typing error ) : ( svgIconsEnabled && ( diff --git a/packages/components/Avatar/src/stylingUtils.android.ts b/packages/components/Avatar/src/stylingUtils.android.ts index 0d71d89054e..649a9a2c5d3 100644 --- a/packages/components/Avatar/src/stylingUtils.android.ts +++ b/packages/components/Avatar/src/stylingUtils.android.ts @@ -1 +1 @@ -export * from './stylingUtils.mobile'; +export { getFallbackIconPath, getIconStyles, getRingConfig, getRingSpacing } from './stylingUtils.mobile'; diff --git a/packages/components/Avatar/src/stylingUtils.ios.ts b/packages/components/Avatar/src/stylingUtils.ios.ts index 0d71d89054e..649a9a2c5d3 100644 --- a/packages/components/Avatar/src/stylingUtils.ios.ts +++ b/packages/components/Avatar/src/stylingUtils.ios.ts @@ -1 +1 @@ -export * from './stylingUtils.mobile'; +export { getFallbackIconPath, getIconStyles, getRingConfig, getRingSpacing } from './stylingUtils.mobile'; diff --git a/packages/components/Badge/src/CounterBadge/index.ts b/packages/components/Badge/src/CounterBadge/index.ts index d68b21b263d..a5275183612 100644 --- a/packages/components/Badge/src/CounterBadge/index.ts +++ b/packages/components/Badge/src/CounterBadge/index.ts @@ -1,2 +1,10 @@ -export * from './CounterBadge.types'; -export * from './CounterBadge'; +export { counterBadgeName } from './CounterBadge.types'; +export type { + CounterBadgeInfo, + CounterBadgeProps, + CounterBadgeSlotProps, + CounterBadgeState, + CounterBadgeTokens, + CounterBadgeType, +} from './CounterBadge.types'; +export { CounterBadge } from './CounterBadge'; diff --git a/packages/components/Badge/src/PresenceBadge/PresenceBadgeTokens.android.ts b/packages/components/Badge/src/PresenceBadge/PresenceBadgeTokens.android.ts index 95a6c43f982..67ea517d3ff 100644 --- a/packages/components/Badge/src/PresenceBadge/PresenceBadgeTokens.android.ts +++ b/packages/components/Badge/src/PresenceBadge/PresenceBadgeTokens.android.ts @@ -1 +1 @@ -export * from './PresenceBadgeTokens.mobile'; +export { defaultPresenceBadgeTokens } from './PresenceBadgeTokens.mobile'; diff --git a/packages/components/Badge/src/PresenceBadge/PresenceBadgeTokens.ios.ts b/packages/components/Badge/src/PresenceBadge/PresenceBadgeTokens.ios.ts index 95a6c43f982..67ea517d3ff 100644 --- a/packages/components/Badge/src/PresenceBadge/PresenceBadgeTokens.ios.ts +++ b/packages/components/Badge/src/PresenceBadge/PresenceBadgeTokens.ios.ts @@ -1 +1 @@ -export * from './PresenceBadgeTokens.mobile'; +export { defaultPresenceBadgeTokens } from './PresenceBadgeTokens.mobile'; diff --git a/packages/components/Badge/src/PresenceBadge/index.ts b/packages/components/Badge/src/PresenceBadge/index.ts index 9d470176865..38ad398f20d 100644 --- a/packages/components/Badge/src/PresenceBadge/index.ts +++ b/packages/components/Badge/src/PresenceBadge/index.ts @@ -1,2 +1,15 @@ -export * from './PresenceBadge.types'; -export * from './PresenceBadge'; +export { + PresenceBadgeIcons, + PresenceBadgeStatuses, + presenceBadgeName, +} from './PresenceBadge.types'; +export type { + PresenceBadgeIconPath, + PresenceBadgeIconTypes, + PresenceBadgeProps, + PresenceBadgeSlotProps, + PresenceBadgeStatus, + PresenceBadgeTokens, + PresenceBadgeType, +} from './PresenceBadge.types'; +export { PresenceBadge } from './PresenceBadge'; diff --git a/packages/components/Badge/src/PresenceBadge/stylingUtils.android.ts b/packages/components/Badge/src/PresenceBadge/stylingUtils.android.ts index 0d71d89054e..9441db09e6b 100644 --- a/packages/components/Badge/src/PresenceBadge/stylingUtils.android.ts +++ b/packages/components/Badge/src/PresenceBadge/stylingUtils.android.ts @@ -1 +1 @@ -export * from './stylingUtils.mobile'; +export { getIconPath } from './stylingUtils.mobile'; diff --git a/packages/components/Badge/src/PresenceBadge/stylingUtils.ios.ts b/packages/components/Badge/src/PresenceBadge/stylingUtils.ios.ts index 0d71d89054e..9441db09e6b 100644 --- a/packages/components/Badge/src/PresenceBadge/stylingUtils.ios.ts +++ b/packages/components/Badge/src/PresenceBadge/stylingUtils.ios.ts @@ -1 +1 @@ -export * from './stylingUtils.mobile'; +export { getIconPath } from './stylingUtils.mobile'; diff --git a/packages/components/Button/src/CompoundButton/index.ts b/packages/components/Button/src/CompoundButton/index.ts index 8752e247feb..f9587bb0081 100644 --- a/packages/components/Button/src/CompoundButton/index.ts +++ b/packages/components/Button/src/CompoundButton/index.ts @@ -1,2 +1,8 @@ -export * from './CompoundButton.types'; -export * from './CompoundButton'; +export { compoundButtonName } from './CompoundButton.types'; +export type { + CompoundButtonProps, + CompoundButtonSlotProps, + CompoundButtonTokens, + CompoundButtonType, +} from './CompoundButton.types'; +export { CompoundButton } from './CompoundButton'; diff --git a/packages/components/Button/src/FAB/index.ts b/packages/components/Button/src/FAB/index.ts index 6fef838afef..55f0790541c 100644 --- a/packages/components/Button/src/FAB/index.ts +++ b/packages/components/Button/src/FAB/index.ts @@ -1,2 +1,3 @@ -export * from './FAB.types'; -export * from './FAB'; +export { fabName } from './FAB.types'; +export type { FABAppearance, FABProps, FABSize, FABSlotProps, FABTokens, FABType } from './FAB.types'; +export { FAB } from './FAB'; diff --git a/packages/components/Button/src/ToggleButton/index.ts b/packages/components/Button/src/ToggleButton/index.ts index e5a633d59fc..3751239fd90 100644 --- a/packages/components/Button/src/ToggleButton/index.ts +++ b/packages/components/Button/src/ToggleButton/index.ts @@ -1,3 +1,10 @@ -export * from './ToggleButton.types'; -export * from './ToggleButton'; +export { toggleButtonName } from './ToggleButton.types'; +export type { + ToggleButtonInfo, + ToggleButtonProps, + ToggleButtonSlotProps, + ToggleButtonTokens, + ToggleButtonType, +} from './ToggleButton.types'; +export { ToggleButton } from './ToggleButton'; export { useToggleButton } from './useToggleButton'; diff --git a/packages/components/Button/src/deprecated/PrimaryButton/index.ts b/packages/components/Button/src/deprecated/PrimaryButton/index.ts index ad4b80e70dc..4169657accd 100644 --- a/packages/components/Button/src/deprecated/PrimaryButton/index.ts +++ b/packages/components/Button/src/deprecated/PrimaryButton/index.ts @@ -1 +1 @@ -export * from './PrimaryButton'; +export { PrimaryButton } from './PrimaryButton'; diff --git a/packages/components/Button/src/deprecated/StealthButton/index.ts b/packages/components/Button/src/deprecated/StealthButton/index.ts index 3f299dbb4d2..1ad5ff5e45a 100644 --- a/packages/components/Button/src/deprecated/StealthButton/index.ts +++ b/packages/components/Button/src/deprecated/StealthButton/index.ts @@ -1 +1 @@ -export * from './StealthButton'; +export { StealthButton } from './StealthButton'; diff --git a/packages/components/Checkbox/src/deprecated/Checkbox.settings.ios.ts b/packages/components/Checkbox/src/deprecated/Checkbox.settings.ios.ts index 811f48078f5..4553412d2de 100644 --- a/packages/components/Checkbox/src/deprecated/Checkbox.settings.ios.ts +++ b/packages/components/Checkbox/src/deprecated/Checkbox.settings.ios.ts @@ -1 +1 @@ -export * from './Checkbox.settings.android'; +export { checkboxSelectActionLabel, settings } from './Checkbox.settings.android'; diff --git a/packages/components/Checkbox/src/deprecated/Checkbox.settings.macos.ts b/packages/components/Checkbox/src/deprecated/Checkbox.settings.macos.ts index 811f48078f5..4553412d2de 100644 --- a/packages/components/Checkbox/src/deprecated/Checkbox.settings.macos.ts +++ b/packages/components/Checkbox/src/deprecated/Checkbox.settings.macos.ts @@ -1 +1 @@ -export * from './Checkbox.settings.android'; +export { checkboxSelectActionLabel, settings } from './Checkbox.settings.android'; diff --git a/packages/components/Checkbox/src/deprecated/Checkbox.tsx b/packages/components/Checkbox/src/deprecated/Checkbox.tsx index 319852f967a..d01b280eee8 100644 --- a/packages/components/Checkbox/src/deprecated/Checkbox.tsx +++ b/packages/components/Checkbox/src/deprecated/Checkbox.tsx @@ -84,7 +84,7 @@ export const Checkbox = compose({ break; } }, - [toggleChecked, userProps, state, pressable.props], + [toggleChecked], ); const slotProps = mergeSettings(styleProps, { diff --git a/packages/components/Chip/src/useChip.ts b/packages/components/Chip/src/useChip.ts index 514d29ece49..5f7fe3416f7 100644 --- a/packages/components/Chip/src/useChip.ts +++ b/packages/components/Chip/src/useChip.ts @@ -51,7 +51,7 @@ export const useChip = (props: ChipProps): ChipInfo => { closeIconOnPress(e); } }, - [checkedValue, showCloseIcon, closeIconOnPress], + [closeIconOnPress, closeIconVisibile], ); return { diff --git a/packages/components/ContextualMenu/src/ContextualMenu.tsx b/packages/components/ContextualMenu/src/ContextualMenu.tsx index ad7aaa27ec3..fffc06d82c7 100644 --- a/packages/components/ContextualMenu/src/ContextualMenu.tsx +++ b/packages/components/ContextualMenu/src/ContextualMenu.tsx @@ -36,7 +36,7 @@ export const CMContext = React.createContext({ export const ContextualMenu = compose({ displayName: contextualMenuName, usePrepareProps: (userProps: ContextualMenuProps, useStyling: IUseComposeStyling) => { - const { setShowMenu, maxHeight, maxWidth, shouldFocusOnMount = true, shouldFocusOnContainer = false, ...rest } = userProps; + const { setShowMenu, maxHeight, maxWidth, onDismiss, shouldFocusOnMount = true, shouldFocusOnContainer = false, ...rest } = userProps; /** * On macOS, focus isn't placed by default on the first focusable element. We get around this by focusing on the inner FocusZone @@ -57,9 +57,9 @@ export const ContextualMenu = compose({ const data = useSelectedKey(null, userProps.onItemClick); const dismissCallback = React.useCallback(() => { - userProps.onDismiss(); + onDismiss(); setShowMenu?.(false); - }, [setShowMenu, userProps.onDismiss]); + }, [onDismiss, setShowMenu]); const [containerFocus, setContainerFocus] = React.useState(true); const toggleContainerFocus = React.useCallback(() => { diff --git a/packages/components/ContextualMenu/src/ContextualMenuItem.tsx b/packages/components/ContextualMenu/src/ContextualMenuItem.tsx index 2a78171f24e..2a57d4cc028 100644 --- a/packages/components/ContextualMenu/src/ContextualMenuItem.tsx +++ b/packages/components/ContextualMenu/src/ContextualMenuItem.tsx @@ -90,7 +90,7 @@ export const ContextualMenuItem = compose({ (e) => { onBlur(e); // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore IViewWin32 doesn't have the event as an argument, while macOS does + // @ts-expect-error IViewWin32 doesn't have the event as an argument, while macOS does onMouseLeave && onMouseLeave(e); }, [onBlur, onMouseLeave], diff --git a/packages/components/ContextualMenu/src/Submenu.tsx b/packages/components/ContextualMenu/src/Submenu.tsx index efb1c2ebdce..f48c3fda316 100644 --- a/packages/components/ContextualMenu/src/Submenu.tsx +++ b/packages/components/ContextualMenu/src/Submenu.tsx @@ -20,7 +20,17 @@ import { submenuName } from './Submenu.types'; export const Submenu = compose({ displayName: submenuName, usePrepareProps: (userProps: SubmenuProps, useStyling: IUseComposeStyling) => { - const { setShowMenu, maxWidth, maxHeight, shouldFocusOnMount = true, shouldFocusOnContainer = true, ...rest } = userProps; + const { + setShowMenu, + maxWidth, + maxHeight, + onDismiss, + onItemClick, + onShow, + shouldFocusOnMount = true, + shouldFocusOnContainer = true, + ...rest + } = userProps; /** * On macOS, focus isn't placed by default on the first focusable element. We get around this by focusing on the inner FocusZone @@ -41,25 +51,25 @@ export const Submenu = compose({ const context = React.useContext(CMContext); // This hook updates the Selected Button and calls the customer's onClick function. This gets called after a button is pressed. - const data = useSelectedKey(null, userProps.onItemClick); + const data = useSelectedKey(null, onItemClick); - const onShow = React.useCallback(() => { - userProps?.onShow && userProps.onShow(); + const onShowCallback = React.useCallback(() => { + onShow && onShow(); context.isSubmenuOpen = true; - }, [context]); + }, [context, onShow]); - const onDismiss = React.useCallback(() => { - userProps?.onDismiss(); + const onDismissCallback = React.useCallback(() => { + onDismiss && onDismiss(); setShowMenu(false); context.isSubmenuOpen = false; - }, [context, setShowMenu]); + }, [context, onDismiss, setShowMenu]); const dismissCallback = React.useCallback(() => { - onDismiss(); + onDismissCallback(); context?.onDismissMenu(); - }, [onDismiss, context]); + }, [context, onDismissCallback]); - context.dismissSubmenu = onDismiss; + context.dismissSubmenu = onDismissCallback; const [containerFocus, setContainerFocus] = React.useState(true); const toggleContainerFocus = React.useCallback(() => { @@ -80,10 +90,10 @@ export const Submenu = compose({ (e: any) => { const arrowKey = I18nManager.isRTL ? 'ArrowRight' : 'ArrowLeft'; if (e.nativeEvent.key === arrowKey) { - onDismiss(); + onDismissCallback(); } }, - [onDismiss], + [onDismissCallback], ); // Explicitly override onKeyDown to override the native windows behavior of moving focus with arrow keys. @@ -92,8 +102,8 @@ export const Submenu = compose({ const slotProps = mergeSettings(styleProps, { root: { ...rest, - onShow: onShow, - onDismiss: onDismiss, + onShow: onShowCallback, + onDismiss: onDismissCallback, setInitialFocus: shouldFocusOnMount, }, container: { diff --git a/packages/components/ContextualMenu/src/SubmenuItem.tsx b/packages/components/ContextualMenu/src/SubmenuItem.tsx index feadcbbe6d8..100bb661771 100644 --- a/packages/components/ContextualMenu/src/SubmenuItem.tsx +++ b/packages/components/ContextualMenu/src/SubmenuItem.tsx @@ -24,6 +24,8 @@ export const SubmenuItem = compose({ usePrepareProps: (userProps: SubmenuItemProps, useStyling: IUseComposeStyling) => { const defaultComponentRef = React.useRef(null); const { + onHoverIn, + onHoverOut, disabled, expanded, itemKey, @@ -41,20 +43,26 @@ export const SubmenuItem = compose({ const cmRef = useViewCommandFocus(componentRef); - const onItemHoverIn = React.useCallback((e) => { - componentRef.current.focus(); - userProps.onHoverIn && userProps.onHoverIn(e); - }, []); + const onItemHoverIn = React.useCallback( + (e) => { + componentRef.current.focus(); + onHoverIn && onHoverIn(e); + }, + [componentRef, onHoverIn], + ); const onHoverInDelay = Platform.select({ macos: 100, default: 500, // win32 }); - const onItemHoverOut = React.useCallback((e) => { - context?.dismissSubmenu && context.dismissSubmenu(); - userProps.onHoverOut && userProps.onHoverOut(e); - }, []); + const onItemHoverOut = React.useCallback( + (e) => { + context?.dismissSubmenu && context.dismissSubmenu(); + onHoverOut && onHoverOut(e); + }, + [context, onHoverOut], + ); const onItemPress = React.useCallback(() => { if (!disabled) { @@ -80,13 +88,13 @@ export const SubmenuItem = compose({ * client to conditionally render it with onHoverIn. */ // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore onMouseLeave not in PressableProps but is supported on desktop + // @ts-expect-error onMouseLeave not in PressableProps but is supported on desktop const { onBlur, onMouseEnter, onMouseLeave, ...restPressableProps } = pressable.props; const onMouseEnterModified = React.useCallback( (e) => { componentRef.current.focus(); // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore IViewWin32 doesn't have the event as an argument, while macOS does + // @ts-expect-error IViewWin32 doesn't have the event as an argument, while macOS does onMouseEnter && onMouseEnter(e); }, [componentRef, onMouseEnter], @@ -95,7 +103,7 @@ export const SubmenuItem = compose({ (e) => { onBlur(e); // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore IViewWin32 doesn't have the event as an argument, while macOS does + // @ts-expect-error IViewWin32 doesn't have the event as an argument, while macOS does onMouseLeave && onMouseLeave(e); }, [onBlur, onMouseLeave], diff --git a/packages/components/Link/src/legacy/Link.settings.ts b/packages/components/Link/src/legacy/Link.settings.ts index bc84f4943e8..461dfa517de 100644 --- a/packages/components/Link/src/legacy/Link.settings.ts +++ b/packages/components/Link/src/legacy/Link.settings.ts @@ -19,7 +19,7 @@ export const settings: IComposeSettings = [ accessible: true, focusable: true, enableFocusRing: false, - ...{ cursor: 'pointer' }, + cursor: 'pointer', accessibilityRole: 'link', style: { display: 'flex', diff --git a/packages/components/Menu/src/Menu/useMenu.android.ts b/packages/components/Menu/src/Menu/useMenu.android.ts index 0694496c086..76994a8d33c 100644 --- a/packages/components/Menu/src/Menu/useMenu.android.ts +++ b/packages/components/Menu/src/Menu/useMenu.android.ts @@ -159,14 +159,14 @@ export const useMenu = (props: MenuProps): MenuState => { // Adjust position of menu - TODO: fix this warning removal, potentially adds extra re-renders - const transforms = []; + const transforms = useMemo(() => { + const nextTransforms = []; - useMemo(() => { /** * If the Menu width and SCREEN_INDENT cross the screen width then the Menu will be adjusted to the oppostion left side of the screen */ if ((isRTL && left + anchorWidth - menuWidth > SCREEN_INDENT) || (!isRTL && left + menuWidth > windowWidth - SCREEN_INDENT)) { - transforms.push({ + nextTransforms.push({ translateX: Animated.multiply(menuSizeAnimation.x, -1), }); } else if (left < SCREEN_INDENT) { @@ -177,17 +177,19 @@ export const useMenu = (props: MenuProps): MenuState => { // Flip by Y axis if menu hits bottom screen border if (top + menuHeight + SCREEN_INDENT > windowHeight) { if (menuHeight > maxMenuHeight) { - transforms.push({ + nextTransforms.push({ translateY: Animated.multiply(menuSizeAnimation.y, -1), }); } else { - transforms.push({ + nextTransforms.push({ translateY: Animated.multiply(menuSizeAnimation.y, -1), }); } } else if (top < SCREEN_INDENT) { setTop(SCREEN_INDENT); } + + return nextTransforms; }, [ anchorWidth, isRTL, @@ -198,7 +200,6 @@ export const useMenu = (props: MenuProps): MenuState => { menuSizeAnimation.y, menuWidth, top, - transforms, windowHeight, windowWidth, ]); @@ -300,7 +301,7 @@ const useMenuOpenState = ( parentSetOpen(e, isOpen, bubble); } }, - [state, onOpenChange, parentSetOpen, show, hide], + [hide, isControlled, onOpenChange, parentSetOpen, show, state], ); return [state, shouldFocusOnContainer, setOpen]; }; diff --git a/packages/components/Menu/src/MenuItemRadio/useMenuItemRadio.ts b/packages/components/Menu/src/MenuItemRadio/useMenuItemRadio.ts index dc8341b7369..6a3a3d8cdd5 100644 --- a/packages/components/Menu/src/MenuItemRadio/useMenuItemRadio.ts +++ b/packages/components/Menu/src/MenuItemRadio/useMenuItemRadio.ts @@ -11,7 +11,7 @@ export const useMenuItemRadio = (props: MenuItemRadioProps): MenuItemRadioInfo = const { disabled = false, name, persistOnClick } = props; const context = useMenuContext(); const listContext = useMenuListContext(); - const selectRadio = listContext.selectRadio; + const { addRadioItem, removeRadioItem, selectRadio } = listContext; const setOpen = context.setOpen; let shouldPersist = context.persistOnItemClick; shouldPersist = persistOnClick ?? shouldPersist; @@ -30,12 +30,12 @@ export const useMenuItemRadio = (props: MenuItemRadioProps): MenuItemRadioInfo = // Explicitly only run on mount and unmount React.useEffect(() => { - listContext.addRadioItem(name); + addRadioItem(name); return () => { - listContext.removeRadioItem(name); + removeRadioItem(name); }; - }, []); + }, [addRadioItem, name, removeRadioItem]); return useMenuCheckboxInteraction(props, toggleChecked); }; diff --git a/packages/components/Menu/src/MenuList/useMenuList.ts b/packages/components/Menu/src/MenuList/useMenuList.ts index 9287bb45339..cc329da4e77 100644 --- a/packages/components/Menu/src/MenuList/useMenuList.ts +++ b/packages/components/Menu/src/MenuList/useMenuList.ts @@ -210,5 +210,5 @@ export const useMenuItemTracking = (ref: React.RefObject, disabled: boolea React.useEffect(() => { trackMenuItem(item); return () => untrackMenuItem(item); - }, []); + }, [item, trackMenuItem, untrackMenuItem]); }; diff --git a/packages/components/Menu/src/MenuPopover/useMenuPopover.ts b/packages/components/Menu/src/MenuPopover/useMenuPopover.ts index 3b53d04a6b6..c147d378353 100644 --- a/packages/components/Menu/src/MenuPopover/useMenuPopover.ts +++ b/packages/components/Menu/src/MenuPopover/useMenuPopover.ts @@ -24,17 +24,17 @@ export const useMenuPopover = (props: MenuPopoverProps): MenuPopoverState => { triggerHoverOutTimer, } = context; - const { onKeyDown: onKeyDownProp, onKeyUp: onKeyUpProp } = props; + const { directionalHint: directionalHintProp, doNotTakePointerCapture: doNotTakePointerCaptureProp, onDismiss: onDismissProp, onKeyDown: onKeyDownProp, onKeyUp: onKeyUpProp } = props; const onDismiss = React.useCallback(() => { - props.onDismiss?.(); - (setOpen(undefined, false /* isOpen */), [setOpen]); - }, [props.onDismiss, setOpen]); + onDismissProp?.(); + setOpen(undefined, false /* isOpen */); + }, [onDismissProp, setOpen]); const dismissBehaviors = isControlled ? controlledDismissBehaviors : undefined; - const directionalHint = props.directionalHint ?? getDirectionalHint(isSubmenu, I18nManager.isRTL); + const directionalHint = directionalHintProp ?? getDirectionalHint(isSubmenu, I18nManager.isRTL); const setInitialFocus = true; - const doNotTakePointerCapture = props.doNotTakePointerCapture ?? openOnHover; + const doNotTakePointerCapture = doNotTakePointerCaptureProp ?? openOnHover; const accessibilityRole = 'menu'; const onMouseEnter = React.useCallback(() => { diff --git a/packages/components/Menu/src/MenuTrigger/useMergeRefs.ts b/packages/components/Menu/src/MenuTrigger/useMergeRefs.ts index e83e3be2873..f3db121f266 100644 --- a/packages/components/Menu/src/MenuTrigger/useMergeRefs.ts +++ b/packages/components/Menu/src/MenuTrigger/useMergeRefs.ts @@ -34,7 +34,7 @@ export function useMergedRefs(...refs: (React.Ref | undefined)[]): RefObje } } }, - [...refs], + [refs], ) as unknown as RefObjectFunction; return mergedCallback; diff --git a/packages/components/MenuButton/src/MenuButton.macos.tsx b/packages/components/MenuButton/src/MenuButton.macos.tsx index 88fb896cd86..c1ccab8be66 100644 --- a/packages/components/MenuButton/src/MenuButton.macos.tsx +++ b/packages/components/MenuButton/src/MenuButton.macos.tsx @@ -77,7 +77,7 @@ export const MenuButton = compose({ // Transform the menuItem props to match the native props of NSMenuItem function transformMenuItems(menuItems: MenuButtonItemProps[]): NativeMenuItem[] { const nativeMenuItems: NativeMenuItem[] = []; - menuItems.forEach((item) => { + for (const item of menuItems) { const imageSource = extractResolvedImageSourceFromIcon(item.icon); // Recursively parse submenus @@ -93,7 +93,7 @@ export const MenuButton = compose({ submenu: submenu, }; nativeMenuItems.push(transformedItem); - }); + } return nativeMenuItems; } diff --git a/packages/components/MenuButton/src/MenuButton.tsx b/packages/components/MenuButton/src/MenuButton.tsx index 0bff35c29c8..cbd44823dfd 100644 --- a/packages/components/MenuButton/src/MenuButton.tsx +++ b/packages/components/MenuButton/src/MenuButton.tsx @@ -119,7 +119,7 @@ export const MenuButton = compose({ {menuItems.map((menuItem) => { return menuItem.hasSubmenu && menuItem.submenuItems ? ( - + ) : ( diff --git a/packages/components/RadioGroup/src/Radio/useRadio.ts b/packages/components/RadioGroup/src/Radio/useRadio.ts index 005b8b94212..7fb59f3ef9e 100644 --- a/packages/components/RadioGroup/src/Radio/useRadio.ts +++ b/packages/components/RadioGroup/src/Radio/useRadio.ts @@ -14,13 +14,14 @@ export const useRadio = (props: RadioProps): RadioInfo => { // Grabs the context information from RadioGroup (currently selected button and client's onChange callback) const radioGroupContext = useRadioGroupContext(); + const { disabled: groupDisabled, layout, onChange, updateSelectedButtonRef, value: selectedValue, values } = radioGroupContext; const { label, subtext, value, disabled, - labelPosition = radioGroupContext.layout === 'horizontal-stacked' ? 'below' : 'after', + labelPosition = layout === 'horizontal-stacked' ? 'below' : 'after', accessibilityActions, accessibilityLabel, accessibilityHint, @@ -32,26 +33,26 @@ export const useRadio = (props: RadioProps): RadioInfo => { ...rest } = props; - const isDisabled = radioGroupContext.disabled || disabled; + const isDisabled = groupDisabled || disabled; const buttonRef = useViewCommandFocus(componentRef); /* We don't want to call the user's onChange multiple times on the same selection. */ const changeSelection = React.useCallback(() => { - if (value !== radioGroupContext.value) { - radioGroupContext.onChange && radioGroupContext.onChange(value); - radioGroupContext.updateSelectedButtonRef && componentRef && radioGroupContext.updateSelectedButtonRef(componentRef); + if (value !== selectedValue) { + onChange && onChange(value); + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); } - }, [radioGroupContext, value, componentRef]); + }, [componentRef, onChange, selectedValue, updateSelectedButtonRef, value]); /* We use the componentRef of the currently selected button to maintain the default tabbable element in a RadioGroup. Since the componentRef isn't generated until after initial render, we must update it once here. */ React.useEffect(() => { - if (value === radioGroupContext.value && !isDisabled) { - radioGroupContext.updateSelectedButtonRef && componentRef && radioGroupContext.updateSelectedButtonRef(componentRef); + if (value === selectedValue && !isDisabled) { + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); } - }, []); + }, [componentRef, isDisabled, selectedValue, updateSelectedButtonRef, value]); // Ensure focus is placed on button after click const changeSelectionWithFocus = useOnPressWithFocus(componentRef, changeSelection); @@ -82,7 +83,7 @@ export const useRadio = (props: RadioProps): RadioInfo => { const state = { ...pressable.state, - selected: radioGroupContext.value === props.value && !isDisabled, + selected: selectedValue === props.value && !isDisabled, disabled: isDisabled || false, labelPositionBelow: labelPosition === 'below', }; @@ -101,8 +102,8 @@ export const useRadio = (props: RadioProps): RadioInfo => { accessibilityHint: accessibilityHint ?? subtext, accessibilityState: getAccessibilityState(state.disabled, state.selected, accessibilityState), accessibilityActions: accessibilityActionsProp, - accessibilityPosInSet: accessibilityPosInSet ?? radioGroupContext.values.findIndex((x) => x == value) + 1, - accessibilitySetSize: accessibilitySetSize ?? radioGroupContext.values.length, + accessibilityPosInSet: accessibilityPosInSet ?? values.findIndex((x) => x == value) + 1, + accessibilitySetSize: accessibilitySetSize ?? values.length, focusable: !state.disabled, disabled: isDisabled, enableFocusRing: enableFocusRing ?? true, diff --git a/packages/components/RadioGroup/src/Radio/useRadio.win32.ts b/packages/components/RadioGroup/src/Radio/useRadio.win32.ts index 35441aff921..594c6d93895 100644 --- a/packages/components/RadioGroup/src/Radio/useRadio.win32.ts +++ b/packages/components/RadioGroup/src/Radio/useRadio.win32.ts @@ -23,6 +23,21 @@ export const useRadio = (props: RadioProps): RadioInfo => { // Grabs the context information from RadioGroup (currently selected button and client's onChange callback) const radioGroupContext = useRadioGroupContext(); + const { + addRadioEnabledValue, + addRadioValue, + disabled: groupDisabled, + enabledValues, + invoked, + layout, + onChange, + removeRadioEnabledValue, + removeRadioValue, + updateInvoked, + updateSelectedButtonRef, + value: selectedValue, + values, + } = radioGroupContext; const { label, @@ -39,82 +54,82 @@ export const useRadio = (props: RadioProps): RadioInfo => { ...rest } = props; - const labelPosition = radioGroupContext.layout === 'horizontal-stacked' ? 'below' : 'after'; + const labelPosition = layout === 'horizontal-stacked' ? 'below' : 'after'; - const isDisabled = radioGroupContext.disabled || disabled; + const isDisabled = groupDisabled || disabled; const buttonRef = useViewCommandFocus(componentRef); /* We don't want to call the user's onChange multiple times on the same selection. */ const changeSelection = React.useCallback(() => { - if (value !== radioGroupContext.value) { - radioGroupContext.onChange && radioGroupContext.onChange(value); - radioGroupContext.updateSelectedButtonRef && componentRef && radioGroupContext.updateSelectedButtonRef(componentRef); + if (value !== selectedValue) { + onChange && onChange(value); + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); } - }, [radioGroupContext, value, componentRef]); + }, [componentRef, onChange, selectedValue, updateSelectedButtonRef, value]); /* We use the componentRef of the currently selected button to maintain the default tabbable element in a RadioGroup. Since the componentRef isn't generated until after initial render, we must update it once here. */ React.useEffect(() => { - if (value === radioGroupContext.value && !isDisabled) { - radioGroupContext.updateSelectedButtonRef && componentRef && radioGroupContext.updateSelectedButtonRef(componentRef); + if (value === selectedValue && !isDisabled) { + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); } - }, []); + }, [componentRef, isDisabled, selectedValue, updateSelectedButtonRef, value]); // Explicitly only run on mount and unmount React.useEffect(() => { - radioGroupContext.addRadioValue(value); + addRadioValue(value); return () => { - radioGroupContext.removeRadioValue(value); + removeRadioValue(value); }; - }, []); + }, [addRadioValue, removeRadioValue, value]); React.useEffect(() => { if (isDisabled) { - radioGroupContext.removeRadioEnabledValue(value); + removeRadioEnabledValue(value); } else { - radioGroupContext.addRadioEnabledValue(value); + addRadioEnabledValue(value); } - }, [isDisabled]); + }, [addRadioEnabledValue, isDisabled, removeRadioEnabledValue, value]); const isRTL = I18nManager.isRTL; const onInvoke = React.useCallback( (e: KeyPressEvent) => { if (e.nativeEvent.key in DirectionalArrowKeys) { - const length = radioGroupContext.enabledValues.length; + const length = enabledValues.length; const previous = e.nativeEvent.key === DirectionalArrowKeys.ArrowUp || (isRTL ? e.nativeEvent.key === DirectionalArrowKeys.ArrowRight : e.nativeEvent.key === DirectionalArrowKeys.ArrowLeft); const next = e.nativeEvent.key === DirectionalArrowKeys.ArrowDown || (isRTL ? e.nativeEvent.key === DirectionalArrowKeys.ArrowLeft : e.nativeEvent.key === DirectionalArrowKeys.ArrowRight); - const currRadioIndex = radioGroupContext.enabledValues.indexOf(radioGroupContext.value); + const currRadioIndex = enabledValues.indexOf(selectedValue); let newCurrRadioIndex; if (next) { newCurrRadioIndex = (currRadioIndex + 1) % length; - radioGroupContext.onChange && radioGroupContext.onChange(radioGroupContext.enabledValues[newCurrRadioIndex]); - radioGroupContext.updateInvoked && radioGroupContext.updateInvoked(true); + onChange && onChange(enabledValues[newCurrRadioIndex]); + updateInvoked && updateInvoked(true); } else if (previous) { newCurrRadioIndex = (currRadioIndex - 1 + length) % length; - radioGroupContext.onChange && radioGroupContext.onChange(radioGroupContext.enabledValues[newCurrRadioIndex]); - radioGroupContext.updateInvoked && radioGroupContext.updateInvoked(true); + onChange && onChange(enabledValues[newCurrRadioIndex]); + updateInvoked && updateInvoked(true); } } }, - [radioGroupContext], + [enabledValues, isRTL, onChange, selectedValue, updateInvoked], ); // Sets the updated selected button ref and focus if this Radio is selected via arrow key. React.useEffect(() => { - if (radioGroupContext.invoked && value === radioGroupContext.value && !isDisabled) { - radioGroupContext.updateSelectedButtonRef && componentRef && radioGroupContext.updateSelectedButtonRef(componentRef); + if (invoked && value === selectedValue && !isDisabled) { + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); componentRef?.current?.focus(); - radioGroupContext.updateInvoked && radioGroupContext.updateInvoked(false); + updateInvoked && updateInvoked(false); } - }, [radioGroupContext.invoked]); + }, [componentRef, invoked, isDisabled, selectedValue, updateInvoked, updateSelectedButtonRef, value]); const keys = ['ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft']; @@ -150,7 +165,7 @@ export const useRadio = (props: RadioProps): RadioInfo => { const state = { ...pressable.state, - selected: radioGroupContext.value === props.value && !isDisabled, + selected: selectedValue === props.value && !isDisabled, disabled: isDisabled || false, }; @@ -168,8 +183,8 @@ export const useRadio = (props: RadioProps): RadioInfo => { accessibilityHint: accessibilityHint ?? subtext, accessibilityState: getAccessibilityState(state.disabled, state.selected, accessibilityState), accessibilityActions: accessibilityActionsProp, - accessibilityPosInSet: accessibilityPosInSet ?? radioGroupContext.values.findIndex((x) => x == value) + 1, - accessibilitySetSize: accessibilitySetSize ?? radioGroupContext.values.length, + accessibilityPosInSet: accessibilityPosInSet ?? values.findIndex((x) => x == value) + 1, + accessibilitySetSize: accessibilitySetSize ?? values.length, focusable: !state.disabled, disabled: isDisabled, onAccessibilityAction: onAccessibilityAction, diff --git a/packages/components/RadioGroup/src/legacy/RadioButton.macos.tsx b/packages/components/RadioGroup/src/legacy/RadioButton.macos.tsx index fbf09b05567..aa253fc4c48 100644 --- a/packages/components/RadioGroup/src/legacy/RadioButton.macos.tsx +++ b/packages/components/RadioGroup/src/legacy/RadioButton.macos.tsx @@ -22,27 +22,28 @@ export const RadioButton = compose({ const defaultComponentRef = React.useRef(null); const { content, buttonKey, disabled, componentRef = defaultComponentRef } = userProps; const info = React.useContext(RadioGroupContext); + const { onChange, selectedKey, updateSelectedButtonRef } = info; // Reroute the native component's onPress event to RadioGroup's onChange - const onPressRerouted = () => { + const onPressRerouted = React.useCallback(() => { // Prevent calls to RadioGroup's onChange on the currently selected button - if (buttonKey != info.selectedKey) { - info.onChange && info.onChange(buttonKey); - info.updateSelectedButtonRef && componentRef && info.updateSelectedButtonRef(componentRef); + if (buttonKey != selectedKey) { + onChange && onChange(buttonKey); + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); } - }; + }, [buttonKey, componentRef, onChange, selectedKey, updateSelectedButtonRef]); /* We use the componentRef of the currently selected button to maintain the default tabbable element in a RadioGroup. Since the componentRef isn't generated until after initial render, we must update it once here. */ React.useEffect(() => { - if (buttonKey === info.selectedKey) { - info.updateSelectedButtonRef && componentRef && info.updateSelectedButtonRef(componentRef); + if (buttonKey === selectedKey) { + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); } - }, []); + }, [buttonKey, componentRef, selectedKey, updateSelectedButtonRef]); const styleProps = useStyling(userProps); - const isSelected = info.selectedKey === buttonKey; + const isSelected = selectedKey === buttonKey; const slotProps = mergeSettings(styleProps, { root: { ref: componentRef, diff --git a/packages/components/RadioGroup/src/legacy/RadioButton.tsx b/packages/components/RadioGroup/src/legacy/RadioButton.tsx index ad771c53e2d..17731d96372 100644 --- a/packages/components/RadioGroup/src/legacy/RadioButton.tsx +++ b/packages/components/RadioGroup/src/legacy/RadioButton.tsx @@ -38,25 +38,26 @@ export const RadioButton = compose({ // Grabs the context information from RadioGroup (currently selected button and client's onChange callback) const info = React.useContext(RadioGroupContext); + const { selectedKey, onChange, updateSelectedButtonRef, buttonKeys } = info; const buttonRef = useViewCommandFocus(componentRef); /* We don't want to call the user's onChange multiple times on the same selection. */ - const changeSelection = () => { - if (buttonKey != info.selectedKey) { - info.onChange && info.onChange(buttonKey); - info.updateSelectedButtonRef && componentRef && info.updateSelectedButtonRef(componentRef); + const changeSelection = React.useCallback(() => { + if (buttonKey != selectedKey) { + onChange && onChange(buttonKey); + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); } - }; + }, [buttonKey, componentRef, onChange, selectedKey, updateSelectedButtonRef]); /* We use the componentRef of the currently selected button to maintain the default tabbable element in a RadioGroup. Since the componentRef isn't generated until after initial render, we must update it once here. */ React.useEffect(() => { - if (buttonKey == info.selectedKey) { - info.updateSelectedButtonRef && componentRef && info.updateSelectedButtonRef(componentRef); + if (buttonKey == selectedKey) { + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); } - }, []); + }, [buttonKey, componentRef, selectedKey, updateSelectedButtonRef]); // Ensure focus is placed on button after click const changeSelectionWithFocus = useOnPressWithFocus(componentRef, changeSelection); @@ -77,12 +78,12 @@ export const RadioButton = compose({ break; } }, - [info, buttonKey], + [changeSelection], ); const state = { ...pressable.state, - selected: info.selectedKey === userProps.buttonKey, + selected: selectedKey === userProps.buttonKey, disabled: disabled || false, }; @@ -98,8 +99,8 @@ export const RadioButton = compose({ accessibilityLabel: accessibilityLabel ?? ariaLabel ?? content, accessibilityState: { disabled: state.disabled, selected: state.selected }, accessibilityActions: [{ name: 'Select', label: radioButtonSelectActionLabel }], - accessibilityPosInSet: accessibilityPosInSet ?? ariaPosInSet ?? info.buttonKeys.findIndex((x) => x == buttonKey) + 1, - accessibilitySetSize: accessibilitySetSize ?? ariaSetSize ?? info.buttonKeys.length, + accessibilityPosInSet: accessibilityPosInSet ?? ariaPosInSet ?? buttonKeys.findIndex((x) => x == buttonKey) + 1, + accessibilitySetSize: accessibilitySetSize ?? ariaSetSize ?? buttonKeys.length, focusable: !state.disabled, onAccessibilityAction: onAccessibilityAction, }, diff --git a/packages/components/RadioGroup/src/legacy/RadioButton.win32.tsx b/packages/components/RadioGroup/src/legacy/RadioButton.win32.tsx index 368f1150dac..bc2cc62c82c 100644 --- a/packages/components/RadioGroup/src/legacy/RadioButton.win32.tsx +++ b/packages/components/RadioGroup/src/legacy/RadioButton.win32.tsx @@ -46,50 +46,63 @@ export const RadioButton = compose({ // Grabs the context information from RadioGroup (currently selected button and client's onChange callback) const info = React.useContext(RadioGroupContext); + const { + addRadioButtonEnabledKey, + addRadioButtonKey, + buttonKeys, + enabledButtonKeys, + invoked, + onChange, + removeRadioButtonEnabledKey, + removeRadioButtonKey, + selectedKey, + updateInvoked, + updateSelectedButtonRef, + } = info; const buttonRef = useViewCommandFocus(componentRef); /* We don't want to call the user's onChange multiple times on the same selection. */ - const changeSelection = () => { - if (buttonKey != info.selectedKey) { - info.onChange && info.onChange(buttonKey); - info.updateSelectedButtonRef && componentRef && info.updateSelectedButtonRef(componentRef); + const changeSelection = React.useCallback(() => { + if (buttonKey != selectedKey) { + onChange && onChange(buttonKey); + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); } - }; + }, [buttonKey, componentRef, onChange, selectedKey, updateSelectedButtonRef]); /* We use the componentRef of the currently selected button to maintain the default tabbable element in a RadioGroup. Since the componentRef isn't generated until after initial render, we must update it once here. */ React.useEffect(() => { - if (buttonKey == info.selectedKey) { - info.updateSelectedButtonRef && componentRef && info.updateSelectedButtonRef(componentRef); + if (buttonKey == selectedKey) { + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); } - }, []); + }, [buttonKey, componentRef, selectedKey, updateSelectedButtonRef]); // Explicitly only run on mount and unmount React.useEffect(() => { - info.addRadioButtonKey(buttonKey); + addRadioButtonKey(buttonKey); if (!disabled) { - info.addRadioButtonEnabledKey(buttonKey); + addRadioButtonEnabledKey(buttonKey); } return () => { - info.removeRadioButtonKey(buttonKey); - info.removeRadioButtonEnabledKey(buttonKey); + removeRadioButtonKey(buttonKey); + removeRadioButtonEnabledKey(buttonKey); }; - }, []); + }, [addRadioButtonEnabledKey, addRadioButtonKey, buttonKey, disabled, removeRadioButtonEnabledKey, removeRadioButtonKey]); const isRTL = I18nManager.isRTL; const onInvoke = React.useCallback( (e: KeyPressEvent) => { if (e.nativeEvent.key in DirectionalArrowKeys) { - const length = info.enabledButtonKeys.length; + const length = enabledButtonKeys.length; const next = e.nativeEvent.key === DirectionalArrowKeys.ArrowDown || (isRTL ? e.nativeEvent.key === DirectionalArrowKeys.ArrowLeft : e.nativeEvent.key === DirectionalArrowKeys.ArrowRight); - const currRadioButtonIndex = info.enabledButtonKeys.indexOf(info.selectedKey); + const currRadioButtonIndex = enabledButtonKeys.indexOf(selectedKey); let newCurrRadioButtonIndex; if (next) { newCurrRadioButtonIndex = (currRadioButtonIndex + 1) % length; @@ -97,21 +110,21 @@ export const RadioButton = compose({ // previous newCurrRadioButtonIndex = (currRadioButtonIndex - 1 + length) % length; } - info.onChange && info.onChange(info.enabledButtonKeys[newCurrRadioButtonIndex]); - info.updateInvoked && info.updateInvoked(true); + onChange && onChange(enabledButtonKeys[newCurrRadioButtonIndex]); + updateInvoked && updateInvoked(true); } }, - [info], + [enabledButtonKeys, isRTL, onChange, selectedKey, updateInvoked], ); // Sets the updated selected button ref and focus if this Radio is selected via arrow key. React.useEffect(() => { - if (info.invoked && buttonKey === info.selectedKey && !disabled) { - info.updateSelectedButtonRef && componentRef && info.updateSelectedButtonRef(componentRef); + if (invoked && buttonKey === selectedKey && !disabled) { + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); componentRef?.current?.focus(); - info.updateInvoked && info.updateInvoked(false); + updateInvoked && updateInvoked(false); } - }, [info.invoked]); + }, [buttonKey, componentRef, disabled, invoked, selectedKey, updateInvoked, updateSelectedButtonRef]); const keys = ['ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft']; @@ -119,13 +132,13 @@ export const RadioButton = compose({ const onKeyDownProps = useKeyDownProps(onInvoke, ...keys); // Ensure focus is placed on button after click - const changeSelectionWithFocus = () => { - if (buttonKey != info.selectedKey) { - info.onChange && info.onChange(buttonKey); - info.updateSelectedButtonRef && componentRef && info.updateSelectedButtonRef(componentRef); - info.updateInvoked && info.updateInvoked(true); + const changeSelectionWithFocus = React.useCallback(() => { + if (buttonKey != selectedKey) { + onChange && onChange(buttonKey); + updateSelectedButtonRef && componentRef && updateSelectedButtonRef(componentRef); + updateInvoked && updateInvoked(true); } - }; + }, [buttonKey, componentRef, onChange, selectedKey, updateInvoked, updateSelectedButtonRef]); /* RadioButton changes selection when focus is moved between each RadioButton and on a click */ const pressable = useAsPressable({ @@ -143,12 +156,12 @@ export const RadioButton = compose({ break; } }, - [info, buttonKey], + [changeSelection], ); const state = { ...pressable.state, - selected: info.selectedKey === userProps.buttonKey && !disabled, + selected: selectedKey === userProps.buttonKey && !disabled, disabled: disabled || false, }; @@ -164,8 +177,8 @@ export const RadioButton = compose({ accessibilityLabel: accessibilityLabel ?? ariaLabel ?? content, accessibilityState: { disabled: state.disabled, selected: state.selected }, accessibilityActions: [{ name: 'Select', label: radioButtonSelectActionLabel }], - accessibilityPosInSet: accessibilityPosInSet ?? ariaPosInSet ?? info.buttonKeys.findIndex((x) => x == buttonKey) + 1, - accessibilitySetSize: accessibilitySetSize ?? ariaSetSize ?? info.buttonKeys.length, + accessibilityPosInSet: accessibilityPosInSet ?? ariaPosInSet ?? buttonKeys.findIndex((x) => x == buttonKey) + 1, + accessibilitySetSize: accessibilitySetSize ?? ariaSetSize ?? buttonKeys.length, focusable: !state.disabled, onAccessibilityAction: onAccessibilityAction, ...onKeyDownProps, diff --git a/packages/components/RadioGroup/src/legacy/RadioGroup.tsx b/packages/components/RadioGroup/src/legacy/RadioGroup.tsx index 64e0da5017e..5e234d19cdc 100644 --- a/packages/components/RadioGroup/src/legacy/RadioGroup.tsx +++ b/packages/components/RadioGroup/src/legacy/RadioGroup.tsx @@ -64,16 +64,14 @@ export const RadioGroup = compose({ const onAddRadioButtonKey = React.useCallback( (buttonKey: string) => { - buttonKeys.push(buttonKey); - setButtonKeys(buttonKeys); + setButtonKeys((prevButtonKeys) => [...prevButtonKeys, buttonKey]); }, [setButtonKeys], ); const onRemoveRadioButtonKey = React.useCallback( (buttonKey: string) => { - buttonKeys.filter((item) => item !== buttonKey); - setButtonKeys(buttonKeys); + setButtonKeys((prevButtonKeys) => prevButtonKeys.filter((item) => item !== buttonKey)); }, [setButtonKeys], ); @@ -82,16 +80,14 @@ export const RadioGroup = compose({ const onAddRadioButtonEnabledKey = React.useCallback( (buttonKey: string) => { - enabledButtonKeys.push(buttonKey); - setEnabledButtonKeys(enabledButtonKeys); + setEnabledButtonKeys((prevEnabledButtonKeys) => [...prevEnabledButtonKeys, buttonKey]); }, [setEnabledButtonKeys], ); const onRemoveRadioButtonEnabledKey = React.useCallback( (buttonKey: string) => { - enabledButtonKeys.filter((item) => item !== buttonKey); - setEnabledButtonKeys(enabledButtonKeys); + setEnabledButtonKeys((prevEnabledButtonKeys) => prevEnabledButtonKeys.filter((item) => item !== buttonKey)); }, [setEnabledButtonKeys], ); diff --git a/packages/components/Stack/src/Stack.tsx b/packages/components/Stack/src/Stack.tsx index 3cdafd8d537..3deba9fdde3 100644 --- a/packages/components/Stack/src/Stack.tsx +++ b/packages/components/Stack/src/Stack.tsx @@ -41,7 +41,7 @@ const render = (Slots: ISlots, renderData: IStackRenderData, .. if (gap && gap > 0 && children && globalThis.__jsiExecutorDescription !== 'ChakraRuntime') { const extraStyle: ViewStyle = horizontal ? { marginLeft: gap } : { marginTop: gap }; // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - TODO, fix typing error + // @ts-expect-error - TODO, fix typing error children = React.Children.map(children, (child: React.ReactChild, index: number) => { if (React.isValidElement(child) && index > 0) { const childProps = child.props as ObjectBase; diff --git a/packages/components/Switch/src/useSwitch.ts b/packages/components/Switch/src/useSwitch.ts index a06eac16bfd..48d79131029 100644 --- a/packages/components/Switch/src/useSwitch.ts +++ b/packages/components/Switch/src/useSwitch.ts @@ -56,7 +56,7 @@ export const useSwitch = (props: SwitchProps, animationConfig?: AnimationConfig) setIsInit(false); } - }, [checked, checkedState]); + }, [animation, checkedState, isInit, thumbTranslateValue, trackBackgroundAnimation]); const switchAnimationStyles = React.useMemo(() => { // transform over toggled on position to toggled off position and vice versa @@ -89,7 +89,7 @@ export const useSwitch = (props: SwitchProps, animationConfig?: AnimationConfig) }), }, }; - }, [checkedState]); + }, [animation, animationConfig.toggleOffBgColor, animationConfig.toggleOnBgColor, checkedState, trackBackgroundAnimation]); const focusRef = disabled ? null : componentRef; diff --git a/packages/components/TabList/src/Tab/useTab.ts b/packages/components/TabList/src/Tab/useTab.ts index b1aa19309e9..cfbee29f46f 100644 --- a/packages/components/TabList/src/Tab/useTab.ts +++ b/packages/components/TabList/src/Tab/useTab.ts @@ -68,7 +68,7 @@ export const useTab = (props: TabProps): TabInfo => { componentRef && setFocusedTabRef(componentRef); } return () => removeTabKey(tabKey); - }, []); + }, [addTabKey, componentRef, removeTabKey, selectedKey, setFocusedTabRef, tabKey]); // Used when creating accessibility properties in mergeSettings below. const onAccessibilityActionProp = React.useCallback( diff --git a/packages/components/TabList/src/Tab/useTab.win32.ts b/packages/components/TabList/src/Tab/useTab.win32.ts index 08d22b0d7ed..5e295349352 100644 --- a/packages/components/TabList/src/Tab/useTab.win32.ts +++ b/packages/components/TabList/src/Tab/useTab.win32.ts @@ -87,17 +87,15 @@ export const useTab = (props: TabProps): TabInfo => { componentRef && setFocusedTabRef(componentRef); } return () => removeTabKey(tabKey); - }, []); + }, [addTabKey, componentRef, removeTabKey, selectedKey, setFocusedTabRef, tabKey]); React.useEffect(() => { updateTabRef(tabKey, componentRef); - // Disable exhaustive-deps warning because the hook shouldn't run whenever the excluded dependency, updateTabRef, changes. - }, [tabKey, componentRef]); + }, [componentRef, tabKey, updateTabRef]); React.useEffect(() => { updateDisabledTabs(tabKey, disabled); - // Disable exhaustive-deps warning because the hook shouldn't run whenever the excluded dependency, updateDisabledTabs, change. - }, [tabKey, disabled]); + }, [disabled, tabKey, updateDisabledTabs]); /** * Continuing from `handlePressAndDeferFocus`, once we have updated the selection state, we can safely set focus to the correct tab so @@ -109,8 +107,7 @@ export const useTab = (props: TabProps): TabInfo => { componentRef?.current?.focus(); setInvoked(false); } - // Disable exhaustive-deps warning because hook should only run whenever 'invoked' and its setter are updated. - }, [invoked, setInvoked]); + }, [componentRef, invoked, isDisabled, selectedKey, setFocusedTabRef, setInvoked, tabKey]); // Used when creating accessibility properties in mergeSettings below. const onAccessibilityActionProp = React.useCallback( diff --git a/packages/components/TabList/src/Tab/useTabAnimation.ts b/packages/components/TabList/src/Tab/useTabAnimation.ts index 3d03eb8782d..e421974f886 100644 --- a/packages/components/TabList/src/Tab/useTabAnimation.ts +++ b/packages/components/TabList/src/Tab/useTabAnimation.ts @@ -35,8 +35,7 @@ export function useTabAnimation( if (tabKey === selectedKey && updateAnimatedIndicatorStyles) { updateAnimatedIndicatorStyles({ backgroundColor: tokens.indicatorColor, borderRadius: tokens.indicatorRadius }); } - // Disabling warning because effect does not need to fire on `updateAnimatedIndicatorStyles` being changed - }, [tabKey, selectedKey, tokens.indicatorColor, tokens.indicatorRadius]); + }, [tabKey, selectedKey, tokens.indicatorColor, tokens.indicatorRadius, updateAnimatedIndicatorStyles]); /** * This checks to see if we have relevant info to calculate the layout position and dimensions of the indicator. If this check fails, we don't diff --git a/packages/components/TabList/src/TabList/useTabList.ts b/packages/components/TabList/src/TabList/useTabList.ts index 52a54a14d70..f3332250383 100644 --- a/packages/components/TabList/src/TabList/useTabList.ts +++ b/packages/components/TabList/src/TabList/useTabList.ts @@ -145,9 +145,10 @@ export const useTabList = (props: TabListProps): TabListInfo => { if (isSelectedTabDisabled) { // switch focus to the next available tab key let tabIndex = tabKeys.indexOf(selectedTabKey); - for (let i = 0; i < tabKeys.length; i++) { - tabIndex = (tabIndex + 1) % tabKeys.length; - if (!disabledStateMap[tabKeys[tabIndex]]) { + const orderedTabKeys = [...tabKeys.slice(tabIndex + 1), ...tabKeys.slice(0, tabIndex + 1)]; + for (const candidateTabKey of orderedTabKeys) { + tabIndex = tabKeys.indexOf(candidateTabKey); + if (!disabledStateMap[candidateTabKey]) { break; } } @@ -159,7 +160,7 @@ export const useTabList = (props: TabListProps): TabListInfo => { setFocusedTabRef(ref); } } - }, [isSelectedTabDisabled]); + }, [disabledStateMap, isSelectedTabDisabled, selectedTabKey, tabKeys, tabRefMap]); // win32 only prop used to implemement CTRL + TAB shortcut native to windows tab components const onRootKeyDown = React.useCallback( diff --git a/packages/components/TabList/src/TabListAnimatedIndicator/useAnimatedIndicatorStyles.ts b/packages/components/TabList/src/TabListAnimatedIndicator/useAnimatedIndicatorStyles.ts index 53ec9fb61eb..285661b9f06 100644 --- a/packages/components/TabList/src/TabListAnimatedIndicator/useAnimatedIndicatorStyles.ts +++ b/packages/components/TabList/src/TabListAnimatedIndicator/useAnimatedIndicatorStyles.ts @@ -16,7 +16,7 @@ export function useAnimatedIndicatorStyles(props: AnimatedIndicatorProps): Anima const indicatorScale = React.useRef(new Animated.Value(1)).current; // Save the initial selected layout, this shouldn't update after the first render. - const startingKey = React.useMemo(() => selectedKey, []); + const startingKey = React.useRef(selectedKey).current; React.useEffect(() => { const startingIndicatorLayout = tabLayout[startingKey]; @@ -51,11 +51,7 @@ export function useAnimatedIndicatorStyles(props: AnimatedIndicatorProps): Anima }), ]).start(); } - // This hook should only run when (1) the selected key / vertical prop changes and (2) whenever the tabLayout map changes because that implies an - // extent change among the tabs: specifically whenever the selected tab is bolded and previously selected tab is unbolded. Without checking for #2, - // the animation for scaling and translating the indicator uses outdated layout info, resulting in a unaligned, small indicator. All other dependencies - // are irrelevant. - }, [selectedKey, tabLayout, vertical]); + }, [indicatorScale, indicatorTranslate, selectedKey, startingKey, tabLayout, vertical]); // Calculate styles using both layout information and user defined styles const styles = React.useMemo(() => { diff --git a/packages/deprecated/foundation-tokens/src/Token.function.ts b/packages/deprecated/foundation-tokens/src/Token.function.ts index 4b98f90adc4..f5c641815b6 100644 --- a/packages/deprecated/foundation-tokens/src/Token.function.ts +++ b/packages/deprecated/foundation-tokens/src/Token.function.ts @@ -120,7 +120,7 @@ export function buildComponentTokens { + for (const slot of Object.getOwnPropertyNames(factories)) { type IPropsForSlot = TSlotProps[keyof TSlotProps]; const factoriesBase = factories[slot]; const mappings: ITokensForSlot = { toStyle: [], toTokens: [], functions: [] }; @@ -165,6 +165,6 @@ export function buildComponentTokens(props, tokenProps, theme, slotName, getValue, keys, mappings); }; - }); + } return { tokenKeys, handlers }; } diff --git a/packages/deprecated/foundation-tokens/src/Token.test.ts b/packages/deprecated/foundation-tokens/src/Token.test.ts index a2ec9fe670c..01b65112c32 100644 --- a/packages/deprecated/foundation-tokens/src/Token.test.ts +++ b/packages/deprecated/foundation-tokens/src/Token.test.ts @@ -98,9 +98,9 @@ describe('Token settings unit tests', () => { const resolved1 = MockButton({ content: 'button1' }, b1, theme, cache, false); const resolved2 = MockButton({ content: 'button2' }, b1, theme, cache, false); expect(resolved1).toEqual(resolved2); - Object.getOwnPropertyNames(resolved1).forEach((key) => { + for (const key of Object.getOwnPropertyNames(resolved1)) { expect(resolved1[key]).toBe(resolved2[key]); - }); + } }); test('setting props that match defaults keep same object', () => { @@ -108,9 +108,9 @@ describe('Token settings unit tests', () => { const resolved1 = MockButton({ content: 'button1' }, b1, theme, cache, false); const resolved2 = MockButton({ content: 'button2', color: 'buttonText' }, b1, theme, cache, false); expect(resolved1).toEqual(resolved2); - Object.getOwnPropertyNames(resolved1).forEach((key) => { + for (const key of Object.getOwnPropertyNames(resolved1)) { expect(resolved1[key]).toBe(resolved2[key]); - }); + } }); test('prop token overrides produce partial new object', () => { @@ -127,9 +127,9 @@ describe('Token settings unit tests', () => { const resolved1 = MockButton({ content: 'button1', borderRadius: 3, color: 'purple' }, b1, theme, cache, false); const resolved2 = MockButton({ content: 'button2', color: 'purple', borderRadius: 3 }, b1, theme, cache, false); expect(resolved1).toEqual(resolved2); - Object.getOwnPropertyNames(resolved1).forEach((key) => { + for (const key of Object.getOwnPropertyNames(resolved1)) { expect(resolved1[key]).toBe(resolved2[key]); - }); + } }); test('prop token overrides, different keys same value produce different objects', () => { diff --git a/packages/deprecated/foundation-tokens/src/Token.ts b/packages/deprecated/foundation-tokens/src/Token.ts index d6fc269a57c..5b5456ccd19 100644 --- a/packages/deprecated/foundation-tokens/src/Token.ts +++ b/packages/deprecated/foundation-tokens/src/Token.ts @@ -51,10 +51,10 @@ export function processTokens { + for (const slotName of Object.getOwnPropertyNames(handlers)) { const handler = handlers[slotName]; resolvedSlotProps[slotName] = handler(slotProps[slotName] || {}, tokenPropInfo as any, theme, slotName, cache); - }); + } // return the cache entry return resolvedSlotProps as unknown as ISlotProps; diff --git a/packages/deprecated/theme-registry/src/Registry.test.ts b/packages/deprecated/theme-registry/src/Registry.test.ts index adb19476ec4..4e68d25f73d 100644 --- a/packages/deprecated/theme-registry/src/Registry.test.ts +++ b/packages/deprecated/theme-registry/src/Registry.test.ts @@ -111,7 +111,7 @@ function processor(parent: IFakeTheme): Partial { root: { textColor: 'light' + (parent.settings.base.root as IFakeStyle).textColor, fontFamily: (parent.settings.base.root as IFakeStyle).fontFamily + ' Light', - fontSize: (parent.settings.base.root as IFakeStyle).fontSize - 2, + fontSize: ((parent.settings.base.root as IFakeStyle).fontSize as number) - 2, }, }, }, diff --git a/packages/deprecated/theming-react-native/src/platform/index.ts b/packages/deprecated/theming-react-native/src/platform/index.ts index 80db5bc41fb..9e8d9454a58 100644 --- a/packages/deprecated/theming-react-native/src/platform/index.ts +++ b/packages/deprecated/theming-react-native/src/platform/index.ts @@ -1 +1 @@ -export * from './PlatformDefaults'; +export { createPlatformThemeRegistry } from './PlatformDefaults'; diff --git a/packages/experimental/ActivityIndicator/src/ActivityIndicator.mobile.tsx b/packages/experimental/ActivityIndicator/src/ActivityIndicator.mobile.tsx index b070182f208..ed43745ce45 100644 --- a/packages/experimental/ActivityIndicator/src/ActivityIndicator.mobile.tsx +++ b/packages/experimental/ActivityIndicator/src/ActivityIndicator.mobile.tsx @@ -61,7 +61,7 @@ export const ActivityIndicator = compose({ } }); } - }, [rotationAngle, animating]); + }, [rotationAngle]); const stopRotation = () => { if (rotationAnimation.current) { @@ -86,7 +86,7 @@ export const ActivityIndicator = compose({ } else { stopRotation(); } - }, [animating, hidesWhenStopped, rotationAngle]); + }, [animating, rotationAngle, startRotation]); const interpolateSpin = rotationAngle.interpolate({ inputRange: [0, 359], diff --git a/packages/experimental/AppearanceAdditions/src/NativeAppearanceAdditions.ts b/packages/experimental/AppearanceAdditions/src/NativeAppearanceAdditions.ts index f3ca3c1fb60..e768587659d 100644 --- a/packages/experimental/AppearanceAdditions/src/NativeAppearanceAdditions.ts +++ b/packages/experimental/AppearanceAdditions/src/NativeAppearanceAdditions.ts @@ -1,9 +1,9 @@ import type { AccessibilityContrastOption, SizeClass, UserInterfaceLevel } from './NativeAppearanceAdditions.types'; export const NativeAppearanceAdditions = { - addListener: (_: string) => {}, + addListener: (_: string) => undefined, - removeListeners: (_: number) => {}, + removeListeners: (_: number) => undefined, initializeTraitCollection: (_: number) => { console.warn('NativeAppearanceAdditions is only available on iOS'); }, diff --git a/packages/experimental/Drawer/src/useDrawer.ts b/packages/experimental/Drawer/src/useDrawer.ts index 0375dda7756..65c80315ab7 100644 --- a/packages/experimental/Drawer/src/useDrawer.ts +++ b/packages/experimental/Drawer/src/useDrawer.ts @@ -8,7 +8,18 @@ import type { DrawerProps, DrawerInfo } from './Drawer.types'; const { height, width } = Dimensions.get('window'); export const useDrawer = (props: DrawerProps): DrawerInfo => { - const { onBlur, onFocus, accessibilityLabel, open, drawerPosition = 'left', showHandle = true, children, ...rest } = props; + const { + onBlur, + onClose: onCloseProp, + onFocus, + onScrimClick: onScrimClickProp, + accessibilityLabel, + open, + drawerPosition = 'left', + showHandle = true, + children, + ...rest + } = props; const animatedValue = useRef(new Animated.Value(0)).current; const [internalOpen, setInternalOpen] = useState(open); const [isFirstOpen, setIsFirstOpen] = useState(true); @@ -36,20 +47,20 @@ export const useDrawer = (props: DrawerProps): DrawerInfo => { }); } } - }, [animatedValue, open]); + }, [animatedValue, isFirstOpen, open]); const onClose = useCallback( (e: InteractionEvent) => { - props?.onClose && props.onClose(e); + onCloseProp && onCloseProp(e); }, - [props?.onClose], + [onCloseProp], ); const onScrimClick = useCallback( (e: InteractionEvent) => { - props?.onScrimClick && props.onScrimClick(e); + onScrimClickProp && onScrimClickProp(e); }, - [props?.onScrimClick], + [onScrimClickProp], ); const animatedTranslateX = animatedValue.interpolate({ diff --git a/packages/experimental/MenuButton/src/renderContextualMenu.tsx b/packages/experimental/MenuButton/src/renderContextualMenu.tsx index 7374cb01551..9cd80881cec 100644 --- a/packages/experimental/MenuButton/src/renderContextualMenu.tsx +++ b/packages/experimental/MenuButton/src/renderContextualMenu.tsx @@ -9,7 +9,7 @@ export const renderContextualMenu = (contextualMenu: ContextualMenuProps, menuIt return ( {menuItems?.map((menuItem) => { - return menuItem.hasSubmenu ? : ; + return menuItem.hasSubmenu ? : ; })} ); diff --git a/packages/experimental/NativeFontMetrics/src/NativeFontMetrics.ts b/packages/experimental/NativeFontMetrics/src/NativeFontMetrics.ts index d953c65de63..49b2821facb 100644 --- a/packages/experimental/NativeFontMetrics/src/NativeFontMetrics.ts +++ b/packages/experimental/NativeFontMetrics/src/NativeFontMetrics.ts @@ -1,9 +1,9 @@ import type { TextStyle } from './NativeFontMetrics.types'; const NativeFontMetrics = { - addListener: (_: string) => {}, + addListener: (_: string) => undefined, - removeListeners: (_: number) => {}, + removeListeners: (_: number) => undefined, currentScaleFactors: () => { console.warn('NativeFontMetrics is only available on iOS'); return {}; diff --git a/packages/experimental/Overflow/src/Overflow/useOverflow.ts b/packages/experimental/Overflow/src/Overflow/useOverflow.ts index a8ca900307b..77e2cea0e56 100644 --- a/packages/experimental/Overflow/src/Overflow/useOverflow.ts +++ b/packages/experimental/Overflow/src/Overflow/useOverflow.ts @@ -70,8 +70,7 @@ export function useOverflow(props: OverflowProps): OverflowInfo { delete overflowItemUpdateCallbacks[id]; overflowManager.removeItem(id); }, - // overflowManager is not needed as a dependency, due to being attached to a ref - [overflowItemUpdateCallbacks], + [overflowItemUpdateCallbacks, overflowManager], ); const userSetLayoutState = React.useCallback((data: SetLayoutStateParam) => { @@ -161,7 +160,7 @@ export function useOverflow(props: OverflowProps): OverflowInfo { overflowManager.update(containerSize); } // We only want to run this layout effect whenever the container's size updates. - }, [containerSize]); + }, [containerSize, layoutState.container, onOverflowUpdate, onUpdateItemDimension, onUpdateItemVisibility, overflowManager, padding]); // On initial mount, wait for layout to run for all items / components before showing. // For future items that may be added / removed, this will remain true to reduce flicker. diff --git a/packages/experimental/Overflow/src/OverflowItem/useOverflowItem.ts b/packages/experimental/Overflow/src/OverflowItem/useOverflowItem.ts index d57610b720d..2d50fbe83f1 100644 --- a/packages/experimental/Overflow/src/OverflowItem/useOverflowItem.ts +++ b/packages/experimental/Overflow/src/OverflowItem/useOverflowItem.ts @@ -11,7 +11,7 @@ import { useOverflowContext } from '../OverflowContext'; * Hook for getting the item's onLayout callback and whether the item should be showing. */ export function useOverflowItem(props: OverflowItemProps): OverflowItemInfo { - const { overflowID, priority, onOverflowItemChange: onOveflowItemChange } = props; + const { overflowID, priority, onLayout: onLayoutProp, onOverflowItemChange: onOveflowItemChange } = props; const { containerSize, dontHideBeforeReady, @@ -41,14 +41,14 @@ export function useOverflowItem(props: OverflowItemProps): OverflowItemInfo { updateItem({ id: overflowID, size: size, priority: priority }); } // The item's size updates whenever the onLayout callback runs. This is purely for updating the item info when its priority changes. - }, [priority]); + }, [overflowID, priority, size, updateItem]); React.useEffect(() => { register(overflowID, handleOverflowItemChange); return () => disconnect(overflowID); // Runs when mounting / unmounting / whenever an onOverflowItemChange callback is added. Register / disconnect shouldn't be called at any // other point. - }, [onOveflowItemChange]); + }, [disconnect, handleOverflowItemChange, onOveflowItemChange, overflowID, register]); React.useLayoutEffect(() => { // When rendered in a ScrollView on win32, the layout event initially returns a width = 0 before getting the correct layout values. @@ -61,15 +61,15 @@ export function useOverflowItem(props: OverflowItemProps): OverflowItemInfo { } } // This effect should only run when the size of the item or container changes. - }, [size, containerSize]); + }, [containerSize, initialOverflowLayoutDone, overflowID, priority, setLayoutState, size, updateItem]); const onLayout = React.useCallback( (e: LayoutChangeEvent) => { const itemSize = { width: e.nativeEvent.layout.width, height: e.nativeEvent.layout.height }; setSize(itemSize); - props.onLayout && props.onLayout(e); + onLayoutProp && onLayoutProp(e); }, - [props], + [onLayoutProp], ); // Get item dimensions const layoutDone = initialOverflowLayoutDone && !!size; diff --git a/packages/experimental/Shimmer/src/Shimmer.test.tsx b/packages/experimental/Shimmer/src/Shimmer.test.tsx index 5ec3a87f5bf..ac5764574b7 100644 --- a/packages/experimental/Shimmer/src/Shimmer.test.tsx +++ b/packages/experimental/Shimmer/src/Shimmer.test.tsx @@ -5,7 +5,7 @@ import * as renderer from 'react-test-renderer'; import { Shimmer } from './Shimmer'; import type { ShimmerCircleElement, ShimmerRectElement } from './Shimmer.types'; -function shimmerRects(): Array { +function shimmerRects(): (ShimmerRectElement | ShimmerCircleElement)[] { return [ { type: 'rect', diff --git a/packages/experimental/Shimmer/src/Shimmer.tsx b/packages/experimental/Shimmer/src/Shimmer.tsx index 1c5e9af0d65..98a9951ceb5 100644 --- a/packages/experimental/Shimmer/src/Shimmer.tsx +++ b/packages/experimental/Shimmer/src/Shimmer.tsx @@ -40,14 +40,12 @@ export const Shimmer = compose({ }), [ props.angle, - props.backgroundColor, props.delay, props.duration, props.shimmerColor, - props.shimmerColorOpacity, props.shimmerWaveColor, - props.shimmerWaveColorOpacity, props.style, + tokens, ], ); @@ -69,11 +67,11 @@ export const Shimmer = compose({ useNativeDriver: true, }), ).start(); - }, [memoizedShimmerData.delay, memoizedShimmerData.duration]); + }, [endValue, memoizedShimmerData.delay, memoizedShimmerData.duration, x1]); useEffect(() => { shimmerAnimation(); - }); + }, [shimmerAnimation]); return (rest: ShimmerProps) => { const { elements, ...mergedProps } = mergeProps(props, rest); diff --git a/packages/experimental/Shimmer/src/Shimmer.types.shared.ts b/packages/experimental/Shimmer/src/Shimmer.types.shared.ts index ec0af9e1c3a..b74ff614830 100644 --- a/packages/experimental/Shimmer/src/Shimmer.types.shared.ts +++ b/packages/experimental/Shimmer/src/Shimmer.types.shared.ts @@ -161,7 +161,7 @@ export interface ShimmerProps extends ViewProps, ShimmerTokens { /** * Shimmer shapes that define the masking effect of the Shimmer control. */ - elements: Array; + elements: ShimmerElementTypes[]; } export interface ShimmerType { diff --git a/packages/experimental/Spinner/src/Spinner.android.tsx b/packages/experimental/Spinner/src/Spinner.android.tsx index 603f47a3ac6..dceefab49cf 100644 --- a/packages/experimental/Spinner/src/Spinner.android.tsx +++ b/packages/experimental/Spinner/src/Spinner.android.tsx @@ -1,5 +1,5 @@ /** @jsxImportSource @fluentui-react-native/framework-base */ -import { useEffect, useCallback } from 'react'; +import { useCallback, useEffect, useRef } from 'react'; import type { ColorValue } from 'react-native'; import { Animated, Easing, View } from 'react-native'; @@ -39,7 +39,7 @@ export const Spinner = compose({ const status = props.status !== undefined ? props.status : 'active'; const hidesWhenStopped = props.hidesWhenStopped != undefined ? props.hidesWhenStopped : true; const hideOpacity = status === 'inactive' && hidesWhenStopped == true ? 0 : 1; - const rotationAngle = new Animated.Value(0); + const rotationAngle = useRef(new Animated.Value(0)).current; const startRotation = useCallback(() => { Animated.loop( @@ -50,28 +50,19 @@ export const Spinner = compose({ useNativeDriver: true, }), ).start(); - }, [rotationAngle, status]); + }, [rotationAngle]); - const stopRotation = () => { + const stopRotation = useCallback(() => { rotationAngle.stopAnimation(); - }; + }, [rotationAngle]); useEffect(() => { - Animated.loop( - Animated.timing(rotationAngle, { - toValue: 360, - duration: 750, - easing: Easing.linear, - useNativeDriver: true, - }), - ).start(); - if (status === 'active') { startRotation(); } else { stopRotation(); } - }, [status, hidesWhenStopped, rotationAngle]); + }, [startRotation, status, stopRotation]); const interpolateSpin = rotationAngle.interpolate({ inputRange: [0, 359], diff --git a/packages/framework/use-slot/src/useSlot.ts b/packages/framework/use-slot/src/useSlot.ts index 6052882938e..3192aea955c 100644 --- a/packages/framework/use-slot/src/useSlot.ts +++ b/packages/framework/use-slot/src/useSlot.ts @@ -57,6 +57,6 @@ export function useSlot( // now render the component with the final props return renderForJsxRuntime(innerComponent, innerProps); }), - [component, filter, slotData], + [filter, slotData], ); } diff --git a/packages/framework/use-styling/src/buildUseStyling.test.ts b/packages/framework/use-styling/src/buildUseStyling.test.ts index b520f6376fd..bf5552196a2 100644 --- a/packages/framework/use-styling/src/buildUseStyling.test.ts +++ b/packages/framework/use-styling/src/buildUseStyling.test.ts @@ -129,8 +129,8 @@ describe('useStyling test suite', () => { const useStyling = buildUseStyling(baseOptions, themeHelper); const slotProps = useStyling({}); const slotProps2 = useStyling({ p1: 2, p2: 'bar' }); - Object.keys(slotProps).forEach((key) => { + for (const key of Object.keys(slotProps)) { expect(slotProps[key]).toBe(slotProps2[key]); - }); + } }); }); diff --git a/packages/framework/use-styling/src/buildUseStyling.ts b/packages/framework/use-styling/src/buildUseStyling.ts index 83f652a58a5..d10dab20c5f 100644 --- a/packages/framework/use-styling/src/buildUseStyling.ts +++ b/packages/framework/use-styling/src/buildUseStyling.ts @@ -67,10 +67,10 @@ function resolveToSlotProps( cache: GetTypedMemoValue, ): TSlotProps { const slotProps = {}; - Object.keys(styles).forEach((key) => { + for (const key of Object.keys(styles)) { const style = styles[key]; slotProps[key] = typeof style === 'function' ? style(tokens, theme, cache(null, [key])[1]) : style; - }); + } return slotProps as TSlotProps; } diff --git a/packages/theming/apple-theme/src/appleColors.macos.ts b/packages/theming/apple-theme/src/appleColors.macos.ts index 1f4ab021d88..fcfa3061d63 100644 --- a/packages/theming/apple-theme/src/appleColors.macos.ts +++ b/packages/theming/apple-theme/src/appleColors.macos.ts @@ -1,6 +1,6 @@ import type { ThemeColorDefinition, AppearanceOptions } from '@fluentui-react-native/theme-types'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore +// @ts-expect-error import { PlatformColor, DynamicColorMacOS, ColorWithSystemEffectMacOS } from 'react-native-macos'; import type { AppleSemanticPalette, FluentUIApplePalette } from './appleColors.types.macos'; diff --git a/packages/theming/apple-theme/src/createAppleTheme.macos.ts b/packages/theming/apple-theme/src/createAppleTheme.macos.ts index 44a30f8ec55..8dc79c841fd 100644 --- a/packages/theming/apple-theme/src/createAppleTheme.macos.ts +++ b/packages/theming/apple-theme/src/createAppleTheme.macos.ts @@ -20,7 +20,7 @@ export function createAppleTheme(): ThemeReference { highContrastHandler(); // Invalidate theme and set prop when high contrast setting changes // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error AccessibilityInfo.addEventListener('highContrastChanged', () => { highContrastHandler(); }); @@ -33,7 +33,7 @@ export function createAppleTheme(): ThemeReference { function highContrastHandler() { // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error AccessibilityInfo.isHighContrastEnabled().then((isEnabled) => { setIsHighContrast(isEnabled); appleThemeReference.invalidate(); diff --git a/packages/theming/default-theme/src/stockWebPalette.ts b/packages/theming/default-theme/src/stockWebPalette.ts index 552c6d79d19..04a01ccd070 100644 --- a/packages/theming/default-theme/src/stockWebPalette.ts +++ b/packages/theming/default-theme/src/stockWebPalette.ts @@ -26,28 +26,28 @@ export function getStockWebPalette(): ThemeColorDefinition { red: globalTokens.color.red.primary, redDark: globalTokens.color.burgundy.primary, - // @ts-ignore + // @ts-expect-error accent: globalTokens.color.brand80, blackTranslucent40: 'rgba(0,0,0,.4)', // Colors to be deprecated - // @ts-ignore + // @ts-expect-error themeDarker: globalTokens.color.brand40, - // @ts-ignore + // @ts-expect-error themeDark: globalTokens.color.brand60, - // @ts-ignore + // @ts-expect-error themeDarkAlt: globalTokens.color.brand70, - // @ts-ignore + // @ts-expect-error themePrimary: globalTokens.color.brand80, - // @ts-ignore + // @ts-expect-error themeSecondary: globalTokens.color.brand90, - // @ts-ignore + // @ts-expect-error themeTertiary: globalTokens.color.brand120, - // @ts-ignore + // @ts-expect-error themeLight: globalTokens.color.brand140, - // @ts-ignore + // @ts-expect-error themeLighter: globalTokens.color.brand150, - // @ts-ignore + // @ts-expect-error themeLighterAlt: globalTokens.color.brand160, }), ...createColorAliasTokens('light'), @@ -74,29 +74,29 @@ export function getStockWebDarkPalette(): ThemeColorDefinition { neutralLighterAlt: '#201f1e', white: '#1b1a19', red: globalTokens.color.red.primary, - // @ts-ignore + // @ts-expect-error accent: globalTokens.color.brand40, redDark: '#f1707b', blackTranslucent40: 'rgba(0,0,0,.4)', // Colors to be deprecated - // @ts-ignore + // @ts-expect-error themeDarker: globalTokens.color.brand110, - // @ts-ignore + // @ts-expect-error themeDark: globalTokens.color.brand100, - // @ts-ignore + // @ts-expect-error themeDarkAlt: globalTokens.color.brand100, - // @ts-ignore + // @ts-expect-error themePrimary: globalTokens.color.brand90, - // @ts-ignore + // @ts-expect-error themeSecondary: globalTokens.color.brand90, - // @ts-ignore + // @ts-expect-error themeTertiary: globalTokens.color.brand60, - // @ts-ignore + // @ts-expect-error themeLight: globalTokens.color.brand50, - // @ts-ignore + // @ts-expect-error themeLighter: globalTokens.color.brand40, - // @ts-ignore + // @ts-expect-error themeLighterAlt: globalTokens.color.brand30, }, true, diff --git a/packages/utils/interactive-hooks/src/useAsPressable.ts b/packages/utils/interactive-hooks/src/useAsPressable.ts index f69abece65a..db84d13a61d 100644 --- a/packages/utils/interactive-hooks/src/useAsPressable.ts +++ b/packages/utils/interactive-hooks/src/useAsPressable.ts @@ -19,25 +19,26 @@ type ObjectBase = {}; */ function useHoverHelper(props: PressableHoverProps): [PressableHoverProps, IHoverState] { const [hoverState, setHoverState] = React.useState({ hovered: false }); + const { onHoverIn: onHoverInProp, onHoverOut: onHoverOutProp } = props; const onHoverIn = React.useCallback( (e) => { setHoverState({ hovered: true }); - if (props.onHoverIn) { - props.onHoverIn(e); + if (onHoverInProp) { + onHoverInProp(e); } }, - [setHoverState, props.onHoverIn], + [onHoverInProp, setHoverState], ); const onHoverOut = React.useCallback( (e) => { setHoverState({ hovered: false }); - if (props.onHoverOut) { - props.onHoverOut(e); + if (onHoverOutProp) { + onHoverOutProp(e); } }, - [setHoverState, props.onHoverOut], + [onHoverOutProp, setHoverState], ); return [{ onHoverIn, onHoverOut }, hoverState]; } @@ -47,24 +48,25 @@ function useHoverHelper(props: PressableHoverProps): [PressableHoverProps, IHove */ function useFocusHelper(props: PressableFocusProps): [PressableFocusProps, IFocusState] { const [focusState, setFocusState] = React.useState({ focused: false }); + const { onBlur: onBlurProp, onFocus: onFocusProp } = props; const onFocus = React.useCallback( (e) => { setFocusState({ focused: true }); - if (props.onFocus) { - props.onFocus(e); + if (onFocusProp) { + onFocusProp(e); } }, - [setFocusState, props.onFocus], + [onFocusProp, setFocusState], ); const onBlur = React.useCallback( (e) => { setFocusState({ focused: false }); - if (props.onBlur) { - props.onBlur(e); + if (onBlurProp) { + onBlurProp(e); } }, - [setFocusState, props.onBlur], + [onBlurProp, setFocusState], ); return [{ onFocus, onBlur }, focusState]; } @@ -74,25 +76,26 @@ function useFocusHelper(props: PressableFocusProps): [PressableFocusProps, IFocu */ function usePressHelper(props: PressablePressProps): [PressablePressProps, IPressState] { const [pressState, setPressState] = React.useState({ pressed: false }); + const { onPressIn: onPressInProp, onPressOut: onPressOutProp } = props; const onPressIn = React.useCallback( (e) => { setPressState({ pressed: true }); - if (props.onPressIn) { - props.onPressIn(e); + if (onPressInProp) { + onPressInProp(e); } }, - [setPressState, props.onPressIn], + [onPressInProp, setPressState], ); const onPressOut = React.useCallback( (e) => { setPressState({ pressed: false }); - if (props.onPressOut) { - props.onPressOut(e); + if (onPressOutProp) { + onPressOutProp(e); } }, - [setPressState, props.onPressOut], + [onPressOutProp, setPressState], ); return [{ onPressIn, onPressOut }, pressState]; diff --git a/packages/utils/interactive-hooks/src/useAsToggle.ts b/packages/utils/interactive-hooks/src/useAsToggle.ts index bc990e28a21..7a93a3fb035 100644 --- a/packages/utils/interactive-hooks/src/useAsToggle.ts +++ b/packages/utils/interactive-hooks/src/useAsToggle.ts @@ -20,7 +20,7 @@ export function useAsToggle(defaultChecked?: boolean, checked?: boolean, userCal const onChange = React.useCallback(() => { userCallback && userCallback(!isChecked); setChecked(!isChecked); - }, [isChecked, setChecked]); + }, [isChecked, setChecked, userCallback]); return [checked ?? isChecked, onChange]; } diff --git a/scripts/src/tasks/lint.js b/scripts/src/tasks/lint.js index 9c1d68b9808..8d675e30254 100644 --- a/scripts/src/tasks/lint.js +++ b/scripts/src/tasks/lint.js @@ -49,4 +49,4 @@ export class LintCommand extends Command { return fileURLToPath(new URL('../../../packages/configs/lint-config-rules/private.ts', import.meta.url)); } -} \ No newline at end of file +} From 7ce82c8c67b4f635ba9247a46621d9ee0b692f4e Mon Sep 17 00:00:00 2001 From: Saad Najmi Date: Wed, 25 Mar 2026 19:10:02 -0500 Subject: [PATCH 3/5] fix(build): stabilize repo bundle validation --- CLAUDE.md | 7 ++++--- README.md | 5 +++-- apps/fluent-tester/package.json | 2 +- package.json | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index f887fb2719a..ac47cd97c0f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -56,9 +56,10 @@ The project uses **Yarn 4** (Berry) in **pnpm mode** with **Lage** as the task r ```bash yarn build # TypeScript build for all packages (outputs to lib/ and lib-commonjs/) yarn test # Build, lint, and run tests across all packages -yarn lint # ESLint across all packages -yarn bundle # Bundle all packages -yarn buildci # Full CI pipeline: build + test + lint + bundle + depcheck + check-publishing +yarn lint # Lint across all packages +yarn lage bundle # Bundle all packages +yarn bundle:repo # Convenience wrapper for the repo bundle graph +yarn lage buildci # Configured CI graph alias from lage.config.mjs yarn clean # Clean build artifacts ``` diff --git a/README.md b/README.md index f8ec4dc3375..af22e081926 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,9 @@ For running tasks the repo has switched to using [Lage](https://github.com/micro - `yarn build` - does the typescript build for all packages in the repository - `yarn test` - will build, lint, and run any applicable tests on all packages in the repo -- `yarn bundle` - will bundle all packages in the repo -- `yarn buildci` - will build, lint, run tests, and bundle everything in the repo +- `yarn lage bundle` - will bundle all packages in the repo +- `yarn bundle:repo` - convenience wrapper for `yarn lage bundle` +- `yarn lage buildci` - will build, lint, run tests, and run the configured repo checks Note that Lage uses caching to avoid redundant steps and has very minimal output. To avoid caching add `--no-cache` as a command line argument. Similarly adding `--verbose` will give more detailed output. diff --git a/apps/fluent-tester/package.json b/apps/fluent-tester/package.json index 24febf3c920..993dbd527d6 100644 --- a/apps/fluent-tester/package.json +++ b/apps/fluent-tester/package.json @@ -26,7 +26,7 @@ "build": "fluentui-scripts build", "build-cjs": "tsgo --outDir lib-commonjs", "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", - "bundle": "rnx-cli bundle --dev false", + "bundle": "yarn bundle:android && yarn bundle:ios && yarn bundle:macos", "bundle:android": "rnx-cli bundle --dev false --platform android", "bundle:ios": "rnx-cli bundle --dev false --platform ios", "bundle:macos": "rnx-cli bundle --dev false --platform macos", diff --git a/package.json b/package.json index fbce17aab9b..4f83e0cf82a 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "build": "lage build-all", "clean-all": "node ./scripts/src/preinstall/clean-all.js", "docs": "yarn workspace fluent-rn-website start", - "bundle": "lage bundle", + "bundle:repo": "lage bundle", "clean": "lage clean", "change": "node .github/scripts/change.mts", "changeset:version": "node .github/scripts/changeset-version-with-postbump.mts", From 18fdba49eadec407777b70277a13eee4bc9ed92a Mon Sep 17 00:00:00 2001 From: Saad Najmi Date: Wed, 25 Mar 2026 19:36:21 -0500 Subject: [PATCH 4/5] docs(changeset): Migrate from ESLint to oxlint --- .changeset/strict-sides-hang.md | 78 +++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 .changeset/strict-sides-hang.md diff --git a/.changeset/strict-sides-hang.md b/.changeset/strict-sides-hang.md new file mode 100644 index 00000000000..1d6a68a625b --- /dev/null +++ b/.changeset/strict-sides-hang.md @@ -0,0 +1,78 @@ +--- +"@uifabricshared/foundation-composable": patch +"@fluentui-react-native/experimental-appearance-additions": patch +"@uifabricshared/theming-react-native": patch +"@uifabricshared/foundation-settings": patch +"@fluentui-react-native/experimental-activity-indicator": patch +"@fluentui-react-native/experimental-native-font-metrics": patch +"@uifabricshared/foundation-compose": patch +"@fluentui-react-native/experimental-native-date-picker": patch +"@uifabricshared/foundation-tokens": patch +"@fluentui-react-native/themed-stylesheet": patch +"@uifabricshared/themed-settings": patch +"@fluentui-react-native/contextual-menu": patch +"@fluentui-react-native/lint-config-rules": patch +"@uifabricshared/theme-registry": patch +"@fluentui-react-native/vibrancy-view": patch +"@fluentui-react-native/focus-trap-zone": patch +"@fluentui-react-native/notification": patch +"@uifabricshared/theming-ramp": patch +"@fluentui-react-native/experimental-menu-button": patch +"@fluentui-react-native/interactive-hooks": patch +"@fluentui-react-native/persona-coin": patch +"@fluentui-react-native/menu-button": patch +"@fluentui-react-native/radio-group": patch +"@fluentui-react-native/experimental-checkbox": patch +"@fluentui-react-native/dropdown": patch +"@fluentui-react-native/experimental-expander": patch +"@fluentui-react-native/overflow": patch +"@fluentui-react-native/composition": patch +"@fluentui-react-native/use-styling": patch +"@fluentui-react-native/android-theme": patch +"@fluentui-react-native/default-theme": patch +"@fluentui-react-native/theming-utils": patch +"@fluentui-react-native/focus-zone": patch +"@fluentui-react-native/pressable": patch +"@fluentui-react-native/separator": patch +"@fluentui-react-native/popover": patch +"@fluentui-react-native/experimental-shimmer": patch +"@fluentui-react-native/spinner": patch +"@fluentui-react-native/tooltip": patch +"@fluentui-react-native/use-tokens": patch +"@fluentui-react-native/theme-tokens": patch +"@fluentui-react-native/checkbox": patch +"@fluentui-react-native/experimental-avatar": patch +"@fluentui-react-native/drawer": patch +"@fluentui-react-native/experimental-shadow": patch +"@fluentui-react-native/framework": patch +"@fluentui-react-native/use-slots": patch +"@fluentui-react-native/apple-theme": patch +"@fluentui-react-native/theme-types": patch +"@fluentui-react-native/win32-theme": patch +"@fluentui-react-native/callout": patch +"@fluentui-react-native/divider": patch +"@fluentui-react-native/persona": patch +"@fluentui-react-native/tablist": patch +"@fluentui-react-native/use-slot": patch +"@fluentui-react-native/avatar": patch +"@fluentui-react-native/button": patch +"@fluentui-react-native/switch": patch +"@fluentui-react-native/badge": patch +"@fluentui-react-native/input": patch +"@fluentui-react-native/stack": patch +"@fluentui-react-native/chip": patch +"@fluentui-react-native/icon": patch +"@fluentui-react-native/link": patch +"@fluentui-react-native/menu": patch +"@fluentui-react-native/text": patch +"@fluentui-react-native/theme": patch +"@fluentui-react-native/framework-base": patch +"@fluentui/react-native": patch +"@fluentui-react-native/adapters": patch +"@fluentui-react-native/styling-utils": patch +"@fluentui-react-native/tokens": patch +"@fluentui-react-native/tester": patch +"@fluentui-react-native/codemods": patch +--- + +Migrate from ESLint to oxlint From 9fad2818be614de0e01635b99e7ee32ab1f37389 Mon Sep 17 00:00:00 2001 From: Saad Najmi Date: Wed, 25 Mar 2026 19:45:12 -0500 Subject: [PATCH 5/5] fix(ci): restore build after oxlint migration --- .../TestComponents/Button/ButtonHOCTestSection.tsx | 2 -- .../ContextualMenu/src/ContextualMenuItem.tsx | 2 -- .../components/ContextualMenu/src/SubmenuItem.tsx | 6 ------ .../configs/lint-config-rules/oxlint.config.ts | 2 +- packages/configs/lint-config-rules/tsconfig.json | 2 +- packages/configs/lint-config-rules/types.d.ts | 14 ++++++++++++++ .../theming/apple-theme/src/appleColors.macos.ts | 2 -- .../apple-theme/src/createAppleTheme.macos.ts | 4 ---- 8 files changed, 16 insertions(+), 18 deletions(-) create mode 100644 packages/configs/lint-config-rules/types.d.ts diff --git a/apps/tester-core/src/TestComponents/Button/ButtonHOCTestSection.tsx b/apps/tester-core/src/TestComponents/Button/ButtonHOCTestSection.tsx index 8af26457403..28ec1f8abb1 100644 --- a/apps/tester-core/src/TestComponents/Button/ButtonHOCTestSection.tsx +++ b/apps/tester-core/src/TestComponents/Button/ButtonHOCTestSection.tsx @@ -13,8 +13,6 @@ const CustomText = Text.customize({ fontSize: 'header', color: '#ad0258' }); const CustomButton = Button.customize({ backgroundColor: 'pink' }); const CustomIconButton = Button.customize({ iconColor: 'yellow' }); const ComposedButton = Button.compose({ - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error Not all slots have to be overridden for compose to work slots: { content: CustomText, }, diff --git a/packages/components/ContextualMenu/src/ContextualMenuItem.tsx b/packages/components/ContextualMenu/src/ContextualMenuItem.tsx index 2a57d4cc028..b2d90013721 100644 --- a/packages/components/ContextualMenu/src/ContextualMenuItem.tsx +++ b/packages/components/ContextualMenu/src/ContextualMenuItem.tsx @@ -89,8 +89,6 @@ export const ContextualMenuItem = compose({ const onMouseLeaveModified = React.useCallback( (e) => { onBlur(e); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error IViewWin32 doesn't have the event as an argument, while macOS does onMouseLeave && onMouseLeave(e); }, [onBlur, onMouseLeave], diff --git a/packages/components/ContextualMenu/src/SubmenuItem.tsx b/packages/components/ContextualMenu/src/SubmenuItem.tsx index 100bb661771..79a8b305c80 100644 --- a/packages/components/ContextualMenu/src/SubmenuItem.tsx +++ b/packages/components/ContextualMenu/src/SubmenuItem.tsx @@ -87,14 +87,10 @@ export const SubmenuItem = compose({ * In the future, we can avoid needing to override onMouseEnter by handling submenu rendering internally rather than depending on the * client to conditionally render it with onHoverIn. */ - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error onMouseLeave not in PressableProps but is supported on desktop const { onBlur, onMouseEnter, onMouseLeave, ...restPressableProps } = pressable.props; const onMouseEnterModified = React.useCallback( (e) => { componentRef.current.focus(); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error IViewWin32 doesn't have the event as an argument, while macOS does onMouseEnter && onMouseEnter(e); }, [componentRef, onMouseEnter], @@ -102,8 +98,6 @@ export const SubmenuItem = compose({ const onMouseLeaveModified = React.useCallback( (e) => { onBlur(e); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error IViewWin32 doesn't have the event as an argument, while macOS does onMouseLeave && onMouseLeave(e); }, [onBlur, onMouseLeave], diff --git a/packages/configs/lint-config-rules/oxlint.config.ts b/packages/configs/lint-config-rules/oxlint.config.ts index 01932bcf709..7dfc98bb7bf 100644 --- a/packages/configs/lint-config-rules/oxlint.config.ts +++ b/packages/configs/lint-config-rules/oxlint.config.ts @@ -1 +1 @@ -export { default } from './private.ts'; +export { default } from './private.js'; diff --git a/packages/configs/lint-config-rules/tsconfig.json b/packages/configs/lint-config-rules/tsconfig.json index 1222fc76d6f..be8c5b192b7 100644 --- a/packages/configs/lint-config-rules/tsconfig.json +++ b/packages/configs/lint-config-rules/tsconfig.json @@ -5,6 +5,6 @@ "checkJs": true, "noEmit": true }, - "include": ["private.ts", "oxlint.config.ts"], + "include": ["private.ts", "oxlint.config.ts", "types.d.ts"], "exclude": [] } diff --git a/packages/configs/lint-config-rules/types.d.ts b/packages/configs/lint-config-rules/types.d.ts new file mode 100644 index 00000000000..6854c9178d4 --- /dev/null +++ b/packages/configs/lint-config-rules/types.d.ts @@ -0,0 +1,14 @@ +declare module '@rnx-kit/oxlint-config/sdl-required' { + const config: unknown; + export default config; +} + +declare module '@rnx-kit/oxlint-config/strict' { + const config: unknown; + export default config; +} + +declare module '@rnx-kit/oxlint-config/typescript-stylistic' { + const config: unknown; + export default config; +} \ No newline at end of file diff --git a/packages/theming/apple-theme/src/appleColors.macos.ts b/packages/theming/apple-theme/src/appleColors.macos.ts index fcfa3061d63..cc1a476b14d 100644 --- a/packages/theming/apple-theme/src/appleColors.macos.ts +++ b/packages/theming/apple-theme/src/appleColors.macos.ts @@ -1,6 +1,4 @@ import type { ThemeColorDefinition, AppearanceOptions } from '@fluentui-react-native/theme-types'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-expect-error import { PlatformColor, DynamicColorMacOS, ColorWithSystemEffectMacOS } from 'react-native-macos'; import type { AppleSemanticPalette, FluentUIApplePalette } from './appleColors.types.macos'; diff --git a/packages/theming/apple-theme/src/createAppleTheme.macos.ts b/packages/theming/apple-theme/src/createAppleTheme.macos.ts index 8dc79c841fd..a224380c956 100644 --- a/packages/theming/apple-theme/src/createAppleTheme.macos.ts +++ b/packages/theming/apple-theme/src/createAppleTheme.macos.ts @@ -19,8 +19,6 @@ export function createAppleTheme(): ThemeReference { // Fetch initial system settings for high contrast mode highContrastHandler(); // Invalidate theme and set prop when high contrast setting changes - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error AccessibilityInfo.addEventListener('highContrastChanged', () => { highContrastHandler(); }); @@ -32,8 +30,6 @@ export function createAppleTheme(): ThemeReference { } function highContrastHandler() { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error AccessibilityInfo.isHighContrastEnabled().then((isEnabled) => { setIsHighContrast(isEnabled); appleThemeReference.invalidate();