From 6b6286fe18c5e0a4756c82bd88c3696c2ae488e8 Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Tue, 9 Jun 2026 16:37:18 -0700 Subject: [PATCH 01/13] initial conversion --- apps/E2E/package.json | 8 +++---- apps/E2E/tsconfig.json | 2 -- apps/fluent-tester/package.json | 8 +++---- apps/tester-core/package.json | 8 +++---- apps/win32-81/package.json | 1 - apps/win32/package.json | 1 - lage.config.mjs | 21 +++++-------------- package.json | 2 +- packages/codemods/package.json | 8 +++---- packages/codemods/transform.js | 2 +- packages/components/Avatar/package.json | 8 +++---- packages/components/Badge/package.json | 8 +++---- packages/components/Button/package.json | 8 +++---- packages/components/Callout/package.json | 8 +++---- packages/components/Checkbox/package.json | 8 +++---- packages/components/Chip/package.json | 8 +++---- .../components/ContextualMenu/package.json | 8 +++---- packages/components/Divider/package.json | 8 +++---- .../components/FocusTrapZone/package.json | 8 +++---- packages/components/FocusZone/package.json | 8 +++---- packages/components/Icon/package.json | 8 +++---- packages/components/Input/package.json | 8 +++---- packages/components/Link/package.json | 8 +++---- packages/components/Menu/package.json | 8 +++---- packages/components/MenuButton/package.json | 8 +++---- packages/components/Notification/package.json | 8 +++---- packages/components/Persona/package.json | 8 +++---- packages/components/PersonaCoin/package.json | 8 +++---- packages/components/Pressable/package.json | 8 +++---- packages/components/RadioGroup/package.json | 8 +++---- packages/components/Separator/package.json | 8 +++---- packages/components/Stack/package.json | 8 +++---- packages/components/Switch/package.json | 8 +++---- packages/components/TabList/package.json | 8 +++---- packages/components/Text/package.json | 8 +++---- packages/dependency-profiles/package.json | 1 - .../foundation-composable/package.json | 8 +++---- .../foundation-compose/package.json | 8 +++---- .../foundation-settings/package.json | 8 +++---- .../deprecated/foundation-tokens/package.json | 8 +++---- .../deprecated/theme-registry/package.json | 8 +++---- .../deprecated/themed-settings/package.json | 8 +++---- packages/deprecated/theming-ramp/package.json | 8 +++---- .../theming-react-native/config/pre-copy.json | 2 +- .../theming-react-native/jest/setup.js | 2 +- .../theming-react-native/package.json | 8 +++---- .../ActivityIndicator/package.json | 8 +++---- .../AppearanceAdditions/package.json | 8 +++---- packages/experimental/Avatar/package.json | 8 +++---- packages/experimental/Checkbox/package.json | 8 +++---- packages/experimental/Drawer/package.json | 8 +++---- packages/experimental/Dropdown/package.json | 8 +++---- packages/experimental/Expander/package.json | 8 +++---- packages/experimental/MenuButton/package.json | 8 +++---- .../NativeDatePicker/package.json | 8 +++---- .../NativeFontMetrics/package.json | 8 +++---- packages/experimental/Overflow/package.json | 8 +++---- packages/experimental/Popover/package.json | 8 +++---- packages/experimental/Shadow/package.json | 8 +++---- packages/experimental/Shimmer/package.json | 8 +++---- packages/experimental/Spinner/package.json | 8 +++---- packages/experimental/Tooltip/package.json | 8 +++---- .../experimental/VibrancyView/package.json | 8 +++---- packages/framework-base/package.json | 1 - packages/framework/composition/package.json | 1 - packages/framework/framework/package.json | 1 - packages/framework/theme/package.json | 1 - .../framework/themed-stylesheet/package.json | 1 - packages/framework/use-slot/package.json | 1 - packages/framework/use-slots/package.json | 1 - packages/framework/use-styling/package.json | 1 - packages/framework/use-tokens/package.json | 1 - packages/libraries/core/package.json | 8 +++---- packages/theming/android-theme/package.json | 8 +++---- packages/theming/apple-theme/package.json | 8 +++---- packages/theming/default-theme/package.json | 8 +++---- packages/theming/theme-tokens/package.json | 8 +++---- packages/theming/theme-types/package.json | 8 +++---- packages/theming/theming-utils/package.json | 8 +++---- packages/theming/win32-theme/package.json | 8 +++---- packages/utils/adapters/package.json | 8 +++---- packages/utils/interactive-hooks/package.json | 8 +++---- packages/utils/styling/package.json | 8 +++---- packages/utils/test-tools/package.json | 8 +++---- packages/utils/tokens/package.json | 8 +++---- scripts/configs/tsconfig/tsconfig.strict.json | 4 ++-- scripts/package.json | 1 - scripts/src/tasks/constrain.ts | 5 +++++ 88 files changed, 217 insertions(+), 372 deletions(-) diff --git a/apps/E2E/package.json b/apps/E2E/package.json index 29616d81b14..abcaf53dc88 100644 --- a/apps/E2E/package.json +++ b/apps/E2E/package.json @@ -13,7 +13,7 @@ "src/**/*", "dist/*" ], - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -21,14 +21,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "e2eprep:android": "cross-env APPIUM_HOME=.appium yarn exec appium driver install uiautomator2", "e2eprep:ios": "cross-env APPIUM_HOME=.appium yarn exec appium driver install xcuitest", "e2eprep:macos": "cross-env APPIUM_HOME=.appium yarn exec appium driver install mac2", diff --git a/apps/E2E/tsconfig.json b/apps/E2E/tsconfig.json index 698ce482488..927800fb251 100644 --- a/apps/E2E/tsconfig.json +++ b/apps/E2E/tsconfig.json @@ -1,8 +1,6 @@ { "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { - "module": "Node16", - "moduleResolution": "Node16", "outDir": "lib", "types": ["@types/jasmine", "@wdio/globals/types", "@wdio/jasmine-framework", "node"], "rootDir": "src" diff --git a/apps/fluent-tester/package.json b/apps/fluent-tester/package.json index 0b9e1d0952e..84821d2f4e4 100644 --- a/apps/fluent-tester/package.json +++ b/apps/fluent-tester/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "apps/fluent-tester" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,15 +18,13 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.tsx" } }, "scripts": { "android": "rnx-cli run --platform android", - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "bundle": "rnx-cli bundle --dev false", "bundle:android": "rnx-cli bundle --dev false --platform android", "bundle:ios": "rnx-cli bundle --dev false --platform ios", diff --git a/apps/tester-core/package.json b/apps/tester-core/package.json index d32f9f7d3f2..7896d7b8c5a 100644 --- a/apps/tester-core/package.json +++ b/apps/tester-core/package.json @@ -11,7 +11,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "apps/fluent-tester-core" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -19,14 +19,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/apps/win32-81/package.json b/apps/win32-81/package.json index 1e5369ca2e6..5455b75b864 100644 --- a/apps/win32-81/package.json +++ b/apps/win32-81/package.json @@ -20,7 +20,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "bundle": "rnx-cli bundle --dev false", "bundle-dev": "rnx-cli bundle", "clean": "fluentui-scripts clean", diff --git a/apps/win32/package.json b/apps/win32/package.json index e14b2dfeb62..3694e13ef7c 100644 --- a/apps/win32/package.json +++ b/apps/win32/package.json @@ -20,7 +20,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "bundle": "rnx-cli bundle --dev false", "bundle-dev": "rnx-cli bundle", "clean": "fluentui-scripts clean", diff --git a/lage.config.mjs b/lage.config.mjs index 1d1ed2d5aaf..1da0b8a5fd6 100644 --- a/lage.config.mjs +++ b/lage.config.mjs @@ -3,24 +3,13 @@ const config = { npmClient: 'yarn', pipeline: { // ── Per-package tasks ────────────────────────────────────────────────── - 'build-cjs': { - // cjs builds need to wait for the esm builds to produce the type definitions - dependsOn: ['^build-core', '^build-cjs'], - inputs: ['*', 'src/**/*', 'assets/**/*'], - outputs: ['lib-commonjs/**/*'], - }, - 'build-core': { + build: { // the core build does esm builds (which produce type definitions used by both cjs and esm builds) // this also handles noEmit packages which should be run in sequence with other packages - dependsOn: ['^build-core'], + dependsOn: ['^build'], inputs: ['*', 'src/**/*', 'assets/**/*'], outputs: ['lib/**/*'], }, - 'build-all': { - dependsOn: ['build-core', 'build-cjs'], - inputs: ['*', 'src/**/*', 'assets/**/*'], - outputs: ['lib/**/*', 'lib-commonjs/**/*'], - }, bundle: { inputs: ['**/*', '!node_modules/**/*', '!dist/**/*', '!lib/**/*', '!lib-commonjs/**/*'], outputs: ['dist/**/*'], @@ -33,7 +22,7 @@ const config = { outputs: [], }, test: { - dependsOn: ['build-all'], + dependsOn: ['build'], inputs: [], outputs: [], }, @@ -56,7 +45,7 @@ const config = { // ── Pipeline aliases ─────────────────────────────────────────────────── 'repo-checks': ['lint-repo', 'check-publishing'], - buildci: ['lint-repo', 'check-publishing', 'build-all', 'test', 'lint'], + buildci: ['lint-repo', 'check-publishing', 'build', 'test', 'lint'], // ── Worker tasks ─────────────────────────────────────────────────────── 'test-links': { @@ -70,7 +59,7 @@ const config = { cache: false, }, pack: { - dependsOn: ['build-all', '^pack'], + dependsOn: ['build', '^pack'], type: 'worker', options: { worker: 'scripts/src/worker/pack.mts', diff --git a/package.json b/package.json index 916d2d5fd1f..71bde73c408 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "scripts" ], "scripts": { - "build": "lage build-all", + "build": "lage build", "clean-all": "node ./scripts/src/preinstall/clean-all.ts", "docs": "yarn workspace fluent-rn-website start", "bundle:repo": "lage bundle", diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 3e9c5a5698b..760cf4edaab 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -13,7 +13,7 @@ "bin": { "transform": "./transform.js" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -21,14 +21,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/codemods/transform.js b/packages/codemods/transform.js index 0cc65676f39..17decfabc50 100755 --- a/packages/codemods/transform.js +++ b/packages/codemods/transform.js @@ -1,3 +1,3 @@ #!/usr/bin/env node -require('./lib-commonjs/index'); +require('./lib/index'); diff --git a/packages/components/Avatar/package.json b/packages/components/Avatar/package.json index 46c55b1b96b..bb9c82321f6 100644 --- a/packages/components/Avatar/package.json +++ b/packages/components/Avatar/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Avatar" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Badge/package.json b/packages/components/Badge/package.json index de82543dae1..f771976693d 100644 --- a/packages/components/Badge/package.json +++ b/packages/components/Badge/package.json @@ -6,7 +6,7 @@ "license": "MIT", "author": "Microsoft ", "sideEffects": false, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -14,14 +14,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Button/package.json b/packages/components/Button/package.json index 93347985d58..3e0998a09d7 100644 --- a/packages/components/Button/package.json +++ b/packages/components/Button/package.json @@ -10,7 +10,7 @@ "directory": "packages/components/Button" }, "sideEffects": false, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Callout/package.json b/packages/components/Callout/package.json index b409a32cfb0..110eb758b53 100644 --- a/packages/components/Callout/package.json +++ b/packages/components/Callout/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Callout" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Checkbox/package.json b/packages/components/Checkbox/package.json index 68f67b81436..474caf8fac9 100644 --- a/packages/components/Checkbox/package.json +++ b/packages/components/Checkbox/package.json @@ -10,7 +10,7 @@ "directory": "packages/components/Checkbox" }, "sideEffects": false, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Chip/package.json b/packages/components/Chip/package.json index 6494abd2434..f31944f7fb7 100644 --- a/packages/components/Chip/package.json +++ b/packages/components/Chip/package.json @@ -5,7 +5,7 @@ "homepage": "https://github.com/microsoft/fluentui-react-native", "license": "MIT", "author": "Microsoft ", - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -13,14 +13,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/ContextualMenu/package.json b/packages/components/ContextualMenu/package.json index abba878f6c8..faaccffa64f 100644 --- a/packages/components/ContextualMenu/package.json +++ b/packages/components/ContextualMenu/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/ContextualMenu" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Divider/package.json b/packages/components/Divider/package.json index 3b885dc80e8..f86e42a9bfb 100644 --- a/packages/components/Divider/package.json +++ b/packages/components/Divider/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Divider" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/FocusTrapZone/package.json b/packages/components/FocusTrapZone/package.json index 55cd6e63cee..683a181dccb 100644 --- a/packages/components/FocusTrapZone/package.json +++ b/packages/components/FocusTrapZone/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/FocusTrapZone" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/FocusZone/package.json b/packages/components/FocusZone/package.json index 39b31422243..720058f3569 100644 --- a/packages/components/FocusZone/package.json +++ b/packages/components/FocusZone/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/FocusZone" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Icon/package.json b/packages/components/Icon/package.json index 957d2b7efdc..f42019dbf65 100644 --- a/packages/components/Icon/package.json +++ b/packages/components/Icon/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Icon" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Input/package.json b/packages/components/Input/package.json index 2e62a4303bf..c679fbd7231 100644 --- a/packages/components/Input/package.json +++ b/packages/components/Input/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Input" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Link/package.json b/packages/components/Link/package.json index d470983d5d2..b2806a9b35a 100644 --- a/packages/components/Link/package.json +++ b/packages/components/Link/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Link" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Menu/package.json b/packages/components/Menu/package.json index 1f5af91aaa1..15ac8869236 100644 --- a/packages/components/Menu/package.json +++ b/packages/components/Menu/package.json @@ -10,7 +10,7 @@ "directory": "packages/components/menu" }, "sideEffects": false, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/MenuButton/package.json b/packages/components/MenuButton/package.json index a4ecd08868f..397b3667b61 100644 --- a/packages/components/MenuButton/package.json +++ b/packages/components/MenuButton/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/MenuButton" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Notification/package.json b/packages/components/Notification/package.json index 272fe7a3dfa..eee594f30ae 100644 --- a/packages/components/Notification/package.json +++ b/packages/components/Notification/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Notification" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Persona/package.json b/packages/components/Persona/package.json index 83e6efc03c9..ee74188847a 100644 --- a/packages/components/Persona/package.json +++ b/packages/components/Persona/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Persona" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/PersonaCoin/package.json b/packages/components/PersonaCoin/package.json index f9aec872f19..df2d3079d1f 100644 --- a/packages/components/PersonaCoin/package.json +++ b/packages/components/PersonaCoin/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/PersonaCoin" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Pressable/package.json b/packages/components/Pressable/package.json index b7942d5dee4..fbc1bbc30c3 100644 --- a/packages/components/Pressable/package.json +++ b/packages/components/Pressable/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Pressable" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/RadioGroup/package.json b/packages/components/RadioGroup/package.json index ed5f88dcb2b..45b212bc955 100644 --- a/packages/components/RadioGroup/package.json +++ b/packages/components/RadioGroup/package.json @@ -10,7 +10,7 @@ "directory": "packages/components/RadioGroup" }, "sideEffects": false, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Separator/package.json b/packages/components/Separator/package.json index bedcfa4f709..d36e195f989 100644 --- a/packages/components/Separator/package.json +++ b/packages/components/Separator/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Separator" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Stack/package.json b/packages/components/Stack/package.json index 1ea042afbf4..6bc0b16cae3 100644 --- a/packages/components/Stack/package.json +++ b/packages/components/Stack/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Stack" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Switch/package.json b/packages/components/Switch/package.json index f9b1f075704..a571653f96c 100644 --- a/packages/components/Switch/package.json +++ b/packages/components/Switch/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Switch" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/TabList/package.json b/packages/components/TabList/package.json index 75e9b004ccb..21da747e9c5 100644 --- a/packages/components/TabList/package.json +++ b/packages/components/TabList/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/TabList" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Text/package.json b/packages/components/Text/package.json index 263e049f161..d3c434aa613 100644 --- a/packages/components/Text/package.json +++ b/packages/components/Text/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/text" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/dependency-profiles/package.json b/packages/dependency-profiles/package.json index 810f18eac91..22335d3f770 100644 --- a/packages/dependency-profiles/package.json +++ b/packages/dependency-profiles/package.json @@ -13,7 +13,6 @@ ], "main": "src/index.js", "scripts": { - "build": "fluentui-scripts build", "update-profile": "node update-profile.mts" }, "devDependencies": { diff --git a/packages/deprecated/foundation-composable/package.json b/packages/deprecated/foundation-composable/package.json index 0e23a87612b..539e00a6c5e 100644 --- a/packages/deprecated/foundation-composable/package.json +++ b/packages/deprecated/foundation-composable/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/deprecated/foundation-composable" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/foundation-compose/package.json b/packages/deprecated/foundation-compose/package.json index 895af280f4e..350437950c2 100644 --- a/packages/deprecated/foundation-compose/package.json +++ b/packages/deprecated/foundation-compose/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/deprecated/foundation-compose" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/foundation-settings/package.json b/packages/deprecated/foundation-settings/package.json index 7ee895b3c3e..46a08cd40d7 100644 --- a/packages/deprecated/foundation-settings/package.json +++ b/packages/deprecated/foundation-settings/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/deprecated/foundation-settings" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/foundation-tokens/package.json b/packages/deprecated/foundation-tokens/package.json index e3d2df732dd..6702c003faa 100644 --- a/packages/deprecated/foundation-tokens/package.json +++ b/packages/deprecated/foundation-tokens/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/deprecated/foundation-tokens" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/theme-registry/package.json b/packages/deprecated/theme-registry/package.json index e07cf6d76a9..30dc1e8f716 100644 --- a/packages/deprecated/theme-registry/package.json +++ b/packages/deprecated/theme-registry/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/deprecated/theme-registry" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/themed-settings/package.json b/packages/deprecated/themed-settings/package.json index 441ef63d7bf..77cdb9dc1e0 100644 --- a/packages/deprecated/themed-settings/package.json +++ b/packages/deprecated/themed-settings/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/deprecated/themed-settings" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/theming-ramp/package.json b/packages/deprecated/theming-ramp/package.json index 6049243303c..61a0ce0628c 100644 --- a/packages/deprecated/theming-ramp/package.json +++ b/packages/deprecated/theming-ramp/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/deprecated/theming-ramp" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/theming-react-native/config/pre-copy.json b/packages/deprecated/theming-react-native/config/pre-copy.json index 0a70d644ed7..bcc3651b3b8 100644 --- a/packages/deprecated/theming-react-native/config/pre-copy.json +++ b/packages/deprecated/theming-react-native/config/pre-copy.json @@ -2,6 +2,6 @@ "copyTo": { "lib": ["src/**/*.json"], "lib-amd": ["src/**/*.json"], - "lib-commonjs": ["src/**/*.json"] + "lib": ["src/**/*.json"] } } diff --git a/packages/deprecated/theming-react-native/jest/setup.js b/packages/deprecated/theming-react-native/jest/setup.js index b47c89e6ce9..48ad158af08 100644 --- a/packages/deprecated/theming-react-native/jest/setup.js +++ b/packages/deprecated/theming-react-native/jest/setup.js @@ -1 +1 @@ -jest.mock('../lib-commonjs/NativeModule/ThemingModule'); +jest.mock('../lib/NativeModule/ThemingModule'); diff --git a/packages/deprecated/theming-react-native/package.json b/packages/deprecated/theming-react-native/package.json index a4601bcfbdd..eb372e07a98 100644 --- a/packages/deprecated/theming-react-native/package.json +++ b/packages/deprecated/theming-react-native/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/deprecated/theming-react-native" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/ActivityIndicator/package.json b/packages/experimental/ActivityIndicator/package.json index 575a9ab420b..682182e429f 100644 --- a/packages/experimental/ActivityIndicator/package.json +++ b/packages/experimental/ActivityIndicator/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/ActivityIndicator" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/AppearanceAdditions/package.json b/packages/experimental/AppearanceAdditions/package.json index 9f232e10525..06a8b8f775b 100644 --- a/packages/experimental/AppearanceAdditions/package.json +++ b/packages/experimental/AppearanceAdditions/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/AppearanceAdditions" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Avatar/package.json b/packages/experimental/Avatar/package.json index 56375014bd1..2dd2dc13e78 100644 --- a/packages/experimental/Avatar/package.json +++ b/packages/experimental/Avatar/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/Avatar" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Checkbox/package.json b/packages/experimental/Checkbox/package.json index 00b1542784b..dc8cfce0630 100644 --- a/packages/experimental/Checkbox/package.json +++ b/packages/experimental/Checkbox/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/Checkbox" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Drawer/package.json b/packages/experimental/Drawer/package.json index 7e95eed34ce..b1f8f7509d2 100644 --- a/packages/experimental/Drawer/package.json +++ b/packages/experimental/Drawer/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/components/Drawer" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Dropdown/package.json b/packages/experimental/Dropdown/package.json index 0bb74313d75..d30b68227dd 100644 --- a/packages/experimental/Dropdown/package.json +++ b/packages/experimental/Dropdown/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/dropdown" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Expander/package.json b/packages/experimental/Expander/package.json index dc6ca68b1e1..4873cea1d50 100644 --- a/packages/experimental/Expander/package.json +++ b/packages/experimental/Expander/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/Expander" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "lint": "fluentui-scripts lint", diff --git a/packages/experimental/MenuButton/package.json b/packages/experimental/MenuButton/package.json index 8c92ad90327..5ffe08fd849 100644 --- a/packages/experimental/MenuButton/package.json +++ b/packages/experimental/MenuButton/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/MenuButton" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/NativeDatePicker/package.json b/packages/experimental/NativeDatePicker/package.json index 6e5db5a98ed..50e93c414f2 100644 --- a/packages/experimental/NativeDatePicker/package.json +++ b/packages/experimental/NativeDatePicker/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/NativeDatePicker" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/NativeFontMetrics/package.json b/packages/experimental/NativeFontMetrics/package.json index a4848f8566d..7804337c2d5 100644 --- a/packages/experimental/NativeFontMetrics/package.json +++ b/packages/experimental/NativeFontMetrics/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/NativeFontMetrics" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Overflow/package.json b/packages/experimental/Overflow/package.json index 8a4722ca809..2871f045770 100644 --- a/packages/experimental/Overflow/package.json +++ b/packages/experimental/Overflow/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/Overflow" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Popover/package.json b/packages/experimental/Popover/package.json index 37ca8cc8eae..bafa05f8899 100644 --- a/packages/experimental/Popover/package.json +++ b/packages/experimental/Popover/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/popover" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Shadow/package.json b/packages/experimental/Shadow/package.json index 9a69aa0695a..e2dce781645 100644 --- a/packages/experimental/Shadow/package.json +++ b/packages/experimental/Shadow/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/Shadow" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Shimmer/package.json b/packages/experimental/Shimmer/package.json index 4aa7895cd11..252d492a44c 100644 --- a/packages/experimental/Shimmer/package.json +++ b/packages/experimental/Shimmer/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/Shimmer" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Spinner/package.json b/packages/experimental/Spinner/package.json index 8b21b9d90a9..2affce851b1 100644 --- a/packages/experimental/Spinner/package.json +++ b/packages/experimental/Spinner/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/Spinner" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Tooltip/package.json b/packages/experimental/Tooltip/package.json index 451ea720adb..49561089c6e 100644 --- a/packages/experimental/Tooltip/package.json +++ b/packages/experimental/Tooltip/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/Tooltip" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/VibrancyView/package.json b/packages/experimental/VibrancyView/package.json index 87d631417e9..4bb4c32b31d 100644 --- a/packages/experimental/VibrancyView/package.json +++ b/packages/experimental/VibrancyView/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/experimental/VibrancyView" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework-base/package.json b/packages/framework-base/package.json index 436d245c01d..331dce0f0fa 100644 --- a/packages/framework-base/package.json +++ b/packages/framework-base/package.json @@ -32,7 +32,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/composition/package.json b/packages/framework/composition/package.json index 847a7bf23c2..64ae9a5673d 100644 --- a/packages/framework/composition/package.json +++ b/packages/framework/composition/package.json @@ -25,7 +25,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/framework/package.json b/packages/framework/framework/package.json index 621e4026d71..59578834c33 100644 --- a/packages/framework/framework/package.json +++ b/packages/framework/framework/package.json @@ -24,7 +24,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/theme/package.json b/packages/framework/theme/package.json index b75f4db8dcd..04f7b556167 100644 --- a/packages/framework/theme/package.json +++ b/packages/framework/theme/package.json @@ -25,7 +25,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/themed-stylesheet/package.json b/packages/framework/themed-stylesheet/package.json index 5621bd3356e..bf56db904f9 100644 --- a/packages/framework/themed-stylesheet/package.json +++ b/packages/framework/themed-stylesheet/package.json @@ -25,7 +25,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/use-slot/package.json b/packages/framework/use-slot/package.json index 23779a72159..89aed41e841 100644 --- a/packages/framework/use-slot/package.json +++ b/packages/framework/use-slot/package.json @@ -25,7 +25,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/use-slots/package.json b/packages/framework/use-slots/package.json index dc27e0050c3..ab44d90ba54 100644 --- a/packages/framework/use-slots/package.json +++ b/packages/framework/use-slots/package.json @@ -25,7 +25,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/use-styling/package.json b/packages/framework/use-styling/package.json index 86128415c5c..e4ce72000ab 100644 --- a/packages/framework/use-styling/package.json +++ b/packages/framework/use-styling/package.json @@ -25,7 +25,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/use-tokens/package.json b/packages/framework/use-tokens/package.json index 5c1e6ef9cab..5f6eea4957e 100644 --- a/packages/framework/use-tokens/package.json +++ b/packages/framework/use-tokens/package.json @@ -25,7 +25,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/libraries/core/package.json b/packages/libraries/core/package.json index ca4b033b626..2671889e1eb 100644 --- a/packages/libraries/core/package.json +++ b/packages/libraries/core/package.json @@ -9,7 +9,7 @@ "directory": "packages/libraries/core" }, "sideEffects": false, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/android-theme/package.json b/packages/theming/android-theme/package.json index 0c8716fd9c3..ad21b302b38 100644 --- a/packages/theming/android-theme/package.json +++ b/packages/theming/android-theme/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/theming/android-theme" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/apple-theme/package.json b/packages/theming/apple-theme/package.json index 63f6cff4191..9b1badb1e8e 100644 --- a/packages/theming/apple-theme/package.json +++ b/packages/theming/apple-theme/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/theming/apple-theme" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/default-theme/package.json b/packages/theming/default-theme/package.json index 90aa461aba3..b2f8fe62007 100644 --- a/packages/theming/default-theme/package.json +++ b/packages/theming/default-theme/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/theming/default-theme" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/theme-tokens/package.json b/packages/theming/theme-tokens/package.json index 6cd28431722..50193f4679a 100644 --- a/packages/theming/theme-tokens/package.json +++ b/packages/theming/theme-tokens/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/theming/theme-tokens" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/theme-types/package.json b/packages/theming/theme-types/package.json index 3eac827780e..2a55704204c 100644 --- a/packages/theming/theme-types/package.json +++ b/packages/theming/theme-types/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/theming/theme-types" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/theming-utils/package.json b/packages/theming/theming-utils/package.json index b4d957af868..cb8ebfa5b40 100644 --- a/packages/theming/theming-utils/package.json +++ b/packages/theming/theming-utils/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/theming/theming-utils" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/win32-theme/package.json b/packages/theming/win32-theme/package.json index 136452a11b7..aed65365a95 100644 --- a/packages/theming/win32-theme/package.json +++ b/packages/theming/win32-theme/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/theming/win32-theme" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/utils/adapters/package.json b/packages/utils/adapters/package.json index 7e3311d16ec..2330e13e95d 100644 --- a/packages/utils/adapters/package.json +++ b/packages/utils/adapters/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/utils/adapters" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/utils/interactive-hooks/package.json b/packages/utils/interactive-hooks/package.json index a1cd6a9affb..c5a9c472aa4 100644 --- a/packages/utils/interactive-hooks/package.json +++ b/packages/utils/interactive-hooks/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/utils/interactive-hooks" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/utils/styling/package.json b/packages/utils/styling/package.json index a845321e17f..2db3afb8b91 100644 --- a/packages/utils/styling/package.json +++ b/packages/utils/styling/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/utils/styling" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/utils/test-tools/package.json b/packages/utils/test-tools/package.json index a2aaa125055..f30551f2d86 100644 --- a/packages/utils/test-tools/package.json +++ b/packages/utils/test-tools/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/utils/test-tools" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -18,14 +18,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/utils/tokens/package.json b/packages/utils/tokens/package.json index f517a02bc5e..48fe702bf82 100644 --- a/packages/utils/tokens/package.json +++ b/packages/utils/tokens/package.json @@ -9,7 +9,7 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/utils/tokens" }, - "main": "lib-commonjs/index.js", + "main": "lib/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { @@ -17,14 +17,12 @@ "types": "./lib/index.d.ts", "react-native": "./src/index.ts", "import": "./lib/index.js", - "require": "./lib-commonjs/index.js", + "require": "./lib/index.js", "default": "./src/index.ts" } }, "scripts": { - "build": "fluentui-scripts build", - "build-cjs": "tsgo --outDir lib-commonjs", - "build-core": "tsgo --outDir lib --module esnext --moduleResolution bundler", + "build": "tsgo", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/scripts/configs/tsconfig/tsconfig.strict.json b/scripts/configs/tsconfig/tsconfig.strict.json index c10837972fd..fcbe913550b 100644 --- a/scripts/configs/tsconfig/tsconfig.strict.json +++ b/scripts/configs/tsconfig/tsconfig.strict.json @@ -3,8 +3,8 @@ "compilerOptions": { "target": "esnext", "lib": ["esnext"], - "module": "nodenext", - "moduleResolution": "nodenext", + "module": "esnext", + "moduleResolution": "bundler", "outDir": "lib", "rewriteRelativeImportExtensions": true, "jsx": "react-jsx", diff --git a/scripts/package.json b/scripts/package.json index 042d86f39dd..7a4124b3cf8 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -28,7 +28,6 @@ }, "scripts": { "build": "tsgo", - "build-core": "tsgo", "bundlesize": "bundlesize --debug", "depcheck": "node ./src/cli.ts depcheck", "format": "node ./src/cli.ts format", diff --git a/scripts/src/tasks/constrain.ts b/scripts/src/tasks/constrain.ts index 5cdb0a00ef0..37436cadb3a 100644 --- a/scripts/src/tasks/constrain.ts +++ b/scripts/src/tasks/constrain.ts @@ -9,6 +9,11 @@ export function constrain(workspace: Yarn.Constraints.Workspace): void { if (workspace.cwd !== 'scripts') { ctx.enforce('rnx-kit.extends', '@fluentui-react-native/scripts/kit-config'); } + if (ctx.manifest.scripts?.build) { + ctx.enforce('scripts.build', 'tsgo'); + } + ctx.enforce('scripts.build-cjs', undefined); + ctx.enforce('scripts.build-core', undefined); assertDeprecations(ctx); useCatalogs(ctx); } From e453713e020db90af4cb2ae363fdaf25d92436ca Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Wed, 10 Jun 2026 14:39:58 -0700 Subject: [PATCH 02/13] turn on full composite builds in repo --- apps/E2E/package.json | 2 +- apps/E2E/tsconfig.json | 14 +- apps/fluent-tester/package.json | 2 +- apps/fluent-tester/tsconfig.json | 53 +++- apps/tester-core/package.json | 2 +- apps/tester-core/tsconfig.json | 158 +++++++++++- apps/win32-81/package.json | 2 +- apps/win32-81/targets/tsconfig.check.json | 10 + apps/win32-81/tsconfig.json | 17 +- apps/win32/package.json | 2 +- apps/win32/targets/tsconfig.check.json | 10 + apps/win32/tsconfig.json | 17 +- lage.config.mjs | 7 - package.json | 3 +- packages/codemods/package.json | 2 +- packages/codemods/tsconfig.json | 14 +- packages/components/Avatar/package.json | 2 +- packages/components/Avatar/tsconfig.json | 38 ++- packages/components/Badge/package.json | 2 +- packages/components/Badge/tsconfig.json | 47 +++- packages/components/Button/package.json | 2 +- packages/components/Button/tsconfig.json | 68 ++++- packages/components/Callout/package.json | 2 +- packages/components/Callout/tsconfig.json | 26 +- packages/components/Checkbox/package.json | 2 +- packages/components/Checkbox/tsconfig.json | 56 +++- packages/components/Chip/package.json | 2 +- packages/components/Chip/tsconfig.json | 41 ++- .../components/ContextualMenu/package.json | 2 +- .../components/ContextualMenu/tsconfig.json | 47 +++- packages/components/Divider/package.json | 2 +- packages/components/Divider/tsconfig.json | 32 ++- .../components/FocusTrapZone/package.json | 2 +- .../components/FocusTrapZone/tsconfig.json | 23 +- packages/components/FocusZone/package.json | 2 +- packages/components/FocusZone/tsconfig.json | 23 +- packages/components/Icon/package.json | 2 +- packages/components/Icon/tsconfig.json | 26 +- packages/components/Input/package.json | 2 +- packages/components/Input/tsconfig.json | 41 ++- packages/components/Link/package.json | 2 +- packages/components/Link/tsconfig.json | 44 +++- packages/components/Menu/package.json | 2 +- packages/components/Menu/tsconfig.json | 53 +++- packages/components/MenuButton/package.json | 2 +- packages/components/MenuButton/tsconfig.json | 35 ++- packages/components/Notification/package.json | 2 +- .../components/Notification/tsconfig.json | 56 +++- packages/components/Persona/package.json | 2 +- packages/components/Persona/tsconfig.json | 38 ++- packages/components/PersonaCoin/package.json | 2 +- packages/components/PersonaCoin/tsconfig.json | 38 ++- packages/components/Pressable/package.json | 2 +- packages/components/Pressable/tsconfig.json | 23 +- packages/components/RadioGroup/package.json | 2 +- packages/components/RadioGroup/tsconfig.json | 53 +++- packages/components/Separator/package.json | 2 +- packages/components/Separator/tsconfig.json | 23 +- packages/components/Stack/package.json | 2 +- packages/components/Stack/tsconfig.json | 38 ++- packages/components/Switch/package.json | 2 +- packages/components/Switch/tsconfig.json | 35 ++- packages/components/TabList/package.json | 2 +- packages/components/TabList/tsconfig.json | 44 +++- packages/components/Text/package.json | 2 +- packages/components/Text/tsconfig.json | 35 ++- .../foundation-composable/package.json | 2 +- .../foundation-composable/tsconfig.json | 17 +- .../foundation-compose/package.json | 2 +- .../foundation-compose/tsconfig.json | 35 ++- .../foundation-settings/package.json | 2 +- .../foundation-settings/tsconfig.json | 14 +- .../deprecated/foundation-tokens/package.json | 2 +- .../foundation-tokens/tsconfig.json | 20 +- .../deprecated/theme-registry/package.json | 2 +- .../deprecated/theme-registry/tsconfig.json | 14 +- .../deprecated/themed-settings/package.json | 2 +- .../deprecated/themed-settings/tsconfig.json | 17 +- packages/deprecated/theming-ramp/package.json | 2 +- .../deprecated/theming-ramp/tsconfig.json | 23 +- .../theming-react-native/package.json | 2 +- .../theming-react-native/tsconfig.json | 26 +- .../ActivityIndicator/package.json | 2 +- .../ActivityIndicator/tsconfig.json | 17 +- .../AppearanceAdditions/package.json | 2 +- .../AppearanceAdditions/tsconfig.json | 14 +- packages/experimental/Avatar/package.json | 2 +- packages/experimental/Avatar/tsconfig.json | 17 +- packages/experimental/Checkbox/package.json | 2 +- packages/experimental/Checkbox/tsconfig.json | 20 +- packages/experimental/Drawer/package.json | 2 +- packages/experimental/Drawer/tsconfig.json | 26 +- packages/experimental/Dropdown/package.json | 2 +- packages/experimental/Dropdown/tsconfig.json | 38 ++- packages/experimental/Expander/package.json | 2 +- packages/experimental/Expander/tsconfig.json | 17 +- packages/experimental/MenuButton/package.json | 2 +- .../experimental/MenuButton/tsconfig.json | 26 +- .../NativeDatePicker/package.json | 2 +- .../NativeDatePicker/tsconfig.json | 11 +- .../NativeFontMetrics/package.json | 2 +- .../NativeFontMetrics/tsconfig.json | 11 +- packages/experimental/Overflow/package.json | 2 +- packages/experimental/Overflow/tsconfig.json | 26 +- packages/experimental/Popover/package.json | 2 +- packages/experimental/Popover/tsconfig.json | 20 +- packages/experimental/Shadow/package.json | 2 +- packages/experimental/Shadow/tsconfig.json | 26 +- packages/experimental/Shimmer/package.json | 2 +- packages/experimental/Shimmer/tsconfig.json | 26 +- packages/experimental/Spinner/package.json | 2 +- packages/experimental/Spinner/tsconfig.json | 26 +- packages/experimental/Tooltip/package.json | 2 +- packages/experimental/Tooltip/tsconfig.json | 23 +- .../experimental/VibrancyView/package.json | 2 +- .../experimental/VibrancyView/tsconfig.json | 14 +- packages/framework-base/package.json | 2 +- packages/framework-base/tsconfig.json | 11 +- packages/framework/composition/package.json | 2 +- packages/framework/composition/tsconfig.json | 20 +- packages/framework/framework/package.json | 2 +- packages/framework/framework/tsconfig.json | 38 ++- packages/framework/theme/package.json | 2 +- packages/framework/theme/tsconfig.json | 20 +- .../framework/themed-stylesheet/package.json | 2 +- .../framework/themed-stylesheet/tsconfig.json | 14 +- packages/framework/use-slot/package.json | 2 +- packages/framework/use-slot/tsconfig.json | 14 +- packages/framework/use-slots/package.json | 2 +- packages/framework/use-slots/tsconfig.json | 17 +- packages/framework/use-styling/package.json | 2 +- packages/framework/use-styling/tsconfig.json | 17 +- packages/framework/use-tokens/package.json | 2 +- packages/framework/use-tokens/tsconfig.json | 14 +- packages/libraries/core/package.json | 2 +- packages/libraries/core/tsconfig.json | 59 ++++- packages/theming/android-theme/package.json | 2 +- packages/theming/android-theme/tsconfig.json | 26 +- packages/theming/apple-theme/package.json | 2 +- packages/theming/apple-theme/tsconfig.json | 32 ++- packages/theming/default-theme/package.json | 2 +- packages/theming/default-theme/tsconfig.json | 26 +- packages/theming/theme-tokens/package.json | 2 +- packages/theming/theme-tokens/tsconfig.json | 14 +- packages/theming/theme-types/package.json | 2 +- packages/theming/theme-types/tsconfig.json | 11 +- packages/theming/theming-utils/package.json | 2 +- packages/theming/theming-utils/tsconfig.json | 17 +- packages/theming/win32-theme/package.json | 2 +- packages/theming/win32-theme/tsconfig.json | 29 ++- packages/utils/adapters/package.json | 2 +- packages/utils/adapters/tsconfig.json | 11 +- packages/utils/interactive-hooks/package.json | 2 +- .../utils/interactive-hooks/tsconfig.json | 20 +- packages/utils/styling/package.json | 2 +- packages/utils/styling/tsconfig.json | 11 +- packages/utils/test-tools/package.json | 2 +- packages/utils/test-tools/tsconfig.json | 14 +- packages/utils/tokens/package.json | 2 +- packages/utils/tokens/tsconfig.json | 17 +- scripts/package.json | 4 +- scripts/src/index.ts | 2 +- scripts/src/repoContext.ts | 21 ++ scripts/src/tasks/constrain.ts | 49 +++- scripts/src/utils/tsConfigs.ts | 62 +++++ scripts/targets/tsconfig.check.json | 12 + scripts/tsconfig.json | 13 +- tsconfig.json | 242 ++++++++++++++++++ yarn.config.cjs | 8 +- yarn.lock | 67 ++--- 170 files changed, 2606 insertions(+), 292 deletions(-) create mode 100644 apps/win32-81/targets/tsconfig.check.json create mode 100644 apps/win32/targets/tsconfig.check.json create mode 100644 scripts/src/utils/tsConfigs.ts create mode 100644 scripts/targets/tsconfig.check.json create mode 100644 tsconfig.json diff --git a/apps/E2E/package.json b/apps/E2E/package.json index abcaf53dc88..dcfb497fcb0 100644 --- a/apps/E2E/package.json +++ b/apps/E2E/package.json @@ -26,7 +26,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "e2eprep:android": "cross-env APPIUM_HOME=.appium yarn exec appium driver install uiautomator2", "e2eprep:ios": "cross-env APPIUM_HOME=.appium yarn exec appium driver install xcuitest", "e2eprep:macos": "cross-env APPIUM_HOME=.appium yarn exec appium driver install mac2", diff --git a/apps/E2E/tsconfig.json b/apps/E2E/tsconfig.json index 927800fb251..97bea26d4a5 100644 --- a/apps/E2E/tsconfig.json +++ b/apps/E2E/tsconfig.json @@ -3,7 +3,17 @@ "compilerOptions": { "outDir": "lib", "types": ["@types/jasmine", "@wdio/globals/types", "@wdio/jasmine-framework", "node"], - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../packages/components/FocusZone/tsconfig.json" + }, + { + "path": "../../scripts/tsconfig.json" + } + ] } diff --git a/apps/fluent-tester/package.json b/apps/fluent-tester/package.json index 84821d2f4e4..6ee3ef8f3f1 100644 --- a/apps/fluent-tester/package.json +++ b/apps/fluent-tester/package.json @@ -24,7 +24,7 @@ }, "scripts": { "android": "rnx-cli run --platform android", - "build": "tsgo", + "build": "tsgo -b", "bundle": "rnx-cli bundle --dev false", "bundle:android": "rnx-cli bundle --dev false --platform android", "bundle:ios": "rnx-cli bundle --dev false --platform ios", diff --git a/apps/fluent-tester/tsconfig.json b/apps/fluent-tester/tsconfig.json index 9154d37a5b9..1d8b9229f8b 100644 --- a/apps/fluent-tester/tsconfig.json +++ b/apps/fluent-tester/tsconfig.json @@ -4,7 +4,56 @@ "outDir": "lib", "allowSyntheticDefaultImports": true, "types": ["@types/jasmine", "@wdio/globals/types", "@wdio/jasmine-framework", "node"], - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../packages/components/Callout/tsconfig.json" + }, + { + "path": "../../packages/experimental/AppearanceAdditions/tsconfig.json" + }, + { + "path": "../../packages/experimental/Avatar/tsconfig.json" + }, + { + "path": "../../packages/experimental/Checkbox/tsconfig.json" + }, + { + "path": "../../packages/experimental/Expander/tsconfig.json" + }, + { + "path": "../../packages/experimental/NativeDatePicker/tsconfig.json" + }, + { + "path": "../../packages/experimental/NativeFontMetrics/tsconfig.json" + }, + { + "path": "../../packages/experimental/Shimmer/tsconfig.json" + }, + { + "path": "../../packages/components/FocusZone/tsconfig.json" + }, + { + "path": "../../packages/components/MenuButton/tsconfig.json" + }, + { + "path": "../../packages/components/RadioGroup/tsconfig.json" + }, + { + "path": "../../scripts/tsconfig.json" + }, + { + "path": "../tester-core/tsconfig.json" + }, + { + "path": "../../packages/experimental/Tooltip/tsconfig.json" + }, + { + "path": "../../packages/experimental/VibrancyView/tsconfig.json" + } + ] } diff --git a/apps/tester-core/package.json b/apps/tester-core/package.json index 7896d7b8c5a..b44860ef7c4 100644 --- a/apps/tester-core/package.json +++ b/apps/tester-core/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/apps/tester-core/tsconfig.json b/apps/tester-core/tsconfig.json index 9154d37a5b9..dae5108bc46 100644 --- a/apps/tester-core/tsconfig.json +++ b/apps/tester-core/tsconfig.json @@ -4,7 +4,161 @@ "outDir": "lib", "allowSyntheticDefaultImports": true, "types": ["@types/jasmine", "@wdio/globals/types", "@wdio/jasmine-framework", "node"], - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../packages/utils/adapters/tsconfig.json" + }, + { + "path": "../../packages/theming/android-theme/tsconfig.json" + }, + { + "path": "../../packages/theming/apple-theme/tsconfig.json" + }, + { + "path": "../../packages/components/Avatar/tsconfig.json" + }, + { + "path": "../../packages/components/Badge/tsconfig.json" + }, + { + "path": "../../packages/components/Button/tsconfig.json" + }, + { + "path": "../../packages/components/Callout/tsconfig.json" + }, + { + "path": "../../packages/components/Chip/tsconfig.json" + }, + { + "path": "../../packages/theming/default-theme/tsconfig.json" + }, + { + "path": "../../packages/components/Divider/tsconfig.json" + }, + { + "path": "../../packages/experimental/Drawer/tsconfig.json" + }, + { + "path": "../../packages/experimental/Dropdown/tsconfig.json" + }, + { + "path": "../E2E/tsconfig.json" + }, + { + "path": "../../packages/experimental/ActivityIndicator/tsconfig.json" + }, + { + "path": "../../packages/experimental/AppearanceAdditions/tsconfig.json" + }, + { + "path": "../../packages/experimental/Avatar/tsconfig.json" + }, + { + "path": "../../packages/experimental/Checkbox/tsconfig.json" + }, + { + "path": "../../packages/experimental/Expander/tsconfig.json" + }, + { + "path": "../../packages/experimental/MenuButton/tsconfig.json" + }, + { + "path": "../../packages/experimental/NativeDatePicker/tsconfig.json" + }, + { + "path": "../../packages/experimental/NativeFontMetrics/tsconfig.json" + }, + { + "path": "../../packages/experimental/Shadow/tsconfig.json" + }, + { + "path": "../../packages/experimental/Shimmer/tsconfig.json" + }, + { + "path": "../../packages/components/FocusZone/tsconfig.json" + }, + { + "path": "../../packages/framework-base/tsconfig.json" + }, + { + "path": "../../packages/framework/framework/tsconfig.json" + }, + { + "path": "../../packages/components/Icon/tsconfig.json" + }, + { + "path": "../../packages/components/Input/tsconfig.json" + }, + { + "path": "../../packages/utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../packages/components/MenuButton/tsconfig.json" + }, + { + "path": "../../packages/components/Menu/tsconfig.json" + }, + { + "path": "../../packages/components/Notification/tsconfig.json" + }, + { + "path": "../../packages/experimental/Overflow/tsconfig.json" + }, + { + "path": "../../packages/components/RadioGroup/tsconfig.json" + }, + { + "path": "../../scripts/tsconfig.json" + }, + { + "path": "../../packages/components/Separator/tsconfig.json" + }, + { + "path": "../../packages/experimental/Spinner/tsconfig.json" + }, + { + "path": "../../packages/components/Stack/tsconfig.json" + }, + { + "path": "../../packages/components/Switch/tsconfig.json" + }, + { + "path": "../../packages/components/TabList/tsconfig.json" + }, + { + "path": "../../packages/components/Text/tsconfig.json" + }, + { + "path": "../../packages/theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../packages/theming/theme-types/tsconfig.json" + }, + { + "path": "../../packages/framework/theme/tsconfig.json" + }, + { + "path": "../../packages/framework/themed-stylesheet/tsconfig.json" + }, + { + "path": "../../packages/theming/theming-utils/tsconfig.json" + }, + { + "path": "../../packages/experimental/Tooltip/tsconfig.json" + }, + { + "path": "../../packages/experimental/VibrancyView/tsconfig.json" + }, + { + "path": "../../packages/theming/win32-theme/tsconfig.json" + }, + { + "path": "../../packages/libraries/core/tsconfig.json" + } + ] } diff --git a/apps/win32-81/package.json b/apps/win32-81/package.json index 5455b75b864..c86f457aeb0 100644 --- a/apps/win32-81/package.json +++ b/apps/win32-81/package.json @@ -19,7 +19,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "bundle": "rnx-cli bundle --dev false", "bundle-dev": "rnx-cli bundle", "clean": "fluentui-scripts clean", diff --git a/apps/win32-81/targets/tsconfig.check.json b/apps/win32-81/targets/tsconfig.check.json new file mode 100644 index 00000000000..824fb07903d --- /dev/null +++ b/apps/win32-81/targets/tsconfig.check.json @@ -0,0 +1,10 @@ +{ + "extends": "@fluentui-react-native/scripts/tsconfig", + "compilerOptions": { + "rootDir": "..", + "noEmit": true, + "composite": true, + "tsBuildInfoFile": "../.cache/tsconfig.tsbuildinfo" + }, + "include": ["../index.js", "../src"] +} diff --git a/apps/win32-81/tsconfig.json b/apps/win32-81/tsconfig.json index 866cca9fb58..931e1d606dd 100644 --- a/apps/win32-81/tsconfig.json +++ b/apps/win32-81/tsconfig.json @@ -1,7 +1,14 @@ { - "extends": "@fluentui-react-native/scripts/tsconfig", - "compilerOptions": { - "noEmit": true - }, - "include": ["index.js"] + "files": [], + "references": [ + { + "path": "../../scripts/tsconfig.json" + }, + { + "path": "../tester-core/tsconfig.json" + }, + { + "path": "./targets/tsconfig.check.json" + } + ] } diff --git a/apps/win32/package.json b/apps/win32/package.json index 3694e13ef7c..1ebd028d742 100644 --- a/apps/win32/package.json +++ b/apps/win32/package.json @@ -19,7 +19,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "bundle": "rnx-cli bundle --dev false", "bundle-dev": "rnx-cli bundle", "clean": "fluentui-scripts clean", diff --git a/apps/win32/targets/tsconfig.check.json b/apps/win32/targets/tsconfig.check.json new file mode 100644 index 00000000000..824fb07903d --- /dev/null +++ b/apps/win32/targets/tsconfig.check.json @@ -0,0 +1,10 @@ +{ + "extends": "@fluentui-react-native/scripts/tsconfig", + "compilerOptions": { + "rootDir": "..", + "noEmit": true, + "composite": true, + "tsBuildInfoFile": "../.cache/tsconfig.tsbuildinfo" + }, + "include": ["../index.js", "../src"] +} diff --git a/apps/win32/tsconfig.json b/apps/win32/tsconfig.json index 866cca9fb58..931e1d606dd 100644 --- a/apps/win32/tsconfig.json +++ b/apps/win32/tsconfig.json @@ -1,7 +1,14 @@ { - "extends": "@fluentui-react-native/scripts/tsconfig", - "compilerOptions": { - "noEmit": true - }, - "include": ["index.js"] + "files": [], + "references": [ + { + "path": "../../scripts/tsconfig.json" + }, + { + "path": "../tester-core/tsconfig.json" + }, + { + "path": "./targets/tsconfig.check.json" + } + ] } diff --git a/lage.config.mjs b/lage.config.mjs index 1da0b8a5fd6..8a365e421da 100644 --- a/lage.config.mjs +++ b/lage.config.mjs @@ -3,13 +3,6 @@ const config = { npmClient: 'yarn', pipeline: { // ── Per-package tasks ────────────────────────────────────────────────── - build: { - // the core build does esm builds (which produce type definitions used by both cjs and esm builds) - // this also handles noEmit packages which should be run in sequence with other packages - dependsOn: ['^build'], - inputs: ['*', 'src/**/*', 'assets/**/*'], - outputs: ['lib/**/*'], - }, bundle: { inputs: ['**/*', '!node_modules/**/*', '!dist/**/*', '!lib/**/*', '!lib-commonjs/**/*'], outputs: ['dist/**/*'], diff --git a/package.json b/package.json index 71bde73c408..1bea2ea9f96 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "scripts" ], "scripts": { - "build": "lage build", + "build": "tsgo -b", "clean-all": "node ./scripts/src/preinstall/clean-all.ts", "docs": "yarn workspace fluent-rn-website start", "bundle:repo": "lage bundle", @@ -43,6 +43,7 @@ "@changesets/cli": "^2.30.0", "@rnx-kit/align-deps": "catalog:", "@rnx-kit/lint-lockfile": "catalog:", + "@typescript/native-preview": "7.0.0-dev.20260610.1", "@yarnpkg/types": "^4.0.1", "babel-jest": "^29.7.0", "cross-env": "catalog:", diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 760cf4edaab..d06fcd7654e 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -26,7 +26,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/codemods/tsconfig.json b/packages/codemods/tsconfig.json index 42bfd821523..240b7f62d19 100644 --- a/packages/codemods/tsconfig.json +++ b/packages/codemods/tsconfig.json @@ -2,8 +2,18 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, "include": ["src"], - "exclude": ["src/transforms/__testfixtures__"] + "exclude": ["src/transforms/__testfixtures__"], + "references": [ + { + "path": "../../scripts/tsconfig.json" + }, + { + "path": "../utils/test-tools/tsconfig.json" + } + ] } diff --git a/packages/components/Avatar/package.json b/packages/components/Avatar/package.json index bb9c82321f6..cc266e5d0d0 100644 --- a/packages/components/Avatar/package.json +++ b/packages/components/Avatar/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Avatar/tsconfig.json b/packages/components/Avatar/tsconfig.json index 83975437e4d..c684ace317e 100644 --- a/packages/components/Avatar/tsconfig.json +++ b/packages/components/Avatar/tsconfig.json @@ -2,7 +2,41 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../Badge/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../Icon/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../theming/theming-utils/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/components/Badge/package.json b/packages/components/Badge/package.json index f771976693d..3d10a06062a 100644 --- a/packages/components/Badge/package.json +++ b/packages/components/Badge/package.json @@ -19,7 +19,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Badge/tsconfig.json b/packages/components/Badge/tsconfig.json index 83975437e4d..9b78ddabde5 100644 --- a/packages/components/Badge/tsconfig.json +++ b/packages/components/Badge/tsconfig.json @@ -2,7 +2,50 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../experimental/Shadow/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../Icon/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../theming/theme-types/tsconfig.json" + }, + { + "path": "../../theming/theming-utils/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/components/Button/package.json b/packages/components/Button/package.json index 3e0998a09d7..d35631f5d92 100644 --- a/packages/components/Button/package.json +++ b/packages/components/Button/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Button/tsconfig.json b/packages/components/Button/tsconfig.json index 83975437e4d..12099925689 100644 --- a/packages/components/Button/tsconfig.json +++ b/packages/components/Button/tsconfig.json @@ -2,7 +2,71 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../experimental/ActivityIndicator/tsconfig.json" + }, + { + "path": "../../experimental/Shadow/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../Icon/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../Pressable/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/styling/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../theming/theme-types/tsconfig.json" + }, + { + "path": "../../theming/theming-utils/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-compose/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/components/Callout/package.json b/packages/components/Callout/package.json index 110eb758b53..0d5ebfbe731 100644 --- a/packages/components/Callout/package.json +++ b/packages/components/Callout/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Callout/tsconfig.json b/packages/components/Callout/tsconfig.json index 83975437e4d..ddfe16077f8 100644 --- a/packages/components/Callout/tsconfig.json +++ b/packages/components/Callout/tsconfig.json @@ -2,7 +2,29 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-compose/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/components/Checkbox/package.json b/packages/components/Checkbox/package.json index 474caf8fac9..0192ec2afc5 100644 --- a/packages/components/Checkbox/package.json +++ b/packages/components/Checkbox/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Checkbox/tsconfig.json b/packages/components/Checkbox/tsconfig.json index 83975437e4d..af417107554 100644 --- a/packages/components/Checkbox/tsconfig.json +++ b/packages/components/Checkbox/tsconfig.json @@ -2,7 +2,59 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../Pressable/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/styling/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../theming/theming-utils/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-compose/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/components/Chip/package.json b/packages/components/Chip/package.json index f31944f7fb7..3ddd2967370 100644 --- a/packages/components/Chip/package.json +++ b/packages/components/Chip/package.json @@ -18,7 +18,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Chip/tsconfig.json b/packages/components/Chip/tsconfig.json index 83975437e4d..409b52dd0a6 100644 --- a/packages/components/Chip/tsconfig.json +++ b/packages/components/Chip/tsconfig.json @@ -2,7 +2,44 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../Icon/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/components/ContextualMenu/package.json b/packages/components/ContextualMenu/package.json index faaccffa64f..11a09cea641 100644 --- a/packages/components/ContextualMenu/package.json +++ b/packages/components/ContextualMenu/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/ContextualMenu/tsconfig.json b/packages/components/ContextualMenu/tsconfig.json index 83975437e4d..f7ec15b5610 100644 --- a/packages/components/ContextualMenu/tsconfig.json +++ b/packages/components/ContextualMenu/tsconfig.json @@ -2,7 +2,50 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../Callout/tsconfig.json" + }, + { + "path": "../FocusZone/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../Icon/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../Pressable/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-compose/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/components/Divider/package.json b/packages/components/Divider/package.json index f86e42a9bfb..bc21374ae88 100644 --- a/packages/components/Divider/package.json +++ b/packages/components/Divider/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Divider/tsconfig.json b/packages/components/Divider/tsconfig.json index 83975437e4d..fefddb0bef4 100644 --- a/packages/components/Divider/tsconfig.json +++ b/packages/components/Divider/tsconfig.json @@ -2,7 +2,35 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../Icon/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + } + ] } diff --git a/packages/components/FocusTrapZone/package.json b/packages/components/FocusTrapZone/package.json index 683a181dccb..77dcade9d6a 100644 --- a/packages/components/FocusTrapZone/package.json +++ b/packages/components/FocusTrapZone/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/FocusTrapZone/tsconfig.json b/packages/components/FocusTrapZone/tsconfig.json index 83975437e4d..d113dc54594 100644 --- a/packages/components/FocusTrapZone/tsconfig.json +++ b/packages/components/FocusTrapZone/tsconfig.json @@ -2,7 +2,26 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/components/FocusZone/package.json b/packages/components/FocusZone/package.json index 720058f3569..6ab6ff885e6 100644 --- a/packages/components/FocusZone/package.json +++ b/packages/components/FocusZone/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/FocusZone/tsconfig.json b/packages/components/FocusZone/tsconfig.json index 83975437e4d..d113dc54594 100644 --- a/packages/components/FocusZone/tsconfig.json +++ b/packages/components/FocusZone/tsconfig.json @@ -2,7 +2,26 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/components/Icon/package.json b/packages/components/Icon/package.json index f42019dbf65..e10b467c0ef 100644 --- a/packages/components/Icon/package.json +++ b/packages/components/Icon/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Icon/tsconfig.json b/packages/components/Icon/tsconfig.json index 83975437e4d..d23888c3c4e 100644 --- a/packages/components/Icon/tsconfig.json +++ b/packages/components/Icon/tsconfig.json @@ -2,7 +2,29 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + } + ] } diff --git a/packages/components/Input/package.json b/packages/components/Input/package.json index c679fbd7231..285d3ab183e 100644 --- a/packages/components/Input/package.json +++ b/packages/components/Input/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Input/tsconfig.json b/packages/components/Input/tsconfig.json index bdc4474a2f4..46bd60b4e7b 100644 --- a/packages/components/Input/tsconfig.json +++ b/packages/components/Input/tsconfig.json @@ -2,7 +2,44 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src", "svgs.d.ts"] + "include": ["src", "svgs.d.ts"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../Icon/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/styling/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/components/Link/package.json b/packages/components/Link/package.json index b2806a9b35a..be2838d2844 100644 --- a/packages/components/Link/package.json +++ b/packages/components/Link/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Link/tsconfig.json b/packages/components/Link/tsconfig.json index 83975437e4d..aeefb9bbeec 100644 --- a/packages/components/Link/tsconfig.json +++ b/packages/components/Link/tsconfig.json @@ -2,7 +2,47 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-compose/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/components/Menu/package.json b/packages/components/Menu/package.json index 15ac8869236..279df1e076e 100644 --- a/packages/components/Menu/package.json +++ b/packages/components/Menu/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Menu/tsconfig.json b/packages/components/Menu/tsconfig.json index 83975437e4d..d549493b695 100644 --- a/packages/components/Menu/tsconfig.json +++ b/packages/components/Menu/tsconfig.json @@ -2,7 +2,56 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../Button/tsconfig.json" + }, + { + "path": "../Callout/tsconfig.json" + }, + { + "path": "../FocusZone/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../Icon/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../theming/theming-utils/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/components/MenuButton/package.json b/packages/components/MenuButton/package.json index 397b3667b61..14f54923c80 100644 --- a/packages/components/MenuButton/package.json +++ b/packages/components/MenuButton/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/MenuButton/tsconfig.json b/packages/components/MenuButton/tsconfig.json index 83975437e4d..7726b449a0f 100644 --- a/packages/components/MenuButton/tsconfig.json +++ b/packages/components/MenuButton/tsconfig.json @@ -2,7 +2,38 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../Button/tsconfig.json" + }, + { + "path": "../ContextualMenu/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../Icon/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-compose/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/components/Notification/package.json b/packages/components/Notification/package.json index eee594f30ae..667e97e1016 100644 --- a/packages/components/Notification/package.json +++ b/packages/components/Notification/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Notification/tsconfig.json b/packages/components/Notification/tsconfig.json index 83975437e4d..d499c8781ea 100644 --- a/packages/components/Notification/tsconfig.json +++ b/packages/components/Notification/tsconfig.json @@ -2,7 +2,59 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../Button/tsconfig.json" + }, + { + "path": "../../experimental/AppearanceAdditions/tsconfig.json" + }, + { + "path": "../../experimental/Shadow/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../Icon/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../Pressable/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../theming/theme-types/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/components/Persona/package.json b/packages/components/Persona/package.json index ee74188847a..7d7c47a42bc 100644 --- a/packages/components/Persona/package.json +++ b/packages/components/Persona/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Persona/tsconfig.json b/packages/components/Persona/tsconfig.json index 83975437e4d..132cc6b683e 100644 --- a/packages/components/Persona/tsconfig.json +++ b/packages/components/Persona/tsconfig.json @@ -2,7 +2,41 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../PersonaCoin/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-compose/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-tokens/tsconfig.json" + } + ] } diff --git a/packages/components/PersonaCoin/package.json b/packages/components/PersonaCoin/package.json index df2d3079d1f..304e091d11a 100644 --- a/packages/components/PersonaCoin/package.json +++ b/packages/components/PersonaCoin/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/PersonaCoin/tsconfig.json b/packages/components/PersonaCoin/tsconfig.json index 83975437e4d..030965d9253 100644 --- a/packages/components/PersonaCoin/tsconfig.json +++ b/packages/components/PersonaCoin/tsconfig.json @@ -2,7 +2,41 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-compose/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-tokens/tsconfig.json" + } + ] } diff --git a/packages/components/Pressable/package.json b/packages/components/Pressable/package.json index fbc1bbc30c3..f6c02848626 100644 --- a/packages/components/Pressable/package.json +++ b/packages/components/Pressable/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Pressable/tsconfig.json b/packages/components/Pressable/tsconfig.json index 83975437e4d..d113dc54594 100644 --- a/packages/components/Pressable/tsconfig.json +++ b/packages/components/Pressable/tsconfig.json @@ -2,7 +2,26 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/components/RadioGroup/package.json b/packages/components/RadioGroup/package.json index 45b212bc955..f74362623dc 100644 --- a/packages/components/RadioGroup/package.json +++ b/packages/components/RadioGroup/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/RadioGroup/tsconfig.json b/packages/components/RadioGroup/tsconfig.json index 83975437e4d..22c5916baad 100644 --- a/packages/components/RadioGroup/tsconfig.json +++ b/packages/components/RadioGroup/tsconfig.json @@ -2,7 +2,56 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../FocusZone/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../Pressable/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-compose/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/components/Separator/package.json b/packages/components/Separator/package.json index d36e195f989..99029c9b8cf 100644 --- a/packages/components/Separator/package.json +++ b/packages/components/Separator/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Separator/tsconfig.json b/packages/components/Separator/tsconfig.json index 83975437e4d..bbd99cf74d5 100644 --- a/packages/components/Separator/tsconfig.json +++ b/packages/components/Separator/tsconfig.json @@ -2,7 +2,26 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/components/Stack/package.json b/packages/components/Stack/package.json index 6bc0b16cae3..f326645f346 100644 --- a/packages/components/Stack/package.json +++ b/packages/components/Stack/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Stack/tsconfig.json b/packages/components/Stack/tsconfig.json index 83975437e4d..25fc2ef620a 100644 --- a/packages/components/Stack/tsconfig.json +++ b/packages/components/Stack/tsconfig.json @@ -2,7 +2,41 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-compose/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-settings/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-tokens/tsconfig.json" + } + ] } diff --git a/packages/components/Switch/package.json b/packages/components/Switch/package.json index a571653f96c..3e328726daf 100644 --- a/packages/components/Switch/package.json +++ b/packages/components/Switch/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Switch/tsconfig.json b/packages/components/Switch/tsconfig.json index 83975437e4d..36924fb2db3 100644 --- a/packages/components/Switch/tsconfig.json +++ b/packages/components/Switch/tsconfig.json @@ -2,7 +2,38 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../theming/theming-utils/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/components/TabList/package.json b/packages/components/TabList/package.json index 21da747e9c5..c1e031449df 100644 --- a/packages/components/TabList/package.json +++ b/packages/components/TabList/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/TabList/tsconfig.json b/packages/components/TabList/tsconfig.json index 83975437e4d..34d69ae3221 100644 --- a/packages/components/TabList/tsconfig.json +++ b/packages/components/TabList/tsconfig.json @@ -2,7 +2,47 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../FocusZone/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../Icon/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../Text/tsconfig.json" + }, + { + "path": "../../theming/theming-utils/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/components/Text/package.json b/packages/components/Text/package.json index d3c434aa613..47e87edf9e4 100644 --- a/packages/components/Text/package.json +++ b/packages/components/Text/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/components/Text/tsconfig.json b/packages/components/Text/tsconfig.json index 83975437e4d..e278ea19255 100644 --- a/packages/components/Text/tsconfig.json +++ b/packages/components/Text/tsconfig.json @@ -2,7 +2,38 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../deprecated/foundation-compose/tsconfig.json" + } + ] } diff --git a/packages/deprecated/foundation-composable/package.json b/packages/deprecated/foundation-composable/package.json index 539e00a6c5e..e2b9b3b1b1c 100644 --- a/packages/deprecated/foundation-composable/package.json +++ b/packages/deprecated/foundation-composable/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/foundation-composable/tsconfig.json b/packages/deprecated/foundation-composable/tsconfig.json index 83975437e4d..75d9ae1b274 100644 --- a/packages/deprecated/foundation-composable/tsconfig.json +++ b/packages/deprecated/foundation-composable/tsconfig.json @@ -2,7 +2,20 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/deprecated/foundation-compose/package.json b/packages/deprecated/foundation-compose/package.json index 350437950c2..c8de85a30bb 100644 --- a/packages/deprecated/foundation-compose/package.json +++ b/packages/deprecated/foundation-compose/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/foundation-compose/tsconfig.json b/packages/deprecated/foundation-compose/tsconfig.json index 83975437e4d..9e7eac8f5db 100644 --- a/packages/deprecated/foundation-compose/tsconfig.json +++ b/packages/deprecated/foundation-compose/tsconfig.json @@ -2,7 +2,38 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../theming/default-theme/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../theming/theme-types/tsconfig.json" + }, + { + "path": "../foundation-composable/tsconfig.json" + }, + { + "path": "../foundation-settings/tsconfig.json" + }, + { + "path": "../foundation-tokens/tsconfig.json" + }, + { + "path": "../themed-settings/tsconfig.json" + }, + { + "path": "../theming-ramp/tsconfig.json" + } + ] } diff --git a/packages/deprecated/foundation-settings/package.json b/packages/deprecated/foundation-settings/package.json index 46a08cd40d7..5557ae5f5d9 100644 --- a/packages/deprecated/foundation-settings/package.json +++ b/packages/deprecated/foundation-settings/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/foundation-settings/tsconfig.json b/packages/deprecated/foundation-settings/tsconfig.json index 83975437e4d..256f00585b8 100644 --- a/packages/deprecated/foundation-settings/tsconfig.json +++ b/packages/deprecated/foundation-settings/tsconfig.json @@ -2,7 +2,17 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/deprecated/foundation-tokens/package.json b/packages/deprecated/foundation-tokens/package.json index 6702c003faa..24b61e081ed 100644 --- a/packages/deprecated/foundation-tokens/package.json +++ b/packages/deprecated/foundation-tokens/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/foundation-tokens/tsconfig.json b/packages/deprecated/foundation-tokens/tsconfig.json index ad1c74a21b7..8311dc51972 100644 --- a/packages/deprecated/foundation-tokens/tsconfig.json +++ b/packages/deprecated/foundation-tokens/tsconfig.json @@ -3,7 +3,23 @@ "compilerOptions": { "outDir": "lib", "types": ["node", "jest", "react"], - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/deprecated/theme-registry/package.json b/packages/deprecated/theme-registry/package.json index 30dc1e8f716..c2ef27c1284 100644 --- a/packages/deprecated/theme-registry/package.json +++ b/packages/deprecated/theme-registry/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/theme-registry/tsconfig.json b/packages/deprecated/theme-registry/tsconfig.json index 83975437e4d..256f00585b8 100644 --- a/packages/deprecated/theme-registry/tsconfig.json +++ b/packages/deprecated/theme-registry/tsconfig.json @@ -2,7 +2,17 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/deprecated/themed-settings/package.json b/packages/deprecated/themed-settings/package.json index 77cdb9dc1e0..faec69dd192 100644 --- a/packages/deprecated/themed-settings/package.json +++ b/packages/deprecated/themed-settings/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/themed-settings/tsconfig.json b/packages/deprecated/themed-settings/tsconfig.json index 83975437e4d..75d9ae1b274 100644 --- a/packages/deprecated/themed-settings/tsconfig.json +++ b/packages/deprecated/themed-settings/tsconfig.json @@ -2,7 +2,20 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/deprecated/theming-ramp/package.json b/packages/deprecated/theming-ramp/package.json index 61a0ce0628c..7a8b6a7e5f1 100644 --- a/packages/deprecated/theming-ramp/package.json +++ b/packages/deprecated/theming-ramp/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/theming-ramp/tsconfig.json b/packages/deprecated/theming-ramp/tsconfig.json index 83975437e4d..d126a981c36 100644 --- a/packages/deprecated/theming-ramp/tsconfig.json +++ b/packages/deprecated/theming-ramp/tsconfig.json @@ -2,7 +2,26 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../../theming/theme-types/tsconfig.json" + }, + { + "path": "../foundation-settings/tsconfig.json" + } + ] } diff --git a/packages/deprecated/theming-react-native/package.json b/packages/deprecated/theming-react-native/package.json index eb372e07a98..c8445584cbc 100644 --- a/packages/deprecated/theming-react-native/package.json +++ b/packages/deprecated/theming-react-native/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/deprecated/theming-react-native/tsconfig.json b/packages/deprecated/theming-react-native/tsconfig.json index 83975437e4d..d0aa7ff62de 100644 --- a/packages/deprecated/theming-react-native/tsconfig.json +++ b/packages/deprecated/theming-react-native/tsconfig.json @@ -2,7 +2,29 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../theming/default-theme/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../theming/win32-theme/tsconfig.json" + }, + { + "path": "../theme-registry/tsconfig.json" + }, + { + "path": "../theming-ramp/tsconfig.json" + } + ] } diff --git a/packages/experimental/ActivityIndicator/package.json b/packages/experimental/ActivityIndicator/package.json index 682182e429f..4feb0627819 100644 --- a/packages/experimental/ActivityIndicator/package.json +++ b/packages/experimental/ActivityIndicator/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/ActivityIndicator/tsconfig.json b/packages/experimental/ActivityIndicator/tsconfig.json index 83975437e4d..696958d8141 100644 --- a/packages/experimental/ActivityIndicator/tsconfig.json +++ b/packages/experimental/ActivityIndicator/tsconfig.json @@ -2,7 +2,20 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/experimental/AppearanceAdditions/package.json b/packages/experimental/AppearanceAdditions/package.json index 06a8b8f775b..423fe962120 100644 --- a/packages/experimental/AppearanceAdditions/package.json +++ b/packages/experimental/AppearanceAdditions/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/AppearanceAdditions/tsconfig.json b/packages/experimental/AppearanceAdditions/tsconfig.json index 83975437e4d..be88a1fa63a 100644 --- a/packages/experimental/AppearanceAdditions/tsconfig.json +++ b/packages/experimental/AppearanceAdditions/tsconfig.json @@ -2,7 +2,17 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/experimental/Avatar/package.json b/packages/experimental/Avatar/package.json index 2dd2dc13e78..7d914f86df6 100644 --- a/packages/experimental/Avatar/package.json +++ b/packages/experimental/Avatar/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Avatar/tsconfig.json b/packages/experimental/Avatar/tsconfig.json index 118241a66d9..4a3937b0b84 100644 --- a/packages/experimental/Avatar/tsconfig.json +++ b/packages/experimental/Avatar/tsconfig.json @@ -2,8 +2,21 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, "include": ["src"], - "exclude": ["src/__tests__/Avatar.test.jsx"] + "exclude": ["src/__tests__/Avatar.test.jsx"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/experimental/Checkbox/package.json b/packages/experimental/Checkbox/package.json index dc8cfce0630..8309bea816b 100644 --- a/packages/experimental/Checkbox/package.json +++ b/packages/experimental/Checkbox/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Checkbox/tsconfig.json b/packages/experimental/Checkbox/tsconfig.json index 83975437e4d..a05d00f41c0 100644 --- a/packages/experimental/Checkbox/tsconfig.json +++ b/packages/experimental/Checkbox/tsconfig.json @@ -2,7 +2,23 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../components/Checkbox/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/experimental/Drawer/package.json b/packages/experimental/Drawer/package.json index b1f8f7509d2..95c7db88000 100644 --- a/packages/experimental/Drawer/package.json +++ b/packages/experimental/Drawer/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Drawer/tsconfig.json b/packages/experimental/Drawer/tsconfig.json index bdc4474a2f4..6b1ef66e012 100644 --- a/packages/experimental/Drawer/tsconfig.json +++ b/packages/experimental/Drawer/tsconfig.json @@ -2,7 +2,29 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src", "svgs.d.ts"] + "include": ["src", "svgs.d.ts"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/experimental/Dropdown/package.json b/packages/experimental/Dropdown/package.json index d30b68227dd..ed6305eb6c2 100644 --- a/packages/experimental/Dropdown/package.json +++ b/packages/experimental/Dropdown/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Dropdown/tsconfig.json b/packages/experimental/Dropdown/tsconfig.json index 83975437e4d..6878593d4df 100644 --- a/packages/experimental/Dropdown/tsconfig.json +++ b/packages/experimental/Dropdown/tsconfig.json @@ -2,7 +2,41 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../components/Button/tsconfig.json" + }, + { + "path": "../../components/Callout/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../../components/Text/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + } + ] } diff --git a/packages/experimental/Expander/package.json b/packages/experimental/Expander/package.json index 4873cea1d50..489fd1e38df 100644 --- a/packages/experimental/Expander/package.json +++ b/packages/experimental/Expander/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "lint": "fluentui-scripts lint", diff --git a/packages/experimental/Expander/tsconfig.json b/packages/experimental/Expander/tsconfig.json index 83975437e4d..696958d8141 100644 --- a/packages/experimental/Expander/tsconfig.json +++ b/packages/experimental/Expander/tsconfig.json @@ -2,7 +2,20 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/experimental/MenuButton/package.json b/packages/experimental/MenuButton/package.json index 5ffe08fd849..3fe90218146 100644 --- a/packages/experimental/MenuButton/package.json +++ b/packages/experimental/MenuButton/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/MenuButton/tsconfig.json b/packages/experimental/MenuButton/tsconfig.json index 83975437e4d..481f89ad5cf 100644 --- a/packages/experimental/MenuButton/tsconfig.json +++ b/packages/experimental/MenuButton/tsconfig.json @@ -2,7 +2,29 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../components/Button/tsconfig.json" + }, + { + "path": "../../components/ContextualMenu/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + } + ] } diff --git a/packages/experimental/NativeDatePicker/package.json b/packages/experimental/NativeDatePicker/package.json index 50e93c414f2..cfd9346ed0f 100644 --- a/packages/experimental/NativeDatePicker/package.json +++ b/packages/experimental/NativeDatePicker/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/NativeDatePicker/tsconfig.json b/packages/experimental/NativeDatePicker/tsconfig.json index 83975437e4d..ff8fae9384a 100644 --- a/packages/experimental/NativeDatePicker/tsconfig.json +++ b/packages/experimental/NativeDatePicker/tsconfig.json @@ -2,7 +2,14 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/experimental/NativeFontMetrics/package.json b/packages/experimental/NativeFontMetrics/package.json index 7804337c2d5..12dd77c27cc 100644 --- a/packages/experimental/NativeFontMetrics/package.json +++ b/packages/experimental/NativeFontMetrics/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/NativeFontMetrics/tsconfig.json b/packages/experimental/NativeFontMetrics/tsconfig.json index 83975437e4d..ff8fae9384a 100644 --- a/packages/experimental/NativeFontMetrics/tsconfig.json +++ b/packages/experimental/NativeFontMetrics/tsconfig.json @@ -2,7 +2,14 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/experimental/Overflow/package.json b/packages/experimental/Overflow/package.json index 2871f045770..78822e52b6a 100644 --- a/packages/experimental/Overflow/package.json +++ b/packages/experimental/Overflow/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Overflow/tsconfig.json b/packages/experimental/Overflow/tsconfig.json index 83975437e4d..b45be32a9fe 100644 --- a/packages/experimental/Overflow/tsconfig.json +++ b/packages/experimental/Overflow/tsconfig.json @@ -2,7 +2,29 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../components/Button/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../components/Menu/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + } + ] } diff --git a/packages/experimental/Popover/package.json b/packages/experimental/Popover/package.json index bafa05f8899..ff831ec837c 100644 --- a/packages/experimental/Popover/package.json +++ b/packages/experimental/Popover/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Popover/tsconfig.json b/packages/experimental/Popover/tsconfig.json index 83975437e4d..5b3c4ec53b6 100644 --- a/packages/experimental/Popover/tsconfig.json +++ b/packages/experimental/Popover/tsconfig.json @@ -2,7 +2,23 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/experimental/Shadow/package.json b/packages/experimental/Shadow/package.json index e2dce781645..782b702c6fc 100644 --- a/packages/experimental/Shadow/package.json +++ b/packages/experimental/Shadow/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Shadow/tsconfig.json b/packages/experimental/Shadow/tsconfig.json index 83975437e4d..d3dc5e02f95 100644 --- a/packages/experimental/Shadow/tsconfig.json +++ b/packages/experimental/Shadow/tsconfig.json @@ -2,7 +2,29 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../components/Pressable/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../../theming/theme-types/tsconfig.json" + } + ] } diff --git a/packages/experimental/Shimmer/package.json b/packages/experimental/Shimmer/package.json index 252d492a44c..1017488473e 100644 --- a/packages/experimental/Shimmer/package.json +++ b/packages/experimental/Shimmer/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Shimmer/tsconfig.json b/packages/experimental/Shimmer/tsconfig.json index 83975437e4d..79f47ac5f70 100644 --- a/packages/experimental/Shimmer/tsconfig.json +++ b/packages/experimental/Shimmer/tsconfig.json @@ -2,7 +2,29 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../theming/theming-utils/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/experimental/Spinner/package.json b/packages/experimental/Spinner/package.json index 2affce851b1..0d2b2e1faa5 100644 --- a/packages/experimental/Spinner/package.json +++ b/packages/experimental/Spinner/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Spinner/tsconfig.json b/packages/experimental/Spinner/tsconfig.json index 83975437e4d..2735862d93f 100644 --- a/packages/experimental/Spinner/tsconfig.json +++ b/packages/experimental/Spinner/tsconfig.json @@ -2,7 +2,29 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../framework/framework/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../components/Text/tsconfig.json" + }, + { + "path": "../../theming/theme-tokens/tsconfig.json" + }, + { + "path": "../../framework/use-styling/tsconfig.json" + } + ] } diff --git a/packages/experimental/Tooltip/package.json b/packages/experimental/Tooltip/package.json index 49561089c6e..aa247e63ec2 100644 --- a/packages/experimental/Tooltip/package.json +++ b/packages/experimental/Tooltip/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/Tooltip/tsconfig.json b/packages/experimental/Tooltip/tsconfig.json index 83975437e4d..49358c976ee 100644 --- a/packages/experimental/Tooltip/tsconfig.json +++ b/packages/experimental/Tooltip/tsconfig.json @@ -2,7 +2,26 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../components/Button/tsconfig.json" + }, + { + "path": "../../components/Callout/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + } + ] } diff --git a/packages/experimental/VibrancyView/package.json b/packages/experimental/VibrancyView/package.json index 4bb4c32b31d..a5c636a5e06 100644 --- a/packages/experimental/VibrancyView/package.json +++ b/packages/experimental/VibrancyView/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/experimental/VibrancyView/tsconfig.json b/packages/experimental/VibrancyView/tsconfig.json index 83975437e4d..ca97ae183d9 100644 --- a/packages/experimental/VibrancyView/tsconfig.json +++ b/packages/experimental/VibrancyView/tsconfig.json @@ -2,7 +2,17 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../utils/adapters/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/framework-base/package.json b/packages/framework-base/package.json index 331dce0f0fa..e993d961900 100644 --- a/packages/framework-base/package.json +++ b/packages/framework-base/package.json @@ -31,7 +31,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework-base/tsconfig.json b/packages/framework-base/tsconfig.json index b0dd41f41f6..af17d65ef19 100644 --- a/packages/framework-base/tsconfig.json +++ b/packages/framework-base/tsconfig.json @@ -4,7 +4,14 @@ "outDir": "lib", "allowJs": true, "checkJs": true, - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../scripts/tsconfig.json" + } + ] } diff --git a/packages/framework/composition/package.json b/packages/framework/composition/package.json index 64ae9a5673d..58860fe5939 100644 --- a/packages/framework/composition/package.json +++ b/packages/framework/composition/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/composition/tsconfig.json b/packages/framework/composition/tsconfig.json index 83975437e4d..2c2ad363105 100644 --- a/packages/framework/composition/tsconfig.json +++ b/packages/framework/composition/tsconfig.json @@ -2,7 +2,23 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../use-slots/tsconfig.json" + }, + { + "path": "../use-styling/tsconfig.json" + } + ] } diff --git a/packages/framework/framework/package.json b/packages/framework/framework/package.json index 59578834c33..80d2d21a7c4 100644 --- a/packages/framework/framework/package.json +++ b/packages/framework/framework/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/framework/tsconfig.json b/packages/framework/framework/tsconfig.json index a79de74998f..6e084a6344a 100644 --- a/packages/framework/framework/tsconfig.json +++ b/packages/framework/framework/tsconfig.json @@ -6,7 +6,41 @@ "strictNullChecks": true, "noImplicitAny": true, "rootDir": "src", - "outDir": "lib" + "outDir": "lib", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../composition/tsconfig.json" + }, + { + "path": "../../theming/default-theme/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../theming/theme-types/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + }, + { + "path": "../use-slot/tsconfig.json" + }, + { + "path": "../use-slots/tsconfig.json" + }, + { + "path": "../use-styling/tsconfig.json" + }, + { + "path": "../use-tokens/tsconfig.json" + } + ] } diff --git a/packages/framework/theme/package.json b/packages/framework/theme/package.json index 04f7b556167..4d88bd5e342 100644 --- a/packages/framework/theme/package.json +++ b/packages/framework/theme/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/theme/tsconfig.json b/packages/framework/theme/tsconfig.json index 83975437e4d..1a38cb58221 100644 --- a/packages/framework/theme/tsconfig.json +++ b/packages/framework/theme/tsconfig.json @@ -2,7 +2,23 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../utils/test-tools/tsconfig.json" + }, + { + "path": "../../theming/theme-types/tsconfig.json" + } + ] } diff --git a/packages/framework/themed-stylesheet/package.json b/packages/framework/themed-stylesheet/package.json index bf56db904f9..06b07d4030f 100644 --- a/packages/framework/themed-stylesheet/package.json +++ b/packages/framework/themed-stylesheet/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/themed-stylesheet/tsconfig.json b/packages/framework/themed-stylesheet/tsconfig.json index 83975437e4d..256f00585b8 100644 --- a/packages/framework/themed-stylesheet/tsconfig.json +++ b/packages/framework/themed-stylesheet/tsconfig.json @@ -2,7 +2,17 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/framework/use-slot/package.json b/packages/framework/use-slot/package.json index 89aed41e841..c81e3b611c0 100644 --- a/packages/framework/use-slot/package.json +++ b/packages/framework/use-slot/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/use-slot/tsconfig.json b/packages/framework/use-slot/tsconfig.json index 83975437e4d..256f00585b8 100644 --- a/packages/framework/use-slot/tsconfig.json +++ b/packages/framework/use-slot/tsconfig.json @@ -2,7 +2,17 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/framework/use-slots/package.json b/packages/framework/use-slots/package.json index ab44d90ba54..391e5614559 100644 --- a/packages/framework/use-slots/package.json +++ b/packages/framework/use-slots/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/use-slots/tsconfig.json b/packages/framework/use-slots/tsconfig.json index 83975437e4d..8b3713018f7 100644 --- a/packages/framework/use-slots/tsconfig.json +++ b/packages/framework/use-slots/tsconfig.json @@ -2,7 +2,20 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../use-slot/tsconfig.json" + } + ] } diff --git a/packages/framework/use-styling/package.json b/packages/framework/use-styling/package.json index e4ce72000ab..8326754cf23 100644 --- a/packages/framework/use-styling/package.json +++ b/packages/framework/use-styling/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/use-styling/tsconfig.json b/packages/framework/use-styling/tsconfig.json index 83975437e4d..b759587b6bc 100644 --- a/packages/framework/use-styling/tsconfig.json +++ b/packages/framework/use-styling/tsconfig.json @@ -2,7 +2,20 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../use-tokens/tsconfig.json" + } + ] } diff --git a/packages/framework/use-tokens/package.json b/packages/framework/use-tokens/package.json index 5f6eea4957e..e36ca923f17 100644 --- a/packages/framework/use-tokens/package.json +++ b/packages/framework/use-tokens/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/framework/use-tokens/tsconfig.json b/packages/framework/use-tokens/tsconfig.json index 83975437e4d..256f00585b8 100644 --- a/packages/framework/use-tokens/tsconfig.json +++ b/packages/framework/use-tokens/tsconfig.json @@ -2,7 +2,17 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/libraries/core/package.json b/packages/libraries/core/package.json index 2671889e1eb..7dde80932b8 100644 --- a/packages/libraries/core/package.json +++ b/packages/libraries/core/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/libraries/core/tsconfig.json b/packages/libraries/core/tsconfig.json index a080618044e..52b506823bf 100644 --- a/packages/libraries/core/tsconfig.json +++ b/packages/libraries/core/tsconfig.json @@ -11,7 +11,62 @@ "skipLibCheck": true, "noUnusedLocals": true, "strict": true, - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../components/Button/tsconfig.json" + }, + { + "path": "../../components/Callout/tsconfig.json" + }, + { + "path": "../../components/Checkbox/tsconfig.json" + }, + { + "path": "../../components/ContextualMenu/tsconfig.json" + }, + { + "path": "../../components/FocusTrapZone/tsconfig.json" + }, + { + "path": "../../components/FocusZone/tsconfig.json" + }, + { + "path": "../../utils/interactive-hooks/tsconfig.json" + }, + { + "path": "../../components/Link/tsconfig.json" + }, + { + "path": "../../components/MenuButton/tsconfig.json" + }, + { + "path": "../../components/PersonaCoin/tsconfig.json" + }, + { + "path": "../../components/Persona/tsconfig.json" + }, + { + "path": "../../components/Pressable/tsconfig.json" + }, + { + "path": "../../components/RadioGroup/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../components/Separator/tsconfig.json" + }, + { + "path": "../../components/TabList/tsconfig.json" + }, + { + "path": "../../components/Text/tsconfig.json" + } + ] } diff --git a/packages/theming/android-theme/package.json b/packages/theming/android-theme/package.json index ad21b302b38..51cc009f2fa 100644 --- a/packages/theming/android-theme/package.json +++ b/packages/theming/android-theme/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/android-theme/tsconfig.json b/packages/theming/android-theme/tsconfig.json index 97fa2342172..5beddb127c1 100644 --- a/packages/theming/android-theme/tsconfig.json +++ b/packages/theming/android-theme/tsconfig.json @@ -3,7 +3,29 @@ "compilerOptions": { "outDir": "lib", "resolveJsonModule": true, - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../theme-tokens/tsconfig.json" + }, + { + "path": "../theme-types/tsconfig.json" + }, + { + "path": "../../framework/theme/tsconfig.json" + }, + { + "path": "../theming-utils/tsconfig.json" + } + ] } diff --git a/packages/theming/apple-theme/package.json b/packages/theming/apple-theme/package.json index 9b1badb1e8e..7539a5f46e1 100644 --- a/packages/theming/apple-theme/package.json +++ b/packages/theming/apple-theme/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/apple-theme/tsconfig.json b/packages/theming/apple-theme/tsconfig.json index 97fa2342172..051281582e3 100644 --- a/packages/theming/apple-theme/tsconfig.json +++ b/packages/theming/apple-theme/tsconfig.json @@ -3,7 +3,35 @@ "compilerOptions": { "outDir": "lib", "resolveJsonModule": true, - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../default-theme/tsconfig.json" + }, + { + "path": "../../experimental/AppearanceAdditions/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../theme-tokens/tsconfig.json" + }, + { + "path": "../theme-types/tsconfig.json" + }, + { + "path": "../../framework/theme/tsconfig.json" + }, + { + "path": "../theming-utils/tsconfig.json" + } + ] } diff --git a/packages/theming/default-theme/package.json b/packages/theming/default-theme/package.json index b2f8fe62007..92aa16f2d6b 100644 --- a/packages/theming/default-theme/package.json +++ b/packages/theming/default-theme/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/default-theme/tsconfig.json b/packages/theming/default-theme/tsconfig.json index 83975437e4d..31622752c06 100644 --- a/packages/theming/default-theme/tsconfig.json +++ b/packages/theming/default-theme/tsconfig.json @@ -2,7 +2,29 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../theme-tokens/tsconfig.json" + }, + { + "path": "../theme-types/tsconfig.json" + }, + { + "path": "../../framework/theme/tsconfig.json" + }, + { + "path": "../theming-utils/tsconfig.json" + } + ] } diff --git a/packages/theming/theme-tokens/package.json b/packages/theming/theme-tokens/package.json index 50193f4679a..652db1e7179 100644 --- a/packages/theming/theme-tokens/package.json +++ b/packages/theming/theme-tokens/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/theme-tokens/tsconfig.json b/packages/theming/theme-tokens/tsconfig.json index 97fa2342172..57fe92088b5 100644 --- a/packages/theming/theme-tokens/tsconfig.json +++ b/packages/theming/theme-tokens/tsconfig.json @@ -3,7 +3,17 @@ "compilerOptions": { "outDir": "lib", "resolveJsonModule": true, - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../theme-types/tsconfig.json" + } + ] } diff --git a/packages/theming/theme-types/package.json b/packages/theming/theme-types/package.json index 2a55704204c..9474c1d52e3 100644 --- a/packages/theming/theme-types/package.json +++ b/packages/theming/theme-types/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/theme-types/tsconfig.json b/packages/theming/theme-types/tsconfig.json index 83975437e4d..ff8fae9384a 100644 --- a/packages/theming/theme-types/tsconfig.json +++ b/packages/theming/theme-types/tsconfig.json @@ -2,7 +2,14 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/theming/theming-utils/package.json b/packages/theming/theming-utils/package.json index cb8ebfa5b40..54160ae16de 100644 --- a/packages/theming/theming-utils/package.json +++ b/packages/theming/theming-utils/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/theming-utils/tsconfig.json b/packages/theming/theming-utils/tsconfig.json index 83975437e4d..3090ce813b6 100644 --- a/packages/theming/theming-utils/tsconfig.json +++ b/packages/theming/theming-utils/tsconfig.json @@ -2,7 +2,20 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../theme-types/tsconfig.json" + }, + { + "path": "../../utils/tokens/tsconfig.json" + } + ] } diff --git a/packages/theming/win32-theme/package.json b/packages/theming/win32-theme/package.json index aed65365a95..23f22c1b5b2 100644 --- a/packages/theming/win32-theme/package.json +++ b/packages/theming/win32-theme/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/theming/win32-theme/tsconfig.json b/packages/theming/win32-theme/tsconfig.json index 97fa2342172..583d056fbcb 100644 --- a/packages/theming/win32-theme/tsconfig.json +++ b/packages/theming/win32-theme/tsconfig.json @@ -3,7 +3,32 @@ "compilerOptions": { "outDir": "lib", "resolveJsonModule": true, - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../default-theme/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../theme-tokens/tsconfig.json" + }, + { + "path": "../theme-types/tsconfig.json" + }, + { + "path": "../../framework/theme/tsconfig.json" + }, + { + "path": "../theming-utils/tsconfig.json" + } + ] } diff --git a/packages/utils/adapters/package.json b/packages/utils/adapters/package.json index 2330e13e95d..fb5da0a5632 100644 --- a/packages/utils/adapters/package.json +++ b/packages/utils/adapters/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/utils/adapters/tsconfig.json b/packages/utils/adapters/tsconfig.json index 83975437e4d..ff8fae9384a 100644 --- a/packages/utils/adapters/tsconfig.json +++ b/packages/utils/adapters/tsconfig.json @@ -2,7 +2,14 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/utils/interactive-hooks/package.json b/packages/utils/interactive-hooks/package.json index c5a9c472aa4..762bcb39c01 100644 --- a/packages/utils/interactive-hooks/package.json +++ b/packages/utils/interactive-hooks/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/utils/interactive-hooks/tsconfig.json b/packages/utils/interactive-hooks/tsconfig.json index 83975437e4d..e7d430457d1 100644 --- a/packages/utils/interactive-hooks/tsconfig.json +++ b/packages/utils/interactive-hooks/tsconfig.json @@ -2,7 +2,23 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../adapters/tsconfig.json" + }, + { + "path": "../../framework-base/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../test-tools/tsconfig.json" + } + ] } diff --git a/packages/utils/styling/package.json b/packages/utils/styling/package.json index 2db3afb8b91..b087e47a16e 100644 --- a/packages/utils/styling/package.json +++ b/packages/utils/styling/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/utils/styling/tsconfig.json b/packages/utils/styling/tsconfig.json index 83975437e4d..ff8fae9384a 100644 --- a/packages/utils/styling/tsconfig.json +++ b/packages/utils/styling/tsconfig.json @@ -2,7 +2,14 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../../scripts/tsconfig.json" + } + ] } diff --git a/packages/utils/test-tools/package.json b/packages/utils/test-tools/package.json index f30551f2d86..424dda8fd18 100644 --- a/packages/utils/test-tools/package.json +++ b/packages/utils/test-tools/package.json @@ -23,7 +23,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/utils/test-tools/tsconfig.json b/packages/utils/test-tools/tsconfig.json index 83975437e4d..92920c06f6b 100644 --- a/packages/utils/test-tools/tsconfig.json +++ b/packages/utils/test-tools/tsconfig.json @@ -2,7 +2,17 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../theming/theme-types/tsconfig.json" + } + ] } diff --git a/packages/utils/tokens/package.json b/packages/utils/tokens/package.json index 48fe702bf82..79dfac529aa 100644 --- a/packages/utils/tokens/package.json +++ b/packages/utils/tokens/package.json @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", diff --git a/packages/utils/tokens/tsconfig.json b/packages/utils/tokens/tsconfig.json index 83975437e4d..e0d74fb031f 100644 --- a/packages/utils/tokens/tsconfig.json +++ b/packages/utils/tokens/tsconfig.json @@ -2,7 +2,20 @@ "extends": "@fluentui-react-native/scripts/tsconfig", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "composite": true, + "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../adapters/tsconfig.json" + }, + { + "path": "../../../scripts/tsconfig.json" + }, + { + "path": "../../theming/theme-types/tsconfig.json" + } + ] } diff --git a/scripts/package.json b/scripts/package.json index 7a4124b3cf8..2ec5468e695 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -27,7 +27,7 @@ "./tsconfig-strict": "./configs/tsconfig/tsconfig.strict.json" }, "scripts": { - "build": "tsgo", + "build": "tsgo -b", "bundlesize": "bundlesize --debug", "depcheck": "node ./src/cli.ts depcheck", "format": "node ./src/cli.ts format", @@ -73,7 +73,7 @@ "@rnx-kit/types-node": "catalog:", "@types/micromatch": "^4.0.9", "@types/node": "catalog:", - "@typescript/native-preview": "7.0.0-dev.20260113.1", + "@typescript/native-preview": "7.0.0-dev.20260610.1", "@yarnpkg/types": "^4.0.1", "chalk": "^4.0.0", "clipanion": "^4.0.0-rc.4", diff --git a/scripts/src/index.ts b/scripts/src/index.ts index d51482491f5..3ede9ae5c8c 100644 --- a/scripts/src/index.ts +++ b/scripts/src/index.ts @@ -1,5 +1,5 @@ export { isPnpmMode } from './utils/ispnpm.ts'; -export { constrain } from './tasks/constrain.ts'; +export { constrain, constrainRoot } from './tasks/constrain.ts'; export type { PackageManifest } from './pkgContext.ts'; export { PackageContext } from './pkgContext.ts'; export { repoContext, RepoContext } from './repoContext.ts'; diff --git a/scripts/src/repoContext.ts b/scripts/src/repoContext.ts index 574dac8e9ac..510acc04a71 100644 --- a/scripts/src/repoContext.ts +++ b/scripts/src/repoContext.ts @@ -1,5 +1,7 @@ import { getWorkspacesInfoSync } from '@rnx-kit/tools-workspaces'; import { execSync } from 'node:child_process'; +import path from 'node:path'; +import fs from 'node:fs'; /** * Get the cached repo context, which includes the root folder, workspace folders, and catalog. @@ -20,6 +22,7 @@ export class RepoContext { private _root?: string; private _workspaceFolders?: string[]; private _catalog?: Record; + private _files: Record = {}; /** * Get the root folder for the repo. This is the folder that contains the lockfile @@ -47,6 +50,24 @@ export class RepoContext { return this._catalog; } + hasFile(...parts: string[]): boolean { + let filePath = path.join(...parts); + if (!path.isAbsolute(filePath)) { + filePath = path.join(this.root, filePath); + } + return (this._files[filePath] ??= fs.existsSync(filePath)); + } + + pathTo(from: string, to: string): string { + if (!path.isAbsolute(from)) { + from = path.join(this.root, from); + } + if (!path.isAbsolute(to)) { + to = path.join(this.root, to); + } + return path.relative(from, to).replace(/\\/g, '/'); + } + /** * Check if a folder is a workspace */ diff --git a/scripts/src/tasks/constrain.ts b/scripts/src/tasks/constrain.ts index 37436cadb3a..f48cadee07d 100644 --- a/scripts/src/tasks/constrain.ts +++ b/scripts/src/tasks/constrain.ts @@ -1,23 +1,70 @@ import { PackageContext, type PackageManifest } from '../pkgContext.ts'; import { repoContext } from '../repoContext.ts'; import type { Yarn } from '@yarnpkg/types'; +import { referencesToPaths, pathsToReferences, areSetsEqual, type TsConfigJson, addSubBuildPaths } from '../utils/tsConfigs.ts'; +import type { JSONValidator } from '@rnx-kit/lint-json'; const repoCtx = repoContext(); +const targetTSConfigs = new Set(); + export function constrain(workspace: Yarn.Constraints.Workspace): void { const ctx = PackageContext.initYarn(workspace); if (workspace.cwd !== 'scripts') { ctx.enforce('rnx-kit.extends', '@fluentui-react-native/scripts/kit-config'); } if (ctx.manifest.scripts?.build) { - ctx.enforce('scripts.build', 'tsgo'); + ctx.enforce('scripts.build', 'tsgo -b'); } ctx.enforce('scripts.build-cjs', undefined); ctx.enforce('scripts.build-core', undefined); + const tsCtx = ctx.validateJSON('tsconfig.json'); + if (tsCtx) { + const depBuilds = new Set(); + for (const [_, dependency] of workspace.pkg.dependencies) { + if (dependency.workspace) { + const targetPath = `${dependency.workspace.cwd}/tsconfig.json`; + if (repoCtx.hasFile(targetPath)) { + depBuilds.add(repoCtx.pathTo(workspace.cwd, targetPath)); + } + } + } + addSubBuildPaths(ctx.root, depBuilds); + if (depBuilds.size > 0) { + ensureTSConfigReferences(tsCtx, depBuilds); + } else { + tsCtx.enforce('references', undefined); + } + targetTSConfigs.add(`${workspace.cwd}/tsconfig.json`); + if (tsCtx.raw.compilerOptions) { + tsCtx.enforce('compilerOptions.composite', true); + tsCtx.enforce('compilerOptions.tsBuildInfoFile', '.cache/tsconfig.tsbuildinfo'); + } + tsCtx.finish(); + } assertDeprecations(ctx); useCatalogs(ctx); } +export function constrainRoot(workspace: Yarn.Constraints.Workspace): void { + const ctx = PackageContext.initYarn(workspace); + ctx.enforce('private', true); + const rootTSConfig = ctx.validateJSON('tsconfig.json'); + if (!rootTSConfig) { + ctx.error('Root tsconfig.json is required to define project references for the workspaces'); + return; + } + ensureTSConfigReferences(rootTSConfig, targetTSConfigs); + rootTSConfig.finish(); +} + +function ensureTSConfigReferences(ctx: JSONValidator, expectedRefs: Set): void { + const existingSet = referencesToPaths(ctx.raw.references); + if (!areSetsEqual(existingSet, expectedRefs)) { + ctx.enforce('references', pathsToReferences(expectedRefs)); + } +} + function useCatalogs(ctx: PackageContext): void { const catalog = repoCtx.catalog; const deps: (keyof PackageManifest)[] = ['dependencies', 'devDependencies']; diff --git a/scripts/src/utils/tsConfigs.ts b/scripts/src/utils/tsConfigs.ts new file mode 100644 index 00000000000..57157791447 --- /dev/null +++ b/scripts/src/utils/tsConfigs.ts @@ -0,0 +1,62 @@ +import path from 'node:path'; +import fs from 'node:fs'; + +export type TsConfigJson = { + extends?: string | string[]; + compilerOptions?: Record; + include?: string[]; + exclude?: string[]; + files?: string[]; + references?: { path: string }[]; +}; + +/** + * Convert a tsconfig references array to a set of paths for easier manipulation + * and validation of includes/excludes in the context of package validation + */ +export function referencesToPaths(refs: TsConfigJson['references']): Set { + const paths = new Set(); + if (refs) { + for (const ref of refs) { + paths.add(ref.path); + } + } + return paths; +} + +/** + * Convert a set of paths into an array of tsconfig references for writing back to a tsconfig file after validation and manipulation + */ +export function pathsToReferences(paths: Iterable): TsConfigJson['references'] { + const refs: TsConfigJson['references'] = []; + for (const path of paths) { + refs.push({ path }); + } + return refs; +} + +export function areSetsEqual(a: Set, b: Set): boolean { + if (a.size !== b.size) { + return false; + } + for (const item of a) { + if (!b.has(item)) { + return false; + } + } + return true; +} + +const SUB_BUILD_PATH = 'targets'; + +export function addSubBuildPaths(cwd: string, targets: Set): void { + const subBuildPath = path.join(cwd, SUB_BUILD_PATH); + if (fs.existsSync(subBuildPath) && fs.statSync(subBuildPath).isDirectory()) { + const entries = fs.readdirSync(subBuildPath, { withFileTypes: true }); + for (const entry of entries) { + if (!entry.isDirectory() && entry.name.startsWith('tsconfig')) { + targets.add(`./${SUB_BUILD_PATH}/${entry.name}`); + } + } + } +} diff --git a/scripts/targets/tsconfig.check.json b/scripts/targets/tsconfig.check.json new file mode 100644 index 00000000000..4add80b804c --- /dev/null +++ b/scripts/targets/tsconfig.check.json @@ -0,0 +1,12 @@ +{ + "extends": "@rnx-kit/tsconfig/tsconfig.node.json", + "compilerOptions": { + "noEmit": true, + "allowSyntheticDefaultImports": true, + "target": "es2022", + "composite": true, + "tsBuildInfoFile": "../.cache/tsconfig.tsbuildinfo" + }, + "include": [".."], + "exclude": ["../lib"] +} diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json index 07998cf34bf..2403834dbce 100644 --- a/scripts/tsconfig.json +++ b/scripts/tsconfig.json @@ -1,10 +1,11 @@ { - "extends": "@rnx-kit/tsconfig/tsconfig.node.json", + "files": [], "compilerOptions": { - "noEmit": true, - "allowSyntheticDefaultImports": true, - "target": "es2022" + "composite": true }, - "include": ["."], - "exclude": ["./lib"] + "references": [ + { + "path": "./targets/tsconfig.check.json" + } + ] } diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000000..a31f8a5a5ee --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,242 @@ +{ + "files": [], + "references": [ + { + "path": "apps/E2E/tsconfig.json" + }, + { + "path": "apps/fluent-tester/tsconfig.json" + }, + { + "path": "apps/tester-core/tsconfig.json" + }, + { + "path": "apps/win32/tsconfig.json" + }, + { + "path": "apps/win32-81/tsconfig.json" + }, + { + "path": "packages/codemods/tsconfig.json" + }, + { + "path": "packages/components/Avatar/tsconfig.json" + }, + { + "path": "packages/components/Badge/tsconfig.json" + }, + { + "path": "packages/components/Button/tsconfig.json" + }, + { + "path": "packages/components/Callout/tsconfig.json" + }, + { + "path": "packages/components/Checkbox/tsconfig.json" + }, + { + "path": "packages/components/Chip/tsconfig.json" + }, + { + "path": "packages/components/ContextualMenu/tsconfig.json" + }, + { + "path": "packages/components/Divider/tsconfig.json" + }, + { + "path": "packages/components/FocusTrapZone/tsconfig.json" + }, + { + "path": "packages/components/FocusZone/tsconfig.json" + }, + { + "path": "packages/components/Icon/tsconfig.json" + }, + { + "path": "packages/components/Input/tsconfig.json" + }, + { + "path": "packages/components/Link/tsconfig.json" + }, + { + "path": "packages/components/Menu/tsconfig.json" + }, + { + "path": "packages/components/MenuButton/tsconfig.json" + }, + { + "path": "packages/components/Notification/tsconfig.json" + }, + { + "path": "packages/components/Persona/tsconfig.json" + }, + { + "path": "packages/components/PersonaCoin/tsconfig.json" + }, + { + "path": "packages/components/Pressable/tsconfig.json" + }, + { + "path": "packages/components/RadioGroup/tsconfig.json" + }, + { + "path": "packages/components/Separator/tsconfig.json" + }, + { + "path": "packages/components/Stack/tsconfig.json" + }, + { + "path": "packages/components/Switch/tsconfig.json" + }, + { + "path": "packages/components/TabList/tsconfig.json" + }, + { + "path": "packages/components/Text/tsconfig.json" + }, + { + "path": "packages/deprecated/foundation-composable/tsconfig.json" + }, + { + "path": "packages/deprecated/foundation-compose/tsconfig.json" + }, + { + "path": "packages/deprecated/foundation-settings/tsconfig.json" + }, + { + "path": "packages/deprecated/foundation-tokens/tsconfig.json" + }, + { + "path": "packages/deprecated/theme-registry/tsconfig.json" + }, + { + "path": "packages/deprecated/themed-settings/tsconfig.json" + }, + { + "path": "packages/deprecated/theming-ramp/tsconfig.json" + }, + { + "path": "packages/deprecated/theming-react-native/tsconfig.json" + }, + { + "path": "packages/experimental/ActivityIndicator/tsconfig.json" + }, + { + "path": "packages/experimental/AppearanceAdditions/tsconfig.json" + }, + { + "path": "packages/experimental/Avatar/tsconfig.json" + }, + { + "path": "packages/experimental/Checkbox/tsconfig.json" + }, + { + "path": "packages/experimental/Drawer/tsconfig.json" + }, + { + "path": "packages/experimental/Dropdown/tsconfig.json" + }, + { + "path": "packages/experimental/Expander/tsconfig.json" + }, + { + "path": "packages/experimental/MenuButton/tsconfig.json" + }, + { + "path": "packages/experimental/NativeDatePicker/tsconfig.json" + }, + { + "path": "packages/experimental/NativeFontMetrics/tsconfig.json" + }, + { + "path": "packages/experimental/Overflow/tsconfig.json" + }, + { + "path": "packages/experimental/Popover/tsconfig.json" + }, + { + "path": "packages/experimental/Shadow/tsconfig.json" + }, + { + "path": "packages/experimental/Shimmer/tsconfig.json" + }, + { + "path": "packages/experimental/Spinner/tsconfig.json" + }, + { + "path": "packages/experimental/Tooltip/tsconfig.json" + }, + { + "path": "packages/experimental/VibrancyView/tsconfig.json" + }, + { + "path": "packages/framework-base/tsconfig.json" + }, + { + "path": "packages/framework/composition/tsconfig.json" + }, + { + "path": "packages/framework/framework/tsconfig.json" + }, + { + "path": "packages/framework/theme/tsconfig.json" + }, + { + "path": "packages/framework/themed-stylesheet/tsconfig.json" + }, + { + "path": "packages/framework/use-slot/tsconfig.json" + }, + { + "path": "packages/framework/use-slots/tsconfig.json" + }, + { + "path": "packages/framework/use-styling/tsconfig.json" + }, + { + "path": "packages/framework/use-tokens/tsconfig.json" + }, + { + "path": "packages/libraries/core/tsconfig.json" + }, + { + "path": "packages/theming/android-theme/tsconfig.json" + }, + { + "path": "packages/theming/apple-theme/tsconfig.json" + }, + { + "path": "packages/theming/default-theme/tsconfig.json" + }, + { + "path": "packages/theming/theme-tokens/tsconfig.json" + }, + { + "path": "packages/theming/theme-types/tsconfig.json" + }, + { + "path": "packages/theming/theming-utils/tsconfig.json" + }, + { + "path": "packages/theming/win32-theme/tsconfig.json" + }, + { + "path": "packages/utils/adapters/tsconfig.json" + }, + { + "path": "packages/utils/interactive-hooks/tsconfig.json" + }, + { + "path": "packages/utils/styling/tsconfig.json" + }, + { + "path": "packages/utils/test-tools/tsconfig.json" + }, + { + "path": "packages/utils/tokens/tsconfig.json" + }, + { + "path": "scripts/tsconfig.json" + } + ] +} diff --git a/yarn.config.cjs b/yarn.config.cjs index 49633d9dfe5..31256df74a0 100644 --- a/yarn.config.cjs +++ b/yarn.config.cjs @@ -1,14 +1,20 @@ const { defineConfig } = require('@yarnpkg/types'); -const { constrain } = require('./scripts/src/index.ts'); +const { constrain, constrainRoot } = require('./scripts/src/index.ts'); module.exports = defineConfig({ constraints: async ({ Yarn }) => { + let rootWorkspace = null; for (const workspace of Yarn.workspaces()) { // skip the root workspace, as it should be be evaluated as a standard package if (workspace.cwd !== '.') { // call through to the scripts constrain implementation that will do validation of each workspace one by one constrain(workspace); + } else { + rootWorkspace = workspace; } } + if (rootWorkspace) { + constrainRoot(rootWorkspace); + } }, }); diff --git a/yarn.lock b/yarn.lock index 045b2ee7eb8..053fef381d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4853,6 +4853,7 @@ __metadata: "@changesets/cli": "npm:^2.30.0" "@rnx-kit/align-deps": "catalog:" "@rnx-kit/lint-lockfile": "catalog:" + "@typescript/native-preview": "npm:7.0.0-dev.20260610.1" "@yarnpkg/types": "npm:^4.0.1" babel-jest: "npm:^29.7.0" cross-env: "catalog:" @@ -4898,7 +4899,7 @@ __metadata: "@rnx-kit/types-node": "catalog:" "@types/micromatch": "npm:^4.0.9" "@types/node": "catalog:" - "@typescript/native-preview": "npm:7.0.0-dev.20260113.1" + "@typescript/native-preview": "npm:7.0.0-dev.20260610.1" "@yarnpkg/types": "npm:^4.0.1" babel-jest: "npm:^29.0.0" chalk: "npm:^4.0.0" @@ -10960,66 +10961,66 @@ __metadata: languageName: node linkType: hard -"@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20260113.1": - version: 7.0.0-dev.20260113.1 - resolution: "@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20260113.1" +"@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20260610.1": + version: 7.0.0-dev.20260610.1 + resolution: "@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20260610.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@typescript/native-preview-darwin-x64@npm:7.0.0-dev.20260113.1": - version: 7.0.0-dev.20260113.1 - resolution: "@typescript/native-preview-darwin-x64@npm:7.0.0-dev.20260113.1" +"@typescript/native-preview-darwin-x64@npm:7.0.0-dev.20260610.1": + version: 7.0.0-dev.20260610.1 + resolution: "@typescript/native-preview-darwin-x64@npm:7.0.0-dev.20260610.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@typescript/native-preview-linux-arm64@npm:7.0.0-dev.20260113.1": - version: 7.0.0-dev.20260113.1 - resolution: "@typescript/native-preview-linux-arm64@npm:7.0.0-dev.20260113.1" +"@typescript/native-preview-linux-arm64@npm:7.0.0-dev.20260610.1": + version: 7.0.0-dev.20260610.1 + resolution: "@typescript/native-preview-linux-arm64@npm:7.0.0-dev.20260610.1" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@typescript/native-preview-linux-arm@npm:7.0.0-dev.20260113.1": - version: 7.0.0-dev.20260113.1 - resolution: "@typescript/native-preview-linux-arm@npm:7.0.0-dev.20260113.1" +"@typescript/native-preview-linux-arm@npm:7.0.0-dev.20260610.1": + version: 7.0.0-dev.20260610.1 + resolution: "@typescript/native-preview-linux-arm@npm:7.0.0-dev.20260610.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@typescript/native-preview-linux-x64@npm:7.0.0-dev.20260113.1": - version: 7.0.0-dev.20260113.1 - resolution: "@typescript/native-preview-linux-x64@npm:7.0.0-dev.20260113.1" +"@typescript/native-preview-linux-x64@npm:7.0.0-dev.20260610.1": + version: 7.0.0-dev.20260610.1 + resolution: "@typescript/native-preview-linux-x64@npm:7.0.0-dev.20260610.1" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@typescript/native-preview-win32-arm64@npm:7.0.0-dev.20260113.1": - version: 7.0.0-dev.20260113.1 - resolution: "@typescript/native-preview-win32-arm64@npm:7.0.0-dev.20260113.1" +"@typescript/native-preview-win32-arm64@npm:7.0.0-dev.20260610.1": + version: 7.0.0-dev.20260610.1 + resolution: "@typescript/native-preview-win32-arm64@npm:7.0.0-dev.20260610.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@typescript/native-preview-win32-x64@npm:7.0.0-dev.20260113.1": - version: 7.0.0-dev.20260113.1 - resolution: "@typescript/native-preview-win32-x64@npm:7.0.0-dev.20260113.1" +"@typescript/native-preview-win32-x64@npm:7.0.0-dev.20260610.1": + version: 7.0.0-dev.20260610.1 + resolution: "@typescript/native-preview-win32-x64@npm:7.0.0-dev.20260610.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@typescript/native-preview@npm:7.0.0-dev.20260113.1": - version: 7.0.0-dev.20260113.1 - resolution: "@typescript/native-preview@npm:7.0.0-dev.20260113.1" +"@typescript/native-preview@npm:7.0.0-dev.20260610.1": + version: 7.0.0-dev.20260610.1 + resolution: "@typescript/native-preview@npm:7.0.0-dev.20260610.1" dependencies: - "@typescript/native-preview-darwin-arm64": "npm:7.0.0-dev.20260113.1" - "@typescript/native-preview-darwin-x64": "npm:7.0.0-dev.20260113.1" - "@typescript/native-preview-linux-arm": "npm:7.0.0-dev.20260113.1" - "@typescript/native-preview-linux-arm64": "npm:7.0.0-dev.20260113.1" - "@typescript/native-preview-linux-x64": "npm:7.0.0-dev.20260113.1" - "@typescript/native-preview-win32-arm64": "npm:7.0.0-dev.20260113.1" - "@typescript/native-preview-win32-x64": "npm:7.0.0-dev.20260113.1" + "@typescript/native-preview-darwin-arm64": "npm:7.0.0-dev.20260610.1" + "@typescript/native-preview-darwin-x64": "npm:7.0.0-dev.20260610.1" + "@typescript/native-preview-linux-arm": "npm:7.0.0-dev.20260610.1" + "@typescript/native-preview-linux-arm64": "npm:7.0.0-dev.20260610.1" + "@typescript/native-preview-linux-x64": "npm:7.0.0-dev.20260610.1" + "@typescript/native-preview-win32-arm64": "npm:7.0.0-dev.20260610.1" + "@typescript/native-preview-win32-x64": "npm:7.0.0-dev.20260610.1" dependenciesMeta: "@typescript/native-preview-darwin-arm64": optional: true @@ -11037,7 +11038,7 @@ __metadata: optional: true bin: tsgo: bin/tsgo.js - checksum: 10c0/96e224aabdf4775e3d6cd375de6fc5cb407ee4876498e8f4902246a5551162cb9a554743f765fc1b7ca75d8401ee51b1929cee60c5a36a5b6f04e9d1c75d6af9 + checksum: 10c0/27709e3caaa0bac4d4cd4609d295ce22ebf0ea63dca64d91f5e1d4555f4a9b3e5aa4aa1d8cf06dfb477e07107c111f55e1b1435d2bc1b2bb1b3927a666ff55c1 languageName: node linkType: hard From 01e56829cea67fb5bae331736c825a9a84e7f96c Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Wed, 10 Jun 2026 15:08:44 -0700 Subject: [PATCH 03/13] fix to scope tsconfig changes --- scripts/src/tasks/constrain.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/src/tasks/constrain.ts b/scripts/src/tasks/constrain.ts index f48cadee07d..bc5a6bf1bcb 100644 --- a/scripts/src/tasks/constrain.ts +++ b/scripts/src/tasks/constrain.ts @@ -36,7 +36,7 @@ export function constrain(workspace: Yarn.Constraints.Workspace): void { tsCtx.enforce('references', undefined); } targetTSConfigs.add(`${workspace.cwd}/tsconfig.json`); - if (tsCtx.raw.compilerOptions) { + if (!tsCtx.raw.files || tsCtx.raw.files.length > 0) { tsCtx.enforce('compilerOptions.composite', true); tsCtx.enforce('compilerOptions.tsBuildInfoFile', '.cache/tsconfig.tsbuildinfo'); } From ab7cad67b8256eec78651464c44e10cba679e4e2 Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Wed, 10 Jun 2026 22:53:33 -0700 Subject: [PATCH 04/13] fix some build issues --- ...-native-icons-npm-2.0.322-c4bc045837.patch | 12 + apps/fluent-tester/tsconfig.json | 3 - apps/tester-core/package.json | 2 +- scripts/src/preinstall/tool-versions.ts | 4 +- tsconfig.json | 3 - yarn.lock | 450 ++---------------- 6 files changed, 49 insertions(+), 425 deletions(-) create mode 100644 .yarn/patches/@fluentui-react-native-icons-npm-2.0.322-c4bc045837.patch diff --git a/.yarn/patches/@fluentui-react-native-icons-npm-2.0.322-c4bc045837.patch b/.yarn/patches/@fluentui-react-native-icons-npm-2.0.322-c4bc045837.patch new file mode 100644 index 00000000000..c8ed2442ac3 --- /dev/null +++ b/.yarn/patches/@fluentui-react-native-icons-npm-2.0.322-c4bc045837.patch @@ -0,0 +1,12 @@ +diff --git a/package.json b/package.json +index e3ae6f57a9e873a489a9f15bc16ec5e27131df02..30b6c1c1714372c533e096eb8fb12b8e1de7a1c0 100644 +--- a/package.json ++++ b/package.json +@@ -42,7 +42,6 @@ + "yargs": "^14.0.0" + }, + "dependencies": { +- "@types/react-native": "^0.68.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { diff --git a/apps/fluent-tester/tsconfig.json b/apps/fluent-tester/tsconfig.json index 1d8b9229f8b..04998cb3f25 100644 --- a/apps/fluent-tester/tsconfig.json +++ b/apps/fluent-tester/tsconfig.json @@ -22,9 +22,6 @@ { "path": "../../packages/experimental/Checkbox/tsconfig.json" }, - { - "path": "../../packages/experimental/Expander/tsconfig.json" - }, { "path": "../../packages/experimental/NativeDatePicker/tsconfig.json" }, diff --git a/apps/tester-core/package.json b/apps/tester-core/package.json index eda51f7c731..2c551561575 100644 --- a/apps/tester-core/package.json +++ b/apps/tester-core/package.json @@ -80,7 +80,7 @@ "@fluentui-react-native/vibrancy-view": "workspace:*", "@fluentui-react-native/win32-theme": "workspace:*", "@fluentui/react-native": "workspace:*", - "@fluentui/react-native-icons": "^2.0.316", + "@fluentui/react-native-icons": "patch:@fluentui/react-native-icons@npm%3A2.0.322#~/.yarn/patches/@fluentui-react-native-icons-npm-2.0.322-c4bc045837.patch", "@fortawesome/fontawesome-svg-core": "^6.2.0", "@fortawesome/free-solid-svg-icons": "^6.2.0", "@fortawesome/react-native-fontawesome": "^0.3.0", diff --git a/scripts/src/preinstall/tool-versions.ts b/scripts/src/preinstall/tool-versions.ts index c86fbd11cd0..3382c945723 100644 --- a/scripts/src/preinstall/tool-versions.ts +++ b/scripts/src/preinstall/tool-versions.ts @@ -33,7 +33,7 @@ const devToolVersions: Record = { '@types/es6-promise': '0.0.32', '@types/jest': '^29.0.0', '@types/node': '^22.0.0', - '@types/react-test-renderer': '16.9.0', + '@types/react-test-renderer': '^19.1.0', '@typescript-eslint/eslint-plugin': '^8.36.0', '@typescript-eslint/parser': '^8.36.0', '@uifabric/prettier-rules': '^7.0.3', @@ -49,7 +49,7 @@ const devToolVersions: Record = { 'metro-react-native-babel-transformer': '^0.76.5', oxlint: '^1.57.0', 'oxlint-tsgolint': '^0.17.4', - 'react-test-renderer': '18.2.0', + 'react-test-renderer': '^19.1.0', rimraf: '^5.0.1', // Fill versions from scripts first ...scriptManifest.devDependencies, diff --git a/tsconfig.json b/tsconfig.json index a31f8a5a5ee..82e7dc8b85e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,9 +13,6 @@ { "path": "apps/win32/tsconfig.json" }, - { - "path": "apps/win32-81/tsconfig.json" - }, { "path": "packages/codemods/tsconfig.json" }, diff --git a/yarn.lock b/yarn.lock index 20259d1a971..b0039f8f19c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -183,30 +183,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.0.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.20.0, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.9, @babel/core@npm:^7.25.2": - version: 7.28.6 - resolution: "@babel/core@npm:7.28.6" - dependencies: - "@babel/code-frame": "npm:^7.28.6" - "@babel/generator": "npm:^7.28.6" - "@babel/helper-compilation-targets": "npm:^7.28.6" - "@babel/helper-module-transforms": "npm:^7.28.6" - "@babel/helpers": "npm:^7.28.6" - "@babel/parser": "npm:^7.28.6" - "@babel/template": "npm:^7.28.6" - "@babel/traverse": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - "@jridgewell/remapping": "npm:^2.3.5" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/716b88b1ab057aa53ffa40f2b2fb7e4ab7a35cd6a065fa60e55ca13d2a666672592329f7ea9269aec17e90cc7ce29f42eda566d07859bfd998329a9f283faadb - languageName: node - linkType: hard - -"@babel/core@npm:^7.24.7": +"@babel/core@npm:^7.0.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.20.0, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.7, @babel/core@npm:^7.25.2": version: 7.29.0 resolution: "@babel/core@npm:7.29.0" dependencies: @@ -229,7 +206,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.20.0, @babel/generator@npm:^7.28.6, @babel/generator@npm:^7.29.0, @babel/generator@npm:^7.29.1, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.20.0, @babel/generator@npm:^7.29.0, @babel/generator@npm:^7.29.1, @babel/generator@npm:^7.7.2": version: 7.29.1 resolution: "@babel/generator@npm:7.29.1" dependencies: @@ -367,7 +344,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.28.6, @babel/helper-plugin-utils@npm:^7.8.0": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.28.6, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.28.6 resolution: "@babel/helper-plugin-utils@npm:7.28.6" checksum: 10c0/3f5f8acc152fdbb69a84b8624145ff4f9b9f6e776cb989f9f968f8606eb7185c5c3cfcf3ba08534e37e1e0e1c118ac67080610333f56baa4f7376c99b5f1143d @@ -424,7 +401,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.24.7, @babel/helper-validator-option@npm:^7.27.1": +"@babel/helper-validator-option@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-validator-option@npm:7.27.1" checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 @@ -452,18 +429,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.3, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": - version: 7.29.2 - resolution: "@babel/parser@npm:7.29.2" - dependencies: - "@babel/types": "npm:^7.29.0" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/e5a4e69e3ac7acdde995f37cf299a68458cfe7009dff66bd0962fd04920bef287201169006af365af479c08ff216bfefbb595e331f87f6ae7283858aebbc3317 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.24.7": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.3, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": version: 7.29.3 resolution: "@babel/parser@npm:7.29.3" dependencies: @@ -1104,7 +1070,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.20.0, @babel/plugin-transform-flow-strip-types@npm:^7.24.7, @babel/plugin-transform-flow-strip-types@npm:^7.25.2, @babel/plugin-transform-flow-strip-types@npm:^7.27.1": +"@babel/plugin-transform-flow-strip-types@npm:^7.20.0, @babel/plugin-transform-flow-strip-types@npm:^7.25.2, @babel/plugin-transform-flow-strip-types@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-flow-strip-types@npm:7.27.1" dependencies: @@ -1696,20 +1662,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-flow@npm:^7.13.13": - version: 7.24.7 - resolution: "@babel/preset-flow@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-validator-option": "npm:^7.24.7" - "@babel/plugin-transform-flow-strip-types": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2a99333b9aac17033cefe17fb9d8c41b20c4f2cd3eab34f56c20d7c1c528cc1cca7e6d909de92fc700739a505b43166c9de62423f8a30b484161ebdf9474e217 - languageName: node - linkType: hard - -"@babel/preset-flow@npm:^7.24.7": +"@babel/preset-flow@npm:^7.13.13, @babel/preset-flow@npm:^7.24.7": version: 7.27.1 resolution: "@babel/preset-flow@npm:7.27.1" dependencies: @@ -1766,22 +1719,7 @@ __metadata: languageName: node linkType: hard -"@babel/register@npm:^7.13.16": - version: 7.24.6 - resolution: "@babel/register@npm:7.24.6" - dependencies: - clone-deep: "npm:^4.0.1" - find-cache-dir: "npm:^2.0.0" - make-dir: "npm:^2.1.0" - pirates: "npm:^4.0.6" - source-map-support: "npm:^0.5.16" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e0c6d6c8945dd792f83dc7bd6be468246b3aedd62b32620e56a3f3328389b577a6261d4338a9de9519f4eadddfef5aa0fdc1f92082c778dedddcc5854e357f09 - languageName: node - linkType: hard - -"@babel/register@npm:^7.24.6": +"@babel/register@npm:^7.13.16, @babel/register@npm:^7.24.6": version: 7.29.3 resolution: "@babel/register@npm:7.29.3" dependencies: @@ -2137,17 +2075,7 @@ __metadata: languageName: node linkType: hard -"@emnapi/core@npm:^1.7.1": - version: 1.8.1 - resolution: "@emnapi/core@npm:1.8.1" - dependencies: - "@emnapi/wasi-threads": "npm:1.1.0" - tslib: "npm:^2.4.0" - checksum: 10c0/2c242f4b49779bac403e1cbcc98edacdb1c8ad36562408ba9a20663824669e930bc8493be46a2522d9dc946b8d96cd7073970bae914928c7671b5221c85b432e - languageName: node - linkType: hard - -"@emnapi/runtime@npm:1.10.0": +"@emnapi/runtime@npm:1.10.0, @emnapi/runtime@npm:^1.7.0": version: 1.10.0 resolution: "@emnapi/runtime@npm:1.10.0" dependencies: @@ -2156,24 +2084,6 @@ __metadata: languageName: node linkType: hard -"@emnapi/runtime@npm:^1.7.0, @emnapi/runtime@npm:^1.7.1": - version: 1.8.1 - resolution: "@emnapi/runtime@npm:1.8.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/f4929d75e37aafb24da77d2f58816761fe3f826aad2e37fa6d4421dac9060cbd5098eea1ac3c9ecc4526b89deb58153852fa432f87021dc57863f2ff726d713f - languageName: node - linkType: hard - -"@emnapi/wasi-threads@npm:1.1.0": - version: 1.1.0 - resolution: "@emnapi/wasi-threads@npm:1.1.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/e6d54bf2b1e64cdd83d2916411e44e579b6ae35d5def0dea61a3c452d9921373044dff32a8b8473ae60c80692bdc39323e98b96a3f3d87ba6886b24dd0ef7ca1 - languageName: node - linkType: hard - "@emnapi/wasi-threads@npm:1.2.1": version: 1.2.1 resolution: "@emnapi/wasi-threads@npm:1.2.1" @@ -5128,7 +5038,7 @@ __metadata: "@fluentui-react-native/vibrancy-view": "workspace:*" "@fluentui-react-native/win32-theme": "workspace:*" "@fluentui/react-native": "workspace:*" - "@fluentui/react-native-icons": "npm:^2.0.316" + "@fluentui/react-native-icons": "patch:@fluentui/react-native-icons@npm%3A2.0.322#~/.yarn/patches/@fluentui-react-native-icons-npm-2.0.322-c4bc045837.patch" "@fortawesome/fontawesome-svg-core": "npm:^6.2.0" "@fortawesome/free-solid-svg-icons": "npm:^6.2.0" "@fortawesome/react-native-fontawesome": "npm:^0.3.0" @@ -5771,7 +5681,7 @@ __metadata: languageName: unknown linkType: soft -"@fluentui/react-native-icons@npm:^2.0.316": +"@fluentui/react-native-icons@npm:2.0.322": version: 2.0.322 resolution: "@fluentui/react-native-icons@npm:2.0.322" dependencies: @@ -5784,6 +5694,19 @@ __metadata: languageName: node linkType: hard +"@fluentui/react-native-icons@patch:@fluentui/react-native-icons@npm%3A2.0.322#~/.yarn/patches/@fluentui-react-native-icons-npm-2.0.322-c4bc045837.patch": + version: 2.0.322 + resolution: "@fluentui/react-native-icons@patch:@fluentui/react-native-icons@npm%3A2.0.322#~/.yarn/patches/@fluentui-react-native-icons-npm-2.0.322-c4bc045837.patch::version=2.0.322&hash=9af6a5" + dependencies: + "@types/react-native": "npm:^0.68.0" + tslib: "npm:^2.1.0" + peerDependencies: + react: ">=16.8.0 <19.0.0" + react-native-svg: ">=12.5.0" + checksum: 10c0/cd94112941565f5b41723b83957191b8aed4f1d0207babcf113d4dd98069539557d31cabab3d18b57403f789af70dbf774da26c48947a9fbec6e151f814d13fd + languageName: node + linkType: hard + "@fluentui/react-native@workspace:*, @fluentui/react-native@workspace:packages/libraries/core": version: 0.0.0-use.local resolution: "@fluentui/react-native@workspace:packages/libraries/core" @@ -6903,18 +6826,7 @@ __metadata: languageName: node linkType: hard -"@napi-rs/wasm-runtime@npm:^1.1.1": - version: 1.1.1 - resolution: "@napi-rs/wasm-runtime@npm:1.1.1" - dependencies: - "@emnapi/core": "npm:^1.7.1" - "@emnapi/runtime": "npm:^1.7.1" - "@tybys/wasm-util": "npm:^0.10.1" - checksum: 10c0/04d57b67e80736e41fe44674a011878db0a8ad893f4d44abb9d3608debb7c174224cba2796ed5b0c1d367368159f3ca6be45f1c59222f70e32ddc880f803d447 - languageName: node - linkType: hard - -"@napi-rs/wasm-runtime@npm:^1.1.4": +"@napi-rs/wasm-runtime@npm:^1.1.1, @napi-rs/wasm-runtime@npm:^1.1.4": version: 1.1.4 resolution: "@napi-rs/wasm-runtime@npm:1.1.4" dependencies: @@ -7254,13 +7166,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-android-arm-eabi@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-android-arm-eabi@npm:11.17.0" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@oxc-resolver/binding-android-arm-eabi@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-android-arm-eabi@npm:11.19.1" @@ -7268,13 +7173,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-android-arm64@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-android-arm64@npm:11.17.0" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@oxc-resolver/binding-android-arm64@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-android-arm64@npm:11.19.1" @@ -7282,13 +7180,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-darwin-arm64@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-darwin-arm64@npm:11.17.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@oxc-resolver/binding-darwin-arm64@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-darwin-arm64@npm:11.19.1" @@ -7296,13 +7187,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-darwin-x64@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-darwin-x64@npm:11.17.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@oxc-resolver/binding-darwin-x64@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-darwin-x64@npm:11.19.1" @@ -7310,13 +7194,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-freebsd-x64@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-freebsd-x64@npm:11.17.0" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@oxc-resolver/binding-freebsd-x64@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-freebsd-x64@npm:11.19.1" @@ -7324,13 +7201,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-linux-arm-gnueabihf@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-linux-arm-gnueabihf@npm:11.17.0" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@oxc-resolver/binding-linux-arm-gnueabihf@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-linux-arm-gnueabihf@npm:11.19.1" @@ -7338,13 +7208,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-linux-arm-musleabihf@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-linux-arm-musleabihf@npm:11.17.0" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@oxc-resolver/binding-linux-arm-musleabihf@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-linux-arm-musleabihf@npm:11.19.1" @@ -7352,13 +7215,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-linux-arm64-gnu@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-linux-arm64-gnu@npm:11.17.0" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - "@oxc-resolver/binding-linux-arm64-gnu@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-linux-arm64-gnu@npm:11.19.1" @@ -7366,13 +7222,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-linux-arm64-musl@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-linux-arm64-musl@npm:11.17.0" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - "@oxc-resolver/binding-linux-arm64-musl@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-linux-arm64-musl@npm:11.19.1" @@ -7380,13 +7229,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-linux-ppc64-gnu@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-linux-ppc64-gnu@npm:11.17.0" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - "@oxc-resolver/binding-linux-ppc64-gnu@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-linux-ppc64-gnu@npm:11.19.1" @@ -7394,13 +7236,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-linux-riscv64-gnu@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-linux-riscv64-gnu@npm:11.17.0" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - "@oxc-resolver/binding-linux-riscv64-gnu@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-linux-riscv64-gnu@npm:11.19.1" @@ -7408,13 +7243,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-linux-riscv64-musl@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-linux-riscv64-musl@npm:11.17.0" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - "@oxc-resolver/binding-linux-riscv64-musl@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-linux-riscv64-musl@npm:11.19.1" @@ -7422,13 +7250,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-linux-s390x-gnu@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-linux-s390x-gnu@npm:11.17.0" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - "@oxc-resolver/binding-linux-s390x-gnu@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-linux-s390x-gnu@npm:11.19.1" @@ -7436,13 +7257,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-linux-x64-gnu@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-linux-x64-gnu@npm:11.17.0" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - "@oxc-resolver/binding-linux-x64-gnu@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-linux-x64-gnu@npm:11.19.1" @@ -7450,13 +7264,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-linux-x64-musl@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-linux-x64-musl@npm:11.17.0" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - "@oxc-resolver/binding-linux-x64-musl@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-linux-x64-musl@npm:11.19.1" @@ -7464,13 +7271,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-openharmony-arm64@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-openharmony-arm64@npm:11.17.0" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - "@oxc-resolver/binding-openharmony-arm64@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-openharmony-arm64@npm:11.19.1" @@ -7478,15 +7278,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-wasm32-wasi@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-wasm32-wasi@npm:11.17.0" - dependencies: - "@napi-rs/wasm-runtime": "npm:^1.1.1" - conditions: cpu=wasm32 - languageName: node - linkType: hard - "@oxc-resolver/binding-wasm32-wasi@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-wasm32-wasi@npm:11.19.1" @@ -7496,13 +7287,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-win32-arm64-msvc@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-win32-arm64-msvc@npm:11.17.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@oxc-resolver/binding-win32-arm64-msvc@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-win32-arm64-msvc@npm:11.19.1" @@ -7510,13 +7294,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-win32-ia32-msvc@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-win32-ia32-msvc@npm:11.17.0" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@oxc-resolver/binding-win32-ia32-msvc@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-win32-ia32-msvc@npm:11.19.1" @@ -7524,13 +7301,6 @@ __metadata: languageName: node linkType: hard -"@oxc-resolver/binding-win32-x64-msvc@npm:11.17.0": - version: 11.17.0 - resolution: "@oxc-resolver/binding-win32-x64-msvc@npm:11.17.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@oxc-resolver/binding-win32-x64-msvc@npm:11.19.1": version: 11.19.1 resolution: "@oxc-resolver/binding-win32-x64-msvc@npm:11.19.1" @@ -8795,19 +8565,7 @@ __metadata: languageName: node linkType: hard -"@rnx-kit/align-deps@npm:^3.4.7": - version: 3.4.8 - resolution: "@rnx-kit/align-deps@npm:3.4.8" - dependencies: - "@rnx-kit/types-kit-config": "npm:^1.0.0" - "@rnx-kit/types-node": "npm:^1.0.0" - bin: - rnx-align-deps: lib/index.js - checksum: 10c0/cbc8f6d28472a1a0b7342f156c81c94c91ced24ec47a815a34eb4f59d00cac12a2cd7dc64ea698af369a0091a60101498f2f1b9d6e626f000b87060ccd81ae4b - languageName: node - linkType: hard - -"@rnx-kit/align-deps@npm:^3.5.0": +"@rnx-kit/align-deps@npm:^3.4.7, @rnx-kit/align-deps@npm:^3.5.0": version: 3.5.0 resolution: "@rnx-kit/align-deps@npm:3.5.0" dependencies: @@ -14673,15 +14431,6 @@ __metadata: languageName: node linkType: hard -"fast-xml-builder@npm:^1.1.4": - version: 1.1.4 - resolution: "fast-xml-builder@npm:1.1.4" - dependencies: - path-expression-matcher: "npm:^1.1.3" - checksum: 10c0/d5dfc0660f7f886b9f42747e6aa1d5e16c090c804b322652f65a5d7ffb93aa00153c3e1276cd053629f9f4c4f625131dc6886677394f7048e827e63b97b18927 - languageName: node - linkType: hard - "fast-xml-builder@npm:^1.2.0": version: 1.2.0 resolution: "fast-xml-builder@npm:1.2.0" @@ -14703,20 +14452,7 @@ __metadata: languageName: node linkType: hard -"fast-xml-parser@npm:^5.3.3": - version: 5.5.9 - resolution: "fast-xml-parser@npm:5.5.9" - dependencies: - fast-xml-builder: "npm:^1.1.4" - path-expression-matcher: "npm:^1.2.0" - strnum: "npm:^2.2.2" - bin: - fxparser: src/cli/cli.js - checksum: 10c0/b7f40f586c01a916a75be15b11ec0e83a38483885395bdeca51da8992a75e3d4d9b6c2690f362b975bfcb5118909ee4b0393e18ec9c9151345d5e13152370969 - languageName: node - linkType: hard - -"fast-xml-parser@npm:^5.7.0": +"fast-xml-parser@npm:^5.3.3, fast-xml-parser@npm:^5.7.0": version: 5.8.0 resolution: "fast-xml-parser@npm:5.8.0" dependencies: @@ -15271,7 +15007,7 @@ __metadata: languageName: node linkType: hard -"get-tsconfig@npm:4.14.0": +"get-tsconfig@npm:4.14.0, get-tsconfig@npm:^4.7.0, get-tsconfig@npm:^4.7.5": version: 4.14.0 resolution: "get-tsconfig@npm:4.14.0" dependencies: @@ -15280,15 +15016,6 @@ __metadata: languageName: node linkType: hard -"get-tsconfig@npm:^4.7.0, get-tsconfig@npm:^4.7.5": - version: 4.10.1 - resolution: "get-tsconfig@npm:4.10.1" - dependencies: - resolve-pkg-maps: "npm:^1.0.0" - checksum: 10c0/7f8e3dabc6a49b747920a800fb88e1952fef871cdf51b79e98db48275a5de6cdaf499c55ee67df5fa6fe7ce65f0063e26de0f2e53049b408c585aa74d39ffa21 - languageName: node - linkType: hard - "get-uri@npm:^6.0.1": version: 6.0.3 resolution: "get-uri@npm:6.0.3" @@ -17163,16 +16890,7 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^2.6.1": - version: 2.6.1 - resolution: "jiti@npm:2.6.1" - bin: - jiti: lib/jiti-cli.mjs - checksum: 10c0/79b2e96a8e623f66c1b703b98ec1b8be4500e1d217e09b09e343471bbb9c105381b83edbb979d01cef18318cc45ce6e153571b6c83122170eefa531c64b6789b - languageName: node - linkType: hard - -"jiti@npm:^2.7.0": +"jiti@npm:^2.6.1, jiti@npm:^2.7.0": version: 2.7.0 resolution: "jiti@npm:2.7.0" bin: @@ -19559,76 +19277,7 @@ __metadata: languageName: node linkType: hard -"oxc-resolver@npm:^11.17.0": - version: 11.17.0 - resolution: "oxc-resolver@npm:11.17.0" - dependencies: - "@oxc-resolver/binding-android-arm-eabi": "npm:11.17.0" - "@oxc-resolver/binding-android-arm64": "npm:11.17.0" - "@oxc-resolver/binding-darwin-arm64": "npm:11.17.0" - "@oxc-resolver/binding-darwin-x64": "npm:11.17.0" - "@oxc-resolver/binding-freebsd-x64": "npm:11.17.0" - "@oxc-resolver/binding-linux-arm-gnueabihf": "npm:11.17.0" - "@oxc-resolver/binding-linux-arm-musleabihf": "npm:11.17.0" - "@oxc-resolver/binding-linux-arm64-gnu": "npm:11.17.0" - "@oxc-resolver/binding-linux-arm64-musl": "npm:11.17.0" - "@oxc-resolver/binding-linux-ppc64-gnu": "npm:11.17.0" - "@oxc-resolver/binding-linux-riscv64-gnu": "npm:11.17.0" - "@oxc-resolver/binding-linux-riscv64-musl": "npm:11.17.0" - "@oxc-resolver/binding-linux-s390x-gnu": "npm:11.17.0" - "@oxc-resolver/binding-linux-x64-gnu": "npm:11.17.0" - "@oxc-resolver/binding-linux-x64-musl": "npm:11.17.0" - "@oxc-resolver/binding-openharmony-arm64": "npm:11.17.0" - "@oxc-resolver/binding-wasm32-wasi": "npm:11.17.0" - "@oxc-resolver/binding-win32-arm64-msvc": "npm:11.17.0" - "@oxc-resolver/binding-win32-ia32-msvc": "npm:11.17.0" - "@oxc-resolver/binding-win32-x64-msvc": "npm:11.17.0" - dependenciesMeta: - "@oxc-resolver/binding-android-arm-eabi": - optional: true - "@oxc-resolver/binding-android-arm64": - optional: true - "@oxc-resolver/binding-darwin-arm64": - optional: true - "@oxc-resolver/binding-darwin-x64": - optional: true - "@oxc-resolver/binding-freebsd-x64": - optional: true - "@oxc-resolver/binding-linux-arm-gnueabihf": - optional: true - "@oxc-resolver/binding-linux-arm-musleabihf": - optional: true - "@oxc-resolver/binding-linux-arm64-gnu": - optional: true - "@oxc-resolver/binding-linux-arm64-musl": - optional: true - "@oxc-resolver/binding-linux-ppc64-gnu": - optional: true - "@oxc-resolver/binding-linux-riscv64-gnu": - optional: true - "@oxc-resolver/binding-linux-riscv64-musl": - optional: true - "@oxc-resolver/binding-linux-s390x-gnu": - optional: true - "@oxc-resolver/binding-linux-x64-gnu": - optional: true - "@oxc-resolver/binding-linux-x64-musl": - optional: true - "@oxc-resolver/binding-openharmony-arm64": - optional: true - "@oxc-resolver/binding-wasm32-wasi": - optional: true - "@oxc-resolver/binding-win32-arm64-msvc": - optional: true - "@oxc-resolver/binding-win32-ia32-msvc": - optional: true - "@oxc-resolver/binding-win32-x64-msvc": - optional: true - checksum: 10c0/22c7a183dcc89c752dce5c4bf4b9fbd5e63f72b79286831e6b386cf30e9de3c3f5f5cc012a4441f7e584b61574c63f980530bf43b28718d5f347c505978ccf90 - languageName: node - linkType: hard - -"oxc-resolver@npm:^11.19.1": +"oxc-resolver@npm:^11.17.0, oxc-resolver@npm:^11.19.1": version: 11.19.1 resolution: "oxc-resolver@npm:11.19.1" dependencies: @@ -20217,13 +19866,6 @@ __metadata: languageName: node linkType: hard -"path-expression-matcher@npm:^1.1.3, path-expression-matcher@npm:^1.2.0": - version: 1.2.0 - resolution: "path-expression-matcher@npm:1.2.0" - checksum: 10c0/86c661dfb265ed5dd1ddd9188f0dfbecf4ec4dc3ea6cabab081d3a2ba285054d9767a641a233bd6fd694fd89f7d0ef94913032feddf5365252700b02db4bf4e1 - languageName: node - linkType: hard - "path-expression-matcher@npm:^1.5.0": version: 1.5.0 resolution: "path-expression-matcher@npm:1.5.0" @@ -20344,14 +19986,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 - languageName: node - linkType: hard - -"picomatch@npm:^4.0.4": +"picomatch@npm:^4.0.2, picomatch@npm:^4.0.4": version: 4.0.4 resolution: "picomatch@npm:4.0.4" checksum: 10c0/e2c6023372cc7b5764719a5ffb9da0f8e781212fa7ca4bd0562db929df8e117460f00dff3cb7509dacfc06b86de924b247f504d0ce1806a37fac4633081466b0 @@ -22679,13 +22314,6 @@ __metadata: languageName: node linkType: hard -"strnum@npm:^2.2.2": - version: 2.2.2 - resolution: "strnum@npm:2.2.2" - checksum: 10c0/89c456de32b9495ae34cd6e3b59cb9ef3406b66d1429bbc931afd70be87485dcd355200c42fd638a132adb3121762542346813098ab0c43e44aac303bf17965d - languageName: node - linkType: hard - "strnum@npm:^2.3.0": version: 2.3.0 resolution: "strnum@npm:2.3.0" @@ -22924,17 +22552,7 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15": - version: 0.2.15 - resolution: "tinyglobby@npm:0.2.15" - dependencies: - fdir: "npm:^6.5.0" - picomatch: "npm:^4.0.3" - checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.16": +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15, tinyglobby@npm:^0.2.16": version: 0.2.16 resolution: "tinyglobby@npm:0.2.16" dependencies: @@ -24108,7 +23726,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:2.8.2, yaml@npm:^2.2.1, yaml@npm:^2.6.1": +"yaml@npm:2.8.2": version: 2.8.2 resolution: "yaml@npm:2.8.2" bin: @@ -24124,7 +23742,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.8.2": +"yaml@npm:^2.2.1, yaml@npm:^2.6.1, yaml@npm:^2.8.2": version: 2.8.4 resolution: "yaml@npm:2.8.4" bin: From b3d8a27976199e3f2abd10497dcdb70a20f719fb Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Wed, 10 Jun 2026 23:42:33 -0700 Subject: [PATCH 05/13] add ignore plugin to fix dependencies --- .yarn/plugins/@rnx-kit/yarn-plugin-ignore.cjs | 153 ++++++++++++++++++ .yarnrc.yml | 13 +- 2 files changed, 161 insertions(+), 5 deletions(-) create mode 100644 .yarn/plugins/@rnx-kit/yarn-plugin-ignore.cjs diff --git a/.yarn/plugins/@rnx-kit/yarn-plugin-ignore.cjs b/.yarn/plugins/@rnx-kit/yarn-plugin-ignore.cjs new file mode 100644 index 00000000000..0c752c44eda --- /dev/null +++ b/.yarn/plugins/@rnx-kit/yarn-plugin-ignore.cjs @@ -0,0 +1,153 @@ +/* eslint-disable */ +//prettier-ignore +module.exports = { +name: "@rnx-kit/yarn-plugin-ignore", +factory: function (require) { +"use strict"; +var plugin = (() => { + var __create = Object.create; + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __getProtoOf = Object.getPrototypeOf; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { + get: (a, b) => (typeof require !== "undefined" ? require : a)[b] + }) : x)(function(x) { + if (typeof require !== "undefined") return require.apply(this, arguments); + throw Error('Dynamic require of "' + x + '" is not supported'); + }); + var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; + }; + var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod + )); + var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + + // src/index.ts + var index_exports = {}; + __export(index_exports, { + IgnoreFetcher: () => IgnoreFetcher, + IgnoreResolver: () => IgnoreResolver, + default: () => index_default + }); + + // src/IgnoreFetcher.ts + var import_fslib = __require("@yarnpkg/fslib"); + var fs = __toESM(__require("fs"), 1); + + // src/constants.ts + var IGNORE_PROTOCOL = "ignore:"; + var STUB_MODULE = `module.exports = {}; +`; + var STUB_PACKAGE = `{ + "name": "@rnx-kit/yarn-plugin-ignore/stub", + "version": "0.0.0", + "description": "Stub package for '@rnx-kit/yarn-plugin-ignore'", + "main": "index.js" +} +`; + + // src/IgnoreFetcher.ts + var IgnoreFetcher = class { + supports(locator) { + return locator.reference.startsWith(IGNORE_PROTOCOL); + } + getLocalPath() { + return null; + } + async fetch(_locator, opts) { + const base = opts.project.cwd; + const sourceFs = new import_fslib.CwdFS(base); + const localPath = import_fslib.ppath.resolve( + base, + "node_modules", + ".generated", + "@rnx-kit", + "yarn-plugin-ignore-stub" + ); + const nativePath = import_fslib.npath.fromPortablePath(localPath); + if (!fs.existsSync(nativePath)) { + fs.mkdirSync(nativePath, { recursive: true, mode: 493 }); + fs.writeFileSync(import_fslib.npath.join(nativePath, "package.json"), STUB_PACKAGE); + fs.writeFileSync(import_fslib.npath.join(nativePath, "index.js"), STUB_MODULE); + } + return { + packageFs: new import_fslib.CwdFS(localPath, { baseFs: sourceFs }), + prefixPath: import_fslib.PortablePath.dot, + discardFromLookup: true, + localPath + }; + } + }; + + // src/IgnoreResolver.ts + var import_core = __require("@yarnpkg/core"); + var import_node_assert = __require("assert"); + var IgnoreResolver = class { + supportsDescriptor(descriptor) { + return descriptor.range.startsWith(IGNORE_PROTOCOL); + } + supportsLocator(locator) { + return locator.reference.startsWith(IGNORE_PROTOCOL); + } + shouldPersistResolution() { + return false; + } + bindDescriptor(descriptor, _fromLocator) { + return descriptor; + } + getResolutionDependencies() { + return {}; + } + async getCandidates(descriptor, _dependencies, _opts) { + return [import_core.structUtils.makeLocator(descriptor, IGNORE_PROTOCOL)]; + } + async getSatisfying(_descriptor, _dependencies, locators, _opts) { + (0, import_node_assert.equal)(locators.length, 1, "Expected a single locator candidate"); + return { locators, sorted: true }; + } + async resolve(locator, opts) { + const manifest = new import_core.Manifest(); + return { + ...locator, + version: "0.0.0", + languageName: opts.project.configuration.get("defaultLanguageName"), + linkType: import_core.LinkType.SOFT, + conditions: null, + dependencies: manifest.dependencies, + peerDependencies: manifest.peerDependencies, + dependenciesMeta: manifest.dependenciesMeta, + peerDependenciesMeta: manifest.peerDependenciesMeta, + bin: manifest.bin + }; + } + }; + + // src/index.ts + var plugin = { + fetchers: [IgnoreFetcher], + resolvers: [IgnoreResolver] + }; + var index_default = plugin; + return __toCommonJS(index_exports); +})(); +return plugin; +} +}; +//# sourceMappingURL=yarn-plugin-ignore.cjs.map diff --git a/.yarnrc.yml b/.yarnrc.yml index fe6da470220..9213df21c83 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -19,17 +19,17 @@ catalog: "@rnx-kit/lint-package": ^0.1.0 "@rnx-kit/metro-config": ^2.2.4 "@rnx-kit/metro-resolver-symlinks": ^0.2.11 - "@rnx-kit/metro-serializer": "^2.0.3" - "@rnx-kit/metro-serializer-esbuild": "^0.3.2" + "@rnx-kit/metro-serializer": ^2.0.3 + "@rnx-kit/metro-serializer-esbuild": ^0.3.2 "@rnx-kit/oxlint-config": ^1.0.3 "@rnx-kit/reporter": ^0.1.0 "@rnx-kit/tools-packages": ^0.1.3 "@rnx-kit/tools-react-native": ^2.3.7 - "@rnx-kit/tools-workspaces": ^0.2.3 "@rnx-kit/tools-typescript": ^0.1.3 + "@rnx-kit/tools-workspaces": ^0.2.3 "@rnx-kit/tsconfig": ^3.0.3 - "@rnx-kit/types-kit-config": "^1.0.0" - "@rnx-kit/types-node": "^1.0.0" + "@rnx-kit/types-kit-config": ^1.0.0 + "@rnx-kit/types-node": ^1.0.0 "@types/jasmine": 5.1.13 "@types/node": ^22.19.7 "@wdio/appium-service": ^9.24.0 @@ -313,5 +313,8 @@ plugins: - checksum: 672e525b81762c6162366bd3ffec5e86ab8fac2655ef0267047e86a0f32e79a4bde0f170bc30479663f40aa3f006d91f8dc3289f679dd4dc5ae5a5d12ba3ad0b path: .yarn/plugins/@rnx-kit/yarn-plugin-dynamic-extensions.cjs spec: "https://raw.githubusercontent.com/microsoft/rnx-kit/main/incubator/yarn-plugin-dynamic-extensions/index.js" + - checksum: 8d8252c376e41a67ca509b2778f3fb92164aa91828459ae8a6aa0e13f1b6f9843586d0983ba9a200f6d813d37efc171474c8dbc85b0dff01df56c0d476c238ce + path: .yarn/plugins/@rnx-kit/yarn-plugin-ignore.cjs + spec: "https://raw.githubusercontent.com/microsoft/rnx-kit/main/incubator/yarn-plugin-ignore/dist/yarn-plugin-ignore.cjs" yarnPath: .yarn/releases/yarn-4.13.0.cjs From 2e0a31540c22a2cc09a982ce00fd45e1fb826ac5 Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Thu, 11 Jun 2026 08:43:34 -0700 Subject: [PATCH 06/13] align versions and fix parallel build issues --- .../assets/MoreHorizontalFilled.svg.d.ts | 4 ++ .../assets/accessible-icon-brands.svg.d.ts | 4 ++ apps/tester-core/assets/dismissIcon.svg.d.ts | 4 ++ apps/tester-core/assets/filledIcon.svg.d.ts | 4 ++ apps/tester-core/assets/outlineIcon.svg.d.ts | 4 ++ apps/tester-core/assets/play_button.svg.d.ts | 4 ++ apps/tester-core/assets/test.svg.d.ts | 4 ++ .../src/@types/RNTester/index.d.ts | 5 -- package.json | 4 +- yarn.lock | 59 ++----------------- 10 files changed, 37 insertions(+), 59 deletions(-) create mode 100644 apps/tester-core/assets/MoreHorizontalFilled.svg.d.ts create mode 100644 apps/tester-core/assets/accessible-icon-brands.svg.d.ts create mode 100644 apps/tester-core/assets/dismissIcon.svg.d.ts create mode 100644 apps/tester-core/assets/filledIcon.svg.d.ts create mode 100644 apps/tester-core/assets/outlineIcon.svg.d.ts create mode 100644 apps/tester-core/assets/play_button.svg.d.ts create mode 100644 apps/tester-core/assets/test.svg.d.ts delete mode 100644 apps/tester-core/src/@types/RNTester/index.d.ts diff --git a/apps/tester-core/assets/MoreHorizontalFilled.svg.d.ts b/apps/tester-core/assets/MoreHorizontalFilled.svg.d.ts new file mode 100644 index 00000000000..344b23de548 --- /dev/null +++ b/apps/tester-core/assets/MoreHorizontalFilled.svg.d.ts @@ -0,0 +1,4 @@ +import type * as React from 'react'; +import type { SvgProps } from 'react-native-svg'; +declare const content: React.FC; +export default content; diff --git a/apps/tester-core/assets/accessible-icon-brands.svg.d.ts b/apps/tester-core/assets/accessible-icon-brands.svg.d.ts new file mode 100644 index 00000000000..344b23de548 --- /dev/null +++ b/apps/tester-core/assets/accessible-icon-brands.svg.d.ts @@ -0,0 +1,4 @@ +import type * as React from 'react'; +import type { SvgProps } from 'react-native-svg'; +declare const content: React.FC; +export default content; diff --git a/apps/tester-core/assets/dismissIcon.svg.d.ts b/apps/tester-core/assets/dismissIcon.svg.d.ts new file mode 100644 index 00000000000..344b23de548 --- /dev/null +++ b/apps/tester-core/assets/dismissIcon.svg.d.ts @@ -0,0 +1,4 @@ +import type * as React from 'react'; +import type { SvgProps } from 'react-native-svg'; +declare const content: React.FC; +export default content; diff --git a/apps/tester-core/assets/filledIcon.svg.d.ts b/apps/tester-core/assets/filledIcon.svg.d.ts new file mode 100644 index 00000000000..344b23de548 --- /dev/null +++ b/apps/tester-core/assets/filledIcon.svg.d.ts @@ -0,0 +1,4 @@ +import type * as React from 'react'; +import type { SvgProps } from 'react-native-svg'; +declare const content: React.FC; +export default content; diff --git a/apps/tester-core/assets/outlineIcon.svg.d.ts b/apps/tester-core/assets/outlineIcon.svg.d.ts new file mode 100644 index 00000000000..344b23de548 --- /dev/null +++ b/apps/tester-core/assets/outlineIcon.svg.d.ts @@ -0,0 +1,4 @@ +import type * as React from 'react'; +import type { SvgProps } from 'react-native-svg'; +declare const content: React.FC; +export default content; diff --git a/apps/tester-core/assets/play_button.svg.d.ts b/apps/tester-core/assets/play_button.svg.d.ts new file mode 100644 index 00000000000..344b23de548 --- /dev/null +++ b/apps/tester-core/assets/play_button.svg.d.ts @@ -0,0 +1,4 @@ +import type * as React from 'react'; +import type { SvgProps } from 'react-native-svg'; +declare const content: React.FC; +export default content; diff --git a/apps/tester-core/assets/test.svg.d.ts b/apps/tester-core/assets/test.svg.d.ts new file mode 100644 index 00000000000..344b23de548 --- /dev/null +++ b/apps/tester-core/assets/test.svg.d.ts @@ -0,0 +1,4 @@ +import type * as React from 'react'; +import type { SvgProps } from 'react-native-svg'; +declare const content: React.FC; +export default content; diff --git a/apps/tester-core/src/@types/RNTester/index.d.ts b/apps/tester-core/src/@types/RNTester/index.d.ts deleted file mode 100644 index 6a0b0b83775..00000000000 --- a/apps/tester-core/src/@types/RNTester/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '*.svg' { - import type { SvgProps } from 'react-native-svg'; - const content: React.FC; - export default content; -} diff --git a/package.json b/package.json index 1bea2ea9f96..a13b2017b62 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "scripts" ], "scripts": { - "build": "tsgo -b", + "build": "tsgo -b --singleThreaded", "clean-all": "node ./scripts/src/preinstall/clean-all.ts", "docs": "yarn workspace fluent-rn-website start", "bundle:repo": "lage bundle", @@ -57,6 +57,8 @@ "zx": "^8.2.4" }, "resolutions": { + "@fluentui/react-native-icons/@types/react-native": "ignore:", + "@types/react": "19.1.17", "axios": "^1.13.5", "expect-webdriverio": "patch:expect-webdriverio@npm%3A5.6.1#~/.yarn/patches/expect-webdriverio-npm-5.6.1-69666d39e9.patch", "unicorn-magic": "^0.4.0" diff --git a/yarn.lock b/yarn.lock index b0039f8f19c..f59a92752f2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9583,21 +9583,11 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*": - version: 15.7.5 - resolution: "@types/prop-types@npm:15.7.5" - checksum: 10c0/648aae41423821c61c83823ae36116c8d0f68258f8b609bdbc257752dcd616438d6343d554262aa9a7edaee5a19aca2e028a74fa2d0f40fffaf2816bc7056857 - languageName: node - linkType: hard - -"@types/react-native@npm:^0.68.0": - version: 0.68.14 - resolution: "@types/react-native@npm:0.68.14" - dependencies: - "@types/react": "npm:^17" - checksum: 10c0/1e2aede16d0d8b945349b918fb913e922f0c503e590cefd4f9948f9905d031209ffa96f09f8bba988bd6ae755759743a69063e762c0c79fe884003a8de89b8b8 +"@types/react-native@ignore:": + version: 0.0.0-use.local + resolution: "@types/react-native@ignore:" languageName: node - linkType: hard + linkType: soft "@types/react-test-renderer@npm:^19.1.0": version: 19.1.0 @@ -9608,37 +9598,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*": - version: 19.2.14 - resolution: "@types/react@npm:19.2.14" - dependencies: - csstype: "npm:^3.2.2" - checksum: 10c0/7d25bf41b57719452d86d2ac0570b659210402707313a36ee612666bf11275a1c69824f8c3ee1fdca077ccfe15452f6da8f1224529b917050eb2d861e52b59b7 - languageName: node - linkType: hard - -"@types/react@npm:^17": - version: 17.0.91 - resolution: "@types/react@npm:17.0.91" - dependencies: - "@types/prop-types": "npm:*" - "@types/scheduler": "npm:^0.16" - csstype: "npm:^3.2.2" - checksum: 10c0/f1a5f77dbe6d62c04bfa2692d1204fd537e5fb15461a10673fa116a4b211f8ebaf426a4b1b95da04d38cea47dfc77c4d403f0850db7d9853298248a54478cc60 - languageName: node - linkType: hard - -"@types/react@npm:~18.2.0": - version: 18.2.79 - resolution: "@types/react@npm:18.2.79" - dependencies: - "@types/prop-types": "npm:*" - csstype: "npm:^3.0.2" - checksum: 10c0/c8a8a005d8830a48cc1ef93c3510c4935a2a03e5557dbecaa8f1038450cbfcb18eb206fa7fba7077d54b8da21faeb25577e897a333392770a7797f625b62c78a - languageName: node - linkType: hard - -"@types/react@npm:~19.1.4": +"@types/react@npm:19.1.17": version: 19.1.17 resolution: "@types/react@npm:19.1.17" dependencies: @@ -9647,13 +9607,6 @@ __metadata: languageName: node linkType: hard -"@types/scheduler@npm:^0.16": - version: 0.16.8 - resolution: "@types/scheduler@npm:0.16.8" - checksum: 10c0/f86de504945b8fc41b1f391f847444d542e2e4067cf7e5d9bfeb5d2d2393d3203b1161bc0ef3b1e104d828dabfb60baf06e8d2c27e27ff7e8258e6e618d8c4ec - languageName: node - linkType: hard - "@types/sinonjs__fake-timers@npm:^8.1.5": version: 8.1.5 resolution: "@types/sinonjs__fake-timers@npm:8.1.5" @@ -12933,7 +12886,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.2.2": +"csstype@npm:^3.0.2": version: 3.2.3 resolution: "csstype@npm:3.2.3" checksum: 10c0/cd29c51e70fa822f1cecd8641a1445bed7063697469d35633b516e60fe8c1bde04b08f6c5b6022136bb669b64c63d4173af54864510fbb4ee23281801841a3ce From 34e6561c285e0f9c03fee6f0059cd934417209c0 Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Thu, 11 Jun 2026 09:33:32 -0700 Subject: [PATCH 07/13] defork types in adapters to avoid multiple versions of react-native types in include tree --- package.json | 2 +- .../Overflow/src/Overflow/Overflow.types.ts | 4 +- packages/utils/adapters/package.json | 3 +- .../adapters/src/__drift__/driftHelpers.ts | 23 ++ .../adapters/src/__drift__/macos.drift.ts | 26 ++ .../src/__drift__/tsconfig.macos.json | 10 + .../src/__drift__/tsconfig.win32.json | 10 + .../src/__drift__/tsconfig.windows.json | 10 + .../adapters/src/__drift__/win32.drift.ts | 19 ++ .../adapters/src/__drift__/windows.drift.ts | 19 ++ packages/utils/adapters/src/filters.macos.ts | 2 +- packages/utils/adapters/src/filters.win32.ts | 2 +- .../utils/adapters/src/filters.windows.ts | 2 +- packages/utils/adapters/src/imageProps.ts | 20 +- packages/utils/adapters/src/index.ts | 3 + packages/utils/adapters/src/platformProps.ts | 294 ++++++++++++++++++ packages/utils/adapters/src/textProps.ts | 20 +- packages/utils/adapters/src/viewProps.ts | 47 ++- packages/utils/adapters/tsconfig.json | 1 + 19 files changed, 456 insertions(+), 61 deletions(-) create mode 100644 packages/utils/adapters/src/__drift__/driftHelpers.ts create mode 100644 packages/utils/adapters/src/__drift__/macos.drift.ts create mode 100644 packages/utils/adapters/src/__drift__/tsconfig.macos.json create mode 100644 packages/utils/adapters/src/__drift__/tsconfig.win32.json create mode 100644 packages/utils/adapters/src/__drift__/tsconfig.windows.json create mode 100644 packages/utils/adapters/src/__drift__/win32.drift.ts create mode 100644 packages/utils/adapters/src/__drift__/windows.drift.ts create mode 100644 packages/utils/adapters/src/platformProps.ts diff --git a/package.json b/package.json index a13b2017b62..be5a86fe3e7 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "scripts" ], "scripts": { - "build": "tsgo -b --singleThreaded", + "build": "tsgo -b", "clean-all": "node ./scripts/src/preinstall/clean-all.ts", "docs": "yarn workspace fluent-rn-website start", "bundle:repo": "lage bundle", diff --git a/packages/experimental/Overflow/src/Overflow/Overflow.types.ts b/packages/experimental/Overflow/src/Overflow/Overflow.types.ts index 412bb7ccfbf..849004dd54c 100644 --- a/packages/experimental/Overflow/src/Overflow/Overflow.types.ts +++ b/packages/experimental/Overflow/src/Overflow/Overflow.types.ts @@ -1,6 +1,4 @@ -import type { View, ViewProps, ViewStyle } from 'react-native'; - -import type { LayoutRectangle } from '@office-iss/react-native-win32'; +import type { View, ViewProps, ViewStyle, LayoutRectangle } from 'react-native'; import type { OverflowItemEntry, OverflowUpdatePayload } from '../overflowManager.types'; diff --git a/packages/utils/adapters/package.json b/packages/utils/adapters/package.json index fb5da0a5632..77ec5d2e3ee 100644 --- a/packages/utils/adapters/package.json +++ b/packages/utils/adapters/package.json @@ -27,7 +27,8 @@ "depcheck": "fluentui-scripts depcheck", "format": "fluentui-scripts format", "lint": "fluentui-scripts lint", - "test": "fluentui-scripts jest", + "test": "fluentui-scripts jest && yarn verify-drift", + "verify-drift": "tsgo --noEmit -p src/__drift__/tsconfig.win32.json && tsgo --noEmit -p src/__drift__/tsconfig.windows.json && tsgo --noEmit -p src/__drift__/tsconfig.macos.json", "update-snapshots": "fluentui-scripts jest -u" }, "devDependencies": { diff --git a/packages/utils/adapters/src/__drift__/driftHelpers.ts b/packages/utils/adapters/src/__drift__/driftHelpers.ts new file mode 100644 index 00000000000..5907d3c849a --- /dev/null +++ b/packages/utils/adapters/src/__drift__/driftHelpers.ts @@ -0,0 +1,23 @@ +/** + * Type-level helpers for the drift tests. These files are excluded from the package's normal build + * (see `../../tsconfig.json` "exclude") and are checked in isolation, one fork at a time, by the + * per-fork tsconfigs in this directory. They exist solely to fail compilation if the platform-neutral + * redeclarations in `../platformProps.ts` fall out of alignment with the real React Native fork types. + */ + +/** + * Keys present on the fork type but missing from our local redeclaration — i.e. props a fork has + * added that we no longer cover. This is the critical direction: an uncovered prop would be silently + * dropped by the prop filters. Checked strictly (no allowance). + */ +export type MissingKeys = Exclude; + +/** + * Keys present on our local redeclaration but not on the fork type. `Allowed` excludes the canonical + * `react-native` base props (the forks sometimes lag behind core RN) and any props the filter masks + * intentionally inject because the fork's *types* omit a prop that exists at runtime. + */ +export type ExtraKeys = Exclude; + +/** Compiles only when `T` is `never`; otherwise the offending keys appear in the error message. */ +export type AssertNoKeyDrift = T; diff --git a/packages/utils/adapters/src/__drift__/macos.drift.ts b/packages/utils/adapters/src/__drift__/macos.drift.ts new file mode 100644 index 00000000000..66f896e443f --- /dev/null +++ b/packages/utils/adapters/src/__drift__/macos.drift.ts @@ -0,0 +1,26 @@ +/** + * Drift test for `react-native-macos`. Checked in isolation by `tsconfig.macos.json`. + * Fails to compile if `ViewPropsMacOS`/`TextPropsMacOS`/`ImagePropsMacOS` in `../platformProps.ts` + * no longer cover the same fork-specific prop keys. `ExtraKeys` allows the canonical `react-native` + * base props, plus the props the macOS filter masks intentionally inject because the fork's *types* + * omit them even though they exist at runtime (`onPreferredScrollerStyleDidChange` on View; + * `enableFocusRing`/`tooltip` on Text — see the comments in `../filters.macos.ts`). + */ +import type RN from 'react-native'; +import type { ViewProps, TextProps, ImageProps } from 'react-native-macos'; +import type { ViewPropsMacOS, TextPropsMacOS, ImagePropsMacOS } from '../platformProps'; +import type { AssertNoKeyDrift, MissingKeys, ExtraKeys } from './driftHelpers'; + +// Props the macOS View mask passes that react-native-macos omits from its *types* (injected at runtime). +type MacOSViewInjected = 'onPreferredScrollerStyleDidChange' | 'passthroughAllKeyEvents' | 'tooltip' | 'validKeysDown' | 'validKeysUp'; +// Props the macOS Text mask passes that react-native-macos omits from its *types* (injected at runtime). +type MacOSTextInjected = 'enableFocusRing' | 'focusable' | 'onMouseEnter' | 'onMouseLeave' | 'tooltip'; + +export type _viewMissing = AssertNoKeyDrift>; +export type _viewExtra = AssertNoKeyDrift>; + +export type _textMissing = AssertNoKeyDrift>; +export type _textExtra = AssertNoKeyDrift>; + +export type _imageMissing = AssertNoKeyDrift>; +export type _imageExtra = AssertNoKeyDrift>; diff --git a/packages/utils/adapters/src/__drift__/tsconfig.macos.json b/packages/utils/adapters/src/__drift__/tsconfig.macos.json new file mode 100644 index 00000000000..5e975c76af8 --- /dev/null +++ b/packages/utils/adapters/src/__drift__/tsconfig.macos.json @@ -0,0 +1,10 @@ +{ + "extends": "@fluentui-react-native/scripts/tsconfig", + "compilerOptions": { + "noEmit": true, + "composite": false, + "rootDir": "../..", + "types": ["node"] + }, + "include": ["macos.drift.ts"] +} diff --git a/packages/utils/adapters/src/__drift__/tsconfig.win32.json b/packages/utils/adapters/src/__drift__/tsconfig.win32.json new file mode 100644 index 00000000000..9afff4455a7 --- /dev/null +++ b/packages/utils/adapters/src/__drift__/tsconfig.win32.json @@ -0,0 +1,10 @@ +{ + "extends": "@fluentui-react-native/scripts/tsconfig", + "compilerOptions": { + "noEmit": true, + "composite": false, + "rootDir": "../..", + "types": ["node"] + }, + "include": ["win32.drift.ts"] +} diff --git a/packages/utils/adapters/src/__drift__/tsconfig.windows.json b/packages/utils/adapters/src/__drift__/tsconfig.windows.json new file mode 100644 index 00000000000..c1eeac03920 --- /dev/null +++ b/packages/utils/adapters/src/__drift__/tsconfig.windows.json @@ -0,0 +1,10 @@ +{ + "extends": "@fluentui-react-native/scripts/tsconfig", + "compilerOptions": { + "noEmit": true, + "composite": false, + "rootDir": "../..", + "types": ["node"] + }, + "include": ["windows.drift.ts"] +} diff --git a/packages/utils/adapters/src/__drift__/win32.drift.ts b/packages/utils/adapters/src/__drift__/win32.drift.ts new file mode 100644 index 00000000000..81dc2043155 --- /dev/null +++ b/packages/utils/adapters/src/__drift__/win32.drift.ts @@ -0,0 +1,19 @@ +/** + * Drift test for `@office-iss/react-native-win32`. Checked in isolation by `tsconfig.win32.json`. + * Fails to compile if `ViewPropsWin32`/`TextPropsWin32`/`ImagePropsWin32` in `../platformProps.ts` + * no longer cover the same fork-specific prop keys. `ExtraKeys` allows the canonical `react-native` + * base props since the fork can lag behind core RN. + */ +import type RN from 'react-native'; +import type { ViewProps, TextProps, ImageProps } from '@office-iss/react-native-win32'; +import type { ViewPropsWin32, TextPropsWin32, ImagePropsWin32 } from '../platformProps'; +import type { AssertNoKeyDrift, MissingKeys, ExtraKeys } from './driftHelpers'; + +export type _viewMissing = AssertNoKeyDrift>; +export type _viewExtra = AssertNoKeyDrift>; + +export type _textMissing = AssertNoKeyDrift>; +export type _textExtra = AssertNoKeyDrift>; + +export type _imageMissing = AssertNoKeyDrift>; +export type _imageExtra = AssertNoKeyDrift>; diff --git a/packages/utils/adapters/src/__drift__/windows.drift.ts b/packages/utils/adapters/src/__drift__/windows.drift.ts new file mode 100644 index 00000000000..e97f9d4481a --- /dev/null +++ b/packages/utils/adapters/src/__drift__/windows.drift.ts @@ -0,0 +1,19 @@ +/** + * Drift test for `react-native-windows`. Checked in isolation by `tsconfig.windows.json`. + * Fails to compile if `ViewPropsWindows`/`TextPropsWindows`/`ImagePropsWindows` in + * `../platformProps.ts` no longer cover the same fork-specific prop keys. `ExtraKeys` allows the + * canonical `react-native` base props since the fork can lag behind core RN. + */ +import type RN from 'react-native'; +import type { ViewProps, TextProps, ImageProps } from 'react-native-windows'; +import type { ViewPropsWindows, TextPropsWindows, ImagePropsWindows } from '../platformProps'; +import type { AssertNoKeyDrift, MissingKeys, ExtraKeys } from './driftHelpers'; + +export type _viewMissing = AssertNoKeyDrift>; +export type _viewExtra = AssertNoKeyDrift>; + +export type _textMissing = AssertNoKeyDrift>; +export type _textExtra = AssertNoKeyDrift>; + +export type _imageMissing = AssertNoKeyDrift>; +export type _imageExtra = AssertNoKeyDrift>; diff --git a/packages/utils/adapters/src/filters.macos.ts b/packages/utils/adapters/src/filters.macos.ts index cf480f42658..e40c877bb5a 100644 --- a/packages/utils/adapters/src/filters.macos.ts +++ b/packages/utils/adapters/src/filters.macos.ts @@ -1,4 +1,4 @@ -import type { ImageProps, TextProps, ViewProps } from 'react-native-macos'; +import type { ImagePropsMacOS as ImageProps, TextPropsMacOS as TextProps, ViewPropsMacOS as ViewProps } from './platformProps'; import type { IFilterMask } from './filter.types'; import { getRnVersion, getImageMaskBase, getTextMaskBase, getViewMaskBase } from './filters.base'; diff --git a/packages/utils/adapters/src/filters.win32.ts b/packages/utils/adapters/src/filters.win32.ts index b1945880bd0..db29e85b3f0 100644 --- a/packages/utils/adapters/src/filters.win32.ts +++ b/packages/utils/adapters/src/filters.win32.ts @@ -1,4 +1,4 @@ -import type { ImageProps, TextProps, ViewProps } from '@office-iss/react-native-win32'; +import type { ImagePropsWin32 as ImageProps, TextPropsWin32 as TextProps, ViewPropsWin32 as ViewProps } from './platformProps'; import type { IFilterMask } from './filter.types'; import { getViewMaskBase, getImageMaskBase, getTextMaskBase } from './filters.base'; diff --git a/packages/utils/adapters/src/filters.windows.ts b/packages/utils/adapters/src/filters.windows.ts index 6d16b71d6b7..6f8d85eeaf2 100644 --- a/packages/utils/adapters/src/filters.windows.ts +++ b/packages/utils/adapters/src/filters.windows.ts @@ -1,4 +1,4 @@ -import type { ImageProps, TextProps, ViewProps } from 'react-native-windows'; +import type { ImagePropsWindows as ImageProps, TextPropsWindows as TextProps, ViewPropsWindows as ViewProps } from './platformProps'; import type { IFilterMask } from './filter.types'; import { getViewMaskBase, getImageMaskBase, getTextMaskBase, getRnVersion } from './filters.base'; diff --git a/packages/utils/adapters/src/imageProps.ts b/packages/utils/adapters/src/imageProps.ts index 7d2770872fa..e1fc0fae590 100644 --- a/packages/utils/adapters/src/imageProps.ts +++ b/packages/utils/adapters/src/imageProps.ts @@ -1,23 +1,17 @@ import type { ImageProps, ImageStyle, StyleProp } from 'react-native'; -import type { ImageProps as ImagePropsWindows, ImageStyle as ImageStyleWindows } from 'react-native-windows'; -import type { ImageProps as ImagePropsMacOS, ImageStyle as ImageStyleMacOS } from 'react-native-macos'; -import type { ImageProps as ImagePropsWin32, ImageStyle as ImageStyleWin32 } from '@office-iss/react-native-win32'; +import type { ImageAdditions, CursorValue } from './platformProps'; /** - * Build up the styles type by combining the base ImageStyle with platform specific extensions, - * omitting any overlapping keys to prevent conflicts. + * Build up the styles type by combining the base ImageStyle with the cross-platform extensions + * the React Native forks add (currently just `cursor`). */ -type ImageStyleWithMacOS = ImageStyle & Omit; -type ImageStyleWithWindows = ImageStyleWithMacOS & Omit; -export type IImageStyle = ImageStyleWithWindows & Omit; +export type IImageStyle = ImageStyle & { cursor?: CursorValue }; /** - * Build up the props type by combining the base ImageProps with platform specific extensions, + * Build up the props type by combining the base ImageProps with the platform-neutral fork additions, * omitting any overlapping keys to prevent conflicts and adding in the resolved style type */ -type ImagePropsWithMacOS = Omit & Omit; -type ImagePropsWithWindows = ImagePropsWithMacOS & Omit; -export type IImageProps = ImagePropsWithWindows & - Omit & { +export type IImageProps = Omit & + Omit & { style?: StyleProp; }; diff --git a/packages/utils/adapters/src/index.ts b/packages/utils/adapters/src/index.ts index f319fdcecc6..a1ed788f4c4 100644 --- a/packages/utils/adapters/src/index.ts +++ b/packages/utils/adapters/src/index.ts @@ -2,3 +2,6 @@ export { filterImageProps, filterTextProps, filterViewProps } from './filterProp export type { ITextProps, ITextStyle } from './textProps'; export type { IImageProps, IImageStyle } from './imageProps'; export type { IViewProps, IViewStyle, NativeKeyEvent, KeyEventHandler, HandledKeyEvent } from './viewProps'; +// Re-exported so the cross-platform prop/style types above remain nameable in consumers' +// generated declaration files (the `Omit<*Additions, ...>` they use references these). +export type { ViewAdditions, TextAdditions, ImageAdditions, CursorValue, AccessibilityAnnotationInfo } from './platformProps'; diff --git a/packages/utils/adapters/src/platformProps.ts b/packages/utils/adapters/src/platformProps.ts new file mode 100644 index 00000000000..860c06058c3 --- /dev/null +++ b/packages/utils/adapters/src/platformProps.ts @@ -0,0 +1,294 @@ +import type RN from 'react-native'; +import type { NativeSyntheticEvent } from 'react-native'; + +/** + * Platform-neutral redeclarations of the prop/style extensions that the React Native forks + * (`react-native-windows`, `react-native-macos`, `@office-iss/react-native-win32`) add on top of + * the base `react-native` types. + * + * These are intentionally declared here WITHOUT importing the fork packages so that nothing + * reachable from the package entrypoint pulls multiple react-native forks into a single program + * (which causes non-deterministic type "confusion" in the unified build). The fork packages are + * referenced only from the isolated drift tests under `src/__drift__`, which fail to compile if + * these redeclarations fall out of alignment with the real fork types. + * + * The per-platform `*Additions` interfaces below mirror exactly the keys each platform's filter mask + * adds on top of the base mask, so `RN.Props & Additions` reproduces the + * fork's prop key set. Event payloads are unified across platforms (a superset) rather than + * redeclared per-fork; only the prop KEYS need to match the forks. + */ + +// --- Shared event payloads (superset across platforms) ------------------------------------------- + +export interface INativeKeyboardEvent { + altKey: boolean; + ctrlKey: boolean; + metaKey: boolean; + shiftKey: boolean; + key: string; + code?: string; +} + +export type IKeyboardEvent = NativeSyntheticEvent; +export type IKeyboardEventHandler = (args: IKeyboardEvent) => void; + +/** + * A key descriptor accepted by `keyDownEvents`/`keyUpEvents`. Superset of the macOS `HandledKeyEvent` + * plus the Windows/Win32 `code`/`eventPhase` fields. + */ +export interface HandledKeyEvent { + altKey?: boolean; + ctrlKey?: boolean; + metaKey?: boolean; + shiftKey?: boolean; + key: string; + code?: string; + // 0 = None, 1 = Capturing, 2 = AtTarget, 3 = Bubbling (react-native-windows EventPhase) + eventPhase?: 0 | 1 | 2 | 3; +} + +export type NativeKeyEvent = NativeSyntheticEvent; +export type KeyEventHandler = (event: NativeKeyEvent) => void; + +export type IMouseEvent = NativeSyntheticEvent; +export type IMouseEventHandler = (args: IMouseEvent) => void; + +export type IFocusEvent = NativeSyntheticEvent; +export type IFocusEventHandler = (ev: IFocusEvent) => void; + +export type IDragEvent = NativeSyntheticEvent; +export type IDragEventHandler = (args: IDragEvent) => void; + +export type AccessibilityAnnotationInfo = Readonly<{ + typeID: string; + typeName?: string; + author?: string; + dateTime?: string; + target?: string; + replyCount?: number; +}>; + +export type CursorValue = 'auto' | 'pointer'; + +export type DraggedType = 'fileUrl' | 'image' | 'string'; +export type DraggedTypesType = DraggedType | DraggedType[]; + +export type TextWin32TextStyle = + | 'None' + | 'SmallStandard' + | 'SmallSecondary' + | 'MediumStandard' + | 'MediumSecondary' + | 'MediumApp' + | 'MediumBold' + | 'MediumBoldApp' + | 'LargeStandard' + | 'LargePlusStandard' + | 'ExtraLargeStandard' + | 'HugeStandard'; + +// --- Win32 (@office-iss/react-native-win32) additions -------------------------------------------- + +export interface ViewAdditionsWin32 { + accessibilityAccessKey?: string; + accessibilityAnnotation?: AccessibilityAnnotationInfo; + accessibilityControls?: string; + accessibilityDescribedBy?: string; + accessibilityDescription?: string; + accessibilityItemType?: string; + accessibilityLevel?: number; + accessibilityPositionInSet?: number; + accessibilitySetSize?: number; + animationClass?: string; + cursor?: CursorValue; + enableFocusRing?: boolean; + keyDownEvents?: HandledKeyEvent[]; + keyUpEvents?: HandledKeyEvent[]; + onBlurCapture?: IFocusEventHandler; + onFocusCapture?: IFocusEventHandler; + onKeyDown?: IKeyboardEventHandler; + onKeyDownCapture?: IKeyboardEventHandler; + onKeyUp?: IKeyboardEventHandler; + onKeyUpCapture?: IKeyboardEventHandler; + onMouseEnter?: IMouseEventHandler; + onMouseLeave?: IMouseEventHandler; + tooltip?: string; + 'aria-controls'?: string; + 'aria-describedby'?: string; + 'aria-description'?: string; + 'aria-level'?: number; + 'aria-multiselectable'?: boolean; + 'aria-posinset'?: number; + 'aria-required'?: boolean; + 'aria-setsize'?: number; +} + +export interface TextAdditionsWin32 { + accessibilityAccessKey?: string; + accessibilityAnnotation?: AccessibilityAnnotationInfo; + accessibilityControls?: string; + accessibilityDescribedBy?: string; + accessibilityDescription?: string; + accessibilityItemType?: string; + accessibilityLevel?: number; + accessibilityPositionInSet?: number; + accessibilitySetSize?: number; + focusable?: boolean; + keyDownEvents?: HandledKeyEvent[]; + keyUpEvents?: HandledKeyEvent[]; + onBlur?: IFocusEventHandler; + onBlurCapture?: IFocusEventHandler; + onFocus?: IFocusEventHandler; + onFocusCapture?: IFocusEventHandler; + onKeyDown?: IKeyboardEventHandler; + onKeyDownCapture?: IKeyboardEventHandler; + onKeyUp?: IKeyboardEventHandler; + onKeyUpCapture?: IKeyboardEventHandler; + textStyle?: TextWin32TextStyle; + tooltip?: string; + 'aria-controls'?: string; + 'aria-describedby'?: string; + 'aria-description'?: string; + 'aria-level'?: number; + 'aria-multiselectable'?: boolean; + 'aria-posinset'?: number; + 'aria-required'?: boolean; + 'aria-setsize'?: number; +} + +export interface ImageAdditionsWin32 { + accessibilityAccessKey?: string; + accessibilityAnnotation?: AccessibilityAnnotationInfo; + accessibilityControls?: string; + accessibilityDescribedBy?: string; + accessibilityDescription?: string; + accessibilityItemType?: string; + accessibilityLevel?: number; + accessibilityPositionInSet?: number; + accessibilitySetSize?: number; + 'aria-controls'?: string; + 'aria-describedby'?: string; + 'aria-description'?: string; + 'aria-level'?: number; + 'aria-multiselectable'?: boolean; + 'aria-posinset'?: number; + 'aria-required'?: boolean; + 'aria-setsize'?: number; +} + +// --- Windows (react-native-windows) additions ---------------------------------------------------- + +export interface ViewAdditionsWindows { + accessibilityAccessKey?: string; + accessibilityAnnotation?: AccessibilityAnnotationInfo; + accessibilityDescription?: string; + accessibilityItemType?: string; + accessibilityLevel?: number; + accessibilityPosInSet?: number; + accessibilitySetSize?: number; + enableFocusRing?: boolean; + keyDownEvents?: HandledKeyEvent[]; + keyUpEvents?: HandledKeyEvent[]; + onKeyDown?: IKeyboardEventHandler; + onKeyDownCapture?: IKeyboardEventHandler; + onKeyUp?: IKeyboardEventHandler; + onKeyUpCapture?: IKeyboardEventHandler; + onMouseEnter?: IMouseEventHandler; + onMouseLeave?: IMouseEventHandler; + tooltip?: string; + 'aria-description'?: string; + 'aria-level'?: number; + 'aria-posinset'?: number; + 'aria-setsize'?: number; +} + +export interface TextAdditionsWindows { + accessibilityAccessKey?: string; + accessibilityAnnotation?: AccessibilityAnnotationInfo; + accessibilityDescription?: string; + accessibilityItemType?: string; + accessibilityLevel?: number; + accessibilityPosInSet?: number; + accessibilitySetSize?: number; + disabled?: boolean; + textBreakStrategy?: 'simple' | 'highQuality' | 'balanced'; + tooltip?: string; + 'aria-description'?: string; + 'aria-level'?: number; + 'aria-posinset'?: number; + 'aria-setsize'?: number; +} + +export interface ImageAdditionsWindows { + accessibilityAccessKey?: string; + accessibilityAnnotation?: AccessibilityAnnotationInfo; + accessibilityDescription?: string; + accessibilityItemType?: string; + accessibilityLevel?: number; + accessibilityPosInSet?: number; + accessibilitySetSize?: number; + 'aria-description'?: string; + 'aria-level'?: number; + 'aria-posinset'?: number; + 'aria-setsize'?: number; +} + +// --- macOS (react-native-macos) additions -------------------------------------------------------- + +export interface ViewAdditionsMacOS { + acceptsFirstMouse?: boolean; + allowsVibrancy?: boolean; + draggedTypes?: DraggedTypesType; + enableFocusRing?: boolean; + keyDownEvents?: HandledKeyEvent[]; + keyUpEvents?: HandledKeyEvent[]; + mouseDownCanMoveWindow?: boolean; + onDoubleClick?: IMouseEventHandler; + onDragEnter?: IDragEventHandler; + onDragLeave?: IDragEventHandler; + onDrop?: IDragEventHandler; + onKeyDown?: IKeyboardEventHandler; + onKeyUp?: IKeyboardEventHandler; + onMouseEnter?: IMouseEventHandler; + onMouseLeave?: IMouseEventHandler; + onPreferredScrollerStyleDidChange?: (event: NativeSyntheticEvent) => void; + passthroughAllKeyEvents?: boolean; + tooltip?: string; + // macOS `validKeysDown`/`validKeysUp` are arrays of key names (e.g. "Enter", " "), not key events. + validKeysDown?: string[]; + validKeysUp?: string[]; +} + +export interface TextAdditionsMacOS { + disabled?: boolean; + enableFocusRing?: boolean; + focusable?: boolean; + onMouseEnter?: IMouseEventHandler; + onMouseLeave?: IMouseEventHandler; + textBreakStrategy?: 'simple' | 'highQuality' | 'balanced'; + tooltip?: string; +} + +export interface ImageAdditionsMacOS { + tooltip?: string; +} + +// --- Full per-platform prop types (used by the filter masks; key set mirrors each fork) ---------- + +export type ViewPropsWin32 = RN.ViewProps & ViewAdditionsWin32; +export type ViewPropsWindows = RN.ViewProps & ViewAdditionsWindows; +export type ViewPropsMacOS = RN.ViewProps & ViewAdditionsMacOS; + +export type TextPropsWin32 = RN.TextProps & TextAdditionsWin32; +export type TextPropsWindows = RN.TextProps & TextAdditionsWindows; +export type TextPropsMacOS = RN.TextProps & TextAdditionsMacOS; + +export type ImagePropsWin32 = RN.ImageProps & ImageAdditionsWin32; +export type ImagePropsWindows = RN.ImageProps & ImageAdditionsWindows; +export type ImagePropsMacOS = RN.ImageProps & ImageAdditionsMacOS; + +// --- Combined additions (used to build the cross-platform consumer types) ------------------------ + +export type ViewAdditions = ViewAdditionsWin32 & ViewAdditionsWindows & ViewAdditionsMacOS; +export type TextAdditions = TextAdditionsWin32 & TextAdditionsWindows & TextAdditionsMacOS; +export type ImageAdditions = ImageAdditionsWin32 & ImageAdditionsWindows & ImageAdditionsMacOS; diff --git a/packages/utils/adapters/src/textProps.ts b/packages/utils/adapters/src/textProps.ts index 6a3330f8a32..06718250a02 100644 --- a/packages/utils/adapters/src/textProps.ts +++ b/packages/utils/adapters/src/textProps.ts @@ -1,23 +1,17 @@ import type { TextProps, TextStyle, StyleProp } from 'react-native'; -import type { TextProps as TextPropsWindows, TextStyle as TextStyleWindows } from 'react-native-windows'; -import type { TextProps as TextPropsMacOS, TextStyle as TextStyleMacOS } from 'react-native-macos'; -import type { TextProps as TextPropsWin32, TextStyle as TextStyleWin32 } from '@office-iss/react-native-win32'; +import type { TextAdditions, CursorValue } from './platformProps'; /** - * Build up the styles type by combining the base TextStyle with platform specific extensions, - * omitting any overlapping keys to prevent conflicts. + * Build up the styles type by combining the base TextStyle with the cross-platform extensions + * the React Native forks add (currently just `cursor`). */ -type TextStyleWithMacOS = TextStyle & Omit; -type TextStyleWithWindows = TextStyleWithMacOS & Omit; -export type ITextStyle = TextStyleWithWindows & Omit; +export type ITextStyle = TextStyle & { cursor?: CursorValue }; /** - * Build up the props type by combining the base TextProps with platform specific extensions, + * Build up the props type by combining the base TextProps with the platform-neutral fork additions, * omitting any overlapping keys to prevent conflicts and adding in the resolved style type */ -type TextPropsWithMacOS = Omit & Omit; -type TextPropsWithWindows = TextPropsWithMacOS & Omit; -export type ITextProps = TextPropsWithWindows & - Omit & { +export type ITextProps = Omit & + Omit & { style?: StyleProp; }; diff --git a/packages/utils/adapters/src/viewProps.ts b/packages/utils/adapters/src/viewProps.ts index 085b2ed285c..ca2a0873738 100644 --- a/packages/utils/adapters/src/viewProps.ts +++ b/packages/utils/adapters/src/viewProps.ts @@ -1,43 +1,36 @@ import type RN from 'react-native'; -import type Windows from 'react-native-windows'; -import type MacOS from 'react-native-macos'; -import type Win32 from '@office-iss/react-native-win32'; -import type { EventPhase } from 'react-native-windows'; +import type { ViewAdditions, CursorValue, AccessibilityAnnotationInfo, HandledKeyEvent, NativeKeyEvent, KeyEventHandler } from './platformProps'; -/** - * Build up the styles type by combining the base ViewStyle with platform specific extensions, - * omitting any overlapping keys to prevent conflicts. - */ - -export type IViewStyle = RN.ViewStyle & Omit; +export type { HandledKeyEvent, NativeKeyEvent, KeyEventHandler }; /** - * Set up a merged key event to use + * Build up the styles type by combining the base ViewStyle with the cross-platform extensions + * the React Native forks add (currently just `cursor`). */ - -export interface HandledKeyEvent extends MacOS.HandledKeyEvent { - code?: string; - eventPhase?: typeof EventPhase.None | typeof EventPhase.Capturing | typeof EventPhase.AtTarget | typeof EventPhase.Bubbling; -} -export type NativeKeyEvent = RN.NativeSyntheticEvent; -export type KeyEventHandler = (event: NativeKeyEvent) => void; +export type IViewStyle = RN.ViewStyle & { cursor?: CursorValue }; // list of props to do special handling for type ExcludedViewProps = 'style' | 'accessibilityRole' | 'accessibilityState' | 'keyDownEvents' | 'keyUpEvents' | 'onKeyDown' | 'onKeyUp'; -// merge the view props from each platform, defaulting to React Native base props in case of overlap -type MergedViewProps = RN.ViewProps & Omit; + +// merge the base React Native view props with the platform-neutral fork additions, defaulting to +// the base props in case of overlap +type MergedViewProps = RN.ViewProps & Omit; /** * The complete set of view props accepted by Fluent UI components with additional cross-platform props added */ export interface IViewProps extends Omit { - // annotation for Win32 is the same as windows with one additional optional property - accessibilityAnnotation?: Win32.ViewProps['accessibilityAnnotation']; - // accessible role should union the types, use adapters to fork settings - accessibilityRole?: RN.AccessibilityRole & Windows.AccessibilityRole & Win32.AccessibilityRole & MacOS.AccessibilityRole; - // merge structs for accessibilityState - accessibilityState?: RN.AccessibilityState & Windows.AccessibilityState & Win32.AccessibilityState & MacOS.AccessibilityState; - // keyboard events + // accessibility annotation is a Win32/Windows concept + accessibilityAnnotation?: AccessibilityAnnotationInfo; + // accessibility role is the common (base) set across platforms + accessibilityRole?: RN.AccessibilityRole; + // merge structs for accessibilityState with the desktop additions + accessibilityState?: RN.AccessibilityState & { + multiselectable?: boolean; + required?: boolean; + readOnly?: boolean; + }; + // keyboard events (unified across platforms) onKeyDown?: KeyEventHandler; onKeyUp?: KeyEventHandler; keyDownEvents?: HandledKeyEvent[]; diff --git a/packages/utils/adapters/tsconfig.json b/packages/utils/adapters/tsconfig.json index ff8fae9384a..ce2d7894903 100644 --- a/packages/utils/adapters/tsconfig.json +++ b/packages/utils/adapters/tsconfig.json @@ -7,6 +7,7 @@ "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" }, "include": ["src"], + "exclude": ["src/__drift__"], "references": [ { "path": "../../../scripts/tsconfig.json" From 35f7380d0ed85f82f661d968694e284262083768 Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Thu, 11 Jun 2026 09:34:24 -0700 Subject: [PATCH 08/13] formatting changes --- packages/utils/adapters/src/viewProps.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/utils/adapters/src/viewProps.ts b/packages/utils/adapters/src/viewProps.ts index ca2a0873738..52d06a344c5 100644 --- a/packages/utils/adapters/src/viewProps.ts +++ b/packages/utils/adapters/src/viewProps.ts @@ -1,5 +1,12 @@ import type RN from 'react-native'; -import type { ViewAdditions, CursorValue, AccessibilityAnnotationInfo, HandledKeyEvent, NativeKeyEvent, KeyEventHandler } from './platformProps'; +import type { + ViewAdditions, + CursorValue, + AccessibilityAnnotationInfo, + HandledKeyEvent, + NativeKeyEvent, + KeyEventHandler, +} from './platformProps'; export type { HandledKeyEvent, NativeKeyEvent, KeyEventHandler }; From c21da7178e4e3fb97cb8803993b4316d79cae51c Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Thu, 11 Jun 2026 10:08:55 -0700 Subject: [PATCH 09/13] remove old lintPackage command and update agent instructions --- AGENTS.md | 273 +++++++++ CLAUDE.md | 270 +-------- .../ComponentTemplate/package.json | 1 - scripts/src/cli.ts | 2 - scripts/src/tasks/lintPackage.ts | 538 ------------------ scripts/src/tasks/runAlignDeps.ts | 21 - scripts/src/utils/env.ts | 5 +- scripts/src/utils/getCatalog.ts | 25 - 8 files changed, 276 insertions(+), 859 deletions(-) create mode 100644 AGENTS.md delete mode 100644 scripts/src/tasks/lintPackage.ts delete mode 100644 scripts/src/tasks/runAlignDeps.ts delete mode 100644 scripts/src/utils/getCatalog.ts diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000000..19fb94bc8dc --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,273 @@ +# AGENTS.md + +This file provides guidance to coding agents (Claude Code and others) when working with code in this repository. + +## Project Overview + +This is the **FluentUI React Native** repository, a monorepo containing React Native components that implement Microsoft's Fluent Design System. The repository supports multiple platforms including iOS, Android, macOS, Windows, and Win32. + +## Repository Architecture + +### High-Level Structure + +``` +/apps/ - Demo and test applications + /fluent-tester/ - Main test app for component development + /E2E/ - End-to-end testing setup using Appium/WebDriverIO + /win32/ - Win32-specific test app + /component-generator/ - Tool to generate new components +/packages/ - Core library packages + /components/ - UI component implementations (Button, Checkbox, Avatar, etc.) + /framework/ - Core theming and composition framework + /composition/ - Component composition factory (current approach) + /theme/ - Theme system + /use-tokens/ - Token-based styling hooks + /use-slots/ - Slot-based component composition + /theming/ - Theme definitions for different platforms + /android-theme/ + /apple-theme/ + /default-theme/ + /win32-theme/ + /experimental/ - Components under active development + /deprecated/ - Old framework code (foundation-compose, foundation-composable) + /utils/ - Shared utilities and tools +/scripts/ - Build and development scripts (fluentui-scripts CLI) +/docs/ - Component and theming documentation +``` + +### Key Framework Concepts + +**Composition Framework**: The repository uses `@fluentui-react-native/composition` (located at `packages/framework/composition/`) for building components. This is the current approach and is simpler than the older foundation-compose/foundation-composable frameworks in `/deprecated/`. + +**Slots**: The slot pattern is used to compose higher-order components. A slot represents an inner component (actual entry in the render tree). For example, a Button might have slots for `root`, `icon`, and `content`. This allows advanced customization scenarios. Components wrapping a single native component typically have one slot. + +**Tokens**: Design tokens handle styling and customization. Tokens are design-time values set via theme or component customization (e.g., "brandColor"). Tokens can also be props (specified via "TokensThatAreAlsoProps"). This system enables simpler customization and better memoization. + +**Platform-Specific Files**: Components use platform-specific files with extensions like `.ios.ts`, `.android.ts`, `.win32.ts`, `.macos.ts` for platform-specific implementations. + +**Legacy vs V1**: Many components have both legacy and V1 implementations (e.g., `Button` and `ButtonV1`). The V1 versions use the newer composition framework and are preferred. + +## Build System & Commands + +The repository builds as a **single unified TypeScript project-references graph** compiled by **tsgo** (`@typescript/native-preview`). The root `tsconfig.json` lists every package's `tsconfig.json` under `references`, and `yarn build` runs `tsgo -b` over that graph, building each package in dependency order. **Lage** orchestrates the non-build tasks (bundle, test, lint, clean), and **Yarn 4 (Berry)** in **pnpm mode** manages dependencies (configured in `.yarnrc.yml`). + +### Primary Commands (from the repo root) + +```bash +yarn build # Unified TypeScript build of all packages (tsgo -b); emits each package's lib/ +yarn build --clean # Remove build outputs (tsgo -b --clean); follow with `yarn build` for a full rebuild +yarn lage test # Build + run tests across packages +yarn lage lint # Lint across packages +yarn lint-fix # Lint with autofix (cross-env FURN_FIX_MODE=true lage lint) +yarn bundle:repo # Bundle all packages (lage bundle) +yarn lage buildci # CI aggregate graph: lint-repo, check-publishing, build, test, lint +yarn clean # Clean build artifacts (lage clean) +yarn format # Format code with oxfmt +yarn format:check # Check formatting without writing +``` + +### Repo-Level Checks & Housekeeping + +```bash +yarn lint-repo # Repo-wide structural lint (scripts/src/tasks/lintRepo.ts) +yarn lint-lockfile # Validate the Yarn lockfile +yarn check-publishing # Validate package publishing configuration +yarn change # Create a change file for the current branch +yarn change:check # Verify required change files exist +yarn docs # Start the documentation site +``` + +### Lage Configuration + +The task pipeline is defined in `lage.config.mjs`: + +- Tasks declare dependency ordering (e.g. `test` dependsOn `build`) +- `buildci` is the aggregate CI alias (lint-repo, check-publishing, build, test, lint) +- Lage caches task outputs; add `--no-cache` to bypass caching and `--verbose` for detailed output + +### Package-Level Commands + +Each package's own `build` script is `tsgo -b` (it builds that package together with its referenced dependencies). Other per-package tasks run through the `fluentui-scripts` CLI (in `/scripts/`): + +- `yarn build` - tsgo project-references build (emits to `lib/`) +- `yarn lint` - ESLint (`fluentui-scripts lint`) +- `yarn test` - Jest tests where present (`fluentui-scripts jest`) +- `yarn depcheck` - Unused-dependency check (`fluentui-scripts depcheck`) +- `yarn format` / `yarn format:fix` - Check / fix formatting + +`fluentui-scripts` also retains a `build` command that can emit dual ESM (`lib/`) and CommonJS (`lib-commonjs/`) output driven by per-package build config, but packages on this branch build with `tsgo -b` directly. + +## TypeScript Configuration + +The repo uses **TypeScript 5.8+** via **tsgo** (`@typescript/native-preview`), which is automatically added as a dev dependency to every package that has a `tsconfig.json` through dynamic package extensions (`scripts/dynamic.extensions.mts`). + +The whole repo compiles as one **composite project-references graph**: the root `tsconfig.json` lists every package under `references`, `tsgo -b` builds them in dependency order, and each package caches incremental state in `.cache/tsconfig.tsbuildinfo`. + +### Key TypeScript Settings + +- Base config: `scripts/configs/tsconfig/tsconfig.json` → extends `tsconfig.strict.json` → `@rnx-kit/tsconfig/tsconfig.nodenext.json` +- `target` / `lib`: `esnext` +- `module`: `esnext`, `moduleResolution`: `bundler` (ESM) +- `jsx`: `react-jsx` +- `rewriteRelativeImportExtensions: true` (ESM relative-import extension rewriting) +- `composite: true` (required for project references), `outDir: lib` +- Strict mode, relaxed for legacy compatibility (`strictNullChecks`, `noImplicitAny`, and `strictBindCallApply` are disabled in the base config) + +### Compatibility Notes + +- `suppressImplicitAnyIndexErrors` was removed in TS 5.8+ +- `Platform.OS` doesn't include `'win32'` in the React Native types even though react-native-windows supports it at runtime — use `Platform.OS === ('win32' as any)` +- The platform React Native forks (`react-native`, `react-native-windows`, `react-native-macos`, `@office-iss/react-native-win32`) have overlapping but divergent type definitions. Do **not** import more than one fork into a single program's type graph (it produces order-dependent type confusion under the unified build). Keep fork imports in `.win32.ts` / `.windows.ts` / `.macos.ts` files, or redeclare the needed shapes platform-neutrally. + +### Framework Type System + +The composition framework uses precise types for better type safety: + +- **`SlotFn`**: Slot functions return `React.ReactElement | null` (not `ReactNode`) + - This reflects the actual behavior: slots always return elements via staged render or `React.createElement` + - Provides better type inference when accessing slot props (e.g., `Slots.root({}).props`) +- **`FinalRender`**: Final render functions in staged components return `JSX.Element | null` + - Used in composition framework's `useRender` functions + - Ensures type compatibility between staged components and the composition system + +## Development Workflow + +### Setting Up Development Environment + +1. Clone repository +2. Run `yarn` to install dependencies +3. Run `yarn build` to build all packages +4. Launch FluentUI Tester app for component testing (see `/apps/fluent-tester/README.md`) + +### Component Development + +**Component Location**: Components are in `/packages/components/` (stable) or `/packages/experimental/` (under development). + +**Component Structure**: Each component typically has: + +- `package.json` - Package definition with workspace dependencies +- `src/index.ts` - Main export file +- `src/.tsx` - Component implementation (requires `/** @jsxImportSource @fluentui-react-native/framework-base */` pragma) +- `src/.types.ts` - TypeScript type definitions +- `src/.styling.ts` - Styling and token definitions +- `src/..ts` - Platform-specific implementations +- `SPEC.md` - Component specification and usage documentation +- `MIGRATION.md` - Migration guide (for V1 components) +- `tsconfig.json`, `babel.config.js`, `jest.config.js`, `eslint.config.js` + +**Using Composition Framework**: Use `@fluentui-react-native/composition` for new components. For simpler components without slots/tokens, use the `stagedComponent` pattern from `@fluentui-react-native/use-slot`. + +**JSX Runtime**: All components use the modern automatic JSX runtime: + +- Add `/** @jsxImportSource @fluentui-react-native/framework-base */` at the top of `.tsx` files +- The custom jsx-runtime intercepts JSX calls to optimize slot rendering +- No need to import `withSlots` - it's handled automatically by the runtime +- Components using React Fragments (`<>...`) work automatically (Fragment is re-exported from the jsx-runtime) +- Packages using the jsx-runtime need `@fluentui-react-native/framework-base` in `devDependencies` + +**TypeScript Patterns**: + +- Slot functions automatically return `React.ReactElement`, so you can access `.props` directly without type assertions +- When checking for win32 platform: `Platform.OS === ('win32' as any)` - TypeScript doesn't recognize 'win32' but react-native-windows supports it +- Final render functions should return `FinalRender` with children as rest parameters: `(props: TProps, ...children: React.ReactNode[])` + +**Native Modules**: Components with native code (iOS/Android/Windows): + +- Typically have one root slot wrapping the native component +- Use `codegenNativeComponent` for new architecture compatibility +- May use `constantsToExport` for default values from native side +- iOS/macOS: Include `.podspec` files +- Must be added to FluentTester's Podfile (transitive dependencies aren't autolinked) + +### Creating a New Component + +1. Create directory: `/packages/components/` or `/packages/experimental/` +2. Copy structure from existing component (e.g., Shimmer, Button) +3. Update `package.json` with correct name and dependencies (use `workspace:*` for internal packages) +4. Add the new package's `tsconfig.json` to the root `tsconfig.json` `references` so it joins the unified build +5. Create source files in `src/` +6. Add test page to FluentTester at `/apps/fluent-tester/src/TestComponents//` +7. Register test page in `testPages.tsx` and platform-specific `testPages..tsx` +8. Add E2E tests (see E2E Testing section) +9. Run `yarn` and `yarn build` from root +10. For Apple platforms: run `pod install` in test app directories + +### Theming + +Platform-specific themes are in `/packages/theming/`: + +- `android-theme/` - Android theming +- `apple-theme/` - iOS and macOS theming +- `win32-theme/` - Win32 theming +- `default-theme/` - Cross-platform defaults +- `theme-tokens/` - Token definitions +- `theme-types/` - TypeScript types for themes + +Components require `ThemeProvider` from `@fluentui-react-native/theme` to work properly. + +### Testing + +**Manual Testing**: Use FluentUI Tester app (`/apps/fluent-tester/`) for interactive component testing. Test pages are in `/apps/fluent-tester/src/TestComponents/`. + +**E2E Testing**: Required for all new components. Uses Appium + WebDriverIO. + +- E2E tests live in `/apps/E2E/src//` +- Each component needs: + - Page Object (`PageObject..ts`) - Interface to interact with test page + - Spec Document (`Spec..ts`) - Jasmine test cases + - Constants file in test component (`/apps/fluent-tester/src/TestComponents//consts.ts`) +- Test pages must include: + - `testID` on first section matching page object's `_pageName` + - Optional `e2eSections` prop for dedicated E2E test elements +- Run E2E tests: `yarn e2etest:` from `/apps/E2E/` + +**Unit Tests**: Component-specific Jest tests where present, typically in `src/` directories. Run them with `yarn test` in a package or `yarn lage test` from the root. + +### Platform-Specific Development + +**iOS/macOS**: + +- May wrap native controls from FluentUI Apple +- Requires `.podspec` files for native modules +- Run `pod install` after adding dependencies + +**Android**: + +- Platform-specific styling and tokens +- Uses `accessibilityLabel` for E2E selectors (other platforms use `testID`) + +**Win32**: + +- Separate test app at `/apps/win32/` +- Uses WinAppDriver for E2E testing + +**Windows (UWP)**: + +- Separate test app configuration +- Legacy support + +## Version Management + +**Changesets**: Used for change logs and versioning. + +- Run `yarn change` to create a change file when modifying packages +- Change files are required before merging PRs (validated in CI via `yarn change:check`) +- Changesets config in `.changeset/config.json` +- Major versions are disallowed (validated in CI via `.github/scripts/validate-changesets.mts`) +- Version bump PRs are created automatically by GitHub Actions; `yarn changeset:version` applies version bumps +- Publishing happens in Azure Pipelines using `changeset publish` + +## Important Notes + +- This is an **alpha-stage** library under active development +- **Requires TypeScript 5.8+** with `@typescript/native-preview` (tsgo); the unified build runs `tsgo -b` over the root project-references graph +- **Uses Yarn 4 in pnpm mode** for dependency management (configured in `.yarnrc.yml`) +- **Uses modern automatic JSX runtime** - all components should use `@jsxImportSource @fluentui-react-native/framework-base` +- **Dynamic package extensions**: Common dev dependencies (TypeScript/tsgo, Jest, ESLint, Prettier) are automatically added via `scripts/dynamic.extensions.mts` +- New packages must be added to the root `tsconfig.json` `references` to join the unified build +- Follow existing component patterns for consistency +- Test components using FluentUI Tester app before submitting PRs +- Platform differences should be documented in component `SPEC.md` files +- Use the newer composition framework (`@fluentui-react-native/composition`) for new components, not the deprecated foundation frameworks +- When importing V1 components, consider aliasing: `import { ButtonV1 as Button }` +- Slot functions return `React.ReactElement` - you can safely access `.props` without type assertions diff --git a/CLAUDE.md b/CLAUDE.md index ac47cd97c0f..7a9c7c03ddb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,271 +1,3 @@ # CLAUDE.md -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Project Overview - -This is the **FluentUI React Native** repository, a monorepo containing React Native components that implement Microsoft's Fluent Design System. The repository supports multiple platforms including iOS, Android, macOS, Windows, and Win32. - -## Repository Architecture - -### High-Level Structure - -``` -/apps/ - Demo and test applications - /fluent-tester/ - Main test app for component development - /E2E/ - End-to-end testing setup using Appium/WebDriverIO - /win32/ - Win32-specific test app - /component-generator/ - Tool to generate new components -/packages/ - Core library packages - /components/ - UI component implementations (Button, Checkbox, Avatar, etc.) - /framework/ - Core theming and composition framework - /composition/ - Component composition factory (current approach) - /theme/ - Theme system - /use-tokens/ - Token-based styling hooks - /use-slots/ - Slot-based component composition - /theming/ - Theme definitions for different platforms - /android-theme/ - /apple-theme/ - /default-theme/ - /win32-theme/ - /experimental/ - Components under active development - /deprecated/ - Old framework code (foundation-compose, foundation-composable) - /utils/ - Shared utilities and tools -/scripts/ - Build and development scripts (fluentui-scripts CLI) -/docs/ - Component and theming documentation -``` - -### Key Framework Concepts - -**Composition Framework**: The repository uses `@fluentui-react-native/composition` (located at `packages/framework/composition/`) for building components. This is the current approach and is simpler than the older foundation-compose/foundation-composable frameworks in `/deprecated/`. - -**Slots**: The slot pattern is used to compose higher-order components. A slot represents an inner component (actual entry in the render tree). For example, a Button might have slots for `root`, `icon`, and `content`. This allows advanced customization scenarios. Components wrapping a single native component typically have one slot. - -**Tokens**: Design tokens handle styling and customization. Tokens are design-time values set via theme or component customization (e.g., "brandColor"). Tokens can also be props (specified via "TokensThatAreAlsoProps"). This system enables simpler customization and better memoization. - -**Platform-Specific Files**: Components use platform-specific files with extensions like `.ios.ts`, `.android.ts`, `.win32.ts`, `.macos.ts` for platform-specific implementations. - -**Legacy vs V1**: Many components have both legacy and V1 implementations (e.g., `Button` and `ButtonV1`). The V1 versions use the newer composition framework and are preferred. - -## Build System & Commands - -The project uses **Yarn 4** (Berry) in **pnpm mode** with **Lage** as the task runner for orchestrating builds across the monorepo. The pnpm mode provides better disk space efficiency and stricter dependency management. - -### Primary Commands - -```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 # 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 -``` - -### Development Commands - -```bash -yarn format # Format code with oxfmt -yarn depcheck # Check for unused dependencies across packages -yarn depcheck-fix # Fix depcheck issues automatically -yarn align-deps # Align React Native dependencies using @rnx-kit/align-deps -yarn changeset # Generate changeset files (required before PR merge) -``` - -### Lage Configuration - -The build pipeline is defined in `lage.config.js`: - -- Tasks have dependency ordering (e.g., `test` depends on `build`) -- Lage uses caching to avoid redundant steps -- Add `--no-cache` to bypass caching -- Add `--verbose` for detailed output - -### Package-Level Commands - -Individual packages use `fluentui-scripts` (in `/scripts/`) which provides: - -- `yarn build` - TypeScript compilation to `lib/` (ESM) and `lib-commonjs/` (CJS) - - The build script automatically sets `--moduleResolution` to match `--module` for TypeScript 5.8+ compatibility - - ESM builds use `--module esnext --moduleResolution bundler` - - CJS builds use `--module node16 --moduleResolution node16` -- `yarn lint` - ESLint -- `yarn lint-package` - Lint package configuration (includes align-deps and depcheck) - - Use `--fix` flag to automatically fix issues - - Validates dependencies, scripts, entry points, and build configuration -- `yarn test` - Jest tests (where applicable) -- `yarn depcheck` - Check for unused dependencies -- `yarn format` - Check code formatting -- `yarn format:fix` - Fix code formatting - -## TypeScript Configuration - -The repository uses **TypeScript 5.8+** with **@typescript/native-preview** for improved performance and React Native compatibility. The native preview is automatically added to packages with a `tsconfig.json` via dynamic package extensions. - -### Key TypeScript Settings - -- Base configuration in `/scripts/configs/tsconfig.json` -- Module system: `node16` with matching `moduleResolution: node16` -- Target: `es2022` -- Strict mode enabled (with some exceptions for legacy code compatibility) -- **TypeScript Native Preview**: Packages automatically receive `@typescript/native-preview` as a development dependency - -### TypeScript 5.8+ Compatibility Notes - -- The `suppressImplicitAnyIndexErrors` option has been removed (deprecated in TS 5.8+) -- Module resolution must match module format when using Node16 resolution -- Stricter type checking for platform values (e.g., `Platform.OS` doesn't include 'win32' in React Native types, but react-native-windows does support it at runtime) -- TypeScript native preview provides better performance for large React Native codebases - -### Framework Type System - -The composition framework uses precise types for better type safety: - -- **`SlotFn`**: Slot functions return `React.ReactElement | null` (not `ReactNode`) - - This reflects the actual behavior: slots always return elements via staged render or `React.createElement` - - Provides better type inference when accessing slot props (e.g., `Slots.root({}).props`) -- **`FinalRender`**: Final render functions in staged components return `JSX.Element | null` - - Used in composition framework's `useRender` functions - - Ensures type compatibility between staged components and the composition system - -## Development Workflow - -### Setting Up Development Environment - -1. Clone repository -2. Run `yarn` to install dependencies -3. Run `yarn build` to build all packages -4. Launch FluentUI Tester app for component testing (see `/apps/fluent-tester/README.md`) - -### Component Development - -**Component Location**: Components are in `/packages/components/` (stable) or `/packages/experimental/` (under development). - -**Component Structure**: Each component typically has: - -- `package.json` - Package definition with workspace dependencies -- `src/index.ts` - Main export file -- `src/.tsx` - Component implementation (requires `/** @jsxImportSource @fluentui-react-native/framework-base */` pragma) -- `src/.types.ts` - TypeScript type definitions -- `src/.styling.ts` - Styling and token definitions -- `src/..ts` - Platform-specific implementations -- `SPEC.md` - Component specification and usage documentation -- `MIGRATION.md` - Migration guide (for V1 components) -- `tsconfig.json`, `babel.config.js`, `jest.config.js`, `eslint.config.js` - -**Using Composition Framework**: Use `@fluentui-react-native/composition` for new components. For simpler components without slots/tokens, use the `stagedComponent` pattern from `@fluentui-react-native/use-slot`. - -**JSX Runtime**: All components use the modern automatic JSX runtime: - -- Add `/** @jsxImportSource @fluentui-react-native/framework-base */` at the top of `.tsx` files -- The custom jsx-runtime intercepts JSX calls to optimize slot rendering -- No need to import `withSlots` - it's handled automatically by the runtime -- Components using React Fragments (`<>...`) work automatically (Fragment is re-exported from the jsx-runtime) -- Packages using the jsx-runtime need `@fluentui-react-native/framework-base` in `devDependencies` - -**TypeScript Patterns**: - -- Slot functions automatically return `React.ReactElement`, so you can access `.props` directly without type assertions -- When checking for win32 platform: `Platform.OS === ('win32' as any)` - TypeScript doesn't recognize 'win32' but react-native-windows supports it -- Final render functions should return `FinalRender` with children as rest parameters: `(props: TProps, ...children: React.ReactNode[])` - -**Native Modules**: Components with native code (iOS/Android/Windows): - -- Typically have one root slot wrapping the native component -- Use `codegenNativeComponent` for new architecture compatibility -- May use `constantsToExport` for default values from native side -- iOS/macOS: Include `.podspec` files -- Must be added to FluentTester's Podfile (transitive dependencies aren't autolinked) - -### Creating a New Component - -1. Create directory: `/packages/components/` or `/packages/experimental/` -2. Copy structure from existing component (e.g., Shimmer, Button) -3. Update `package.json` with correct name and dependencies (use `workspace:*` for internal packages) -4. Create source files in `src/` -5. Add test page to FluentTester at `/apps/fluent-tester/src/TestComponents//` -6. Register test page in `testPages.tsx` and platform-specific `testPages..tsx` -7. Add E2E tests (see E2E Testing section) -8. Run `yarn` and `yarn build` from root -9. For Apple platforms: run `pod install` in test app directories - -### Theming - -Platform-specific themes are in `/packages/theming/`: - -- `android-theme/` - Android theming -- `apple-theme/` - iOS and macOS theming -- `win32-theme/` - Win32 theming -- `default-theme/` - Cross-platform defaults -- `theme-tokens/` - Token definitions -- `theme-types/` - TypeScript types for themes - -Components require `ThemeProvider` from `@fluentui-react-native/theme` to work properly. - -### Testing - -**Manual Testing**: Use FluentUI Tester app (`/apps/fluent-tester/`) for interactive component testing. Test pages are in `/apps/fluent-tester/src/TestComponents/`. - -**E2E Testing**: Required for all new components. Uses Appium + WebDriverIO. - -- E2E tests live in `/apps/E2E/src//` -- Each component needs: - - Page Object (`PageObject..ts`) - Interface to interact with test page - - Spec Document (`Spec..ts`) - Jasmine test cases - - Constants file in test component (`/apps/fluent-tester/src/TestComponents//consts.ts`) -- Test pages must include: - - `testID` on first section matching page object's `_pageName` - - Optional `e2eSections` prop for dedicated E2E test elements -- Run E2E tests: `yarn e2etest:` from `/apps/E2E/` - -**Unit Tests**: Component-specific Jest tests where present, typically in `src/` directories. - -### Platform-Specific Development - -**iOS/macOS**: - -- May wrap native controls from FluentUI Apple -- Requires `.podspec` files for native modules -- Run `pod install` after adding dependencies - -**Android**: - -- Platform-specific styling and tokens -- Uses `accessibilityLabel` for E2E selectors (other platforms use `testID`) - -**Win32**: - -- Separate test app at `/apps/win32/` -- Uses WinAppDriver for E2E testing - -**Windows (UWP)**: - -- Separate test app configuration -- Legacy support - -## Version Management - -**Changesets**: Used for change logs and versioning. - -- Run `yarn changeset` to create changeset files when modifying packages -- Changesets are required before merging PRs (validated in CI) -- Changesets config in `.changeset/config.json` -- Major versions are disallowed (validated in CI via `.github/scripts/validate-changesets.mts`) -- Version bump PRs are created automatically by GitHub Actions -- Publishing happens in Azure Pipelines using `changeset publish` - -## Important Notes - -- This is an **alpha-stage** library under active development -- **Requires TypeScript 5.8+** with `@typescript/native-preview` for proper type checking and module resolution -- **Uses Yarn 4 in pnpm mode** for dependency management (configured in `.yarnrc.yml`) -- **Uses modern automatic JSX runtime** - all components should use `@jsxImportSource @fluentui-react-native/framework-base` -- **Dynamic package extensions**: Common dev dependencies (TypeScript, Jest, ESLint, Prettier) are automatically added via `scripts/dynamic.extensions.mjs` -- **Integrated linting**: `yarn lint-package` now includes align-deps and depcheck validation -- Follow existing component patterns for consistency -- Test components using FluentUI Tester app before submitting PRs -- Platform differences should be documented in component `SPEC.md` files -- Use the newer composition framework (`@fluentui-react-native/composition`) for new components, not the deprecated foundation frameworks -- When importing V1 components, consider aliasing: `import { ButtonV1 as Button }` -- Slot functions return `React.ReactElement` - you can safely access `.props` without type assertions +See @AGENTS.md for guidance on working with code in this repository. diff --git a/apps/component-generator/component-templates/ComponentTemplate/package.json b/apps/component-generator/component-templates/ComponentTemplate/package.json index 016d02b073b..f669d064962 100644 --- a/apps/component-generator/component-templates/ComponentTemplate/package.json +++ b/apps/component-generator/component-templates/ComponentTemplate/package.json @@ -19,7 +19,6 @@ "depcheck": "fluentui-scripts depcheck", "just": "fluentui-scripts", "lint": "fluentui-scripts lint", - "lint-package": "fluentui-scripts lint-package", "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u", "format": "fluentui-scripts format", diff --git a/scripts/src/cli.ts b/scripts/src/cli.ts index 788a380a2ae..a48c091644e 100644 --- a/scripts/src/cli.ts +++ b/scripts/src/cli.ts @@ -5,7 +5,6 @@ import { BuildCommand } from './tasks/build.ts'; import { CleanCommand } from './tasks/clean.ts'; import { FormatCommand } from './tasks/format.ts'; import { LintCommand } from './tasks/lint.ts'; -import { LintPackageCommand } from './tasks/lintPackage.ts'; import { JestCommand } from './tasks/jest.ts'; import { CheckPublishingCommand } from './tasks/checkPublishingTask.ts'; import { DepcheckCommand } from './tasks/depcheck.ts'; @@ -20,7 +19,6 @@ cli.register(BuildCommand); cli.register(CleanCommand); cli.register(FormatCommand); cli.register(LintCommand); -cli.register(LintPackageCommand); cli.register(JestCommand); cli.register(CheckPublishingCommand); cli.register(DepcheckCommand); diff --git a/scripts/src/tasks/lintPackage.ts b/scripts/src/tasks/lintPackage.ts deleted file mode 100644 index 0d632842fb3..00000000000 --- a/scripts/src/tasks/lintPackage.ts +++ /dev/null @@ -1,538 +0,0 @@ -import { Command, Option } from 'clipanion'; -import type { ExportSet, PackageManifest, ResolvedBuildConfig } from '../utils/projectRoot.ts'; -import { getProjectRoot, type ProjectRoot } from '../utils/projectRoot.ts'; -import { getResolvedConfig } from '../utils/buildConfig.ts'; -import { isFixMode } from '../utils/env.ts'; -import { runAlignDeps } from './runAlignDeps.ts'; -import { DepCheckRunner } from './depcheck.ts'; -import { getCatalog } from '../utils/getCatalog.ts'; -import { createJSONValidator } from '@rnx-kit/lint-json'; -import fs from 'node:fs'; -import path from 'node:path'; - -export class LintPackageCommand extends Command { - static override paths = [['lint-package']]; - - static override usage = Command.Usage({ - description: 'Lint the current package configuration', - details: - 'This command analyzes the current package configuration for potential issues. When --fix is specified, it will attempt to automatically fix any detected problems.', - examples: [['Lint the current package', '$0 lint-package']], - }); - - fix = Option.Boolean('--fix', false, { - description: 'Automatically fix detected issues where possible', - }); - - fixDepWarnings = Option.Boolean('--fix-dep-warnings', false, { - description: 'Automatically fix dependency warnings where possible, be very careful when using this option', - }); - - private changed = false; - private issues = 0; - private isScripts = false; - private projRoot: ProjectRoot = getProjectRoot(process.cwd()); - private result = 0; - private removedDevDeps: string[] = []; - private addedDevDeps: Record = {}; - private ensuredCapabilities: string[] = []; - private removedCapabilities: string[] = []; - private getCatalog = getCatalog(); - - async execute() { - this.fix = isFixMode(this.fix); - const manifest = this.projRoot.manifest; - this.isScripts = manifest.name === '@fluentui-react-native/scripts'; - - const runningOps: Promise[] = []; - - // kick off align deps or wait for it in fix mode - if (this.fix) { - await this.startAlignDepsCheck(); - } else { - runningOps.push(this.startAlignDepsCheck()); - } - - // kick off depcheck or wait for it in fix mode - if (this.fix) { - await this.startDependencyCheck(); - } else { - runningOps.push(this.startDependencyCheck()); - } - - // now do the custom linting - const buildConfig = getResolvedConfig(this.projRoot, true); - - this.checkPrivateVersion(); - this.checkManifest(); - this.checkScripts(); - if (!buildConfig.typescript.checkScript && this.projRoot.manifest.type === 'module') { - this.checkModuleConfig(); - } else { - this.checkEntryPoints(buildConfig); - this.checkBuildConfig(buildConfig); - } - this.checkDependencies(); - this.checkDevDeps(); - this.checkPeerDeps(); - this.checkRnxKitConfig(); - this.checkTsConfig(); - await this.checkCatalogs(); - - // report the results for the custom linting - this.handleResult(this.issues > 0 ? 1 : 0, 'custom package rules'); - - // wait for any queued ops to finish - await Promise.all(runningOps); - - // write changes if in fix mode - if (this.fix && this.changed) { - this.projRoot.writeManifest(); - console.log('Updated package.json for ', this.projRoot.manifest.name); - } - - return this.result; - } - - private handleResult(code: number, source: string) { - if (code !== 0) { - console.error(`lint-package: ${source} failed with code`, code); - this.result = code; - } - } - - private checkModuleConfig() { - const manifest = this.projRoot.manifest; - const scripts = manifest.scripts || {}; - this.errorIf(scripts.build !== 'tsgo', 'Directly call tsgo for build script instead of using build-core', () => { - this.projRoot.updateRecordEntry('scripts', 'build', 'tsgo'); - }); - this.errorIf(scripts['build-core'] !== 'tsgo', 'Directly call tsgo for module packages', () => { - this.projRoot.updateRecordEntry('scripts', 'build-core', 'tsgo'); - }); - this.errorIf(scripts['build-cjs'] !== undefined, 'Module packages should not have a build-cjs script', () => { - this.projRoot.updateRecordEntry('scripts', 'build-cjs', undefined); - }); - if (manifest.main !== './lib/index.js' || manifest.module !== './lib/index.js') { - this.errorIf(true, 'Module packages should have main and module point to ./lib/index.js', () => { - this.projRoot.setManifestEntry('main', './lib/index.js'); - this.projRoot.setManifestEntry('module', './lib/index.js'); - }); - } - const defaultExport = manifest.exports?.['.']; - if (defaultExport) { - if (typeof defaultExport === 'string' || defaultExport.import !== './lib/index.js' || defaultExport.require !== './lib/index.js') { - this.errorIf(true, 'Module packages should have default export point to ./lib/index.js', () => { - this.projRoot.setManifestEntry('exports', { - ...manifest.exports, - '.': { - types: './lib/index.d.ts', - import: './lib/index.js', - require: './lib/index.js', - default: './src/index.ts', - }, - }); - }); - } - } - } - - private async startDependencyCheck() { - const runner = new DepCheckRunner({ - verbose: false, - fixErrors: this.fix, - fixWarnings: this.fixDepWarnings, - dryRun: false, - }); - const result = await runner.execute(); - if (this.fix && runner.madeChanges()) { - this.changed = true; - } - this.handleResult(result, 'depcheck'); - } - - private async startAlignDepsCheck() { - if (!this.isScripts && this.projRoot.manifest['rnx-kit']?.alignDeps) { - const result = await runAlignDeps(this.projRoot.root, this.fix); - if (this.fix) { - this.changed = this.projRoot.reloadManifest(); - } - this.handleResult(result, 'align-deps'); - } - } - - private checkPrivateVersion() { - const manifest = this.projRoot.manifest; - if (manifest.private) { - this.errorIf(manifest.version !== '0.1.0', 'Private packages must have version 0.1.0', () => { - this.projRoot.setManifestEntry('version', '0.1.0'); - }); - } - } - - private checkManifest() { - const manifest = this.projRoot.manifest; - this.warnIf(!manifest.description, 'Package is missing a description field'); - this.errorIf(manifest.typings !== undefined, 'typings field is deprecated; use types instead', () => { - if (manifest.types === undefined && manifest.typings !== undefined) { - this.projRoot.setManifestEntry('types', manifest.typings); - } - this.projRoot.clearManifestEntry('typings'); - }); - } - - private checkDependencies() { - const manifest = this.projRoot.manifest; - if (manifest['rnx-kit']?.kitType === 'app') { - return; - } - const dependencies = manifest.dependencies || {}; - this.errorIf(dependencies.react !== undefined, 'react should be a peerDependency, not a dependency'); - this.errorIf(dependencies['react-native'] !== undefined, 'react-native should be a peerDependency, not a dependency'); - this.errorIf(dependencies['react-native-macos'] !== undefined, 'react-native-macos should be a peerDependency, not a dependency'); - this.errorIf(dependencies['react-native-windows'] !== undefined, 'react-native-windows should be a peerDependency, not a dependency'); - this.errorIf( - dependencies['@office-iss/react-native-win32'] !== undefined, - '@office-iss/react-native-win32 should be a peerDependency, not a dependency', - ); - } - - private checkDevDeps() { - const issues: string[] = []; - const devDependencies = this.projRoot.manifest.devDependencies || {}; - for (const depName of this.removedDevDeps) { - if (devDependencies[depName] !== undefined) { - issues.push(`- devDependency ${depName} should be removed`); - this.projRoot.updateRecordEntry('devDependencies', depName, undefined); - } - } - for (const [depName, depVersion] of Object.entries(this.addedDevDeps)) { - if (devDependencies[depName] === undefined) { - issues.push(`- devDependency ${depName} should be added`); - this.projRoot.updateRecordEntry('devDependencies', depName, depVersion); - } - } - this.errorIf(issues.length > 0, issues.join('\n'), () => { - // changes already applied above - }); - } - - private checkPeerDeps() { - const issues: string[] = []; - const manifest = this.projRoot.manifest; - const peerDeps = new Set(Object.keys(manifest.peerDependencies || {})); - if (peerDeps.has('@types/react')) { - if (!manifest.peerDependenciesMeta) { - this.projRoot.setManifestEntry('peerDependenciesMeta', {}); - issues.push('- peerDependenciesMeta field should be added for optional peer dependencies'); - } - const peerDepsMeta = manifest.peerDependenciesMeta || {}; - if (!peerDepsMeta['@types/react'] || !peerDepsMeta['@types/react'].optional) { - this.projRoot.updateRecordEntry('peerDependenciesMeta', '@types/react', { optional: true }); - issues.push('- @types/react should be marked as an optional peer dependency'); - } - } - const peerDepsMeta = manifest.peerDependenciesMeta || {}; - for (const depName of Object.keys(peerDepsMeta)) { - if (!peerDeps.has(depName)) { - issues.push(`- peerDependenciesMeta entry for ${depName} should be removed since it's not a declared peer dependency`); - this.projRoot.updateRecordEntry('peerDependenciesMeta', depName, undefined); - } - } - - this.errorIf(issues.length > 0, issues.join('\n'), () => { - // changes already applied above - }); - } - - private checkRnxKitConfig() { - const projRoot = this.projRoot; - const manifest = projRoot.manifest; - if (manifest.furn?.packageType === 'tooling') { - return; - } - const rnxKitIssues: string[] = []; - if (manifest['rnx-kit'] === undefined) { - rnxKitIssues.push('- Missing rnx-kit configuration'); - } - const rnxKitConfig = manifest['rnx-kit'] || {}; - if (rnxKitConfig.kitType === undefined) { - rnxKitIssues.push('- Missing rnx-kit.kitType field'); - rnxKitConfig.kitType = 'library'; - } - if (!rnxKitConfig.alignDeps) { - rnxKitIssues.push('- Missing rnx-kit.alignDeps field'); - rnxKitConfig.alignDeps = {}; - } - const alignDeps = rnxKitConfig.alignDeps || {}; - if (alignDeps.presets !== undefined) { - rnxKitIssues.push('- rnx-kit.alignDeps.presets should come from the root configuration'); - delete alignDeps.presets; - } - const capabilities: string[] = alignDeps.capabilities || []; - for (const removedCap of this.removedCapabilities) { - const index = capabilities.indexOf(removedCap); - if (index >= 0) { - rnxKitIssues.push(`- rnx-kit.alignDeps.capabilities should not include "${removedCap}"`); - capabilities.splice(index, 1); - } - } - for (const ensuredCap of this.ensuredCapabilities) { - if (!capabilities.includes(ensuredCap)) { - rnxKitIssues.push(`- rnx-kit.alignDeps.capabilities is missing "${ensuredCap}"`); - capabilities.push(ensuredCap); - } - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - alignDeps.capabilities = capabilities.sort() as any[]; - this.errorIf(rnxKitIssues.length > 0, rnxKitIssues.join('\n'), () => { - projRoot.setManifestEntry('rnx-kit', rnxKitConfig); - }); - } - - private async checkCatalogs() { - const catalog = await this.getCatalog; - this.checkCatalogUsage('dependencies', catalog); - this.checkCatalogUsage('devDependencies', catalog); - } - - private checkCatalogUsage(key: 'dependencies' | 'devDependencies', catalog: Record) { - const depSet = this.projRoot.manifest[key] || {}; - for (const depName of Object.keys(depSet)) { - if (catalog[depName] !== undefined) { - this.errorIf(depSet[depName] !== 'catalog:', `- ${key}: ${depName} should use "catalog:" version specifier`, () => { - this.projRoot.updateRecordEntry(key, depName, 'catalog:'); - }); - } - } - } - - private checkScripts() { - const scripts = this.projRoot.manifest.scripts || {}; - this.warnIf(scripts['just'] !== undefined, 'just script is deprecated, can invoke by calling yarn fluentui-scripts instead', () => { - this.projRoot.updateRecordEntry('scripts', 'just', undefined); - }); - this.warnIf(scripts['prettier-fix'] !== undefined, 'prettier-fix script is deprecated, rename to format:fix', () => { - this.projRoot.updateRecordEntry('scripts', 'prettier-fix', undefined); - }); - this.warnIf(scripts['prettier'] !== undefined, 'prettier script is deprecated, rename to format', () => { - this.projRoot.updateRecordEntry('scripts', 'prettier', undefined); - }); - } - - private validateEntryPoint(collection: T, key: K, expectedOutDir: string, otherOutDir: string) { - const entryPoint = typeof collection[key] === 'string' ? (collection[key] as string) : undefined; - if (entryPoint) { - const normalizedEntry = removeDotPrefix(entryPoint) + '/'; - const expected = `${expectedOutDir}/`; - const notExpected = `${otherOutDir}/`; - this.errorIf( - normalizedEntry.startsWith(notExpected), - `Entry point ${String(key)} (${entryPoint}) should not be in output ${expectedOutDir}`, - () => { - collection[key] = entryPoint.replace(notExpected, expected) as T[K]; - }, - ); - } - } - - private validateExportsGroup(manifest: PackageManifest, groupName: string, isDefault: boolean, buildConfig: ResolvedBuildConfig) { - const noExportsRequired = Boolean(manifest.private || buildConfig.typescript.checkScript); - this.errorIf(!manifest.exports && !noExportsRequired, 'Missing exports field for package with no build script', () => { - this.projRoot.setManifestEntry('exports', {}); - }); - const exports = manifest.exports; - if (!exports) { - return; - } - - const groupEntry = exports[groupName]; - const group = typeof groupEntry === 'object' && !Array.isArray(groupEntry) ? groupEntry : undefined; - if (group || isDefault) { - const updated = { ...group }; - const keys = Object.keys(updated); - const isOrdered = (lhs: keyof ExportSet, rhs: keyof ExportSet) => { - return !updated[lhs] || !updated[rhs] || keys.indexOf(rhs) > keys.indexOf(lhs); - }; - const errors: string[] = []; - if (!group) { - errors.push(`Missing required exports group ${groupName}`); - } - if (updated.types && keys[0] !== 'types') { - errors.push(`'types' entry should be first in exports for ${groupName}`); - } - if (isDefault) { - const manifestTypes = manifest.types ? toDotPrefix(manifest.types) : undefined; - const manifestModule = manifest.module ? toDotPrefix(manifest.module) : undefined; - const manifestMain = manifest.main ? toDotPrefix(manifest.main) : undefined; - if (manifestTypes && updated.types !== manifestTypes) { - errors.push(`'types' entry in exports does not match manifest.types`); - updated.types = manifestTypes; - } - if (manifestModule && updated.import !== manifestModule) { - errors.push(`'import' entry in exports does not match manifest.module`); - updated.import = manifestModule; - } - if (manifestMain && updated.require !== manifestMain) { - errors.push(`'require' entry in exports does not match manifest.main`); - updated.require = manifestMain; - } - } - const esmDir = buildConfig.typescript.esmDir; - const cjsDir = buildConfig.typescript.cjsDir; - this.validateEntryPoint(updated, 'react-native', esmDir, cjsDir); - this.validateEntryPoint(updated, 'import', esmDir, cjsDir); - this.validateEntryPoint(updated, 'require', cjsDir, esmDir); - if (!isOrdered('react-native', 'import')) { - errors.push(`'react-native' entry should come before 'import' in exports for ${groupName}`); - } - if (!isOrdered('react-native', 'require')) { - errors.push(`'react-native' entry should come before 'require' in exports for ${groupName}`); - } - if (!isOrdered('import', 'require')) { - errors.push(`'import' entry should come before 'require' in exports for ${groupName}`); - } - if (updated.default && keys[keys.length - 1] !== 'default') { - errors.push(`'default' entry should be last in exports for ${groupName}`); - } - if (updated.import) { - const importInSrc = updated.import.startsWith('./src'); - const defaultExport = importInSrc ? updated.import : updated.import.replace(esmDir, 'src').replace(/\.js$/, '.ts'); - if (!updated['react-native'] || updated['react-native'] !== defaultExport) { - errors.push(`'react-native' entry in exports does not match the expected default export`); - updated['react-native'] = defaultExport; - } - if (!updated.default || updated.default !== defaultExport) { - errors.push(`'default' entry in exports does not match the expected default export`); - updated.default = defaultExport; - } - } - this.errorIf(errors.length > 0, errors.join('\n'), () => { - const { types, import: imp, require: req, default: def, ...rest } = updated; - // restructure the group to have types, , import, require, default in order - exports[groupName] = { - ...(types && { types }), - ...rest, - ...(imp && { import: imp }), - ...(req && { require: req }), - ...(def && { default: def }), - }; - }); - } - } - - private checkEntryPoints(buildConfig: ResolvedBuildConfig) { - const manifest = this.projRoot.manifest; - const { main, module, private: isPrivate } = manifest; - const { cjsDir, esmDir } = buildConfig.typescript; - this.validateEntryPoint(manifest, 'main', cjsDir, esmDir); - this.validateEntryPoint(manifest, 'module', esmDir, cjsDir); - if (!isPrivate) { - this.errorIf(Boolean(!manifest.exports && (main || module)), 'Missing exports field for public package', () => { - const newExports = { '.': {} }; - this.projRoot.setManifestEntry('exports', newExports); - }); - } - const exports = manifest.exports; - if (exports) { - const defaultExport = exports['.']; - // this is really only ok for packages that only have a single build output and no types like a config package - const validStringExport = typeof defaultExport === 'string' && !(main && module && main !== module && manifest.types === undefined); - if (typeof defaultExport !== 'string' || !validStringExport) { - this.validateExportsGroup(manifest, '.', true, buildConfig); - } - for (const key of Object.keys(exports)) { - if (key !== '.') { - this.validateExportsGroup(manifest, key, false, buildConfig); - } - } - } - } - - private checkBuildConfig(buildConfig: ResolvedBuildConfig) { - const { cjsScript, esmScript, checkScript } = buildConfig.typescript; - const hasJsBuilds = Boolean(cjsScript || esmScript); - const hasBuilds = hasJsBuilds || Boolean(checkScript); - const scripts = this.projRoot.manifest.scripts || {}; - - const buildScriptText = hasJsBuilds ? this.getFluentScriptsText('build') : checkScript; - this.errorIf(hasBuilds && scripts.build !== buildScriptText, 'Missing or incorrect build script', () => { - this.projRoot.updateRecordEntry('scripts', 'build', buildScriptText); - }); - if (cjsScript) { - this.errorIf(scripts['build-cjs'] !== cjsScript, 'Missing or incorrect build-cjs script', () => { - this.projRoot.updateRecordEntry('scripts', 'build-cjs', cjsScript); - }); - } else { - this.errorIf(scripts['build-cjs'] !== undefined, 'Extraneous build-cjs script', () => { - this.projRoot.updateRecordEntry('scripts', 'build-cjs', undefined); - }); - } - const coreScript = esmScript || checkScript; - if (esmScript || checkScript) { - this.errorIf(scripts['build-core'] !== coreScript, 'Missing or incorrect build-core script', () => { - this.projRoot.updateRecordEntry('scripts', 'build-core', coreScript); - }); - } else { - this.errorIf(scripts['build-core'] !== undefined, 'Extraneous build-core script', () => { - this.projRoot.updateRecordEntry('scripts', 'build-core', undefined); - }); - } - } - - private checkTsConfig() { - const tsconfigPath = path.join(this.projRoot.root, 'tsconfig.json'); - if (fs.existsSync(tsconfigPath)) { - const validator = createJSONValidator(tsconfigPath, undefined, { fix: this.fix, reportError: this.error }); - const compilerOptions = validator.raw.compilerOptions; - if (typeof compilerOptions === 'object' && compilerOptions !== null && !Array.isArray(compilerOptions)) { - if (!compilerOptions.noEmit) { - validator.enforce('compilerOptions.rootDir', 'src'); - validator.enforce('compilerOptions.outDir', 'lib'); - } - } - validator.finish(); - } - } - - private error = (message: string) => { - console.error(`- Error: ${message}`); - this.issues++; - }; - - private warnIf(check: boolean, message: string, fixFn?: () => void) { - if (check) { - if (this.fix && fixFn) { - fixFn(); - this.changed = true; - console.log(`- Fixed: ${message}`); - } else { - console.warn(`- Warning: ${message}`); - } - } - } - - private errorIf(check: boolean, message: string, fixFn?: () => void) { - if (check) { - if (this.fix && fixFn) { - fixFn(); - this.changed = true; - console.log(`- Fixed: ${message}`); - } else { - this.error(message); - } - } - } - - private getFluentScriptsText(command: string) { - return this.isScripts ? `node ./src/cli.ts ${command}` : `fluentui-scripts ${command}`; - } -} - -function toDotPrefix(path: string) { - return path.startsWith('./') ? path : `./${path}`; -} - -function removeDotPrefix(path: string) { - return path.startsWith('./') ? path.slice(2) : path; -} diff --git a/scripts/src/tasks/runAlignDeps.ts b/scripts/src/tasks/runAlignDeps.ts deleted file mode 100644 index ab476e01c85..00000000000 --- a/scripts/src/tasks/runAlignDeps.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { scriptsDir } from '../utils/ispnpm.ts'; -import { spawn } from 'node:child_process'; -import { yarnVerb } from '../utils/runScript.ts'; -import path from 'node:path'; - -export async function runAlignDeps(targetDir: string, fixMode: boolean): Promise { - const spawnArgs = ['exec', 'rnx-align-deps', '--no-unmanaged']; - if (fixMode) { - spawnArgs.push('--write'); - } - spawnArgs.push(path.resolve(targetDir)); - return new Promise((resolve) => { - spawn(yarnVerb, spawnArgs, { - cwd: scriptsDir(), - stdio: 'inherit', - shell: true, - }).on('close', (code) => { - resolve(code ?? -1); - }); - }); -} diff --git a/scripts/src/utils/env.ts b/scripts/src/utils/env.ts index ba93c25616e..47260196378 100644 --- a/scripts/src/utils/env.ts +++ b/scripts/src/utils/env.ts @@ -1,8 +1,7 @@ /** * Lage doesn't support cleanly passing parameters to sub scripts, so this allows our scripts that - * support a "fix" mode to be toggled via an environment variable. This allows things like lint --fix or - * lint-package --fix to be run from the root level without having to have duplicate scripts entries for - * each package. + * support a "fix" mode to be toggled via an environment variable. This allows things like lint --fix + * to be run from the root level without having to have duplicate scripts entries for each package. */ // env variable to use diff --git a/scripts/src/utils/getCatalog.ts b/scripts/src/utils/getCatalog.ts deleted file mode 100644 index 359af98f3ee..00000000000 --- a/scripts/src/utils/getCatalog.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { exec } from 'node:child_process'; -import { scriptsDir } from './ispnpm.ts'; - -export async function getCatalog(): Promise> { - const command = 'yarn config get catalog --json'; - const output = await execWithOutput(command); - return JSON.parse(output) as Record; -} - -function execWithOutput(command: string): Promise { - return new Promise((resolve, reject) => { - const options = { cwd: scriptsDir() }; - exec(command, options, (error, stdout, stderr) => { - if (error) { - reject(error); - return; - } - if (stderr) { - reject(new Error(stderr)); - return; - } - resolve(stdout); - }); - }); -} From 0b5ed56fbfcc0f6bfe0a35571de3712aa1e7ed06 Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Thu, 11 Jun 2026 10:36:31 -0700 Subject: [PATCH 10/13] fix mac build errors with new xcode --- apps/fluent-tester/ios/Podfile | 20 +++++++++++++++++++- apps/fluent-tester/macos/Podfile | 20 +++++++++++++++++++- apps/fluent-tester/macos/Podfile.lock | 6 +++--- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/apps/fluent-tester/ios/Podfile b/apps/fluent-tester/ios/Podfile index 35817242e67..1044a51bb8c 100644 --- a/apps/fluent-tester/ios/Podfile +++ b/apps/fluent-tester/ios/Podfile @@ -15,7 +15,25 @@ react_native_path = "#{__dir__}/../node_modules/react-native" # (node-modules mode) # react_native_path = "#{__dir__}/../../../node_modules/react-native" -use_test_app! do |target| +# fmt 11.0.2 (pinned by React Native 0.81) fails to compile with Xcode 26 / Apple Clang 21, which is +# stricter about `consteval` (fixed upstream in fmt 11.1). Force fmt's compile-time consteval +# format-string checking off so the bundled fmt builds. This is ABI-safe and avoids a version bump +# (multiple pods pin fmt = 11.0.2). Re-applied on every `pod install`. +def patch_fmt_consteval(installer) + fmt_base = File.join(installer.sandbox.root.to_s, 'fmt', 'include', 'fmt', 'base.h') + return unless File.exist?(fmt_base) + + contents = File.read(fmt_base) + patched = contents.gsub('# define FMT_USE_CONSTEVAL 1', '# define FMT_USE_CONSTEVAL 0') + return if patched == contents + + # CocoaPods marks pod sources read-only; make the file writable before patching. + File.chmod(0o644, fmt_base) + File.write(fmt_base, patched) + Pod::UI.puts '[FluentTester] Patched fmt base.h to disable consteval (Xcode 26 / Clang 21 workaround)' +end + +use_test_app!(:post_install => ->(installer) { patch_fmt_consteval(installer) }) do |target| target.app do platform :ios, '16.0' end diff --git a/apps/fluent-tester/macos/Podfile b/apps/fluent-tester/macos/Podfile index beded05f9f2..87593c051a7 100644 --- a/apps/fluent-tester/macos/Podfile +++ b/apps/fluent-tester/macos/Podfile @@ -15,7 +15,25 @@ react_native_path = "#{__dir__}/../node_modules/react-native" # (node-modules mode) # react_native_path = "#{__dir__}/../../../node_modules/react-native" -use_test_app! do |target| +# fmt 11.0.2 (pinned by React Native 0.81) fails to compile with Xcode 26 / Apple Clang 21, which is +# stricter about `consteval` (fixed upstream in fmt 11.1). Force fmt's compile-time consteval +# format-string checking off so the bundled fmt builds. This is ABI-safe and avoids a version bump +# (multiple pods pin fmt = 11.0.2). Re-applied on every `pod install`. +def patch_fmt_consteval(installer) + fmt_base = File.join(installer.sandbox.root.to_s, 'fmt', 'include', 'fmt', 'base.h') + return unless File.exist?(fmt_base) + + contents = File.read(fmt_base) + patched = contents.gsub('# define FMT_USE_CONSTEVAL 1', '# define FMT_USE_CONSTEVAL 0') + return if patched == contents + + # CocoaPods marks pod sources read-only; make the file writable before patching. + File.chmod(0o644, fmt_base) + File.write(fmt_base, patched) + Pod::UI.puts '[FluentTester] Patched fmt base.h to disable consteval (Xcode 26 / Clang 21 workaround)' +end + +use_test_app!(:post_install => ->(installer) { patch_fmt_consteval(installer) }) do |target| target.app do platform :osx, '14' end diff --git a/apps/fluent-tester/macos/Podfile.lock b/apps/fluent-tester/macos/Podfile.lock index 32753ceb53e..afcdbfd3791 100644 --- a/apps/fluent-tester/macos/Podfile.lock +++ b/apps/fluent-tester/macos/Podfile.lock @@ -2663,7 +2663,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: cea1d4f90a3a59537f3deb03ff5656489d7133dd - DoubleConversion: 5b92c4507c560bb62e7aa1acdf2785ea3ff08b3b + DoubleConversion: d31b1eb37f6d6f456530c4fd9124b857d6889cab fast_float: 20817c22759af6ac8d4d67e6e059b8b499953656 FBLazyVector: 0e3076dbb16169b0afc2d701a24a526423b5e76b fmt: 24e7591456deb60b4a77518f83d9a916ac84223f @@ -2673,7 +2673,7 @@ SPEC CHECKSUMS: FRNMenuButton: 709f3218ce9a421c154ea0570acbeb3f535629d3 FRNRadioButton: a0e58ac8a7be290778a30add5bdf41dc245e3483 FRNVibrancyView: 96debdb9a1d2d9315c25748450a33fe2cb8b6321 - glog: ba31c1afa7dcf1915a109861bccdb4421be6175b + glog: 0b31c25149b9d350b2666c7d459229861a00ec07 hermes-engine: 9f4dfe93326146a1c99eb535b1cb0b857a3cd172 MicrosoftFluentUI: dde98d8ed3fc306d9ddd0a6f0bc0c1f24fe5275e RCT-Folly: c803cf33238782d5fd21a5e02d44f64068e0e130 @@ -2747,6 +2747,6 @@ SPEC CHECKSUMS: SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: 6048a55441c73f8e3916a8eac6b83886708c77f9 -PODFILE CHECKSUM: e6d871d112097146bbd727b9adf20f8ad89c66a0 +PODFILE CHECKSUM: 9142426f666c393ccea255cd25936728beda6e75 COCOAPODS: 1.16.2 From 09bbef0a024f9c24b60c93cfe56d40e0acbe842d Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Thu, 11 Jun 2026 10:50:55 -0700 Subject: [PATCH 11/13] add changeset and re-enable macos PR runs --- .changeset/clean-numbers-fly.md | 78 +++++++++++++++++++++++++++++++++ .github/workflows/pr.yml | 32 +++++++------- 2 files changed, 94 insertions(+), 16 deletions(-) create mode 100644 .changeset/clean-numbers-fly.md diff --git a/.changeset/clean-numbers-fly.md b/.changeset/clean-numbers-fly.md new file mode 100644 index 00000000000..41cc90fcf56 --- /dev/null +++ b/.changeset/clean-numbers-fly.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 +"@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/dependency-profiles": 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 +--- + +Update packages to esm, with new builds with project references diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 0300b1f5080..5bdc90bf7e8 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -99,22 +99,22 @@ jobs: CCACHE_DISABLE: 1 # Disable macOS E2E test to unblock 0.81 checkin - #- name: Prepare E2E macOS tests - # run: yarn e2eprep:macos - # working-directory: apps/E2E - - #- name: Run E2E macOS tests - # run: yarn e2etest:macos - # working-directory: apps/E2E - - #- name: Upload E2E macOS artifacts - # if: ${{ always() }} - # uses: actions/upload-artifact@v4 - # with: - # name: E2E_macos_Dump - # path: | - # apps/E2E/reports - # apps/E2E/errorShots + - name: Prepare E2E macOS tests + run: yarn e2eprep:macos + working-directory: apps/E2E + + - name: Run E2E macOS tests + run: yarn e2etest:macos + working-directory: apps/E2E + + - name: Upload E2E macOS artifacts + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: E2E_macos_Dump + path: | + apps/E2E/reports + apps/E2E/errorShots ios: name: iOS PR From 965622f9dd649d46ebb178381b1c5abc3d2aeedf Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Thu, 11 Jun 2026 15:07:41 -0700 Subject: [PATCH 12/13] add initial plans to branch --- packages/agentic/PLAN.md | 46 ++++++++ packages/agentic/STAGING.md | 92 +++++++++++++++ packages/agentic/agentic-analyzer/PLAN.md | 77 +++++++++++++ packages/agentic/agentic-authoring/PLAN.md | 84 ++++++++++++++ packages/agentic/agentic-components/PLAN.md | 94 +++++++++++++++ packages/agentic/agentic-concepts/PLAN.md | 81 +++++++++++++ packages/agentic/agentic-tokens/PLAN.md | 121 ++++++++++++++++++++ 7 files changed, 595 insertions(+) create mode 100644 packages/agentic/PLAN.md create mode 100644 packages/agentic/STAGING.md create mode 100644 packages/agentic/agentic-analyzer/PLAN.md create mode 100644 packages/agentic/agentic-authoring/PLAN.md create mode 100644 packages/agentic/agentic-components/PLAN.md create mode 100644 packages/agentic/agentic-concepts/PLAN.md create mode 100644 packages/agentic/agentic-tokens/PLAN.md diff --git a/packages/agentic/PLAN.md b/packages/agentic/PLAN.md new file mode 100644 index 00000000000..d0f1ab94589 --- /dev/null +++ b/packages/agentic/PLAN.md @@ -0,0 +1,46 @@ +# Overview + +We are working on a plan to modernize furn and enable authoring fluent themed react-native components with agents. + +This work will result in the creation of new packages underneath this path. + +Do the following: + +1. Investigate the following topics with one dedicated sub-agent for each. +2. When they complete, look at the plans and see how they intersect. +3. Create a PLAN.md or README.md for each package in the new folder for that package then a STAGING.md file with an execution plan for this. + +## Gather v1 concepts + +- Create a concepts package that is used for common concepts, types, and instructions for understanding current components and building new components. +- Analyze the v1 components in the repo (those that use the packages in packages/framework), gather information about states, appearance, interactions, accessibility, and common token references. +- Create a plan to create pinning tests for the existing components to ensure that we don't break things as we refactor + +## Agentic authoring + +- Create a distributable agent and potentially MCP server to enable authoring new components using fluent themes +- Investigate the code in https://github.com/microsoft/fluentui referenced by AGENTS.md and the skills to mimic the new structure they are using to create a similar pattern for react-native. +- Read https://microsoft-my.sharepoint-df.com/:w:/p/popatudor/cQqZQwg00VNJRby4i2YVjIxJEgUCkrXkbKQophGWqlFA9ANc2Q for modern authoring concepts to apply those + +## New common styles and tokens + +- Instead of authoring the new controls directly against the theme, create a common tokens object with semantic slots. +- Look at https://github.com/x3-design/fluent-design/blob/main/plugins/tokens/skills/core/SKILL.md for latest thinking on how they are defined for web +- Pull together what components actually reference to map the old ideas to the new ones + +## Analysis package + +Create an analyzer package that can: + +- Create a custom theme with unique values per entry so that resolved styles or tokens can be mapped back to their semantic names. +- Create tests that use the newer @testing-library/react-native and can do things like extract accessibility trees, styles, snapshots, etc. +- Pin token values and style values in v1 components such that we can safely refactor. +- Have a strategy for multiplexing jest tests for each platform when needed. + +## New components + +Create a single component package that creates equivalent components to the v1 components, but authored in the new style + +- Don't use compose or customize +- Create a structure that more closely mirrors modern fluent ideas +- Have a flat structure where components don't depend on other components but instead reference common hooks, tokens, styles, helpers etc. (similar to fluent) diff --git a/packages/agentic/STAGING.md b/packages/agentic/STAGING.md new file mode 100644 index 00000000000..bea4bd0fbe8 --- /dev/null +++ b/packages/agentic/STAGING.md @@ -0,0 +1,92 @@ +# Agentic Modernization — Staging & Execution Plan + +This is the unified execution plan for the five new packages under `packages/agentic/`, derived from the per-package plans. Goal (from [`PLAN.md`](./PLAN.md)): modernize furn and enable authoring fluent-themed React Native components with agents. + +## The five packages + +| Package | Path | Role | +|---|---|---| +| [`agentic-concepts`](./agentic-concepts/PLAN.md) | `packages/agentic/agentic-concepts/` | **Leaf vocabulary** — concept types, component catalog, agent skill docs, the pinning **spec** | +| [`agentic-tokens`](./agentic-tokens/PLAN.md) | `packages/agentic/agentic-tokens/` | **Fluent Modern token layer** — x3-design primitives→generics; `createTokens(theme)`, `useTokens()`, derived interaction | +| [`agentic-analyzer`](./agentic-analyzer/PLAN.md) | `packages/agentic/agentic-analyzer/` | **Refactor safety net** — sentinel theme + reverse-map, RNTL harness, pinning, per-platform jest | +| [`agentic-components`](./agentic-components/PLAN.md) | `packages/agentic/agentic-components/` | **Fluent Headless + Modern components** — three forms (`X`/`useX`/`renderX`), no compose/customize | +| [`agentic-authoring`](./agentic-authoring/PLAN.md) | `packages/agentic/agentic-authoring/` | **Distributable agent + skills (+ optional MCP)** — sits on top of all four | + +✅ **Both previously-locked sources received & incorporated:** `Fluent Headless and Fluent Modern.docx` (repo root) defines the Headless→Modern strategy and the three-forms component model; the **x3-design token skills** (`~/dev/fluent-design/plugins/tokens/skills/{core,interaction,textstyle}`) define the primitives→generics token model now adopted by `agentic-tokens`. + +## How they intersect (the seams) + +- **State vocabulary** is defined once in `agentic-concepts`. In `agentic-tokens` interaction states (hover/pressed) are **derived from rest generics** (OKLCH deltas, precomputed for RN), *not* enumerated as suffixed slots — components declare `interaction.applies-to` per category. +- **Pinning** splits: `agentic-concepts` = the **spec** (per-component scenario matrix + assertion contract); `agentic-analyzer` = the **mechanism** (sentinel theme, RNTL, per-platform jest); `agentic-components` = runs the same matrix to prove **v1→new parity**. Because interaction is derived, analyzer pins catch both rest-token and delta-formula regressions. +- **Token migration** is a chain: `agentic-concepts` catalogs *current* usage → `agentic-tokens` maps it to the x3-design `--gnrc-*` generics → `agentic-analyzer`'s reverse-map *proves* resolved values are preserved → `agentic-components` consumes via `useTokens()`. +- **Authoring** ships `agentic-concepts`' skill docs (in the x3-design `SKILL.md` format), generates the three-forms Headless component + Modern token styling, uses `agentic-tokens`' generic vocabulary, and drives `agentic-analyzer` for pin-tests. + +## Dependency graph + +``` +agentic-concepts ──────────────┬───────────────┬──────────────┐ + (leaf: types/catalog/skills) │ │ │ + ▼ ▼ ▼ +agentic-tokens ──► agentic-analyzer ──► agentic-components ──► agentic-authoring + (semantic slots) (pin v1 + verify) (new flat comps) (skills/MCP; last) + └───────────────► (sentinel theme injection point) ◄──┘ +``` + +Key principle: **pin v1 behavior BEFORE refactoring anything.** The analyzer + concepts pinning spec must exist and baseline the current components first, so every later change is guarded. + +## Cross-cutting setup (applies to every package) + +- Add each new package's `tsconfig.json` to the **root `tsconfig.json` `references`** so it joins the unified `tsgo -b` build (per `AGENTS.md`). +- Dev deps (tsgo/jest/eslint/prettier) come automatically via `scripts/dynamic.extensions.mts`. +- **`@testing-library/react-native` is new to the repo** — introduced by `agentic-analyzer`; thread it through align-deps / dynamic extensions and add a catalog entry. +- **Platform forks:** keep `.ios/.android/.win32/.macos/.windows` splits; never co-load multiple RN forks in one program (per `AGENTS.md` Compatibility Notes). `globalTokens` is a static JSON (not theme-injectable) → analyzer sentinelizes it via jest module mocking. +- Each package needs a changeset on first publish-relevant change (`yarn change`). + +## Staged execution + +### Stage 0 — Scaffolding & contracts (all packages, parallel) +Create all five package folders with `package.json` + `tsconfig.json`, add to root `references`, confirm they join `tsgo -b` as empty packages. Lock the shared contracts: the **state vocabulary** (`agentic-concepts`), the `CommonTokens` **interface** (`agentic-tokens`, provisional), the pinning **assertion contract** (concepts ↔ analyzer seam), and the component **file-template** (`agentic-components` ↔ `agentic-authoring` golden template). + +### Stage 1 — Foundation: concepts + analyzer harness +- `agentic-concepts`: concept types, component catalog (7 families), skill docs, pinning spec. +- `agentic-analyzer`: sentinel theme + reverse-map (theme namespace), RNTL `renderWithTheme`, extraction helpers; then `globalTokens` sentinel via jest mock. +- **Milestone:** baseline-pin the existing v1 components (value + semantic snapshots) — the safety net is live *before* any refactor. + +### Stage 2 — Tokens (Fluent Modern layer) +- `agentic-tokens`: model `prmt-*` primitives + `--gnrc-*` generics (color `variant-role-modifier`, scalars, spacing, shadow, `textstyle-*` bundles) → `createTokens(theme)` producer (rest values, light/dark; HC/PlatformColor via `theme.host`) → JS port of the OKLCH **derived interaction** (deltas + lightness curve + inverse rule), precomputed for RN → `useTokens()` + the furn→generic crosswalk. +- Resolve the open decisions: primitives source-of-truth (port x3 vs project existing theme), interaction precompute mechanism, radius ramp (no x3 generic yet). +- **Milestone:** analyzer validates every generic resolves uniquely and every derived hover/pressed matches the algorithm; pin the v1 components' equivalent token references. + +### Stage 3 — New components (pattern-setters) +- `agentic-components`: build **Button** end-to-end as the three forms (`Button`/`useButton`/`renderButton` + `useButtonStyles`) + the shared `hooks/`/`tokens/`/`styles/`/`helpers/`; gate on analyzer parity with `ButtonV1`. Then **Text** + **Switch/Checkbox**. Integrate the real `agentic-tokens` (swap the stub; rest + derived interaction); re-run pinning to confirm zero value drift. +- **Milestone:** Button/Text/Switch reach pinned parity with their v1 counterparts; the three-forms template is locked. + +### Stage 4 — Long tail + authoring +- `agentic-components`: migrate Link, Checkbox, FAB, CompoundButton, ToggleButton, … each as the same file set + platform splits, gated by analyzer parity. +- `agentic-authoring`: ship `new-component`/`register-tester`/`changeset`/`lint-package` skills (in the x3-design `SKILL.md` format) + `.agents`+`.claude` transclusion stubs; then `token-lookup`/`pin-tests`/`e2e-scaffold`; then the optional MCP server; then distribution (`init`/`postinstall`, multi-runtime adapters). +- **Milestone:** an agent can scaffold a new flat component end-to-end, with pinning, from the skills/MCP. + +## Watch items (no longer blocked) + +- Per-platform pinning will surface **new** snapshots for previously-untested platforms (first-run churn). +- `agentic-components` `Text` flat-rule decision (render RN `Text` via shared `textStyles` vs a narrow exception) — recommend pure-flat. +- **RN has no runtime OKLCH** → interaction states are precomputed at theme-build time (RN = a "pre-compiled environment" per the x3-design interaction skill). + +## Open decisions for you + +Resolved: + +- ✅ **Token source-of-truth** — adopt the x3 _structure_, map _values_ from the furn themes + v1 component mappings (project-first). +- ✅ **Interaction precompute** — ship precomputed values from `agentic-tokens`; the OKLCH algorithm lives in `agentic-analyzer` (validates them; reused by the tokens build-time generator). +- ✅ **Radius** — furn-local radius ramp derived from current v1 component usage. + +Still open: + +1. **Build the analyzer + pin v1 first** (recommended — guards everything), or build new components in parallel and backfill pins? +2. **Component scope for v1:** the catalog covers 7 families first (Button, Checkbox, Switch, Radio/RadioGroup, Tab/TabList, Link, Text) — confirm that first slice and the Button/Text/Switch pattern-setter order. +3. **`agentic-tokens` object shape** — nested (`color.background.neutral.subtle`) + flat alias, or flat-only. +4. **`agentic-authoring` distribution target & runtimes** (Claude only, or also Copilot/Cursor) and whether the **MCP server** is in-scope now or later. + +## Provenance + +Authored from five parallel investigation agents (one per workstream), each grounded in the current repo (framework/composition, v1 components, theming, jest/test setup). Token + authoring specifics are now grounded in the received sources: `Fluent Headless and Fluent Modern.docx` (repo root) and the x3-design token skills (`~/dev/fluent-design/plugins/tokens/skills/`). diff --git a/packages/agentic/agentic-analyzer/PLAN.md b/packages/agentic/agentic-analyzer/PLAN.md new file mode 100644 index 00000000000..d92cb228105 --- /dev/null +++ b/packages/agentic/agentic-analyzer/PLAN.md @@ -0,0 +1,77 @@ +# @fluentui-react-native/agentic-analyzer + +> Status: **Plan** (package not yet created). Part of the `packages/agentic/` modernization — see [`../STAGING.md`](../STAGING.md). + +## Purpose + +A test/analysis toolkit that lets us **safely refactor** v1 components by: + +1. building a **sentinel theme** whose every leaf value is unique, +2. rendering components with **`@testing-library/react-native`** to capture accessibility trees, computed styles, and snapshots, and +3. **reverse-mapping** resolved style values back to the exact theme/token slot they came from — so a refactor that changes *which* token feeds a style is caught even when the final pixel value is unchanged. + +Plus a strategy for **multiplexing jest per platform**. + +## Identity + +- **npm:** `@fluentui-react-native/agentic-analyzer` +- **path:** `packages/agentic/agentic-analyzer/` +- Introduces the repo's **first** dependency on `@testing-library/react-native` (must thread through `scripts/dynamic.extensions.mts` / align-deps). Add to root `tsconfig.json` `references`. + +## Findings that shape it + +- **Theme is injectable; values pass through untransformed.** `Theme` (theme-types) is delivered via context; `themedStyleSheet`/`buildUseTokens` cache **by theme object identity** and do no value parsing — so swapping a sentinel theme cleanly busts caches and unique values survive into `StyleSheet.create`. Sentinel feasibility is HIGH for everything reachable through the theme. +- **`globalTokens` is NOT injectable.** It's a static JSON import (`theme-tokens/src/tokens-global.ts` → `design-tokens-windows/.../tokens-global.json`). Sentinelizing it requires **jest module mocking**, not theme injection — the reverse map must span both the `theme.*` and `globalTokens.*` namespaces. +- **Current tests:** `react-test-renderer` + `toMatchSnapshot` (`Checkbox.test.tsx` etc.); `test-tools` exports `validateHookValueNotChanged` + `mockTheme`. No `@testing-library/react-native` anywhere yet. +- **Platform is fixed per package, one platform per jest run.** `scripts/configs/jest/jest.config.cjs` reads `projectManifest.furn.jestPlatform` (default `ios`) and calls `@rnx-kit/jest-preset(platform, …)`; `scripts/src/tasks/jest.ts` runs jest once. **No multiplexing** — each component is currently tested on exactly one platform. + +## Proposed capabilities + +1. **Sentinel theme + reverse map** — `createSentinelTheme(base?)` clones a real `Theme`, replacing every leaf with a unique type-valid sentinel (colors → reserved unique hex; spacing → unique `'NNNpx'`; numeric sizes/shadows → reserved integers; strings → reserved-but-valid pool), emitting a `SentinelMap: value → "colors.buttonBackground" | "spacing.m" | …`. `createSentinelGlobalTokens()` + a jest mock factory for `@fluentui-react-native/theme-tokens` covers the static namespace. `resolveStyleToSemantic(style)` walks a computed RN style and substitutes sentinels with semantic names. +2. **testing-library helpers** — `renderWithTheme(el, {theme?, platform?})`, `getAccessibilityTree(result)`, `getComputedStyles(result, query)`, `snapshotSemantic(result)` (snapshot with sentinel→semantic substitution; stable across pixel changes, sensitive to slot-source changes). +3. **Pinning** — `pinComponent(Component, scenarios)` producing **dual** snapshots: a *value* snapshot (catches visual regressions) + a *semantic* snapshot (catches silent token-source swaps). Drives the v1 state matrix (hovered/pressed/disabled/checked via `.customize`/state layers). +4. **Per-platform jest multiplexing** — `makeJestConfig(platform)` that takes the platform from `FURN_JEST_PLATFORM` (falling back to `furn.jestPlatform`), and a `multiplex` runner that, for a `furn.jestPlatforms: [...]` array, spawns one jest process per platform with platform-suffixed snapshot dirs (preserving the one-platform-per-process model the preset requires — and respecting the AGENTS.md "no multiple RN forks in one program" rule). +5. **OKLCH interaction algorithm (home + validator).** A JS port of the x3-design hover/pressed derivation — `--lightness-{hover,press}`/`--alpha-{hover,press}` deltas, the lightness curve `1 + clamp(0, (0.40 - L)/0.20, 1)`, and the `loud`/`heavy`/`onloud` inverse rule (per the `tokens-interaction` skill). This is the **single home** of the algorithm. Two consumers: (a) `agentic-analyzer` uses it to **validate** that `agentic-tokens`' shipped precomputed hover/pressed values match what the algorithm produces from the rest generics — a regression guard on both rest tokens and the formula; (b) `agentic-tokens`' build-time generator imports it (dev dependency only) to *produce* those precomputed values, so the runtime token output stays static and analyzer-free. Pin tests assert solid/inverse/transparent cases against the worked examples in the skill. + +## Proposed structure + +``` +agentic-analyzer/ + package.json tsconfig.json README.md PLAN.md + src/ + index.ts + sentinel/ createSentinelTheme.ts sentinelGlobalTokens.ts reverseMap.ts allocator.ts + render/ renderWithTheme.tsx accessibility.ts styles.ts snapshot.ts + pinning/ pinComponent.ts states.ts + jest/ makeJestConfig.cjs multiplex.ts + interaction/ oklch.ts deltas.ts derive.ts validate.ts # OKLCH hover/pressed algorithm (home + validator) +``` + +> The `interaction/` module is importable on its own (no test deps) so `agentic-tokens`' build-time generator can reuse it to precompute values, while `agentic-tokens`' runtime output carries no dependency on `agentic-analyzer`. + +## Dependencies & intersections + +- **agentic-concepts:** concepts owns *what to pin* (component catalog + scenario matrix + assertion contract); analyzer owns the *machinery* those specs call. +- **agentic-tokens:** analyzer's reverse map is the bridge proving a refactor from old refs → x3-design `--gnrc-*` generics preserves resolved values. `createTokens` is the sentinel injection point. Because hover/pressed are **derived** (OKLCH deltas, precomputed for RN), the analyzer must also assert each derived interaction value matches the algorithm — so pins catch both rest-token and delta-formula regressions. +- **agentic-components:** provides the parity gate — new components must reproduce v1's pinned a11y tree / styles / snapshots. +- Internal: reuse `Theme`/`useTheme` (theme-types), `ThemeProvider` (theme); may supersede `test-tools`' `mockTheme` as the sentinel base. + +## Open questions + +- `globalTokens` mocking: mock the `theme-tokens` package or the underlying `design-tokens-windows` JSON? +- Reserved-but-valid value pools for non-arbitrary leaves (font families/weights); avoid colliding color hexes. +- First multiplex run surfaces **new** snapshots for previously-untested platforms → expect churn / platform-specific failures unrelated to refactors. +- Platform-suffixed snapshot layout to avoid cross-platform `.snap` clobbering. +- RNTL output differs from `react-test-renderer` — pin in RNTL's format from the start, don't chase legacy snapshot parity. +- Confirm `@rnx-kit/jest-preset` honors an env-driven platform and that its `transformIgnorePatterns`/`transform` overrides still compose when wrapped. + +## Phased plan + +1. **Scaffold + deps:** create package, add `@testing-library/react-native`, get a trivial `renderWithTheme` passing for one component (Button, ios) under the existing preset. +2. **Sentinel theme + reverse map** over the theme namespace; prove `resolveStyleToSemantic` round-trips on a real component. +2b. **OKLCH interaction module** (`interaction/`) — port the deltas + lightness curve + inverse rule; unit-test against the skill's worked examples. Land this early: `agentic-tokens`' Stage-2 build depends on it to precompute hover/pressed, and the analyzer uses it to validate them. +3. **globalTokens sentinel + jest mock;** extend reverse map to `globalTokens.*`. +4. **Extraction + semantic snapshots** (`getAccessibilityTree`/`getComputedStyles`/`snapshotSemantic`). +5. **Pinning API + state matrix;** hand off to `agentic-concepts` to author per-component specs. +6. **Per-platform multiplex** (`makeJestConfig.cjs` + `multiplex` + suffixed snapshot dirs + `furn.jestPlatforms`). +7. **Harden + baseline:** align-deps/depcheck/dynamic-extensions integration; run a full multiplexed sweep to establish v1 baseline pins. diff --git a/packages/agentic/agentic-authoring/PLAN.md b/packages/agentic/agentic-authoring/PLAN.md new file mode 100644 index 00000000000..9158983c572 --- /dev/null +++ b/packages/agentic/agentic-authoring/PLAN.md @@ -0,0 +1,84 @@ +# @fluentui-react-native/agentic-authoring + +> Status: **Plan** (package not yet created). Part of the `packages/agentic/` modernization — see [`../STAGING.md`](../STAGING.md). +> +> ✅ **Sources received & incorporated.** The "modern authoring concepts" come from **`Fluent Headless and Fluent Modern.docx`** (repo root) and the skill format/structure from the **x3-design token skills** (`~/dev/fluent-design/plugins/tokens/skills/{core,interaction,textstyle}/SKILL.md`), alongside the public **microsoft/fluentui `AGENTS.md` + skills** pattern. + +## Purpose + +A distributable bundle of agent **skills**, **instructions**, and an optional **MCP server** that lets a coding agent (Claude Code, Copilot, Cursor, …) author new fluent-themed React Native components in the new **Fluent Headless → Fluent Modern** style — consuming `agentic-concepts`, `agentic-tokens`, `agentic-analyzer`, and `agentic-components`. It is the "router + verb-decomposed skills" layer modeled on how microsoft/fluentui (web) and the x3-design token plugin structure their agent guidance. + +**What it authors:** the three-forms headless component (`X` + `useX` + `renderX`) plus the Modern styling layer (`useXStyles` consuming `agentic-tokens` generics) — behavior/ARIA separated from the swappable styled layer, per the Fluent Headless thesis in the docx. + +## Identity + +- **npm:** `@fluentui-react-native/agentic-authoring` +- **path:** `packages/agentic/agentic-authoring/` +- Ships `skills/` + an `AGENTS.md` router + an optional `mcp/` server (`bin`). Add to root `tsconfig.json` `references`. + +## Findings that shape it + +- **microsoft/fluentui (web) pattern (verified):** a terse **router `AGENTS.md`** (critical rules → one golden template → anti-patterns → link tables → a Skills table → package layout) plus **verb-decomposed skills** canonical at `.agents/skills//SKILL.md`, **mirrored** at `.claude/skills//SKILL.md` as a one-line transclusion (`@../../../.agents/skills//SKILL.md`). `SKILL.md` = YAML frontmatter (`name`, `description`, `disable-model-invocation?`, `argument-hint`, `allowed-tools`) + imperative `## Steps` (numbered, fenced commands) + local `## Rules`/`## Anti-patterns`. Bulky knowledge offloaded to a `references/` subdir ("fat skill"). +- **Fluent Headless / Fluent Modern doc (received):** defines the strategy the authoring agent implements — ship behavior as stable unstyled primitives in **three forms** (`X` / `useX` / `renderX`), keep the styled (Modern/token) layer a swappable concern on top. The agent's output must follow this split. +- **x3-design token skills (received):** the `SKILL.md` format to mirror — YAML frontmatter (`name`, `description`, `argument-hint`) + a `| Field | Value |` table (Type/Category/Related) + a "Files in this skill" table + reference `*.yaml`. The token plugin's three skills (`core` primitives/generics, `interaction` hover/pressed derivation, `textstyle` bundles) are the canonical vocabulary the `token-lookup` skill resolves against. +- **This repo:** has a root `AGENTS.md` + `CLAUDE.md`; `apps/component-generator` is a **Gulp string-replacement scaffolder** emitting the **old compose/tokens** shape — i.e. it generates the *legacy anti-pattern*; the authoring skill must target the new flat three-forms `agentic-components` shape, not wrap the legacy generator. No `SKILL.md`/`.agents/` exist yet. + +## Proposed structure (PROVISIONAL — pending sources) + +``` +agentic-authoring/ + package.json # name, files[], bin (mcp), exports + AGENTS.md # package-scoped router (component-authoring focused) + skills/ # CANONICAL skills (shipped in the package) + new-component/SKILL.md # scaffold a new-style fluent RN component (the flat shape) + new-component/references/ # file-layout.md, platform-matrix.md, golden-template.md + token-lookup/SKILL.md # resolve semantic slot -> agentic-tokens value + pin-tests/SKILL.md # author analyzer-based pinning/snapshot tests + register-tester/SKILL.md # add FluentTester page + testPages. + e2e-scaffold/SKILL.md # PageObject + Spec + consts + changeset/SKILL.md lint-package/SKILL.md + instructions/ concepts.md authoring-rules.md # critical rules; compose/customize = anti-pattern + mcp/ server.ts # optional: list_tokens, resolve_token, scaffold_component, + # list_v1_components, get_component_spec, run_pin_tests +``` + +Plus repo-root discovery stubs (one-line transclusions — no duplication, exactly fluentui's pattern): + +``` +.agents/skills//SKILL.md -> @../../../packages/agentic/agentic-authoring/skills//SKILL.md +.claude/skills//SKILL.md -> @../../../packages/agentic/agentic-authoring/skills//SKILL.md +``` + +**MCP server: optional, later.** Skills alone (markdown + the agent's native file/bash tools) cover most authoring. Add the MCP server once `agentic-tokens`/`agentic-analyzer` exist, where deterministic repo-aware ops beat free-form tool use (`resolve_token`, `scaffold_component`, `get_component_spec`, `run_pin_tests`). Skills should *prefer* MCP tools when present, falling back to Bash/Read. + +## How the agent authors a component (`/new-component Badge`) + +1. **Load concepts** — read `agentic-concepts` (states/appearance/interactions/a11y/token refs) + the matching v1 spec. +2. **Map tokens** — translate v1 theme/token refs to `agentic-tokens` semantic slots (`token-lookup` / MCP `resolve_token`). +3. **Scaffold (Headless three-forms + Modern styling)** — emit the `agentic-components` file set: `useX` (behavior/ARIA) → `renderX` → `useXStyles` (tokens) → `X`, **no compose/customize, no inter-component deps**; declare `interaction.applies-to` in the token map; use `references/golden-template.md` (kept in sync with `agentic-components`). +4. **Register** — `register-tester` adds the FluentTester page + `testPages.`; add the new tsconfig to root `references`. +5. **Pin & test** — `pin-tests` uses `agentic-analyzer` (sentinel theme + RNTL) to snapshot resolved styles/tokens, a11y tree, multiplexed per platform. +6. **e2e-scaffold;** then `yarn change`, `yarn lint`, `yarn build`. + +## Dependencies & intersections + +- **agentic-concepts** — knowledge source (skills payload + v1→new mapping); `get_component_spec`/`list_v1_components` read it. Hard dep. +- **agentic-tokens** — target vocabulary; `token-lookup`/`resolve_token` resolve slots. Hard dep. +- **agentic-analyzer** — verification engine behind `pin-tests`/`run_pin_tests`. +- **agentic-components** — output target; `golden-template.md` mirrors its conventions (single source of truth for the shape). +- Supersedes `apps/component-generator` for new-style output (mark the Gulp/compose template a legacy anti-pattern so the agent doesn't regenerate the old style). + +## Open questions + +- **Sequencing:** thin without the other four — build with stubs/contracts early, fill as they land (it's the *last* useful workstream). +- **MCP vs skills duplication:** keep logic in one place (MCP server or shared lib); skills call it to avoid drift. +- **"Distributable" target:** shipping `skills/` + `AGENTS.md` in npm is easy; discoverability in a *consumer* repo needs an install step — `npx … init` or `postinstall` to copy/transclude into the consumer's `.claude`/`.agents`. +- **Multi-runtime:** Claude (`.claude/skills`) covered by transclusion; Copilot (`.github/instructions`) / Cursor (`.cursor/rules`) need generated adapters if in scope. + +## Phased plan + +0. **Contracts (parallel):** `package.json`, the `SKILL.md` contract, a stub `AGENTS.md` router, `authoring-rules.md` (compose/customize = anti-pattern), `golden-template.md` from the agreed `agentic-components` shape. No runtime deps. +1. **Skills (after concepts + components):** `new-component`, `register-tester`, `changeset`, `lint-package` as markdown skills using native Read/Write/Bash; add root `.agents/`+`.claude/` transclusion stubs. +2. **Token + test skills (after tokens + analyzer):** `token-lookup`, `pin-tests`, `e2e-scaffold`. +3. **Optional MCP server** sharing logic with the skills; add `bin`. +4. **Distribution:** `init`/`postinstall`, optional Copilot/Cursor adapters, README; root `references` + changeset. diff --git a/packages/agentic/agentic-components/PLAN.md b/packages/agentic/agentic-components/PLAN.md new file mode 100644 index 00000000000..bc50f85cad9 --- /dev/null +++ b/packages/agentic/agentic-components/PLAN.md @@ -0,0 +1,94 @@ +# @fluentui-react-native/agentic-components + +> Status: **Plan** (package not yet created). Part of the `packages/agentic/` modernization — see [`../STAGING.md`](../STAGING.md). +> +> ✅ Informed by **Fluent Headless / Fluent Modern** (`Fluent Headless and Fluent Modern.docx`, repo root) and the **x3-design token model** (via `agentic-tokens`). + +## Purpose + +A flat component library that recreates the v1 components in the modern Fluent structure, applying the **Fluent Headless → Fluent Modern** strategy to React Native: + +- **Headless layer** — stable, public, **unstyled** primitives that own behavior, ARIA/accessibility, keyboard handling, and semantic structure. **No pixels, no design props.** Each component ships **three forms** (matching the docx): the primitive component `X`, the stable hook `useX`, and the render function `renderX`. +- **Modern layer** — the headless primitive **plus tokens** (`agentic-tokens`), native-first and lightweight. Styling is a *swappable concern* layered on top of the same headless behavior. + +It deliberately avoids `compose`/`customize`/`buildProps`/`stylingSettings`. Components depend only on shared sibling dirs (`hooks/`, `tokens/`, `styles/`, `helpers/`) and `agentic-tokens` — **never on each other**. + +## Identity + +- **npm:** `@fluentui-react-native/agentic-components` +- **path:** `packages/agentic/agentic-components/` +- Add to root `tsconfig.json` `references`. Keep `.ios/.android/.win32/.macos/.windows` splits; never co-load multiple RN forks in one program (per `AGENTS.md`). + +## The pattern (Headless three-forms + Modern styling; NO compose/customize) + +For each component `X`, mirroring the headless `Button`/`useButton`/`renderButton` triple and v9's hook order: + +1. **`X.types.ts`** — `XProps` (RN-prop-extended + variant props) and `XState` (`ComponentState` analog: defaulted variants + computed flags + resolved `slots`/`rootProps` + interaction state). +2. **`useX(props, ref): XState`** — **HEADLESS behavior.** Normalizes props/defaults, runs shared behavior hooks (`usePressable`, `useControllableState`, focus), assembles accessibility props and semantic slots. **No styling, no token reads.** (Replaces v1 `useX.ts` + the `lookup` function — lookup logic becomes plain boolean flags on state.) +3. **`renderX(state): JSX` ** — **HEADLESS render.** Pure function over resolved slots; plain RN JSX (no slot interception / no `@jsxImportSource` pragma). +4. **`useXStyles(state)`** — **MODERN styling.** Reads `useTokens()` + the component-local `tokens/xTokens.ts` map (which declares `interaction.applies-to`), resolves generic tokens (incl. **derived** hover/pressed for the active rest token), and writes RN style objects onto `state..style`. Variant/state selection is plain `state.flag ? a : b`. +5. **`X.tsx`** — the **Modern primitive**: `forwardRef` shell calling `useX → useXStyles → renderX`. Also re-export the **unstyled** form (`useX` + `renderX`) for headless consumers. User `style`/props merged **last** via `helpers/mergeStyles`. +6. **`index.ts`** — barrel exporting all three forms + types. + +Because behavior (headless) is separated from styling (modern), the styled layer is swappable and the accessibility/keyboard/semantics stay identical regardless of styling — the core Fluent Headless thesis, applied to RN. + +Explicitly **not used:** `compose`, `.customize`, `.compose`, `buildProps`, `stylingSettings`, `useSlots`, `applyTokenLayers`, the `framework-base` jsx-runtime. Customization happens through the theme/tokens + ordinary props. + +## Proposed structure (flat) + +``` +agentic-components/ + package.json tsconfig.json babel.config.js jest.config.cjs eslint.config.js + src/ + index.ts # barrel: every component's X / useX / renderX + types + hooks/ usePressable.ts useFocusState.ts useControllableState.ts useTokens.ts index.ts + tokens/ buttonTokens.ts … # per-component map: variant×state -> generic names + interaction.applies-to + styles/ borderStyles.ts layoutStyles.ts textStyles.ts focusStyles.ts index.ts + helpers/ mergeStyles.ts mergeProps.ts getNativeProps.ts index.ts + Button/ Button.tsx useButton.ts renderButton.tsx useButtonStyles.ts Button.types.ts index.ts + Text/ Switch/ Checkbox/ Link/ … +``` + +`hooks/usePressable` wraps `@fluentui-react-native/interactive-hooks` behind one seam; `styles/*` are the RN analog of the old `@fluentui-react-native/tokens` mixins; `tokens/xTokens.ts` maps variants/states → `agentic-tokens` **generic names** and declares `interaction.applies-to: [...]` so the styles hook resolves derived hover/pressed for the active rest token. + +## Web/Headless → RN bridges + +| Fluent web | RN replacement (in shared dirs) | +|---|---| +| Griffel `makeStyles`/`mergeClasses` | RN style objects + `helpers/mergeStyles` (user style wins last) | +| `--gnrc-*` CSS vars + OKLCH runtime interaction | `useTokens()` generic object + **precomputed** interaction from `agentic-tokens` (RN has no runtime OKLCH) | +| `react-aria`/`react-tabster`, focusgroup roving tabindex | RN `accessibility*` props + `interactive-hooks` (+ `FocusZone`) behind `hooks/` | +| native `popover`/``/anchor positioning | RN equivalents / existing furn Callout/Popover primitives (headless behavior only) | +| `slot.always` + jsx-runtime | render RN primitives directly; optional `helpers/getNativeProps` for prop filtering | + +## First components (pattern-setters) + +1. **Button** — full variant/icon/pressable/focus stack; locks the three-forms file template. +2. **Text** — minimal (no interaction/slots); validates `styles/textStyles` against the `textstyle-*` bundles; scales the pattern down. +3. **Switch** (or Checkbox) — controlled/uncontrolled + toggle state (multi-state interaction: hover/press derive from the **active** rest token) + `Animated.Value`; proves the hardest model. + +## Dependencies & intersections + +- **agentic-tokens (Modern layer)** — `styles/`/`tokens/` consume its generic surface via `useTokens` and declare `interaction.applies-to`. Code against an interface + local stub so the swap-in is mechanical. +- **agentic-concepts** — supplies the per-component spec (states/appearance/interactions/a11y/token refs); contribute the three-forms template back as the canonical authoring recipe. +- **agentic-analyzer** — the parity gate: each new component must reproduce its v1 counterpart's resolved styles (incl. derived interaction values), a11y tree, and snapshots. +- **agentic-authoring** — the scaffolding agent emits exactly this three-forms file set (its "golden template"). +- Allowed leaf deps: `@fluentui-react-native/icon`, `interactive-hooks` (wrapped), `theme`. + +## Open questions + +- **`Text` flat-rule:** Button should render RN `Text` styled by shared `textStyles` (pure-flat) rather than import a sibling `Text` component — requires perfect typography parity from the `textstyle-*` bundles. +- **Headless vs Modern packaging:** one package exporting both unstyled (`useX`/`renderX`) and styled (`X`) forms, or split headless into its own entry/subpath later? (Recommend one package, two entry points: `.../headless` and the default Modern.) +- **Derived interaction parity:** the styles hook must request the right hover/pressed for the *active* rest token in multi-state components; confirm the analyzer pins these. +- Platform forks: keep per-platform files (`useButtonStyles.win32.ts`, ripple, two-tone focus, Win32 keyboard quirks). +- Animation parity (Switch `Animated.Value`) → `hooks/useSwitchAnimation`; confirm analyzer can pin animated styles. +- Memoization: replace v1 `buildProps`/`getMemoCache` with `useMemo` keyed on theme + state flags in `useXStyles`. + +## Phased plan + +0. **Scaffold & contracts:** create package, root `references`, empty `hooks/tokens/styles/helpers` with the `useTokens`/generic interface **stubbed**; publish the three-forms authoring-template doc (to concepts/authoring). +1. **Button exemplar** (X + useButton + renderButton + useButtonStyles) + shared dirs; wire analyzer pinning to assert parity with v1 `ButtonV1`; lock the template once green. +2. **Text + Switch/Checkbox;** extend shared dirs only as forced; pin against v1. +3. **agentic-tokens integration:** replace the stub with the real generic surface (rest + derived interaction); re-run pinning to confirm zero value drift. +4. **Long tail** (Link, Checkbox, FAB, CompoundButton, ToggleButton, …), each the same three-forms set + platform splits, gated by analyzer parity. +5. **Surface & docs:** finalize barrel, SPEC docs, register fluent-tester pages; hand the template to `agentic-authoring`. diff --git a/packages/agentic/agentic-concepts/PLAN.md b/packages/agentic/agentic-concepts/PLAN.md new file mode 100644 index 00000000000..11275601d50 --- /dev/null +++ b/packages/agentic/agentic-concepts/PLAN.md @@ -0,0 +1,81 @@ +# @fluentui-react-native/agentic-concepts + +> Status: **Plan** (package not yet created). Part of the `packages/agentic/` modernization — see [`../STAGING.md`](../STAGING.md). + +## Purpose + +The shared **vocabulary** of furn: a small, framework-agnostic set of TypeScript concept types, a machine-readable component **catalog**, and agent-facing **skill docs** that teach a human or an agent how to read the existing v1 (composition-framework) components and author new ones with consistent states, appearance, interactions, accessibility, and token usage. + +This is the dependency-light **leaf** package the other agentic workstreams build on. It owns *concept definitions, the component inventory, and prose*. It does **not** own runtime styling, the new token object (→ `agentic-tokens`), or the test harness (→ `agentic-analyzer`). + +## Identity + +- **npm:** `@fluentui-react-native/agentic-concepts` +- **path:** `packages/agentic/agentic-concepts/` +- **kit type:** types + docs (no runtime UI). Must be added to the root `tsconfig.json` `references`. + +## Findings that shape it + +Every v1 component follows one regular shape (`compose({ ...stylingSettings, slots, useRender })`) reducible to a small concept set: + +- **States** = interaction (`hovered|pressed|focused`, from `usePressableState`) × semantic (`disabled|checked|toggled|selected|required|visited`). These become *nested token layers* selected by a `lookup` predicate and `applyTokenLayers`. +- **Appearance** = `appearance` × `size` × `shape` × `labelPosition` (per-family enums; defaults are platform-specific). +- **Interactions** = press (`useOnPressWithFocus`), keyboard (`useKeyProps` → macOS `validKeys*` vs Win32/Windows `keyDownEvents`), toggle/selection (`useAsToggleWithEvent`, `useSelectedKey`), focus (`useViewCommandFocus`, `FocusZone`). +- **Accessibility** = roles (`button`/`checkbox`/`switch`/`radio`/`tab`/`link`), `getAccessibilityState`, label-from-first-string-child, `accessibilityActions`, pos/setSize. +- **Common token references** = color families (neutral/brand/compound/ghost/default/status foreground·background·stroke·icon·focus), typography variants (legacy `bodyStandard` **and** modern `body1` coexist), `globalTokens` ramps (size/corner/stroke/font), and the `borderStyles`/`layoutStyles`/`fontStyles` mixins. +- Current tests use bare `react-test-renderer` snapshots; there is **no** sentinel theme and `@testing-library/react-native` is not yet a dependency. + +## Proposed structure + +``` +agentic-concepts/ + package.json tsconfig.json README.md PLAN.md + src/ + index.ts # re-exports all concept types + states.ts # VisualState union; InteractionState / SemanticState (mirrors IPressableState) + appearance.ts # Appearance / ControlSize / ControlShape / LabelPosition + per-family aliases + interactions.ts # InteractionConcept (press/toggle/select/keyboard/focus) + accessibility.ts # A11yConcept (role/states/labelSource/actions/setSemantics) + tokens.ts # TokenReference catalog: maps current furn token usage -> x3-design --gnrc-* generics (background/foreground/stroke/surface roles+modifiers, scalars, textstyle bundles) + component-shape.ts # ConceptualComponent descriptor (the component "anatomy" type) + pinning.ts # PINNING-TEST SPEC: per-component scenario matrix + assertion contract (typed data) + catalog/ + components.json # machine-readable inventory: per component -> concepts/states/tokens it uses + skills/ # natural-language, agent-consumable (SKILL.md format aligned with agentic-authoring) + SKILL.md understanding-v1.md states.md appearance.md interactions.md + accessibility.md tokens.md authoring-checklist.md +``` + +**Types vs prose:** `src/` is the small, stable, importable vocabulary (kept a true leaf — re-state the unions rather than importing from `composition`/`use-tokens` to avoid cycles). `skills/` is the teaching payload `agentic-authoring` ships. `catalog/components.json` is the bridge both the analyzer (iterate) and the authoring agent (query) consume. + +## Key exports + +`VisualState`, `InteractionState`, `SemanticState`; `Appearance`/`ControlSize`/`ControlShape`/`LabelPosition`; `InteractionConcept`, `A11yConcept`, `TokenReference`, `ConceptualComponent`; and the pinning **spec** types (`PinScenario`, `PinAssertionContract`). + +## Pinning-tests ownership + +`agentic-concepts` owns the **spec** (a generated, capped per-component prop matrix + the assertion contract: a11y tree, resolved style/token set per slot, structural snapshot). `agentic-analyzer` owns the **mechanism** (sentinel theme, `@testing-library/react-native` harness, per-platform jest). `agentic-components` runs the same matrix to prove v1→new parity. Interim safety net: keep/extend existing `react-test-renderer` snapshots until the analyzer harness lands. + +## Dependencies & intersections + +- **No** dependency on framework/component/testing packages (stays a leaf). +- **agentic-tokens:** `TokenReference` here = the *old→new mapping input*; tokens defines the future object, concepts catalogs current usage. Share the **state vocabulary**. +- **agentic-analyzer:** concepts = spec/data; analyzer = mechanism. +- **agentic-components:** concepts is the authoring contract; new components satisfy the same `ConceptualComponent` + matrix. +- **agentic-authoring:** ships `skills/` as the agent payload (same `SKILL.md` format). + +## Open questions + +- Type duplication vs coupling (re-stating component unions risks drift → add a catalog-vs-source drift check, likely in analyzer). +- Encode per-platform concept deltas (Win32 two-tone focus, Android ripple) as explicit catalog data? (Recommend yes.) +- Matrix-explosion cap / "conceptually significant" pruning rule. +- Typography: map the legacy/v9 variants onto the x3-design `textstyle-*` bundles (`agentic-tokens` owns the taxonomy; concepts catalogs the mapping). Note interaction states are *derived* (rest token + delta), not enumerated — the catalog records rest tokens + which categories get `interaction.applies-to`. + +## Phased plan + +0. **Scaffold** package (types/docs only), add to root `references`, verify it joins `tsgo -b`. +1. **Concept types** (`states`/`appearance`/`interactions`/`accessibility`/`tokens`/`component-shape`). +2. **Component catalog** for the 7 studied families (Button, Checkbox, Switch, Radio/RadioGroup, Tab/TabList, Link, Text). +3. **Skill docs** (file-path-anchored examples). +4. **Pinning spec** (matrix + assertion contract as typed data); coordinate seam with analyzer. +5. **Integration & cross-checks** (consumers wire in; add catalog-vs-source drift check). diff --git a/packages/agentic/agentic-tokens/PLAN.md b/packages/agentic/agentic-tokens/PLAN.md new file mode 100644 index 00000000000..b3efa719b42 --- /dev/null +++ b/packages/agentic/agentic-tokens/PLAN.md @@ -0,0 +1,121 @@ +# @fluentui-react-native/agentic-tokens + +> Status: **Plan** (package not yet created). Part of the `packages/agentic/` modernization — see [`../STAGING.md`](../STAGING.md). +> +> ✅ **Sources received & incorporated.** This plan now adopts the **x3-design Fluent token model** (`~/dev/fluent-design/plugins/tokens/skills/{core,interaction,textstyle}/SKILL.md` + the `*.yaml` token files) and the **Fluent Headless / Fluent Modern** strategy (`Fluent Headless and Fluent Modern.docx`, repo root). `agentic-tokens` is the **Fluent Modern** styled layer for React Native. + +## Purpose + +A platform-neutral **semantic token layer** (the "Fluent Modern" tokens) that new headless components author against, instead of reaching into `theme.colors.*` and the static `globalTokens` JSON. It implements the x3-design two-layer model adapted to React Native: + +- **Primitives** (`prmt-*`) — raw, themeless base values (color stops, spacing steps, font sizes). Stable referenceable names only. +- **Generics** (`--gnrc-*`) — the **semantic layer** components consume: each maps a primitive to a role and carries light + dark values. Components consume generics, **never primitives**. + +## Identity + +- **npm:** `@fluentui-react-native/agentic-tokens` +- **path:** `packages/agentic/agentic-tokens/` +- Add to root `tsconfig.json` `references`. + +## The token model (adopted from x3-design) + +### Generic color tokens — `--gnrc-color-{variant}-{role}-{modifier}` + +In RN we expose these as a typed object (working convention: camelCase of the generic name, e.g. `colorBackgroundNeutralSubtle`). + +- **variant** (usage context): `surface`, `background`, `foreground`, `stroke`, `fixed` +- **role** (palette family): `neutral`, `brand`, `danger`, `success`, `warning` +- **modifier** (qualifier within role): + - background / stroke: `heavy`, `loud`, `soft`, `subtle`, `transparent`, `disabled` (role-dependent subset) + - foreground: `primary`, `secondary`, `tertiary`, `onloud`, `disabled` + - surface (neutral): `farther`, `far`, `near`, `nearer`, `translucent` + - stroke also: `focus-inner`, `focus-outer` + - fixed: `white`, `black` (theme-invariant) + +Examples: `--gnrc-color-background-neutral-subtle`, `--gnrc-color-foreground-brand-onloud`, `--gnrc-color-stroke-focus-outer`, `--gnrc-color-surface-neutral-translucent`. + +### Scalars — `--gnrc-{type}-{modifier}` + +- `--gnrc-font-weight-{regular|medium|semibold|bold}` (variable axis 420/550/600/625) +- `--gnrc-stroke-width-{thin|thick|thicker}` + +### Spacing — `--gnrc-spacing-{component|layout}-base-{step}` + +- `component-base-{50,100,150,200,250,300,400,500,600,700}` +- `layout-base-{100,200,400,450,500,600,700,800,1000,1200}` + +### Shadow — `--gnrc-shadow-{lowest|lower|low|high|higher|highest}` + +### Typography — text styles (`textstyle-{set}-{role}[-{size}][-strong]`) + +Text styles **bundle five generics** (`font-family`, `font-weight`, `font-size`, `line-height`, `letter-spacing`) — they cannot be a single token. Sets: `functional` (sans UI ramp), `content`, `content-expressive`, `content-editorial` (serif). Roles per `textstyle.yaml` (display/pagetitle/title/subtitle/body/caption/h1–h5/paragraph/…). `optical_size` axis (36 display / 8 body) resolves to null on static platform fonts (iOS SF Pro, Android Roboto) — relevant for RN. We expose each text style as a resolved `{ fontFamily, fontWeight, fontSize, lineHeight, letterSpacing }` object. + +> **Gap:** the x3-design generics do **not** yet define corner-radius tokens. furn currently uses `globalTokens.corner.*`. **Open decision** (below): keep a furn-local radius ramp until x3-design adds radius generics, or propose radius generics upstream. + +## Interaction states are DERIVED, not enumerated (key RN adaptation) + +The x3-design model does **not** ship `…Hover`/`…Pressed` slots. Hover/pressed are computed from the **rest** token via OKLCH channel deltas (`interaction-deltas.yaml`): `--lightness-{hover|press}` (light `-0.03/-0.06`, dark `+0.03/+0.06`) and `--alpha-{hover|press}` for transparent/translucent, with a lightness curve that doubles the delta as `L → 0.20`, and an **inverse rule** (flip sign for `loud`/`onloud`/`heavy` tokens). `disabled` and `focus` are excluded from the algorithm. + +**Web does this at runtime via OKLCH relative color. React Native cannot** (no relative-color/OKLCH at runtime) — so RN is a **"pre-compiled environment"** (the same bucket as iOS/Android/Figma in the skill). **Decision: `agentic-tokens` ships PRECOMPUTED hover/pressed values**, and the OKLCH derivation **algorithm lives in `agentic-analyzer`** (deltas + lightness curve + inverse rule) where it is used to **validate** that the precomputed values are correct. Therefore: + +- `agentic-tokens` exposes concrete precomputed interaction values (no runtime OKLCH). These are generated at build/theme-creation time; the generator reuses the analyzer's OKLCH implementation as a **build-time/dev dependency** so the *runtime* token output stays static with **zero analyzer dependency**, and there is a single source of the algorithm. +- `agentic-analyzer` re-derives the expected hover/pressed from the rest generics + `interaction-deltas` and asserts the shipped precomputed values match — a regression guard on both the rest tokens and the formula. +- Components declare which categories get interaction via an **`interaction.applies-to: [background, foreground, stroke]`** block (carried in each component's token map, see `agentic-components`). For a multi-state component (Selected/Checked/Expanded), hover/pressed derive from the **active rest token** for that state-axis value. +- API sketch: `tokens.color.backgroundNeutralSubtle` (rest) + `interactionState(token, 'hover'|'pressed')` returning the precomputed value; or a per-component resolved set keyed by `{state-axis × interaction-state}`. + +## Source of truth (decision) + +**Adopt the x3-design _structure_ (`prmt-`/`--gnrc-` naming, variant-role-modifier, scalars, textstyle bundles, derived interaction) but source the _values_ from the existing `@fluentui-react-native` themes and the token mappings already encoded in the v1 components** — i.e. project the current theme into the x3 generic surface rather than porting x3's `primitives.yaml`. The OLD→NEW table below is that projection. (Migrating the value base to x3 primitives later remains possible without changing the generic surface components author against.) + +## Producer & consumption + +- `createTokens(theme): CommonTokens` — resolves the full generic surface (rest values, light/dark) by **mapping from `theme.colors.*` / `theme.typography.*` / `globalTokens.*` per the OLD→NEW table**, and attaches the precomputed interaction variants for declared categories. Memoized per-theme (reuse `buildUseTokens`'s cache-by-theme-identity). +- `useTokens(): CommonTokens` over `useFluentTheme()` (no new provider). +- Components consume **generics only** (`tokens.color.foregroundNeutralPrimary`), never primitives, `theme.colors.*`, or `globalTokens.*`. + +## OLD → NEW mapping (furn v1 → x3 generics) + +| OLD (furn) | NEW generic | +|---|---| +| `colors.neutralForeground1` / legacy `buttonText` / `bodyText` | `color-foreground-neutral-primary` | +| `colors.neutralForeground2/3` | `color-foreground-neutral-secondary` / `-tertiary` | +| `colors.neutralForegroundDisabled` | `color-foreground-neutral-disabled` | +| `colors.neutralForegroundOnBrand` / `OnColor` | `color-foreground-{neutral|brand}-onloud` | +| `colors.neutralBackground1` / legacy `buttonBackground` / `defaultBackground` | `color-background-neutral-subtle` | +| `colors.brandBackground` (rest) | `color-background-brand-heavy` (Primary button rest) | +| `colors.brandBackgroundPressed` | *(derived from `background-brand-heavy` via press delta — not a slot)* | +| `colors.subtleBackground*` / `ghost*` | `color-background-neutral-transparent` (+ derived hover/press) | +| `colors.neutralStroke1/2/3` / `buttonBorder` | `color-stroke-neutral-{soft|subtle|loud}` | +| `colors.strokeFocus1` / `strokeFocus2` | `color-stroke-focus-inner` / `color-stroke-focus-outer` | +| `colors.redForeground1` (Checkbox required) | `color-foreground-danger-primary` | +| `variant: 'body1'` → `typography.variants.*` | `textstyle-functional-body-medium` (+ `-strong`) | +| `globalTokens.font.weight.semibold` | `font-weight-semibold` | +| `globalTokens.size80/120` (padding) | `spacing-component-base-{…}` | +| `globalTokens.stroke.width10/20` | `stroke-width-thin` / `stroke-width-thick` | +| `globalTokens.corner.radius*` | furn-local radius ramp **derived from current v1 component usage** (no x3 generic exists yet) | + +(Full crosswalk finalized during Stage 2; the `loud`/`heavy`/`onloud` inverse-rule names must be tracked so derived interaction uses the correct sign.) + +## Dependencies & intersections + +- **agentic-concepts:** shares the state vocabulary; its `TokenReference` catalog cites these generic names. The interaction model (rest + derived hover/press) replaces concepts' "state-suffixed slot" assumption. +- **agentic-analyzer:** `createTokens` is the sentinel injection point; the analyzer's reverse-map maps resolved values back to `--gnrc-*` names, and **must validate the precomputed interaction values** against the algorithm. Because hover/press are derived, the analyzer's pin tests catch both rest-token and delta-formula regressions. +- **agentic-components (Fluent Modern layer):** primary consumer via `useTokens()` + per-component `interaction.applies-to`. +- **agentic-authoring:** the generic taxonomy + the `interaction`/text-style skills are the vocabulary the authoring agent generates against; keep names 1:1 with the x3-design skills so guidance transfers. + +## Decisions (resolved) & remaining questions + +- ✅ **Source of truth** — adopt the x3 _structure_, map _values_ from the furn themes + v1 component token mappings (project-first; an x3-primitive value migration can follow later without changing the generic surface components author against). +- ✅ **Interaction** — ship **precomputed** values; the OKLCH algorithm lives in `agentic-analyzer` and validates them. The build-time generator reuses that implementation as a dev dependency, so runtime token output is static with **no analyzer dependency** and the algorithm has a single home. +- ✅ **Radius** — furn-local radius ramp **derived from current v1 component usage** (`globalTokens.corner.*`); revisit if x3 adds radius generics. +- ❓ **Object shape** — flat camelCase (`colorBackgroundNeutralSubtle`) vs nested (`color.background.neutral.subtle`). Recommend nested for authoring + a flat alias for ergonomics. +- ❓ **Theme-invariant + HC** — `fixed-white/black` stay invariant; map Win32 `PlatformColor`/high-contrast through `createTokens` per `theme.host`. + +## Phased plan + +1. **Primitives + generics types** — model `prmt-*` and `--gnrc-*` (color/scalar/spacing/shadow) as typed structures; bring in the text-style bundles. +2. **Producer (rest values)** — `createTokens(theme)` resolving every generic by mapping from `theme.colors/typography` + `globalTokens` + v1 component mappings (OLD→NEW table), light/dark; `useTokens()`. +3. **Precomputed interaction** — generate hover/pressed for declared categories using the OKLCH delta+curve+inverse implementation owned by `agentic-analyzer` (reused as a build-time dev dependency); ship the precomputed values; expose `interactionState(...)`. `agentic-analyzer` validates them against the algorithm. +4. **Text styles + radius** — resolve `textstyle-*` bundles (opsz → null on native fonts); settle radius (decision #3). +5. **Validation via analyzer** — sentinel theme asserts each generic resolves uniquely and each derived interaction value matches the algorithm; pin furn v1 equivalents. +6. **Adoption** — `agentic-components` authors against `useTokens()` + `interaction.applies-to`; feed the finalized taxonomy to `agentic-authoring`. From 7d1572753fc10ccd0010649ecc5aeea3a167ce61 Mon Sep 17 00:00:00 2001 From: Jason Morse Date: Thu, 11 Jun 2026 17:26:41 -0700 Subject: [PATCH 13/13] format updates --- packages/agentic/STAGING.md | 25 ++++++++------ packages/agentic/agentic-analyzer/PLAN.md | 10 +++--- packages/agentic/agentic-authoring/PLAN.md | 8 ++--- packages/agentic/agentic-components/PLAN.md | 18 +++++----- packages/agentic/agentic-concepts/PLAN.md | 8 ++--- packages/agentic/agentic-tokens/PLAN.md | 38 ++++++++++----------- 6 files changed, 56 insertions(+), 51 deletions(-) diff --git a/packages/agentic/STAGING.md b/packages/agentic/STAGING.md index bea4bd0fbe8..1456a472b8f 100644 --- a/packages/agentic/STAGING.md +++ b/packages/agentic/STAGING.md @@ -4,21 +4,21 @@ This is the unified execution plan for the five new packages under `packages/age ## The five packages -| Package | Path | Role | -|---|---|---| -| [`agentic-concepts`](./agentic-concepts/PLAN.md) | `packages/agentic/agentic-concepts/` | **Leaf vocabulary** — concept types, component catalog, agent skill docs, the pinning **spec** | -| [`agentic-tokens`](./agentic-tokens/PLAN.md) | `packages/agentic/agentic-tokens/` | **Fluent Modern token layer** — x3-design primitives→generics; `createTokens(theme)`, `useTokens()`, derived interaction | -| [`agentic-analyzer`](./agentic-analyzer/PLAN.md) | `packages/agentic/agentic-analyzer/` | **Refactor safety net** — sentinel theme + reverse-map, RNTL harness, pinning, per-platform jest | -| [`agentic-components`](./agentic-components/PLAN.md) | `packages/agentic/agentic-components/` | **Fluent Headless + Modern components** — three forms (`X`/`useX`/`renderX`), no compose/customize | -| [`agentic-authoring`](./agentic-authoring/PLAN.md) | `packages/agentic/agentic-authoring/` | **Distributable agent + skills (+ optional MCP)** — sits on top of all four | +| Package | Path | Role | +| ---------------------------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| [`agentic-concepts`](./agentic-concepts/PLAN.md) | `packages/agentic/agentic-concepts/` | **Leaf vocabulary** — concept types, component catalog, agent skill docs, the pinning **spec** | +| [`agentic-tokens`](./agentic-tokens/PLAN.md) | `packages/agentic/agentic-tokens/` | **Fluent Modern token layer** — x3-design primitives→generics; `createTokens(theme)`, `useTokens()`, derived interaction | +| [`agentic-analyzer`](./agentic-analyzer/PLAN.md) | `packages/agentic/agentic-analyzer/` | **Refactor safety net** — sentinel theme + reverse-map, RNTL harness, pinning, per-platform jest | +| [`agentic-components`](./agentic-components/PLAN.md) | `packages/agentic/agentic-components/` | **Fluent Headless + Modern components** — three forms (`X`/`useX`/`renderX`), no compose/customize | +| [`agentic-authoring`](./agentic-authoring/PLAN.md) | `packages/agentic/agentic-authoring/` | **Distributable agent + skills (+ optional MCP)** — sits on top of all four | ✅ **Both previously-locked sources received & incorporated:** `Fluent Headless and Fluent Modern.docx` (repo root) defines the Headless→Modern strategy and the three-forms component model; the **x3-design token skills** (`~/dev/fluent-design/plugins/tokens/skills/{core,interaction,textstyle}`) define the primitives→generics token model now adopted by `agentic-tokens`. ## How they intersect (the seams) -- **State vocabulary** is defined once in `agentic-concepts`. In `agentic-tokens` interaction states (hover/pressed) are **derived from rest generics** (OKLCH deltas, precomputed for RN), *not* enumerated as suffixed slots — components declare `interaction.applies-to` per category. +- **State vocabulary** is defined once in `agentic-concepts`. In `agentic-tokens` interaction states (hover/pressed) are **derived from rest generics** (OKLCH deltas, precomputed for RN), _not_ enumerated as suffixed slots — components declare `interaction.applies-to` per category. - **Pinning** splits: `agentic-concepts` = the **spec** (per-component scenario matrix + assertion contract); `agentic-analyzer` = the **mechanism** (sentinel theme, RNTL, per-platform jest); `agentic-components` = runs the same matrix to prove **v1→new parity**. Because interaction is derived, analyzer pins catch both rest-token and delta-formula regressions. -- **Token migration** is a chain: `agentic-concepts` catalogs *current* usage → `agentic-tokens` maps it to the x3-design `--gnrc-*` generics → `agentic-analyzer`'s reverse-map *proves* resolved values are preserved → `agentic-components` consumes via `useTokens()`. +- **Token migration** is a chain: `agentic-concepts` catalogs _current_ usage → `agentic-tokens` maps it to the x3-design `--gnrc-*` generics → `agentic-analyzer`'s reverse-map _proves_ resolved values are preserved → `agentic-components` consumes via `useTokens()`. - **Authoring** ships `agentic-concepts`' skill docs (in the x3-design `SKILL.md` format), generates the three-forms Headless component + Modern token styling, uses `agentic-tokens`' generic vocabulary, and drives `agentic-analyzer` for pin-tests. ## Dependency graph @@ -45,23 +45,28 @@ Key principle: **pin v1 behavior BEFORE refactoring anything.** The analyzer + c ## Staged execution ### Stage 0 — Scaffolding & contracts (all packages, parallel) + Create all five package folders with `package.json` + `tsconfig.json`, add to root `references`, confirm they join `tsgo -b` as empty packages. Lock the shared contracts: the **state vocabulary** (`agentic-concepts`), the `CommonTokens` **interface** (`agentic-tokens`, provisional), the pinning **assertion contract** (concepts ↔ analyzer seam), and the component **file-template** (`agentic-components` ↔ `agentic-authoring` golden template). ### Stage 1 — Foundation: concepts + analyzer harness + - `agentic-concepts`: concept types, component catalog (7 families), skill docs, pinning spec. - `agentic-analyzer`: sentinel theme + reverse-map (theme namespace), RNTL `renderWithTheme`, extraction helpers; then `globalTokens` sentinel via jest mock. -- **Milestone:** baseline-pin the existing v1 components (value + semantic snapshots) — the safety net is live *before* any refactor. +- **Milestone:** baseline-pin the existing v1 components (value + semantic snapshots) — the safety net is live _before_ any refactor. ### Stage 2 — Tokens (Fluent Modern layer) + - `agentic-tokens`: model `prmt-*` primitives + `--gnrc-*` generics (color `variant-role-modifier`, scalars, spacing, shadow, `textstyle-*` bundles) → `createTokens(theme)` producer (rest values, light/dark; HC/PlatformColor via `theme.host`) → JS port of the OKLCH **derived interaction** (deltas + lightness curve + inverse rule), precomputed for RN → `useTokens()` + the furn→generic crosswalk. - Resolve the open decisions: primitives source-of-truth (port x3 vs project existing theme), interaction precompute mechanism, radius ramp (no x3 generic yet). - **Milestone:** analyzer validates every generic resolves uniquely and every derived hover/pressed matches the algorithm; pin the v1 components' equivalent token references. ### Stage 3 — New components (pattern-setters) + - `agentic-components`: build **Button** end-to-end as the three forms (`Button`/`useButton`/`renderButton` + `useButtonStyles`) + the shared `hooks/`/`tokens/`/`styles/`/`helpers/`; gate on analyzer parity with `ButtonV1`. Then **Text** + **Switch/Checkbox**. Integrate the real `agentic-tokens` (swap the stub; rest + derived interaction); re-run pinning to confirm zero value drift. - **Milestone:** Button/Text/Switch reach pinned parity with their v1 counterparts; the three-forms template is locked. ### Stage 4 — Long tail + authoring + - `agentic-components`: migrate Link, Checkbox, FAB, CompoundButton, ToggleButton, … each as the same file set + platform splits, gated by analyzer parity. - `agentic-authoring`: ship `new-component`/`register-tester`/`changeset`/`lint-package` skills (in the x3-design `SKILL.md` format) + `.agents`+`.claude` transclusion stubs; then `token-lookup`/`pin-tests`/`e2e-scaffold`; then the optional MCP server; then distribution (`init`/`postinstall`, multi-runtime adapters). - **Milestone:** an agent can scaffold a new flat component end-to-end, with pinning, from the skills/MCP. diff --git a/packages/agentic/agentic-analyzer/PLAN.md b/packages/agentic/agentic-analyzer/PLAN.md index d92cb228105..71bc1a0e1d7 100644 --- a/packages/agentic/agentic-analyzer/PLAN.md +++ b/packages/agentic/agentic-analyzer/PLAN.md @@ -8,7 +8,7 @@ A test/analysis toolkit that lets us **safely refactor** v1 components by: 1. building a **sentinel theme** whose every leaf value is unique, 2. rendering components with **`@testing-library/react-native`** to capture accessibility trees, computed styles, and snapshots, and -3. **reverse-mapping** resolved style values back to the exact theme/token slot they came from — so a refactor that changes *which* token feeds a style is caught even when the final pixel value is unchanged. +3. **reverse-mapping** resolved style values back to the exact theme/token slot they came from — so a refactor that changes _which_ token feeds a style is caught even when the final pixel value is unchanged. Plus a strategy for **multiplexing jest per platform**. @@ -29,9 +29,9 @@ Plus a strategy for **multiplexing jest per platform**. 1. **Sentinel theme + reverse map** — `createSentinelTheme(base?)` clones a real `Theme`, replacing every leaf with a unique type-valid sentinel (colors → reserved unique hex; spacing → unique `'NNNpx'`; numeric sizes/shadows → reserved integers; strings → reserved-but-valid pool), emitting a `SentinelMap: value → "colors.buttonBackground" | "spacing.m" | …`. `createSentinelGlobalTokens()` + a jest mock factory for `@fluentui-react-native/theme-tokens` covers the static namespace. `resolveStyleToSemantic(style)` walks a computed RN style and substitutes sentinels with semantic names. 2. **testing-library helpers** — `renderWithTheme(el, {theme?, platform?})`, `getAccessibilityTree(result)`, `getComputedStyles(result, query)`, `snapshotSemantic(result)` (snapshot with sentinel→semantic substitution; stable across pixel changes, sensitive to slot-source changes). -3. **Pinning** — `pinComponent(Component, scenarios)` producing **dual** snapshots: a *value* snapshot (catches visual regressions) + a *semantic* snapshot (catches silent token-source swaps). Drives the v1 state matrix (hovered/pressed/disabled/checked via `.customize`/state layers). +3. **Pinning** — `pinComponent(Component, scenarios)` producing **dual** snapshots: a _value_ snapshot (catches visual regressions) + a _semantic_ snapshot (catches silent token-source swaps). Drives the v1 state matrix (hovered/pressed/disabled/checked via `.customize`/state layers). 4. **Per-platform jest multiplexing** — `makeJestConfig(platform)` that takes the platform from `FURN_JEST_PLATFORM` (falling back to `furn.jestPlatform`), and a `multiplex` runner that, for a `furn.jestPlatforms: [...]` array, spawns one jest process per platform with platform-suffixed snapshot dirs (preserving the one-platform-per-process model the preset requires — and respecting the AGENTS.md "no multiple RN forks in one program" rule). -5. **OKLCH interaction algorithm (home + validator).** A JS port of the x3-design hover/pressed derivation — `--lightness-{hover,press}`/`--alpha-{hover,press}` deltas, the lightness curve `1 + clamp(0, (0.40 - L)/0.20, 1)`, and the `loud`/`heavy`/`onloud` inverse rule (per the `tokens-interaction` skill). This is the **single home** of the algorithm. Two consumers: (a) `agentic-analyzer` uses it to **validate** that `agentic-tokens`' shipped precomputed hover/pressed values match what the algorithm produces from the rest generics — a regression guard on both rest tokens and the formula; (b) `agentic-tokens`' build-time generator imports it (dev dependency only) to *produce* those precomputed values, so the runtime token output stays static and analyzer-free. Pin tests assert solid/inverse/transparent cases against the worked examples in the skill. +5. **OKLCH interaction algorithm (home + validator).** A JS port of the x3-design hover/pressed derivation — `--lightness-{hover,press}`/`--alpha-{hover,press}` deltas, the lightness curve `1 + clamp(0, (0.40 - L)/0.20, 1)`, and the `loud`/`heavy`/`onloud` inverse rule (per the `tokens-interaction` skill). This is the **single home** of the algorithm. Two consumers: (a) `agentic-analyzer` uses it to **validate** that `agentic-tokens`' shipped precomputed hover/pressed values match what the algorithm produces from the rest generics — a regression guard on both rest tokens and the formula; (b) `agentic-tokens`' build-time generator imports it (dev dependency only) to _produce_ those precomputed values, so the runtime token output stays static and analyzer-free. Pin tests assert solid/inverse/transparent cases against the worked examples in the skill. ## Proposed structure @@ -51,7 +51,7 @@ agentic-analyzer/ ## Dependencies & intersections -- **agentic-concepts:** concepts owns *what to pin* (component catalog + scenario matrix + assertion contract); analyzer owns the *machinery* those specs call. +- **agentic-concepts:** concepts owns _what to pin_ (component catalog + scenario matrix + assertion contract); analyzer owns the _machinery_ those specs call. - **agentic-tokens:** analyzer's reverse map is the bridge proving a refactor from old refs → x3-design `--gnrc-*` generics preserves resolved values. `createTokens` is the sentinel injection point. Because hover/pressed are **derived** (OKLCH deltas, precomputed for RN), the analyzer must also assert each derived interaction value matches the algorithm — so pins catch both rest-token and delta-formula regressions. - **agentic-components:** provides the parity gate — new components must reproduce v1's pinned a11y tree / styles / snapshots. - Internal: reuse `Theme`/`useTheme` (theme-types), `ThemeProvider` (theme); may supersede `test-tools`' `mockTheme` as the sentinel base. @@ -69,7 +69,7 @@ agentic-analyzer/ 1. **Scaffold + deps:** create package, add `@testing-library/react-native`, get a trivial `renderWithTheme` passing for one component (Button, ios) under the existing preset. 2. **Sentinel theme + reverse map** over the theme namespace; prove `resolveStyleToSemantic` round-trips on a real component. -2b. **OKLCH interaction module** (`interaction/`) — port the deltas + lightness curve + inverse rule; unit-test against the skill's worked examples. Land this early: `agentic-tokens`' Stage-2 build depends on it to precompute hover/pressed, and the analyzer uses it to validate them. + 2b. **OKLCH interaction module** (`interaction/`) — port the deltas + lightness curve + inverse rule; unit-test against the skill's worked examples. Land this early: `agentic-tokens`' Stage-2 build depends on it to precompute hover/pressed, and the analyzer uses it to validate them. 3. **globalTokens sentinel + jest mock;** extend reverse map to `globalTokens.*`. 4. **Extraction + semantic snapshots** (`getAccessibilityTree`/`getComputedStyles`/`snapshotSemantic`). 5. **Pinning API + state matrix;** hand off to `agentic-concepts` to author per-component specs. diff --git a/packages/agentic/agentic-authoring/PLAN.md b/packages/agentic/agentic-authoring/PLAN.md index 9158983c572..c3bb8e51e02 100644 --- a/packages/agentic/agentic-authoring/PLAN.md +++ b/packages/agentic/agentic-authoring/PLAN.md @@ -21,7 +21,7 @@ A distributable bundle of agent **skills**, **instructions**, and an optional ** - **microsoft/fluentui (web) pattern (verified):** a terse **router `AGENTS.md`** (critical rules → one golden template → anti-patterns → link tables → a Skills table → package layout) plus **verb-decomposed skills** canonical at `.agents/skills//SKILL.md`, **mirrored** at `.claude/skills//SKILL.md` as a one-line transclusion (`@../../../.agents/skills//SKILL.md`). `SKILL.md` = YAML frontmatter (`name`, `description`, `disable-model-invocation?`, `argument-hint`, `allowed-tools`) + imperative `## Steps` (numbered, fenced commands) + local `## Rules`/`## Anti-patterns`. Bulky knowledge offloaded to a `references/` subdir ("fat skill"). - **Fluent Headless / Fluent Modern doc (received):** defines the strategy the authoring agent implements — ship behavior as stable unstyled primitives in **three forms** (`X` / `useX` / `renderX`), keep the styled (Modern/token) layer a swappable concern on top. The agent's output must follow this split. - **x3-design token skills (received):** the `SKILL.md` format to mirror — YAML frontmatter (`name`, `description`, `argument-hint`) + a `| Field | Value |` table (Type/Category/Related) + a "Files in this skill" table + reference `*.yaml`. The token plugin's three skills (`core` primitives/generics, `interaction` hover/pressed derivation, `textstyle` bundles) are the canonical vocabulary the `token-lookup` skill resolves against. -- **This repo:** has a root `AGENTS.md` + `CLAUDE.md`; `apps/component-generator` is a **Gulp string-replacement scaffolder** emitting the **old compose/tokens** shape — i.e. it generates the *legacy anti-pattern*; the authoring skill must target the new flat three-forms `agentic-components` shape, not wrap the legacy generator. No `SKILL.md`/`.agents/` exist yet. +- **This repo:** has a root `AGENTS.md` + `CLAUDE.md`; `apps/component-generator` is a **Gulp string-replacement scaffolder** emitting the **old compose/tokens** shape — i.e. it generates the _legacy anti-pattern_; the authoring skill must target the new flat three-forms `agentic-components` shape, not wrap the legacy generator. No `SKILL.md`/`.agents/` exist yet. ## Proposed structure (PROVISIONAL — pending sources) @@ -49,7 +49,7 @@ Plus repo-root discovery stubs (one-line transclusions — no duplication, exact .claude/skills//SKILL.md -> @../../../packages/agentic/agentic-authoring/skills//SKILL.md ``` -**MCP server: optional, later.** Skills alone (markdown + the agent's native file/bash tools) cover most authoring. Add the MCP server once `agentic-tokens`/`agentic-analyzer` exist, where deterministic repo-aware ops beat free-form tool use (`resolve_token`, `scaffold_component`, `get_component_spec`, `run_pin_tests`). Skills should *prefer* MCP tools when present, falling back to Bash/Read. +**MCP server: optional, later.** Skills alone (markdown + the agent's native file/bash tools) cover most authoring. Add the MCP server once `agentic-tokens`/`agentic-analyzer` exist, where deterministic repo-aware ops beat free-form tool use (`resolve_token`, `scaffold_component`, `get_component_spec`, `run_pin_tests`). Skills should _prefer_ MCP tools when present, falling back to Bash/Read. ## How the agent authors a component (`/new-component Badge`) @@ -70,9 +70,9 @@ Plus repo-root discovery stubs (one-line transclusions — no duplication, exact ## Open questions -- **Sequencing:** thin without the other four — build with stubs/contracts early, fill as they land (it's the *last* useful workstream). +- **Sequencing:** thin without the other four — build with stubs/contracts early, fill as they land (it's the _last_ useful workstream). - **MCP vs skills duplication:** keep logic in one place (MCP server or shared lib); skills call it to avoid drift. -- **"Distributable" target:** shipping `skills/` + `AGENTS.md` in npm is easy; discoverability in a *consumer* repo needs an install step — `npx … init` or `postinstall` to copy/transclude into the consumer's `.claude`/`.agents`. +- **"Distributable" target:** shipping `skills/` + `AGENTS.md` in npm is easy; discoverability in a _consumer_ repo needs an install step — `npx … init` or `postinstall` to copy/transclude into the consumer's `.claude`/`.agents`. - **Multi-runtime:** Claude (`.claude/skills`) covered by transclusion; Copilot (`.github/instructions`) / Cursor (`.cursor/rules`) need generated adapters if in scope. ## Phased plan diff --git a/packages/agentic/agentic-components/PLAN.md b/packages/agentic/agentic-components/PLAN.md index bc50f85cad9..79f21469b58 100644 --- a/packages/agentic/agentic-components/PLAN.md +++ b/packages/agentic/agentic-components/PLAN.md @@ -9,7 +9,7 @@ A flat component library that recreates the v1 components in the modern Fluent structure, applying the **Fluent Headless → Fluent Modern** strategy to React Native: - **Headless layer** — stable, public, **unstyled** primitives that own behavior, ARIA/accessibility, keyboard handling, and semantic structure. **No pixels, no design props.** Each component ships **three forms** (matching the docx): the primitive component `X`, the stable hook `useX`, and the render function `renderX`. -- **Modern layer** — the headless primitive **plus tokens** (`agentic-tokens`), native-first and lightweight. Styling is a *swappable concern* layered on top of the same headless behavior. +- **Modern layer** — the headless primitive **plus tokens** (`agentic-tokens`), native-first and lightweight. Styling is a _swappable concern_ layered on top of the same headless behavior. It deliberately avoids `compose`/`customize`/`buildProps`/`stylingSettings`. Components depend only on shared sibling dirs (`hooks/`, `tokens/`, `styles/`, `helpers/`) and `agentic-tokens` — **never on each other**. @@ -53,13 +53,13 @@ agentic-components/ ## Web/Headless → RN bridges -| Fluent web | RN replacement (in shared dirs) | -|---|---| -| Griffel `makeStyles`/`mergeClasses` | RN style objects + `helpers/mergeStyles` (user style wins last) | -| `--gnrc-*` CSS vars + OKLCH runtime interaction | `useTokens()` generic object + **precomputed** interaction from `agentic-tokens` (RN has no runtime OKLCH) | -| `react-aria`/`react-tabster`, focusgroup roving tabindex | RN `accessibility*` props + `interactive-hooks` (+ `FocusZone`) behind `hooks/` | -| native `popover`/``/anchor positioning | RN equivalents / existing furn Callout/Popover primitives (headless behavior only) | -| `slot.always` + jsx-runtime | render RN primitives directly; optional `helpers/getNativeProps` for prop filtering | +| Fluent web | RN replacement (in shared dirs) | +| -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| Griffel `makeStyles`/`mergeClasses` | RN style objects + `helpers/mergeStyles` (user style wins last) | +| `--gnrc-*` CSS vars + OKLCH runtime interaction | `useTokens()` generic object + **precomputed** interaction from `agentic-tokens` (RN has no runtime OKLCH) | +| `react-aria`/`react-tabster`, focusgroup roving tabindex | RN `accessibility*` props + `interactive-hooks` (+ `FocusZone`) behind `hooks/` | +| native `popover`/``/anchor positioning | RN equivalents / existing furn Callout/Popover primitives (headless behavior only) | +| `slot.always` + jsx-runtime | render RN primitives directly; optional `helpers/getNativeProps` for prop filtering | ## First components (pattern-setters) @@ -79,7 +79,7 @@ agentic-components/ - **`Text` flat-rule:** Button should render RN `Text` styled by shared `textStyles` (pure-flat) rather than import a sibling `Text` component — requires perfect typography parity from the `textstyle-*` bundles. - **Headless vs Modern packaging:** one package exporting both unstyled (`useX`/`renderX`) and styled (`X`) forms, or split headless into its own entry/subpath later? (Recommend one package, two entry points: `.../headless` and the default Modern.) -- **Derived interaction parity:** the styles hook must request the right hover/pressed for the *active* rest token in multi-state components; confirm the analyzer pins these. +- **Derived interaction parity:** the styles hook must request the right hover/pressed for the _active_ rest token in multi-state components; confirm the analyzer pins these. - Platform forks: keep per-platform files (`useButtonStyles.win32.ts`, ripple, two-tone focus, Win32 keyboard quirks). - Animation parity (Switch `Animated.Value`) → `hooks/useSwitchAnimation`; confirm analyzer can pin animated styles. - Memoization: replace v1 `buildProps`/`getMemoCache` with `useMemo` keyed on theme + state flags in `useXStyles`. diff --git a/packages/agentic/agentic-concepts/PLAN.md b/packages/agentic/agentic-concepts/PLAN.md index 11275601d50..c324bb6f88a 100644 --- a/packages/agentic/agentic-concepts/PLAN.md +++ b/packages/agentic/agentic-concepts/PLAN.md @@ -6,7 +6,7 @@ The shared **vocabulary** of furn: a small, framework-agnostic set of TypeScript concept types, a machine-readable component **catalog**, and agent-facing **skill docs** that teach a human or an agent how to read the existing v1 (composition-framework) components and author new ones with consistent states, appearance, interactions, accessibility, and token usage. -This is the dependency-light **leaf** package the other agentic workstreams build on. It owns *concept definitions, the component inventory, and prose*. It does **not** own runtime styling, the new token object (→ `agentic-tokens`), or the test harness (→ `agentic-analyzer`). +This is the dependency-light **leaf** package the other agentic workstreams build on. It owns _concept definitions, the component inventory, and prose_. It does **not** own runtime styling, the new token object (→ `agentic-tokens`), or the test harness (→ `agentic-analyzer`). ## Identity @@ -18,7 +18,7 @@ This is the dependency-light **leaf** package the other agentic workstreams buil Every v1 component follows one regular shape (`compose({ ...stylingSettings, slots, useRender })`) reducible to a small concept set: -- **States** = interaction (`hovered|pressed|focused`, from `usePressableState`) × semantic (`disabled|checked|toggled|selected|required|visited`). These become *nested token layers* selected by a `lookup` predicate and `applyTokenLayers`. +- **States** = interaction (`hovered|pressed|focused`, from `usePressableState`) × semantic (`disabled|checked|toggled|selected|required|visited`). These become _nested token layers_ selected by a `lookup` predicate and `applyTokenLayers`. - **Appearance** = `appearance` × `size` × `shape` × `labelPosition` (per-family enums; defaults are platform-specific). - **Interactions** = press (`useOnPressWithFocus`), keyboard (`useKeyProps` → macOS `validKeys*` vs Win32/Windows `keyDownEvents`), toggle/selection (`useAsToggleWithEvent`, `useSelectedKey`), focus (`useViewCommandFocus`, `FocusZone`). - **Accessibility** = roles (`button`/`checkbox`/`switch`/`radio`/`tab`/`link`), `getAccessibilityState`, label-from-first-string-child, `accessibilityActions`, pos/setSize. @@ -59,7 +59,7 @@ agentic-concepts/ ## Dependencies & intersections - **No** dependency on framework/component/testing packages (stays a leaf). -- **agentic-tokens:** `TokenReference` here = the *old→new mapping input*; tokens defines the future object, concepts catalogs current usage. Share the **state vocabulary**. +- **agentic-tokens:** `TokenReference` here = the _old→new mapping input_; tokens defines the future object, concepts catalogs current usage. Share the **state vocabulary**. - **agentic-analyzer:** concepts = spec/data; analyzer = mechanism. - **agentic-components:** concepts is the authoring contract; new components satisfy the same `ConceptualComponent` + matrix. - **agentic-authoring:** ships `skills/` as the agent payload (same `SKILL.md` format). @@ -69,7 +69,7 @@ agentic-concepts/ - Type duplication vs coupling (re-stating component unions risks drift → add a catalog-vs-source drift check, likely in analyzer). - Encode per-platform concept deltas (Win32 two-tone focus, Android ripple) as explicit catalog data? (Recommend yes.) - Matrix-explosion cap / "conceptually significant" pruning rule. -- Typography: map the legacy/v9 variants onto the x3-design `textstyle-*` bundles (`agentic-tokens` owns the taxonomy; concepts catalogs the mapping). Note interaction states are *derived* (rest token + delta), not enumerated — the catalog records rest tokens + which categories get `interaction.applies-to`. +- Typography: map the legacy/v9 variants onto the x3-design `textstyle-*` bundles (`agentic-tokens` owns the taxonomy; concepts catalogs the mapping). Note interaction states are _derived_ (rest token + delta), not enumerated — the catalog records rest tokens + which categories get `interaction.applies-to`. ## Phased plan diff --git a/packages/agentic/agentic-tokens/PLAN.md b/packages/agentic/agentic-tokens/PLAN.md index b3efa719b42..343028b6942 100644 --- a/packages/agentic/agentic-tokens/PLAN.md +++ b/packages/agentic/agentic-tokens/PLAN.md @@ -58,7 +58,7 @@ The x3-design model does **not** ship `…Hover`/`…Pressed` slots. Hover/press **Web does this at runtime via OKLCH relative color. React Native cannot** (no relative-color/OKLCH at runtime) — so RN is a **"pre-compiled environment"** (the same bucket as iOS/Android/Figma in the skill). **Decision: `agentic-tokens` ships PRECOMPUTED hover/pressed values**, and the OKLCH derivation **algorithm lives in `agentic-analyzer`** (deltas + lightness curve + inverse rule) where it is used to **validate** that the precomputed values are correct. Therefore: -- `agentic-tokens` exposes concrete precomputed interaction values (no runtime OKLCH). These are generated at build/theme-creation time; the generator reuses the analyzer's OKLCH implementation as a **build-time/dev dependency** so the *runtime* token output stays static with **zero analyzer dependency**, and there is a single source of the algorithm. +- `agentic-tokens` exposes concrete precomputed interaction values (no runtime OKLCH). These are generated at build/theme-creation time; the generator reuses the analyzer's OKLCH implementation as a **build-time/dev dependency** so the _runtime_ token output stays static with **zero analyzer dependency**, and there is a single source of the algorithm. - `agentic-analyzer` re-derives the expected hover/pressed from the rest generics + `interaction-deltas` and asserts the shipped precomputed values match — a regression guard on both the rest tokens and the formula. - Components declare which categories get interaction via an **`interaction.applies-to: [background, foreground, stroke]`** block (carried in each component's token map, see `agentic-components`). For a multi-state component (Selected/Checked/Expanded), hover/pressed derive from the **active rest token** for that state-axis value. - API sketch: `tokens.color.backgroundNeutralSubtle` (rest) + `interactionState(token, 'hover'|'pressed')` returning the precomputed value; or a per-component resolved set keyed by `{state-axis × interaction-state}`. @@ -75,24 +75,24 @@ The x3-design model does **not** ship `…Hover`/`…Pressed` slots. Hover/press ## OLD → NEW mapping (furn v1 → x3 generics) -| OLD (furn) | NEW generic | -|---|---| -| `colors.neutralForeground1` / legacy `buttonText` / `bodyText` | `color-foreground-neutral-primary` | -| `colors.neutralForeground2/3` | `color-foreground-neutral-secondary` / `-tertiary` | -| `colors.neutralForegroundDisabled` | `color-foreground-neutral-disabled` | -| `colors.neutralForegroundOnBrand` / `OnColor` | `color-foreground-{neutral|brand}-onloud` | -| `colors.neutralBackground1` / legacy `buttonBackground` / `defaultBackground` | `color-background-neutral-subtle` | -| `colors.brandBackground` (rest) | `color-background-brand-heavy` (Primary button rest) | -| `colors.brandBackgroundPressed` | *(derived from `background-brand-heavy` via press delta — not a slot)* | -| `colors.subtleBackground*` / `ghost*` | `color-background-neutral-transparent` (+ derived hover/press) | -| `colors.neutralStroke1/2/3` / `buttonBorder` | `color-stroke-neutral-{soft|subtle|loud}` | -| `colors.strokeFocus1` / `strokeFocus2` | `color-stroke-focus-inner` / `color-stroke-focus-outer` | -| `colors.redForeground1` (Checkbox required) | `color-foreground-danger-primary` | -| `variant: 'body1'` → `typography.variants.*` | `textstyle-functional-body-medium` (+ `-strong`) | -| `globalTokens.font.weight.semibold` | `font-weight-semibold` | -| `globalTokens.size80/120` (padding) | `spacing-component-base-{…}` | -| `globalTokens.stroke.width10/20` | `stroke-width-thin` / `stroke-width-thick` | -| `globalTokens.corner.radius*` | furn-local radius ramp **derived from current v1 component usage** (no x3 generic exists yet) | +| OLD (furn) | NEW generic | +| ----------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -------------- | ------ | +| `colors.neutralForeground1` / legacy `buttonText` / `bodyText` | `color-foreground-neutral-primary` | +| `colors.neutralForeground2/3` | `color-foreground-neutral-secondary` / `-tertiary` | +| `colors.neutralForegroundDisabled` | `color-foreground-neutral-disabled` | +| `colors.neutralForegroundOnBrand` / `OnColor` | `color-foreground-{neutral | brand}-onloud` | +| `colors.neutralBackground1` / legacy `buttonBackground` / `defaultBackground` | `color-background-neutral-subtle` | +| `colors.brandBackground` (rest) | `color-background-brand-heavy` (Primary button rest) | +| `colors.brandBackgroundPressed` | _(derived from `background-brand-heavy` via press delta — not a slot)_ | +| `colors.subtleBackground*` / `ghost*` | `color-background-neutral-transparent` (+ derived hover/press) | +| `colors.neutralStroke1/2/3` / `buttonBorder` | `color-stroke-neutral-{soft | subtle | loud}` | +| `colors.strokeFocus1` / `strokeFocus2` | `color-stroke-focus-inner` / `color-stroke-focus-outer` | +| `colors.redForeground1` (Checkbox required) | `color-foreground-danger-primary` | +| `variant: 'body1'` → `typography.variants.*` | `textstyle-functional-body-medium` (+ `-strong`) | +| `globalTokens.font.weight.semibold` | `font-weight-semibold` | +| `globalTokens.size80/120` (padding) | `spacing-component-base-{…}` | +| `globalTokens.stroke.width10/20` | `stroke-width-thin` / `stroke-width-thick` | +| `globalTokens.corner.radius*` | furn-local radius ramp **derived from current v1 component usage** (no x3 generic exists yet) | (Full crosswalk finalized during Stage 2; the `loud`/`heavy`/`onloud` inverse-rule names must be tracked so derived interaction uses the correct sign.)