Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions .changeset/light-areas-thank.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
---
"@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/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/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/design": 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
---

Switch to the released typescript 7
2 changes: 1 addition & 1 deletion .vscode/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"dbaeumer.vscode-eslint",
// Use the OXC formatter as the default formatter
"oxc.oxc-vscode",
// Use the native typescript preview to run the editor typescript server
// TypeScript 7 (native, tsc/tsgo-based) language server extension; auto-detected via typescript.tsdk
"typescriptteam.native-preview"
]
}
6 changes: 3 additions & 3 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@

"json.format.enable": false,

// enable the native preview for typescript, used to build internally as well
"typescript.experimental.useTsgo": true,

"typescript.preferences.quoteStyle": "single",
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false,
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false,
// Points at the workspace's typescript package (7.0.2, native tsc). The
// TypeScript 7 (native-preview) extension detects that this tsdk has no
// tsserver.js and automatically runs it as a native LSP server.
"typescript.tsdk": "./node_modules/typescript/lib",

"search.exclude": {
Expand Down
2 changes: 2 additions & 0 deletions .yarnrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,8 @@ packageExtensions:
buffer: "*"

plugins:
- path: .yarn/plugins/@yarnpkg/plugin-compat.cjs
spec: "@yarnpkg/plugin-compat"
- 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"
Expand Down
20 changes: 10 additions & 10 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,13 @@ This is the **FluentUI React Native** repository, a monorepo containing React Na

## 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`).
The repository builds as a **single unified TypeScript project-references graph** compiled by **tsc** (`typescript`). The root `tsconfig.json` lists every package's `tsconfig.json` under `references`, and `yarn build` runs `tsc -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 build # Unified TypeScript build of all packages (tsc -b); emits each package's lib/
yarn build --clean # Remove build outputs (tsc -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)
Expand Down Expand Up @@ -88,21 +88,21 @@ The task pipeline is defined in `lage.config.mjs`:

### 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/`):
Each package's own `build` script is `tsc -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 build` - tsc 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.
`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 `tsc -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 repo uses **TypeScript 7.0.2** via **tsc**, 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`.
The whole repo compiles as one **composite project-references graph**: the root `tsconfig.json` lists every package under `references`, `tsc -b` builds them in dependency order, and each package caches incremental state in `.cache/tsconfig.tsbuildinfo`.

### Key TypeScript Settings

Expand Down Expand Up @@ -265,10 +265,10 @@ Components require `ThemeProvider` from `@fluentui-react-native/design/theming`
## 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
- **Requires TypeScript 7.0.2** (`typescript`, compiled via `tsc`); the unified build runs `tsc -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`
- **Dynamic package extensions**: Common dev dependencies (TypeScript, 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
Expand Down
2 changes: 1 addition & 1 deletion apps/E2E/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -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",
Expand Down
2 changes: 1 addition & 1 deletion apps/fluent-tester/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
},
"scripts": {
"android": "rnx-cli run --platform android",
"build": "tsgo -b",
"build": "tsc -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",
Expand Down
2 changes: 1 addition & 1 deletion apps/tester-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint"
Expand Down
2 changes: 1 addition & 1 deletion apps/win32/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"bundle": "rnx-cli bundle --dev false",
"bundle-dev": "rnx-cli bundle",
"clean": "fluentui-scripts clean",
Expand Down
2 changes: 1 addition & 1 deletion lage.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const config = {
// These run once for the whole repo. Sub-packages do not have these scripts,
// so lage naturally scopes them to the root workspace.
build: {
// tsgo project level build has its own caching
// tsc project level build has its own caching
cache: false,
},
'check-publishing': {
Expand Down
7 changes: 3 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@
"build:clean": "yarn root-build --clean && yarn build",
"docs": "yarn workspace fluent-rn-website start",
"bundle:repo": "lage bundle",
"clean": "tsgo -b --clean && lage clean",
"clean": "tsc -b --clean && lage clean",
"clean-all": "node ./scripts/src/preinstall/clean-all.ts",
"change": "node .github/scripts/change.mts",
"changeset:version": "node .github/scripts/changeset-version-with-postbump.mts",
"change:check": "node .github/scripts/change.mts --check",
"check-publishing": "node ./scripts/src/cli.ts check-publishing",
"lint-fix": "cross-env FURN_FIX_MODE=true lage lint",
"root-build": "tsgo -b",
"root-build": "tsc -b",
"root-prebuild": "lage prebuild",
"preinstall": "node ./scripts/src/preinstall/use-yarn-please.ts",
"format": "oxfmt",
Expand All @@ -46,7 +46,6 @@
"@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:",
Expand All @@ -56,7 +55,7 @@
"oxfmt": "^0.35.0",
"oxlint": "^1.57.0",
"oxlint-tsgolint": "^0.17.4",
"typescript": "^5.8.0",
"typescript": "7.0.2",
"zx": "^8.2.4"
},
"resolutions": {
Expand Down
2 changes: 1 addition & 1 deletion packages/agentic-components/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/agentic-design/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"./package.json": "./package.json"
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/codemods/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/Avatar/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/Badge/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/Button/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/Callout/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/Checkbox/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/Chip/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/ContextualMenu/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/Divider/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/FocusTrapZone/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/FocusZone/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/Icon/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/Input/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/Link/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
}
},
"scripts": {
"build": "tsgo -b",
"build": "tsc -b",
"clean": "fluentui-scripts clean",
"format": "fluentui-scripts format",
"lint": "fluentui-scripts lint",
Expand Down
Loading
Loading