diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 20919e8987a9fa..f87d1f368c5021 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -83,6 +83,7 @@ apps/test-bundles @microsoft/fluentui-react
apps/public-docsite-v9 @microsoft/cxe-red @microsoft/cxe-coastal @microsoft/fluentui-react-build
apps/theming-designer @microsoft/fluentui-react
apps/ssr-tests-v9 @microsoft/fluentui-react-build
+apps/stress-test @microsoft/cxe-red @spmonahan @micahgodbolt
#### Packages
packages/azure-themes @hyoshis @Jacqueline-ms
@@ -161,7 +162,6 @@ packages/react-components/react-tabs @microsoft/cxe-coastal @geoffcoxmsft
packages/react-components/react-text @microsoft/cxe-prg
packages/react-components/react-textarea @microsoft/cxe-red @sopranopillow
packages/react-components/react-tooltip @microsoft/cxe-red @behowell @khmakoto
-packages/react-components/react-list @microsoft/teams-prg
packages/react-components/react-toolbar @microsoft/teams-prg @chpalac @ling1726
packages/react-components/react-portal-compat @microsoft/teams-prg
packages/react-components/react-alert @microsoft/teams-prg
@@ -173,6 +173,10 @@ packages/react-components/babel-preset-global-context @microsoft/teams-prg
packages/react-components/react-table @microsoft/teams-prg
packages/react-components/react-progress @microsoft/cxe-red @tomi-msft
packages/react-components/react-persona @microsoft/cxe-red @sopranopillow
+packages/react-components/react-avatar-context @microsoft/teams-prg
+packages/react-components/react-infobutton @microsoft/cxe-red @sopranopillow
+packages/react-migration-v8-v9 @microsoft/cxe-coastal @geoffcoxmsft
+packages/react-components/react-tree @microsoft/teams-prg
# <%= NX-CODEOWNER-PLACEHOLDER %>
diff --git a/.github/actions/build-to/action.yml b/.github/actions/build-to/action.yml
new file mode 100644
index 00000000000000..d9ad0d14d64d39
--- /dev/null
+++ b/.github/actions/build-to/action.yml
@@ -0,0 +1,35 @@
+name: 'Build workspaces'
+description: 'Runs the build command for specific workspaces.'
+inputs:
+ # Because Github Actions doesn't support arrays as inputs we need to pass the workspaces as a string and split them
+ # by spaces https://github.com/community/community/discussions/11692
+ workspaces:
+ required: true
+ description: 'The workspaces you want to build. This parameter accepts multiple workspaces separated by a space.'
+ # This is based on the backfill cache provider options: https://github.com/microsoft/backfill#set-up-remote-cache
+ backfill-cache-provider:
+ required: false
+ description: 'The backfill cache provider'
+ default: 'azure-blob'
+ # Depending on the chosen cache provider there are multiple types of available options. In our case we use Azure Blob
+ # Storage. https://github.com/microsoft/backfill#microsoft-azure-blob-storage
+ backfill-cache-provider-options:
+ required: false
+ description: 'The backfill cache provider options'
+ # Flag to toggle backfill remote caching on / off
+ lage-write-remote-cache:
+ required: true
+ description: 'Whether to write to the remote cache'
+ default: 'true'
+
+runs:
+ using: 'composite'
+ steps:
+ - name: build package dependency tree (scripts:build)
+ working-directory: .
+ shell: bash
+ run: yarn build --to ${{ inputs.workspaces }}
+ env:
+ BACKFILL_CACHE_PROVIDER: ${{ inputs.backfill-cache-provider }}
+ BACKFILL_CACHE_PROVIDER_OPTIONS: ${{ inputs.backfill-cache-provider-options }}
+ LAGE_WRITE_REMOTE_CACHE: ${{ inputs.lage-write-remote-cache }}
diff --git a/.github/triage-bot.config.json b/.github/triage-bot.config.json
new file mode 100644
index 00000000000000..1f081d6cd3d218
--- /dev/null
+++ b/.github/triage-bot.config.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "../scripts/triage-bot/triage-bot.schema.json",
+ "params": [
+ {
+ "keyword": "(@fluentui/react-northstar)",
+ "labels": ["Fluent UI react-northstar (v0)"],
+ "assignees": []
+ },
+ { "keyword": "(@fluentui/react)", "labels": ["Fluent UI react (v8)"], "assignees": [] },
+ {
+ "keyword": "(@fluentui/react-components)",
+ "labels": ["Fluent UI react-components (v9)"],
+ "assignees": []
+ },
+ {
+ "keyword": "(@fluentui/web-components)",
+ "labels": ["web-components"],
+ "assignees": ["chrisdholt"]
+ }
+ ]
+}
diff --git a/.github/workflows/check-packages.yml b/.github/workflows/check-packages.yml
index e1b98fa7168a02..43ef1e696c728d 100644
--- a/.github/workflows/check-packages.yml
+++ b/.github/workflows/check-packages.yml
@@ -3,6 +3,38 @@ on:
pull_request:
jobs:
+ dependency-deduplication:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 14.18.1
+ cache: 'yarn'
+
+ - uses: tj-actions/changed-files@v32
+ id: changed-files-specific
+ with:
+ files: |
+ yarn.lock
+
+ - name: Check package duplicates
+ if: steps.changed-files-specific.outputs.any_changed == 'true'
+ run: |
+ echo "yarn.lock changed! Verifying package deduplication ..."
+
+ npx yarn-deduplicate --strategy fewer --list --fail
+
+ if [[ $? -ne 0 ]]; then
+ echo "Your changes introduced package duplication 🚨"
+ echo "Run 'npx yarn-deduplicate --strategy fewer' to fix those."
+ else
+ echo "No duplicate packages introduced ✅"
+ fi
+
dependency-mismatches:
runs-on: ubuntu-latest
steps:
diff --git a/.github/workflows/create-milestone.yml b/.github/workflows/create-milestone.yml
index 1121fbe7c3314c..ad38254db1f9a8 100644
--- a/.github/workflows/create-milestone.yml
+++ b/.github/workflows/create-milestone.yml
@@ -5,6 +5,9 @@ on:
schedule:
- cron: '0 0 1 * *'
+permissions:
+ issues: write
+
jobs:
create-milestone:
name: Create this month's milestone
diff --git a/.github/workflows/docsite-publish-chromatic.yml b/.github/workflows/docsite-publish-chromatic.yml
new file mode 100644
index 00000000000000..2369a9478b3038
--- /dev/null
+++ b/.github/workflows/docsite-publish-chromatic.yml
@@ -0,0 +1,55 @@
+# Workflow name
+name: 'Docsite publish to Chromatic'
+
+on:
+ push:
+ branches:
+ - master
+ workflow_dispatch:
+
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ if: ${{ contains(github.event.head_commit.message, 'applying package updates') || github.event_name == 'workflow_dispatch' }}
+
+ outputs:
+ status: ${{ steps.verify-react-components-changed.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' }}
+
+ steps:
+ - uses: actions/checkout@v3
+ name: Checkout [master]
+
+ - name: Verify react-compoenents has changed
+ uses: tj-actions/changed-files@v23.1
+ id: verify-react-components-changed
+ with:
+ files: |
+ packages/react-components/react-components/package.json
+ deploy:
+ runs-on: ubuntu-latest
+ needs: check
+ if: needs.check.outputs.status == 'true'
+
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 14.18.1
+ cache: 'yarn'
+
+ - name: Install packages
+ run: yarn install --frozen-lockfile
+
+ - name: Build dependencies
+ uses: ./.github/actions/build-to
+ with:
+ workspaces: '@fluentui/public-docsite-v9'
+ backfill-cache-provider-options: ${{ secrets.BACKFILL_CACHE_PROVIDER_OPTIONS }}
+
+ - name: Publish to Chromatic
+ run: yarn workspace @fluentui/public-docsite-v9 chromatic
+ env:
+ CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
diff --git a/.github/workflows/docsite-publish-ghpages.yml b/.github/workflows/docsite-publish-ghpages.yml
new file mode 100644
index 00000000000000..fa9e24a32e5143
--- /dev/null
+++ b/.github/workflows/docsite-publish-ghpages.yml
@@ -0,0 +1,76 @@
+# Workflow name
+name: 'Docsite publish to Github Pages'
+
+on:
+ push:
+ branches:
+ - master
+ workflow_dispatch:
+
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ if: ${{ contains(github.event.head_commit.message, 'applying package updates') || github.event_name == 'workflow_dispatch' }}
+
+ outputs:
+ status: ${{ steps.verify-react-components-changed.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' }}
+
+ steps:
+ - uses: actions/checkout@v3
+ name: Checkout [master]
+
+ - name: Verify react-compoenents has changed
+ uses: tj-actions/changed-files@v23.1
+ id: verify-react-components-changed
+ with:
+ files: |
+ packages/react-components/react-components/package.json
+ build:
+ runs-on: ubuntu-latest
+ needs: check
+ if: needs.check.outputs.status == 'true'
+
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 14.18.1
+ cache: 'yarn'
+
+ - name: Install packages
+ run: yarn install --frozen-lockfile
+
+ - name: Build dependencies
+ uses: ./.github/actions/build-to
+ with:
+ workspaces: '@fluentui/public-docsite-v9'
+ backfill-cache-provider-options: ${{ secrets.BACKFILL_CACHE_PROVIDER_OPTIONS }}
+
+ - name: Build storybook
+ run: yarn workspace @fluentui/public-docsite-v9 build-storybook
+
+ - name: Upload Pages Artifact
+ uses: actions/upload-pages-artifact@v1
+ with:
+ path: './apps/public-docsite-v9/dist/storybook/'
+ deploy:
+ runs-on: ubuntu-latest
+ needs: build
+
+ # Grant GITHUB_TOKEN the permissions required to make a Pages deployment
+ permissions:
+ pages: write # to deploy to Pages
+ id-token: write # to verify the deployment originates from an appropriate source
+
+ # Deploy to the github-pages environment
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v1
diff --git a/.github/workflows/docsite-publish.yml b/.github/workflows/docsite-publish.yml
deleted file mode 100644
index 65cf799be56e93..00000000000000
--- a/.github/workflows/docsite-publish.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-# Workflow name
-name: 'Docsite publish'
-
-on:
- push:
- branches:
- - master
- workflow_dispatch:
- # both inputs are required by chromaui/action
- # https://github.com/chromaui/action#triggering-from-workflow_dispatch
- inputs:
- sha:
- description: The SHA-1 hash referring to the commit which will be used for publishing.
- required: true
- ref:
- description: The head branch associated with the pull request.
- required: true
-
-jobs:
- check:
- runs-on: ubuntu-latest
- if: ${{ contains(github.event.head_commit.message, 'applying package updates') || github.event_name == 'workflow_dispatch' }}
-
- outputs:
- status: ${{ steps.verify-react-components-changed.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' }}
-
- steps:
- - uses: actions/checkout@v3
- name: Checkout [master]
-
- - name: Verify react-compoenents has changed
- uses: tj-actions/changed-files@v23.1
- id: verify-react-components-changed
- with:
- files: |
- packages/react-components/react-components/package.json
- deploy:
- runs-on: ubuntu-latest
- needs: check
- if: needs.check.outputs.status == 'true'
-
- steps:
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0
-
- - uses: actions/setup-node@v3
- with:
- node-version: 14.18.1
- cache: 'yarn'
-
- - name: Install packages
- run: yarn install --frozen-lockfile
-
- - name: Build dependencies
- run: yarn build --to @fluentui/public-docsite-v9
-
- - name: Publish to Chromatic
- run: yarn workspace @fluentui/public-docsite-v9 chromatic
- env:
- CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml
new file mode 100644
index 00000000000000..6464862d7e3315
--- /dev/null
+++ b/.github/workflows/issues.yml
@@ -0,0 +1,21 @@
+name: Triage Bot
+on:
+ issues:
+ types:
+ - opened
+
+jobs:
+ triage-issue:
+ runs-on: ubuntu-latest
+
+ permissions:
+ issues: write
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/github-script@v6
+ with:
+ script: |
+ const config = require('./.github/triage-bot.config.json');
+ const run = require('./scripts/triage-bot');
+ await run({github,context,core,config});
diff --git a/.github/workflows/screener-build.yml b/.github/workflows/screener-build.yml
index b4873c6550d88c..f4ddf2e6633f10 100644
--- a/.github/workflows/screener-build.yml
+++ b/.github/workflows/screener-build.yml
@@ -1,11 +1,11 @@
name: Screener build
on:
- pull_request:
push:
branches:
- master
- workflow_dispatch:
+ pull_request:
+ types: [opened, reopened, synchronize, ready_for_review]
env:
DEPLOYHOST: 'fluentuipr.z22.web.core.windows.net'
@@ -15,27 +15,52 @@ jobs:
runs-on: ubuntu-latest
steps:
- run: mkdir artifacts
- ###########################################
- # Environment variables are passed as an artifact so that the run workflow
- # can download and access them. There are two workflows used- `screener-build.yml`
- # and `screener-run.yml` so that the screener checks can also be triggered by
- # pull requests from forks. Note: This is a temporary change.
- ###########################################
+
###########################################
# BROWSERSLIST_IGNORE_OLD_DATA = Prevents failures on CI when "caniuse-lite" becomes outdated
# DEPLOYHOST = address of host for screener tests deployment
# BUILD_BUILDID = unique ID of the workflow run within the repo
- # BUILD_SOURCEBRANCH = branch that triggered the workflow -> refs/pull//merge
###########################################
- name: Set base env variables
run: |
cat <> artifacts/environment
BROWSERSLIST_IGNORE_OLD_DATA=true
- DEPLOYHOST='fluentuipr.z22.web.core.windows.net'
BUILD_BUILDID=${{ github.run_id }}
- BUILD_SOURCEBRANCH=${{ github.ref }}
SCREENER_BUILD=1
EOT
+
+ - name: Set env variables if there is not a PR
+ run: |
+ cat <> artifacts/environment
+ DEPLOYBASEPATH=heads/${{github.ref_name}}
+ DEPLOYURL=https://${{env.DEPLOYHOST}}/heads/${{github.ref_name}}
+ BUILD_SOURCEBRANCHNAME=${{ github.ref_name }}
+ EOT
+ if: github.event_name == 'push'
+
+ - name: Check if draft PR has 'Ready for VR' label
+ uses: actions/github-script@v6
+ with:
+ script: |
+ let labels = await github.rest.issues.listLabelsOnIssue({
+ issue_number: ${{github.event.pull_request.number}},
+ owner: context.repo.owner,
+ repo: context.repo.repo
+ });
+
+ let foundLabel = labels.data.find((label) => {return label.name == 'Ready for VR'});
+ if(foundLabel === undefined)
+ core.exportVariable('SKIP_SCREENER', true);
+ if: github.event_name == 'pull_request' && github.event.pull_request.draft == true
+
+ - run: echo "SKIP_SCREENER=${{env.SKIP_SCREENER}}" >> skip-screener
+
+ - name: Upload environment variables artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: skip-screener
+ path: skip-screener
+
###########################################
# SYSTEM_PULLREQUEST_TARGETBRANCH = target branch name
# SYSTEM_PULLREQUEST_SOURCEBRANCH = source branch name
@@ -49,31 +74,27 @@ jobs:
run: |
cat <> artifacts/environment
SYSTEM_PULLREQUEST_TARGETBRANCH=${{ github.event.pull_request.base.ref }}
- SYSTEM_PULLREQUEST_SOURCEBRANCH=${{ github.event.pull_request.head.ref }}
SYSTEM_PULLREQUEST_PULLREQUESTID=${{ github.event.pull_request.id }}
SYSTEM_PULLREQUEST_SOURCECOMMITID=${{ github.event.pull_request.head.sha }}
DEPLOYBASEPATH=pull/${{github.event.pull_request.number}}
DEPLOYURL=https://${{env.DEPLOYHOST}}/pull/${{github.event.pull_request.number}}
- BUILD_SOURCEBRANCHNAME='merge'
+ BUILD_SOURCEBRANCHNAME=${{ github.event.pull_request.head.ref }}
EOT
- if: ${{startsWith(github.ref, 'refs/pull/')}}
-
- - name: Set env variables if there is not a PR
- run: |
- cat <> artifacts/environment
- DEPLOYBASEPATH=heads/${{github.ref_name}}
- DEPLOYURL=https://${{env.DEPLOYHOST}}/heads/${{github.ref_name}}
- BUILD_SOURCEBRANCHNAME=${{ github.ref_name }}
- EOT
- if: ${{!startsWith(github.ref, 'refs/pull/')}}
+ if: ${{ github.event_name == 'pull_request' && env.SKIP_SCREENER == ''}}
- name: Upload environment variables artifact
uses: actions/upload-artifact@v3
with:
name: env-artifact
path: artifacts/environment
+ if: ${{ env.SKIP_SCREENER == '' }}
+
+ outputs:
+ SKIP_SCREENER: ${{env.SKIP_SCREENER}}
screener-react-northstar:
+ if: needs.environment-upload.outputs.SKIP_SCREENER == ''
+ needs: environment-upload
runs-on: 'ubuntu-latest'
name: Screener @fluentui/react-northstar
steps:
@@ -137,6 +158,8 @@ jobs:
if: ${{env.SKIP_SCREENER_BUILD == 'false'}}
screener-react:
+ if: needs.environment-upload.outputs.SKIP_SCREENER == ''
+ needs: environment-upload
runs-on: 'ubuntu-latest'
name: Screener @fluentui/react
steps:
@@ -198,6 +221,8 @@ jobs:
if: ${{env.SKIP_SCREENER_BUILD == 'false'}}
screener-react-components:
+ if: needs.environment-upload.outputs.SKIP_SCREENER == ''
+ needs: environment-upload
runs-on: 'ubuntu-latest'
name: Screener @fluentui/react-components
steps:
diff --git a/.github/workflows/screener-run.yml b/.github/workflows/screener-run.yml
index 5173978050c8c8..6ddd0a26c50bef 100644
--- a/.github/workflows/screener-run.yml
+++ b/.github/workflows/screener-run.yml
@@ -9,7 +9,26 @@ on:
env:
AZURE_STORAGE_CONNECTION_STRING: ${{secrets.AZURE_STORAGE_CONNECTION_STRING}}
jobs:
+ determine-if-skipping:
+ runs-on: 'ubuntu-latest'
+ steps:
+ - name: Download artifact to determine if skipping jobs
+ uses: dawidd6/action-download-artifact@v2
+ with:
+ workflow: screener-build.yml
+ run_id: ${{github.event.workflow_run.id}}
+ name: skip-screener
+
+ - name: Define env variable
+ run: |
+ var=$(head -1 skip-screener)
+ echo "$var" >> $GITHUB_ENV
+ outputs:
+ SKIP_SCREENER: ${{env.SKIP_SCREENER}}
+
screener-react-northstar:
+ if: needs.determine-if-skipping.outputs.SKIP_SCREENER == ''
+ needs: determine-if-skipping
runs-on: 'ubuntu-latest'
name: Screener @fluentui/react-northstar
steps:
@@ -87,6 +106,8 @@ jobs:
SCREENER_API_KEY: ${{secrets.SCREENER_API_KEY}}
screener-react:
+ if: needs.determine-if-skipping.outputs.SKIP_SCREENER == ''
+ needs: determine-if-skipping
runs-on: 'ubuntu-latest'
name: Screener @fluentui/react
steps:
@@ -161,6 +182,8 @@ jobs:
SCREENER_API_KEY: ${{secrets.SCREENER_API_KEY}}
screener-react-components:
+ if: needs.determine-if-skipping.outputs.SKIP_SCREENER == ''
+ needs: determine-if-skipping
runs-on: 'ubuntu-latest'
name: Screener @fluentui/react-components
steps:
diff --git a/.storybook/main.js b/.storybook/main.js
index eaa33435ff1465..cce2e61868cd33 100644
--- a/.storybook/main.js
+++ b/.storybook/main.js
@@ -71,7 +71,8 @@ module.exports = /** @type {Omit} */ ({
*/
enforce: 'post',
test: /\.stories\.tsx$/,
- include: /src/,
+ //TODO: simplify once all v9 packages have been migrated to new package structure. Tracking work: https://github.com/microsoft/fluentui/issues/24129
+ include: /stories|src/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
diff --git a/.vscode/launch.json b/.vscode/launch.json
index ad44b4feb3276b..743eeae1d54bdd 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -128,7 +128,7 @@
"protocol": "inspector",
"cwd": "${workspaceRoot}",
"args": [
- "${workspaceRoot}/scripts/updateReleaseNotes/index.ts",
+ "${workspaceRoot}/scripts/update-release-notes/index.ts",
"--token",
// For local testing, generate a personal access token (https://github.com/settings/tokens)
// and replace "your token here" with the token. DO NOT COMMIT YOUR TOKEN!
diff --git a/README.md b/README.md
index 3c3ef4995ac908..4662d73f44d707 100644
--- a/README.md
+++ b/README.md
@@ -6,34 +6,34 @@
Fluent UI web represents a collection of utilities, React components, and web components for building web applications.
-This repo is home to 3 separate projects today. Mixing components between projects is not currently supported. The goal of these projects is to dedupe functionality and enable interoperability over time. For now, choose the project that best suits your needs.
+This repo is home to 3 separate projects today. Combining Fluent UI React v9 components with Fluent UI React v8 or v0 components is possible and allows gradual migration to Fluent UI v9.
The following table will help you navigate the 3 projects and understand their differences.
-| | React | React Northstar | Web Components |
+| | React Components (v9) | React (v8) | Web Components |
|---| ----- | --------------- | -------------- |
-| **Overview** | Mature, refreshing with new concepts from react-northstar. | Newer, has concepts we're iterating on. | Web Component implementation of Fluent UI. |
-| **Used By** | Office| Teams | Edge |
-| **Read Me** | [README.md](/packages/react/README.md) | [README.md](/packages/fluentui/README.md) | [README.md](/packages/web-components/README.md) |
-| **Changelog** | [CHANGELOG.md](/packages/react/CHANGELOG.md) | [CHANGELOG.md](/packages/fluentui/CHANGELOG.md) | [CHANGELOG.md](/packages/web-components/CHANGELOG.md) |
-| **Repo** | [./packages/react](/packages/react) | [./packages/fluentui/react-northstar](/packages/fluentui/react-northstar) | [./packages/web-components](/packages/web-components) |
-| **Quick Start** | [Quick Start](https://developer.microsoft.com/en-us/fluentui#/get-started/web) | [Quick Start](https://fluentsite.z22.web.core.windows.net/quick-start) | [See README.md](https://github.com/microsoft/fluentui/tree/master/packages/web-components/README.md) |
-| **Docs** | [aka.ms/fluentui-react](https://aka.ms/fluentui-react) | [aka.ms/fluentui-react-northstar](https://aka.ms/fluentui-react-northstar) | [aka.ms/fluentui-web-components](https://aka.ms/fluentui-web-components) |
-| **NPM** | `@fluentui/react` | `@fluentui/react-northstar` | `@fluentui/web-components` |
-| **Version** | [![npm version](https://img.shields.io/npm/v/@fluentui/react?style=flat-square)](https://www.npmjs.com/package/@fluentui/react) | [![npm version](https://img.shields.io/npm/v/@fluentui/react-northstar?style=flat-square)](https://www.npmjs.com/package/@fluentui/react-northstar) | [![npm version](https://img.shields.io/npm/v/@fluentui/web-components?style=flat-square)](https://www.npmjs.com/package/@fluentui/web-components) |
-| **Issues** | [![Fluent UI React GitHub Issues](https://img.shields.io/github/issues/microsoft/fluentui/Fluent%20UI%20react%20(v8)?label=issues&style=flat-square)](https://github.com/microsoft/fluentui/issues?q=is%3Aissue+is%3Aopen+label%3A%22Fluent+UI+react+(v8)%22) | [![Fluent UI React Northstar GitHub Issues](https://img.shields.io/github/issues/microsoft/fluentui/Fluent%20UI%20react-northstar?label=issues&style=flat-square)](https://github.com/microsoft/fluentui/issues?q=is%3Aissue+is%3Aopen+label%3A%22Fluent+UI+react-northstar%22) | [![Fluent UI Web Components GitHub Issues](https://img.shields.io/github/issues/microsoft/fluentui/web-components?label=issues&style=flat-square)](https://github.com/microsoft/fluentui/issues?q=is%3Aissue+is%3Aopen+label%3A%22web-components%22) |
+| **Overview** | New, future-proof and forward looking | Mature | Web Component implementation of Fluent UI. |
+| **Used By** | Microsoft 365 | Office | Edge |
+| **Read Me** | [README.md](/packages/react-components/react-components/README.md) | [README.md](/packages/react/README.md)| [README.md](/packages/web-components/README.md) |
+| **Changelog** | [CHANGELOG.md](/packages/react-components/react-components/CHANGELOG.md) | [CHANGELOG.md](/packages/react/CHANGELOG.md) | [CHANGELOG.md](/packages/web-components/CHANGELOG.md) |
+| **Repo** | [packages/react-components](/packages/react-components/react-components/CHANGELOG.md) | [./packages/react](/packages/react) | [./packages/web-components](/packages/web-components) |
+| **Quick Start** | [Quick Start](https://react.fluentui.dev/?path=/docs/concepts-developer-quick-start--page) | [Quick Start](https://developer.microsoft.com/en-us/fluentui#/get-started/web) | [See README.md](https://github.com/microsoft/fluentui/tree/master/packages/web-components/README.md) |
+| **Docs** | [https://react.fluentui.dev/](https://react.fluentui.dev/) | [aka.ms/fluentui-react](https://aka.ms/fluentui-react) | [aka.ms/fluentui-web-components](https://aka.ms/fluentui-web-components) |
+| **NPM** | `@fluentui/react-components` | `@fluentui/react`| `@fluentui/web-components` |
+| **Version** | [![npm version](https://img.shields.io/npm/v/@fluentui/react-components?style=flat-square)](https://www.npmjs.com/package/@fluentui/react-components) | [![npm version](https://img.shields.io/npm/v/@fluentui/react?style=flat-square)](https://www.npmjs.com/package/@fluentui/react) | [![npm version](https://img.shields.io/npm/v/@fluentui/web-components?style=flat-square)](https://www.npmjs.com/package/@fluentui/web-components) |
+| **Issues** | [![Fluent UI React Components GitHub Issues](https://img.shields.io/github/issues/microsoft/fluentui/Fluent%20UI%20react-components?label=issues&style=flat-square)](https://github.com/microsoft/fluentui/issues?q=is%3Aissue+is%3Aopen+label%3A%22Fluent+UI+react-components+%28v9%29%22) | [![Fluent UI React GitHub Issues](https://img.shields.io/github/issues/microsoft/fluentui/Fluent%20UI%20react%20(v8)?label=issues&style=flat-square)](https://github.com/microsoft/fluentui/issues?q=is%3Aissue+is%3Aopen+label%3A%22Fluent+UI+react+(v8)%22) | [![Fluent UI Web Components GitHub Issues](https://img.shields.io/github/issues/microsoft/fluentui/web-components?label=issues&style=flat-square)](https://github.com/microsoft/fluentui/issues?q=is%3Aissue+is%3Aopen+label%3A%22web-components%22) |
-> Why are there two React versions? See the [FAQ on Fabric and Stardust](https://github.com/microsoft/fluentui/wiki/FAQ---Fabric-and-Stardust-to-Fluent-UI).
+> Why are there two React versions? Fluent UI v8 is still widely used. We encourage you to migrate to Fluent UI v9. See the [Migration overview](https://react.fluentui.dev/?path=/docs/concepts-migration-overview--page).
## FluentUI Insights
[Fluent UI Insights](https://docs.microsoft.com/en-us/shows/fluent-ui-insights?utm_source=github) is a series that describes the design and decisions behind the Fluent UI design system.
-| EP01: Positioning | EP02: Styling |
-| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
-| | |
+| EP01: Positioning | EP02: Styling | EP03: Griffel |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| | | |
## Licenses
@@ -53,6 +53,10 @@ The `office-ui-fabric-react` repo is now this repo (`fluentui` in the Microsoft
We have a lot in store for Fluent UI - [Read our announcement here.](https://developer.microsoft.com/en-us/office/blogs/ui-fabric-is-evolving-into-fluent-ui/)
+## Looking for Fluent UI React Northstar?
+
+Fluent UI React Northstar has been superseded by Fluent UI React Components v9. For more details about Fluent UI React Northstar, see its [README.md](/packages/fluentui/README.md).
+
---
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
diff --git a/apps/perf-test-react-components/CHANGELOG.json b/apps/perf-test-react-components/CHANGELOG.json
index e1c9f12db4893c..4ec673f75fc871 100644
--- a/apps/perf-test-react-components/CHANGELOG.json
+++ b/apps/perf-test-react-components/CHANGELOG.json
@@ -1,6 +1,78 @@
{
"name": "@fluentui/perf-test-react-components",
"entries": [
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/perf-test-react-components_v9.0.0-rc.0",
+ "version": "9.0.0-rc.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test-react-components",
+ "comment": "Bump @fluentui/react-avatar to v9.1.1",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test-react-components",
+ "comment": "Bump @fluentui/react-button to v9.1.2",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test-react-components",
+ "comment": "Bump @fluentui/react-provider to v9.1.2",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test-react-components",
+ "comment": "Bump @fluentui/react-spinbutton to v9.0.2",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:50:08 GMT",
+ "tag": "@fluentui/perf-test-react-components_v9.0.0-rc.0",
+ "version": "9.0.0-rc.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test-react-components",
+ "comment": "Bump @fluentui/react-avatar to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test-react-components",
+ "comment": "Bump @fluentui/react-button to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test-react-components",
+ "comment": "Bump @fluentui/react-provider to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test-react-components",
+ "comment": "Bump @fluentui/react-spinbutton to v9.0.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test-react-components",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:04:10 GMT",
"tag": "@fluentui/perf-test-react-components_v9.0.0-rc.0",
diff --git a/apps/perf-test-react-components/CHANGELOG.md b/apps/perf-test-react-components/CHANGELOG.md
index 9920d147de76be..02641ef682a434 100644
--- a/apps/perf-test-react-components/CHANGELOG.md
+++ b/apps/perf-test-react-components/CHANGELOG.md
@@ -1,11 +1,36 @@
# Change Log - @fluentui/perf-test-react-components
-This log was last generated on Wed, 03 Aug 2022 16:04:10 GMT and should not be manually modified.
+This log was last generated on Tue, 20 Sep 2022 20:55:45 GMT and should not be manually modified.
## [9.0.0-rc.0](https://github.com/microsoft/fluentui/tree/@fluentui/perf-test-react-components_v9.0.0-rc.0)
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/perf-test-react-components_v9.0.0-rc.0..@fluentui/perf-test-react-components_v9.0.0-rc.0)
+
+### Patches
+
+- Bump @fluentui/react-avatar to v9.1.1 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-button to v9.1.2 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-provider to v9.1.2 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-spinbutton to v9.0.2 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.0.0-rc.0](https://github.com/microsoft/fluentui/tree/@fluentui/perf-test-react-components_v9.0.0-rc.0)
+
+Thu, 15 Sep 2022 09:50:08 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/perf-test-react-components_v9.0.0-rc.0..@fluentui/perf-test-react-components_v9.0.0-rc.0)
+
+### Patches
+
+- Bump @fluentui/react-avatar to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-button to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-provider to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-spinbutton to v9.0.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
+## [9.0.0-rc.0](https://github.com/microsoft/fluentui/tree/@fluentui/perf-test-react-components_v9.0.0-rc.0)
+
Wed, 03 Aug 2022 16:04:10 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/perf-test-react-components_v9.0.0-rc.0..@fluentui/perf-test-react-components_v9.0.0-rc.0)
diff --git a/apps/perf-test-react-components/package.json b/apps/perf-test-react-components/package.json
index 4929803a83c56e..55c092e105bb7d 100644
--- a/apps/perf-test-react-components/package.json
+++ b/apps/perf-test-react-components/package.json
@@ -15,12 +15,12 @@
"@fluentui/eslint-plugin": "*"
},
"dependencies": {
- "@griffel/core": "^1.5.1",
- "@fluentui/react-avatar": "^9.0.4",
- "@fluentui/react-button": "^9.1.0",
- "@fluentui/react-provider": "^9.1.0",
- "@fluentui/react-spinbutton": "^9.0.0",
- "@fluentui/react-theme": "^9.0.0",
+ "@griffel/core": "^1.8.0",
+ "@fluentui/react-avatar": "^9.2.4",
+ "@fluentui/react-button": "^9.1.6",
+ "@fluentui/react-provider": "^9.1.5",
+ "@fluentui/react-spinbutton": "^9.0.6",
+ "@fluentui/react-theme": "^9.1.1",
"@fluentui/scripts": "^1.0.0",
"@microsoft/load-themed-styles": "^1.10.26",
"flamegrill": "0.2.0",
diff --git a/apps/perf-test/CHANGELOG.json b/apps/perf-test/CHANGELOG.json
index a621b7ef9a3863..76d6b60ef11a4a 100644
--- a/apps/perf-test/CHANGELOG.json
+++ b/apps/perf-test/CHANGELOG.json
@@ -1,6 +1,111 @@
{
"name": "@fluentui/perf-test",
"entries": [
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/perf-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/perf-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/perf-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/perf-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/perf-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/perf-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/perf-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/perf-test",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/perf-test_v1.0.0",
diff --git a/apps/perf-test/CHANGELOG.md b/apps/perf-test/CHANGELOG.md
index 60bdab6c4cef11..fde30b76358185 100644
--- a/apps/perf-test/CHANGELOG.md
+++ b/apps/perf-test/CHANGELOG.md
@@ -1,11 +1,74 @@
# Change Log - @fluentui/perf-test
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Thu, 22 Sep 2022 07:43:45 GMT and should not be manually modified.
## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/perf-test_v1.0.0)
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/perf-test_v1.0.0..@fluentui/perf-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/perf-test_v1.0.0)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/perf-test_v1.0.0..@fluentui/perf-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/perf-test_v1.0.0)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/perf-test_v1.0.0..@fluentui/perf-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/perf-test_v1.0.0)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/perf-test_v1.0.0..@fluentui/perf-test_v1.0.0)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/perf-test_v1.0.0)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/perf-test_v1.0.0..@fluentui/perf-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/perf-test_v1.0.0)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/perf-test_v1.0.0..@fluentui/perf-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/perf-test_v1.0.0)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/perf-test_v1.0.0..@fluentui/perf-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/perf-test_v1.0.0)
+
Mon, 05 Sep 2022 07:38:30 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/perf-test_v1.0.0..@fluentui/perf-test_v1.0.0)
diff --git a/apps/perf-test/package.json b/apps/perf-test/package.json
index 30395dabc9ecb4..ed23c3c006fa35 100644
--- a/apps/perf-test/package.json
+++ b/apps/perf-test/package.json
@@ -15,7 +15,8 @@
"@fluentui/eslint-plugin": "*"
},
"dependencies": {
- "@fluentui/react": "^8.94.1",
+ "@fluentui/example-data": "^8.4.2",
+ "@fluentui/react": "^8.98.8",
"@fluentui/scripts": "^1.0.0",
"@microsoft/load-themed-styles": "^1.10.26",
"flamegrill": "0.2.0",
diff --git a/apps/perf-test/src/scenarioIterations.js b/apps/perf-test/src/scenarioIterations.js
index db017b5bbb8968..1e81dfe7943cbc 100644
--- a/apps/perf-test/src/scenarioIterations.js
+++ b/apps/perf-test/src/scenarioIterations.js
@@ -11,6 +11,11 @@ const scenarioIterations = {
ComboBox: 1000,
Persona: 1000,
ContextualMenu: 1000,
+ /* List performance is generally more influenced by the size
+ * of the list rather than the number of lists on a page.
+ */
+ GroupedList: 2,
+ GroupedListV2: 2,
};
module.exports = scenarioIterations;
diff --git a/apps/perf-test/src/scenarioRenderTypes.js b/apps/perf-test/src/scenarioRenderTypes.js
index 2cdb377ceeced3..e30c3c4aaff06a 100644
--- a/apps/perf-test/src/scenarioRenderTypes.js
+++ b/apps/perf-test/src/scenarioRenderTypes.js
@@ -13,6 +13,8 @@ const DefaultRenderTypes = ['mount'];
const scenarioRenderTypes = {
ThemeProvider: AllRenderTypes,
+ GroupedList: AllRenderTypes,
+ GroupedListV2: AllRenderTypes,
};
module.exports = {
diff --git a/apps/perf-test/src/scenarios/GroupedList.tsx b/apps/perf-test/src/scenarios/GroupedList.tsx
new file mode 100644
index 00000000000000..ed051e2130eea6
--- /dev/null
+++ b/apps/perf-test/src/scenarios/GroupedList.tsx
@@ -0,0 +1,55 @@
+import * as React from 'react';
+import { createListItems, createGroups, IExampleItem } from '@fluentui/example-data';
+import { GroupedList, Selection, SelectionMode, DetailsRow, IGroup, IColumn } from '@fluentui/react';
+
+const groupCount = 5;
+const groupDepth = 5;
+const items = createListItems(Math.pow(groupCount, groupDepth + 1));
+const groups = createGroups(groupCount, groupDepth, 0, groupCount);
+
+const columns = Object.keys(items[0])
+ .slice(0, 3)
+ .map(
+ (key: string): IColumn => ({
+ key: key,
+ name: key,
+ fieldName: key,
+ minWidth: 300,
+ }),
+ );
+
+const selection = new Selection();
+selection.setItems(items);
+
+const onRenderCell = (
+ nestingDepth?: number,
+ item?: IExampleItem,
+ itemIndex?: number,
+ group?: IGroup,
+): React.ReactNode => {
+ return item && typeof itemIndex === 'number' && itemIndex > -1 ? (
+
+ ) : null;
+};
+
+const Scenario = () => {
+ return (
+
+ );
+};
+
+export default Scenario;
diff --git a/apps/perf-test/src/scenarios/GroupedListV2.tsx b/apps/perf-test/src/scenarios/GroupedListV2.tsx
new file mode 100644
index 00000000000000..2e0d0123c6680f
--- /dev/null
+++ b/apps/perf-test/src/scenarios/GroupedListV2.tsx
@@ -0,0 +1,62 @@
+import * as React from 'react';
+import { createListItems, createGroups, IExampleItem } from '@fluentui/example-data';
+import {
+ GroupedListV2_unstable as GroupedListV2,
+ Selection,
+ SelectionMode,
+ DetailsRow,
+ IGroup,
+ IColumn,
+} from '@fluentui/react';
+
+const groupCount = 5;
+const groupDepth = 5;
+const items = createListItems(Math.pow(groupCount, groupDepth + 1));
+const groups = createGroups(groupCount, groupDepth, 0, groupCount);
+
+const columns = Object.keys(items[0])
+ .slice(0, 3)
+ .map(
+ (key: string): IColumn => ({
+ key: key,
+ name: key,
+ fieldName: key,
+ minWidth: 300,
+ }),
+ );
+
+const selection = new Selection();
+selection.setItems(items);
+
+const onRenderCell = (
+ nestingDepth?: number,
+ item?: IExampleItem,
+ itemIndex?: number,
+ group?: IGroup,
+): React.ReactNode => {
+ return item && typeof itemIndex === 'number' && itemIndex > -1 ? (
+
+ ) : null;
+};
+
+const Scenario = () => {
+ return (
+
+ );
+};
+
+export default Scenario;
diff --git a/apps/public-docsite-resources/CHANGELOG.json b/apps/public-docsite-resources/CHANGELOG.json
index a5f082b6aa0eff..e1d52bd0546f5a 100644
--- a/apps/public-docsite-resources/CHANGELOG.json
+++ b/apps/public-docsite-resources/CHANGELOG.json
@@ -1,6 +1,294 @@
{
"name": "@fluentui/public-docsite-resources",
"entries": [
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/public-docsite-resources_v8.1.41",
+ "version": "8.1.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/azure-themes to v8.5.3",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.3",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/theme-samples to v8.7.3",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.7.3",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/public-docsite-resources_v8.1.41",
+ "version": "8.1.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/azure-themes to v8.5.2",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.2",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/theme-samples to v8.7.2",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.7.2",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/public-docsite-resources_v8.1.41",
+ "version": "8.1.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/azure-themes to v8.5.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/theme-samples to v8.7.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.7.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/public-docsite-resources_v8.1.41",
+ "version": "8.1.41",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/azure-themes to v8.5.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/theme-samples to v8.7.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.7.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/public-docsite-resources_v8.1.41",
+ "version": "8.1.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/azure-themes to v8.4.35",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.36",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/theme-samples to v8.6.35",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.6.35",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 12 Sep 2022 07:39:53 GMT",
+ "tag": "@fluentui/public-docsite-resources_v8.1.41",
+ "version": "8.1.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.35",
+ "commit": "7f8bad094dadcdb671d5746848e96b5bd4b5791a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/public-docsite-resources_v8.1.41",
+ "version": "8.1.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/azure-themes to v8.4.34",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.34",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/theme-samples to v8.6.34",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.6.34",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/public-docsite-resources_v8.1.41",
+ "version": "8.1.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/azure-themes to v8.4.33",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.33",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/theme-samples to v8.6.33",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-resources",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.6.33",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/public-docsite-resources_v8.1.41",
diff --git a/apps/public-docsite-resources/CHANGELOG.md b/apps/public-docsite-resources/CHANGELOG.md
index 2c62094afe3458..84141735681a9f 100644
--- a/apps/public-docsite-resources/CHANGELOG.md
+++ b/apps/public-docsite-resources/CHANGELOG.md
@@ -1,11 +1,111 @@
# Change Log - @fluentui/public-docsite-resources
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Thu, 22 Sep 2022 07:43:45 GMT and should not be manually modified.
## [8.1.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-resources_v8.1.41)
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-resources_v8.1.41..@fluentui/public-docsite-resources_v8.1.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+- Bump @fluentui/azure-themes to v8.5.3 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.3 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+- Bump @fluentui/theme-samples to v8.7.3 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.7.3 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [8.1.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-resources_v8.1.41)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-resources_v8.1.41..@fluentui/public-docsite-resources_v8.1.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/azure-themes to v8.5.2 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.2 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/theme-samples to v8.7.2 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.7.2 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [8.1.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-resources_v8.1.41)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-resources_v8.1.41..@fluentui/public-docsite-resources_v8.1.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/azure-themes to v8.5.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/theme-samples to v8.7.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.7.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [8.1.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-resources_v8.1.41)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-resources_v8.1.41..@fluentui/public-docsite-resources_v8.1.41)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/azure-themes to v8.5.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/theme-samples to v8.7.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.7.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [8.1.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-resources_v8.1.41)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-resources_v8.1.41..@fluentui/public-docsite-resources_v8.1.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+- Bump @fluentui/azure-themes to v8.4.35 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+- Bump @fluentui/react-docsite-components to v8.9.36 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+- Bump @fluentui/theme-samples to v8.6.35 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.6.35 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [8.1.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-resources_v8.1.41)
+
+Mon, 12 Sep 2022 07:39:53 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-resources_v8.1.41..@fluentui/public-docsite-resources_v8.1.41)
+
+### Patches
+
+- Bump @fluentui/react-docsite-components to v8.9.35 ([PR #24746](https://github.com/microsoft/fluentui/pull/24746) by beachball)
+
+## [8.1.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-resources_v8.1.41)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-resources_v8.1.41..@fluentui/public-docsite-resources_v8.1.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+- Bump @fluentui/azure-themes to v8.4.34 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+- Bump @fluentui/react-docsite-components to v8.9.34 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+- Bump @fluentui/theme-samples to v8.6.34 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.6.34 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [8.1.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-resources_v8.1.41)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-resources_v8.1.41..@fluentui/public-docsite-resources_v8.1.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+- Bump @fluentui/azure-themes to v8.4.33 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+- Bump @fluentui/react-docsite-components to v8.9.33 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+- Bump @fluentui/theme-samples to v8.6.33 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.6.33 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
+## [8.1.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-resources_v8.1.41)
+
Mon, 05 Sep 2022 07:38:30 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-resources_v8.1.41..@fluentui/public-docsite-resources_v8.1.41)
diff --git a/apps/public-docsite-resources/config/api-docs.js b/apps/public-docsite-resources/config/api-docs.js
index 00590500e871ff..bf324b5371c9d1 100644
--- a/apps/public-docsite-resources/config/api-docs.js
+++ b/apps/public-docsite-resources/config/api-docs.js
@@ -85,6 +85,7 @@ module.exports = {
'TeachingBubble',
'Text',
'TextField',
+ 'TimePicker',
'Toggle',
'Tooltip',
],
diff --git a/apps/public-docsite-resources/package.json b/apps/public-docsite-resources/package.json
index e00fd26c30b901..9249a96baf9e33 100644
--- a/apps/public-docsite-resources/package.json
+++ b/apps/public-docsite-resources/package.json
@@ -32,15 +32,15 @@
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
- "@fluentui/react": "^8.94.1",
+ "@fluentui/react": "^8.98.8",
"@fluentui/react-examples": "^8.34.4",
"@microsoft/load-themed-styles": "^1.10.26",
- "@fluentui/azure-themes": "^8.4.32",
- "@fluentui/react-docsite-components": "^8.9.32",
- "@fluentui/font-icons-mdl2": "^8.4.13",
+ "@fluentui/azure-themes": "^8.5.17",
+ "@fluentui/react-docsite-components": "^8.10.17",
+ "@fluentui/font-icons-mdl2": "^8.5.2",
"@fluentui/set-version": "^8.2.2",
- "@fluentui/theme-samples": "^8.6.32",
- "@fluentui/react-monaco-editor": "^1.6.32",
+ "@fluentui/theme-samples": "^8.7.17",
+ "@fluentui/react-monaco-editor": "^1.7.17",
"office-ui-fabric-core": "^11.0.0",
"react": "17.0.2",
"react-dom": "17.0.2",
diff --git a/apps/public-docsite-resources/src/AppDefinition.tsx b/apps/public-docsite-resources/src/AppDefinition.tsx
index 4cd5dcd4bffbd7..4ef5cd53364386 100644
--- a/apps/public-docsite-resources/src/AppDefinition.tsx
+++ b/apps/public-docsite-resources/src/AppDefinition.tsx
@@ -485,6 +485,12 @@ export const AppDefinition: IAppDefinition = {
name: 'TextField',
url: '#/examples/textfield',
},
+ {
+ component: require('./components/pages/TimePickerPage').TimePickerPage,
+ key: 'TimePicker',
+ name: 'TimePicker',
+ url: '#/examples/timepicker',
+ },
{
component: require('./components/pages/TogglePage').TogglePage,
key: 'Toggle',
diff --git a/apps/public-docsite-resources/src/components/pages/TimePickerPage.tsx b/apps/public-docsite-resources/src/components/pages/TimePickerPage.tsx
new file mode 100644
index 00000000000000..989e34fcb57565
--- /dev/null
+++ b/apps/public-docsite-resources/src/components/pages/TimePickerPage.tsx
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { DemoPage } from '../DemoPage';
+
+import { TimePickerPageProps } from '@fluentui/react-examples/lib/react/TimePicker/TimePicker.doc';
+
+export const TimePickerPage = (props: { isHeaderVisible: boolean }) => (
+
+);
diff --git a/apps/public-docsite-v9/.storybook/main.js b/apps/public-docsite-v9/.storybook/main.js
index b1cec15df3610a..a9ba66ecd41ff7 100644
--- a/apps/public-docsite-v9/.storybook/main.js
+++ b/apps/public-docsite-v9/.storybook/main.js
@@ -8,6 +8,7 @@ module.exports = /** @type {Omit pkgName.startsWith('@fluentui/') && !excludedDependencies.includes(pkgName))
.map(pkgName => {
const name = pkgName.replace('@fluentui/', '');
- const storiesGlob = '/src/**/@(index.stories.@(ts|tsx)|*.stories.mdx)';
+ const storiesGlob = '**/@(index.stories.@(ts|tsx)|*.stories.mdx)';
- return `../../../packages/react-components/${name}${storiesGlob}`;
+ //TODO: simplify once v9 migration [https://github.com/microsoft/fluentui/issues/24129] is complete.
+ if (fs.existsSync(`../../packages/react-components/${name}/stories/`)) {
+ return `../../../packages/react-components/${name}/stories/${storiesGlob}`;
+ } else {
+ return `../../../packages/react-components/${name}/src/${storiesGlob}`;
+ }
});
}
diff --git a/apps/public-docsite-v9/.storybook/manager-head.html b/apps/public-docsite-v9/.storybook/manager-head.html
index 166e67ed6e6e76..f831e114550a3a 100644
--- a/apps/public-docsite-v9/.storybook/manager-head.html
+++ b/apps/public-docsite-v9/.storybook/manager-head.html
@@ -148,7 +148,7 @@
Usign suggested temporary workaround until storybook gets proper support
See https://github.com/microsoft/fluentui/blob/master/rfcs/convergence/authoring-stories.md#10-internal-stories-for-testing
*/
- [id*='accessibility-scenario'] {
+ [id*='accessibility-stories'] {
display: none !important;
}
diff --git a/apps/public-docsite-v9/.storybook/preview.js b/apps/public-docsite-v9/.storybook/preview.js
index 46bf91f54aff96..93c8712239c741 100644
--- a/apps/public-docsite-v9/.storybook/preview.js
+++ b/apps/public-docsite-v9/.storybook/preview.js
@@ -26,7 +26,7 @@ export const parameters = {
'Introduction',
'Developer',
['Quick Start', 'Styling Components', 'Positioning Components', 'Component Poster'],
- 'Upgrading',
+ 'Migration',
[
'Overview',
'Important changes',
diff --git a/apps/public-docsite-v9/CHANGELOG.json b/apps/public-docsite-v9/CHANGELOG.json
index 3e4190ba3656b5..0bbc897dda9ef7 100644
--- a/apps/public-docsite-v9/CHANGELOG.json
+++ b/apps/public-docsite-v9/CHANGELOG.json
@@ -1,6 +1,168 @@
{
"name": "@fluentui/public-docsite-v9",
"entries": [
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/public-docsite-v9_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 07:47:16 GMT",
+ "tag": "@fluentui/public-docsite-v9_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "undefined": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react-components to v9.3.0",
+ "commit": "ead191a8368bf64ecabffce5ea0e02565f449a95"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "ead191a8368bf64ecabffce5ea0e02565f449a95"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/public-docsite-v9_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react-components to v9.3.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/public-docsite-v9_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react-components to v9.3.0",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/public-docsite-v9_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react-components to v9.3.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/public-docsite-v9_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/public-docsite-v9_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/public-docsite-v9_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite-v9",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/public-docsite-v9_v1.0.0",
diff --git a/apps/public-docsite-v9/CHANGELOG.md b/apps/public-docsite-v9/CHANGELOG.md
index b2c3c717b6b5d2..575049e94355c2 100644
--- a/apps/public-docsite-v9/CHANGELOG.md
+++ b/apps/public-docsite-v9/CHANGELOG.md
@@ -1,11 +1,80 @@
# Change Log - @fluentui/public-docsite-v9
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Thu, 22 Sep 2022 07:43:45 GMT and should not be manually modified.
## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-v9_v1.0.0)
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-v9_v1.0.0..@fluentui/public-docsite-v9_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-v9_v1.0.0)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-v9_v1.0.0..@fluentui/public-docsite-v9_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/react-components to v9.3.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-v9_v1.0.0)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-v9_v1.0.0..@fluentui/public-docsite-v9_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/react-components to v9.3.0 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-v9_v1.0.0)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-v9_v1.0.0..@fluentui/public-docsite-v9_v1.0.0)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/react-components to v9.3.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-v9_v1.0.0)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-v9_v1.0.0..@fluentui/public-docsite-v9_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-v9_v1.0.0)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-v9_v1.0.0..@fluentui/public-docsite-v9_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-v9_v1.0.0)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-v9_v1.0.0..@fluentui/public-docsite-v9_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-v9_v1.0.0)
+
Mon, 05 Sep 2022 07:38:30 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-v9_v1.0.0..@fluentui/public-docsite-v9_v1.0.0)
diff --git a/apps/public-docsite-v9/package.json b/apps/public-docsite-v9/package.json
index 2170df9210ba2e..5faff2dd08c08d 100644
--- a/apps/public-docsite-v9/package.json
+++ b/apps/public-docsite-v9/package.json
@@ -2,7 +2,7 @@
"name": "@fluentui/public-docsite-v9",
"version": "1.0.0",
"private": true,
- "description": "A collection of examples demonstrating how to upgrade from v8 to v9",
+ "description": "Fluent UI React v9 documentation",
"scripts": {
"build": "just-scripts build",
"build-storybook": "build-storybook -o ./dist/storybook --docs && node ./.storybook/fix-title.js 'Fluent UI React v9' ../dist",
@@ -21,15 +21,18 @@
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
- "@fluentui/react": "^8.94.1",
+ "@fluentui/react": "^8.98.8",
+ "@fluentui/react-northstar": "^0.64.0",
+ "@fluentui/react-icons-northstar": "^0.64.0",
"@fluentui/scripts": "^1.0.0",
"@fluentui/storybook": "^1.0.0",
- "@fluentui/react-components": "^9.2.0",
+ "@fluentui/react-components": "^9.6.1",
"@fluentui/react-storybook-addon": "^9.0.0-rc.1",
- "@fluentui/react-theme": "^9.0.0",
- "@griffel/react": "^1.3.0",
+ "@fluentui/react-theme": "^9.1.1",
+ "@griffel/react": "^1.4.1",
"react": "17.0.2",
"react-dom": "17.0.2",
+ "react-window": "^1.8.6",
"tslib": "^2.1.0"
}
}
diff --git a/apps/public-docsite-v9/src/Concepts/BrowserSupportMatrix.stories.mdx b/apps/public-docsite-v9/src/Concepts/BrowserSupportMatrix.stories.mdx
index 9c7c859aa92458..73015da4cab250 100644
--- a/apps/public-docsite-v9/src/Concepts/BrowserSupportMatrix.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/BrowserSupportMatrix.stories.mdx
@@ -2,9 +2,18 @@ import { Meta } from '@storybook/addon-docs';
-## Browser Support Matrix
+Defining a browser support matrix to account for all different consumer cases is a difficult undertaking.
+This browser matrix takes into account various factors such as ECMAScript (ES), browser API, and CSS
+feature compatibility across different browsers and across different versions of those browsers.
+Fluent UI strives to find a balance that enables consumers who support modern browsers to reap the
+full benefits of newer features while at the same time providing the necessary guidance to consumers who
+support older browsers. Details of a full and partial browser support matrix as well as actions consumers
+can take such as transpiling and polyfilling are outlined below.
-FluentUI supports browsers that are at or above the indicated versions below:
+## Full Browser Support Matrix
+
+Fluent UI fully supports browsers that are at or above the indicated versions below. Consumers who support these browsers
+are poised to experience the full performance and bundlesize benefits that these modern browsers afford the Fluent UI React library.
**Desktop Browsers:**
@@ -18,14 +27,74 @@ FluentUI supports browsers that are at or above the indicated versions below:
| ------------- | ------------------ | ------- |
| >=14.5 | >=84 | >=16 |
-FluentUI will ensure that no browser, EcmaScript(ES), or CSS features that are incompatible with the support matrix laid out above are introduced.
-FluentUI will not be providing polyfills for features that we expect our browser support matrix to already support. This means that consumers who require the
-use/support of older browsers that don't support certain browser, ES, or CSS features (i.e. `ResizeObserver`),
-are expected to implement their own polyfills or use a third-party one.
+Fluent UI will ensure that no browser or CSS features that are incompatible with the support matrix laid out above are introduced. The same goes for
+ECMAScript features, Fluent UI will be targeting ES2020 and thus will be shipping an ES2020 compliant code which will be fully compatible with the
+full browser support matrix. For consumers who require the use/support of older browsers, please see the partial support matrix and polyfill sections
+below for more information on what will need to be done.
+
+## Partial Browser Support Matrix:
+
+Fluent UI introduces a new concept of a partial browser support matrix as a means to find that balance between supporting modern browsers and older browsers.
+The partial browser matrix below will have limitations that require consumers to transpile down and/or use polyfills to cover the support gaps. The feature gaps
+are listed below with subsequent recommendation on how to handle each case.
+
+**Desktop Browsers:**
+
+| Edge | Firefox | Chrome | Safari | Opera | Internet Explorer |
+| ---- | ------- | ------ | ------ | ----- | ----------------- |
+| >=79 | >=69 | >=79 | >=13.1 | >=64 | Not Supported |
+
+**Mobile Browsers:**
+
+| Safari on iOS | Chrome for Android | Samsung |
+| ------------- | ------------------ | ------- |
+| >=13.4 | >=79 | >=14 |
+
+List of features that are currently used in Fluent UI that aren't supported out of the box by the partial support matrix above:
+
+**Unsupported CSS Features:**
+
+- CSS features below are not supported by some browsers within the partial support matrix. The absence of these features will not crash consumer applications,
+ it will simply degrade the user interface.
+
+1. [Flex gap](https://caniuse.com/flexbox-gap): Unsupported by Chrome, Edge, Firefox, Opera, Safari, Safari on IOS, Chrome on Android
+2. [CSS min, max, clamp](https://caniuse.com/css-math-functions): Unsupported by Firefox and Opera
+3. [CSS revert value](https://caniuse.com/css-revert-value): Unsupported by Opera
+
+**Unsupported ECMAScript Features:**
+
+- As previously mentioned, Fluent UI will be targeting ES2020. Some ES2020 features are already present
+ in the library and the partial support matrix does not fully support ES2020. This means that consumers who follow the partial support matrix or any browser versions below it
+ will need to transpile down the Fluent UI library to make it work since the use of these ES2020 features results in the application crashing on the listed browsers below.
+
+1. Nullish Coalescing: Unsupported by Chrome, Edge, Firefox, Opera.
+2. Optional Chaining: Unsupported by Chrome, Edge, Firefox, Opera.
+
+## Polyfills
+
+By default Fluent UI will not be providing polyfills for features we expect our full browser support matrix to already support.
+The only instance that a polyfill may be provided is when Fluent UI's use of a feature causes an application to crash on
+the partial support browser matrix. Other than that, consumers will need to implement their own polyfills or use a third party one for their
+applications because:
+
+- handling polyfills on the application level ensures that those on modern browsers don't suffer from unnecessary overhead of
+ polyfills being shipped with the Fluent UI library by default
+- prevents any unintended polyfill duplication from the library and app level
+- gives consumers the flexibility to provide robust solutions such as shipping a bundle with the necessary polyfills to support older browsers and one with a lighter,
+ polyfill-free bundle to support modern browsers
+
+## Developer Expectations:
+
+1. Fluent UI developers and contributors are internally expected to develop against the partial browser support matrix.
+ This means that no code which causes applications to crash on the partially supported browsers (with the exception of ES syntax which are transpilable by the consumer)
+ should be present in the library. Should any application breaking errors be discovered in the future, Fluent UI will be responsible for fixing it internally.
+2. Since Fluent UI will be transpiling down and shipping ES2020 code, Fluent UI developers will internally develop against the latest ECMA standards.
+3. Fluent UI developers and contributors reserve the right to use features that fall in between the partial and full browser support matrices (like flex gap) as
+ long as they don't result in applications crashing.
## Browser Support Going Forward
-With an eye towards being a modern library, FluentUI will follow a yearly audit process to evaluate and update the current browser support matrix to keep pace
+With an eye towards being a modern library, Fluent UI will follow a yearly audit process to evaluate and update the current browser support matrix to keep pace
with the ever evolving ecosystem of the web. This will allow the team to utilize modern tools and improve overall engineering efficiency while also providing
-consumers with performance and bundlesize improvements. These yearly audits will give FluentUI a reasonable timeframe to evaluate, decide and give notice if browser support
+consumers with performance and bundlesize improvements. These yearly audits will give Fluent UI a reasonable timeframe to evaluate, decide and give notice if browser support
changes are made.
diff --git a/apps/public-docsite-v9/src/Concepts/BuildTimeStyles.stories.mdx b/apps/public-docsite-v9/src/Concepts/BuildTimeStyles.stories.mdx
index 10509ecc8593c3..b0133a0a28f573 100644
--- a/apps/public-docsite-v9/src/Concepts/BuildTimeStyles.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/BuildTimeStyles.stories.mdx
@@ -32,38 +32,44 @@ In your Webpack config, simply add the `@griffel/webpack-loader` to the list of
```js
// webpack.config.js
-module: {
- rules: [
- {
- test: /\.(ts|tsx)$/,
- exclude: /node_modules/,
- use: {
- loader: '@griffel/webpack-loader',
- options: {
- // see https://github.com/microsoft/griffel/tree/main/packages/webpack-loader#configuring-babel-settings
- babelOptions: {
- presets: ['@babel/preset-typescript'],
+module.exports = {
+ module: {
+ rules: [
+ // 💡 We recommend adding the Griffel webpack loader after `babel-loader`, `ts-loader`, etc.
+ //
+ // The underlying Babel transforms used by the Webpack loader are configured by default to use
+ // the most basic language features. Therefore, to avoid extra configuration or parsing errors,
+ // using the Webpack loader after compilation is the required approach.
+ {
+ test: /\.(ts|tsx)$/,
+ exclude: /node_modules/,
+ use: {
+ loader: '@griffel/webpack-loader',
+ options: {
+ // see https://github.com/microsoft/griffel/tree/main/packages/webpack-loader#configuring-babel-settings
+ babelOptions: {
+ presets: ['@babel/preset-typescript'],
+ },
},
},
},
- },
- {
- test: /\.(ts|tsx)$/,
- exclude: /node_modules/,
- use: {
- // or 'ts-loader'
- loader: 'babel-loader',
+ {
+ test: /\.(ts|tsx)$/,
+ exclude: /node_modules/,
+ use: {
+ // or 'ts-loader'
+ loader: 'babel-loader',
+ },
},
- },
- ];
-}
+ ],
+ },
+};
```
-**💡 NOTE: we recommend adding the Griffel webpack loader after babel-loader or ts-loader.**. The underlying babel transforms
-used by the webpack loader are configured by default to use the most basic language features. Therefore to avoid
-extra configuration or parsing errors, using the webpack loader after transpilation is the required approach.
+> ℹ️ **Note**: A chain of webpack loaders is executed in reverse order
+> [https://webpack.js.org/concepts/loaders/#loader-features](https://webpack.js.org/concepts/loaders/#loader-features)
-#### Typescript (and additional transpilation) support
+#### Typescript (and additional compilation) support
The Webpack loader [evaluate styles at runtime](#build-time-style-evaluation). For typescript
it's necessary to install `@babel/preset-typescript` and configure it in the [babelOptions](https://github.com/microsoft/griffel/tree/main/packages/webpack-loader#configuring-babel-settings) of the loader. Similarly
diff --git a/apps/public-docsite-v9/src/Concepts/ChildWindow.stories.mdx b/apps/public-docsite-v9/src/Concepts/ChildWindow.stories.mdx
index eff9c7b9333c1e..ec77bd58cc644d 100644
--- a/apps/public-docsite-v9/src/Concepts/ChildWindow.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/ChildWindow.stories.mdx
@@ -10,7 +10,7 @@ In these cases, the target element is hosted in a different context, and thus ha
### Configuring rendering
-We need to configure a renderer for `makeStyles()` and pass a `targetDocument` to `FluentProvider`:
+We need to configure a renderer for `makeStyles()` and pass a `targetDocument` to `RendererProvider` & `FluentProvider`:
```js
import { createDOMRenderer, FluentProvider, RendererProvider } from '@fluentui/react-components';
@@ -21,7 +21,7 @@ function MyComponent(props) {
const renderer = React.useMemo(() => createDOMRenderer(targetDocument), [targetDocument]);
return (
-
+
{children}
);
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Avatar.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Avatar.stories.mdx
similarity index 95%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Avatar.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Avatar.stories.mdx
index 4e69002ddd7a6b..fdc1c6af04b352 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Avatar.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Avatar.stories.mdx
@@ -1,8 +1,8 @@
import { Meta } from '@storybook/addon-docs';
-
+
-# Avatar Upgrade
+# Avatar Migration
## Overview:
@@ -26,7 +26,7 @@ const Component = () => ;
| ------------------------- | -------------------------------------------------------------------------------------------------------- |
| as, className | keep it as is |
| variables, design, styles | see Migrate style overrides in this document |
-| accessibility | see [migrate-custom-accessibility.md](?path=/docs/concepts-upgrading-from-v0-custom-accessibility--page) |
+| accessibility | see [migrate-custom-accessibility.md](?path=/docs/concepts-migrating-from-v0-custom-accessibility--page) |
| key, ref | keep it as is |
| getInitials | use `initials` prop instead |
| icon | keep it as is |
@@ -41,7 +41,7 @@ const Component = () => ;
## Migrate style overrides
-⚠️ **If this is your first migration**, please read [the general guide on how to migrate styles](?path=/docs/concepts-upgrading-from-v0-custom-style-overrides--page).
+⚠️ **If this is your first migration**, please read [the general guide on how to migrate styles](?path=/docs/concepts-migrating-from-v0-custom-style-overrides--page).
### Example for migrate boolean `variables`:
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Button.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Button.stories.mdx
new file mode 100644
index 00000000000000..70ae8f979e0309
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Button.stories.mdx
@@ -0,0 +1,289 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Button Migration
+
+## Overview:
+
+Before:
+
+```tsx
+import { Button } from '@fluentui/react-northstar';
+const Component = () => ;
+```
+
+After:
+
+```tsx
+import { Button } from '@fluentui/react-components';
+const Component = () => Here is Button ;
+```
+
+## How to migrate props:
+
+| Button props | migrate guide |
+| ----------------- | -------------------------------------------------------------------------------------------------------- |
+| as, className | keep it as is |
+| content | see Migrate content prop in this document |
+| variables, styles | see Migrate style overrides in this document |
+| accessibility | see [migrate-custom-accessibility.md](?path=/docs/concepts-migrating-from-v0-custom-accessibility--page) |
+| circular | replace with `shape="circular"` |
+| disabled | keep it as is |
+| disabledFocusable | keep it as is |
+| flat | REMOVED: it's a default view now, we're moving away from shadows |
+| fluid | replace with `block` |
+| icon | keep it as is. See Button + Icon integration in this document |
+| iconOnly | REMOVED: see Migrate iconOnly prop in this document |
+| iconPosition | keep it as is |
+| inverted | REMOVED: use styles and color tokens to set a proper styling \* |
+| loader, loading | REMOVED: see Migrate loading and loader props in this document |
+| primary | use `appearance="primary"` |
+| secondary | REMOVED: the button appears with the default style |
+| size | keep it as is. Values: `small`, `medium`(default) and `large` |
+| text | use `appearance="transparent"` |
+| tinted | REMOVED: use Default button instead |
+
+\* this may be changed
+Here is comparison for both versions: [Sandbox](https://codesandbox.io/s/exciting-liskov-y5u5hy?file=/example.tsx)
+
+---
+
+## Migrate `content` prop
+
+Move `content` to JSX children.
+
+Before:
+
+```tsx
+import { Button } from '@fluentui/react-northstar';
+const Component = () => ;
+```
+
+After:
+
+```tsx
+import { Button } from '@fluentui/react-components';
+const Component = () => Button content ;
+```
+
+## Migrate style overrides
+
+⚠️ **If this is your first migration**, please read [the general guide on how to migrate styles](?path=/docs/concepts-migrating-from-v0-custom-style-overrides--page).
+
+### Example for migrate boolean `variables`:
+
+Before:
+
+```tsx
+// in COMPONENT_NAME.tsx
+import { Button } from '@fluentui/react-northstar';
+
+export const Component = () => ;
+
+// in button-styles.ts
+export const buttonStyles1 = {
+ root: ({ variables: { isActionButton } }) => ({
+ ...(isActionButton && {
+ color: colors.grey['250'],
+ }),
+ }),
+};
+```
+
+After:
+
+```tsx
+// in COMPONENT_NAME.tsx
+import { Button } from '@fluentui/react-components';
+import { useStyles } from './COMPONENT_NAME.styles.ts';
+
+export const Component = () => {
+ const classes = useStyles();
+ return ;
+};
+
+// in COMPONENT_NAME.styles.ts
+import { makeStyles, tokens } from '@fluentui/react-components';
+
+export const useStyles = makeStyles({
+ actionButton: {
+ color: colors.colorNeutralForeground1,
+ },
+});
+```
+
+### Example for migrate namespaced styles, with conditional styles via `variableProps`:
+
+Before:
+
+```tsx
+// in COMPONENT_NAME.tsx
+import { Button, useUIProviderContext } from '@fluentui/react-northstar';
+
+export const Component = props => {
+ const { vars } = useUIProviderContext();
+ const { enableUsingChatListGroupTitleAsHeader } = props;
+ return (
+
+ );
+};
+
+// in button-namespace-flyout.ts
+export default {
+ root: {
+ filterButton: ({ variableProps: { enableUsingChatListGroupTitleAsHeader } }) => ({
+ ...(enableUsingChatListGroupTitleAsHeader && {
+ height: '2rem',
+ width: '2rem',
+ minWidth: '2rem',
+ }),
+ }),
+ },
+};
+```
+
+After:
+
+```tsx
+// in COMPONENT_NAME.tsx
+import { Button, mergeClasses } from '@fluentui/react-components';
+import { useStyles } from './COMPONENT_NAME.styles.ts';
+
+export const Component = props => {
+ const classes = useStyles();
+
+ return (
+
+ );
+};
+
+// in COMPONENT_NAME.styles.ts
+import { makeStyles } from '@fluentui/react-components';
+
+export const useStyles = makeStyles({
+ chatListGroupTitleAsHeader: {
+ height: '32px',
+ width: '32px',
+ minWidth: '32px',
+ },
+});
+```
+
+### Migrate `iconOnly` prop
+
+Before:
+
+```tsx
+import { Button } from '@fluentui/react-northstar';
+const Component1 = () => } iconOnly />;
+const Component2 = () => } iconOnly text />;
+```
+
+After:
+
+```tsx
+import { Button } from '@fluentui/react-components';
+import { PeopleTeamAdd } from '@fluentui/react-components-icons';
+const Component1 = () => } />;
+const Component2 = () => } appearance="transparent" />;
+```
+
+### Button + Icon integration
+
+During migration it's possible to have different cases for Button + Icon usage, when you need to use v0 + v9 versions together.
+
+**Usage with v9 Button:**
+
+```tsx
+import { CalendarMonth } from '@fluentui/react-components-icons';
+import { Button } from '@fluentui/react-components';
+
+const Component = () => }>Calendar;
+```
+
+**Usage with v0 Button:**
+
+For usage v9 Icon with v0 Button it's required to add additional styles to keep similar behaviour:
+
+```tsx
+import { CalendarMonth } from '@fluentui/react-components-icons';
+import { buttonMigrationStyles } from '@fluentui/react-components';
+import { Button, useUIProviderContext } from '@fluentui/react-northstar';
+
+const Component = () => {
+ const { vars } = useUIProviderContext();
+ return } content="Calendar" />;
+};
+
+// in button-namespace-flyout.ts
+import { buttonMigrationStyles } from '@fluentui/react-components';
+
+export default {
+ root: {
+ filterButton: () => ({
+ ...buttonMigrationStyles.V9Icon(),
+ }),
+ },
+};
+```
+
+**v0 Icon + v9 Button:**
+
+```tsx
+import { CalendarIcon } from '@fluentui/react-icons-northstar';
+import { Button, makeStyles } from '@fluentui/react-components';
+import { buttonMigrationStyles } from '@fluentui/react-components';
+
+const useButtonStyles = makeStyles({
+ v0IconStyle: {
+ ...buttonMigrationStyles.v0Icon(),
+ },
+});
+
+const Component = () => {
+ const classes = useButtonStyles();
+ return (
+ }>
+ Calendar
+
+ );
+};
+```
+
+Live example is here: https://codesandbox.io/s/button-icon-migration-lkt6o5?file=/example.tsx
+
+### Migrate `loading` and `loader` props
+
+Props `loading` and `loader` were removed. To replace old functionality can be used this method:
+
+Before:
+
+```tsx
+import { Button } from '@fluentui/react-northstar';
+const Component = () => ;
+```
+
+After:
+
+```tsx
+import { Button } from '@fluentui/react-components';
+import { Loader } from '@fluentui/react-northstar';
+const Component = () => (
+
+
+ Loading
+
+);
+```
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Checkbox.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Checkbox.stories.mdx
new file mode 100644
index 00000000000000..6d814bd8e3a01a
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Checkbox.stories.mdx
@@ -0,0 +1,71 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Checkbox Migration
+
+Fluent UI Northstar (v0) provides the `Checkbox` control to make a choice between two mutually exclusive options. Fluent UI v9 provides a `Checkbox` control, but has a different API.
+
+The main difference between v0 and v9 `Checkbox` is that v9 offers a circular variant and does not provide a toggle prop.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `Checkbox` v0
+
+```tsx
+import * as React from 'react';
+import { Checkbox } from '@fluentui/react-northstar';
+
+const CheckboxV0BasicExample = () => {
+ return (
+ <>
+
+
+
+ >
+ );
+};
+```
+
+An equivalent `Checkbox` in v9 is
+
+```tsx
+import * as React from 'react';
+import { Checkbox } from '@fluentui/react-components';
+
+const CheckboxV9BasicExample = () => {
+ return (
+ <>
+
+
+
+ >
+ );
+};
+```
+
+## Prop Mapping
+
+This table maps `Checkbox` v0 props to the `Checkbox` v9 equivalent.
+
+| v0 | v9 | Notes |
+| ---------------- | ---------------- | ----------------------------------------------------------- |
+| `accessibility` | n/a | |
+| `as` | n/a | |
+| `checked` | `checked` | Mutually exclusive with `defaultChecked` |
+| `className` | `className` | |
+| `defaultChecked` | `defaultChecked` | Mutually exclusive with `checked` |
+| `design` | n/a | |
+| `disabled` | `disabled` | |
+| `indicator` | `indicator` | |
+| `key` | `key` | v9 uses the intrinsic React prop |
+| `label` | `label` | |
+| `labelPosition` | `labelPosition` | |
+| `onChange` | `onChange` | |
+| `onClick` | `onClick` | |
+| `ref` | `ref` | |
+| `styles` | `className` | |
+| `toggle` | n/a | Refer to the `Switch` component in `@fluentui/react-switch` |
+| `variables` | n/a | Use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Divider.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Divider.stories.mdx
new file mode 100644
index 00000000000000..618f8c1c5a6478
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Divider.stories.mdx
@@ -0,0 +1,119 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Divider Migration
+
+## Overview:
+
+Before:
+
+```tsx
+import { Divider } from '@fluentui/react-northstar';
+const Component = () => ;
+```
+
+After:
+
+```tsx
+import { Divider } from '@fluentui/react-components';
+const Component = () => ;
+```
+
+The default v0 Divider has paddings above/below for horizontal Divider, and left/right for vertical Divider.
+v9 Divider has no such padding. Therefore v9 Divider appears similar to v0 ` `.
+
+To add paddings on v9 Divider to match v0, please see style overrides in this [codesandbox](https://codesandbox.io/s/divider-migration-88ws6u?file=/DefaultDividerExample.jsx), _DefaultDividerExample.jsx_ `useMigrationStyles`.
+
+## How to migrate props:
+
+| Divider props | migrate guide |
+| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| as, className, key, ref | keep it as is |
+| vertical | keep it as is |
+| fitted | simply remove it |
+| content | see Migrate content prop in this document |
+| variables, styles | see Migrate style overrides in this document |
+| accessibility | see [migrate-custom-accessibility.md](?path=/docs/concepts-migrating-from-v0-custom-accessibility--page) |
+| important | see Migrate important prop in this document |
+| size | see Migrate size prop in this document |
+| color | replace `color="brand"` with `appearance="brand"`. For other color value, add style override with makeStyles and color tokens |
+
+See this [codesandbox](https://codesandbox.io/s/divider-migration-88ws6u?file=/example.js) comparing v9 Divider with v0, including guides on adding v9 style overrides to match v0.
+
+---
+
+## Migrate `content` prop
+
+Move `content` to JSX children.
+
+Before:
+
+```tsx
+import { Divider } from '@fluentui/react-northstar';
+const Component = () => ;
+```
+
+After:
+
+```tsx
+import { Divider } from '@fluentui/react-components';
+const Component = () => hi ;
+```
+
+## Migrate `important` prop
+
+v0 `important` prop adds `fontWeight: "700"` on children. It can be achieved via style overrides, see [codesandbox](https://codesandbox.io/s/divider-migration-88ws6u?file=/ImportantDividerExample.jsx:312-329), _ImportantDividerExample.jsx_ `useMigrationStyles`.
+
+## Migrate `size` prop
+
+By default Divider is 1px, `size={1}` Divider is 2px, `size={2}` Divider is 3px.
+v9 Divider size can be changed by updating its `:before`/`:after` pseudo element's `borderTopWidth`.
+
+See [codesandbox](https://codesandbox.io/s/divider-migration-88ws6u?file=/SizedDividerExample.jsx), _SizedDividerExample.jsx_ `useMigrationStyles`, for style overrides to match `size={1}` and `size={2}`,
+
+## Migrate style overrides
+
+⚠️ **If this is your first migration**, please read [the general guide on how to migrate styles](?path=/docs/concepts-migrating-from-v0-custom-style-overrides--page).
+
+### Example for migrate boolean `variables`:
+
+Before:
+
+```tsx
+// in COMPONENT_NAME.tsx
+import { Divider } from '@fluentui/react-northstar';
+
+export const Component = () => ;
+
+// in divider-styles.ts
+export const dividerStyles = {
+ root: ({ variables: { isCustomDivider } }) => ({
+ ...(isCustomDivider && {
+ height: '3.2rem',
+ }),
+ }),
+};
+```
+
+After:
+
+```tsx
+// in COMPONENT_NAME.tsx
+import { Divider } from '@fluentui/react-components';
+import { useStyles } from './COMPONENT_NAME.styles.ts';
+
+export const Component = () => {
+ const classes = useStyles();
+ return ;
+};
+
+// in COMPONENT_NAME.styles.ts
+import { makeStyles } from '@fluentui/react-components';
+
+export const useStyles = makeStyles({
+ chatEntityHeaderDivider: {
+ height: '32px',
+ },
+});
+```
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Header.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Header.stories.mdx
similarity index 95%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Header.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Header.stories.mdx
index 09f6b72b7a03a6..15f8458955a6c2 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Header.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Header.stories.mdx
@@ -1,8 +1,8 @@
import { Meta } from '@storybook/addon-docs';
-
+
-# Header Upgrade
+# Header Migration
## Overview:
@@ -68,7 +68,7 @@ const Component = () => (
| className | keep it as is |
| content | see Migrate content prop in this document |
| variables, design, styles | see Migrate style overrides in this document |
-| accessibility | see [migrate-custom-accessibility.md](?path=/docs/concepts-upgrading-from-v0-custom-accessibility--page) |
+| accessibility | see [migrate-custom-accessibility.md](?path=/docs/concepts-migrating-from-v0-custom-accessibility--page) |
| color | REMOVED: use styles and color tokens to set the color |
| ref, key | keep it as is |
@@ -96,7 +96,7 @@ const Component = () => Header content ;
## Migrate style overrides
-⚠️ **If this is your first migration**, please read [the general guide on how to migrate styles](?path=/docs/concepts-upgrading-from-v0-custom-style-overrides--page).
+⚠️ **If this is your first migration**, please read [the general guide on how to migrate styles](?path=/docs/concepts-migrating-from-v0-custom-style-overrides--page).
### Example for migrate boolean `variables`:
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/ComparisonTile.tsx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/ComparisonTile.tsx
new file mode 100644
index 00000000000000..14bd9ba66184a0
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/ComparisonTile.tsx
@@ -0,0 +1,102 @@
+import * as React from 'react';
+import { DismissRegular, InfoRegular } from '@fluentui/react-icons';
+import { makeStyles, shorthands, tokens, Button, mergeClasses, Tooltip } from '@fluentui/react-components';
+import { V0IconComponent, V9IconComponent } from './types';
+
+const useIconTileStyles = makeStyles({
+ root: {
+ position: 'relative',
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ ...shorthands.padding('5px', '0px'),
+ ...shorthands.gap('10px'),
+ ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStroke1),
+ maxHeight: '105px',
+ ':hover': {
+ backgroundColor: tokens.colorNeutralBackground2Hover,
+ },
+ },
+
+ badge: {
+ position: 'absolute',
+ top: '5px',
+ right: '10px',
+ },
+
+ warning: {
+ color: tokens.colorPaletteDarkOrangeBackground3,
+ },
+
+ success: {
+ color: tokens.colorPaletteGreenBackground3,
+ },
+
+ v0: {
+ width: '16px',
+ height: '16px',
+ },
+
+ v9: {
+ width: '20px',
+ height: '20px',
+ },
+
+ tile: {
+ display: 'flex',
+ flexDirection: 'column',
+ justifyContent: 'center',
+ alignItems: 'center',
+ ...shorthands.gap('2px'),
+ },
+
+ buttonReset: {
+ resize: 'horizontal',
+ boxSizing: 'content-box',
+ backgroundColor: 'inherit',
+ color: 'inherit',
+ fontFamily: 'inherit',
+ fontSize: 'inherit',
+ lineHeight: 'normal',
+ ...shorthands.overflow('visible'),
+ ...shorthands.padding(0),
+ ...shorthands.borderStyle('none'),
+ WebkitAppearance: 'button',
+ textAlign: 'unset',
+ },
+});
+
+interface IComparisonTileProps {
+ V0Icon: V0IconComponent;
+ V9Icon?: V9IconComponent;
+}
+
+export const ComparisonTile: React.FC = ({ V0Icon, V9Icon }) => {
+ const noV9Icon = !V9Icon;
+
+ const tooltipWarningContent = {noV9Icon && No equivalent icon available } ;
+
+ const styles = useIconTileStyles();
+ return (
+
+
+ }
+ shape="circular"
+ />
+
+
+
{ }
+
{V0Icon.displayName}
+
+
+
+ {V9Icon ? : }
+
+
{V9Icon ? V9Icon.displayName : 'Not Available'}
+
+
+ );
+};
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/IconCatalog.tsx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/IconCatalog.tsx
new file mode 100644
index 00000000000000..ae88d1f6d95f33
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/IconCatalog.tsx
@@ -0,0 +1,111 @@
+import * as React from 'react';
+import { Provider, teamsV2Theme } from '@fluentui/react-northstar';
+import * as v0Icons from '@fluentui/react-icons-northstar';
+import * as v9Icons from '@fluentui/react-icons';
+import { makeStyles, Input, Switch, Label } from '@fluentui/react-components';
+import type { InputProps, SwitchProps } from '@fluentui/react-components';
+import { iconMapping as rawMapping } from './iconMapping';
+import { IconGrid } from './IconGrid';
+import { useDebounce } from './useDebounce';
+import { V0IconComponent, V9IconComponent } from './types';
+
+const useStyles = makeStyles({
+ searchPanel: {
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'space-between',
+ marginBottom: '10px',
+ marginTop: '20px',
+ },
+
+ switch: {
+ display: 'flex',
+ alignItems: 'center',
+ },
+});
+
+const _mapping = rawMapping
+ .map(entry => {
+ const v0IconName = `${entry.v0}`;
+ const v9IconName = `${entry.v9}Regular`;
+ const V0Icon = ((v0Icons as unknown) as Record)[v0IconName];
+ const V9Icon = ((v9Icons as unknown) as Record)[v9IconName];
+
+ if (!V0Icon) {
+ return null;
+ }
+
+ return {
+ v9Search: entry.v9?.toLowerCase(),
+ v0Search: entry.v0.toLowerCase(),
+ V0Icon,
+ V9Icon,
+ };
+ })
+ .filter(Boolean);
+const mapping = _mapping.filter(Boolean) as Array>;
+
+const IconCatalogInner: React.FC = () => {
+ const styles = useStyles();
+ const [searchTerm, setSearchTerm] = React.useState(undefined);
+ const [searchV0, setSearchV0] = React.useState(true);
+
+ const updateSearch = React.useCallback(
+ (newSearchTerm: string) => {
+ setSearchTerm(newSearchTerm.toLowerCase());
+ },
+ [setSearchTerm],
+ );
+
+ const updateSearchDebounced = useDebounce(updateSearch, 220);
+
+ const entries = React.useMemo(
+ () =>
+ mapping.filter(entry => {
+ if (!searchTerm) {
+ return true;
+ }
+
+ if (searchV0) {
+ return entry.v0Search.includes(searchTerm);
+ }
+
+ return entry.v9Search?.includes(searchTerm);
+ }),
+ [searchTerm, searchV0],
+ );
+
+ const onInputChange: InputProps['onChange'] = React.useCallback((e, { value }) => updateSearchDebounced(value), [
+ updateSearchDebounced,
+ ]);
+ const onSwitchChange: SwitchProps['onChange'] = React.useCallback((e, { checked }) => setSearchV0(checked), []);
+
+ return (
+ <>
+
+
+
+
+ {searchV0 ? 'Searching Northstar icons ' : 'Searching V9 icons'}
+
+
+
+
+ {entries.length} icon entries
+
+ >
+ );
+};
+
+// Simply hoists the northstar provider above the catalog to avoid unnecessarily
+// re-rendering the provider.
+const northstarTheme = { ...teamsV2Theme, staticStyles: [] };
+export const IconCatalog: React.FC = () => (
+
+
+
+);
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/IconGrid.tsx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/IconGrid.tsx
new file mode 100644
index 00000000000000..ff12cd383583e5
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/IconGrid.tsx
@@ -0,0 +1,42 @@
+import * as React from 'react';
+import { FixedSizeList as List } from 'react-window';
+import type { ListChildComponentProps } from 'react-window';
+import { ComparisonTile as ComparisonTileBase } from './ComparisonTile';
+import { V0IconComponent, V9IconComponent } from './types';
+
+const ComparisonTile = React.memo(ComparisonTileBase);
+
+interface IIconGridProps {
+ entries: {
+ V0Icon: V0IconComponent;
+ V9Icon?: V9IconComponent;
+ }[];
+}
+
+const ROW_SIZE = 3;
+
+interface IRowProps extends ListChildComponentProps {
+ data: IIconGridProps['entries'];
+}
+
+const Row = ({ index, style, data }: IRowProps) => {
+ const start = index * ROW_SIZE;
+ const items = data.slice(start, start + 3);
+ return (
+
+
+ {items.map(({ V0Icon, V9Icon }) => (
+
+ ))}
+
+
+ );
+};
+
+export const IconGrid: React.FC = ({ entries }) => {
+ return (
+
+ {Row}
+
+ );
+};
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/iconMapping.ts b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/iconMapping.ts
new file mode 100644
index 00000000000000..929ca31553c6e6
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/iconMapping.ts
@@ -0,0 +1,2131 @@
+/**
+ * This file is the source of truth for mapping of v0 icons to v9 icons.
+ * This mapping was generated manually, any updates should be made directly to this file
+ */
+
+export const iconMapping = [
+ {
+ v0: 'AcceptIcon',
+ v9: 'Checkmark',
+ },
+ {
+ v0: 'AccessibilityIcon',
+ v9: 'Accessibility',
+ },
+ {
+ v0: 'AddIcon',
+ v9: 'Add',
+ },
+ {
+ v0: 'ApprovalsAppbarIcon',
+ v9: 'ApprovalsApp',
+ },
+ {
+ v0: 'ArchiveIcon',
+ v9: 'Archive',
+ },
+ {
+ v0: 'ArrowDownIcon',
+ v9: 'ArrowDown',
+ },
+ {
+ v0: 'ArrowLeftIcon',
+ v9: 'ArrowLeft',
+ },
+ {
+ v0: 'ArrowRightIcon',
+ v9: 'ArrowRight',
+ },
+ {
+ v0: 'ArrowSyncIcon',
+ v9: 'ArrowSync',
+ },
+ {
+ v0: 'ArrowUpIcon',
+ v9: 'ArrowUp',
+ },
+ {
+ v0: 'AttendeeIcon',
+ v9: 'PeopleAudience',
+ },
+ {
+ v0: 'AudienceIcon',
+ v9: 'PeopleAudience',
+ },
+ {
+ v0: 'AudioLoadingIcon',
+ v9: 'MicSync',
+ },
+ {
+ v0: 'AudioOffIcon',
+ v9: 'SpeakerOff',
+ },
+ {
+ v0: 'BanIcon',
+ v9: 'Prohibited',
+ },
+ {
+ v0: 'BellIcon',
+ v9: 'Alert',
+ },
+ {
+ v0: 'BellSlashIcon',
+ v9: 'AlertOff',
+ },
+ {
+ v0: 'BellSnoozeIcon',
+ v9: 'AlertSnooze',
+ },
+ {
+ v0: 'BluetoothIcon',
+ v9: 'Bluetooth',
+ },
+ {
+ v0: 'BoldIcon',
+ v9: 'TextBold',
+ },
+ {
+ v0: 'BookmarkIcon',
+ v9: 'Bookmark',
+ },
+ {
+ v0: 'BreakoutRoomIcon',
+ v9: 'BreakoutRoom',
+ },
+ {
+ v0: 'BriefcaseIcon',
+ v9: 'Briefcase',
+ },
+ {
+ v0: 'BroadcastIcon',
+ v9: 'Live',
+ },
+ {
+ v0: 'BroadcastViewFullscreenIcon',
+ v9: 'RectangleLandscape',
+ },
+ {
+ v0: 'BroadcastViewLeftIcon',
+ v9: '',
+ },
+ {
+ v0: 'BuildingIcon',
+ v9: 'Building',
+ },
+ {
+ v0: 'BulletsIcon',
+ v9: 'TextBulletListLtr',
+ },
+ {
+ v0: 'CalendarAgendaIcon',
+ v9: 'CalendarAgenda',
+ },
+ {
+ v0: 'CalendarIcon',
+ v9: 'CalendarLtr',
+ },
+ {
+ v0: 'CallBlockedIcon',
+ v9: 'CallProhibited',
+ },
+ {
+ v0: 'CallControlCloseTrayIcon',
+ v9: 'ShareCloseTray',
+ },
+ {
+ v0: 'CallControlPresentNewIcon',
+ v9: 'ShareScreenStart',
+ },
+ {
+ v0: 'CallControlReleaseIcon',
+ v9: 'CursorHoverOff',
+ },
+ {
+ v0: 'CallControlRequestIcon',
+ v9: 'CursorHover',
+ },
+ {
+ v0: 'CallControlShareIcon',
+ v9: 'ShareScreenStart',
+ },
+ {
+ v0: 'CallControlStopPresentingNewIcon',
+ v9: 'ShareScreenStop',
+ },
+ {
+ v0: 'CallDialpadIcon',
+ v9: 'Dialpad',
+ },
+ {
+ v0: 'CallEndIcon',
+ v9: 'CallEnd',
+ },
+ {
+ v0: 'CallIcon',
+ v9: 'Call',
+ },
+ {
+ v0: 'CallMissedLineIcon',
+ v9: 'CallMissed',
+ },
+ {
+ v0: 'CallParkingIcon',
+ v9: 'CallPark',
+ },
+ {
+ v0: 'CallPstnIcon',
+ v9: 'PersonCall',
+ },
+ {
+ v0: 'CallRecordingIcon',
+ v9: 'Record',
+ },
+ {
+ v0: 'CallVideoIcon',
+ v9: 'Video',
+ },
+ {
+ v0: 'CallVideoOffIcon',
+ v9: 'VideoOff',
+ },
+ {
+ v0: 'CameraIcon',
+ v9: 'Camera',
+ },
+ {
+ v0: 'CanvasAddPageIcon',
+ v9: 'DocumentAdd',
+ },
+ {
+ v0: 'CartIcon',
+ v9: 'Cart',
+ },
+ {
+ v0: 'CastingIcon',
+ v9: 'Cast',
+ },
+ {
+ v0: 'ChannelShareIcon',
+ v9: 'ChannelShare',
+ },
+ {
+ v0: 'ChatIcon',
+ v9: 'Chat',
+ },
+ {
+ v0: 'ChatOffIcon',
+ v9: 'ChatOff',
+ },
+ {
+ v0: 'CheckmarkCircleIcon',
+ v9: 'CheckmarkCircle',
+ },
+ {
+ v0: 'ChevronDownIcon',
+ v9: 'ChevronDown',
+ },
+ {
+ v0: 'ChevronDownMediumIcon',
+ v9: 'ChevronDown',
+ },
+ {
+ v0: 'ChevronEndIcon',
+ v9: 'ChevronRight',
+ },
+ {
+ v0: 'ChevronEndMediumIcon',
+ v9: 'ChevronRight',
+ },
+ {
+ v0: 'ChevronStartIcon',
+ v9: 'ChevronLeft',
+ },
+ {
+ v0: 'CircleIcon',
+ v9: 'Circle',
+ },
+ {
+ v0: 'ClipboardCopiedToIcon',
+ v9: 'ClipboardPaste',
+ },
+ {
+ v0: 'CloseIcon',
+ v9: 'Dismiss',
+ },
+ {
+ v0: 'ClosedCaptionsIcon',
+ v9: 'ClosedCaption',
+ },
+ {
+ v0: 'CodeSnippetIcon',
+ v9: 'Code',
+ },
+ {
+ v0: 'CollapseIcon',
+ v9: 'ArrowMinimize',
+ },
+ {
+ v0: 'CompanionIcon',
+ v9: 'PhoneDesktop',
+ },
+ {
+ v0: 'ComposeIcon',
+ v9: 'Compose',
+ },
+ {
+ v0: 'ComputerAudioOffIcon',
+ v9: 'DesktopSpeaker',
+ },
+ {
+ v0: 'ConferenceRoomDeviceIcon',
+ v9: 'DeviceMeetingRoom',
+ },
+ {
+ v0: 'ContactCardIcon',
+ v9: 'ContactCard',
+ },
+ {
+ v0: 'ContactGroupCallIcon',
+ v9: 'PeopleCall',
+ },
+ {
+ v0: 'ContactGroupIcon',
+ v9: 'PeopleTeam',
+ },
+ {
+ v0: 'ContentIcon',
+ v9: 'ContentView',
+ },
+ {
+ v0: 'CustomerHubIcon',
+ v9: 'ChatMail',
+ },
+ {
+ v0: 'DesktopIcon',
+ v9: 'Desktop',
+ },
+ {
+ v0: 'DoorArrowLeftIcon',
+ v9: 'DoorArrowLeft',
+ },
+ {
+ v0: 'DownloadIcon',
+ v9: 'ArrowDownload',
+ },
+ {
+ v0: 'EditIcon',
+ v9: 'Edit',
+ },
+ {
+ v0: 'EmailIcon',
+ v9: 'Mail',
+ },
+ {
+ v0: 'EmailWithDotIcon',
+ v9: 'MailUnread',
+ },
+ {
+ v0: 'EmojiAddIcon',
+ v9: 'EmojiAdd',
+ },
+ {
+ v0: 'EmojiIcon',
+ v9: 'Emoji',
+ },
+ {
+ v0: 'EmojiSadIcon',
+ v9: 'EmojiSad',
+ },
+ {
+ v0: 'EmojiSurprisedIcon',
+ v9: 'EmojiSurprise',
+ },
+ {
+ v0: 'ErrorIcon',
+ v9: '',
+ },
+ {
+ v0: 'ExcelColorIcon',
+ v9: '',
+ },
+ {
+ v0: 'ExcelIcon',
+ v9: '',
+ },
+ {
+ v0: 'ExclamationTriangleIcon',
+ v9: 'Warning',
+ },
+ {
+ v0: 'ExpandIcon',
+ v9: 'Maximize',
+ },
+ {
+ v0: 'EyeFriendlierIcon',
+ v9: 'Eye',
+ },
+ {
+ v0: 'EyeIcon',
+ v9: 'Eye',
+ },
+ {
+ v0: 'EyeSlashIcon',
+ v9: 'EyeOff',
+ },
+ {
+ v0: 'FilesAftereffectsIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesCodeIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesEmptyIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesErrorIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesFlashIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesGenericColoredIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesGifIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesHtmlColoredIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesIllustratorIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesImageIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesIndesignIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesOneNoteIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesPdfColoredIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesPdfIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesPhotoshopIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesPictureColoredIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesSketchIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesSoundIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesTextColoredIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesTxtIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesUploadIcon',
+ v9: 'ArrowUpload',
+ },
+ {
+ v0: 'FilesVideoIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilesZipIcon',
+ v9: '',
+ },
+ {
+ v0: 'FilterIcon',
+ v9: 'Filter',
+ },
+ {
+ v0: 'FlagIcon',
+ v9: 'Flag',
+ },
+ {
+ v0: 'FluidFileIcon',
+ v9: '',
+ },
+ {
+ v0: 'FluidIcon',
+ v9: 'Fluid',
+ },
+ {
+ v0: 'FontColorIcon',
+ v9: 'TextColor',
+ },
+ {
+ v0: 'FontSizeIcon',
+ v9: 'TextFontSize',
+ },
+ {
+ v0: 'FormatIcon',
+ v9: 'TextEditStyle',
+ },
+ {
+ v0: 'GalleryIcon',
+ v9: 'TableSimple',
+ },
+ {
+ v0: 'GalleryNewIcon',
+ v9: 'TableSimple',
+ },
+ {
+ v0: 'GalleryNewLargeIcon',
+ v9: 'Table',
+ },
+ {
+ v0: 'GeofenceArrivesIcon',
+ v9: '',
+ },
+ {
+ v0: 'GeofenceArrivesOrLeavesIcon',
+ v9: '',
+ },
+ {
+ v0: 'GeofenceLeavesIcon',
+ v9: '',
+ },
+ {
+ v0: 'GiphyIcon',
+ v9: 'Gif',
+ },
+ {
+ v0: 'GlassesIcon',
+ v9: 'Glasses',
+ },
+ {
+ v0: 'GridIcon',
+ v9: 'Grid',
+ },
+ {
+ v0: 'GroupVideoCallGridIcon',
+ v9: 'TableSimple',
+ },
+ {
+ v0: 'HandIcon',
+ v9: 'HandLeft',
+ },
+ {
+ v0: 'HeadsetIcon',
+ v9: 'Headset',
+ },
+ {
+ v0: 'HighlightIcon',
+ v9: 'Highlight',
+ },
+ {
+ v0: 'HorizontalRuleIcon',
+ v9: '',
+ },
+ {
+ v0: 'ImageAltTextIcon',
+ v9: 'ImageAltText',
+ },
+ {
+ v0: 'ImageLibraryIcon',
+ v9: 'ImageMultiple',
+ },
+ {
+ v0: 'ImageUnavailableIcon',
+ v9: 'ImageOff',
+ },
+ {
+ v0: 'IndentIcon',
+ v9: 'TextIndentIncreaseLtr',
+ },
+ {
+ v0: 'InfoIcon',
+ v9: 'Info',
+ },
+ {
+ v0: 'ItalicIcon',
+ v9: 'TextItalic',
+ },
+ {
+ v0: 'LeaveIcon',
+ v9: 'PersonArrowLeft',
+ },
+ {
+ v0: 'LightningIcon',
+ v9: 'Flash',
+ },
+ {
+ v0: 'LikeIcon',
+ v9: 'ThumbLike',
+ },
+ {
+ v0: 'LinkIcon',
+ v9: 'Link',
+ },
+ {
+ v0: 'LinkedInIcon',
+ v9: '',
+ },
+ {
+ v0: 'ListIcon',
+ v9: 'List',
+ },
+ {
+ v0: 'LiveIcon',
+ v9: 'Live',
+ },
+ {
+ v0: 'LiveOffIcon',
+ v9: 'LiveOff',
+ },
+ {
+ v0: 'LocationIcon',
+ v9: 'Location',
+ },
+ {
+ v0: 'LockIcon',
+ v9: 'LockClosed',
+ },
+ {
+ v0: 'MarkAsUnreadIcon',
+ v9: 'GlassesOff',
+ },
+ {
+ v0: 'MeetingNewIcon',
+ v9: 'CalendarAdd',
+ },
+ {
+ v0: 'MeetingTimeIcon',
+ v9: 'CalendarClock',
+ },
+ {
+ v0: 'MentionIcon',
+ v9: 'Mention',
+ },
+ {
+ v0: 'MenuIcon',
+ v9: 'Navigation',
+ },
+ {
+ v0: 'MergeCallsIcon',
+ v9: 'Merge',
+ },
+ {
+ v0: 'MessageSeenIcon',
+ v9: 'Eye',
+ },
+ {
+ v0: 'MicIcon',
+ v9: 'Mic',
+ },
+ {
+ v0: 'MicOffIcon',
+ v9: 'MicOff',
+ },
+ {
+ v0: 'MicrophoneDisabledIcon',
+ v9: 'MicProhibited',
+ },
+ {
+ v0: 'MicrosoftStreamIcon',
+ v9: '',
+ },
+ {
+ v0: 'MoleculeIcon',
+ v9: 'Molecule',
+ },
+ {
+ v0: 'MoreIcon',
+ v9: 'MoreHorizontal',
+ },
+ {
+ v0: 'NoPresenterIcon',
+ v9: 'PresenterOff',
+ },
+ {
+ v0: 'NotepadPersonIcon',
+ v9: 'NotepadPerson',
+ },
+ {
+ v0: 'NotesIcon',
+ v9: 'Notepad',
+ },
+ {
+ v0: 'NotificationsMutedIcon',
+ v9: 'AlertOff',
+ },
+ {
+ v0: 'NumberListIcon',
+ v9: 'TextNumberListLtr',
+ },
+ {
+ v0: 'NumberSymbolIcon',
+ v9: 'NumberSymbol',
+ },
+ {
+ v0: 'OcrOffIcon',
+ v9: 'ScanTypeOff',
+ },
+ {
+ v0: 'OcrOnIcon',
+ v9: 'ScanType',
+ },
+ {
+ v0: 'OneDriveIcon',
+ v9: '',
+ },
+ {
+ v0: 'OneNoteColorIcon',
+ v9: '',
+ },
+ {
+ v0: 'OneNoteIcon',
+ v9: '',
+ },
+ {
+ v0: 'OneNoteMonoIcon',
+ v9: '',
+ },
+ {
+ v0: 'OpenOutsideIcon',
+ v9: 'WindowNew',
+ },
+ {
+ v0: 'OptionsIcon',
+ v9: 'Options',
+ },
+ {
+ v0: 'OutdentIcon',
+ v9: 'TextIndentDecreaseLtr',
+ },
+ {
+ v0: 'OutlookColorIcon',
+ v9: '',
+ },
+ {
+ v0: 'PageFitIcon',
+ v9: 'PageFit',
+ },
+ {
+ v0: 'PanoramaIcon',
+ v9: 'Video360',
+ },
+ {
+ v0: 'PanoramaOffIcon',
+ v9: 'Video360Off',
+ },
+ {
+ v0: 'PaperclipIcon',
+ v9: 'Attach',
+ },
+ {
+ v0: 'ParticipantRemoveIcon',
+ v9: 'PersonDelete',
+ },
+ {
+ v0: 'PauseIcon',
+ v9: 'Pause',
+ },
+ {
+ v0: 'PauseThickIcon',
+ v9: 'Pause',
+ },
+ {
+ v0: 'PhoneArrowIcon',
+ v9: 'CallForward',
+ },
+ {
+ v0: 'PhoneClockIcon',
+ v9: 'CallMissed',
+ },
+ {
+ v0: 'PhoneIcon',
+ v9: 'Phone',
+ },
+ {
+ v0: 'PlayIcon',
+ v9: 'Play',
+ },
+ {
+ v0: 'PlugsIcon',
+ v9: 'Connector',
+ },
+ {
+ v0: 'PollIcon',
+ v9: 'Poll',
+ },
+ {
+ v0: 'PopupIcon',
+ v9: 'WindowNew',
+ },
+ {
+ v0: 'PowerPointColorIcon',
+ v9: '',
+ },
+ {
+ v0: 'PowerPointIcon',
+ v9: '',
+ },
+ {
+ v0: 'PresenceAvailableIcon',
+ v9: 'PresenceAvailable',
+ },
+ {
+ v0: 'PresenceStrokeIcon',
+ v9: 'PresenceUnknown',
+ },
+ {
+ v0: 'PresenterIcon',
+ v9: 'Presenter',
+ },
+ {
+ v0: 'QnaIcon',
+ v9: 'ChatBubblesQuestion',
+ },
+ {
+ v0: 'QuestionCircleIcon',
+ v9: 'QuestionCircle',
+ },
+ {
+ v0: 'QuoteIcon',
+ v9: 'TextQuote',
+ },
+ {
+ v0: 'RadioButtonIcon',
+ v9: 'RadioButton',
+ },
+ {
+ v0: 'RaiseHandColoredIcon',
+ v9: '',
+ },
+ {
+ v0: 'RaiseHandDisabledIcon',
+ v9: 'HandRightOff',
+ },
+ {
+ v0: 'RaiseHandIcon',
+ v9: 'HandRight',
+ },
+ {
+ v0: 'ReactionsIcon',
+ v9: 'EmojiHand',
+ },
+ {
+ v0: 'ReadAloudIcon',
+ v9: 'ReadAloud',
+ },
+ {
+ v0: 'RedbangIcon',
+ v9: '',
+ },
+ {
+ v0: 'RedoIcon',
+ v9: 'ArrowRedo',
+ },
+ {
+ v0: 'RemoveFormatIcon',
+ v9: 'TextClearFormatting',
+ },
+ {
+ v0: 'RetryIcon',
+ v9: 'ArrowClockwise',
+ },
+ {
+ v0: 'RobotIcon',
+ v9: 'Bot',
+ },
+ {
+ v0: 'ScreencastIcon',
+ v9: 'SquareMultiple',
+ },
+ {
+ v0: 'SearchIcon',
+ v9: 'Search',
+ },
+ {
+ v0: 'SendIcon',
+ v9: 'Send',
+ },
+ {
+ v0: 'SettingsAudioIcon',
+ v9: 'Options',
+ },
+ {
+ v0: 'SettingsIcon',
+ v9: 'Settings',
+ },
+ {
+ v0: 'ShareAltIcon',
+ v9: 'Molecule',
+ },
+ {
+ v0: 'ShareGenericIcon',
+ v9: 'Share',
+ },
+ {
+ v0: 'ShareLocationIcon',
+ v9: 'LocationLive',
+ },
+ {
+ v0: 'ShareToIcon',
+ v9: 'TvArrowRight',
+ },
+ {
+ v0: 'ShieldKeyholeIcon',
+ v9: 'ShieldKeyhole',
+ },
+ {
+ v0: 'Shift24hIcon',
+ v9: 'ShiftsDay',
+ },
+ {
+ v0: 'ShiftActivityIcon',
+ v9: 'ShiftsActivity',
+ },
+ {
+ v0: 'SignatureIcon',
+ v9: 'Signature',
+ },
+ {
+ v0: 'SkypeColorIcon',
+ v9: '',
+ },
+ {
+ v0: 'SkypeLogoIcon',
+ v9: '',
+ },
+ {
+ v0: 'SpeakerMuteIcon',
+ v9: 'SpeakerMute',
+ },
+ {
+ v0: 'SpeakerPersonIcon',
+ v9: 'PersonCircle',
+ },
+ {
+ v0: 'SpotlightIcon',
+ v9: 'VideoPersonStar',
+ },
+ {
+ v0: 'StarIcon',
+ v9: 'Star',
+ },
+ {
+ v0: 'StickerIcon',
+ v9: 'Sticker',
+ },
+ {
+ v0: 'StrikeIcon',
+ v9: 'TextStrikethrough',
+ },
+ {
+ v0: 'SubtractIcon',
+ v9: 'Subtract',
+ },
+ {
+ v0: 'SurveyIcon',
+ v9: '',
+ },
+ {
+ v0: 'SwitchCameraIcon',
+ v9: 'VideoSwitch',
+ },
+ {
+ v0: 'SyncIcon',
+ v9: 'ArrowSync',
+ },
+ {
+ v0: 'TableAddIcon',
+ v9: 'TableAdd',
+ },
+ {
+ v0: 'TableDeleteIcon',
+ v9: 'TableDismiss',
+ },
+ {
+ v0: 'TableIcon',
+ v9: 'Table',
+ },
+ {
+ v0: 'TabsIcon',
+ v9: 'Tabs',
+ },
+ {
+ v0: 'TagIcon',
+ v9: 'Tag',
+ },
+ {
+ v0: 'TaskListIcon',
+ v9: 'TaskListLtr',
+ },
+ {
+ v0: 'TeamCreateIcon',
+ v9: 'PeopleAdd',
+ },
+ {
+ v0: 'TeamsIcon',
+ v9: '',
+ },
+ {
+ v0: 'TeamsMonochromeIcon',
+ v9: '',
+ },
+ {
+ v0: 'TenantPersonalIcon',
+ v9: 'MultiselectLtr',
+ },
+ {
+ v0: 'TenantWorkIcon',
+ v9: 'Toolbox',
+ },
+ {
+ v0: 'TextBulletListTreeIcon',
+ v9: 'TextBulletListTree',
+ },
+ {
+ v0: 'ThumbtackIcon',
+ v9: 'Pin',
+ },
+ {
+ v0: 'ThumbtackSlashIcon',
+ v9: 'PinOff',
+ },
+ {
+ v0: 'TiltPanZoomIcon',
+ v9: 'CubeRotate',
+ },
+ {
+ v0: 'ToDoListIcon',
+ v9: 'TaskListSquareLtr',
+ },
+ {
+ v0: 'TranscriptIcon',
+ v9: 'SlideText',
+ },
+ {
+ v0: 'TranslationIcon',
+ v9: 'Translate',
+ },
+ {
+ v0: 'TrashCanIcon',
+ v9: 'Delete',
+ },
+ {
+ v0: 'TriangleDownIcon',
+ v9: 'TriangleDown',
+ },
+ {
+ v0: 'TriangleEndIcon',
+ v9: 'CaretRight',
+ },
+ {
+ v0: 'TriangleUpIcon',
+ v9: 'CaretUp',
+ },
+ {
+ v0: 'TvIcon',
+ v9: 'Tv',
+ },
+ {
+ v0: 'TwitterIcon',
+ v9: '',
+ },
+ {
+ v0: 'UnderlineIcon',
+ v9: 'TextUnderline',
+ },
+ {
+ v0: 'UndoIcon',
+ v9: 'ArrowUndo',
+ },
+ {
+ v0: 'UrgentIcon',
+ v9: 'AlertUrgent',
+ },
+ {
+ v0: 'UserBlurIcon',
+ v9: 'VideoBackgroundEffect',
+ },
+ {
+ v0: 'UserFriendsIcon',
+ v9: 'People',
+ },
+ {
+ v0: 'UserPhoneIcon',
+ v9: 'VideoPersonCall',
+ },
+ {
+ v0: 'VideoCameraEmphasisIcon',
+ v9: 'Video',
+ },
+ {
+ v0: 'VideoLoadingIcon',
+ v9: 'VideoSync',
+ },
+ {
+ v0: 'VideomailIcon',
+ v9: 'VideoRecording',
+ },
+ {
+ v0: 'VisioColorIcon',
+ v9: '',
+ },
+ {
+ v0: 'VisioIcon',
+ v9: '',
+ },
+ {
+ v0: 'VolumeDownIcon',
+ v9: 'Speaker0',
+ },
+ {
+ v0: 'VolumeIcon',
+ v9: 'Speaker1',
+ },
+ {
+ v0: 'VolumeUpIcon',
+ v9: 'Speaker2',
+ },
+ {
+ v0: 'WandIcon',
+ v9: 'Wand',
+ },
+ {
+ v0: 'WhiteboardIcon',
+ v9: 'Whiteboard',
+ },
+ {
+ v0: 'WindowMaximizeIcon',
+ v9: 'Square',
+ },
+ {
+ v0: 'WindowMinimizeIcon',
+ v9: 'Subtract',
+ },
+ {
+ v0: 'WindowRestoreIcon',
+ v9: 'SquareMultiple',
+ },
+ {
+ v0: 'WordColorIcon',
+ v9: '',
+ },
+ {
+ v0: 'WordIcon',
+ v9: '',
+ },
+ {
+ v0: 'WorkOrSchoolIcon',
+ v9: 'Guest',
+ },
+ {
+ v0: 'YammerIcon',
+ v9: '',
+ },
+ {
+ v0: 'ZoomInIcon',
+ v9: 'ZoomIn',
+ },
+ {
+ v0: 'ZoomOutIcon',
+ v9: 'ZoomOut',
+ },
+ {
+ v0: 'ZoomToFitIcon',
+ v9: '',
+ },
+ {
+ v0: 'ActivityIcon',
+ v9: 'Pulse',
+ },
+ {
+ v0: 'AngryFaceReactionIcon',
+ v9: '',
+ },
+ {
+ v0: 'AnnotationIcon',
+ v9: '',
+ },
+ {
+ v0: 'AppBarChatIcon',
+ v9: 'Chat',
+ },
+ {
+ v0: 'AppFolderIcon',
+ v9: 'AppFolder',
+ },
+ {
+ v0: 'AppsIcon',
+ v9: 'Apps',
+ },
+ {
+ v0: 'ApplauseMeetingReactionIcon',
+ v9: '',
+ },
+ {
+ v0: 'ArrowReplyDownIcon',
+ v9: 'ArrowReplyDown',
+ },
+ {
+ v0: 'ArrowSortIcon',
+ v9: 'ArrowSort',
+ },
+ {
+ v0: 'ArrowTrendingIcon',
+ v9: 'ArrowTrending',
+ },
+ {
+ v0: 'AssignParticipantsIcon',
+ v9: 'CalendarPerson',
+ },
+ {
+ v0: 'BookContactsIcon',
+ v9: 'BookContacts',
+ },
+ {
+ v0: 'BorderDottedIcon',
+ v9: 'BorderNone',
+ },
+ {
+ v0: 'BotAddIcon',
+ v9: 'BotAdd',
+ },
+ {
+ v0: 'BreakoutRoomsIcon',
+ v9: 'BreakoutRoom',
+ },
+ {
+ v0: 'BranchForkIcon',
+ v9: 'BranchFork',
+ },
+ {
+ v0: 'CalendarDayIcon',
+ v9: 'CalendarDay',
+ },
+ {
+ v0: 'CalendarNotesIcon',
+ v9: 'CalendarAgenda',
+ },
+ {
+ v0: 'CalendarShareLinkIcon',
+ v9: 'Share',
+ },
+ {
+ v0: 'CalendarTodayIcon',
+ v9: 'CalendarToday',
+ },
+ {
+ v0: 'CalendarWeekIcon',
+ v9: 'Calendar3Day',
+ },
+ {
+ v0: 'CalendarWorkWeekIcon',
+ v9: 'CalendarWorkWeek',
+ },
+ {
+ v0: 'CallConnectingIcon',
+ v9: 'CallConnecting',
+ },
+ {
+ v0: 'CallEndingIcon',
+ v9: 'CallExclamation',
+ },
+ {
+ v0: 'CallMissedIcon',
+ v9: 'CallMissed',
+ },
+ {
+ v0: 'CallTransferredIcon',
+ v9: 'CallTransfer',
+ },
+ {
+ v0: 'CallTransferredRtlIcon',
+ v9: '',
+ },
+ {
+ v0: 'CastIcon',
+ v9: 'Cast',
+ },
+ {
+ v0: 'CameraClickIcon',
+ v9: 'Camera',
+ },
+ {
+ v0: 'CameraEffectIcon',
+ v9: 'Wand',
+ },
+ {
+ v0: 'CameraSwitchIcon',
+ v9: 'CameraSwitch',
+ },
+ {
+ v0: 'CameraRecordingIcon',
+ v9: 'Camera',
+ },
+ {
+ v0: 'ChannelAddIcon',
+ v9: 'ChannelAdd',
+ },
+ {
+ v0: 'ChannelArrowLeftIcon',
+ v9: 'ChannelArrowLeft',
+ },
+ {
+ v0: 'ChannelBlockIcon',
+ v9: 'ChannelSubtract',
+ },
+ {
+ v0: 'ChannelIcon',
+ v9: 'Channel',
+ },
+ {
+ v0: 'ChannelIconFilled',
+ v9: 'Channel',
+ },
+ {
+ v0: 'ChartPersonIcon',
+ v9: 'ChartPerson',
+ },
+ {
+ v0: 'Checkmark12Icon',
+ v9: 'Checkmark',
+ },
+ {
+ v0: 'ChevronLeftIcon',
+ v9: 'ChevronLeft',
+ },
+ {
+ v0: 'ChevronRightIcon',
+ v9: 'ChevronRight',
+ },
+ {
+ v0: 'CleanupOnIcon',
+ v9: 'InprivateAccount',
+ },
+ {
+ v0: 'CleanupOffIcon',
+ v9: '',
+ },
+ {
+ v0: 'ClearBackgroundIcon',
+ v9: '',
+ },
+ {
+ v0: 'ClockIcon',
+ v9: 'Clock',
+ },
+ {
+ v0: 'ClockPauseIcon',
+ v9: 'ClockPause',
+ },
+ {
+ v0: 'CoachCelebrationArtIcon',
+ v9: '',
+ },
+ {
+ v0: 'CoachChartMarker',
+ v9: '',
+ },
+ {
+ v0: 'CoachIcon',
+ v9: 'SlideMicrophone',
+ },
+ {
+ v0: 'ComputerAudioIcon',
+ v9: 'DesktopSpeaker',
+ },
+ {
+ v0: 'ComputerNoAudioIcon',
+ v9: 'DesktopSpeakerOff',
+ },
+ {
+ v0: 'ContentViewGalleryIcon',
+ v9: 'ContentViewGallery',
+ },
+ {
+ v0: 'ContentCameraIcon',
+ v9: 'ScanCamera',
+ },
+ {
+ v0: 'ContentOnlyIcon',
+ v9: 'RectangleLandscape',
+ },
+ {
+ v0: 'ContentSettingsIcon',
+ v9: 'ContentSettings',
+ },
+ {
+ v0: 'CopyIcon',
+ v9: 'Copy',
+ },
+ {
+ v0: 'CortanaIcon',
+ v9: '',
+ },
+ {
+ v0: 'CortanaLightIcon',
+ v9: '',
+ },
+ {
+ v0: 'CortanaDarkIcon',
+ v9: '',
+ },
+ {
+ v0: 'CropParticipantIcon',
+ v9: 'ScaleFill',
+ },
+ {
+ v0: 'CreateTeamOrgWideIcon',
+ v9: '',
+ },
+ {
+ v0: 'D365MarketingIcon',
+ v9: '',
+ },
+ {
+ v0: 'TimerIcon',
+ v9: 'Timer',
+ },
+ {
+ v0: 'DemotePresenterIcon',
+ v9: 'PresenterOff',
+ },
+ {
+ v0: 'DeviceAudioIcon',
+ v9: 'DeviceMeetingRoom',
+ },
+ {
+ v0: 'DiamondIcon',
+ v9: 'Diamond',
+ },
+ {
+ v0: 'DismissedCallTimelineIcon',
+ v9: 'CallDismiss',
+ },
+ {
+ v0: 'GlobeClockIcon',
+ v9: 'GlobeClock',
+ },
+ {
+ v0: 'MegaphoneLoudIcon',
+ v9: 'MegaphoneLoud',
+ },
+ {
+ v0: 'PanelLeftIcon',
+ v9: 'PanelLeft',
+ },
+ {
+ v0: 'PanelRightIcon',
+ v9: 'PanelRight',
+ },
+ {
+ v0: 'TicketDiagonalIcon',
+ v9: 'TicketDiagonal',
+ },
+ {
+ v0: 'RoomRemoteIcon',
+ v9: '',
+ },
+ {
+ v0: 'DocumentIcon',
+ v9: 'Document',
+ },
+ {
+ v0: 'EmojiAngryIcon',
+ v9: 'EmojiAngry',
+ },
+ {
+ v0: 'EmojiEditIcon',
+ v9: 'EmojiEdit',
+ },
+ {
+ v0: 'EmojiLaughIcon',
+ v9: 'EmojiLaugh',
+ },
+ {
+ v0: 'EmojiSparkleIcon',
+ v9: 'EmojiSparkle',
+ },
+ {
+ v0: 'EmptyIcon',
+ v9: '',
+ },
+ {
+ v0: 'EncryptedIcon',
+ v9: 'ShieldLock',
+ },
+ {
+ v0: 'ExchangeIcon',
+ v9: '',
+ },
+ {
+ v0: 'ExclamationCircleIcon',
+ v9: 'ErrorCircle',
+ },
+ {
+ v0: 'ExpandUpRightIcon',
+ v9: 'ExpandUpRight',
+ },
+ {
+ v0: 'EyeFriendlierSlashIcon',
+ v9: 'EyeOff',
+ },
+ {
+ v0: 'FeedbackIcon',
+ v9: '',
+ },
+ {
+ v0: 'FluentOneDriveIcon',
+ v9: '',
+ },
+ {
+ v0: 'FocusModeIcon',
+ v9: 'ContentView',
+ },
+ {
+ v0: 'FullScreenIcon',
+ v9: 'PageFit',
+ },
+ {
+ v0: 'ResetZoomIcon',
+ v9: 'PageFit',
+ },
+ {
+ v0: 'GlobeIcon',
+ v9: 'Globe',
+ },
+ {
+ v0: 'GoogleColorIcon',
+ v9: '',
+ },
+ {
+ v0: 'HashTagIcon',
+ v9: 'NumberSymbol',
+ },
+ {
+ v0: 'HeartIcon',
+ v9: 'Heart',
+ },
+ {
+ v0: 'HeadsetVRIcon',
+ v9: '',
+ },
+ {
+ v0: 'HeartMeetingReactionIcon',
+ v9: '',
+ },
+ {
+ v0: 'HeartReactionIcon',
+ v9: '',
+ },
+ {
+ v0: 'HolographicArrowIcon',
+ v9: '',
+ },
+ {
+ v0: 'HolographicColorPickerIcon',
+ v9: 'Square',
+ },
+ {
+ v0: 'HolographicColorPickerItemIcon',
+ v9: 'CircleSmall',
+ },
+ {
+ v0: 'HolographicColorPickerItemSelectedIcon',
+ v9: '',
+ },
+ {
+ v0: 'HolographicInkingIcon',
+ v9: 'Edit',
+ },
+ {
+ v0: 'HoloLensIcon',
+ v9: '',
+ },
+ {
+ v0: 'ImmersiveViewIcon',
+ v9: '',
+ },
+ {
+ v0: 'IncomingCallIcon',
+ v9: 'CallInbound',
+ },
+ {
+ v0: 'InvitePeopleIcon',
+ v9: '',
+ },
+ {
+ v0: 'LargeGalleryIcon',
+ v9: 'Table',
+ },
+ {
+ v0: 'LaughMeetingReactionIcon',
+ v9: '',
+ },
+ {
+ v0: 'LaughReactionIcon',
+ v9: '',
+ },
+ {
+ v0: 'LightBulbFilamentIcon',
+ v9: 'LightbulbFilament',
+ },
+ {
+ v0: 'LightBulbIcon',
+ v9: 'LightbulbFilament',
+ },
+ {
+ v0: 'LockClosedIcon',
+ v9: 'LockClosed',
+ },
+ {
+ v0: 'LoopFileIcon',
+ v9: '',
+ },
+ {
+ v0: 'LoopIcon',
+ v9: '',
+ },
+ {
+ v0: 'MagicIcon',
+ v9: 'Wand',
+ },
+ {
+ v0: 'MeetingNotesAppIcon',
+ v9: 'Notepad',
+ },
+ {
+ v0: 'MeetingNotesIcon',
+ v9: 'Notepad',
+ },
+ {
+ v0: 'MeetingReactionIcon',
+ v9: 'EmojiHand',
+ },
+ {
+ v0: 'MegaphoneIcon',
+ v9: 'Megaphone',
+ },
+ {
+ v0: 'MicDisabledIcon',
+ v9: 'MicProhibited',
+ },
+ {
+ v0: 'MicMeterShadeIcon',
+ v9: '',
+ },
+ {
+ v0: 'SmileyIcon',
+ v9: 'Emoji',
+ },
+ {
+ v0: 'MicPulseIcon',
+ v9: 'MicPulse',
+ },
+ {
+ v0: 'MicPulseOffIcon',
+ v9: 'MicPulseOff',
+ },
+ {
+ v0: 'MicSpeakingIcon',
+ v9: '',
+ },
+ {
+ v0: 'MicrosoftIcon',
+ v9: '',
+ },
+ {
+ v0: 'MidiIcon',
+ v9: 'Midi',
+ },
+ {
+ v0: 'MissedCallIcon',
+ v9: 'CallMissed',
+ },
+ {
+ v0: 'MobileIcon',
+ v9: 'Phone',
+ },
+ {
+ v0: 'MoonIcon',
+ v9: 'WeatherMoon',
+ },
+ {
+ v0: 'MusicNoteIcon',
+ v9: 'MusicNote1',
+ },
+ {
+ v0: 'MuteNotificationIcon',
+ v9: 'AlertOff',
+ },
+ {
+ v0: 'NarrowModeIcon',
+ v9: '',
+ },
+ {
+ v0: 'NewsAnchorIcon',
+ v9: 'ShareScreenPersonOverlay',
+ },
+ {
+ v0: 'OneDriveOutlineIcon',
+ v9: '',
+ },
+ {
+ v0: 'OneNotePageIcon',
+ v9: '',
+ },
+ {
+ v0: 'OpenIcon',
+ v9: 'Open',
+ },
+ {
+ v0: 'OrgChartIcon',
+ v9: 'Organization',
+ },
+ {
+ v0: 'OrgWideIcon',
+ v9: '',
+ },
+ {
+ v0: 'OutgoingCallIcon',
+ v9: 'CallOutbound',
+ },
+ {
+ v0: 'OutlookIcon',
+ v9: '',
+ },
+ {
+ v0: 'OfficeOutlookIcon',
+ v9: '',
+ },
+ {
+ v0: 'PanelRightExpandIcon',
+ v9: 'PanelRightExpand',
+ },
+ {
+ v0: 'PanelRightContractIcon',
+ v9: 'PanelRightContract',
+ },
+ {
+ v0: 'PeopleListIcon',
+ v9: 'PeopleList',
+ },
+ {
+ v0: 'PeopleAudienceIcon',
+ v9: 'PeopleAudience',
+ },
+ {
+ v0: 'PeopleTeamIcon',
+ v9: 'PeopleTeam',
+ },
+ {
+ v0: 'PeopleTeamIconFilled',
+ v9: 'PeopleTeam',
+ },
+ {
+ v0: 'PersonAccountsIcon',
+ v9: 'PersonAccounts',
+ },
+ {
+ v0: 'PersonAvailableIcon',
+ v9: 'PersonAvailable',
+ },
+ {
+ v0: 'PersonIcon',
+ v9: 'Person',
+ },
+ {
+ v0: 'PersonFeedbackIcon',
+ v9: 'PersonFeedback',
+ },
+ {
+ v0: 'PinIcon',
+ v9: 'Pin',
+ },
+ {
+ v0: 'PinOffIcon',
+ v9: 'PinOff',
+ },
+ {
+ v0: 'PhoneAudioIcon',
+ v9: 'CallConnecting',
+ },
+ {
+ v0: 'PlazaMisrecognized',
+ v9: 'InprivateAccount',
+ },
+ {
+ v0: 'PowerPointMonoIcon',
+ v9: '',
+ },
+ {
+ v0: 'PromoteAttendeeIcon',
+ v9: 'Presenter',
+ },
+ {
+ v0: 'ProximityIcon',
+ v9: 'Cast',
+ },
+ {
+ v0: 'QuadDetectionOnIcon',
+ v9: '',
+ },
+ {
+ v0: 'QuadDetectionOffIcon',
+ v9: '',
+ },
+ {
+ v0: 'RaiseHandColoredFluentIcon',
+ v9: '',
+ },
+ {
+ v0: 'RecentIcon',
+ v9: 'History',
+ },
+ {
+ v0: 'RecurrenceIcon',
+ v9: 'ArrowRepeatAll',
+ },
+ {
+ v0: 'RenameIcon',
+ v9: 'Rename',
+ },
+ {
+ v0: 'RichCallHistoryCallEndIcon',
+ v9: 'CallEnd',
+ },
+ {
+ v0: 'RichCallHistoryForwardIcon',
+ v9: 'CallForward',
+ },
+ {
+ v0: 'RichCallHistoryIncomingIcon',
+ v9: 'CallInbound',
+ },
+ {
+ v0: 'RichCallHistoryMissedIcon',
+ v9: 'CallMissed',
+ },
+ {
+ v0: 'RichCallHistoryOutgoingIcon',
+ v9: 'CallOutbound',
+ },
+ {
+ v0: 'RichCallHistoryTransferIcon',
+ v9: 'CallOutbound',
+ },
+ {
+ v0: 'RichCallHistoryVoicemailIcon',
+ v9: 'Voicemail',
+ },
+ {
+ v0: 'RosterIcon',
+ v9: 'People',
+ },
+ {
+ v0: 'RosterPermissionsIcon',
+ v9: 'Settings',
+ },
+ {
+ v0: 'RotateIcon',
+ v9: 'ArrowRotateClockwise',
+ },
+ {
+ v0: 'SadReactionIcon',
+ v9: '',
+ },
+ {
+ v0: 'SaveIcon',
+ v9: 'Save',
+ },
+ {
+ v0: 'ScdEndIcon',
+ v9: 'ScanType',
+ },
+ {
+ v0: 'ScdStartIcon',
+ v9: 'ScanType',
+ },
+ {
+ v0: 'ScreenshareIcon',
+ v9: 'WindowMultiple',
+ },
+ {
+ v0: 'SearchMagnifierIcon',
+ v9: 'Search',
+ },
+ {
+ v0: 'SeatAddIcon',
+ v9: '',
+ },
+ {
+ v0: 'SeatIcon',
+ v9: '',
+ },
+ {
+ v0: 'SFCIcon',
+ v9: '',
+ },
+ {
+ v0: 'SharepointIcon',
+ v9: '',
+ },
+ {
+ v0: 'ShareScreenPersonPIcon',
+ v9: 'ShareScreenPersonP',
+ },
+ {
+ v0: 'ShieldErrorIcon',
+ v9: 'ShieldError',
+ },
+ {
+ v0: 'ShiftIcon',
+ v9: 'Shifts',
+ },
+ {
+ v0: 'SideBySideIcon',
+ v9: 'ShareScreenPersonOverlayInside',
+ },
+ {
+ v0: 'SignLanguageIcon',
+ v9: 'HandWave',
+ },
+ {
+ v0: 'SnapshotIcon',
+ v9: 'Screenshot',
+ },
+ {
+ v0: 'SpeakerLouderIcon',
+ v9: 'Speaker2',
+ },
+ {
+ v0: 'SpotlightStopIcon',
+ v9: 'VideoPersonStarOff',
+ },
+ {
+ v0: 'StopRecordingIcon',
+ v9: 'RecordStop',
+ },
+ {
+ v0: 'SuccessStarEmphasizedIcon',
+ v9: 'StarEmphasis',
+ },
+ {
+ v0: 'SunIcon',
+ v9: 'WeatherSunny',
+ },
+ {
+ v0: 'SurprisedReactionIcon',
+ v9: '',
+ },
+ {
+ v0: 'SyncOffIcon',
+ v9: 'SyncOff',
+ },
+ {
+ v0: 'TaskListSquareAddIcon',
+ v9: 'TaskListSquareAdd',
+ },
+ {
+ v0: 'Teams2Icon',
+ v9: '',
+ },
+ {
+ v0: 'TeamsForLifeIcon',
+ v9: '',
+ },
+ {
+ v0: 'AppBarTeamsIcon',
+ v9: 'PeopleTeam',
+ },
+ {
+ v0: 'TeamsLogoSmall',
+ v9: '',
+ },
+ {
+ v0: 'TeamsMonochrome2Icon',
+ v9: '',
+ },
+ {
+ v0: 'TentativeIcon',
+ v9: 'Question',
+ },
+ {
+ v0: 'ThumbDislikeIcon',
+ v9: 'ThumbDislike',
+ },
+ {
+ v0: 'ThumbLikeIcon',
+ v9: 'ThumbLike',
+ },
+ {
+ v0: 'ShieldCheckmarkIcon',
+ v9: 'ShieldCheckmark',
+ },
+ {
+ v0: 'ShieldTaskIcon',
+ v9: 'ShieldTask',
+ },
+ {
+ v0: 'SparkleIcon',
+ v9: 'Sparkle',
+ },
+ {
+ v0: 'SwitchIcon',
+ v9: 'ArrowSwap',
+ },
+ {
+ v0: 'UncropParticipantIcon',
+ v9: 'ScaleFit',
+ },
+ {
+ v0: 'UserBlockIcon',
+ v9: 'PersonSubtract',
+ },
+ {
+ v0: 'VoicemailIcon',
+ v9: 'Voicemail',
+ },
+ {
+ v0: 'VideoVideoAddIconClipIcon',
+ v9: 'VideoAdd',
+ },
+ {
+ v0: 'VideoClipIcon',
+ v9: 'VideoClip',
+ },
+ {
+ v0: 'VideoPersonIcon',
+ v9: 'VideoPerson',
+ },
+ {
+ v0: 'VideoPersonSparkleIcon',
+ v9: 'VideoPersonSparkle',
+ },
+ {
+ v0: 'VideoProhibitedIcon',
+ v9: 'VideoProhibited',
+ },
+ {
+ v0: 'VideoChatIcon',
+ v9: 'VideoChat',
+ },
+ {
+ v0: 'VivaInsightsIcon',
+ v9: '',
+ },
+ {
+ v0: 'WeatherPersonIcon',
+ v9: 'ShareScreenPerson',
+ },
+ {
+ v0: 'WebsiteIcon',
+ v9: 'Globe',
+ },
+ {
+ v0: 'WifiIcon',
+ v9: 'Wifi1',
+ },
+ {
+ v0: 'WhiteboardCameraIcon',
+ v9: '',
+ },
+ {
+ v0: 'WindowClose2Icon',
+ v9: 'Dismiss',
+ },
+ {
+ v0: 'WindowMaximize2Icon',
+ v9: 'Square',
+ },
+ {
+ v0: 'WindowMinimize2Icon',
+ v9: 'Subtract',
+ },
+ {
+ v0: 'WindowRestore2Icon',
+ v9: 'SquareMultiple',
+ },
+ {
+ v0: 'WindowsOsIcon',
+ v9: '',
+ },
+ {
+ v0: 'YesMeetingReactionIcon',
+ v9: '',
+ },
+ {
+ v0: 'YesReactionIcon',
+ v9: '',
+ },
+ {
+ v0: 'ScanThumbUp',
+ v9: 'ScanThumbUp',
+ },
+ {
+ v0: 'ScanThumbUpOff',
+ v9: 'ScanThumbUpOff',
+ },
+ {
+ v0: 'VoteIcon',
+ v9: 'Vote',
+ },
+ {
+ v0: 'PaymentProviderSelectIcon',
+ v9: '',
+ },
+ {
+ v0: 'CurrencyAmountIcon',
+ v9: '',
+ },
+ {
+ v0: 'DesktopCursorIcon',
+ v9: 'DesktopCursor',
+ },
+ {
+ v0: 'ReplyIcon',
+ v9: 'ArrowReplyDown',
+ },
+ {
+ v0: 'BackspaceIcon',
+ v9: 'Backspace',
+ },
+ {
+ v0: 'ParticipantAddIcon',
+ v9: 'PersonAdd',
+ },
+ {
+ v0: 'RibbonIcon',
+ v9: 'Ribbon',
+ },
+ {
+ v0: 'ChatDismissIcon',
+ v9: 'ChatDismiss',
+ },
+];
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/types.ts b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/types.ts
new file mode 100644
index 00000000000000..1074e295b45358
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/types.ts
@@ -0,0 +1,6 @@
+import * as React from 'react';
+import type { SvgIconProps } from '@fluentui/react-icons-northstar';
+import type { FluentIconsProps } from '@fluentui/react-icons';
+
+export type V0IconComponent = React.FunctionComponent;
+export type V9IconComponent = React.FunctionComponent;
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/useDebounce.ts b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/useDebounce.ts
new file mode 100644
index 00000000000000..c00486012917cf
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/IconCatalog/useDebounce.ts
@@ -0,0 +1,15 @@
+import * as React from 'react';
+
+export const useDebounce = (fn: (...args: unknown[]) => void, duration: number) => {
+ const timeoutRef = React.useRef(0);
+
+ return React.useCallback(
+ (...args: unknown[]) => {
+ clearTimeout(timeoutRef.current);
+ timeoutRef.current = window.setTimeout(() => {
+ fn(...args);
+ }, duration);
+ },
+ [duration, fn],
+ );
+};
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Image.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Image.stories.mdx
similarity index 94%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Image.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Image.stories.mdx
index 12f0bafc5a81f8..41500c1a045f44 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Image.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Image.stories.mdx
@@ -1,8 +1,8 @@
import { Meta } from '@storybook/addon-docs';
-
+
-# Image Upgrade
+# Image Migration
## Overview:
@@ -28,7 +28,7 @@ const Component = () => ;
| src, alt, aria-label, key, ref | keep it as is |
| aria-hidden | if `alt` property is empty and image is illustrative or not relevant for screen reader users, it's **required** to add `aria-hidden="true"` attribute (in v0 it was applied bt default) |
| variables, design, styles | see Migrate style overrides in this document |
-| accessibility | see [migrate-custom-accessibility.md](?path=/docs/concepts-upgrading-from-v0-custom-accessibility--page) |
+| accessibility | see [migrate-custom-accessibility.md](?path=/docs/concepts-migrating-from-v0-custom-accessibility--page) |
| fluid | replace with `fit="contain"` |
| circular | replace with `shape="circular"` |
| avatar | see Migrate avatar prop in this document |
@@ -37,7 +37,7 @@ const Component = () => ;
## Migrate style overrides
-⚠️ **If this is your first migration**, please read [the general guide on how to migrate styles](?path=/docs/concepts-upgrading-from-v0-custom-style-overrides--page).
+⚠️ **If this is your first migration**, please read [the general guide on how to migrate styles](?path=/docs/concepts-migrating-from-v0-custom-style-overrides--page).
### Example for migrate boolean `variables`:
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Input.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Input.stories.mdx
new file mode 100644
index 00000000000000..542280e241e2a0
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Input.stories.mdx
@@ -0,0 +1,81 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Input Migration
+
+Fluent UI Northstar (v0) provides the `Input` control to elicit input from users. Fluent UI v9 also provides an `Input` control but with a different API and feature set.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `Input` v0 looks like
+
+```tsx
+import * as React from 'react';
+import { Input, Text, Flex } from '@fluentui/react-northstar';
+
+const InputV0BasicExample = () => {
+ return ;
+};
+```
+
+An equivalent `Input` v9 usage is
+
+```tsx
+import * as React from 'react';
+import { Label, Input } from '@fluentui/react-components/unstable';
+import { useId } from '@fluentui/react-utilities';
+import { makeStyles } from '@griffel/react';
+
+const useLayoutStyles = makeStyles({
+ root: {
+ maxWidth: '300px',
+ display: 'flex',
+ flexDirection: 'column',
+ },
+});
+
+const InputV9BasicExample = () => {
+ const layoutStyles = useLayoutStyles();
+ const inputId = useId('input');
+ return (
+
+ Search
+
+
+ );
+};
+```
+
+## Prop Mapping
+
+This table maps v0 `Input` props to the v9 `Input` equivalent.
+
+| v0 | v9 | Notes |
+| ---------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
+| `accessibility` | n/a | |
+| `as` | n/a | |
+| `className` | `className` | |
+| `clearable` | n/a | Use `contentBefore` or `contentAfter` slots to add a `Button` to implement this behavior |
+| `defaultValue` | `defaultValue` | Mutually exclusive with `value` |
+| `design` | n/a | |
+| `error` | n/a | v9 `Input` does not handle error states |
+| `errorIndicator` | n/a | Use `contentBefore` or `contentAfter` slots to insert custom indicators |
+| `fluid` | n/a | |
+| `icon` | Use `contentBefore` or `contentAfter` slots | |
+| `iconPosition` | n/a | |
+| `inline` | n/a | |
+| `input` | `input` | This is a slot |
+| `inputRef` | Pass a `ref` to the `input` slot | |
+| `inverted` | `appearance` | |
+| `label` | Use `Label` component | Be sure to associate `Label` with `Input` via `htmlFor` |
+| `labelPosition` | n/a | |
+| `onChange` | `onChange` | |
+| `required` | `required` | This is the native HTML prop |
+| `showSuccessIndicator` | n/a | Use `contentBefore` or `contentAfter` slots to insert custom indicators |
+| `type` | `type` | Non text types like 'button' and 'checkbox' are not supported. Use `Button` or `Checkbox` component instead |
+| `value` | `value` | Mutually exclusive with `defaultValue` |
+| `variables` | n/a | Use `FluentProvider` to customize themes |
+| `wrapper` | `root` | This is a slot |
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Label.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Label.stories.mdx
new file mode 100644
index 00000000000000..cfe17cf5cec40b
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Label.stories.mdx
@@ -0,0 +1,58 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Label Migration
+
+Fluent UI Northstar (v0) provides the `Label` control to allow users to classify content. Fluent UI v9 also provides a `Label`, but has a different API.
+
+The main difference with v0's and v9's `Label` is that v9 doesn't provide an image and icon prop. v9 also accepts a custom required indicator that can be a string or JSX element.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `Label` v0
+
+```tsx
+import * as React from 'react';
+import { Label } from '@fluentui/react-northstar';
+
+const LabelV0BasicExample = () => {
+ return ;
+};
+```
+
+An equivalent `Label` in v9 is
+
+```tsx
+import * as React from 'react';
+import { Label } from '@fluentui/react-components';
+
+const LabelV9BasicExample = () => {
+ return You have 23 emails ;
+};
+```
+
+## Prop Mapping
+
+This table maps `Label` v0 props to the `Label` v9 equivalent.
+
+| v0 | v9 | Notes |
+| --------------- | ----------- | ---------------------------------------------- |
+| `accessibility` | n/a | |
+| `as` | n/a | |
+| `circular` | n/a | |
+| `className` | `className` | |
+| `color` | `className` | use `className` to customize color |
+| `content` | `children` | v9 uses React `children` instead of data props |
+| `design` | n/a | |
+| `fluid` | n/a | |
+| `icon` | n/a | |
+| `iconPosition` | n/a | |
+| `image` | n/a | |
+| `imagePosition` | n/a | |
+| `key` | `key` | v9 uses the intrinsic React prop |
+| `ref` | `ref` | |
+| `styles` | `className` | |
+| `variables` | n/a | Use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Popup.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Popup.stories.mdx
similarity index 96%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Popup.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Popup.stories.mdx
index 454bc9be1669cc..fe78e4865745cd 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Popup.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Popup.stories.mdx
@@ -1,8 +1,8 @@
import { Meta } from '@storybook/addon-docs';
-
+
-# Popup Upgrade
+# Popup Migration
## Overview:
@@ -45,7 +45,7 @@ const Component = () => (
v9 positioning shorthand is recommended when only `positon` or/and `align` is used: ` ` can be migrate to a string like ` `.
-See [Migrate positioning props](?path=/docs/concepts-upgrading-from-v0-positioning--page) for more.
+See [Migrate positioning props](?path=/docs/concepts-migrating-from-v0-positioning--page) for more.
#### Removed props:
@@ -125,4 +125,4 @@ export const useStyles = makeStyles({
});
```
-⚠️ **If this is your first time migrating style overrides**, please read [the general guide on how to migrate styles](?path=/docs/concepts-upgrading-from-v0-custom-style-overrides--page).
+⚠️ **If this is your first time migrating style overrides**, please read [the general guide on how to migrate styles](?path=/docs/concepts-migrating-from-v0-custom-style-overrides--page).
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/RadioGroup.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/RadioGroup.stories.mdx
new file mode 100644
index 00000000000000..8957e6049486d2
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/RadioGroup.stories.mdx
@@ -0,0 +1,103 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# RadioGroup Migration
+
+Fluent UI Northstar (v0) provides the `RadioGroup` control for presenting a list of radio options. Fluent UI v9 also provides a `RadioGroup` control but with a different API.
+
+While there are several differences between these controls, the primary change is that `RadioGroup` v9 accepts its options as child `Radio` components while `RadioGroup` v0 accepts options via its `items` prop.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `RadioGroup` v0 looks like
+
+```tsx
+import * as React from 'react';
+import { RadioGroup } from '@fluentui/react-northstar';
+
+const RadioGroupV0BasicExample = () => {
+ const items = [
+ { name: 'pizza', key: 'Capricciosa', label: 'Capricciosa', value: 'capricciosa' },
+ {
+ name: 'pizza',
+ key: 'Prosciutto',
+ label: 'Prosciutto',
+ value: 'prosciutto',
+ disabled: true,
+ },
+ ];
+
+ return ;
+};
+```
+
+An equivalent `RadioGroup` v9 usage is
+
+```tsx
+import * as React from 'react';
+import { Label, Radio, RadioGroup } from '@fluentui/react-components';
+import { useId } from '@fluentui/react-utilities';
+
+const RadioGroupV9BasicExample = () => {
+ const labelId = useId('label-');
+
+ return (
+ <>
+
+ Pick a Pizza
+
+
+
+
+
+ >
+ );
+};
+```
+
+## Prop Mapping
+
+This table maps `RadioGroup` v0 props to the `RadioGroup` v9 equivalent.
+
+| v0 | v9 | Notes |
+| ---------------------- | -------------- | ----------------------------------------------- |
+| `accessibility` | n/a | |
+| `as` | n/a | |
+| `checkedValue` | `value` | Mutually exclusive with `defaultValue` |
+| `className` | `className` | |
+| `defaultCheckedValue` | `defaultValue` | Mutually exclusive with `value` |
+| `design` | n/a | |
+| `items` | `children` | v9 uses React `children` rather than data props |
+| `key` | `key` | v9 uses the intrinsic React prop |
+| `onCheckedValueChange` | `onChange` | |
+| `ref` | `ref` | |
+| `styles` | `className` | |
+| `variables` | n/a | Use `FluentProvider` to customize themes |
+| `vertical` | `layout` | |
+
+This table maps v0 `RadioGroupItem` props to the v9 `Radio` equivalent.
+
+| v0 | v9 | Notes |
+| ------------------ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
+| `accessibility` | n/a | |
+| `as` | n/a | |
+| `checked` | `checked` | |
+| `checkedIndicator` | `indicator` | Use slots to customize `Radio` |
+| `className` | `className` | |
+| `defaultChecked` | `defaultChecked` | |
+| `design` | n/a | |
+| `disabled` | `disabled` | |
+| `indicator` | `indicator` | Use slots to customize `Radio` |
+| `key` | `key` | v9 uses the intrinsic React prop |
+| `label` | `label` | In v9 this is a slot so this prop can be a string, a component or a shorthand object |
+| `name` | `name` | When used inside `RadioGroup` this is assigned via the `name` prop on `RadioGroup` or given a default value when not assigned there |
+| `onChange` | `onChange` | |
+| `ref` | `ref` | |
+| `shouldFocus` | n/a | |
+| `styles` | `className` | |
+| `value` | n/a | |
+| `variables` | n/a | Use `FluentProvider` to customized themes |
+| `vertical` | n/a | `labelPosition` can be used to change the location of the label text |
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Spinner.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Spinner.stories.mdx
new file mode 100644
index 00000000000000..6ab797045af170
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Spinner.stories.mdx
@@ -0,0 +1,54 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Loader Migration
+
+Fluent UI Northstar (v0) provides the `Loader` control to allow users to indicate that content is being loaded on the screen.
+Fluent UI v9 provides a `Spinner` control with a different API.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `Loader` v0
+
+```tsx
+import { Loader } from '@fluentui/react-northstar';
+import React from 'react';
+
+const LoaderV0BasicExample = () => ;
+
+export default LoaderV0BasicExample;
+```
+
+An equivalent `Spinner` in v9 is
+
+```tsx
+import * as React from 'react';
+import { Spinner } from '@fluentui/react-components';
+
+const SpinnerV9BasicExample = () => ;
+
+export default SpinnerV9BasicExample;
+```
+
+## Props Mapping
+
+This table maps `Loader` v0 props to the `Spinner` v9 equivalent.
+
+| v0 | v9 | Notes |
+| --------------- | --------------- | ---------------------------------------- |
+| `accessibility` | n/a | |
+| `as` | n/a | |
+| `className` | `className` | |
+| `delay` | n/a | |
+| `design` | n/a | |
+| `indicator` | n/a | |
+| `inline` | n/a | |
+| `label` | `label` | |
+| `labelPosition` | `labelPosition` | Default changes from `below` to 'after' |
+| `size` | `size` | |
+| `styles` | `className` | |
+| `svg` | n/a | |
+| `variables` | n/a | Use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Textarea.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Textarea.stories.mdx
new file mode 100644
index 00000000000000..9a73784c386526
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Textarea.stories.mdx
@@ -0,0 +1,73 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Textarea Migration
+
+Fluent UI Northstar (v0) provides the `TextArea` control to allow users to enter and edit multi-line text. Fluent UI v9 provides a `Textarea` control, but has a different API.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `TextArea` v0
+
+```tsx
+import React from 'react';
+import { TextArea } from '@fluentui/react-northstar';
+
+const TextAreaV0BasicExample = () => {
+ const textAreaId = 'textArea';
+
+ return (
+ <>
+
+
+ >
+ );
+};
+
+export default TextAreaExample;
+```
+
+An equivalent `Textarea` in v9 is
+
+```tsx
+import * as React from 'react';
+import { Label, Textarea } from '@fluentui/react-components';
+import { useId } from '@fluentui/react-utilities';
+
+const TextareaV9BasicExample = () => {
+ const textareaId = useId('textarea');
+ return (
+ <>
+ Enter review
+
+ >
+ );
+};
+```
+
+## Props Mapping
+
+This table maps `TextArea` v0 props to the `Textarea` v9 equivalent.
+
+| v0 | v9 | Notes |
+| --------------- | -------------- | -------------------------------------------------- |
+| `accessibility` | n/a | |
+| `as` | n/a | |
+| `className` | `className` | |
+| `defaultValue` | `defaultValue` | Mutually exclusive with `value` |
+| `design` | n/a | |
+| `disabled` | `disabled` | |
+| `error` | n/a | |
+| `fluid` | n/a | |
+| `inverted` | `appearance` | The equivalent appearance would be `filledLighter` |
+| `key` | `key` | |
+| `onChange` | `onChange` | |
+| `ref` | `ref` | |
+| `required` | `required` | |
+| `resize` | `resize` | |
+| `styles` | `className` | |
+| `value` | `value` | Mutually exclusivewith `defaultValue` |
+| `variables` | n/a | Use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Tooltip.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Tooltip.stories.mdx
similarity index 96%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Tooltip.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Tooltip.stories.mdx
index 51ed922edee58d..04af3668070069 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Tooltip.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Components/Tooltip.stories.mdx
@@ -1,8 +1,8 @@
import { Meta } from '@storybook/addon-docs';
-
+
-# Tooltip Upgrade
+# Tooltip Migration
## Overview:
@@ -46,7 +46,7 @@ const Component = () => (
Postioning props: `align`, `autoSize`, `flipBoundary`, `offset`,`overflowBoundary`,`popperRef`,`position`,`positionFixed`,`target`, `unstable_disableTether`, `unstable_pinned` are now attributes of the `positioning` prop.
v9 positioning shorthand is recommended when only `positon` or/and `align` is used: ` ` can be migrate to a string like ` `.
-See [Migrate positioning props](?path=/docs/concepts-upgrading-from-v0-positioning--page) for more.
+See [Migrate positioning props](?path=/docs/concepts-migrating-from-v0-positioning--page) for more.
Here's a [codesandbox](https://codesandbox.io/s/tooltip-migration-2gy8r1?file=/example.js) comparing v0 and v9 Tooltip.
@@ -119,7 +119,7 @@ export const useStyles = makeStyles({
});
```
-⚠️ **If this is your first time migrating style overrides**, please read [the general guide on how to migrate styles](?path=/docs/concepts-upgrading-from-v0-custom-style-overrides--page).
+⚠️ **If this is your first time migrating style overrides**, please read [the general guide on how to migrate styles](?path=/docs/concepts-migrating-from-v0-custom-style-overrides--page).
## Migrate accessibility
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Icons.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Icons.stories.mdx
new file mode 100644
index 00000000000000..21cc1be52f89dd
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/Icons.stories.mdx
@@ -0,0 +1,16 @@
+import { Meta } from '@storybook/addon-docs';
+import { IconCatalog } from './Components/IconCatalog/IconCatalog.tsx';
+
+
+
+# v0 - v9 Icon Catalog
+
+This catalog can help you find the equivalent v9 icon if you are using v0 icons. Not all icons have a direct
+equivalent, and you will see clearly when this is case in the catalog.
+
+## Hover styles
+
+V0 can handle switching between outline and filled versions of an icon automatically. However extra work is needed
+to achieve the same effect in v9. You can read about these steps in [the official v9 Icon docs](?path=/docs/concepts-developer-icons-icons--page).
+
+
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/migrate-custom-accessibility.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/migrate-custom-accessibility.stories.mdx
similarity index 97%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/migrate-custom-accessibility.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV0/migrate-custom-accessibility.stories.mdx
index f25ebccb0d682b..1d4030492cbfa0 100755
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/migrate-custom-accessibility.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/migrate-custom-accessibility.stories.mdx
@@ -1,6 +1,6 @@
import { Meta } from '@storybook/addon-docs';
-
+
# Migrate Custom Accessibility
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/migrate-positioning.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/migrate-positioning.stories.mdx
similarity index 96%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/migrate-positioning.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV0/migrate-positioning.stories.mdx
index 09d7916adcc541..6cf1149e8e1f28 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/migrate-positioning.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/migrate-positioning.stories.mdx
@@ -1,6 +1,6 @@
import { Meta } from '@storybook/addon-docs';
-
+
# Migrate Positioning Props
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV0/migrate-styles.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/migrate-styles.stories.mdx
new file mode 100755
index 00000000000000..0162f90f040d26
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV0/migrate-styles.stories.mdx
@@ -0,0 +1,15 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Migrate Custom Style Overrides
+
+This guide provides instructions for migrate style overrides on react-northstar (v0) components to v9 components.
+
+React-northstar provides a flexible styling and theming infrastructure and different consumers might have built their own way of adjusting the styles based on it. The component migration guides provide abstracted examples that show how to migrate one of the approaches used with v0 components to the v9 standardized `makeStyles` approach.
+
+## Overview
+
+1. create/modify _COMPONENT_NAME.styles.ts_ file (COMPONENT_NAME is the name of your component file)
+2. in _COMPONENT_NAME.styles.ts_, move your custom styles into hooks from `makeStyles`
+ > if this is your first time using `makeStyles`, please check [this guide on how to style components](http://aka.ms/fluentui-storybook/?path=/docs/concepts-developer-styling-components--page) on fluentui docmentation site.
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ComponentMapping.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ComponentMapping.stories.mdx
similarity index 98%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ComponentMapping.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ComponentMapping.stories.mdx
index a9afd9c4cd1a76..05f6fd9fc2108e 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ComponentMapping.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ComponentMapping.stories.mdx
@@ -1,8 +1,8 @@
import { Meta } from '@storybook/addon-docs';
-
+
-# Component Upgrade
+# Component Migration
Here is the mapping of v8 components to their v9 component replacement or equivalent.
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/AvatarGroup.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/AvatarGroup.stories.mdx
similarity index 97%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/AvatarGroup.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/AvatarGroup.stories.mdx
index 9afee006cc9359..f4c19fdc7f3023 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/AvatarGroup.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/AvatarGroup.stories.mdx
@@ -1,8 +1,8 @@
import { Meta } from '@storybook/addon-docs';
-
+
-# AvatarGroup Upgrade
+# AvatarGroup Migration
Fluent UI v8 provides the `Facepile` control to allow users to display a list of `Personas`. Fluent UI v9 provides an `AvatarGroup` control, but has a different API.
@@ -17,7 +17,7 @@ v9 also provides a function `partitionAvatarGroupItems` that will split the item
## Examples
-### Basic Upgrade
+### Basic Migration
Basic usage of `FacePile` in v8
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Button.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Button.stories.mdx
new file mode 100644
index 00000000000000..eff772f2f11b2a
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Button.stories.mdx
@@ -0,0 +1,72 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Button Migration
+
+The v8 button variants share the IButtonProps. When using ButtonBase the resulting variant is rendered based on the buttonType (normal, primary, hero, compound, command, icon, or default) and when using a variant directly then props like primary and split change how the button is rendered.
+
+In v9, there is not a shared button type. Variants have their own props although they may extend ButtonProps. There are not variants for primary and action buttons. This is controlled through the appearance prop.
+
+To migrate a button replace the v8 usage with the corresponding v9 button variant. Use the property mapping to pass the right properties to the v9 button.
+
+## Button Variant Mapping
+
+| v8 Button variant | v9 Button variant |
+| -------------------- | ------------------------------- |
+| DefaultButton | Button |
+| ActionButton | Button appearance="transparent" |
+| CommandButton | Button |
+| CommandBarButton | Button |
+| CompoundButton | CompoundButton |
+| ContextualMenuButton | Menu / MenuButton |
+| PrimaryButton | Button appearance="primary" |
+| Button split | SplitButton |
+| Button toggle | ToggleButton |
+
+## Button Props Mapping
+
+| v8 IButtonProps | v9 ButtonProps (replacements) |
+| ------------------------ | ------------------------------------------ |
+| allowDisabledFocus | disabledFocusable |
+| ariaLabel | HTML aria-label |
+| ariaDescription | (removed) |
+| ariaHidden | HTML aria-hidden |
+| checked | (use ToggleButton checked) |
+| className | className |
+| children | children |
+| componentRef | ref |
+| data | (removed) |
+| defaultRender | (removed) |
+| disabled | disabled |
+| getClassNames | |
+| getSplitButtonClassNames | (use SplitButton) |
+| href | (use Link) |
+| iconProps | icon (slot) |
+| disabled | disabled |
+| key | key |
+| keyTipProps | |
+| menuAs | (use Menu and HTML as) |
+| menuIconProps | (use MenuButton menuIcon slot) |
+| menuProps | (use Menu and MenuButton) |
+| menuTriggerKeyCode | |
+| onMenuClick | HTML onClick |
+| onRenderAriaDescription | (removed) |
+| onRenderChildren | children |
+| onRenderDescription | (use CompoundButton secondaryContent slot) |
+| onRenderIcon | icon (slot) |
+| onRenderMenuIcon | (use MenuButton icon) |
+| onRenderText | children |
+| persistMenu | (use Menu) |
+| primary | appearance=primary |
+| primaryActionButtonProps | (use SplitButton) |
+| primaryDisabled | (use SplitButton) |
+| secondaryText | (use CompoundButton secondaryContent) |
+| split | (use SplitButton) |
+| splitButtonAriaLabel | HTML aria-label |
+| splitButtonMenuProps | (use Menu and SplitButton) |
+| styles | (use makeStyles and className) |
+| text | children |
+| theme | (use FluentProvider) |
+| toggle | (use ToggleButton) |
+| uniqueId | HTML key |
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Checkbox.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Checkbox.stories.mdx
new file mode 100644
index 00000000000000..adc164dff3ae98
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Checkbox.stories.mdx
@@ -0,0 +1,78 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Checkbox Migration
+
+Fluent UI v8 provides the `Checkbox` control to give people a way to select one or more items from a group, or switch between two mutually exclusive options. Fluent UI v9 provides a `Checkbox` control, but has a different API.
+
+The main difference between v8 and v9 `Checkbox` is that v9 offers a circular variant. v9 handles checked and indeterminate differently from v8, v9 combines both into the `checked` and `defaultChecked` props.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `Checkbox` v8
+
+```tsx
+import React from 'react';
+import { Checkbox } from '@fluentui/react';
+
+const CheckboxV8BasicExample = () => {
+ return (
+ <>
+
+
+
+ >
+ );
+};
+```
+
+An equivalent `Checkbox` in v9 is
+
+```tsx
+import * as React from 'react';
+import { Checkbox } from '@fluentui/react-components';
+
+const CheckboxV9BasicExample = () => {
+ return (
+ <>
+
+
+
+ >
+ );
+};
+```
+
+## Prop Mapping
+
+This table maps `Checkbox` v8 props to the `Checkbox` v9 equivalent.
+
+| v8 | v9 | Notes |
+| ---------------------- | ------------------ | ---------------------------------------- |
+| `ariaDescribedBy` | `aria-describedby` | |
+| `ariaLabel` | `aria-label` | |
+| `ariaLabelledBy` | `aria-labelledby` | |
+| `ariaPositionInSet` | `aria-posinset` | |
+| `ariaSetSize` | `aria-setsize` | |
+| `boxSide` | `labelPosition` | |
+| `checked` | `checked` | Mutually exclusive with `defaultChecked` |
+| `checkmarkIconProps` | `indicator` | |
+| `className` | `className` | |
+| `componentRef` | `ref` | |
+| `defaultChecked` | `defaultChecked` | Mutually exclusive with `checked` |
+| `defaultIndeterminate` | `defaultChecked` | |
+| `disabled` | `disabled` | |
+| `id` | `id` | |
+| `indeterminate` | `checked` | |
+| `inputProps` | n/a | Props go directly to the `input` slot |
+| `label` | `label` | |
+| `name` | `name` | |
+| `onChange` | `onChange` | |
+| `onRenderLabel` | n/a | |
+| `required` | `required` | |
+| `styles` | `className` | |
+| `theme` | n/a | Use `FluentProvider` to customize themes |
+| `title` | n/a | |
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Divider.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Divider.stories.mdx
new file mode 100644
index 00000000000000..7e745b0045cd0c
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Divider.stories.mdx
@@ -0,0 +1,38 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Separator to Divider Migration
+
+The v8 `Separator` component is called `Divider` in v9.
+
+Migration should be a straightforward name change of the component.
+v9 `Divider` supports the same `alignContent`, `children` and `vertical` props.
+If you custom styled `Separator` then use `makeStyles` to set a `className` with `Divider`.
+
+Here is a vertical `Separator` with the content aligned at the end.
+
+```tsx
+
+ Content
+
+```
+
+Here is an equivalent `Divider`.
+
+```tsx
+
+ Content
+
+```
+
+## Divider Props Mapping
+
+| v8 | v9 |
+| ------------ | ------------------------------ |
+| alignContent | alignContent |
+| | appearance |
+| | inset |
+| styles | (use makeStyles and className) |
+| theme | (use FluentProvider) |
+| vertical | vertical |
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Input.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Input.stories.mdx
new file mode 100644
index 00000000000000..5ba737a3283245
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Input.stories.mdx
@@ -0,0 +1,159 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# TextField to Input Migration
+
+Fluent UI v8 provides the `TextField` control for entering and editing text. In Fluent UI v9 `TextField` is replaced with `Input`.
+
+While basic usage is largely the same, `Input` omits some features found in `TextField`, preferring to compose several components together for greater flexibility.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `TextField` looks like
+
+```tsx
+import * as React from 'react';
+import { TextField } from '@fluentui/react/lib/TextField';}
+import { Stack, IStackProps, IStackStyles } from '@fluentui/react/lib/Stack';
+
+const columnProps: Partial = {
+ tokens: { childrenGap: 15 },
+ styles: { root: { width: 300 } },
+};
+
+const TextFieldV8BasicExample = () => {
+ return
+
+
+
+
+
+
+
+}
+```
+
+An equivalent `Input` usage is:
+
+```tsx
+import * as React from 'react';
+import { Text } from '@fluentui/react-components';
+import { Label, Input } from '@fluentui/react-components/unstable';
+import { useId } from '@fluentui/react-utilities';
+import { makeStyles } from '@griffel/react';
+
+const useStackStyles = makeStyles({
+ root: {
+ maxWidth: '300px',
+ display: 'flex',
+ flexDirection: 'column',
+
+ '> * + *': {
+ marginTop: '20px',
+ },
+
+ '> div': {
+ display: 'flex',
+ flexDirection: 'column',
+ },
+ },
+});
+
+const InputV9BasicExample = () => {
+ const stackStyles = useStackStyles();
+ const standardId = useId('standard');
+ const disabledId = useId('disabled');
+ const readonlyId = useId('readonly');
+ const requiredId = useId('required');
+ const errorId = useId('error');
+ const errorMessageId = useId('error-message');
+
+ return (
+
+ );
+};
+```
+
+## Prop Mapping
+
+This table maps v8 `TextField` props to the v9 `Input` equivalent.
+
+| v8 | v9 | Notes |
+| -------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `componentRef` | `ref` | v9 provides access to the underlyig DOM node, not ITextField |
+| `elementRef` | `ref` | |
+| `multiline` | n/a | Use `Textarea` |
+| `resizable` | n/a | |
+| `autoAjustHeight` | n/a | See `Textarea` docs |
+| `underlined` | `appearance` | |
+| `borderless` | `appearance` | |
+| `label` | Use `Label` component | Be sure to associate `Label` with `Input` via `htmlFor` |
+| `onRenderLabel` | n/a | Use slots to customize `Input` |
+| `description` | n/a | Use another element like `Text` and associate it with `Input` via `aria-describedby` |
+| `onRenderDescription` | n/a | |
+| `onRenderInput` | n/a | Use slots to customize `Input` |
+| `prefix` | `contentBefore` | This is a slot not a `string` |
+| `suffix` | `contentAfter` | This is a slot not a `string` |
+| `onRenderPrefix` | n/a | Use slots to customize `Input` |
+| `onRenderSuffix` | n/a | Use slots to customize `Input` |
+| `iconProps` | Use `contentBefore` or `contentAfter` slot | |
+| `defaultValue` | `defaultValue` | Mutually exclusive with `value` |
+| `value` | `value` | Mutually exclusive with `defaultValue` |
+| `disabled` | `disabled` | |
+| `readOnly` | `readOnly` | In v9 this is the native HTML prop |
+| `invalid` | n/a | v9 `Input` does not handle validation states |
+| `errorMessage` | n/a | Use another element like `Text` and associate it with `Input` via `aria-describedby` |
+| `onChange` | `onChange` | Typescript types have changed |
+| `onNotifyValidationResult` | n/a | v9 `Input` does not handle validation |
+| `onGetErrorMessage` | n/a | v9 `Input` does not handle error states |
+| `deferredValidationTime` | n/a | v9 `Input` does not handle validation |
+| `className` | `className` | |
+| `inputClassName` | Use `input` slot | |
+| `ariaLabel` | `aria-label` | |
+| `validateOnFocusIn` | n/a | v9 `Input` does not handle validation |
+| `validateOnFocusOut` | n/a | v9 `Input` does not handle validation |
+| `validateOnLoad` | n/a | v9 `Input` does not handle validation |
+| `theme` | n/a | Use `FluentProvider` to customize themes |
+| `styles` | `className` | |
+| `autoComplete` | `autoComplete` | In v9 this is the native HTML prop |
+| `canRevealPassword` | n/a | v9 `Input` does not provide built in password reveal behavior |
+| `revealPasswordAriaLabel` | n/a | v9 `Input` does not provide built in password reveal behavior |
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Label.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Label.stories.mdx
new file mode 100644
index 00000000000000..2af877d3724fa9
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Label.stories.mdx
@@ -0,0 +1,64 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Label Migration
+
+Fluent UI v8 provides the `Label` control that gives a name or title to a control or group of controls. Fluent UI v9 also provides a `Label` with a slightly different API.
+
+The main difference with v8's and v9's `Label` is that v9 allows the user to use a custom indicator.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `Label` v8
+
+```tsx
+import * as React from 'react';
+import { Label } from '@fluentui/react/lib/Label';
+import { useId } from '@fluentui/react-hooks';
+
+export const LabelBasicExample = () => {
+ const inputId = useId('anInput');
+
+ return (
+ <>
+ A Label for an input
+
+ >
+ );
+};
+```
+
+An equivalent `Label` in v9 is
+
+```tsx
+import * as React from 'react';
+import { Label } from '@fluentui/react-components';
+import { useId } from '@fluentui/react-utilities';
+
+const LabelV9BasicExample = () => {
+ const inputId = useId('anInput');
+
+ return (
+ <>
+ A Label for an input
+
+ >
+ );
+};
+```
+
+## Prop Mapping
+
+This table maps `Label` v8 props to the `Label` v9 equivalent.
+
+| v8 | v9 | Notes |
+| -------------- | ----------- | ---------------------------------------- |
+| `as` | n/a | |
+| `componentRef` | `ref` | |
+| `disabled` | `disabled` | |
+| `required` | `required` | |
+| `styles` | `className` | |
+| `theme` | n/a | use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Menu.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Menu.stories.mdx
similarity index 99%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Menu.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Menu.stories.mdx
index ea46e4002abdc7..2f888ffffe3593 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Menu.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Menu.stories.mdx
@@ -1,8 +1,8 @@
import { Meta } from '@storybook/addon-docs';
-
+
-# Menu Upgrade
+# Menu Migration
**v8**
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/RadioGroup.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/RadioGroup.stories.mdx
new file mode 100644
index 00000000000000..853118f0467f3a
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/RadioGroup.stories.mdx
@@ -0,0 +1,207 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# ChoiceGroup to RadioGroup Migration
+
+Fluent UI v8 provides the `ChoiceGroup` control for presenting a list of radio options.
+In Fluent UI v9 `ChoiceGroup` is replaced with `RadioGroup`.
+
+While there are several differences between these controls, the primary change is that `RadioGroup` accepts
+its options as child `Radio` components while `ChoiceGroup` accepts options via its `options` prop.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `ChoiceGroup` looks like
+
+```tsx
+import * as React from 'react';
+import { ChoiceGroup, IChoiceGroupOption } from '@fluentui/react/lib/ChoiceGroup';
+
+const ChoiceGroupBasicExample = () => {
+ const options: IChoiceGroupOption[] = [
+ { key: 'A', text: 'Option A' },
+ { key: 'B', text: 'Option B' },
+ { key: 'C', text: 'Option C', disabled: true },
+ { key: 'D', text: 'Option D' },
+ ];
+
+ return ;
+};
+```
+
+An equivalent `RadioGroup` usage is
+
+```tsx
+import * as React from 'react';
+import { Label, Radio, RadioGroup } from '@fluentui/react-components';
+import { useId } from '@fluentui/react-utilities';
+
+const RadioGroupBasicExample = () => {
+ const labelId = useId('label');
+
+ return (
+ <>
+
+ Pick One
+
+
+
+
+
+
+
+ >
+ );
+};
+```
+
+### Custom Option Rendering Migration
+
+Since `RadioGroup` accepts options as children, options may be directly customized without the use of v8's
+`onRenderField` callback.
+
+`ChoiceGroup` `onRenderField` callback for customization:
+
+```tsx
+import * as React from 'react';
+import { ChoiceGroup, IChoiceGroupOption } from '@fluentui/react/lib/ChoiceGroup';
+import { mergeStyles } from '@fluentui/react/lib/Styling';
+import { CatIcon } from '@fluentui/react-icons-mdl2';
+
+const ChoiceGroupCustomOptionExample = () => {
+ const optionRootClass = mergeStyles({ display: 'flex', alignItems: 'center', gap: '5px' });
+
+ const options: IChoiceGroupOption[] = [
+ {
+ key: 'A',
+ text: 'A label with an icon',
+ ariaLabel: 'A label with a cat icon',
+ onRenderField: (props, render) => {
+ z;
+ return (
+
+ {render!(props)}
+
+
+ );
+ },
+ },
+ { key: 'B', text: 'Option B', styles: { root: { border: '1px solid green' } } },
+ { key: 'C', text: 'Option C', disabled: true },
+ { key: 'D', text: 'Option D' },
+ ];
+
+ return ;
+};
+```
+
+An equivalent `RadioGroup` implementation:
+
+```tsx
+import * as React from 'react';
+import { Label, Radio, RadioGroup } from '@fluentui/react-components';
+import { useId } from '@fluentui/react-utilities';
+import { makeStyles, shorthands } from '@griffel/react';
+import { AnimalCat24Regular } from '@fluentui/react-icons';
+
+const useIconOptionStyles = makeStyles({
+ root: {
+ display: 'flex',
+ alignItems: 'center',
+ ...shorthands.gap('5px'),
+ },
+});
+
+const useLabelStyles = makeStyles({
+ root: {
+ display: 'flex',
+ ...shorthands.gap('5px'),
+ },
+});
+
+const useGreenBorderOptionStyles = makeStyles({
+ root: {
+ ...shorthands.border('1px', 'solid', 'green'),
+ },
+});
+
+const RadioGroupCustomOptionExample = () => {
+ const labelId = useId('label');
+ const iconOptionStyles = useIconOptionStyles();
+ const labelStyles = useLabelStyles();
+ const greenBorderOptionStyles = useGreenBorderOptionStyles();
+
+ return (
+ <>
+
+ Pick One
+
+
+
+
+ A
+ >
+ ),
+ }}
+ />
+
+
+
+
+
+ >
+ );
+};
+```
+
+## Prop Mapping
+
+This table maps v8 `ChoiceGroup` props to the v9 `RadioGroup` equivalent.
+
+| v8 | v9 | Notes |
+| -------------------- | --------------------- | -------------------------------------------------------------------- |
+| `componentRef` | `ref` | v9 provides access to the underlyig DOM node, not IChoiceGroup |
+| `options` | `children` | v9 uses React `children` rather than data props |
+| `defaultSelectedKey` | `defaultValue` | Mutually exclusive with `value` |
+| `selectedKey` | `value` | Mutually exclusive with `defaultValue` |
+| `onChange` | `onChange` | The Typescript types have changed in v9 |
+| `label` | Use `Label` component | Be sure to associate `Label` with `RadioGroup` via `aria-labelledby` |
+| `theme` | n/a | Use `FluentProvider` to customize themes |
+| `styles` | `className` | |
+| `ariaLabelledBy` | `aria-labelledby` | In v9 this is the intrinsic HTML prop |
+
+This table maps v8 `IChoiceGroupOption` props to the v9 `Radio` equivalent.
+
+| v8 | v9 | Notes |
+| ------------------ | ------------ | -------------------------------------------------------------------------------------------------------------- |
+| `key` | `key` | This is only necessary if you `.map()` an array to generate the list of `Radio`s. |
+| `text` | `label` | In v9 this is a slot so this prop can be a string, a component or a shorthand object |
+| `onRenderField` | n/a | Provide a custom child to `RadioGroup` |
+| `onRenderLabel` | `label` | Provide a custom component to the `label` slot |
+| `iconProps` | n/a | Use slots to customize `Radio` |
+| `imageSrc` | n/a | Use slots to customize `Radio` |
+| `imageAlt` | n/a | Use slots to customize `Radio` |
+| `selectedImageSrc` | n/a | Use slots to customize `Radio` |
+| `imageSize` | n/a | Use slots to customize `Radio` |
+| `disabled` | `disabled` | |
+| `id` | `id` | In v9 this is the intrinsic HTML prop |
+| `labeldId` | n/a | Provide an id to the `label` slot via shorthand props or a custom component |
+| `ariaLabel` | `aria-label` | In v9 this is the intrinsic HTML prop |
+| `styles` | `className` | |
+| `itemKey` | n/a | |
+| `checked` | `checked` | When used in a `RadioGroup` use the `value` prop on `RadioGroup` instead |
+| `onChange` | `onChange` | Typescript types have changed |
+| `onFocus` | `onFocus` | v9 uses native `onFocus` |
+| `onBlur` | `onBlur` | v9 uses native `onBlur` |
+| `focused` | n/a | |
+| `theme` | n/a | Use `FluentProvider` to customize themes |
+| `required` | `required` | |
+| `name` | `name` | v9 uses native HTML prop. When used in a `RadioGroup` this prop is inherited from the `RadioGroup` by default. |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Slider/Slider.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Slider/Slider.stories.mdx
similarity index 96%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Slider/Slider.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Slider/Slider.stories.mdx
index d24f4bf44bfa69..41e5233222ae84 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Slider/Slider.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Slider/Slider.stories.mdx
@@ -16,16 +16,16 @@ import {
V9FormattedValueExample,
} from './Sliderv9Examples.stories';
-
+
-# Slider Upgrade
+# Slider Migration
Fluent UI V8 provides the `Slider` control to represents an input that allows user to choose a value from within a specific range.
Fluent UI v9 provides a `Slider` control with a different API.
## Examples
-### Basic Upgrade
+### Basic Migration
Basic usage of `Slider` V8
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Slider/Sliderv8Examples.stories.tsx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Slider/Sliderv8Examples.stories.tsx
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Slider/Sliderv8Examples.stories.tsx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Slider/Sliderv8Examples.stories.tsx
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Slider/Sliderv9Examples.stories.tsx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Slider/Sliderv9Examples.stories.tsx
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Slider/Sliderv9Examples.stories.tsx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Slider/Sliderv9Examples.stories.tsx
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/SpinButton.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/SpinButton.stories.mdx
similarity index 98%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/SpinButton.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/SpinButton.stories.mdx
index 132049203339e7..0b8366925585fe 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/SpinButton.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/SpinButton.stories.mdx
@@ -1,14 +1,14 @@
import { Meta } from '@storybook/addon-docs';
-
+
-# SpinButton Upgrade
+# SpinButton Migration
-Both Fluent UI v8 and v9 provide `SpinButton` controls. The controls are largely similar and this guide provides some examples of how to upgrade areas that differ.
+Both Fluent UI v8 and v9 provide `SpinButton` controls. The controls are largely similar and this guide provides some examples of how to migrate areas that differ.
## Examples
-### Basic Upgrade
+### Basic Migration
Basic usage of `SpinButton` v8 looks like
@@ -104,7 +104,7 @@ const SpinButtonV9BasicExample = () => {
};
```
-### Custom Suffixes Upgrade
+### Custom Suffixes Migration
Basic usage of `SpinButton` v8 custom suffixes looks like
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Spinner.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Spinner.stories.mdx
new file mode 100644
index 00000000000000..9385daca73ca34
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Spinner.stories.mdx
@@ -0,0 +1,50 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Spinner Migration
+
+Fluent UI V8 provides the `Spinner` control to allow users to indicate that content is being loaded on the screen.
+Fluent UI v9 provides a `Spinner` control with a different API.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `Spinner` V8
+
+```tsx
+import { Spinner } from '@fluentui/react/lib/Spinner';
+import React from 'react';
+
+const SpinnerV8BasicExample = () => ;
+
+export default SpinnerV8BasicExample;
+```
+
+An equivalent `Spinner` in v9 is
+
+```tsx
+import * as React from 'react';
+import { Spinner } from '@fluentui/react-components';
+
+const SpinnerV9BasicExample = () => ;
+
+export default SpinnerV9BasicExample;
+```
+
+## Props Mapping
+
+This table maps `Spinner` v8 props to the `Spinner` v9 equivalent.
+
+| v8 | v9 | Notes |
+| --------------- | --------------- | ---------------------------------------- |
+| `aria-label` | n/a | |
+| `aria-live` | n/a | |
+| `className` | `className` | |
+| `componentRef` | n/a | |
+| `label` | `label` | |
+| `labelPosition` | `labelPosition` | Default changes from `bottom` to 'after' |
+| `size` | `size` | |
+| `styles` | `className` | |
+| `theme` | n/a | Use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Tabs.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Tabs.stories.mdx
similarity index 94%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Tabs.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Tabs.stories.mdx
index 628e6de236e7c4..481d65689afa33 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Tabs.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Tabs.stories.mdx
@@ -1,8 +1,8 @@
import { Meta } from '@storybook/addon-docs';
-
+
-# Tabs (Pivot) Upgrade
+# Tabs (Pivot) Migration
## v8 Pivot & PivotItem
@@ -38,9 +38,9 @@ The key difference is the `Tab` children are rendered as the label of the tab.
- This allows for much richer tab label, for the associated content to be placed anywhere in the DOM,
and for more control over when and how associated content is rendered.
-### Upgrade Steps
+### Migration Steps
-To upgrade from `Pivot` to `TabList`
+To migrate from `Pivot` to `TabList`
- replace `Pivot` with `TabList` and `PivotItem` with `Tab`
- move all the `PivotItem` content under a sibling element of `TabList`
@@ -48,7 +48,7 @@ To upgrade from `Pivot` to `TabList`
- add the `onTabSelect` event handler to set the selected tab value as state
- update the content element to render the selected tabs content.
-For example, here is the previous `Pivot` example upgraded to use `TabList`
+For example, here is the previous `Pivot` example migrated to use `TabList`
```tsx
const [selectedValue, setSelectedValue] = React.useState();
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Textarea.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Textarea.stories.mdx
new file mode 100644
index 00000000000000..60f9667c16b0cc
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Textarea.stories.mdx
@@ -0,0 +1,110 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Textarea Migration
+
+Fluent UI v8 provides the `TextField` control to allow users to enter and edit text. Fluent UI v9 provides a `Textarea` control, but has a different API.
+
+v9 takes a different approach than v8 with respect to text inputs, and instead of using a single `TextField` component instaed uses separate `Input` and `Textarea` components. v9's `Input` in this case is equivalent to the general v8's `TextField`, while v9's `Textarea` is equivalent to v8's `TextField` with the `multiline` prop set to `true`.
+
+## Examples
+
+### Basic Migration
+
+Basic usage of `TextField` v8
+
+```tsx
+import React from 'react';
+import { TextField } from '@fluentui/react/lib/TextField';
+
+const TextAreaV0BasicExample = () => {
+ return (
+ <>
+
+
+
+ >
+ );
+};
+
+export default TextAreaExample;
+```
+
+An equivalent `Textarea` in v9 is
+
+```tsx
+import * as React from 'react';
+import { Label, Textarea } from '@fluentui/react-components';
+import { useId } from '@fluentui/react-utilities';
+
+const TextareaV9BasicExample = () => {
+ const standardTextareaId = useId('standard');
+ const disabledTextareaId = useId('disabled');
+ const nonResizableTextareaId = useId('nonResizable');
+
+ return (
+ <>
+
+ Standard
+
+
+
+
+ Disabled
+
+
+
+
+ Non-resizable
+
+
+ >
+ );
+};
+```
+
+## Props Mapping
+
+This table maps `TextField` v8 props to the `Textarea` v9 equivalent.
+
+| v0 | v9 | Notes |
+| -------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `ariaLabel` | aria-label | |
+| `autoAdjustHeight` | n/a | Auto-resize will be added in the future. See spec for more information |
+| `className` | `className` | To use a custom className for the container use as follows: `` |
+| `autoComplete` | `autoComplete` | |
+| `borderless` | `appearance` | Equivalent `appearance` could be either `filledLighter` or `filledDarker` |
+| `canRevealPassword` | n/a | |
+| `className` | `className` | |
+| `componentRef` | ref | |
+| `defaultValue` | `defaultValue` | Mutually exclusive with `value` |
+| `deferredValidationTime` | n/a | |
+| `description` | n/a | |
+| `disabled` | `disabled` | |
+| `errorMessage` | n/a | |
+| `iconProps` | n/a | |
+| `inputClassName` | `className` | |
+| `invalid` | n/a | |
+| `label` | n/a | To add a label, use the `Label` component |
+| `multiline` | n/a | `Textarea` is multiline by default |
+| `onChange` | `onChange` | |
+| `onGetErrorMessage` | n/a | |
+| `onNotifyValidationResult` | n/a | |
+| `onRenderDescription` | n/a | |
+| `onRenderInput` | n/a | |
+| `onRenderLabel` | n/a | |
+| `onRenderPrefix` | n/a | |
+| `onRenderSuffix` | n/a | |
+| `prefix` | n/a | |
+| `readOnly` | `readonly` | This is handled by native component |
+| `resizable` | `resize` | |
+| `revealPasswordAriaLabel` | n/a | |
+| `styles` | `className` | |
+| `suffix` | n/a | |
+| `theme` | n/a | use `FluentProvider` to customize themes |
+| `underlined` | n/a | |
+| `validateOnFocusIn` | n/a | |
+| `validateOnFocusOut` | n/a | |
+| `validateOnLoad` | n/a | |
+| `value` | `value` | Mutually exclusive with `defaultValue` |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Theme.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Theme.stories.mdx
similarity index 89%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Theme.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Theme.stories.mdx
index e6f60573c2db9f..7a8e0eec3876b5 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Theme.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Components/Theme.stories.mdx
@@ -1,13 +1,13 @@
import { Meta } from '@storybook/addon-docs';
-
+
-# Theme Upgrade
+# Theme Migration
There are several important differences between v8 and v9 in how style and theme are managed.
-During the upgrade process, you will likely have components from both versions side-by-side.
+During the migration process, you will likely have components from both versions side-by-side.
-You may decide you want components to all look like v8, all look like like v9, or be OK with a mixture but from the same color palette.
+You may decide you want components to all look like v8, all look like v9, or be OK with a mixture but from the same color palette.
## Approach differences
@@ -17,7 +17,11 @@ ThemeProvider sets theme values on the React context for use in CSS-in-JS.
FluentProvider applies theme values as CSS variables.
This change from CSS-in-JS themes to CSS variable themes is the biggest difference between v8 and v9 themes and styles.
-Beyond consistency with the latest Fluent Design system, this change provides significant perfomance improvements and reduction of bundle sizes.
+Beyond consistency with the latest Fluent Design system, this change provides significant performance improvements and reduction of bundle sizes.
+
+#### Portals
+
+To be use v9 components inside v8 components like `Panel` & `Callout`, please enable [portal compatibility](?path=/docs/concepts-migration-from-v8-troubleshooting--page).
### Theme (v8) => Theme (v9)
@@ -55,7 +59,7 @@ The makeStyles function returns a hook that can be used during component render.
### mergeStyles -> mergeClasses
-In v8, mergeStyles combines an set of style objects to return a merged style object.
+In v8, mergeStyles combines a set of style objects to return a merged style object.
The ordering of the parameters determines which styles overwrote preceding styles.
In v9, mergeClasses takes a list of class names from makeStyles and returns the class names optimized for de-duping and minimal bundle size.
@@ -81,7 +85,7 @@ If you are using the default light or dark theme from v8, you can use the v9 `we
This will give you pretty close consistency especially if you have moved to v9 for all of one component type.
For example, if all your buttons are v9 buttons then users likely won't notice small color differences between button and input components.
-If you have a mixture of v8 and v9 buttons then the differences are more noticable.
+If you have a mixture of v8 and v9 buttons then the differences are more noticeable.
### Custom themes
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/BrandColors.stories.tsx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/BrandColors.stories.tsx
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/BrandColors.stories.tsx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/BrandColors.stories.tsx
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/ColorBlock.tsx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/ColorBlock.tsx
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/ColorBlock.tsx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/ColorBlock.tsx
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/ColorCompare.tsx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/ColorCompare.tsx
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/ColorCompare.tsx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/ColorCompare.tsx
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/ColorMapping.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/ColorMapping.stories.mdx
similarity index 96%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/ColorMapping.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/ColorMapping.stories.mdx
index a0bc0c70278da4..e11db12ed557c6 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/ColorMapping.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/ColorMapping.stories.mdx
@@ -4,7 +4,7 @@ import { NamedColors } from './NamedColors.stories';
import { BrandColors } from './BrandColors.stories';
import { SemanticColors } from './SemanticColors.stories';
-
+
# Color Mapping
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/NamedColors.stories.tsx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/NamedColors.stories.tsx
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/NamedColors.stories.tsx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/NamedColors.stories.tsx
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/NeutralColors.stories.tsx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/NeutralColors.stories.tsx
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/NeutralColors.stories.tsx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/NeutralColors.stories.tsx
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/SemanticColors.stories.tsx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/SemanticColors.stories.tsx
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/SemanticColors.stories.tsx
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/SemanticColors.stories.tsx
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/colorMap.ts b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/colorMap.ts
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/colorMap.ts
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/colorMap.ts
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/colorUtils.ts b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/colorUtils.ts
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/colorUtils.ts
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/colorUtils.ts
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/themeMap.ts b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/themeMap.ts
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/themeMap.ts
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/themeMap.ts
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/types.ts b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/types.ts
similarity index 100%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/ThemeColors/types.ts
rename to apps/public-docsite-v9/src/Concepts/Migration/FromV8/ThemeColors/types.ts
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Troubleshooting.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Troubleshooting.stories.mdx
new file mode 100644
index 00000000000000..ae7074dc8c324e
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/FromV8/Troubleshooting.stories.mdx
@@ -0,0 +1,56 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+## "I tried using the new components but there does not seem to be any styling applied to them. Am I doing something wrong?"
+
+Components in version 8 could be used in isolation and still retain their default styling.
+For components to be styled in version 9, they must be wrapped with `FluentProvider` with a theme passed to it.
+
+We recommend placing the `FluentProvider` at the root of your app so that everything gets styled appropriately. The theme to use if you are coming from version 8 is `webLightTheme`.
+
+```jsx
+import React from 'react';
+import ReactDOM from 'react-dom';
+import { FluentProvider, webLightTheme } from '@fluentui/react-components';
+
+import App from './App';
+
+ReactDOM.render(
+
+
+ ,
+ document.getElementById('root'),
+);
+```
+
+## "I tried using the new components inside v8 Callouts, Panels, etc. but there does not seem to be any styling applied to them. Am I doing something wrong?"
+
+Components in version v9 use CSS variables for styling, v9 components that are using [React Portals](https://reactjs.org/docs/portals.html) handle this by default. Components like `Callout` & `Panel` in v8 don't do it, but this can be enabled with a compatibility package called `@fluentui/react-portal-compat`.
+
+`PortalCompatProvider` should be an inner child of FluentProvider, no additional configuration is required for `@fluentui/react`.
+
+```jsx
+import { FluentProvider } from '@fluentui/react-components';
+import { PortalCompatProvider } from '@fluentui/react-portal-compat';
+
+function App() {
+ return (
+
+ {/* your components */}
+
+ );
+}
+```
+
+## "I managed to get the theme working but the components look different than they did previously, why is that?"
+
+We are modernizing our components in version 9 to adhere to the latest guidelines in the Fluent Design Language. That is the reason for any visual differences you might notice.
+
+## "What if I want to override a component's styles? Say, if I want to make them look like they did before? It seems like the styles prop does not exist anymore!"
+
+The styling story in version 9 is very different to what existed in version 8. For one, we are moving away from providing a `styles` prop and are mostly focusing of providing styling via the `className` prop (if you are worried about how could you style every piece of a component via `className`, do not fret and keep reading).
+
+We are also moving away from `mergeStyles` in favor of `makeStyles` from [`@griffel/react`](https://github.com/microsoft/griffel), a new in-house CSS-in-JS solution that allows for things like atomic classes and build-time optimization of styles.
+
+If you want to learn more, read our [guide on how to style components](?path=/story/concepts-developer-styling-components--page).
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/ImportantChanges.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/ImportantChanges.stories.mdx
similarity index 99%
rename from apps/public-docsite-v9/src/Concepts/Upgrade/ImportantChanges.stories.mdx
rename to apps/public-docsite-v9/src/Concepts/Migration/ImportantChanges.stories.mdx
index 6a78ce27fb693b..bba2de6cb427a7 100644
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/ImportantChanges.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/Migration/ImportantChanges.stories.mdx
@@ -1,11 +1,11 @@
import { Meta } from '@storybook/addon-docs';
-
+
# Important changes you should know about
v9 introduces several paradigm shifts that were necessary to improve performance, ease development, and reduce bundle size.
-This resulted in some breaking changes you will need to handle as you upgrade.
+This resulted in some breaking changes you will need to handle as you migrate.
## Props vs. Children
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/Overview.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/Overview.stories.mdx
new file mode 100644
index 00000000000000..1d814202443f10
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/Overview.stories.mdx
@@ -0,0 +1,66 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Migrating from v8 or v0 to v9
+
+If you or your team are currently using version 8 of `@fluentui/react` or version 0.x of `@fluentui/react-northstar` and are thinking of migrating to version 9
+then we would first like to **_thank you_** for making the jump and tell you how excited we are for you to experience all the improvements and features we have been working on.
+
+There are several things to keep in mind when migrating, so we have created these uprade guide topics explaining:
+
+- the new concepts you will encounter and how they map to concepts in previous versions
+- things to consider when planning migration work
+- detailed guidance on migrating components
+- examples and helper code to make migrating easier
+
+We highly recommend reading through the v9 concepts for developers and the component documentation.
+Knowing how v9 works will provide needed context for migrating.
+
+## Why should I migrate from v8 or v0 to v9?
+
+Fluent UI React v9 provides significant improvements to components over both v8 and v0.
+
+Some reasons to migrate to v9:
+
+- New and improved visual styling, rendering performance, and accessibility
+- Easier to use and more consistent component props
+- Build-time CSS-in-JS
+- Component customization using slots
+- Design token language with an improved theme provider
+- Component composition and re-use leveraging React hooks
+- Reduced bundle size with tree shaking
+
+## Do I have to migrate all at once?
+
+Absolutely not! **You can migrate incrementally**.
+
+Fluent UI v9 was built as separate libraries with the intention of support incremental adoption of v9 components alongside v8 and v0 components.
+
+## What if I'm on v7 right now?
+
+We recommend first migrating v7 to v8. The migration is mostly fixing a few breaking changes and replacing some deprecated components or props with newer versions.
+
+## What is available in v9?
+
+Version 9 is a "converged" library built from the ground-up that addresses many of the concerns and issues that plagued version 8.
+However, this approach means that the intial number of version 9 components is fewer than existed in version 8.
+Some components have also been renamed and a couple of them have been retired.
+
+At the time of this writing, v9 has an initial set of components shipped as a release candidate.
+There are also some components in preview that are more likely to change than the release candidate components.
+However, **all published components are production ready**.
+
+The v9 RC provides the following v8 equivalents: Avatar (previously Persona), Buttons, Divider, Image, Link, Portal and Popover (previously Layer/Overlay), Text, and Tooltip.
+There are also new components: Accordion, Badges, and Menu.
+
+See the [Component Mapping](/docs/concepts-migrating-from-v8-component-mapping--page) for a complete list.
+
+The v9 RC provides the following v0 equivalents: Accordion, Avatar, Badge (previously Status), Buttons, Divider, Image, Menu, Portal and Popover (previously Popup), Text, and Tooltip.
+
+## How much effort is required?
+
+We won't sugarcoat it; migrating from v8 to v9 is more involved than the previous v7 to v8 migration.
+There are breaking changes, component differences, and paradigm shifts.
+
+The good news is that you can migrate incrementally and take it one step at a time.
diff --git a/apps/public-docsite-v9/src/Concepts/Migration/Planning.stories.mdx b/apps/public-docsite-v9/src/Concepts/Migration/Planning.stories.mdx
new file mode 100644
index 00000000000000..f8ff4c9cfbbc08
--- /dev/null
+++ b/apps/public-docsite-v9/src/Concepts/Migration/Planning.stories.mdx
@@ -0,0 +1,186 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Planning your journey
+
+As mentioned before, Fluent UI React v9 was designed to allow you to incrementally migrate.
+You have a lot of flexibility on how you approach, plan, and execute moving to v9.
+
+This part of the guide will help you assess your project, choose your approach,
+and plan out an iterative cycle for a successful migration.
+
+## Assessing your application
+
+How your application uses Fluent will influence your approach.
+Scan over your codebase and try to answer the following questions:
+
+1. What Fluent components does your application use?
+2. For each component, how many times is each component used (i.e. usage instances)?
+3. Is most usage basic or advanced?
+
+Basic usage means you use the component with minimal customization.
+You pass typical props and bind data from your components or application state.
+
+```tsx
+
+ Start migration to version {version}
+
+```
+
+Advanced usage includes things like passing complex custom styles objects, callbacks for custom rendering, using refs to make imperative calls, and complex data binding.
+
+## Considerations
+
+There are lots of ways to migrate. Here are are some different options to consider.
+
+### Incremental or All-at-once
+
+_Incremental_: migrate a few components and ship, often by flighting the migrated components to a subset of users.
+The benefits of the incremental approach are that you get v9 improvements sooner, find issues earlier,
+and can iteratively get faster migrating components.
+
+Since v9 does not have all the components offered in previous versions yet, incrementally migrating allows you to gradually introduce v9
+side-by-side with v8 or v0.
+You can more closely monitor the changes to bundle size and performance improvements with a gradual approach.
+
+_All-at-once_: migrate every v8/v0 component to their v9 equivalent.
+You can still flight the migrated experience to a subset of users.
+You get the benefit that you could A/B route to different web application servers when flighting and keep the
+previous untouched version running independent of the migrated version.
+
+You also get the maximum benefits of v9 including a new consistent style,
+tree-shaking out v8 components from the bundles, build-time CSS optimizations, and render performance improvements.
+
+### Horizontal or Vertical
+
+_Horizontal_: migrating one component across your entire application.
+For example, migrating Button from previous version to v9 everywhere.
+This has the benefit that your code will end up only depending on v9 Button and the v8 Button won't be included in the downloaded bundle.
+Your buttons will look and behave the same across your app.
+
+_Vertical_: migrating all the components in one part of your application.
+For example, migrating Button, Divider, Persona, and Link on a contact status side bar.
+This has the benefit that you can migrate one part of your application in isolation leaving the rest of the app unaffected.
+You can choose a non-critical part of your application to reduce risk of app-wide issues.
+It makes it easier to trace any issues caused by migration.
+Vertical may allow you to find integration issues earlier as you are using multiple new components.
+
+You can also choose to migrate one component in one part of your application.
+You lose some of the benefits of each individual approach, but can try things out more slowly.
+
+### Deep or Shallow
+
+_Deep_: migrating components that are core to your application and re-used in many places.
+For example, migrating a main toolbar to use the v9 Button and Menu components.
+You get the benefits of v9 across the entire application.
+You will get more usage of the migrated components and can gather feedback earlier.
+
+_Shallow_: migrating components that appear only in one non-critical place in your application.
+For example, migrating an optional edit profile screen.
+You get the benefit of limiting risk, but decrease the usage and may not find issues right away.
+
+### New v9 or Old v8 style
+
+If you have v8 and v9 components side-by-side, you may want to avoid noticable style differences.
+If you need style consistency, apply theming and style customizations to make v8 components look like v9 components,
+or make v9 components look like v8 components.
+
+You may decide you can live with the style differences for a period of time.
+Most are small changes that are only noticable when v8 and v9 versions of the same component are next to each other in the UI.
+
+### New v9 or Old v0 style
+
+v0 will to some extent gradually converge its appearance. However, you might still need to use style overrides in some cases to achieve consistency.
+
+### Manual changes, code mod scripts, or shims
+
+_Manual_: update each usage of Fluent React by hand.
+This is the brute force approach to migration.
+It may be the best option especially for smaller projects.
+You may have a lot of variety in how you use components that preclude a search/replace or automated option.
+You may also have an existing wrapper around a component that allows you to migrate at a single code location.
+The benefits include you can call v9 components as intended, the opportunity to simplify and improve
+how your code uses Fluent, and you can make incremental check-ins ensuring existing tests pass.
+
+_Code mod_: author a script to update multiple locations in your code at once.
+You may be able to leverage existing scripts from previous migrations, from others who have migrated, or from the Fluent React team.
+If your codebase is very consistent in how it uses Fluent, this option can save a lot of extra effort over manual migration.
+You can have code mods that add flighting logic around usage to have both v8/v0 and v9 available.
+The downside is that if your usage is complex or highly varied, authoring a code mod that covers all cases may be impractical.
+
+_Shims_: author or use a component that takes v8/v0 props and renders a v9 component.
+Shims can be a good option to get v9 components in your app if you don't have the time to update all the places you use the component.
+You can leave your props creation code alone and pass it to the shim.
+It is easy to search/replace your code to update to using the shim.
+You can also do your flighting logic within the shim itself.
+One downside is that your shim will retain the dependency on v8/v0 and prevent removing it from your bundle.
+Also, there are cases with custom renderprops callbacks that cannot be supported by a shim because the rendered
+content is not compatible with the v9 component.
+
+## Recommendations
+
+### Small projects
+
+If you have a small project and can commit the effort, we recommend migrating everything and modifying the code directly.
+
+This gives you the maximum benefit of rendering performance, build time style bundling, and tree-shaking out v8 components that are no longer used. You'll be able to refactor any advanced usage cases in the newer v9 paradigms and end up with cleaner code.
+
+You should still consider flighting the migrated experience, but you can A/B the entire application rather than if/then flighting per component in the code.
+
+### Medium or larger with advanced usage
+
+If you have a medium to large project, significant advanced usage of components, and limited resources or time constraints, we recommend leveraging the shim components.
+
+You can replace all the usages of a component like Button with ShimButton and get a v9 Button rendered. You get the benefits of v9 components and can crawl over the code to update to use v9 directly at your leisure.
+
+Warning! Shims aren't free. You'll still need to modify code to migrate custom styles, renderprops callbacks, and ref usage. Shims take a dependency on the v8 types and v9 components, so tree-shaking may be limited. Shims introduce mapping logic (although it shouldn't signficantly impact render performance).
+
+### Medium or larger apps with basic usage
+
+If you have a large project with hundreds to thousands of Fluent component usages, we strongly recommend migrating horizontally. The Button component is a typical choice to migrate across the application.
+
+If your usage is mostly basic, we recommend authoring a code-mod to handle what would be too tedious with search & replace. Consider running code-mods to handle most cases and then do some manual migration work to cover the rest.
+
+### Large with advanced usage
+
+If you have a large projects with thousands of Fluent component usages, a lot of advanced usage, and several resource constraints, we recommend creating an application-specific shim and permanent abstraction around the Fluent component.
+
+A permanent abstraction will give you a place to adapt for compatibility as you move from v8 props to v9 props. It will also be valuable with future migrations. v9 has a new hook-based composition model you can leverage to create a shim without introducing the extra virtual DOM elements of a wrapper. You can also introduce the flighting logic within your shim to be able to toggle the migration on/off.
+
+You can consider code-mods to migrate the more basic usage, but will likely find too much variance to handle all the cases across your code.
+
+We recommend you migrate horizontally, but you may want to migrate horizontally within one portion of your application at a time. For example, all the buttons in a toolbar or on a related set of pages in your application. This lets you migrate in stages without destabilizing then entire application.
+
+If you have a subsystem of your application that is independent and similar to a small/medium application, you may choose to migrate it vertically. You can have a cohesive improvement to one part of the application and flight it independent of the rest of the application.
+
+## Creating a plan
+
+We strongly recommend using a work item tracking system or Excel spreadsheet to plan out your migration tasks.
+
+### A plan for a plan
+
+You should create and complete a set of planning tasks:
+
+1. Measure the current bundle size, render performance, and other metrics for later comparison.
+2. Determine the mechanism for how you will flight the migrated components to a subset of users.
+3. Decide on any pre-migration improvements that you will make first to reduce migration effort.
+4. Determine what other constraints you have - maximum bundle size, performance bars, allowed style inconsistencies, etc.
+5. Assess the application and choose your approach.
+6. Choose a target deadline or milestone date for each phase of migration.
+
+### Getting started tasks
+
+You should plan a set of getting started tasks for migrating one component in one location.
+
+1. Update project to reference Fluent React v9.
+2. Add FluentProvider with a theme to the root of the app
+3. Add any v9 component to the UI, verify it renders as expected, then remove it.
+4. Update a single usage location to use the v9 component. Consider recording how long it takes.
+
+### Iterative planning
+
+Plan a task or set of tasks to be able to 'rinse and repeat' each usage migration.
+
+- The type of tasks and their granularity will vary depending on your approach.
+- After migrating some instances, review how long each took and plan out the next set of tasks.
diff --git a/apps/public-docsite-v9/src/Concepts/QuickStart.stories.mdx b/apps/public-docsite-v9/src/Concepts/QuickStart.stories.mdx
index ba61087933196c..1bae31e19eff68 100644
--- a/apps/public-docsite-v9/src/Concepts/QuickStart.stories.mdx
+++ b/apps/public-docsite-v9/src/Concepts/QuickStart.stories.mdx
@@ -41,3 +41,17 @@ import { Button } from '@fluentui/react-components';
export default () => Get started ;
```
+
+### Strict mode
+
+Strict mode is currently not supported. Plese remove any `React.StrictMode` wrappers from your app.
+
+#### SSR with Next.js
+
+To avoid hydration issues, disable strict mode in your app by adding the following configuration to your `next.config.js` file:
+
+```js
+module.exports = {
+ reactStrictMode: false,
+};
+```
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Button.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Button.stories.mdx
deleted file mode 100644
index 51d5ec14feb581..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Button.stories.mdx
+++ /dev/null
@@ -1,289 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Button Upgrade
-
-## Overview:
-
-Before:
-
-```tsx
-import { Button } from '@fluentui/react-northstar';
-const Component = () => ;
-```
-
-After:
-
-```tsx
-import { Button } from '@fluentui/react-components';
-const Component = () => Here is Button ;
-```
-
-## How to migrate props:
-
-| Button props | migrate guide |
-| ----------------- | -------------------------------------------------------------------------------------------------------- |
-| as, className | keep it as is |
-| content | see Migrate content prop in this document |
-| variables, styles | see Migrate style overrides in this document |
-| accessibility | see [migrate-custom-accessibility.md](?path=/docs/concepts-upgrading-from-v0-custom-accessibility--page) |
-| circular | replace with `shape="circular"` |
-| disabled | keep it as is |
-| disabledFocusable | keep it as is |
-| flat | REMOVED: it's a default view now, we're moving away from shadows |
-| fluid | replace with `block` |
-| icon | keep it as is. See Button + Icon integration in this document |
-| iconOnly | REMOVED: see Migrate iconOnly prop in this document |
-| iconPosition | keep it as is |
-| inverted | REMOVED: use styles and color tokens to set a proper styling \* |
-| loader, loading | REMOVED: see Migrate loading and loader props in this document |
-| primary | use `appearance="primary"` |
-| secondary | REMOVED: the button appears with the default style |
-| size | keep it as is. Values: `small`, `medium`(default) and `large` |
-| text | use `appearance="transparent"` |
-| tinted | REMOVED: use Default button instead |
-
-\* this may be changed
-Here is comparison for both versions: [Sandbox](https://codesandbox.io/s/exciting-liskov-y5u5hy?file=/example.tsx)
-
----
-
-## Migrate `content` prop
-
-Move `content` to JSX children.
-
-Before:
-
-```tsx
-import { Button } from '@fluentui/react-northstar';
-const Component = () => ;
-```
-
-After:
-
-```tsx
-import { Button } from '@fluentui/react-components';
-const Component = () => Button content ;
-```
-
-## Migrate style overrides
-
-⚠️ **If this is your first migration**, please read [the general guide on how to migrate styles](?path=/docs/concepts-upgrading-from-v0-custom-style-overrides--page).
-
-### Example for migrate boolean `variables`:
-
-Before:
-
-```tsx
-// in COMPONENT_NAME.tsx
-import { Button } from '@fluentui/react-northstar';
-
-export const Component = () => ;
-
-// in button-styles.ts
-export const buttonStyles1 = {
- root: ({ variables: { isActionButton } }) => ({
- ...(isActionButton && {
- color: colors.grey['250'],
- }),
- }),
-};
-```
-
-After:
-
-```tsx
-// in COMPONENT_NAME.tsx
-import { Button } from '@fluentui/react-components';
-import { useStyles } from './COMPONENT_NAME.styles.ts';
-
-export const Component = () => {
- const classes = useStyles();
- return ;
-};
-
-// in COMPONENT_NAME.styles.ts
-import { makeStyles, tokens } from '@fluentui/react-components';
-
-export const useStyles = makeStyles({
- actionButton: {
- color: colors.colorNeutralForeground1,
- },
-});
-```
-
-### Example for migrate namespaced styles, with conditional styles via `variableProps`:
-
-Before:
-
-```tsx
-// in COMPONENT_NAME.tsx
-import { Button, useUIProviderContext } from '@fluentui/react-northstar';
-
-export const Component = props => {
- const { vars } = useUIProviderContext();
- const { enableUsingChatListGroupTitleAsHeader } = props;
- return (
-
- );
-};
-
-// in button-namespace-flyout.ts
-export default {
- root: {
- filterButton: ({ variableProps: { enableUsingChatListGroupTitleAsHeader } }) => ({
- ...(enableUsingChatListGroupTitleAsHeader && {
- height: '2rem',
- width: '2rem',
- minWidth: '2rem',
- }),
- }),
- },
-};
-```
-
-After:
-
-```tsx
-// in COMPONENT_NAME.tsx
-import { Button, mergeClasses } from '@fluentui/react-components';
-import { useStyles } from './COMPONENT_NAME.styles.ts';
-
-export const Component = props => {
- const classes = useStyles();
-
- return (
-
- );
-};
-
-// in COMPONENT_NAME.styles.ts
-import { makeStyles } from '@fluentui/react-components';
-
-export const useStyles = makeStyles({
- chatListGroupTitleAsHeader: {
- height: '32px',
- width: '32px',
- minWidth: '32px',
- },
-});
-```
-
-### Migrate `iconOnly` prop
-
-Before:
-
-```tsx
-import { Button } from '@fluentui/react-northstar';
-const Component1 = () => } iconOnly />;
-const Component2 = () => } iconOnly text />;
-```
-
-After:
-
-```tsx
-import { Button } from '@fluentui/react-components';
-import { PeopleTeamAdd } from '@fluentui/react-components-icons';
-const Component1 = () => } />;
-const Component2 = () => } appearance="transparent" />;
-```
-
-### Button + Icon integration
-
-During migration it's possible to have different cases for Button + Icon usage, when you need to use v0 + v9 versions together.
-
-**Usage with v9 Button:**
-
-```tsx
-import { CalendarMonth } from '@fluentui/react-components-icons';
-import { Button } from '@fluentui/react-components';
-
-const Component = () => }>Calendar;
-```
-
-**Usage with v0 Button:**
-
-For usage v9 Icon with v0 Button it's required to add additional styles to keep similar behaviour:
-
-```tsx
-import { CalendarMonth } from '@fluentui/react-components-icons';
-import { buttonMigrationStyles } from '@fluentui/react-components';
-import { Button, useUIProviderContext } from '@fluentui/react-northstar';
-
-const Component = () => {
- const { vars } = useUIProviderContext();
- return } content="Calendar" />;
-};
-
-// in button-namespace-flyout.ts
-import { buttonMigrationStyles } from '@fluentui/react-components';
-
-export default {
- root: {
- filterButton: () => ({
- ...buttonMigrationStyles.V9Icon(),
- }),
- },
-};
-```
-
-**v0 Icon + v9 Button:**
-
-```tsx
-import { CalendarIcon } from '@fluentui/react-icons-northstar';
-import { Button, makeStyles } from '@fluentui/react-components';
-import { buttonMigrationStyles } from '@fluentui/react-components';
-
-const useButtonStyles = makeStyles({
- v0IconStyle: {
- ...buttonMigrationStyles.v0Icon(),
- },
-});
-
-const Component = () => {
- const classes = useButtonStyles();
- return (
- }>
- Calendar
-
- );
-};
-```
-
-Live example is here: https://codesandbox.io/s/button-icon-migration-lkt6o5?file=/example.tsx
-
-### Migrate `loading` and `loader` props
-
-Props `loading` and `loader` were removed. To replace old functionality can be used this method:
-
-Before:
-
-```tsx
-import { Button } from '@fluentui/react-northstar';
-const Component = () => ;
-```
-
-After:
-
-```tsx
-import { Button } from '@fluentui/react-components';
-import { Loader } from '@fluentui/react-northstar';
-const Component = () => (
-
-
- Loading
-
-);
-```
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Checkbox.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Checkbox.stories.mdx
deleted file mode 100644
index 3bce057b9e1b32..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Checkbox.stories.mdx
+++ /dev/null
@@ -1,71 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Checkbox Upgrade
-
-Fluent UI Northstar (v0) provides the `Checkbox` control to make a choice between two mutually exclusive options. Fluent UI v9 provides a `Checkbox` control, but has a different API.
-
-The main difference between v0 and v9 `Checkbox` is that v9 offers a circular variant and does not provide a toggle prop.
-
-## Examples
-
-### Basic Upgrade
-
-Basic usage of `Checkbox` v0
-
-```tsx
-import * as React from 'react';
-import { Checkbox } from '@fluentui/react-northstar';
-
-const CheckboxV0BasicExample = () => {
- return (
- <>
-
-
-
- >
- );
-};
-```
-
-An equivalent `Checkbox` in v9 is
-
-```tsx
-import * as React from 'react';
-import { Checkbox } from '@fluentui/react-components';
-
-const CheckboxV9BasicExample = () => {
- return (
- <>
-
-
-
- >
- );
-};
-```
-
-## Prop Mapping
-
-This table maps `Checkbox` v0 props to the `Checkbox` v9 equivalent.
-
-| v0 | v9 | Notes |
-| ---------------- | ---------------- | ----------------------------------------------------------- |
-| `accessibility` | n/a | |
-| `as` | n/a | |
-| `checked` | `checked` | Mutually exclusive with `defaultChecked` |
-| `className` | `className` | |
-| `defaultChecked` | `defaultChecked` | Mutually exclusive with `checked` |
-| `design` | n/a | |
-| `disabled` | `disabled` | |
-| `indicator` | `indicator` | |
-| `key` | `key` | v9 uses the intrinsic React prop |
-| `label` | `label` | |
-| `labelPosition` | `labelPosition` | |
-| `onChange` | `onChange` | |
-| `onClick` | `onClick` | |
-| `ref` | `ref` | |
-| `styles` | `className` | |
-| `toggle` | n/a | Refer to the `Switch` component in `@fluentui/react-switch` |
-| `variables` | n/a | Use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Divider.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Divider.stories.mdx
deleted file mode 100644
index 4566e4b40e303b..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Divider.stories.mdx
+++ /dev/null
@@ -1,119 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Divider Upgrade
-
-## Overview:
-
-Before:
-
-```tsx
-import { Divider } from '@fluentui/react-northstar';
-const Component = () => ;
-```
-
-After:
-
-```tsx
-import { Divider } from '@fluentui/react-components';
-const Component = () => ;
-```
-
-The default v0 Divider has paddings above/below for horizontal Divider, and left/right for vertical Divider.
-v9 Divider has no such padding. Therefore v9 Divider appears similar to v0 ` `.
-
-To add paddings on v9 Divider to match v0, please see style overrides in this [codesandbox](https://codesandbox.io/s/divider-migration-88ws6u?file=/DefaultDividerExample.jsx), _DefaultDividerExample.jsx_ `useMigrationStyles`.
-
-## How to migrate props:
-
-| Divider props | migrate guide |
-| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
-| as, className, key, ref | keep it as is |
-| vertical | keep it as is |
-| fitted | simply remove it |
-| content | see Migrate content prop in this document |
-| variables, styles | see Migrate style overrides in this document |
-| accessibility | see [migrate-custom-accessibility.md](?path=/docs/concepts-upgrading-from-v0-custom-accessibility--page) |
-| important | see Migrate important prop in this document |
-| size | see Migrate size prop in this document |
-| color | replace `color="brand"` with `appearance="brand"`. For other color value, add style override with makeStyles and color tokens |
-
-See this [codesandbox](https://codesandbox.io/s/divider-migration-88ws6u?file=/example.js) comparing v9 Divider with v0, including guides on adding v9 style overrides to match v0.
-
----
-
-## Migrate `content` prop
-
-Move `content` to JSX children.
-
-Before:
-
-```tsx
-import { Divider } from '@fluentui/react-northstar';
-const Component = () => ;
-```
-
-After:
-
-```tsx
-import { Divider } from '@fluentui/react-components';
-const Component = () => hi ;
-```
-
-## Migrate `important` prop
-
-v0 `important` prop adds `fontWeight: "700"` on children. It can be achieved via style overrides, see [codesandbox](https://codesandbox.io/s/divider-migration-88ws6u?file=/ImportantDividerExample.jsx:312-329), _ImportantDividerExample.jsx_ `useMigrationStyles`.
-
-## Migrate `size` prop
-
-By default Divider is 1px, `size={1}` Divider is 2px, `size={2}` Divider is 3px.
-v9 Divider size can be changed by updating its `:before`/`:after` pseudo element's `borderTopWidth`.
-
-See [codesandbox](https://codesandbox.io/s/divider-migration-88ws6u?file=/SizedDividerExample.jsx), _SizedDividerExample.jsx_ `useMigrationStyles`, for style overrides to match `size={1}` and `size={2}`,
-
-## Migrate style overrides
-
-⚠️ **If this is your first migration**, please read [the general guide on how to migrate styles](?path=/docs/concepts-upgrading-from-v0-custom-style-overrides--page).
-
-### Example for migrate boolean `variables`:
-
-Before:
-
-```tsx
-// in COMPONENT_NAME.tsx
-import { Divider } from '@fluentui/react-northstar';
-
-export const Component = () => ;
-
-// in divider-styles.ts
-export const dividerStyles = {
- root: ({ variables: { isCustomDivider } }) => ({
- ...(isCustomDivider && {
- height: '3.2rem',
- }),
- }),
-};
-```
-
-After:
-
-```tsx
-// in COMPONENT_NAME.tsx
-import { Divider } from '@fluentui/react-components';
-import { useStyles } from './COMPONENT_NAME.styles.ts';
-
-export const Component = () => {
- const classes = useStyles();
- return ;
-};
-
-// in COMPONENT_NAME.styles.ts
-import { makeStyles } from '@fluentui/react-components';
-
-export const useStyles = makeStyles({
- chatEntityHeaderDivider: {
- height: '32px',
- },
-});
-```
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Input.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Input.stories.mdx
deleted file mode 100644
index d56a3681b94ca5..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Input.stories.mdx
+++ /dev/null
@@ -1,81 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Input Upgrade
-
-Fluent UI Northstar (v0) provides the `Input` control to elicit input from users. Fluent UI v9 also provides an `Input` control but with a different API and feature set.
-
-## Examples
-
-### Basic Upgrade
-
-Basic usage of `Input` v0 looks like
-
-```tsx
-import * as React from 'react';
-import { Input, Text, Flex } from '@fluentui/react-northstar';
-
-const InputV0BasicExample = () => {
- return ;
-};
-```
-
-An equivalent `Input` v9 usage is
-
-```tsx
-import * as React from 'react';
-import { Label, Input } from '@fluentui/react-components/unstable';
-import { useId } from '@fluentui/react-utilities';
-import { makeStyles } from '@griffel/react';
-
-const useLayoutStyles = makeStyles({
- root: {
- maxWidth: '300px',
- display: 'flex',
- flexDirection: 'column',
- },
-});
-
-const InputV9BasicExample = () => {
- const layoutStyles = useLayoutStyles();
- const inputId = useId('input');
- return (
-
- Search
-
-
- );
-};
-```
-
-## Prop Mapping
-
-This table maps v0 `Input` props to the v9 `Input` equivalent.
-
-| v0 | v9 | Notes |
-| ---------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
-| `accessibility` | n/a | |
-| `as` | n/a | |
-| `className` | `className` | |
-| `clearable` | n/a | Use `contentBefore` or `contentAfter` slots to add a `Button` to implement this behavior |
-| `defaultValue` | `defaultValue` | Mutually exclusive with `value` |
-| `design` | n/a | |
-| `error` | n/a | v9 `Input` does not handle error states |
-| `errorIndicator` | n/a | Use `contentBefore` or `contentAfter` slots to insert custom indicators |
-| `fluid` | n/a | |
-| `icon` | Use `contentBefore` or `contentAfter` slots | |
-| `iconPosition` | n/a | |
-| `inline` | n/a | |
-| `input` | `input` | This is a slot |
-| `inputRef` | Pass a `ref` to the `input` slot | |
-| `inverted` | `appearance` | |
-| `label` | Use `Label` component | Be sure to associate `Label` with `Input` via `htmlFor` |
-| `labelPosition` | n/a | |
-| `onChange` | `onChange` | |
-| `required` | `required` | This is the native HTML prop |
-| `showSuccessIndicator` | n/a | Use `contentBefore` or `contentAfter` slots to insert custom indicators |
-| `type` | `type` | Non text types like 'button' and 'checkbox' are not supported. Use `Button` or `Checkbox` component instead |
-| `value` | `value` | Mutually exclusive with `defaultValue` |
-| `variables` | n/a | Use `FluentProvider` to customize themes |
-| `wrapper` | `root` | This is a slot |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Label.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Label.stories.mdx
deleted file mode 100644
index f7df4eb3634a55..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Label.stories.mdx
+++ /dev/null
@@ -1,58 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Label Upgrade
-
-Fluent UI Northstar (v0) provides the `Label` control to allow users to classify content. Fluent UI v9 also provides a `Label`, but has a different API.
-
-The main difference with v0's and v9's `Label` is that v9 doesn't provide an image and icon prop. v9 also accepts a custom required indicator that can be a string or JSX element.
-
-## Examples
-
-### Basic Upgrade
-
-Basic usage of `Label` v0
-
-```tsx
-import * as React from 'react';
-import { Label } from '@fluentui/react-northstar';
-
-const LabelV0BasicExample = () => {
- return ;
-};
-```
-
-An equivalent `Label` in v9 is
-
-```tsx
-import * as React from 'react';
-import { Label } from '@fluentui/react-components';
-
-const LabelV9BasicExample = () => {
- return You have 23 emails ;
-};
-```
-
-## Prop Mapping
-
-This table maps `Label` v0 props to the `Label` v9 equivalent.
-
-| v0 | v9 | Notes |
-| --------------- | ----------- | ---------------------------------------------- |
-| `accessibility` | n/a | |
-| `as` | n/a | |
-| `circular` | n/a | |
-| `className` | `className` | |
-| `color` | `className` | use `className` to customize color |
-| `content` | `children` | v9 uses React `children` instead of data props |
-| `design` | n/a | |
-| `fluid` | n/a | |
-| `icon` | n/a | |
-| `iconPosition` | n/a | |
-| `image` | n/a | |
-| `imagePosition` | n/a | |
-| `key` | `key` | v9 uses the intrinsic React prop |
-| `ref` | `ref` | |
-| `styles` | `className` | |
-| `variables` | n/a | Use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/RadioGroup.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/RadioGroup.stories.mdx
deleted file mode 100644
index 14b5c9eaf3a764..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/RadioGroup.stories.mdx
+++ /dev/null
@@ -1,103 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# RadioGroup Upgrade
-
-Fluent UI Northstar (v0) provides the `RadioGroup` control for presenting a list of radio options. Fluent UI v9 also provides a `RadioGroup` control but with a different API.
-
-While there are several differences between these controls, the primary change is that `RadioGroup` v9 accepts its options as child `Radio` components while `RadioGroup` v0 accepts options via its `items` prop.
-
-## Examples
-
-### Basic Upgrade
-
-Basic usage of `RadioGroup` v0 looks like
-
-```tsx
-import * as React from 'react';
-import { RadioGroup } from '@fluentui/react-northstar';
-
-const RadioGroupV0BasicExample = () => {
- const items = [
- { name: 'pizza', key: 'Capricciosa', label: 'Capricciosa', value: 'capricciosa' },
- {
- name: 'pizza',
- key: 'Prosciutto',
- label: 'Prosciutto',
- value: 'prosciutto',
- disabled: true,
- },
- ];
-
- return ;
-};
-```
-
-An equivalent `RadioGroup` v9 usage is
-
-```tsx
-import * as React from 'react';
-import { Label, Radio, RadioGroup } from '@fluentui/react-components';
-import { useId } from '@fluentui/react-utilities';
-
-const RadioGroupV9BasicExample = () => {
- const labelId = useId('label-');
-
- return (
- <>
-
- Pick a Pizza
-
-
-
-
-
- >
- );
-};
-```
-
-## Prop Mapping
-
-This table maps `RadioGroup` v0 props to the `RadioGroup` v9 equivalent.
-
-| v0 | v9 | Notes |
-| ---------------------- | -------------- | ----------------------------------------------- |
-| `accessibility` | n/a | |
-| `as` | n/a | |
-| `checkedValue` | `value` | Mutually exclusive with `defaultValue` |
-| `className` | `className` | |
-| `defaultCheckedValue` | `defaultValue` | Mutually exclusive with `value` |
-| `design` | n/a | |
-| `items` | `children` | v9 uses React `children` rather than data props |
-| `key` | `key` | v9 uses the intrinsic React prop |
-| `onCheckedValueChange` | `onChange` | |
-| `ref` | `ref` | |
-| `styles` | `className` | |
-| `variables` | n/a | Use `FluentProvider` to customize themes |
-| `vertical` | `layout` | |
-
-This table maps v0 `RadioGroupItem` props to the v9 `Radio` equivalent.
-
-| v0 | v9 | Notes |
-| ------------------ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
-| `accessibility` | n/a | |
-| `as` | n/a | |
-| `checked` | `checked` | |
-| `checkedIndicator` | `indicator` | Use slots to customize `Radio` |
-| `className` | `className` | |
-| `defaultChecked` | `defaultChecked` | |
-| `design` | n/a | |
-| `disabled` | `disabled` | |
-| `indicator` | `indicator` | Use slots to customize `Radio` |
-| `key` | `key` | v9 uses the intrinsic React prop |
-| `label` | `label` | In v9 this is a slot so this prop can be a string, a component or a shorthand object |
-| `name` | `name` | When used inside `RadioGroup` this is assigned via the `name` prop on `RadioGroup` or given a default value when not assigned there |
-| `onChange` | `onChange` | |
-| `ref` | `ref` | |
-| `shouldFocus` | n/a | |
-| `styles` | `className` | |
-| `value` | n/a | |
-| `variables` | n/a | Use `FluentProvider` to customized themes |
-| `vertical` | n/a | `labelPosition` can be used to change the location of the label text |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Spinner.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Spinner.stories.mdx
deleted file mode 100644
index 8ea8d152ece511..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Spinner.stories.mdx
+++ /dev/null
@@ -1,54 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Loader Upgrade
-
-Fluent UI Northstar (v0) provides the `Loader` control to allow users to indicate that content is being loaded on the screen.
-Fluent UI v9 provides a `Spinner` control with a different API.
-
-## Examples
-
-### Basic Upgrade
-
-Basic usage of `Loader` v0
-
-```tsx
-import { Loader } from '@fluentui/react-northstar';
-import React from 'react';
-
-const LoaderV0BasicExample = () => ;
-
-export default LoaderV0BasicExample;
-```
-
-An equivalent `Spinner` in v9 is
-
-```tsx
-import * as React from 'react';
-import { Spinner } from '@fluentui/react-components';
-
-const SpinnerV9BasicExample = () => ;
-
-export default SpinnerV9BasicExample;
-```
-
-## Props Mapping
-
-This table maps `Loader` v0 props to the `Spinner` v9 equivalent.
-
-| v0 | v9 | Notes |
-| --------------- | --------------- | ---------------------------------------- |
-| `accessibility` | n/a | |
-| `as` | n/a | |
-| `className` | `className` | |
-| `delay` | n/a | |
-| `design` | n/a | |
-| `indicator` | n/a | |
-| `inline` | n/a | |
-| `label` | `label` | |
-| `labelPosition` | `labelPosition` | Default changes from `below` to 'after' |
-| `size` | `size` | |
-| `styles` | `className` | |
-| `svg` | n/a | |
-| `variables` | n/a | Use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Textarea.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Textarea.stories.mdx
deleted file mode 100644
index c0026866d7fd09..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/Components/Textarea.stories.mdx
+++ /dev/null
@@ -1,73 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Textarea Upgrade
-
-Fluent UI Northstar (v0) provides the `TextArea` control to allow users to enter and edit multi-line text. Fluent UI v9 provides a `Textarea` control, but has a different API.
-
-## Examples
-
-### Basic Upgrade
-
-Basic usage of `TextArea` v0
-
-```tsx
-import React from 'react';
-import { TextArea } from '@fluentui/react-northstar';
-
-const TextAreaV0BasicExample = () => {
- const textAreaId = 'textArea';
-
- return (
- <>
-
-
- >
- );
-};
-
-export default TextAreaExample;
-```
-
-An equivalent `Textarea` in v9 is
-
-```tsx
-import * as React from 'react';
-import { Label, Textarea } from '@fluentui/react-components';
-import { useId } from '@fluentui/react-utilities';
-
-const TextareaV9BasicExample = () => {
- const textareaId = useId('textarea');
- return (
- <>
- Enter review
-
- >
- );
-};
-```
-
-## Props Mapping
-
-This table maps `TextArea` v0 props to the `Textarea` v9 equivalent.
-
-| v0 | v9 | Notes |
-| --------------- | -------------- | -------------------------------------------------- |
-| `accessibility` | n/a | |
-| `as` | n/a | |
-| `className` | `className` | |
-| `defaultValue` | `defaultValue` | Mutually exclusive with `value` |
-| `design` | n/a | |
-| `disabled` | `disabled` | |
-| `error` | n/a | |
-| `fluid` | n/a | |
-| `inverted` | `appearance` | The equivalent appearance would be `filledLighter` |
-| `key` | `key` | |
-| `onChange` | `onChange` | |
-| `ref` | `ref` | |
-| `required` | `required` | |
-| `resize` | `resize` | |
-| `styles` | `className` | |
-| `value` | `value` | Mutually exclusivewith `defaultValue` |
-| `variables` | n/a | Use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/migrate-styles.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/migrate-styles.stories.mdx
deleted file mode 100755
index a383c6a2ca577c..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV0/migrate-styles.stories.mdx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Migrate Custom Style Overrides
-
-This guide provides instructions for migrate style overrides on react-northstar (v0) components to v9 components.
-
-React-northstar provides a flexible styling and theming infrastructure and different consumers might have built their own way of adjusting the styles based on it. The component upgrade guides provide abstracted examples that show how to migrate one of the approaches used with v0 components to the v9 standardized `makeStyles` approach.
-
-## Overview
-
-1. create/modify _COMPONENT_NAME.styles.ts_ file (COMPONENT_NAME is the name of your component file)
-2. in _COMPONENT_NAME.styles.ts_, move your custom styles into hooks from `makeStyles`
- > if this is your first time using `makeStyles`, please check [this guide on how to style components](http://aka.ms/fluentui-storybook/?path=/docs/concepts-developer-styling-components--page) on fluentui docmentation site.
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/ActionButtonShimExample.tsx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/ActionButtonShimExample.tsx
deleted file mode 100644
index cecc63c686ab4f..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/ActionButtonShimExample.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import * as React from 'react';
-import { ActionButton, IButtonProps, Icon, IIconProps } from '@fluentui/react';
-import { Button, webLightTheme, FluentProvider } from '@fluentui/react-components';
-import { ActionButtonShim } from '../../../../../shims/ButtonShim';
-
-const addIcon: IIconProps = { iconName: 'Add' };
-
-export const ActionButtonShimExample = (props: IButtonProps) => {
- return (
- <>
- Action
-
- Action
-
-
- }>
- Action
-
-
- >
- );
-};
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/Button.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/Button.stories.mdx
deleted file mode 100644
index 5d563560a2192b..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/Button.stories.mdx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-import { ButtonShimExamples } from './ButtonShimExamples.tsx';
-
-
-
-# Button Upgrade
-
-The v8 button variants share the IButtonProps. When using ButtonBase the resulting variant is rendered based on the buttonType (normal, primary, hero, compound, command, icon, or default) and when using a variant directly then props like primary and split change how the button is rendered.
-
-In v9, there is not a shared button type. Variants have their own props although they may extend ButtonProps. There are not variants for primary and action buttons. This is controlled through the appearance prop.
-
-To upgrade a button replace the v8 usage with the corresponding v9 button variant. Use the property mapping to pass the right properties to the v9 button.
-
-## Button Variant Mapping
-
-| v8 Button variant | v9 Button variant |
-| -------------------- | ------------------------------- |
-| DefaultButton | Button |
-| ActionButton | Button appearance="transparent" |
-| CommandButton | Button |
-| CommandBarButton | Button |
-| CompoundButton | CompoundButton |
-| ContextualMenuButton | Menu / MenuButton |
-| PrimaryButton | Button appearance="primary" |
-| Button split | SplitButton |
-| Button toggle | ToggleButton |
-
-## Button Props Mapping
-
-| v8 IButtonProps | v9 ButtonProps (replacements) |
-| ------------------------ | ------------------------------------------ |
-| allowDisabledFocus | disabledFocusable |
-| ariaLabel | HTML aria-label |
-| ariaDescription | (removed) |
-| ariaHidden | HTML aria-hidden |
-| checked | (use ToggleButton checked) |
-| className | className |
-| children | children |
-| componentRef | ref |
-| data | (removed) |
-| defaultRender | (removed) |
-| disabled | disabled |
-| getClassNames | |
-| getSplitButtonClassNames | (use SplitButton) |
-| href | (use Link) |
-| iconProps | icon (slot) |
-| disabled | disabled |
-| key | key |
-| keyTipProps | |
-| menuAs | (use Menu and HTML as) |
-| menuIconProps | (use MenuButton menuIcon slot) |
-| menuProps | (use Menu and MenuButton) |
-| menuTriggerKeyCode | |
-| onMenuClick | HTML onClick |
-| onRenderAriaDescription | (removed) |
-| onRenderChildren | children |
-| onRenderDescription | (use CompoundButton secondaryContent slot) |
-| onRenderIcon | icon (slot) |
-| onRenderMenuIcon | (use MenuButton icon) |
-| onRenderText | children |
-| persistMenu | (use Menu) |
-| primary | appearance=primary |
-| primaryActionButtonProps | (use SplitButton) |
-| primaryDisabled | (use SplitButton) |
-| secondaryText | (use CompoundButton secondaryContent) |
-| split | (use SplitButton) |
-| splitButtonAriaLabel | HTML aria-label |
-| splitButtonMenuProps | (use Menu and SplitButton) |
-| styles | (use makeStyles and className) |
-| text | children |
-| theme | (use FluentProvider) |
-| toggle | (use ToggleButton) |
-| uniqueId | HTML key |
-
-## Button Shims
-
-The button shim components accept v8 `IButtonProps` and render v9 buttons.
-Shims are useful when you have a large number of usage instances, want to render v9 components, and do not have time
-or resources to update every instance.
-
-Prefer to upgrade your code to use v9 buttons if possible rather than take a use shims.
-Shim depend on both v8 and v9 so may prevent bundle size optimizations.
-
-You can find the button shims in the Fluent UI React repository here [apps/public-docsite-v9/src/shims/ButtonShim.tsx](https://github.com/microsoft/fluentui/blob/master/apps/public-docsite-v9/src/shims/ButtonShim.tsx)
-
-
-
-
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/ButtonShimExamples.tsx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/ButtonShimExamples.tsx
deleted file mode 100644
index a3d691324a7bad..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/ButtonShimExamples.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import * as React from 'react';
-import { makeStyles, shorthands } from '@fluentui/react-components';
-import { ActionButtonShimExample } from './ActionButtonShimExample';
-import { CommandButtonShimExample } from './CommandButtonShimExample';
-import { CompoundButtonShimExample } from './CompoundButtonShimExample';
-import { DefaultButtonShimExample } from './DefaultButtonShimExample';
-import { MenuButtonShimExample } from './MenuButtonShimExample';
-import { PrimaryButtonShimExample } from './PrimaryButtonShimExample';
-import { ToggleButtonShimExample } from './ToggleButtonShimExample';
-
-const useStyles = makeStyles({
- root: {
- display: 'grid',
- gridTemplateColumns: 'auto auto auto auto',
- gridTemplateRows: 'repeat(7, 1fr)',
- width: 'fit-content',
- alignContent: 'center',
- alignItems: 'center',
- justifyItems: 'center',
- columnGap: '10px',
- rowGap: '10px',
- },
- componentName: {
- justifySelf: 'end',
- ...shorthands.margin(0, '10px', 0, 0),
- },
-});
-
-export const ButtonShimExamples = () => {
- const styles = useStyles();
-
- return (
-
-
Component
-
v8
-
shim
-
v9
-
ActionButton
-
-
DefaultButton
-
-
CommandButton
-
-
CompoundButton
-
-
MenuButton
-
-
PrimaryButton
-
-
ToggleButton
-
-
- );
-};
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/CommandButtonShimExample.tsx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/CommandButtonShimExample.tsx
deleted file mode 100644
index dc1aa9c086a280..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/CommandButtonShimExample.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import * as React from 'react';
-import { CommandButton, IButtonProps, Icon, IIconProps } from '@fluentui/react';
-import { Button, webLightTheme, FluentProvider } from '@fluentui/react-components';
-import { CommandButtonShim } from '../../../../../shims/ButtonShim';
-
-const addIcon: IIconProps = { iconName: 'Add' };
-
-export const CommandButtonShimExample = (props: IButtonProps) => {
- return (
- <>
- Command
-
- Command
-
-
- }>
- Command
-
-
- >
- );
-};
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/CompoundButtonShimExample.tsx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/CompoundButtonShimExample.tsx
deleted file mode 100644
index cd734bd378ab09..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/CompoundButtonShimExample.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import * as React from 'react';
-import { CompoundButton as CompoundButtonV8, IButtonProps } from '@fluentui/react';
-import { CompoundButton as CompoundButtonV9, webLightTheme, FluentProvider } from '@fluentui/react-components';
-import { CompoundButtonShim } from '../../../../../shims/ButtonShim';
-
-export const CompoundButtonShimExample = (props: IButtonProps) => {
- return (
- <>
- Compound
-
- Compound
-
-
- Compound
-
- >
- );
-};
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/DefaultButtonShimExample.tsx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/DefaultButtonShimExample.tsx
deleted file mode 100644
index 80e0557367a6b7..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/DefaultButtonShimExample.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import * as React from 'react';
-import { DefaultButton, IButtonProps } from '@fluentui/react';
-import { Button, webLightTheme, FluentProvider } from '@fluentui/react-components';
-import { DefaultButtonShim } from '../../../../../shims/ButtonShim';
-
-export const DefaultButtonShimExample = (props: IButtonProps) => {
- return (
- <>
- Default
-
- Default
-
-
- Default
-
- >
- );
-};
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/MenuButtonShimExample.tsx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/MenuButtonShimExample.tsx
deleted file mode 100644
index b871e67af5a023..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/MenuButtonShimExample.tsx
+++ /dev/null
@@ -1,158 +0,0 @@
-/* eslint-disable no-alert */
-import * as React from 'react';
-import {
- ContextualMenuItemType,
- DefaultButton,
- Icon,
- IContextualMenuItem,
- IContextualMenuProps,
- IIconProps,
-} from '@fluentui/react';
-import {
- webLightTheme,
- FluentProvider,
- Menu,
- MenuTrigger,
- MenuButton,
- MenuPopover,
- MenuList,
- MenuItem,
- MenuDivider,
- MenuItemCheckbox,
-} from '@fluentui/react-components';
-import { MenuButtonShim } from '../../../../../shims/ButtonShim';
-
-const addIcon: IIconProps = { iconName: 'Add' };
-const mailIcon: IIconProps = { iconName: 'Mail' };
-const calendarIcon: IIconProps = { iconName: 'Calendar' };
-const shareIcon: IIconProps = { iconName: 'Share', style: { color: 'salmon' } };
-
-export const MenuButtonShimExample = () => {
- const [selection, setSelection] = React.useState<{ [key: string]: boolean }>({});
-
- const onToggleSelect = React.useCallback(
- (ev?: React.MouseEvent, item?: IContextualMenuItem): void => {
- ev && ev.preventDefault();
-
- if (item) {
- setSelection({
- ...selection,
- [item.key]: selection[item.key] === undefined ? true : !selection[item.key],
- });
- }
- },
- [selection],
- );
-
- const menuProps: IContextualMenuProps = {
- // For example: disable dismiss if shift key is held down while dismissing
- onDismiss: ev => {
- if (ev && 'shiftKey' in ev) {
- ev.preventDefault();
- }
- },
- items: [
- {
- key: 'newItem',
- iconProps: addIcon,
- text: 'New',
- subMenuProps: {
- items: [
- {
- key: 'newMailMessage',
- text: 'Mail Message',
- iconProps: mailIcon,
- secondaryText: 'Ctrl+Shift+M',
- onClick: () => {
- alert('New -> Mail Message clicked');
- },
- },
- {
- key: 'newCalendarItem',
- text: 'Calendar Item',
- iconProps: calendarIcon,
- onClick: () => {
- alert('New --> Calendar Item clicked');
- },
- },
- ],
- },
- },
-
- { key: 'divider_1', itemType: ContextualMenuItemType.Divider },
- {
- key: 'edit',
- text: 'Edit',
- onClick: () => {
- alert('Edit clicked');
- },
- },
- {
- key: 'delete',
- text: 'Delete',
- onClick: () => {
- alert('Delete clicked');
- },
- },
- { key: 'divider_2', itemType: ContextualMenuItemType.Divider },
- {
- key: 'favorite',
- text: 'Favorite',
- canCheck: true,
- checked: selection.favorite,
- onClick: onToggleSelect as IContextualMenuItem['onClick'],
- },
- {
- key: 'share',
- iconProps: shareIcon,
- text: 'Share',
- title: 'Share',
- onClick: () => {
- alert('Share clicked');
- },
- },
- ],
- directionalHintFixed: true,
- };
-
- return (
- <>
-
-
-
-
-
-
-
- Menu Button
-
-
-
-
-
- }>New
-
-
-
- } secondaryContent="Ctrl+Shift+M">
- Mail Message
-
- }>Calendar Item
-
-
-
-
- Edit
- Delete
-
-
- Favorite
-
- }>Share
-
-
-
-
- >
- );
-};
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/PrimaryButtonShimExample.tsx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/PrimaryButtonShimExample.tsx
deleted file mode 100644
index 372bc892a59d9d..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/PrimaryButtonShimExample.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import * as React from 'react';
-import { PrimaryButton, IButtonProps } from '@fluentui/react';
-import { Button, webLightTheme, FluentProvider } from '@fluentui/react-components';
-import { PrimaryButtonShim } from '../../../../../shims/ButtonShim';
-
-export const PrimaryButtonShimExample = (props: IButtonProps) => {
- return (
- <>
- Primary
-
- Primary
-
-
- Primary
-
- >
- );
-};
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/ToggleButtonShimExample.tsx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/ToggleButtonShimExample.tsx
deleted file mode 100644
index 3f6f02eb2b35e3..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Button/ToggleButtonShimExample.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-/* eslint-disable react/jsx-no-bind */
-import * as React from 'react';
-import { DefaultButton, IButtonProps, Icon, IIconProps, initializeIcons } from '@fluentui/react';
-import { webLightTheme, FluentProvider, ToggleButton } from '@fluentui/react-components';
-import { ToggleButtonShim } from '../../../../../shims/ButtonShim';
-
-initializeIcons();
-
-const volume0Icon: IIconProps = { iconName: 'Volume0' };
-const volume3Icon: IIconProps = { iconName: 'Volume3' };
-
-export const ToggleButtonShimExample = (props: IButtonProps) => {
- const [muted1, setMuted1] = React.useState(false);
- const [muted2, setMuted2] = React.useState(false);
- const [muted3, setMuted3] = React.useState(false);
-
- return (
- <>
- setMuted1(!muted1)}
- />
-
- setMuted2(!muted2)}
- />
-
-
- : }
- onClick={() => setMuted3(!muted3)}
- >
- Toggle
-
-
- >
- );
-};
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Checkbox.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Checkbox.stories.mdx
deleted file mode 100644
index 378e767510a0f4..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Checkbox.stories.mdx
+++ /dev/null
@@ -1,78 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Checkbox Upgrade
-
-Fluent UI v8 provides the `Checkbox` control to give people a way to select one or more items from a group, or switch between two mutually exclusive options. Fluent UI v9 provides a `Checkbox` control, but has a different API.
-
-The main difference between v8 and v9 `Checkbox` is that v9 offers a circular variant. v9 handles checked and indeterminate differently from v8, v9 combines both into the `checked` and `defaultChecked` props.
-
-## Examples
-
-### Basic Upgrade
-
-Basic usage of `Checkbox` v8
-
-```tsx
-import React from 'react';
-import { Checkbox } from '@fluentui/react';
-
-const CheckboxV8BasicExample = () => {
- return (
- <>
-
-
-
- >
- );
-};
-```
-
-An equivalent `Checkbox` in v9 is
-
-```tsx
-import * as React from 'react';
-import { Checkbox } from '@fluentui/react-components';
-
-const CheckboxV9BasicExample = () => {
- return (
- <>
-
-
-
- >
- );
-};
-```
-
-## Prop Mapping
-
-This table maps `Checkbox` v8 props to the `Checkbox` v9 equivalent.
-
-| v8 | v9 | Notes |
-| ---------------------- | ------------------ | ---------------------------------------- |
-| `ariaDescribedBy` | `aria-describedby` | |
-| `ariaLabel` | `aria-label` | |
-| `ariaLabelledBy` | `aria-labelledby` | |
-| `ariaPositionInSet` | `aria-posinset` | |
-| `ariaSetSize` | `aria-setsize` | |
-| `boxSide` | `labelPosition` | |
-| `checked` | `checked` | Mutually exclusive with `defaultChecked` |
-| `checkmarkIconProps` | `indicator` | |
-| `className` | `className` | |
-| `componentRef` | `ref` | |
-| `defaultChecked` | `defaultChecked` | Mutually exclusive with `checked` |
-| `defaultIndeterminate` | `defaultChecked` | |
-| `disabled` | `disabled` | |
-| `id` | `id` | |
-| `indeterminate` | `checked` | |
-| `inputProps` | n/a | Props go directly to the `input` slot |
-| `label` | `label` | |
-| `name` | `name` | |
-| `onChange` | `onChange` | |
-| `onRenderLabel` | n/a | |
-| `required` | `required` | |
-| `styles` | `className` | |
-| `theme` | n/a | Use `FluentProvider` to customize themes |
-| `title` | n/a | |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Divider.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Divider.stories.mdx
deleted file mode 100644
index c16a858f1423a6..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Divider.stories.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Separator to Divider Upgrade
-
-The v8 `Separator` component is called `Divider` in v9.
-
-Upgrade should be a straightforward name change of the component.
-v9 `Divider` supports the same `alignContent`, `children` and `vertical` props.
-If you custom styled `Separator` then use `makeStyles` to set a `className` with `Divider`.
-
-Here is a vertical `Separator` with the content aligned at the end.
-
-```tsx
-
- Content
-
-```
-
-Here is an equivalent `Divider`.
-
-```tsx
-
- Content
-
-```
-
-## Divider Props Mapping
-
-| v8 | v9 |
-| ------------ | ------------------------------ |
-| alignContent | alignContent |
-| | appearance |
-| | inset |
-| styles | (use makeStyles and className) |
-| theme | (use FluentProvider) |
-| vertical | vertical |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Input.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Input.stories.mdx
deleted file mode 100644
index 27cbac7aaa1603..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Input.stories.mdx
+++ /dev/null
@@ -1,159 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# TextField to Input Upgrade
-
-Fluent UI v8 provides the `TextField` control for entering and editing text. In Fluent UI v9 `TextField` is replaced with `Input`.
-
-While basic usage is largely the same, `Input` omits some features found in `TextField`, preferring to compose several components together for greater flexibility.
-
-## Examples
-
-### Basic Upgrade
-
-Basic usage of `TextField` looks like
-
-```tsx
-import * as React from 'react';
-import { TextField } from '@fluentui/react/lib/TextField';}
-import { Stack, IStackProps, IStackStyles } from '@fluentui/react/lib/Stack';
-
-const columnProps: Partial = {
- tokens: { childrenGap: 15 },
- styles: { root: { width: 300 } },
-};
-
-const TextFieldV8BasicExample = () => {
- return
-
-
-
-
-
-
-
-}
-```
-
-An equivalent `Input` usage is:
-
-```tsx
-import * as React from 'react';
-import { Text } from '@fluentui/react-components';
-import { Label, Input } from '@fluentui/react-components/unstable';
-import { useId } from '@fluentui/react-utilities';
-import { makeStyles } from '@griffel/react';
-
-const useStackStyles = makeStyles({
- root: {
- maxWidth: '300px',
- display: 'flex',
- flexDirection: 'column',
-
- '> * + *': {
- marginTop: '20px',
- },
-
- '> div': {
- display: 'flex',
- flexDirection: 'column',
- },
- },
-});
-
-const InputV9BasicExample = () => {
- const stackStyles = useStackStyles();
- const standardId = useId('standard');
- const disabledId = useId('disabled');
- const readonlyId = useId('readonly');
- const requiredId = useId('required');
- const errorId = useId('error');
- const errorMessageId = useId('error-message');
-
- return (
-
- );
-};
-```
-
-## Prop Mapping
-
-This table maps v8 `TextField` props to the v9 `Input` equivalent.
-
-| v8 | v9 | Notes |
-| -------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------ |
-| `componentRef` | `ref` | v9 provides access to the underlyig DOM node, not ITextField |
-| `elementRef` | `ref` | |
-| `multiline` | n/a | Use `Textarea` |
-| `resizable` | n/a | |
-| `autoAjustHeight` | n/a | See `Textarea` docs |
-| `underlined` | `appearance` | |
-| `borderless` | `appearance` | |
-| `label` | Use `Label` component | Be sure to associate `Label` with `Input` via `htmlFor` |
-| `onRenderLabel` | n/a | Use slots to customize `Input` |
-| `description` | n/a | Use another element like `Text` and associate it with `Input` via `aria-describedby` |
-| `onRenderDescription` | n/a | |
-| `onRenderInput` | n/a | Use slots to customize `Input` |
-| `prefix` | `contentBefore` | This is a slot not a `string` |
-| `suffix` | `contentAfter` | This is a slot not a `string` |
-| `onRenderPrefix` | n/a | Use slots to customize `Input` |
-| `onRenderSuffix` | n/a | Use slots to customize `Input` |
-| `iconProps` | Use `contentBefore` or `contentAfter` slot | |
-| `defaultValue` | `defaultValue` | Mutually exclusive with `value` |
-| `value` | `value` | Mutually exclusive with `defaultValue` |
-| `disabled` | `disabled` | |
-| `readOnly` | `readOnly` | In v9 this is the native HTML prop |
-| `invalid` | n/a | v9 `Input` does not handle validation states |
-| `errorMessage` | n/a | Use another element like `Text` and associate it with `Input` via `aria-describedby` |
-| `onChange` | `onChange` | Typescript types have changed |
-| `onNotifyValidationResult` | n/a | v9 `Input` does not handle validation |
-| `onGetErrorMessage` | n/a | v9 `Input` does not handle error states |
-| `deferredValidationTime` | n/a | v9 `Input` does not handle validation |
-| `className` | `className` | |
-| `inputClassName` | Use `input` slot | |
-| `ariaLabel` | `aria-label` | |
-| `validateOnFocusIn` | n/a | v9 `Input` does not handle validation |
-| `validateOnFocusOut` | n/a | v9 `Input` does not handle validation |
-| `validateOnLoad` | n/a | v9 `Input` does not handle validation |
-| `theme` | n/a | Use `FluentProvider` to customize themes |
-| `styles` | `className` | |
-| `autoComplete` | `autoComplete` | In v9 this is the native HTML prop |
-| `canRevealPassword` | n/a | v9 `Input` does not provide built in password reveal behavior |
-| `revealPasswordAriaLabel` | n/a | v9 `Input` does not provide built in password reveal behavior |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Label.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Label.stories.mdx
deleted file mode 100644
index c341cf92c6296e..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Label.stories.mdx
+++ /dev/null
@@ -1,64 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Label Upgrade
-
-Fluent UI v8 provides the `Label` control that gives a name or title to a control or group of controls. Fluent UI v9 also provides a `Label` with a slightly different API.
-
-The main difference with v8's and v9's `Label` is that v9 allows the user to use a custom indicator.
-
-## Examples
-
-### Basic Upgrade
-
-Basic usage of `Label` v8
-
-```tsx
-import * as React from 'react';
-import { Label } from '@fluentui/react/lib/Label';
-import { useId } from '@fluentui/react-hooks';
-
-export const LabelBasicExample = () => {
- const inputId = useId('anInput');
-
- return (
- <>
- A Label for an input
-
- >
- );
-};
-```
-
-An equivalent `Label` in v9 is
-
-```tsx
-import * as React from 'react';
-import { Label } from '@fluentui/react-components';
-import { useId } from '@fluentui/react-utilities';
-
-const LabelV9BasicExample = () => {
- const inputId = useId('anInput');
-
- return (
- <>
- A Label for an input
-
- >
- );
-};
-```
-
-## Prop Mapping
-
-This table maps `Label` v8 props to the `Label` v9 equivalent.
-
-| v8 | v9 | Notes |
-| -------------- | ----------- | ---------------------------------------- |
-| `as` | n/a | |
-| `componentRef` | `ref` | |
-| `disabled` | `disabled` | |
-| `required` | `required` | |
-| `styles` | `className` | |
-| `theme` | n/a | use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/RadioGroup.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/RadioGroup.stories.mdx
deleted file mode 100644
index 4bc88741e6fe2a..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/RadioGroup.stories.mdx
+++ /dev/null
@@ -1,207 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# ChoiceGroup to RadioGroup Upgrade
-
-Fluent UI v8 provides the `ChoiceGroup` control for presenting a list of radio options.
-In Fluent UI v9 `ChoiceGroup` is replaced with `RadioGroup`.
-
-While there are several differences between these controls, the primary change is that `RadioGroup` accepts
-its options as child `Radio` components while `ChoiceGroup` accepts options via its `options` prop.
-
-## Examples
-
-### Basic Upgrarde
-
-Basic usage of `ChoiceGroup` looks like
-
-```tsx
-import * as React from 'react';
-import { ChoiceGroup, IChoiceGroupOption } from '@fluentui/react/lib/ChoiceGroup';
-
-const ChoiceGroupBasicExample = () => {
- const options: IChoiceGroupOption[] = [
- { key: 'A', text: 'Option A' },
- { key: 'B', text: 'Option B' },
- { key: 'C', text: 'Option C', disabled: true },
- { key: 'D', text: 'Option D' },
- ];
-
- return ;
-};
-```
-
-An equivalent `RadioGroup` usage is
-
-```tsx
-import * as React from 'react';
-import { Label, Radio, RadioGroup } from '@fluentui/react-components';
-import { useId } from '@fluentui/react-utilities';
-
-const RadioGroupBasicExample = () => {
- const labelId = useId('label');
-
- return (
- <>
-
- Pick One
-
-
-
-
-
-
-
- >
- );
-};
-```
-
-### Custom Option Rendering Upgrade
-
-Since `RadioGroup` accepts options as children, options may be directly customized without the use of v8's
-`onRenderField` callback.
-
-`ChoiceGroup` `onRenderField` callback for customization:
-
-```tsx
-import * as React from 'react';
-import { ChoiceGroup, IChoiceGroupOption } from '@fluentui/react/lib/ChoiceGroup';
-import { mergeStyles } from '@fluentui/react/lib/Styling';
-import { CatIcon } from '@fluentui/react-icons-mdl2';
-
-const ChoiceGroupCustomOptionExample = () => {
- const optionRootClass = mergeStyles({ display: 'flex', alignItems: 'center', gap: '5px' });
-
- const options: IChoiceGroupOption[] = [
- {
- key: 'A',
- text: 'A label with an icon',
- ariaLabel: 'A label with a cat icon',
- onRenderField: (props, render) => {
- z;
- return (
-
- {render!(props)}
-
-
- );
- },
- },
- { key: 'B', text: 'Option B', styles: { root: { border: '1px solid green' } } },
- { key: 'C', text: 'Option C', disabled: true },
- { key: 'D', text: 'Option D' },
- ];
-
- return ;
-};
-```
-
-An equivalent `RadioGroup` implementation:
-
-```tsx
-import * as React from 'react';
-import { Label, Radio, RadioGroup } from '@fluentui/react-components';
-import { useId } from '@fluentui/react-utilities';
-import { makeStyles, shorthands } from '@griffel/react';
-import { AnimalCat24Regular } from '@fluentui/react-icons';
-
-const useIconOptionStyles = makeStyles({
- root: {
- display: 'flex',
- alignItems: 'center',
- ...shorthands.gap('5px'),
- },
-});
-
-const useLabelStyles = makeStyles({
- root: {
- display: 'flex',
- ...shorthands.gap('5px'),
- },
-});
-
-const useGreenBorderOptionStyles = makeStyles({
- root: {
- ...shorthands.border('1px', 'solid', 'green'),
- },
-});
-
-const RadioGroupCustomOptionExample = () => {
- const labelId = useId('label');
- const iconOptionStyles = useIconOptionStyles();
- const labelStyles = useLabelStyles();
- const greenBorderOptionStyles = useGreenBorderOptionStyles();
-
- return (
- <>
-
- Pick One
-
-
-
-
- A
- >
- ),
- }}
- />
-
-
-
-
-
- >
- );
-};
-```
-
-## Prop Mapping
-
-This table maps v8 `ChoiceGroup` props to the v9 `RadioGroup` equivalent.
-
-| v8 | v9 | Notes |
-| -------------------- | --------------------- | -------------------------------------------------------------------- |
-| `componentRef` | `ref` | v9 provides access to the underlyig DOM node, not IChoiceGroup |
-| `options` | `children` | v9 uses React `children` rather than data props |
-| `defaultSelectedKey` | `defaultValue` | Mutually exclusive with `value` |
-| `selectedKey` | `value` | Mutually exclusive with `defaultValue` |
-| `onChange` | `onChange` | The Typescript types have changed in v9 |
-| `label` | Use `Label` component | Be sure to associate `Label` with `RadioGroup` via `aria-labelledby` |
-| `theme` | n/a | Use `FluentProvider` to customize themes |
-| `styles` | `className` | |
-| `ariaLabelledBy` | `aria-labelledby` | In v9 this is the intrinsic HTML prop |
-
-This table maps v8 `IChoiceGroupOption` props to the v9 `Radio` equivalent.
-
-| v8 | v9 | Notes |
-| ------------------ | ------------ | -------------------------------------------------------------------------------------------------------------- |
-| `key` | `key` | This is only necessary if you `.map()` an array to generate the list of `Radio`s. |
-| `text` | `label` | In v9 this is a slot so this prop can be a string, a component or a shorthand object |
-| `onRenderField` | n/a | Provide a custom child to `RadioGroup` |
-| `onRenderLabel` | `label` | Provide a custom component to the `label` slot |
-| `iconProps` | n/a | Use slots to customize `Radio` |
-| `imageSrc` | n/a | Use slots to customize `Radio` |
-| `imageAlt` | n/a | Use slots to customize `Radio` |
-| `selectedImageSrc` | n/a | Use slots to customize `Radio` |
-| `imageSize` | n/a | Use slots to customize `Radio` |
-| `disabled` | `disabled` | |
-| `id` | `id` | In v9 this is the intrinsic HTML prop |
-| `labeldId` | n/a | Provide an id to the `label` slot via shorthand props or a custom component |
-| `ariaLabel` | `aria-label` | In v9 this is the intrinsic HTML prop |
-| `styles` | `className` | |
-| `itemKey` | n/a | |
-| `checked` | `checked` | When used in a `RadioGroup` use the `value` prop on `RadioGroup` instead |
-| `onChange` | `onChange` | Typescript types have changed |
-| `onFocus` | `onFocus` | v9 uses native `onFocus` |
-| `onBlur` | `onBlur` | v9 uses native `onBlur` |
-| `focused` | n/a | |
-| `theme` | n/a | Use `FluentProvider` to customize themes |
-| `required` | `required` | |
-| `name` | `name` | v9 uses native HTML prop. When used in a `RadioGroup` this prop is inherited from the `RadioGroup` by default. |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Spinner.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Spinner.stories.mdx
deleted file mode 100644
index e3dfafcbee0663..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Spinner.stories.mdx
+++ /dev/null
@@ -1,50 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Spinner Upgrade
-
-Fluent UI V8 provides the `Spinner` control to allow users to indicate that content is being loaded on the screen.
-Fluent UI v9 provides a `Spinner` control with a different API.
-
-## Examples
-
-### Basic Upgrade
-
-Basic usage of `Spinner` V8
-
-```tsx
-import { Spinner } from '@fluentui/react/lib/Spinner';
-import React from 'react';
-
-const SpinnerV8BasicExample = () => ;
-
-export default SpinnerV8BasicExample;
-```
-
-An equivalent `Spinner` in v9 is
-
-```tsx
-import * as React from 'react';
-import { Spinner } from '@fluentui/react-components';
-
-const SpinnerV9BasicExample = () => ;
-
-export default SpinnerV9BasicExample;
-```
-
-## Props Mapping
-
-This table maps `Spinner` v8 props to the `Spinner` v9 equivalent.
-
-| v8 | v9 | Notes |
-| --------------- | --------------- | ---------------------------------------- |
-| `aria-label` | n/a | |
-| `aria-live` | n/a | |
-| `className` | `className` | |
-| `componentRef` | n/a | |
-| `label` | `label` | |
-| `labelPosition` | `labelPosition` | Default changes from `bottom` to 'after' |
-| `size` | `size` | |
-| `styles` | `className` | |
-| `theme` | n/a | Use `FluentProvider` to customize themes |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Textarea.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Textarea.stories.mdx
deleted file mode 100644
index 8366ae3f1faff4..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Components/Textarea.stories.mdx
+++ /dev/null
@@ -1,110 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Textarea Upgrade
-
-Fluent UI v8 provides the `TextField` control to allow users to enter and edit text. Fluent UI v9 provides a `Textarea` control, but has a different API.
-
-v9 takes a different approach than v8 with respect to text inputs, and instead of using a single `TextField` component instaed uses separate `Input` and `Textarea` components. v9's `Input` in this case is equivalent to the general v8's `TextField`, while v9's `Textarea` is equivalent to v8's `TextField` with the `multiline` prop set to `true`.
-
-## Examples
-
-### Basic Upgrade
-
-Basic usage of `TextField` v8
-
-```tsx
-import React from 'react';
-import { TextField } from '@fluentui/react/lib/TextField';
-
-const TextAreaV0BasicExample = () => {
- return (
- <>
-
-
-
- >
- );
-};
-
-export default TextAreaExample;
-```
-
-An equivalent `Textarea` in v9 is
-
-```tsx
-import * as React from 'react';
-import { Label, Textarea } from '@fluentui/react-components';
-import { useId } from '@fluentui/react-utilities';
-
-const TextareaV9BasicExample = () => {
- const standardTextareaId = useId('standard');
- const disabledTextareaId = useId('disabled');
- const nonResizableTextareaId = useId('nonResizable');
-
- return (
- <>
-
- Standard
-
-
-
-
- Disabled
-
-
-
-
- Non-resizable
-
-
- >
- );
-};
-```
-
-## Props Mapping
-
-This table maps `TextField` v8 props to the `Textarea` v9 equivalent.
-
-| v0 | v9 | Notes |
-| -------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------- |
-| `ariaLabel` | aria-label | |
-| `autoAdjustHeight` | n/a | Auto-resize will be added in the future. See spec for more information |
-| `className` | `className` | To use a custom className for the container use as follows: `` |
-| `autoComplete` | `autoComplete` | |
-| `borderless` | `appearance` | Equivalent `appearance` could be either `filledLighter` or `filledDarker` |
-| `canRevealPassword` | n/a | |
-| `className` | `className` | |
-| `componentRef` | ref | |
-| `defaultValue` | `defaultValue` | Mutually exclusive with `value` |
-| `deferredValidationTime` | n/a | |
-| `description` | n/a | |
-| `disabled` | `disabled` | |
-| `errorMessage` | n/a | |
-| `iconProps` | n/a | |
-| `inputClassName` | `className` | |
-| `invalid` | n/a | |
-| `label` | n/a | To add a label, use the `Label` component |
-| `multiline` | n/a | `Textarea` is multiline by default |
-| `onChange` | `onChange` | |
-| `onGetErrorMessage` | n/a | |
-| `onNotifyValidationResult` | n/a | |
-| `onRenderDescription` | n/a | |
-| `onRenderInput` | n/a | |
-| `onRenderLabel` | n/a | |
-| `onRenderPrefix` | n/a | |
-| `onRenderSuffix` | n/a | |
-| `prefix` | n/a | |
-| `readOnly` | `readonly` | This is handled by native component |
-| `resizable` | `resize` | |
-| `revealPasswordAriaLabel` | n/a | |
-| `styles` | `className` | |
-| `suffix` | n/a | |
-| `theme` | n/a | use `FluentProvider` to customize themes |
-| `underlined` | n/a | |
-| `validateOnFocusIn` | n/a | |
-| `validateOnFocusOut` | n/a | |
-| `validateOnLoad` | n/a | |
-| `value` | `value` | Mutually exclusive with `defaultValue` |
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Troubleshooting.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Troubleshooting.stories.mdx
deleted file mode 100644
index 6478453c058e44..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/FromV8/Troubleshooting.stories.mdx
+++ /dev/null
@@ -1,37 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-## "I tried using the new components but there does not seem to be any styling applied to them. Am I doing something wrong?"
-
-Components in version 8 could be used in isolation and still retain their default styling.
-For components to be styled in version 9, they must be wrapped with `FluentProvider` with a theme passed to it.
-
-We recommend placing the `FluentProvider` at the root of your app so that everything gets styled appropriately. The theme to use if you are coming from version 8 is `webLightTheme`.
-
-```jsx
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { FluentProvider, webLightTheme } from '@fluentui/react-components';
-
-import App from './App';
-
-ReactDOM.render(
-
-
- ,
- document.getElementById('root'),
-);
-```
-
-## "I managed to get the theme working but the components look different than they did previously, why is that?"
-
-We are modernizing our components in version 9 to adhere to the latest guidelines in the Fluent Design Language. That is the reason for any visual differences you might notice.
-
-## "What if I want to override a component's styles? Say, if I want to make them look like they did before? It seems like the styles prop does not exist anymore!"
-
-The styling story in version 9 is very different to what existed in version 8. For one, we are moving away from providing a `styles` prop and are mostly focusing of providing styling via the `className` prop (if you are worried about how could you style every piece of a component via `className`, do not fret and keep reading).
-
-We are also moving away from `mergeStyles` in favor of `makeStyles` from [`@griffel/react`](https://github.com/microsoft/griffel), a new in-house CSS-in-JS solution that allows for things like atomic classes and build-time optimization of styles.
-
-If you want to learn more, read our [guide on how to style components](?path=/story/concepts-developer-styling-components--page).
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/Overview.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/Overview.stories.mdx
deleted file mode 100644
index 20dbac3a0ed96b..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/Overview.stories.mdx
+++ /dev/null
@@ -1,66 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Upgrading from v8 or v0 to v9
-
-If you or your team are currently using version 8 of `@fluentui/react` or version 0.x of `@fluentui/react-northstar` and are thinking of upgrading to version 9
-then we would first like to **_thank you_** for making the jump and tell you how excited we are for you to experience all the improvements and features we have been working on.
-
-There are several things to keep in mind when upgrading, so we have created these uprade guide topics explaining:
-
-- the new concepts you will encounter and how they map to concepts in previous versions
-- things to consider when planning upgrade work
-- detailed guidance on upgrading components
-- examples and helper code to make upgrading easier
-
-We highly recommend reading through the v9 concepts for developers and the component documentation.
-Knowing how v9 works will provide needed context for upgrading.
-
-## Why should I upgrade from v8 or v0 to v9?
-
-Fluent UI React v9 provides significant improvements to components over both v8 and v0.
-
-Some reasons to upgrade to v9:
-
-- New and improved visual styling, rendering performance, and accessibility
-- Easier to use and more consistent component props
-- Build-time CSS-in-JS
-- Component customization using slots
-- Design token language with an improved theme provider
-- Component composition and re-use leveraging React hooks
-- Reduced bundle size with tree shaking
-
-## Do I have to upgrade all at once?
-
-Absolutely not! **You can upgrade incrementally**.
-
-Fluent UI v9 was built as separate libraries with the intention of support incremental adoption of v9 components alongside v8 and v0 components.
-
-## What if I'm on v7 right now?
-
-We recommend first upgrading v7 to v8. The upgrade is mostly fixing a few breaking changes and replacing some deprecated components or props with newer versions.
-
-## What is available in v9?
-
-Version 9 is a "converged" library built from the ground-up that addresses many of the concerns and issues that plagued version 8.
-However, this approach means that the intial number of version 9 components is fewer than existed in version 8.
-Some components have also been renamed and a couple of them have been retired.
-
-At the time of this writing, v9 has an initial set of components shipped as a release candidate.
-There are also some components in preview that are more likely to change than the release candidate components.
-However, **all published components are production ready**.
-
-The v9 RC provides the following v8 equivalents: Avatar (previously Persona), Buttons, Divider, Image, Link, Portal and Popover (previously Layer/Overlay), Text, and Tooltip.
-There are also new components: Accordion, Badges, and Menu.
-
-See the [Component Mapping](/docs/concepts-upgrading-from-v8-component-mapping--page) for a complete list.
-
-The v9 RC provides the following v0 equivalents: Accordion, Avatar, Badge (previously Status), Buttons, Divider, Image, Menu, Portal and Popover (previously Popup), Text, and Tooltip.
-
-## How much effort is required?
-
-We won't sugarcoat it; upgrading from v8 to v9 is more involved than the previous v7 to v8 upgrade.
-There are breaking changes, component differences, and paradigm shifts.
-
-The good news is that you can upgrade incrementally and take it one step at a time.
diff --git a/apps/public-docsite-v9/src/Concepts/Upgrade/Planning.stories.mdx b/apps/public-docsite-v9/src/Concepts/Upgrade/Planning.stories.mdx
deleted file mode 100644
index c51f5d3a8ee329..00000000000000
--- a/apps/public-docsite-v9/src/Concepts/Upgrade/Planning.stories.mdx
+++ /dev/null
@@ -1,186 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Planning your journey
-
-As mentioned before, Fluent UI React v9 was designed to allow you to incrementally upgrade.
-You have a lot of flexibility on how you approach, plan, and execute moving to v9.
-
-This part of the guide will help you assess your project, choose your approach,
-and plan out an iterative cycle for a successful upgrade.
-
-## Assessing your application
-
-How your application uses Fluent will influence your approach.
-Scan over your codebase and try to answer the following questions:
-
-1. What Fluent components does your application use?
-2. For each component, how many times is each component used (i.e. usage instances)?
-3. Is most usage basic or advanced?
-
-Basic usage means you use the component with minimal customization.
-You pass typical props and bind data from your components or application state.
-
-```tsx
-
- Start upgrade to version {version}
-
-```
-
-Advanced usage includes things like passing complex custom styles objects, callbacks for custom rendering, using refs to make imperative calls, and complex data binding.
-
-## Considerations
-
-There are lots of ways to upgrade. Here are are some different options to consider.
-
-### Incremental or All-at-once
-
-_Incremental_: upgrade a few components and ship, often by flighting the upgraded components to a subset of users.
-The benefits of the incremental approach are that you get v9 improvements sooner, find issues earlier,
-and can iteratively get faster upgrading components.
-
-Since v9 does not have all the components offered in previous versions yet, incrementally upgrading allows you to gradually introduce v9
-side-by-side with v8 or v0.
-You can more closely monitor the changes to bundle size and performance improvements with a gradual approach.
-
-_All-at-once_: upgrade every v8/v0 component to their v9 equivalent.
-You can still flight the upgraded experience to a subset of users.
-You get the benefit that you could A/B route to different web application servers when flighting and keep the
-previous untouched version running independent of the upgraded version.
-
-You also get the maximum benefits of v9 including a new consistent style,
-tree-shaking out v8 components from the bundles, build-time CSS optimizations, and render performance improvements.
-
-### Horizontal or Vertical
-
-_Horizontal_: upgrading one component across your entire application.
-For example, upgrading Button from previous version to v9 everywhere.
-This has the benefit that your code will end up only depending on v9 Button and the v8 Button won't be included in the downloaded bundle.
-Your buttons will look and behave the same across your app.
-
-_Vertical_: upgrading all the components in one part of your application.
-For example, upgrading Button, Divider, Persona, and Link on a contact status side bar.
-This has the benefit that you can upgrade one part of your application in isolation leaving the rest of the app unaffected.
-You can choose a non-critical part of your application to reduce risk of app-wide issues.
-It makes it easier to trace any issues caused by upgrade.
-Vertical may allow you to find integration issues earlier as you are using multiple new components.
-
-You can also choose to upgrade one component in one part of your application.
-You lose some of the benefits of each individual approach, but can try things out more slowly.
-
-### Deep or Shallow
-
-_Deep_: upgrading components that are core to your application and re-used in many places.
-For example, upgrading a main toolbar to use the v9 Button and Menu components.
-You get the benefits of v9 across the entire application.
-You will get more usage of the upgraded components and can gather feedback earlier.
-
-_Shallow_: upgrading components that appear only in one non-critical place in your application.
-For example, upgrading an optional edit profile screen.
-You get the benefit of limiting risk, but decrease the usage and may not find issues right away.
-
-### New v9 or Old v8 style
-
-If you have v8 and v9 components side-by-side, you may want to avoid noticable style differences.
-If you need style consistency, apply theming and style customizations to make v8 components look like v9 components,
-or make v9 components look like v8 components.
-
-You may decide you can live with the style differences for a period of time.
-Most are small changes that are only noticable when v8 and v9 versions of the same component are next to each other in the UI.
-
-### New v9 or Old v0 style
-
-v0 will to some extent gradually converge its appearance. However, you might still need to use style overrides in some cases to achieve consistency.
-
-### Manual changes, code mod scripts, or shims
-
-_Manual_: update each usage of Fluent React by hand.
-This is the brute force approach to upgrade.
-It may be the best option especially for smaller projects.
-You may have a lot of variety in how you use components that preclude a search/replace or automated option.
-You may also have an existing wrapper around a component that allows you to upgrade at a single code location.
-The benefits include you can call v9 components as intended, the opportunity to simplify and improve
-how your code uses Fluent, and you can make incremental check-ins ensuring existing tests pass.
-
-_Code mod_: author a script to update multiple locations in your code at once.
-You may be able to leverage existing scripts from previous upgrades, from others who have upgraded, or from the Fluent React team.
-If your codebase is very consistent in how it uses Fluent, this option can save a lot of extra effort over manual upgrade.
-You can have code mods that add flighting logic around usage to have both v8/v0 and v9 available.
-The downside is that if your usage is complex or highly varied, authoring a code mod that covers all cases may be impractical.
-
-_Shims_: author or use a component that takes v8/v0 props and renders a v9 component.
-Shims can be a good option to get v9 components in your app if you don't have the time to update all the places you use the component.
-You can leave your props creation code alone and pass it to the shim.
-It is easy to search/replace your code to update to using the shim.
-You can also do your flighting logic within the shim itself.
-One downside is that your shim will retain the dependency on v8/v0 and prevent removing it from your bundle.
-Also, there are cases with custom renderprops callbacks that cannot be supported by a shim because the rendered
-content is not compatible with the v9 component.
-
-## Recommendations
-
-### Small projects
-
-If you have a small project and can commit the effort, we recommend upgrading everything and modifying the code directly.
-
-This gives you the maximum benefit of rendering performance, build time style bundling, and tree-shaking out v8 components that are no longer used. You'll be able to refactor any advanced usage cases in the newer v9 paradigms and end up with cleaner code.
-
-You should still consider flighting the upgraded experience, but you can A/B the entire application rather than if/then flighting per component in the code.
-
-### Medium or larger with advanced usage
-
-If you have a medium to large project, significant advanced usage of components, and limited resources or time constraints, we recommend leveraging the shim components.
-
-You can replace all the usages of a component like Button with ShimButton and get a v9 Button rendered. You get the benefits of v9 components and can crawl over the code to update to use v9 directly at your leisure.
-
-Warning! Shims aren't free. You'll still need to modify code to upgrade custom styles, renderprops callbacks, and ref usage. Shims take a dependency on the v8 types and v9 components, so tree-shaking may be limited. Shims introduce mapping logic (although it shouldn't signficantly impact render performance).
-
-### Medium or larger apps with basic usage
-
-If you have a large project with hundreds to thousands of Fluent component usages, we strongly recommend upgrading horizontally. The Button component is a typical choice to upgrade across the application.
-
-If your usage is mostly basic, we recommend authoring a code-mod to handle what would be too tedious with search & replace. Consider running code-mods to handle most cases and then do some manual upgrade work to cover the rest.
-
-### Large with advanced usage
-
-If you have a large projects with thousands of Fluent component usages, a lot of advanced usage, and several resource constraints, we recommend creating an application-specific shim and permanent abstraction around the Fluent component.
-
-A permanent abstraction will give you a place to adapt for compatibility as you move from v8 props to v9 props. It will also be valuable with future upgrades. v9 has a new hook-based composition model you can leverage to create a shim without introducing the extra virtual DOM elements of a wrapper. You can also introduce the flighting logic within your shim to be able to toggle the upgrade on/off.
-
-You can consider code-mods to upgrade the more basic usage, but will likely find too much variance to handle all the cases across your code.
-
-We recommend you upgrade horizontally, but you may want to upgrade horizontally within one portion of your application at a time. For example, all the buttons in a toolbar or on a related set of pages in your application. This lets you upgrade in stages without destabilizing then entire application.
-
-If you have a subsystem of your application that is independent and similar to a small/medium application, you may choose to upgrade it vertically. You can have a cohesive improvement to one part of the application and flight it independent of the rest of the application.
-
-## Creating a plan
-
-We strongly recommend using a work item tracking system or Excel spreadsheet to plan out your upgrade tasks.
-
-### A plan for a plan
-
-You should create and complete a set of planning tasks:
-
-1. Measure the current bundle size, render performance, and other metrics for later comparison.
-2. Determine the mechanism for how you will flight the upgraded components to a subset of users.
-3. Decide on any pre-upgrade improvements that you will make first to reduce upgrade effort.
-4. Determine what other constraints you have - maximum bundle size, performance bars, allowed style inconsistencies, etc.
-5. Assess the application and choose your approach.
-6. Choose a target deadline or milestone date for each phase of upgrade.
-
-### Getting started tasks
-
-You should plan a set of getting started tasks for upgrading one component in one location.
-
-1. Update project to reference Fluent React v9.
-2. Add FluentProvider with a theme to the root of the app
-3. Add any v9 component to the UI, verify it renders as expected, then remove it.
-4. Update a single usage location to use the v9 component. Consider recording how long it takes.
-
-### Iterative planning
-
-Plan a task or set of tasks to be able to 'rinse and repeat' each usage upgrade.
-
-- The type of tasks and their granularity will vary depending on your approach.
-- After upgrading some instances, review how long each took and plan out the next set of tasks.
diff --git a/apps/public-docsite-v9/src/shims/ButtonShim.tsx b/apps/public-docsite-v9/src/shims/ButtonShim.tsx
deleted file mode 100644
index 6f3f011c42098a..00000000000000
--- a/apps/public-docsite-v9/src/shims/ButtonShim.tsx
+++ /dev/null
@@ -1,174 +0,0 @@
-import * as React from 'react';
-
-import { IBaseButtonProps, IButtonProps, Icon } from '@fluentui/react';
-
-import {
- Button,
- ButtonProps,
- CompoundButton,
- CompoundButtonProps,
- Menu,
- MenuButton,
- MenuButtonProps,
- MenuList,
- MenuPopover,
- MenuTrigger,
- ToggleButton,
- ToggleButtonProps,
-} from '@fluentui/react-components';
-import { MenuItemShim, shimMenuProps } from './MenuShim';
-
-const shimButtonProps = (props: IBaseButtonProps & React.RefAttributes): ButtonProps => {
- //TODO: Icon shim. This still renders the v8 icon.
- const icon = props.onRenderIcon ? (
- props.onRenderIcon(props)
- ) : props.iconProps ? (
-
- ) : undefined;
-
- const variantClassName = props.variantClassName ?? props.primary ? 'ms-Button--primary' : 'ms-Button--default';
- const className = [props.baseClassName, variantClassName, props.className].filter(Boolean).join(' ');
-
- return {
- // spread incoming props to propagate HTML properties not part of IBaseButtonProps
- ...props,
- appearance: props.primary ? 'primary' : undefined,
- className: className,
- disabled: props.disabled,
- disabledFocusable: props.allowDisabledFocus,
- 'aria-hidden': props.ariaHidden,
- 'aria-label': props.ariaLabel,
- icon,
- key: props.key || props.uniqueId,
- children: props.onRenderChildren
- ? props.onRenderChildren(props)
- : props.onRenderText
- ? props.onRenderText(props)
- : props.text || props.children,
- } as ButtonProps;
-};
-
-export const ButtonShim: React.ForwardRefExoticComponent<
- IBaseButtonProps & React.RefAttributes
-> = React.forwardRef((props, _ref) => {
- const shimProps = shimButtonProps(props);
-
- if (props.toggle) {
- return {props.children} ;
- }
- if (props.secondaryText || props.onRenderDescription?.(props)) {
- return ;
- }
-
- return )} {...shimProps} />;
-});
-
-/**
- * Shims a v8 DefaultButton to render a v9 Button
- */
-export const DefaultButtonShim: React.ForwardRefExoticComponent<
- IButtonProps & React.RefAttributes
-> = React.forwardRef((props, _ref) => {
- return ;
-});
-
-/**
- * Shims a v8 ActionButton to render a v9 Button
- */
-export const ActionButtonShim: React.ForwardRefExoticComponent<
- IButtonProps & React.RefAttributes
-> = React.forwardRef((props, _ref) => {
- const variantProps = {
- ...props,
- variantClassName: 'ms-Button--action ms-Button--command',
- };
-
- const shimProps = shimButtonProps(variantProps);
-
- return )} {...shimProps} appearance="transparent" />;
-});
-
-/**
- * Shims v8 CommandButtonShim to render a v9 Button
- */
-export const CommandButtonShim = ActionButtonShim;
-
-/**
- * Shims v8 CompoundButton to render a v9 CompoundButton
- */
-export const CompoundButtonShim: React.ForwardRefExoticComponent<
- IButtonProps & React.RefAttributes
-> = React.forwardRef((props, _ref) => {
- const variantProps = {
- ...props,
- variantClassName: props.primary ? 'ms-Button--compoundPrimary' : 'ms-Button--compound',
- };
-
- const shimProps: CompoundButtonProps = {
- ...shimButtonProps(variantProps),
- secondaryContent: props.secondaryText || props.onRenderDescription?.(props),
- };
-
- return )} {...shimProps} />;
-});
-
-export const MenuButtonShim: React.ForwardRefExoticComponent<
- IButtonProps & React.RefAttributes
-> = React.forwardRef((props, _ref) => {
- const variantProps = {
- ...props,
- variantClassName: props.primary ? 'ms-Button--primary' : 'ms-Button--default',
- };
-
- const shimProps: MenuButtonProps = {
- ...shimButtonProps(variantProps),
- };
-
- const shimmedMenuProps = props.menuProps ? shimMenuProps(props.menuProps) : {};
-
- return (
-
-
-
-
-
-
- {props.menuProps?.items.map(item => (
- // key is added through item spread
- // eslint-disable-next-line react/jsx-key
-
- ))}
-
-
-
- );
-});
-
-/**
- * Shims v8 PrimaryButton to render a v9 Button
- */
-export const PrimaryButtonShim: React.ForwardRefExoticComponent<
- IButtonProps & React.RefAttributes
-> = React.forwardRef((props, _ref) => {
- return ;
-});
-
-/**
- * Shims v8 ToggleButton to render a v9 ToggleButton
- */
-export const ToggleButtonShim: React.ForwardRefExoticComponent<
- IButtonProps & React.RefAttributes
-> = React.forwardRef((props, _ref) => {
- const variantProps = {
- ...props,
- variantClassName: props.primary ? 'ms-Button--compoundPrimary' : 'ms-Button--compound',
- };
-
- const shimProps: ToggleButtonProps = {
- ...shimButtonProps(variantProps),
- checked: props.checked,
- defaultChecked: props.defaultChecked,
- };
-
- return )} {...shimProps} />;
-});
diff --git a/apps/public-docsite-v9/src/shims/MenuShim.tsx b/apps/public-docsite-v9/src/shims/MenuShim.tsx
deleted file mode 100644
index 64f2a6272955a9..00000000000000
--- a/apps/public-docsite-v9/src/shims/MenuShim.tsx
+++ /dev/null
@@ -1,105 +0,0 @@
-import * as React from 'react';
-
-import { ContextualMenuItemType, Icon, IContextualMenuItem, IContextualMenuProps } from '@fluentui/react';
-import {
- MenuItem,
- MenuDivider,
- MenuItemProps,
- MenuGroup,
- MenuGroupHeader,
- MenuGroupHeaderProps,
- MenuTrigger,
- Menu,
- MenuList,
- MenuPopover,
- MenuItemCheckbox,
- MenuItemCheckboxProps,
- MenuProps,
-} from '@fluentui/react-components';
-
-export const shimMenuProps = (props: IContextualMenuProps): Partial => {
- return {
- hasIcons: props?.items.some(i => i.iconProps),
- hasCheckmarks: props?.items.some(i => i.canCheck || i.checked),
- };
-};
-
-export const shimMenuItemProps = (props: IContextualMenuItem): MenuItemProps => {
- //TODO: Handle menuItem.onRenderIcon
- const icon = props.iconProps ? : undefined;
-
- return {
- ...props,
- 'aria-label': props.ariaLabel,
- children: props.text,
- icon,
- secondaryContent: props.secondaryText,
- } as MenuItemProps;
-};
-
-const shimMenuItemCheckboxProps = (props: IContextualMenuItem): MenuItemCheckboxProps => {
- return {
- ...shimMenuItemProps(props),
- name: props.name || 'name',
- value: props.value || 'value',
- };
-};
-
-const shimMenuHeaderProps = (props: IContextualMenuItem): MenuGroupHeaderProps => {
- return {
- children: props.sectionProps?.title,
- };
-};
-
-export const MenuItemShim = (props: IContextualMenuItem) => {
- if (props.itemType === ContextualMenuItemType.Divider) {
- const shimProps = shimMenuItemProps(props);
- return ;
- }
-
- if (props.itemType === ContextualMenuItemType.Section) {
- const shimProps = shimMenuHeaderProps(props);
- return (
-
- {shimProps.children}
- {/* //TODO: sectionProps handling */}
- {props.subMenuProps?.items.map(item => (
- // key is added through item spread
- // eslint-disable-next-line react/jsx-key
-
- ))}
-
- );
- }
-
- if (props.canCheck) {
- const shimProps = shimMenuItemCheckboxProps(props);
- return ;
- }
-
- // Nested Menu to handle submenus
- if (props.subMenuProps?.items && props.subMenuProps.items.length > 0) {
- const shimmedMenuProps = shimMenuProps(props.subMenuProps);
- const shimmedItemProps = shimMenuItemProps(props);
-
- return (
-
-
-
-
-
-
- {props.subMenuProps.items.map(item => (
- // key is added through item spread
- // eslint-disable-next-line react/jsx-key
-
- ))}
-
-
-
- );
- }
-
- const shimProps = shimMenuItemProps(props);
- return ;
-};
diff --git a/apps/public-docsite-v9/src/shims/StackShim/index.ts b/apps/public-docsite-v9/src/shims/StackShim/index.ts
deleted file mode 100644
index 7f72af9aa256df..00000000000000
--- a/apps/public-docsite-v9/src/shims/StackShim/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './StackShim';
-export * from './StackItemShim';
diff --git a/apps/public-docsite-v9/src/shims/ThemeShim/v9ThemeShim.ts b/apps/public-docsite-v9/src/shims/ThemeShim/v9ThemeShim.ts
index f4a66407d4d09a..027d4879b2d1d1 100644
--- a/apps/public-docsite-v9/src/shims/ThemeShim/v9ThemeShim.ts
+++ b/apps/public-docsite-v9/src/shims/ThemeShim/v9ThemeShim.ts
@@ -58,6 +58,7 @@ const mapAliasColors = (palette: IPalette, inverted: boolean): ColorTokens => {
colorNeutralForegroundInvertedLinkHover: palette.white,
colorNeutralForegroundInvertedLinkPressed: palette.white,
colorNeutralForegroundInvertedLinkSelected: palette.white,
+ colorNeutralForegroundInverted2: palette.white,
colorBrandForegroundInverted: palette.themeSecondary,
colorBrandForegroundInvertedHover: palette.themeTertiary,
colorBrandForegroundInvertedPressed: palette.themeSecondary,
diff --git a/apps/public-docsite-v9/src/stories/StackShim.stories.tsx b/apps/public-docsite-v9/src/stories/StackShim.stories.tsx
deleted file mode 100644
index 16a21d7de597a5..00000000000000
--- a/apps/public-docsite-v9/src/stories/StackShim.stories.tsx
+++ /dev/null
@@ -1,221 +0,0 @@
-import * as React from 'react';
-import { Meta } from '@storybook/react';
-import { Button, makeStyles } from '@fluentui/react-components';
-import { Checkbox, Dropdown, IDropdownOption, DropdownMenuItemType, Stack, TextField } from '@fluentui/react';
-import { StackShim, StackItemShim } from '../shims/StackShim/index';
-
-const horizontalAlignOptions: IDropdownOption[] = [
- {
- key: 'HorizontalAlignOptions',
- text: 'Horizontal Align Options',
- itemType: DropdownMenuItemType.Header,
- },
- { key: 'horizontalAlign-baseline', text: 'baseline' },
- { key: 'horizontalAlign-center', text: 'center' },
- { key: 'horizontalAlign-start', text: 'start' },
- { key: 'horizontalAlign-end', text: 'end' },
- { key: 'horizontalAlign-stretch', text: 'stretch' },
- { key: 'horizontalAlign-space-between', text: 'space-between' },
- { key: 'horizontalAlign-space-around', text: 'space-around' },
- { key: 'horizontalAlign-space-evenly', text: 'space-evenly' },
-];
-
-const verticalAlignOptions: IDropdownOption[] = [
- {
- key: 'VerticalAlignOptions',
- text: 'VerticalAlignOptions Align Options',
- itemType: DropdownMenuItemType.Header,
- },
- { key: 'verticalAlign-baseline', text: 'baseline' },
- { key: 'verticalAlign-center', text: 'center' },
- { key: 'verticalAlign-start', text: 'start' },
- { key: 'verticalAlign-end', text: 'end' },
- { key: 'verticalAlign-stretch', text: 'stretch' },
- { key: 'verticalAlign-space-between', text: 'space-between' },
- { key: 'verticalAlign-space-around', text: 'space-around' },
- { key: 'verticalAlign-space-evenly', text: 'space-evenly' },
-];
-
-const styles = {
- root: {
- maxWidth: '200px',
- },
-};
-
-const useCustomStyles = makeStyles({
- stack: {
- backgroundColor: 'pink',
- height: '200px',
- width: '450px',
- },
- stackItem: {
- backgroundColor: 'lightblue',
- },
-});
-
-export const StackShimStory = () => {
- const [state, setState] = React.useState({
- verticalFill: false,
- horizontal: false,
- reversed: false,
- wrap: false,
- disableShrink: false,
-
- horizontalAlign: undefined,
- verticalAlign: undefined,
- grow: false,
- });
- const [childrenGapToken, setChildrenGapToken] = React.useState('10');
- const [paddingToken, setPaddingToken] = React.useState('10px');
-
- const onCheckboxChange = (ev: React.ChangeEvent, checked?: boolean) => {
- const { name } = ev.target;
-
- setState({ ...state, [name]: checked });
- };
-
- const onDropdownChange = (ev: React.FormEvent, option?: IDropdownOption) => {
- const name = option!.key.toString().split('-')[0];
- const value = option!.text;
- setState({
- ...state,
- [name]: value,
- });
- };
-
- const onChildrenGapTokenChange = (ev: React.FormEvent, newValue?: string) => {
- setChildrenGapToken(newValue!);
- };
-
- const onPaddingTokenChange = (ev: React.FormEvent, newValue?: string) => {
- setPaddingToken(newValue!);
- };
- const shimStyles = useCustomStyles();
- const stackShimStyles = shimStyles.stack;
- const stackStyles = {
- root: { backgroundColor: 'pink', height: '200px', width: '450px' },
- };
- const stackItemStyles = { root: { backgroundColor: 'lightblue' } };
- const stackItemShimStyles = shimStyles.stackItem;
- return (
-
- Stack Playground
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
v8
-
- Stack Item
-
- Stack Item Self Aligned
-
-
- Stack Item Grow
-
-
-
-
-
-
-
StackShim
-
- Stack Item
-
- Stack Item Self Aligned
-
-
- Stack Item Grow
-
-
-
-
-
-
-
- );
-};
-
-export default {
- title: 'Concepts/Upgrading/from v8/Shims/Stack',
- component: Button,
- decorators: [
- Story => (
-
-
-
- ),
- ],
-} as Meta;
diff --git a/apps/public-docsite/CHANGELOG.json b/apps/public-docsite/CHANGELOG.json
index 9d93157ae57786..83fa0eaa1f823c 100644
--- a/apps/public-docsite/CHANGELOG.json
+++ b/apps/public-docsite/CHANGELOG.json
@@ -1,6 +1,300 @@
{
"name": "@fluentui/public-docsite",
"entries": [
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/public-docsite_v8.2.41",
+ "version": "8.2.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.3",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-experiments to v8.13.3",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/theme-samples to v8.7.3",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.7.3",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/public-docsite_v8.2.41",
+ "version": "8.2.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.2",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-experiments to v8.13.2",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/theme-samples to v8.7.2",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.7.2",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/public-docsite_v8.2.41",
+ "version": "8.2.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-experiments to v8.13.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/theme-samples to v8.7.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.7.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/public-docsite_v8.2.41",
+ "version": "8.2.41",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-experiments to v8.13.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/theme-samples to v8.7.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.7.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/public-docsite_v8.2.41",
+ "version": "8.2.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.36",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-experiments to v8.12.34",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/theme-samples to v8.6.35",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.6.35",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 12 Sep 2022 07:39:53 GMT",
+ "tag": "@fluentui/public-docsite_v8.2.41",
+ "version": "8.2.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/public-docsite-setup to v0.3.12",
+ "commit": "7f8bad094dadcdb671d5746848e96b5bd4b5791a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.35",
+ "commit": "7f8bad094dadcdb671d5746848e96b5bd4b5791a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/public-docsite_v8.2.41",
+ "version": "8.2.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.34",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-experiments to v8.12.33",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/theme-samples to v8.6.34",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.6.34",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/public-docsite_v8.2.41",
+ "version": "8.2.41",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.33",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-experiments to v8.12.32",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/theme-samples to v8.6.33",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/public-docsite",
+ "comment": "Bump @fluentui/react-monaco-editor to v1.6.33",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/public-docsite_v8.2.41",
diff --git a/apps/public-docsite/CHANGELOG.md b/apps/public-docsite/CHANGELOG.md
index 06b144a16b4104..1d50cdcd0f1bf2 100644
--- a/apps/public-docsite/CHANGELOG.md
+++ b/apps/public-docsite/CHANGELOG.md
@@ -1,11 +1,112 @@
# Change Log - @fluentui/public-docsite
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Thu, 22 Sep 2022 07:43:45 GMT and should not be manually modified.
## [8.2.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite_v8.2.41)
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite_v8.2.41..@fluentui/public-docsite_v8.2.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.3 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+- Bump @fluentui/react-experiments to v8.13.3 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+- Bump @fluentui/theme-samples to v8.7.3 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.7.3 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [8.2.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite_v8.2.41)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite_v8.2.41..@fluentui/public-docsite_v8.2.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.2 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/react-experiments to v8.13.2 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/theme-samples to v8.7.2 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.7.2 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [8.2.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite_v8.2.41)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite_v8.2.41..@fluentui/public-docsite_v8.2.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/react-experiments to v8.13.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/theme-samples to v8.7.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.7.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [8.2.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite_v8.2.41)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite_v8.2.41..@fluentui/public-docsite_v8.2.41)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/react-experiments to v8.13.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/theme-samples to v8.7.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.7.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [8.2.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite_v8.2.41)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite_v8.2.41..@fluentui/public-docsite_v8.2.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+- Bump @fluentui/react-docsite-components to v8.9.36 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+- Bump @fluentui/react-experiments to v8.12.34 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+- Bump @fluentui/theme-samples to v8.6.35 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.6.35 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [8.2.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite_v8.2.41)
+
+Mon, 12 Sep 2022 07:39:53 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite_v8.2.41..@fluentui/public-docsite_v8.2.41)
+
+### Patches
+
+- Bump @fluentui/public-docsite-setup to v0.3.12 ([PR #24746](https://github.com/microsoft/fluentui/pull/24746) by beachball)
+- Bump @fluentui/react-docsite-components to v8.9.35 ([PR #24746](https://github.com/microsoft/fluentui/pull/24746) by beachball)
+
+## [8.2.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite_v8.2.41)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite_v8.2.41..@fluentui/public-docsite_v8.2.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+- Bump @fluentui/react-docsite-components to v8.9.34 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+- Bump @fluentui/react-experiments to v8.12.33 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+- Bump @fluentui/theme-samples to v8.6.34 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.6.34 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [8.2.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite_v8.2.41)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite_v8.2.41..@fluentui/public-docsite_v8.2.41)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+- Bump @fluentui/react-docsite-components to v8.9.33 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+- Bump @fluentui/react-experiments to v8.12.32 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+- Bump @fluentui/theme-samples to v8.6.33 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+- Bump @fluentui/react-monaco-editor to v1.6.33 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
+## [8.2.41](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite_v8.2.41)
+
Mon, 05 Sep 2022 07:38:30 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite_v8.2.41..@fluentui/public-docsite_v8.2.41)
diff --git a/apps/public-docsite/package.json b/apps/public-docsite/package.json
index 6f6c6deeb2d54e..da2b5faeab5cef 100644
--- a/apps/public-docsite/package.json
+++ b/apps/public-docsite/package.json
@@ -23,27 +23,27 @@
},
"license": "MIT",
"devDependencies": {
- "@fluentui/common-styles": "^1.2.9",
+ "@fluentui/common-styles": "^1.2.11",
"@fluentui/eslint-plugin": "*",
- "@fluentui/react-monaco-editor": "^1.6.32",
+ "@fluentui/react-monaco-editor": "^1.7.17",
"@fluentui/scripts": "^1.0.0",
"write-file-webpack-plugin": "^4.1.0"
},
"dependencies": {
- "@fluentui/font-icons-mdl2": "^8.4.13",
+ "@fluentui/font-icons-mdl2": "^8.5.2",
"@fluentui/public-docsite-resources": "^8.1.41",
- "@fluentui/public-docsite-setup": "^0.3.11",
- "@fluentui/react": "^8.94.1",
- "@fluentui/react-docsite-components": "^8.9.32",
+ "@fluentui/public-docsite-setup": "^0.3.12",
+ "@fluentui/react": "^8.98.8",
+ "@fluentui/react-docsite-components": "^8.10.17",
"@fluentui/react-examples": "^8.34.4",
- "@fluentui/react-experiments": "^8.12.31",
- "@fluentui/react-file-type-icons": "^8.7.8",
- "@fluentui/react-icons-mdl2": "^1.3.22",
- "@fluentui/react-icons-mdl2-branded": "^1.2.23",
+ "@fluentui/react-experiments": "^8.14.12",
+ "@fluentui/react-file-type-icons": "^8.8.0",
+ "@fluentui/react-icons-mdl2": "^1.3.25",
+ "@fluentui/react-icons-mdl2-branded": "^1.2.26",
"@fluentui/set-version": "^8.2.2",
- "@fluentui/theme": "^2.6.16",
- "@fluentui/theme-samples": "^8.6.32",
- "@fluentui/utilities": "^8.13.1",
+ "@fluentui/theme": "^2.6.17",
+ "@fluentui/theme-samples": "^8.7.17",
+ "@fluentui/utilities": "^8.13.2",
"@microsoft/load-themed-styles": "^1.10.26",
"office-ui-fabric-core": "^11.0.0",
"react": "17.0.2",
diff --git a/apps/public-docsite/src/SiteDefinition/SiteDefinition.pages/Controls/web.tsx b/apps/public-docsite/src/SiteDefinition/SiteDefinition.pages/Controls/web.tsx
index c02e25c5952b00..eb6e827c923ac1 100644
--- a/apps/public-docsite/src/SiteDefinition/SiteDefinition.pages/Controls/web.tsx
+++ b/apps/public-docsite/src/SiteDefinition/SiteDefinition.pages/Controls/web.tsx
@@ -35,6 +35,7 @@ export const categories: { Other?: ICategory; [name: string]: ICategory } = {
DatePicker: {},
PeoplePicker: {},
SwatchColorPicker: {},
+ TimePicker: {},
},
'Items & Lists': {
List: { title: 'Basic List' },
diff --git a/apps/public-docsite/src/pages/Controls/TimePickerPage/TimePickerPage.doc.ts b/apps/public-docsite/src/pages/Controls/TimePickerPage/TimePickerPage.doc.ts
new file mode 100644
index 00000000000000..b5b62a6f35536e
--- /dev/null
+++ b/apps/public-docsite/src/pages/Controls/TimePickerPage/TimePickerPage.doc.ts
@@ -0,0 +1,8 @@
+import { TFabricPlatformPageProps } from '../../../interfaces/Platforms';
+import { TimePickerPageProps as ExternalProps } from '@fluentui/react-examples/lib/react/TimePicker/TimePicker.doc';
+
+export const TimePickerPageProps: TFabricPlatformPageProps = {
+ web: {
+ ...(ExternalProps as any),
+ },
+};
diff --git a/apps/public-docsite/src/pages/Controls/TimePickerPage/TimePickerPage.tsx b/apps/public-docsite/src/pages/Controls/TimePickerPage/TimePickerPage.tsx
new file mode 100644
index 00000000000000..9d603c42e4e735
--- /dev/null
+++ b/apps/public-docsite/src/pages/Controls/TimePickerPage/TimePickerPage.tsx
@@ -0,0 +1,7 @@
+import * as React from 'react';
+import { ControlsAreaPage, IControlsPageProps } from '../ControlsAreaPage';
+import { TimePickerPageProps } from './TimePickerPage.doc';
+
+export const TimePickerPage: React.FunctionComponent = props => {
+ return ;
+};
diff --git a/apps/public-docsite/src/pages/HomePage/HomePage.base.tsx b/apps/public-docsite/src/pages/HomePage/HomePage.base.tsx
index d390e14f977a55..f2ff28c0990563 100644
--- a/apps/public-docsite/src/pages/HomePage/HomePage.base.tsx
+++ b/apps/public-docsite/src/pages/HomePage/HomePage.base.tsx
@@ -125,7 +125,7 @@ export class HomePageBase extends React.Component
-
+
Fluent{' '}
@@ -145,7 +145,7 @@ export class HomePageBase extends React.Component
-
+
diff --git a/apps/public-docsite/src/root.tsx b/apps/public-docsite/src/root.tsx
index e7a2c9250acc7b..4da3add87610e5 100644
--- a/apps/public-docsite/src/root.tsx
+++ b/apps/public-docsite/src/root.tsx
@@ -36,7 +36,7 @@ registerIcons({
},
});
-const skipToMain = document.querySelector('[href="#mainContent"]') as HTMLAnchorElement;
+const skipToMain = document.getElementById('uhfSkipToMain') as HTMLAnchorElement;
if (skipToMain) {
// This link points to #mainContent by default, which would be interpreted as a route in our app.
// Handle focusing the main content manually instead.
diff --git a/apps/public-docsite/src/styles/_base.scss b/apps/public-docsite/src/styles/_base.scss
index 1457e2b19a2f05..f5a8491bc0efb0 100644
--- a/apps/public-docsite/src/styles/_base.scss
+++ b/apps/public-docsite/src/styles/_base.scss
@@ -38,7 +38,7 @@
// Remove dotted outline added by MWF's main.css
body [contentEditable=true]:focus,
body [tabindex]:focus,
- body a[href]:focus,
+ a[href]:not(.c-uhff-link):focus, // Remove link focus outline from all links but the UHF ones
body area[href]:focus,
body button:focus,
body iframe:focus,
@@ -114,7 +114,7 @@
// and #flightPicker element which creates accessibility issues.
// Hide #socialMediaContainer element which holds the footer with social media links
// and #signInPrompt element which contains the sign in modal
- a.m-back-to-top,
+ [href="#mainContent"],
#flightPicker,
#socialMediaContainer,
#signInPrompt {
diff --git a/apps/react-18-tests-v8/CHANGELOG.json b/apps/react-18-tests-v8/CHANGELOG.json
index 6a44a51a336b06..c6cf426686e3fd 100644
--- a/apps/react-18-tests-v8/CHANGELOG.json
+++ b/apps/react-18-tests-v8/CHANGELOG.json
@@ -1,6 +1,111 @@
{
"name": "@fluentui/react-18-tests-v8",
"entries": [
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/react-18-tests-v8_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-18-tests-v8",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/react-18-tests-v8_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-18-tests-v8",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/react-18-tests-v8_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-18-tests-v8",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/react-18-tests-v8_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-18-tests-v8",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/react-18-tests-v8_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-18-tests-v8",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/react-18-tests-v8_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-18-tests-v8",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/react-18-tests-v8_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-18-tests-v8",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/react-18-tests-v8_v1.0.0",
diff --git a/apps/react-18-tests-v8/CHANGELOG.md b/apps/react-18-tests-v8/CHANGELOG.md
index 51fce7a4e2d323..425d007cb011f6 100644
--- a/apps/react-18-tests-v8/CHANGELOG.md
+++ b/apps/react-18-tests-v8/CHANGELOG.md
@@ -1,11 +1,74 @@
# Change Log - @fluentui/react-18-tests-v8
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Thu, 22 Sep 2022 07:43:45 GMT and should not be manually modified.
## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-18-tests-v8_v1.0.0)
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-18-tests-v8_v1.0.0..@fluentui/react-18-tests-v8_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-18-tests-v8_v1.0.0)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-18-tests-v8_v1.0.0..@fluentui/react-18-tests-v8_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-18-tests-v8_v1.0.0)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-18-tests-v8_v1.0.0..@fluentui/react-18-tests-v8_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-18-tests-v8_v1.0.0)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-18-tests-v8_v1.0.0..@fluentui/react-18-tests-v8_v1.0.0)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-18-tests-v8_v1.0.0)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-18-tests-v8_v1.0.0..@fluentui/react-18-tests-v8_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-18-tests-v8_v1.0.0)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-18-tests-v8_v1.0.0..@fluentui/react-18-tests-v8_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-18-tests-v8_v1.0.0)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-18-tests-v8_v1.0.0..@fluentui/react-18-tests-v8_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-18-tests-v8_v1.0.0)
+
Mon, 05 Sep 2022 07:38:30 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-18-tests-v8_v1.0.0..@fluentui/react-18-tests-v8_v1.0.0)
diff --git a/apps/react-18-tests-v8/package.json b/apps/react-18-tests-v8/package.json
index 74f90a79713694..e0259b0884df76 100644
--- a/apps/react-18-tests-v8/package.json
+++ b/apps/react-18-tests-v8/package.json
@@ -12,7 +12,8 @@
"lint": "just-scripts lint",
"test": "just-scripts test",
"just": "just-scripts",
- "start": "webpack-dev-server --mode=development --config=webpack.config.js"
+ "start": "webpack-dev-server --mode=development --config=webpack.config.js",
+ "type-check": "tsc -b tsconfig.json"
},
"devDependencies": {
"@fluentui/eslint-plugin": "*",
@@ -22,8 +23,8 @@
"swc-loader": "^0.2.3"
},
"dependencies": {
- "@fluentui/react": "8.94.1",
- "@fluentui/react-hooks": "8.6.11",
+ "@fluentui/react": "^8.98.8",
+ "@fluentui/react-hooks": "^8.6.12",
"react": "18.2.0",
"react-dom": "18.2.0",
"tslib": "^2.1.0"
diff --git a/apps/react-18-tests-v9/package.json b/apps/react-18-tests-v9/package.json
index cb22bede8c9bbe..c849788d703adc 100644
--- a/apps/react-18-tests-v9/package.json
+++ b/apps/react-18-tests-v9/package.json
@@ -21,9 +21,9 @@
"swc-loader": "^0.2.3"
},
"dependencies": {
- "@fluentui/react-button": "9.1.0",
- "@fluentui/react-provider": "9.1.0",
- "@fluentui/react-theme": "9.0.0",
+ "@fluentui/react-button": "^9.1.6",
+ "@fluentui/react-provider": "^9.1.5",
+ "@fluentui/react-theme": "^9.1.1",
"react": "18.2.0",
"react-dom": "18.2.0",
"tslib": "^2.1.0"
diff --git a/apps/ssr-tests-v9/CHANGELOG.json b/apps/ssr-tests-v9/CHANGELOG.json
index c040ad63593da2..9ad942ea777136 100644
--- a/apps/ssr-tests-v9/CHANGELOG.json
+++ b/apps/ssr-tests-v9/CHANGELOG.json
@@ -1,6 +1,36 @@
{
"name": "@fluentui/ssr-tests-v9",
"entries": [
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/ssr-tests-v9_v9.0.0",
+ "version": "9.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ssr-tests-v9",
+ "comment": "Bump @fluentui/react-components to v9.3.1",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:50:08 GMT",
+ "tag": "@fluentui/ssr-tests-v9_v9.0.0",
+ "version": "9.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ssr-tests-v9",
+ "comment": "Bump @fluentui/react-components to v9.3.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:04:10 GMT",
"tag": "@fluentui/ssr-tests-v9_v9.0.0",
diff --git a/apps/ssr-tests-v9/CHANGELOG.md b/apps/ssr-tests-v9/CHANGELOG.md
index 469e42a69aeab9..8561abe942fb62 100644
--- a/apps/ssr-tests-v9/CHANGELOG.md
+++ b/apps/ssr-tests-v9/CHANGELOG.md
@@ -1,11 +1,29 @@
# Change Log - @fluentui/ssr-tests-v9
-This log was last generated on Wed, 03 Aug 2022 16:04:10 GMT and should not be manually modified.
+This log was last generated on Tue, 20 Sep 2022 20:55:45 GMT and should not be manually modified.
## [9.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ssr-tests-v9_v9.0.0)
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ssr-tests-v9_v9.0.0..@fluentui/ssr-tests-v9_v9.0.0)
+
+### Patches
+
+- Bump @fluentui/react-components to v9.3.1 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ssr-tests-v9_v9.0.0)
+
+Thu, 15 Sep 2022 09:50:08 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ssr-tests-v9_v9.0.0..@fluentui/ssr-tests-v9_v9.0.0)
+
+### Patches
+
+- Bump @fluentui/react-components to v9.3.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
+## [9.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ssr-tests-v9_v9.0.0)
+
Wed, 03 Aug 2022 16:04:10 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ssr-tests-v9_v9.0.0..@fluentui/ssr-tests-v9_v9.0.0)
diff --git a/apps/ssr-tests-v9/package.json b/apps/ssr-tests-v9/package.json
index c16fc24747be59..40b18aa0348539 100644
--- a/apps/ssr-tests-v9/package.json
+++ b/apps/ssr-tests-v9/package.json
@@ -20,7 +20,7 @@
"type-check": "tsc -b tsconfig.json"
},
"dependencies": {
- "@fluentui/react-components": "^9.2.0"
+ "@fluentui/react-components": "^9.6.1"
},
"devDependencies": {
"@fluentui/eslint-plugin": "*",
diff --git a/apps/ssr-tests-v9/src/build.ts b/apps/ssr-tests-v9/src/build.ts
index 25e75bf775f956..a0186ce7e9bd00 100644
--- a/apps/ssr-tests-v9/src/build.ts
+++ b/apps/ssr-tests-v9/src/build.ts
@@ -27,7 +27,21 @@ async function build() {
const generateStartTime = process.hrtime();
- const rawStoriesGlobs = getVnextStories() as string[];
+ // Portals currently do not support hydration
+ // https://github.com/facebook/react/issues/13097
+ const skippedPaths = ['react-portal'];
+
+ const rawStoriesGlobs = getVnextStories().filter(
+ (storyPath: string) =>
+ // only return entries that don't match any of the skippedPaths
+ !skippedPaths.find(skippedPath => {
+ if (storyPath.includes(skippedPath)) {
+ return true;
+ }
+ return false;
+ }),
+ ) as string[];
+
rawStoriesGlobs.push(path.resolve(path.join(__dirname, './stories/**/index.stories.tsx')));
const storiesGlobs = rawStoriesGlobs
// TODO: Find a better way for this. Pass the path via params? 👇
diff --git a/apps/ssr-tests-v9/src/utils/renderToHTML.ts b/apps/ssr-tests-v9/src/utils/renderToHTML.ts
index 1b563ab7116d54..b546def45e35c3 100644
--- a/apps/ssr-tests-v9/src/utils/renderToHTML.ts
+++ b/apps/ssr-tests-v9/src/utils/renderToHTML.ts
@@ -25,7 +25,7 @@ export async function renderToHTML(config: RenderToHTMLConfig): Promise {
}
const resultHTML = ReactDOM.renderToString(
- React.createElement(RendererProvider, { renderer }, React.createElement(App)),
+ React.createElement(RendererProvider, { renderer, children: React.createElement(App) }),
);
const resultStylesHTML = ReactDOM.renderToStaticMarkup(
React.createElement(React.Fragment, null, renderToStyleElements(renderer)),
diff --git a/apps/ssr-tests/CHANGELOG.json b/apps/ssr-tests/CHANGELOG.json
index 7ec75ee809639e..e07924fdbd6acb 100644
--- a/apps/ssr-tests/CHANGELOG.json
+++ b/apps/ssr-tests/CHANGELOG.json
@@ -1,6 +1,111 @@
{
"name": "@fluentui/ssr-tests",
"entries": [
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/ssr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ssr-tests",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/ssr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ssr-tests",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/ssr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ssr-tests",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/ssr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ssr-tests",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/ssr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ssr-tests",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/ssr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ssr-tests",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/ssr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ssr-tests",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/ssr-tests_v1.0.0",
diff --git a/apps/ssr-tests/CHANGELOG.md b/apps/ssr-tests/CHANGELOG.md
index 4d393475e828b5..2452aa2bda8ca6 100644
--- a/apps/ssr-tests/CHANGELOG.md
+++ b/apps/ssr-tests/CHANGELOG.md
@@ -1,11 +1,74 @@
# Change Log - @fluentui/ssr-tests
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Thu, 22 Sep 2022 07:43:45 GMT and should not be manually modified.
## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ssr-tests_v1.0.0)
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ssr-tests_v1.0.0..@fluentui/ssr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ssr-tests_v1.0.0)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ssr-tests_v1.0.0..@fluentui/ssr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ssr-tests_v1.0.0)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ssr-tests_v1.0.0..@fluentui/ssr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ssr-tests_v1.0.0)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ssr-tests_v1.0.0..@fluentui/ssr-tests_v1.0.0)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ssr-tests_v1.0.0)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ssr-tests_v1.0.0..@fluentui/ssr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ssr-tests_v1.0.0)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ssr-tests_v1.0.0..@fluentui/ssr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ssr-tests_v1.0.0)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ssr-tests_v1.0.0..@fluentui/ssr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ssr-tests_v1.0.0)
+
Mon, 05 Sep 2022 07:38:30 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ssr-tests_v1.0.0..@fluentui/ssr-tests_v1.0.0)
diff --git a/apps/ssr-tests/package.json b/apps/ssr-tests/package.json
index 96db94a2531650..bbacf0120e3be2 100644
--- a/apps/ssr-tests/package.json
+++ b/apps/ssr-tests/package.json
@@ -13,7 +13,7 @@
},
"license": "MIT",
"devDependencies": {
- "@fluentui/react": "^8.94.1",
+ "@fluentui/react": "^8.98.8",
"@microsoft/load-themed-styles": "^1.10.26",
"@types/mocha": "^7.0.2",
"@fluentui/scripts": "^1.0.0",
diff --git a/apps/stress-test/.gitignore b/apps/stress-test/.gitignore
index a8dce92731d372..8756e1fe4b6642 100644
--- a/apps/stress-test/.gitignore
+++ b/apps/stress-test/.gitignore
@@ -1,7 +1,8 @@
node_modules/
+dev-build/
dist/
benchmarks/**/*.json
-benchmarks/**/results.js
+benchmarks/**/*.js
-yarn-error.log
\ No newline at end of file
+yarn-error.log
diff --git a/apps/stress-test/CHANGELOG.json b/apps/stress-test/CHANGELOG.json
index 71ba96339198e9..3c99591c3fb54d 100644
--- a/apps/stress-test/CHANGELOG.json
+++ b/apps/stress-test/CHANGELOG.json
@@ -1,6 +1,156 @@
{
"name": "@fluentui/stress-test",
"entries": [
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/stress-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 07:47:16 GMT",
+ "tag": "@fluentui/stress-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "undefined": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/react-components to v9.3.0",
+ "commit": "ead191a8368bf64ecabffce5ea0e02565f449a95"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/stress-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/react-components to v9.3.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/web-components to v2.5.6",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/stress-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/react-components to v9.3.0",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/stress-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/react-components to v9.3.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/stress-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/stress-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/stress-test_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/stress-test",
+ "comment": "Bump @fluentui/web-components to v2.5.5",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/stress-test_v1.0.0",
diff --git a/apps/stress-test/CHANGELOG.md b/apps/stress-test/CHANGELOG.md
index b2a968d1249fd5..4a4871c838aeb6 100644
--- a/apps/stress-test/CHANGELOG.md
+++ b/apps/stress-test/CHANGELOG.md
@@ -1,11 +1,79 @@
# Change Log - @fluentui/stress-test
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Thu, 22 Sep 2022 07:43:45 GMT and should not be manually modified.
## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/stress-test_v1.0.0)
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/stress-test_v1.0.0..@fluentui/stress-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/stress-test_v1.0.0)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/stress-test_v1.0.0..@fluentui/stress-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/react-components to v9.3.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/web-components to v2.5.6 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/stress-test_v1.0.0)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/stress-test_v1.0.0..@fluentui/stress-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/react-components to v9.3.0 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/stress-test_v1.0.0)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/stress-test_v1.0.0..@fluentui/stress-test_v1.0.0)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/react-components to v9.3.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/stress-test_v1.0.0)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/stress-test_v1.0.0..@fluentui/stress-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/stress-test_v1.0.0)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/stress-test_v1.0.0..@fluentui/stress-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/stress-test_v1.0.0)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/stress-test_v1.0.0..@fluentui/stress-test_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+- Bump @fluentui/web-components to v2.5.5 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/stress-test_v1.0.0)
+
Mon, 05 Sep 2022 07:38:30 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/stress-test_v1.0.0..@fluentui/stress-test_v1.0.0)
diff --git a/apps/stress-test/README.md b/apps/stress-test/README.md
index bdd123caa3a3a4..192bed238c7682 100644
--- a/apps/stress-test/README.md
+++ b/apps/stress-test/README.md
@@ -4,11 +4,60 @@ Stress Test is an application for testing Fluent UI components in "stressful" sc
This application is configured to support Fluent UI v8, v9 and Web Components.
-Stress Test is a simple Webpack application as Webpack allows us to support Fluent v8, v9 and Web Components in a single app while using each version of Fluent natively (that is, the React versions of Fluent are typical React apps, the Web Component version is a typical web component app). Additionally, Griffel, a dependency of Fluent v9 provides some Webpack loaders so Stress Test needs to be able to use those.
+## Usage
+
+Run tests by invoking the CLI:
+
+```shell
+$ yarn workspace @fluentui/stress-test stress-test
+```
+
+This will show the help documentation that provides details for each command.
+
+### Building
+
+Building produces a static application that can be served with a simple HTTP server.
+
+```shell
+# Build all the dependencies for this application (e.g., `@fluentui/react`, `@fluentui/web-components`) along with the application.
+$ yarn workspace @fluentui/stress-test stress-test build --build-deps
+
+# Build only this application.
+$ yarn workspace @fluentui/stress-test stress-test build
+```
+
+> NOTE: `build --build-deps` is much slower, but is required the first time you're building the application or if you've pulled in lots of changes. Use `build` if you don't need to build dependencies like `@fluentui/react` as it's much faster.
+
+### Examples
+
+```shell
+# Run your "my-scenario" scenario with the "mount" and "inject-styles" test cases against Chrome and Firefox with small sizes. Target the "stress-tree" page with "button" renderers.
+$ yarn workspace @fluentui/stress-test stress-test run --scenario my-scenario --test-cases mount inject-styles --browsers chrome firefox --sizes xs s --targets v8/stress-tree?r=button v9/stress-tree?r=button wc/stress-tree?r=button
+
+# Run your "my-scenario" scenario with the "mount" and "inject-styles" test cases against the default browsers at the default sizes and sample size. Target the "stress-tree" page with "button" renderers.
+$ yarn workspace @fluentui/stress-test stress-test run --scenario my-scenario --test-cases mount inject-styles --targets v8/stress-tree?r=button v9/stress-tree?r=button wc/stress-tree?r=button
+```
+
+> NOTE: Tests should be run against production builds. While tests can be run against development builds, and this is useful for gathering quick results and debugging, the performance characteristics of development and production builds can differ quite a bit.
+
+## Glossary
+
+- **scenario**: A testing scenario for a specific line of investigation. For example, if you wanted to compare the performance of different `Button` implementations you might create a "button-test" scenario for various targets.
+- **targets**: Different implementation targets. These are URLs that can accept query parameters. For example "v8/stress-tree?r=button", "wc/stress-tree?r=button".
+- **test cases**: Different test cases to run against a given scenario. For example, you might want to test mounting performance for a scenario.
+- **renderers**: Simple components that can be plugged into targets allowing easy customization of the component under test.
## Development
-Use `yarn start` and select `@fluentui/stress-test` from the list of options to start the application in development mode.
+You can run a development server to see what is going to be tested and debugging/investigating issues with it by running the following command:
+
+```shell
+$ yarn workspace @fluentui/stress-test stress-test dev
+```
+
+Please note that you'll need to add the correct modifiers to the localhost server so that you see the correct test you are trying to debug. If you do not add these modifiers you will most likely just get a page with the message `Cannot GET /`.
+
+For example, if you want to test mount performance for v8 button with a medium-sized fixture you would need to go to add `/v8/stress-tree/?r=button&test=mount&fixtureName=l_1` after `localhost:9000` in the browser.
### Project layout
@@ -16,22 +65,51 @@ The project is laid out with folders for each supported version of Fluent (`v8`,
The `shared` folder is for utilities that are shared across Fluent versions.
-The `components` folder is also split by supported Fluent versions and is where compoenents that can be shared across test cases live.
+The `components` folder is also split by supported Fluent versions and is where components that can be shared across test cases live.
The `benchmarks` folder houses Tachometer configurations and test results; and helper scripts for generating configurations and processing results.
-### Adding test cases
+The `scripts` folder house the Stress Test CLI app that is used to run tests.
+
+### Creating your own tests
+
+There are a few way you can create your own tests depending on what you want to do.
+
+#### Adding a new test with a renderer
+
+The simplest thing to do is use an existing test page like "stress-tree" but with your own renderer. A renderer is just a function that renders a component to be rendered. Renderers are specific to the UI library being tested so a Web Component renderer is different from a React one but conceptually they are the same.
+
+An example React renderer:
+
+```tsx
+// myButton.tsx
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return Button at index {index} ;
+};
+```
+
+> Note: renderers need to be saved in the appropriate `src/renderers` subfolder. `v8` for Fluent V8, `v9` for Fluent V9, `wc` for Fluent Web Components
+
+In your test specify the renderer with the `r` query parameter:
+
+```shell
+yarn workspace @fluentui/stress-test stress-test run my-button-scenario --test-cases mount --targets v9/stress-tree?r=myButton
+```
+
+#### Adding new test fixtures
-Currently, new test cases must be manually added. Add tests cases to the `pages` array in `webpack.config.js` and they will be generated by Webpack. This configuration keeps the different Fluent versions in separate Webpack chunks. The dev server needs to be restarted after changes to the config file.
+Test fixtures are used to drive tests. In the "stress-tree` page fixtures are used to control different sizes of DOM tree so tests can be run against "simple" to "complex" DOM trees.
-## Production
+Fixtures can be generated with the `build-fixture` command:
-Run `yarn workspace @fluentui/stress-test build` from the repo root to build a static production bundle of the application.
+```shell
+yarn workspace @fluentui/stress-test stress-test build-fixture --name my-fixture --option option1=value1 option2=value2
+```
-Run `yarn workspace @fluentui/stress-test serve` to serve the static production bundle.
+Fixtures are saved in the `src/fixtures` folder.
-## Running test cases
+> Note: fixtures can become quite large so they are excluded from git. If you need others to be able to generate your fixture be sure to keep track of the options you use to create the fixture.
-Run `yarn workspace @fluentui/stress-test bench:*` where "\*" is one of the test cases in `package.json`.
+#### Adding a new test page
-NOTE: Stress Test must be running, preferrably as a production build.
+A page is a way to control the entire structure of your test. Currently, we ship a "stress-tree" page which loads a broad and deep DOM tree to simulate a complex real-world web application. If you need something different create a page to represent the situation you need to test. See `src/pages` for examples of how to create a page.
diff --git a/apps/stress-test/benchmarks/browsers.js b/apps/stress-test/benchmarks/browsers.js
deleted file mode 100644
index ee1d798af2e2a2..00000000000000
--- a/apps/stress-test/benchmarks/browsers.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// const os = require('os');
-
-module.exports.getBrowsers = () => {
- // https://github.com/Polymer/tachometer#webdriver-plugins
- const browsers = ['chrome', 'firefox' /*'edge'*/];
-
- // if (os.type() === 'Darwin') {
- // browsers.push('safari');
- // }
-
- return browsers;
-};
diff --git a/apps/stress-test/benchmarks/simple-stress/buildConfig.js b/apps/stress-test/benchmarks/simple-stress/buildConfig.js
deleted file mode 100644
index c701e4f64f36dc..00000000000000
--- a/apps/stress-test/benchmarks/simple-stress/buildConfig.js
+++ /dev/null
@@ -1,82 +0,0 @@
-const fs = require('fs-extra');
-const { getBrowsers } = require('../browsers');
-const path = require('path');
-const yargs = require('yargs');
-
-const options = yargs
- .options({
- size: {
- alias: 's',
- describe: 'Number of components to use in the test',
- default: 100,
- },
- 'add-nodes': {
- alias: 'a',
- describe: 'Number of components to add in the test',
- },
- 'remove-nodes': {
- alias: 'r',
- describe: 'Number of components to remove in the test',
- },
- })
- .parse();
-
-if (!options.addNodes) {
- options.addNodes = options.size;
-}
-
-if (!options.removeNodes) {
- options.removeNodes = options.size - 1;
-}
-
-const makeConfigJson = (browser, testCase, sampleSize = 25) => {
- const json = `
- {
- "$schema": "https://raw.githubusercontent.com/Polymer/tachometer/master/config.schema.json",
- "sampleSize": ${sampleSize},
- "timeout": 0,
- "benchmarks": [
- {
- "browser": {
- "name": "${browser}"
- },
- "measurement": [
- {
- "mode": "performance",
- "entryName": "stress"
- }
- ],
- "expand": [
- {
- "name": "v8 - ${testCase}",
- "url": "http://localhost:8080/v8/simple-stress/?test=${testCase}&numStartNodes=${options.size}&numAddNodes=${options.addNodes}&numRemoveNodes=${options.removeNodes}"
- },
- {
- "name": "v9 - ${testCase}",
- "url": "http://localhost:8080/v9/simple-stress/?test=${testCase}&numStartNodes=${options.size}&numAddNodes=${options.addNodes}&numRemoveNodes=${options.removeNodes}"
- },
- {
- "name": "wc - ${testCase}",
- "url": "http://localhost:8080/wc/simple-stress/?test=${testCase}&numStartNodes=${options.size}&numAddNodes=${options.addNodes}&numRemoveNodes=${options.removeNodes}"
- }
- ]
- }
- ]
- }
- `;
-
- return json;
-};
-
-const browsers = getBrowsers();
-const testCases = ['mount', 'inject-styles', 'prop-update', 'add-node', 'remove-node'];
-
-fs.mkdirpSync(path.join(__dirname, 'config'));
-fs.mkdirpSync(path.join(__dirname, 'results'));
-
-for (const browser of browsers) {
- for (const testCase of testCases) {
- const json = makeConfigJson(browser, testCase);
- fs.writeFileSync(path.join(__dirname, 'config', [browser, testCase, 'json'].join('.')), json, { encoding: 'utf8' });
- }
-}
diff --git a/apps/stress-test/benchmarks/simple-stress/processResults.js b/apps/stress-test/benchmarks/simple-stress/processResults.js
deleted file mode 100644
index 85a71025fb5a04..00000000000000
--- a/apps/stress-test/benchmarks/simple-stress/processResults.js
+++ /dev/null
@@ -1,34 +0,0 @@
-const fs = require('fs-extra');
-const { getBrowsers } = require('../browsers');
-const path = require('path');
-
-const browsers = getBrowsers();
-const testCases = ['mount', 'inject-styles', 'prop-update', 'add-node', 'remove-node'];
-
-const browserData = {};
-for (const browser of browsers) {
- browserData[browser] = {};
- for (const testCase of testCases) {
- const contents = fs.readFileSync(path.join(__dirname, 'results', `${browser}.${testCase}.results.json`), {
- encoding: 'utf8',
- });
- const json = JSON.parse(contents);
-
- browserData[browser][testCase] = json.benchmarks.map(test => {
- return {
- name: test.name,
- mean: test.mean,
- differences: test.differences,
- samples: test.samples,
- };
- });
- }
-}
-
-console.log(browserData);
-
-const js = `
- export const data = ${JSON.stringify(browserData, null, 4)};
-`;
-
-fs.writeFileSync(path.join(__dirname, 'results', 'results.js'), js, { encoding: 'utf8' });
diff --git a/apps/stress-test/griffelConfig.js b/apps/stress-test/griffelConfig.js
deleted file mode 100644
index 24f3ea2974ab36..00000000000000
--- a/apps/stress-test/griffelConfig.js
+++ /dev/null
@@ -1,93 +0,0 @@
-const { GriffelCSSExtractionPlugin } = require('@griffel/webpack-extraction-plugin');
-const MiniCssExtractPlugin = require('mini-css-extract-plugin');
-
-/**
- * Webpack configuration object.
- * @typedef {import('webpack').Configuration} WebpackConfig
- */
-
-/**
- * Webpack rules set.
- * @typedef {import('webpack').RuleSetRule} WebpackRuleSetRule
- */
-
-/**
- * @type {string[]}
- */
-const griffelModes = ['runtime', 'buildtime', 'extraction'];
-
-/**
- * @type {string}
- */
-const mode = process.env.STRESS_TEST_GRIFFEL_MODE;
-
-/**
- * @type {string}
- */
-const griffelMode = griffelModes.includes(mode) ? mode : 'runtime';
-
-/**
- * @type {WebpackRuleSetRule[]}
- */
-const extractionRules = [
- {
- test: /\.(js|ts|tsx)$/,
- // Apply "exclude" only if your dependencies **do not use** Griffel
- // exclude: /node_modules/,
- exclude: [/\.wc\.(ts|tsx)?$/, /v9\/simple\-stress/],
- use: {
- loader: GriffelCSSExtractionPlugin.loader,
- },
- },
- // Add "@griffel/webpack-loader" if you use Griffel directly in your project
- {
- test: /\.(ts|tsx)$/,
- exclude: [/node_modules/, /\.wc\.(ts|tsx)?$/],
- use: {
- loader: '@griffel/webpack-loader',
- options: {
- babelOptions: {
- presets: ['@babel/preset-typescript'],
- },
- },
- },
- },
- // "css-loader" is required to handle produced CSS assets by Griffel
- // you can use "style-loader" or "MiniCssExtractPlugin.loader" to handle CSS insertion
- {
- test: /\.css$/,
- use: [MiniCssExtractPlugin.loader, 'css-loader'],
- },
-];
-
-/**
- * Take the Webpack config object and set properties to
- * configure Griffel.
- *
- * NOTE: this function mutates the `config` object passed in to it.
- *
- * @param {WebpackConfig} config - Webpack configuration object to modify.
- * @returns {WebpackConfig} Modified Webpack configuration object.
- */
-const configureGriffel = config => {
- console.log(`Griffel running in ${griffelMode} mode.`);
- if (griffelMode === 'extraction') {
- if (config.module.rules) {
- config.module.rules = [...extractionRules, ...config.module.rules];
- } else {
- config.modules.rules = extractionRules;
- }
-
- if (config.plugins) {
- config.plugins = [...config.plugins, new MiniCssExtractPlugin(), new GriffelCSSExtractionPlugin()];
- } else {
- config.plugins = [new MiniCssExtractPlugin(), new GriffelCSSExtractionPlugin()];
- }
- }
-
- return config;
-};
-
-module.exports = {
- configureGriffel,
-};
diff --git a/apps/stress-test/package.json b/apps/stress-test/package.json
index fe9a421ab84c97..bbb8d88e8e8413 100644
--- a/apps/stress-test/package.json
+++ b/apps/stress-test/package.json
@@ -3,38 +3,20 @@
"version": "1.0.0",
"private": true,
"main": "index.js",
+ "type": "module",
"license": "MIT",
"scripts": {
- "start": "webpack-dev-server --mode=development",
- "build:local": "lage build --to @fluentui/react @fluentui/web-components --verbose && yarn build:app",
- "build:app": "webpack --mode=production",
- "serve": "http-server ./dist",
- "bench:simple-stress:build": "node ./benchmarks/simple-stress/buildConfig.js",
- "bench:simple-stress": "yarn bench:simple-stress:mount && yarn bench:simple-stress:inject-styles && yarn bench:simple-stress:prop-update && yarn bench:simple-stress:add-node && yarn bench:simple-stress:remove-node",
- "bench:simple-stress:process": "node ./benchmarks/simple-stress/processResults.js",
- "bench:simple-stress:mount": "yarn bench:simple-stress:mount:chrome && yarn bench:simple-stress:mount:firefox",
- "bench:simple-stress:inject-styles": "yarn bench:simple-stress:inject-styles:chrome && yarn bench:simple-stress:inject-styles:firefox",
- "bench:simple-stress:prop-update": "yarn bench:simple-stress:prop-update:chrome && yarn bench:simple-stress:prop-update:firefox",
- "bench:simple-stress:add-node": "yarn bench:simple-stress:add-node:chrome && yarn bench:simple-stress:add-node:firefox",
- "bench:simple-stress:remove-node": "yarn bench:simple-stress:remove-node:chrome && yarn bench:simple-stress:remove-node:firefox",
- "bench:simple-stress:mount:chrome": "tach --config ./benchmarks/simple-stress/config/chrome.mount.json --json-file ./benchmarks/simple-stress/results/chrome.mount.results.json",
- "bench:simple-stress:mount:firefox": "tach --config ./benchmarks/simple-stress/config/firefox.mount.json --json-file ./benchmarks/simple-stress/results/firefox.mount.results.json",
- "bench:simple-stress:inject-styles:chrome": "tach --config ./benchmarks/simple-stress/config/chrome.inject-styles.json --json-file ./benchmarks/simple-stress/results/chrome.inject-styles.results.json",
- "bench:simple-stress:inject-styles:firefox": "tach --config ./benchmarks/simple-stress/config/firefox.inject-styles.json --json-file ./benchmarks/simple-stress/results/firefox.inject-styles.results.json",
- "bench:simple-stress:prop-update:chrome": "tach --config ./benchmarks/simple-stress/config/chrome.prop-update.json --json-file ./benchmarks/simple-stress/results/chrome.prop-update.results.json",
- "bench:simple-stress:prop-update:firefox": "tach --config ./benchmarks/simple-stress/config/firefox.prop-update.json --json-file ./benchmarks/simple-stress/results/firefox.prop-update.results.json",
- "bench:simple-stress:add-node:chrome": "tach --config ./benchmarks/simple-stress/config/chrome.add-node.json --json-file ./benchmarks/simple-stress/results/chrome.add-node.results.json",
- "bench:simple-stress:add-node:firefox": "tach --config ./benchmarks/simple-stress/config/firefox.add-node.json --json-file ./benchmarks/simple-stress/results/firefox.add-node.results.json",
- "bench:simple-stress:remove-node:chrome": "tach --config ./benchmarks/simple-stress/config/chrome.remove-node.json --json-file ./benchmarks/simple-stress/results/chrome.remove-node.results.json",
- "bench:simple-stress:remove-node:firefox": "tach --config ./benchmarks/simple-stress/config/firefox.remove-node.json --json-file ./benchmarks/simple-stress/results/firefox.remove-node.results.json"
+ "stress-test": "ts-node-esm --project tsconfig.scripts.json ./scripts/stressTest.ts",
+ "type-check": "tsc -b tsconfig.type.json"
},
"dependencies": {
- "@fluentui/react": "^8.94.1",
- "@fluentui/react-components": "^9.2.0",
+ "@fluentui/react": "^8.98.8",
+ "@fluentui/react-components": "^9.6.1",
"@fluentui/react-icons": "^2.0.175",
- "@fluentui/web-components": "^2.5.4",
+ "@fluentui/web-components": "^2.5.8",
"@microsoft/fast-element": "^1.10.4",
"react": "17.0.2",
- "react-dom": "17.0.2"
+ "react-dom": "17.0.2",
+ "random-seedable": "1.0.8"
}
}
diff --git a/apps/stress-test/pageConfig.js b/apps/stress-test/pageConfig.js
deleted file mode 100644
index 58208d54b6ae92..00000000000000
--- a/apps/stress-test/pageConfig.js
+++ /dev/null
@@ -1,119 +0,0 @@
-const glob = require('glob');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-
-/**
- * Automatically configures Webpack to find pages so
- * developers can just add new pages without touching
- * the Webpack config.
- */
-
-/**
- * A page configuration object used to generate Webpack configuration.
- * @typedef {Object} PageConfig
- * @property {string} name - Name of the page.
- * @property {string} path - Path the the index file for the page. This is a tsx (React) or wc.ts (Web Component) file.
- * @property {string} template - HTML template for the page.
- * @property {string} output - Path to the output file
- */
-
-/**
- * Webpack configuration object.
- * @typedef {import('webpack').Configuration} WebpackConfig
- */
-
-/**
- * Webpack `entry` configuration object.
- * @typedef {import('webpack').Entry} WebpackEntry
- */
-
-/**
- * HtmlWebpackPlugin object.
- * @typedef {import('html-webpack-plugin')} HtmlWebpackPlugin
- */
-
-/**
- * Find all the source pages and map them to
- * config objects used to generate the Webpack config.
- *
- * @returns {PageConfig[]} List of page configuration objects.
- */
-const getPages = () => {
- const extPattern = /\.(tsx|wc.ts)/;
- const pagePattern = './src/pages/**/*/index.?(tsx|wc.ts)';
-
- const files = glob.sync(pagePattern);
-
- const pages = files.map(file => {
- const template = file.replace(extPattern, '.html');
- const prefix = './src/pages/';
-
- const config = {
- name: file.replace(prefix, '').replace(/\//g, '-').replace(extPattern, ''),
- path: file,
- template,
- output: template.replace(prefix, ''),
- };
-
- return config;
- });
-
- return pages;
-};
-
-/**
- * Take data from getPages() and generate Webpack
- * config's `entry`.
- *
- * @param {PageConfig[]} pages - List of page configuration objects.
- * @returns {WebpackEntry} `entry` object for Webpack configuration.
- */
-const getEntry = pages => {
- return pages.reduce((config, page) => {
- config[page.name] = page.path;
- return config;
- }, {});
-};
-
-/**
- * Take data from getPages() and generate
- * HTML plugins for the pages.
- *
- * @param {PageConfig[]} pages - List of page configuration objects.
- * @returns {HtmlWebpackPlugin[]} List of HtmlWebpackPlugins for all pages.
- */
-const getHtmlPlugin = pages => {
- return pages.map(page => {
- return new HtmlWebpackPlugin({
- inject: 'body',
- template: page.template,
- filename: page.output,
- chunks: [page.name],
- });
- });
-};
-
-/**
- * Take the Webpack config object and set properties
- * to automatically load pages.
- *
- * NOTE: this function mutates the `config` object passed in to it.
- *
- * @param {WebpackConfig} config - Webpack configuration object to modify.
- * @returns {WebpackConfig} Modified Webpack configuration object.
- */
-const configurePages = config => {
- const pages = getPages();
-
- config.entry = getEntry(pages);
- if (config.plugins) {
- config.plugins = [...config.plugins, ...getHtmlPlugin(pages)];
- } else {
- config.plugins = getHtmlPlugin(pages);
- }
-
- return config;
-};
-
-module.exports = {
- configurePages,
-};
diff --git a/apps/stress-test/scenarios/default.js b/apps/stress-test/scenarios/default.js
new file mode 100644
index 00000000000000..d2ac6503704b34
--- /dev/null
+++ b/apps/stress-test/scenarios/default.js
@@ -0,0 +1,55 @@
+/**
+ * @typedef {Object} TestOptions
+ * @property {number} numStartNodes
+ * @property {number} numAddNodes
+ * @property {number} numRemoveNodes
+ */
+
+/**
+ * @typedef {Object.} SizeMap
+ */
+
+/**
+ * @typedef {Object} ScenarioConfig
+ * @property {string[]} [testCases]
+ * @property {SizeMap} [sizes]
+ * @property {string[]} [browsers]
+ * @property {number} [sampleSize]
+ * @property {string[]} [targets]
+ */
+
+module.exports = {
+ testCases: ['mount', 'inject-styles', 'prop-update', 'remove-node', 'add-node'],
+
+ sizes: {
+ xs: {
+ numStartNodes: 100,
+ numAddNodes: 100,
+ numRemoveNodes: 99,
+ },
+
+ s: {
+ numStartNodes: 250,
+ numAddNodes: 250,
+ numRemoveNodes: 249,
+ },
+
+ m: {
+ numStartNodes: 500,
+ numAddNodes: 500,
+ numRemoveNodes: 499,
+ },
+
+ l: {
+ numStartNodes: 750,
+ numAddNodes: 750,
+ numRemoveNodes: 749,
+ },
+
+ xl: {
+ numStartNodes: 1000,
+ numAddNodes: 1000,
+ numRemoveNodes: 999,
+ },
+ },
+};
diff --git a/apps/stress-test/scripts/commands/build.ts b/apps/stress-test/scripts/commands/build.ts
new file mode 100644
index 00000000000000..18f3c68dfe8f0e
--- /dev/null
+++ b/apps/stress-test/scripts/commands/build.ts
@@ -0,0 +1,93 @@
+import * as yargs from 'yargs';
+import { CLIBuildOptions } from '../utils/types';
+
+import { exec } from 'child_process';
+import { promisify } from 'util';
+import configureYargs from '../utils/configureYargs.js';
+import webpack from 'webpack';
+import webpackConfig from '../../webpack/webpack.config.js';
+import { buildDefaultFixtures } from '../utils/fixtures.js';
+
+const execAsync = promisify(exec);
+
+const command = 'build';
+
+const run: (argv: CLIBuildOptions) => Promise = async argv => {
+ if (argv.buildDeps) {
+ const deps = ['@fluentui/react', '@fluentui/web-components'];
+ console.log('Building dependencies', deps.join(', '));
+ const cmd = `lage build --to ${deps.join(' ')} ${argv.verbose ? '--verbose' : ''}`;
+ console.log(`Run: ${cmd}`);
+ await execAsync(cmd);
+ console.log(`Finished building dependencies!`);
+ }
+
+ return new Promise((resolve, reject) => {
+ const config = webpackConfig(undefined, { griffelMode: argv.griffelMode, mode: argv.mode });
+ webpack(config, (err, stats) => {
+ if (err) {
+ console.error(err.stack || err);
+ return reject();
+ }
+
+ if (stats && stats.hasErrors()) {
+ const { errors } = stats.toJson();
+ errors &&
+ errors.forEach(error => {
+ console.error(error.message);
+ if (argv.verbose) {
+ error.details && console.error(error.details);
+ error.stack && console.error(error.stack);
+ }
+ });
+
+ if (stats.hasWarnings()) {
+ const { warnings } = stats.toJson();
+ warnings &&
+ warnings.forEach(warning => {
+ console.warn(warning.message);
+ if (argv.verbose) {
+ warning.details && console.warn(warning.details);
+ warning.stack && console.warn(warning.stack);
+ }
+ });
+ }
+ return reject();
+ }
+
+ if (stats) {
+ console.log(
+ stats.toString({
+ colors: true, // Shows colors in the console
+ }),
+ );
+ }
+
+ resolve();
+ });
+ });
+};
+
+const api: yargs.CommandModule = {
+ command,
+ describe: 'Builds the application.',
+ builder: y => {
+ return configureYargs(command, y);
+ },
+ handler: argv => {
+ const args: CLIBuildOptions = {
+ griffelMode: argv.griffelMode as CLIBuildOptions['griffelMode'],
+ mode: argv.mode as CLIBuildOptions['mode'],
+ verbose: argv.verbose as boolean,
+ buildDeps: argv.buildDeps as boolean,
+ };
+
+ buildDefaultFixtures();
+
+ run(args).then(() => {
+ console.log('Build complete!');
+ });
+ },
+};
+
+export default api;
diff --git a/apps/stress-test/scripts/commands/buildFixture.ts b/apps/stress-test/scripts/commands/buildFixture.ts
new file mode 100644
index 00000000000000..3562020b8b7de4
--- /dev/null
+++ b/apps/stress-test/scripts/commands/buildFixture.ts
@@ -0,0 +1,47 @@
+import * as yargs from 'yargs';
+import { CLIBuildFixtureOptions } from '../utils/types';
+import configureYargs from '../utils/configureYargs.js';
+import { buildTreeFixture, cleanFixtures, isReservedName, reservedNames } from '../utils/fixtures.js';
+
+type BuildFixture = (options: CLIBuildFixtureOptions) => void;
+
+const command = 'build-fixture';
+
+const buildFixture: BuildFixture = ({ type, name, options }) => {
+ if (type === 'tree') {
+ buildTreeFixture(name, options);
+ }
+};
+
+const api: yargs.CommandModule = {
+ command,
+ describe: 'Builds a test fixture.',
+ builder: y => {
+ return configureYargs(command, y);
+ },
+ handler: argv => {
+ const { $0, _, ...options } = argv;
+
+ const opts = options as CLIBuildFixtureOptions;
+
+ if (opts.clean) {
+ cleanFixtures();
+ } else {
+ if (!opts.name) {
+ throw new Error(`"name" is required.`);
+ } else if (!opts.options) {
+ throw new Error(`"options" is required.`);
+ }
+
+ if (isReservedName(opts.name)) {
+ throw new Error(
+ `"${opts.name}" is a reserved name. Please using a name other than ${reservedNames.map(n => n + '*')}`,
+ );
+ }
+
+ buildFixture(opts);
+ }
+ },
+};
+
+export default api;
diff --git a/apps/stress-test/scripts/commands/buildTestConfig.ts b/apps/stress-test/scripts/commands/buildTestConfig.ts
new file mode 100644
index 00000000000000..a7275502f58531
--- /dev/null
+++ b/apps/stress-test/scripts/commands/buildTestConfig.ts
@@ -0,0 +1,117 @@
+import * as yargs from 'yargs';
+import { CLIBuildTestConfigOptions, ConfigResult, TestOptions } from '../utils/types';
+
+import fs from 'fs-extra';
+import * as path from 'path';
+
+import { getConfigDir, getResultsDir, ensureClean } from '../utils/paths.js';
+import configureYargs from '../utils/configureYargs.js';
+import * as querystring from 'querystring';
+
+type BuildTestConfig = (options: CLIBuildTestConfigOptions) => ConfigResult[];
+type MakeConfigJson = (
+ scenario: string,
+ browser: string,
+ testCase: string,
+ sampleSize: number,
+ targets: string[],
+ size: string,
+ testOptions: TestOptions,
+ port: number,
+) => string;
+
+const command = 'build-test-config';
+
+const buildTestConfig: BuildTestConfig = options => {
+ const { scenario, browsers, testCases, sampleSize, targets, sizes, port, testOptions } = options;
+ const configDir = getConfigDir(scenario);
+ ensureClean(configDir);
+
+ const configs = [] as ConfigResult[];
+
+ for (const browser of browsers) {
+ for (const testCase of testCases) {
+ for (const size of sizes) {
+ const json = makeConfigJson(scenario, browser, testCase, sampleSize, targets, size, testOptions, port);
+ const configName = [browser, testCase, size].join('.') + '.json';
+ const configPath = path.join(configDir, configName);
+ fs.writeFileSync(configPath, json, { encoding: 'utf8' });
+
+ const resultsDir = getResultsDir(scenario);
+ const configResult = {
+ configDir,
+ resultsDir,
+ testFile: configPath,
+ resultsFile: path.join(resultsDir, configName),
+ };
+
+ configs.push(configResult);
+ }
+ }
+ }
+
+ return configs;
+};
+
+const getUrl = (target: string, port: number): string => {
+ if (target.startsWith('http')) {
+ return target;
+ }
+
+ return `http://localhost:${port}/${target}`;
+};
+
+const makeConfigJson: MakeConfigJson = (_scenario, browser, testCase, sampleSize, targets, size, testOptions, port) => {
+ const json = {
+ $schema: 'https://raw.githubusercontent.com/Polymer/tachometer/master/config.schema.json',
+ sampleSize,
+ timeout: 0,
+ benchmarks: [
+ {
+ browser: {
+ name: browser,
+ },
+ measurement: [
+ {
+ mode: 'performance',
+ entryName: 'stress',
+ },
+ ],
+
+ expand: targets.map(target => {
+ const targetParams = target.includes('?') ? querystring.parse(target.substring(target.indexOf('?') + 1)) : {};
+ const params = querystring.stringify({
+ ...targetParams,
+ test: testCase,
+ fixtureName: `${size}_1`,
+ ...testOptions,
+ });
+
+ const targetWithoutParams = target.substring(0, target.includes('?') ? target.indexOf('?') : undefined);
+
+ return {
+ name: `${target} - ${testCase} - ${size}`,
+ url: `${getUrl(targetWithoutParams, port)}/?${params}`,
+ };
+ }),
+ },
+ ],
+ };
+
+ return JSON.stringify(json, null, 4);
+};
+
+const api: yargs.CommandModule = {
+ command,
+ describe: 'Builds test configuration files.',
+ builder: y => {
+ return configureYargs(command, y);
+ },
+ handler: argv => {
+ const { $0, _, ...rest } = argv;
+ buildTestConfig(rest as CLIBuildTestConfigOptions);
+ },
+};
+
+export default api;
+export { buildTestConfig };
diff --git a/apps/stress-test/scripts/commands/dev.ts b/apps/stress-test/scripts/commands/dev.ts
new file mode 100644
index 00000000000000..02c89ce854157f
--- /dev/null
+++ b/apps/stress-test/scripts/commands/dev.ts
@@ -0,0 +1,56 @@
+import * as yargs from 'yargs';
+import { CLIDevOptions } from '../utils/types';
+
+import webpack from 'webpack';
+import WebpackDevServer from 'webpack-dev-server';
+import configureYargs from '../utils/configureYargs.js';
+import webpackConfig from '../../webpack/webpack.config.js';
+import { buildDefaultFixtures } from '../utils/fixtures.js';
+
+const command = 'dev';
+
+const shutdownServer = () => {
+ if (server) {
+ server.stop().then(() => {
+ console.log('Webpack dev server shutdown.');
+ });
+ }
+};
+
+let server: WebpackDevServer;
+
+type RunServer = (argv: CLIDevOptions) => void;
+
+const runServer: RunServer = async argv => {
+ const config = webpackConfig(undefined, argv);
+ const compiler = webpack(config);
+
+ const serverOptions = { ...config.devServer, open: argv.open };
+ server = new WebpackDevServer(serverOptions, compiler);
+
+ process.on('uncaughtException', shutdownServer);
+
+ console.log('Starting Webpack dev server...');
+ await server.start();
+};
+
+const api: yargs.CommandModule = {
+ command,
+ describe: 'Run the app in development mode',
+ builder: y => {
+ return configureYargs(command, y);
+ },
+ handler: argv => {
+ const args = {
+ griffelMode: argv.griffelMode as CLIDevOptions['griffelMode'],
+ open: argv.open as boolean,
+ mode: argv.mode as CLIDevOptions['mode'],
+ };
+
+ buildDefaultFixtures();
+
+ runServer(args);
+ },
+};
+
+export default api;
diff --git a/apps/stress-test/scripts/commands/processResults.ts b/apps/stress-test/scripts/commands/processResults.ts
new file mode 100644
index 00000000000000..b80b809d670f32
--- /dev/null
+++ b/apps/stress-test/scripts/commands/processResults.ts
@@ -0,0 +1,67 @@
+import * as yargs from 'yargs';
+import { CLIProcessResultsOptions, ProcessedBrowserData, TachometerBenchmark } from '../utils/types';
+import fs from 'fs-extra';
+import * as path from 'path';
+import configureYargs from '../utils/configureYargs.js';
+import { getResultsDir, readDirJson } from '../utils/paths.js';
+
+const command = 'process-results';
+
+const handler: (argv: CLIProcessResultsOptions) => void = argv => {
+ const { scenario } = argv;
+
+ const resultsDir = getResultsDir(scenario);
+ const files = readDirJson(resultsDir);
+
+ const browserData: ProcessedBrowserData = {
+ scenario,
+ testCases: {},
+ };
+
+ for (const file of files) {
+ const contents = fs.readFileSync(path.join(resultsDir, file), {
+ encoding: 'utf8',
+ });
+ const json = JSON.parse(contents);
+ const benchmark = json.benchmarks[0];
+ const browser = benchmark.browser.name;
+
+ const [, testCase, size] = benchmark.name.split(' - ');
+
+ browserData.testCases[testCase] = browserData.testCases[testCase] || { sizes: {} };
+ browserData.testCases[testCase].sizes[size] = browserData.testCases[testCase].sizes[size] || { browsers: {} };
+
+ browserData.testCases[testCase].sizes[size].browsers[browser] = json.benchmarks.map((bm: TachometerBenchmark) => {
+ const [bmTarget, bmTestCase, bmSize] = bm.name.split(' - ');
+
+ return {
+ name: bm.name,
+ mean: bm.mean,
+ differences: bm.differences,
+ samples: bm.samples,
+ target: bmTarget,
+ testCase: bmTestCase,
+ size: bmSize,
+ };
+ });
+ }
+
+ const js = `
+ export const data = ${JSON.stringify(browserData, null, 4)};
+ `;
+ fs.writeFileSync(path.join(resultsDir, 'processed-results.js'), js, { encoding: 'utf8' });
+};
+
+const api: yargs.CommandModule = {
+ command,
+ describe: 'Processes test results for display with charts and graphs.',
+ builder: y => {
+ return configureYargs(command, y);
+ },
+ handler: argv => {
+ const args = { scenario: argv.scenario as string };
+ handler(args);
+ },
+};
+
+export default api;
diff --git a/apps/stress-test/scripts/commands/run.ts b/apps/stress-test/scripts/commands/run.ts
new file mode 100644
index 00000000000000..2fc25713909b2c
--- /dev/null
+++ b/apps/stress-test/scripts/commands/run.ts
@@ -0,0 +1,47 @@
+import * as yargs from 'yargs';
+import { CLIBuildTestConfigOptions, CLIRunOptions, CLIServerOptions, ConfigResult } from '../utils/types';
+import configureYargs from '../utils/configureYargs.js';
+import { startServer, stopServer } from '../utils/server.js';
+import runTachometer from '../utils/tachometer.js';
+import processResults from './processResults.js';
+import { buildTestConfig } from './buildTestConfig.js';
+import { buildDefaultFixtures } from '../utils/fixtures.js';
+
+const command = 'run';
+
+const run: (testConfigs: ConfigResult[], options: CLIServerOptions) => Promise = async (testConfigs, options) => {
+ const { port, root } = options;
+ await startServer({ port, root });
+ await runTachometer(testConfigs);
+};
+
+const handler: (argv: CLIRunOptions) => Promise = async argv => {
+ const testConfigs = buildTestConfig(argv as CLIBuildTestConfigOptions);
+
+ try {
+ await run(testConfigs, argv);
+ } finally {
+ stopServer();
+ }
+};
+
+const api: yargs.CommandModule = {
+ command,
+ describe: 'Builds configs and runs stress testing.',
+ builder: y => {
+ return configureYargs(command, y);
+ },
+ handler: async argv => {
+ buildDefaultFixtures();
+
+ const { $0, _, ...rest } = argv;
+ const args = (rest as unknown) as CLIRunOptions;
+ await handler(args);
+
+ if (argv.processResults) {
+ processResults.handler(argv);
+ }
+ },
+};
+
+export default api;
diff --git a/apps/stress-test/scripts/commands/runServer.ts b/apps/stress-test/scripts/commands/runServer.ts
new file mode 100644
index 00000000000000..6b3490487a1aa4
--- /dev/null
+++ b/apps/stress-test/scripts/commands/runServer.ts
@@ -0,0 +1,20 @@
+import * as yargs from 'yargs';
+
+import configureYargs from '../utils/configureYargs.js';
+import { startServer } from '../utils/server.js';
+import { CLIServerOptions } from '../utils/types';
+
+const command = 'serve';
+
+const api: yargs.CommandModule = {
+ command,
+ describe: 'Runs a test HTTP server.',
+ builder: y => {
+ return configureYargs(command, y);
+ },
+ handler: argv => {
+ startServer(argv as CLIServerOptions);
+ },
+};
+
+export default api;
diff --git a/apps/stress-test/scripts/commands/runTachometer.ts b/apps/stress-test/scripts/commands/runTachometer.ts
new file mode 100644
index 00000000000000..516bcf25978cb9
--- /dev/null
+++ b/apps/stress-test/scripts/commands/runTachometer.ts
@@ -0,0 +1,54 @@
+import * as yargs from 'yargs';
+import { CLITachometerOptions, ConfigResult } from '../utils/types';
+import fs from 'fs-extra';
+import * as path from 'path';
+
+import configureYargs from '../utils/configureYargs.js';
+import { getConfigDir, getResultsDir, readDirJson } from '../utils/paths.js';
+import runTachometer from '../utils/tachometer.js';
+
+const command = 'tachometer';
+
+const handler: (argv: CLITachometerOptions) => Promise = async argv => {
+ const { scenario } = argv;
+
+ const configDir = getConfigDir(scenario);
+ const resultsDir = getResultsDir(scenario);
+
+ if (!fs.existsSync(configDir)) {
+ throw new Error(`"${configDir} does not exist.`);
+ }
+
+ const configs = [] as ConfigResult[];
+ const files = readDirJson(configDir);
+
+ for (const file of files) {
+ const configResult = {
+ configDir,
+ resultsDir,
+ testFile: path.join(configDir, file),
+ resultsFile: path.join(resultsDir, file),
+ };
+
+ configs.push(configResult);
+ }
+
+ await runTachometer(configs);
+ console.log('Tachometer run complete!');
+};
+
+const api: yargs.CommandModule = {
+ command,
+ describe: 'Runs Tachometer for a provided scenario.',
+ builder: y => {
+ return configureYargs(command, y);
+ },
+ handler: argv => {
+ const args = {
+ scenario: argv.scenario as string,
+ };
+ handler(args);
+ },
+};
+
+export default api;
diff --git a/apps/stress-test/scripts/stressTest.ts b/apps/stress-test/scripts/stressTest.ts
new file mode 100644
index 00000000000000..716df4293ae609
--- /dev/null
+++ b/apps/stress-test/scripts/stressTest.ts
@@ -0,0 +1,23 @@
+import yargs from 'yargs';
+import build from './commands/build.js';
+import buildTestConfig from './commands/buildTestConfig.js';
+import dev from './commands/dev.js';
+import processResults from './commands/processResults.js';
+import run from './commands/run.js';
+import runServer from './commands/runServer.js';
+import runTachometer from './commands/runTachometer.js';
+import buildFixture from './commands/buildFixture.js';
+
+yargs
+ .usage('Usage: $0 [options]')
+ .command(build)
+ .command(buildTestConfig)
+ .command(dev)
+ .command(processResults)
+ .command(run)
+ .command(runServer)
+ .command(runTachometer)
+ .command(buildFixture)
+ .demandCommand()
+ .help()
+ .parse();
diff --git a/apps/stress-test/scripts/utils/configureYargs.ts b/apps/stress-test/scripts/utils/configureYargs.ts
new file mode 100644
index 00000000000000..cf38d4cebd9a05
--- /dev/null
+++ b/apps/stress-test/scripts/utils/configureYargs.ts
@@ -0,0 +1,247 @@
+import * as yargs from 'yargs';
+import { getBrowsers } from './getBrowsers.js';
+
+type YargsOptions = Record;
+type Configure = (y: yargs.Argv, options: YargsOptions) => void;
+type CongfigureYargs = (command: string, y: yargs.Argv) => yargs.Argv;
+
+const cliOptions = {
+ scenario: {
+ describe: 'Name applied to scenario that is about to be run',
+ demand: true,
+ },
+ 'test-cases': {
+ describe: 'List of test cases to run for the scenario. E.g., mount inject-styles',
+ },
+ sizes: {
+ describe: 'Sizes of each test case.',
+ default: ['s', 'm', 'l'],
+ },
+ browsers: {
+ describe: 'List of browsers to run against.',
+ default: getBrowsers(),
+ },
+ 'sample-size': {
+ describe: 'Number of samples to run for each test case.',
+ default: 25,
+ },
+ targets: {
+ describe: 'Tests to target.',
+ demand: true,
+ },
+ 'process-results': {
+ describe: 'Process the test results for display.',
+ default: true,
+ },
+ port: {
+ describe: 'Port for test server.',
+ default: 8080,
+ },
+ root: {
+ describe: 'Root folder for test server relative to package root.',
+ default: 'dist',
+ },
+ 'griffel-mode': {
+ describe: 'Optimization mode for Griffel.',
+ default: 'buildtime',
+ },
+ 'test-options': {
+ describe: 'Options to apply to each test. E.g., option1=value1 option2=value2',
+ coerce: (arg: string[]) => {
+ return arg.reduce((map: { [key: string]: string }, current) => {
+ const [key, value] = current.split('=');
+ if (!key || !value) {
+ throw new Error(`Invalid test option. Got ${current}. Expected the form "key=value".`);
+ }
+
+ map[key] = value;
+ return map;
+ }, {});
+ },
+ default: [],
+ },
+ mode: {
+ describe: 'Build mode.',
+ default: 'production',
+ },
+ verbose: {
+ describe: 'Log more messages.',
+ default: false,
+ },
+ 'build-deps': {
+ describe: 'Build dependencies for the app before building the app itself.',
+ default: false,
+ },
+ open: {
+ describe: 'Open the dev server in a new browser window.',
+ default: false,
+ },
+ type: {
+ describe: 'Type of fixture to build.',
+ default: 'tree',
+ },
+ name: {
+ describe: 'Name of the fixture.',
+ },
+ options: {
+ describe: 'Options for building the fixture. E.g., minBreadth=1 maxBreadth=20',
+ coerce: (arg: string[]) => {
+ return arg.reduce((map: { [key: string]: string }, current) => {
+ const [key, value] = current.split('=');
+ if (!key || !value) {
+ throw new Error(`Invalid test option. Got ${current}. Expected the form "key=value".`);
+ }
+
+ map[key] = value;
+ return map;
+ }, {});
+ },
+ },
+ clean: {
+ describe: 'Cleans fixtures.',
+ default: false,
+ },
+};
+
+const configure: Configure = (y, options) => {
+ let _y = y.options(options);
+
+ Object.keys(options).forEach(option => {
+ switch (option) {
+ case 'test-cases':
+ case 'browsers':
+ case 'targets':
+ case 'test-options':
+ case 'renderers':
+ case 'options':
+ _y = _y.array(option);
+ break;
+
+ case 'sizes':
+ _y = _y.array(option).choices(option, ['xs', 's', 'm', 'l', 'xl']);
+ break;
+
+ case 'sample-size':
+ case 'port':
+ _y = _y.number(option);
+ break;
+
+ case 'process-results':
+ case 'verbose':
+ case 'build-deps':
+ case 'open':
+ case 'clean':
+ _y = _y.boolean(option);
+ break;
+
+ case 'griffel-mode':
+ _y = _y.choices(option, ['runtime', 'buildtime', 'extraction']);
+ break;
+
+ case 'mode':
+ _y = _y.choices(option, ['production', 'development']);
+ break;
+
+ case 'type':
+ _y = _y.choices(option, ['tree']);
+ break;
+ }
+ });
+};
+
+const configureYargs: CongfigureYargs = (command, y) => {
+ switch (command) {
+ case 'build-test-config': {
+ const {
+ scenario,
+ 'test-cases': testCases,
+ sizes,
+ browsers,
+ 'sample-size': sampleSize,
+ targets,
+ 'test-options': testOptions,
+ port,
+ } = cliOptions;
+ configure(y, {
+ scenario,
+ 'test-cases': testCases,
+ sizes,
+ browsers,
+ 'sample-size': sampleSize,
+ targets,
+ 'test-options': testOptions,
+ port,
+ });
+ break;
+ }
+
+ case 'run': {
+ const {
+ scenario,
+ 'test-cases': testCases,
+ sizes,
+ browsers,
+ 'sample-size': sampleSize,
+ targets,
+ 'test-options': testOptions,
+ 'process-results': processResults,
+ port,
+ root,
+ } = cliOptions;
+ configure(y, {
+ scenario,
+ 'test-cases': testCases,
+ sizes,
+ browsers,
+ 'sample-size': sampleSize,
+ targets,
+ 'test-options': testOptions,
+ 'process-results': processResults,
+ port,
+ root,
+ });
+ break;
+ }
+
+ case 'process-results': {
+ const { scenario } = cliOptions;
+ configure(y, { scenario });
+ break;
+ }
+
+ case 'serve': {
+ const { port, root } = cliOptions;
+ configure(y, { port, root });
+ break;
+ }
+
+ case 'tachometer': {
+ const { scenario } = cliOptions;
+ configure(y, { scenario });
+ break;
+ }
+
+ case 'build': {
+ const { 'griffel-mode': griffelMode, mode, verbose, 'build-deps': buildDeps } = cliOptions;
+ configure(y, { 'griffel-mode': griffelMode, mode, verbose, 'build-deps': buildDeps });
+ break;
+ }
+
+ case 'dev': {
+ const { mode, open, 'griffel-mode': griffelMode } = cliOptions;
+ mode.default = 'development';
+ configure(y, { mode, open, 'griffel-mode': griffelMode });
+ break;
+ }
+
+ case 'build-fixture': {
+ const { type, name, options, clean } = cliOptions;
+ configure(y, { type, name, options, clean });
+ break;
+ }
+ }
+
+ return y;
+};
+
+export default configureYargs;
diff --git a/apps/stress-test/scripts/utils/fixtures.ts b/apps/stress-test/scripts/utils/fixtures.ts
new file mode 100644
index 00000000000000..745a66f3f7bd37
--- /dev/null
+++ b/apps/stress-test/scripts/utils/fixtures.ts
@@ -0,0 +1,174 @@
+import fs from 'fs-extra';
+import { join } from 'path';
+import { getFixturesDir, remove } from './paths.js';
+import { RandomTree } from './tree/RandomTree.js';
+import { RandomSelectorTreeNode } from '../../src/shared/tree/types.js';
+import { selectorTreeCreator } from './tree/RandomSelectorTreeNode.js';
+import glob from 'glob';
+
+type BuildTreeFixture = (name: string, options: { [key: string]: string }) => void;
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+type TreeJsonReplacer = (key: string, value: any) => any;
+type DefaultFixture = 'xs_1' | 'xs_2' | 's_1' | 's_2' | 'm_1' | 'm_2' | 'l_1' | 'l_2' | 'xl_1' | 'xl_2';
+type DefaultFixtureOptions = {
+ [fixtureName in DefaultFixture]: {
+ [option: string]: string;
+ };
+};
+
+const defaultFixtures = ['xs_1', 'xs_2', 's_1', 's_2', 'm_1', 'm_2', 'l_1', 'l_2', 'xl_1', 'xl_2'];
+const defaultFixtureOptions: DefaultFixtureOptions = {
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ xs_1: {
+ minBreadth: '1',
+ maxBreadth: '5',
+ minDepth: '1',
+ maxDepth: '5',
+ targetSize: '250',
+ },
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ xs_2: {
+ minBreadth: '1',
+ maxBreadth: '5',
+ minDepth: '1',
+ maxDepth: '5',
+ targetSize: '250',
+ seed: '7032017',
+ },
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ s_1: {
+ minBreadth: '2',
+ maxBreadth: '10',
+ minDepth: '2',
+ maxDepth: '10',
+ targetSize: '500',
+ },
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ s_2: {
+ minBreadth: '2',
+ maxBreadth: '10',
+ minDepth: '2',
+ maxDepth: '10',
+ targetSize: '500',
+ seed: '7032017',
+ },
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ m_1: {
+ minBreadth: '4',
+ maxBreadth: '20',
+ minDepth: '4',
+ maxDepth: '20',
+ targetSize: '1000',
+ },
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ m_2: {
+ minBreadth: '4',
+ maxBreadth: '20',
+ minDepth: '4',
+ maxDepth: '20',
+ targetSize: '1000',
+ seed: '7032017',
+ },
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ l_1: {
+ minBreadth: '8',
+ maxBreadth: '40',
+ minDepth: '8',
+ maxDepth: '40',
+ targetSize: '2000',
+ },
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ l_2: {
+ minBreadth: '8',
+ maxBreadth: '40',
+ minDepth: '8',
+ maxDepth: '40',
+ targetSize: '2000',
+ seed: '7032017',
+ },
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ xl_1: {
+ minBreadth: '16',
+ maxBreadth: '80',
+ minDepth: '16',
+ maxDepth: '80',
+ targetSize: '4000',
+ },
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ xl_2: {
+ minBreadth: '16',
+ maxBreadth: '80',
+ minDepth: '16',
+ maxDepth: '80',
+ targetSize: '4000',
+ seed: '7032017',
+ },
+};
+
+export const reservedNames = ['xs_', 's_', 'm_', 'l_', 'xl_'];
+export const isReservedName = (name: string): boolean => {
+ return reservedNames.some(reservedName => {
+ return name.startsWith(reservedName);
+ });
+};
+
+const treeJsonReplace: TreeJsonReplacer = (key, value) => {
+ if (key === 'parent') {
+ return undefined;
+ }
+
+ return value;
+};
+
+export const cleanFixtures = () => {
+ const files = glob.sync(join(getFixturesDir(), '**', '*.js'));
+ files.forEach(file => remove(file));
+};
+
+export const buildTreeFixture: BuildTreeFixture = (name, options) => {
+ const selectors = [] as string[];
+ const treeBuilder = new RandomTree(options);
+ const tree = treeBuilder.build(selectorTreeCreator(selectors));
+
+ const jsonTree = JSON.stringify(tree, treeJsonReplace, 2);
+
+ const data = {
+ tree: JSON.parse(jsonTree),
+ selectors: Array.from(new Set(selectors)),
+ };
+
+ const js = `export default ${JSON.stringify(data, null, 2)};`;
+
+ fs.writeFileSync(join(getFixturesDir(), `${name}.js`), js, { encoding: 'utf8' });
+};
+
+export const buildDefaultFixtures = () => {
+ const fixtures = defaultFixtures.map(f => {
+ return {
+ name: f as DefaultFixture,
+ path: join(getFixturesDir(), `${f}.js`),
+ };
+ });
+
+ const missingFixtures = [] as DefaultFixture[];
+ fixtures.forEach(f => {
+ if (!fs.existsSync(f.path)) {
+ missingFixtures.push(f.name);
+ }
+ });
+
+ if (missingFixtures.length === 0) {
+ return;
+ }
+
+ console.log(`Missing fixtures: ${missingFixtures}.`);
+ console.log('Generating...');
+
+ missingFixtures.forEach(missingFixture => {
+ console.log(`Generating fixture ${missingFixture}...`);
+ buildTreeFixture(missingFixture, defaultFixtureOptions[missingFixture]);
+ console.log(`Done!`);
+ });
+
+ console.log('All default fixtures generated!');
+};
diff --git a/apps/stress-test/scripts/utils/getBrowsers.ts b/apps/stress-test/scripts/utils/getBrowsers.ts
new file mode 100644
index 00000000000000..dccf0984333337
--- /dev/null
+++ b/apps/stress-test/scripts/utils/getBrowsers.ts
@@ -0,0 +1,18 @@
+import * as os from 'os';
+
+type GetBrowsers = () => string[];
+
+const getBrowsers: GetBrowsers = () => {
+ // https://github.com/Polymer/tachometer#webdriver-plugins
+ const browsers = ['chrome', 'firefox'];
+
+ if (os.type() === 'Darwin') {
+ browsers.push('safari');
+ } else if (os.type() === 'Windows_NT') {
+ browsers.push('edge');
+ }
+
+ return browsers;
+};
+
+export { getBrowsers };
diff --git a/apps/stress-test/scripts/utils/paths.ts b/apps/stress-test/scripts/utils/paths.ts
new file mode 100644
index 00000000000000..b3a1d5862fa128
--- /dev/null
+++ b/apps/stress-test/scripts/utils/paths.ts
@@ -0,0 +1,46 @@
+import fs from 'fs-extra';
+import { join } from 'path';
+
+export const getPackageRoot: () => string = () => {
+ return process.cwd();
+};
+
+export const getConfigDir: (scenario: string) => string = scenario => {
+ return join(getPackageRoot(), 'benchmarks', scenario, 'config');
+};
+
+export const getResultsDir: (scenario: string) => string = scenario => {
+ return join(getPackageRoot(), 'benchmarks', scenario, 'results');
+};
+
+export const getScenariosDir: () => string = () => {
+ return join(getPackageRoot(), 'scenarios');
+};
+
+export const readDirJson: (dir: string) => string[] = dir => {
+ return fs.readdirSync(dir).filter((file: string) => file.endsWith('.json'));
+};
+
+export const remove: (path: string) => boolean = path => {
+ if (fs.pathExistsSync(path)) {
+ fs.removeSync(path);
+ return true;
+ }
+
+ return false;
+};
+
+export const mkdirp: (path: string) => void = path => {
+ if (!fs.pathExistsSync(path)) {
+ fs.mkdirpSync(path);
+ }
+};
+
+export const ensureClean: (path: string) => void = path => {
+ remove(path);
+ mkdirp(path);
+};
+
+export const getFixturesDir: () => string = () => {
+ return join(getPackageRoot(), 'src', 'fixtures');
+};
diff --git a/apps/stress-test/scripts/utils/server.ts b/apps/stress-test/scripts/utils/server.ts
new file mode 100644
index 00000000000000..f39d44f457a743
--- /dev/null
+++ b/apps/stress-test/scripts/utils/server.ts
@@ -0,0 +1,52 @@
+import { CLIServerOptions } from './types';
+import express from 'express';
+import { join } from 'path';
+import { Server } from 'http';
+import { getPackageRoot } from './paths.js';
+
+const handleGracefulShutdown: (arg: unknown) => void = arg => {
+ console.log('Shutting down...');
+ if (server && server.close) {
+ console.log('Closing HTTP server');
+ server.close();
+ process.off('uncaughtException', handleGracefulShutdown);
+ }
+
+ if (arg instanceof Error) {
+ console.error('Error', arg);
+ process.exit(1);
+ }
+};
+
+let server: Server;
+const startServer: (options: CLIServerOptions) => Promise = (options = {}) => {
+ return new Promise((resolve, reject) => {
+ if (server) {
+ return reject(new Error('Server already running.'));
+ }
+
+ const { root = 'dist', port = 8080 } = options;
+ const rootPath = join(getPackageRoot(), root);
+
+ const app = express();
+ app.use(express.static(rootPath));
+
+ process.on('uncaughtException', handleGracefulShutdown);
+
+ server = app.listen(port, () => {
+ console.log(`Server listening at http://localhost:${port}`);
+ console.log(`Serving directory: ${rootPath}`);
+ resolve();
+ });
+ });
+};
+
+const stopServer = () => {
+ if (!server) {
+ throw new Error('No server running.');
+ }
+
+ server.close();
+};
+
+export { startServer, stopServer };
diff --git a/apps/stress-test/scripts/utils/tachometer.ts b/apps/stress-test/scripts/utils/tachometer.ts
new file mode 100644
index 00000000000000..c4e40789caf559
--- /dev/null
+++ b/apps/stress-test/scripts/utils/tachometer.ts
@@ -0,0 +1,65 @@
+import { ConfigResult } from './types';
+import { spawn } from 'child_process';
+import { ensureClean } from './paths.js';
+
+type RunTachometer = (testConfigs: ConfigResult[]) => void;
+
+const maxAttempts = 3;
+
+const executeCommand = (cmd: string) => {
+ return new Promise((resolve, reject) => {
+ const tach = spawn(cmd, { shell: true });
+
+ tach.stdout.on('data', data => {
+ console.log(data.toString());
+ });
+
+ tach.on('close', code => {
+ resolve(code);
+ });
+
+ tach.on('error', err => {
+ tach.kill();
+ reject(err);
+ });
+ });
+};
+
+const runTachometer: RunTachometer = async testConfigs => {
+ // Everything will be going to the same results folder for a test run
+ const { resultsDir } = testConfigs[0];
+ ensureClean(resultsDir);
+
+ for (const testConfig of testConfigs) {
+ const { testFile, resultsFile } = testConfig;
+ console.log('\n--------------------\n');
+ console.log(`Running test case "${testFile}...`);
+ const cmd = `tach --config ${testFile} --json-file ${resultsFile}`;
+ console.log(`Test command: ${cmd}`);
+
+ let attempt = 0;
+ let done = false;
+ // Make sure we run these in sequence.
+ // We don't want to run several tests at once as they
+ // may unduly influence each other.
+ while (!done) {
+ try {
+ await executeCommand(cmd);
+ console.log(`Test complete! Results written to ${resultsFile}.`);
+ done = true;
+ } catch (err) {
+ if (attempt < maxAttempts) {
+ attempt++;
+ console.error(`Error running Tachometer!`);
+ console.error((err as Error).message);
+ console.log('----------');
+ console.log(`Trying again. Attempt ${attempt} of ${maxAttempts}.`);
+ } else {
+ throw err;
+ }
+ }
+ }
+ }
+};
+
+export default runTachometer;
diff --git a/apps/stress-test/scripts/utils/tree/RandomSelectorTreeNode.ts b/apps/stress-test/scripts/utils/tree/RandomSelectorTreeNode.ts
new file mode 100644
index 00000000000000..3481dc455e8fdf
--- /dev/null
+++ b/apps/stress-test/scripts/utils/tree/RandomSelectorTreeNode.ts
@@ -0,0 +1,192 @@
+import { LCG } from 'random-seedable';
+import { RandomSelector } from '../../../src/shared/css/RandomSelector.js';
+import { Attribute, RandomSelectorTreeNode, TreeNode, TreeNodeCreateCallback } from '../../../src/shared/tree/types';
+
+const rando: LCG = new LCG(4212021);
+
+const coin = (pTrue: number = 0.5): boolean => rando.coin(pTrue);
+const choice = (choices: T[]): T => rando.choice(choices);
+
+const randomSelector = new RandomSelector();
+
+const chances: { [key: string]: number } = {
+ not: 0.05,
+ addClassName: 0.5,
+ addAttribute: 0.2,
+ buildDescendentSelector: 0.5,
+ addSibling: 0.1,
+ addPseudo: 0.1,
+ useDescendantCombinator: 0.2,
+ useNonMatchingSelector: 0.5,
+};
+
+const nonMatchingSelector = '.non-matching-selector';
+
+const buildDescendentSelector = (
+ node: TreeNode | null,
+ selector?: string,
+): string => {
+ if (!node) {
+ return selector ?? '';
+ }
+
+ if (!selector) {
+ selector = choice(getSelectorsFromNode(node, { pseudos: false }));
+ }
+
+ const parent = node.parent;
+
+ if (!parent) {
+ return selector;
+ }
+
+ let selectorChoices = getSelectorsFromNode(parent, { pseudos: false });
+ if (coin(chances.useNonMatchingSelector)) {
+ selectorChoices = [...selectorChoices, nonMatchingSelector];
+ }
+
+ selector = (
+ maybeNot(choice(selectorChoices)) +
+ (coin(chances.useDescendantCombinator) ? ' > ' : ' ') +
+ selector
+ ).trim();
+
+ if (coin(chances.buildDescendentSelector)) {
+ selector = buildDescendentSelector(node.parent, selector);
+ }
+
+ return selector;
+};
+
+const getNodeClassNames = () => {
+ const nodeSelectors = [randomSelector.randomSelector(['class'])];
+ if (coin(chances.addClassName)) {
+ nodeSelectors.push(randomSelector.randomSelector(['class']));
+ }
+
+ return nodeSelectors;
+};
+
+const maybeNot = (selector: string): string => {
+ if (coin(chances.not)) {
+ return `:not(${selector})`;
+ }
+
+ return selector;
+};
+
+const getAttributes = () => {
+ const attributes = [] as Attribute[];
+ if (coin(chances.addAttribute)) {
+ const selector = randomSelector.randomSelector(['attribute-name', 'attribute-value']);
+ const [key, value] = selector.replace(/(\[|\])/g, '').split('=');
+ attributes.push({ key, value, selector });
+ }
+
+ return attributes;
+};
+
+const getSiblingSelectors = (
+ parent: TreeNode | null,
+ node: TreeNode,
+) => {
+ const siblings = [] as string[];
+
+ if (parent && coin(chances.addSibling)) {
+ const combinator = choice(['nth-child', '~', '+']);
+ if (combinator === 'nth-child') {
+ siblings.push(randomSelector.randomSelector(['nth-child']));
+ } else {
+ const sibling = choice(parent.children);
+ if (!sibling) {
+ return siblings;
+ }
+ const siblingSelectorType = choice(['classNames', 'attribute']);
+ let siblingSelector;
+ if (siblingSelectorType === 'classNames') {
+ siblingSelector = choice(sibling.value.classNames) ?? '*';
+ } else {
+ siblingSelector = choice(sibling.value.attributes)?.selector ?? '*';
+ }
+
+ const nodeSelectorType = choice(['classNames', 'attribute']);
+ let nodeSelector;
+ if (nodeSelectorType === 'classNames') {
+ nodeSelector = choice(node.value.classNames) ?? '*';
+ } else {
+ nodeSelector = choice(node.value.attributes)?.selector ?? '*';
+ }
+ siblings.push(`${siblingSelector} ${combinator} ${nodeSelector}`);
+ }
+ }
+
+ return siblings;
+};
+
+const getPseudoSelectors = () => {
+ const pseudo = [] as string[];
+
+ if (coin(chances.addPsuedo)) {
+ pseudo.push(randomSelector.randomSelector(['pseudo-element']));
+ }
+
+ return pseudo;
+};
+
+type IncludeOptions = {
+ [k in keyof RandomSelectorTreeNode]?: boolean;
+};
+const getSelectorsFromNode = (node: TreeNode, include?: IncludeOptions): string[] => {
+ const { classNames = true, attributes = true, siblings = true, pseudos = true } = include ?? {};
+
+ let selectors = [] as string[];
+
+ if (classNames) {
+ selectors = selectors.concat(...node.value.classNames);
+ }
+
+ if (attributes) {
+ selectors = selectors.concat(...node.value.attributes.map(attr => attr.selector));
+ }
+
+ if (siblings) {
+ selectors = selectors.concat(...node.value.siblings);
+ }
+
+ if (pseudos) {
+ selectors = selectors.concat(...node.value.pseudos);
+ }
+
+ return selectors;
+};
+
+export type RandomSelectorTreeCreator = (selectors: string[]) => TreeNodeCreateCallback;
+
+export const selectorTreeCreator: RandomSelectorTreeCreator = selectors => {
+ const createSelectorTree: TreeNodeCreateCallback = (parent, depth, breadth) => {
+ const node = {
+ value: {
+ name: `${depth}-${breadth}`,
+ classNames: getNodeClassNames(),
+ attributes: getAttributes(),
+ siblings: [] as string[],
+ pseudos: getPseudoSelectors(),
+ },
+ children: [],
+ parent,
+ };
+
+ node.value.siblings = getSiblingSelectors(parent, node);
+
+ if (coin(chances.buildDescendentSelector)) {
+ const descendentSelector = buildDescendentSelector(node);
+ selectors.push(descendentSelector);
+ } else {
+ selectors.push(...getSelectorsFromNode(node));
+ }
+
+ return node;
+ };
+
+ return createSelectorTree;
+};
diff --git a/apps/stress-test/scripts/utils/tree/RandomTree.ts b/apps/stress-test/scripts/utils/tree/RandomTree.ts
new file mode 100644
index 00000000000000..6c83d6922b9e2e
--- /dev/null
+++ b/apps/stress-test/scripts/utils/tree/RandomTree.ts
@@ -0,0 +1,99 @@
+import { TreeNode, TreeNodeCreateCallback } from '../../../src/shared/tree/types';
+import { TestTreeFixture } from '../../../src/shared/utils/testUtils.js';
+import { LCG } from 'random-seedable';
+
+const defaultSeed = 4212021;
+
+type TreeParams = {
+ minDepth?: number;
+ maxDepth?: number;
+ minBreadth?: number;
+ maxBreadth?: number;
+ seed?: number;
+ targetSize?: number;
+};
+
+export class RandomTree {
+ private numNodes: number;
+ private minDepth: number;
+ private maxDepth: number;
+ private minBreadth: number;
+ private maxBreadth: number;
+ private targetSize: number;
+
+ private rando: LCG;
+
+ constructor({
+ minDepth = 1,
+ maxDepth = 15,
+ minBreadth = 1,
+ maxBreadth = 15,
+ seed = defaultSeed,
+ targetSize,
+ }: TreeParams = {}) {
+ this.minDepth = Number(minDepth);
+ this.maxDepth = Number(maxDepth);
+ this.minBreadth = Number(minBreadth);
+ this.maxBreadth = Number(maxBreadth);
+ this.targetSize = targetSize ? Number(targetSize) : Infinity;
+
+ this.rando = new LCG(seed);
+ this.numNodes = 0;
+ }
+
+ public build = (createNode: TreeNodeCreateCallback): TreeNode => {
+ this.numNodes = 1;
+ const root = createNode(null, 0, 0);
+ let tree = this._doBuild(createNode, root, 1);
+ while (this.numNodes < this.targetSize) {
+ tree = this._doBuild(createNode, root, 1);
+ }
+
+ return tree;
+ };
+
+ public fromFixture = (fixture: TestTreeFixture['tree'], parent: TreeNode | null = null): TreeNode => {
+ const root: TreeNode = {
+ value: fixture.value as T,
+ children: [],
+ parent,
+ };
+
+ for (const child of fixture.children) {
+ root.children.push(this.fromFixture(child, root));
+ }
+
+ return root;
+ };
+
+ private _randomDepth = (max?: number): number => {
+ return this.rando.randRange(this.minDepth, max ?? this.maxDepth);
+ };
+
+ private _randomBreadth = (max?: number): number => {
+ return this.rando.randRange(this.minBreadth, max ?? this.maxBreadth);
+ };
+
+ private _doBuild = (
+ createNode: TreeNodeCreateCallback,
+ parent: TreeNode,
+ currentDepth: number,
+ currentBreadth: number = this.maxBreadth,
+ ): TreeNode => {
+ const breadth = this._randomBreadth(currentBreadth);
+ const depth = this._randomDepth(Math.max(this.maxDepth - currentDepth, this.minDepth));
+
+ for (let i = 0; i < breadth && this.numNodes < this.targetSize; i++) {
+ this.numNodes++;
+ const node = createNode(parent, currentDepth, breadth);
+
+ parent.children.push(node);
+
+ if (currentDepth < depth && this.numNodes < this.targetSize) {
+ this._doBuild(createNode, node, currentDepth + 1);
+ }
+ }
+
+ return parent;
+ };
+}
diff --git a/apps/stress-test/scripts/utils/types.ts b/apps/stress-test/scripts/utils/types.ts
new file mode 100644
index 00000000000000..2343ce4f0c8a0f
--- /dev/null
+++ b/apps/stress-test/scripts/utils/types.ts
@@ -0,0 +1,108 @@
+export type CLIBuildFixtureOptions = {
+ type: 'tree';
+ name: string;
+ options: { [key: string]: string };
+ clean: boolean;
+};
+
+export type CLIBuildOptions = {
+ griffelMode: GriffelMode;
+ mode: WebpackMode;
+ verbose: boolean;
+ buildDeps: boolean;
+};
+
+export type CLIBuildTestConfigOptions = {
+ scenario: string;
+ testCases: string[];
+ sizes: string[];
+ browsers: string[];
+ sampleSize: number;
+ targets: string[];
+ port: number;
+ testOptions: { [key: string]: string };
+};
+
+export type CLIDevOptions = {
+ griffelMode: GriffelMode;
+ open: boolean;
+ mode: WebpackMode;
+};
+
+export type CLIProcessResultsOptions = {
+ scenario: string;
+};
+
+export type CLIRunOptions = {
+ scenario: string;
+ testCases: string[];
+ sizes: string[];
+ browsers: string[];
+ sampleSize: number;
+ targets: string[];
+ useConfig: boolean;
+ processResults: boolean;
+ port: number;
+ root: string;
+ testOptions: { [key: string]: string };
+};
+
+export type CLIServerOptions = {
+ port?: number;
+ root?: string;
+};
+
+export type CLITachometerOptions = {
+ scenario: string;
+};
+
+export type ConfigResult = {
+ testFile: string;
+ resultsFile: string;
+ configDir: string;
+ resultsDir: string;
+};
+
+export type ProcessedBrowserBenchmarkDifference = {
+ absolute: {
+ low: number;
+ high: number;
+ };
+ percentChange: {
+ low: number;
+ high: number;
+ };
+};
+
+export type TachometerBenchmark = {
+ name: string;
+ mean: number;
+ differences: (ProcessedBrowserBenchmarkDifference | null)[];
+ samples: number[];
+ target: string;
+ testCase: string;
+ size: string;
+};
+
+export type ProcessedBrowserBenchmark = TachometerBenchmark;
+
+export type ProcessedBrowserData = {
+ scenario: string;
+ testCases: {
+ [testCase: string]: {
+ sizes: {
+ [size: string]: {
+ browsers: {
+ [browser: string]: ProcessedBrowserBenchmark[];
+ };
+ };
+ };
+ };
+ };
+};
+
+export type GriffelMode = 'runtime' | 'buildtime' | 'extraction';
+
+export type TestOptions = Record;
+
+export type WebpackMode = 'development' | 'production' | 'none';
diff --git a/apps/stress-test/src/components/v8/StressApp.tsx b/apps/stress-test/src/components/v8/StressApp.tsx
index df6eadaf54f5a0..6e3da22b363d7b 100644
--- a/apps/stress-test/src/components/v8/StressApp.tsx
+++ b/apps/stress-test/src/components/v8/StressApp.tsx
@@ -1,19 +1,19 @@
import * as React from 'react';
-import { getTestParams } from '../../shared/testParams';
-import { performanceMeasure } from '../../shared/performanceMeasure';
+import { getTestOptions } from '../../shared/utils/testOptions';
+import { performanceMeasure } from '../../shared/utils/performanceMeasure';
import { StressContainer } from './StressContainer';
export const StressApp = () => {
- const [numChildren, setNumChildren] = React.useState(getTestParams().numStartNodes);
+ const [numChildren, setNumChildren] = React.useState(Number(getTestOptions().numStartNodes));
React.useEffect(() => {
- const { test, numStartNodes, numAddNodes, numRemoveNodes } = getTestParams();
+ const { test, numStartNodes, numAddNodes, numRemoveNodes } = getTestOptions();
if (test === 'add-node') {
performanceMeasure('stress', 'start');
- setNumChildren(numStartNodes + numAddNodes);
+ setNumChildren(Number(numStartNodes) + Number(numAddNodes));
} else if (test === 'removeNode') {
performanceMeasure('stress', 'start');
- setNumChildren(numStartNodes - numRemoveNodes);
+ setNumChildren(Number(numStartNodes) - Number(numRemoveNodes));
}
}, []);
diff --git a/apps/stress-test/src/components/v8/StressContainer.tsx b/apps/stress-test/src/components/v8/StressContainer.tsx
index 26ef7d3ae0c169..03d06fda61889f 100644
--- a/apps/stress-test/src/components/v8/StressContainer.tsx
+++ b/apps/stress-test/src/components/v8/StressContainer.tsx
@@ -1,8 +1,8 @@
import { mergeStyleSets } from '@fluentui/react';
import * as React from 'react';
-import { injectGlobalCss } from '../../shared/injectStyles';
-import { getTestParams } from '../../shared/testParams';
-import { performanceMeasure } from '../../shared/performanceMeasure';
+import { injectGlobalCss } from '../../shared/css/injectStyles';
+import { getTestOptions } from '../../shared/utils/testOptions';
+import { performanceMeasure } from '../../shared/utils/performanceMeasure';
import { StressComponent } from './StressComponent';
const styles = mergeStyleSets({
@@ -21,7 +21,7 @@ export const StressContainer: React.FC = ({ numChildren =
const [checked, setChecked] = React.useState(false);
React.useEffect(() => {
- const { test } = getTestParams();
+ const { test } = getTestOptions();
if (test === 'mount') {
performanceMeasure('stress', 'start');
} else if (test === 'inject-styles') {
diff --git a/apps/stress-test/src/components/v9/StressApp.tsx b/apps/stress-test/src/components/v9/StressApp.tsx
index 89116b36a7c470..32e02e406e22f3 100644
--- a/apps/stress-test/src/components/v9/StressApp.tsx
+++ b/apps/stress-test/src/components/v9/StressApp.tsx
@@ -1,20 +1,20 @@
import * as React from 'react';
import { FluentProvider, webLightTheme } from '@fluentui/react-components';
-import { getTestParams } from '../../shared/testParams';
-import { performanceMeasure } from '../../shared/performanceMeasure';
+import { getTestOptions } from '../../shared/utils/testOptions';
+import { performanceMeasure } from '../../shared/utils/performanceMeasure';
import { StressContainer } from './StressContainer';
export const StressApp = () => {
- const [numChildren, setNumChildren] = React.useState(getTestParams().numStartNodes);
+ const [numChildren, setNumChildren] = React.useState(Number(getTestOptions().numStartNodes));
React.useEffect(() => {
- const { test, numStartNodes, numAddNodes, numRemoveNodes } = getTestParams();
+ const { test, numStartNodes, numAddNodes, numRemoveNodes } = getTestOptions();
if (test === 'add-node') {
performanceMeasure('stress', 'start');
- setNumChildren(numStartNodes + numAddNodes);
+ setNumChildren(Number(numStartNodes) + Number(numAddNodes));
} else if (test === 'removeNode') {
performanceMeasure('stress', 'start');
- setNumChildren(numStartNodes - numRemoveNodes);
+ setNumChildren(Number(numStartNodes) - Number(numRemoveNodes));
}
}, []);
diff --git a/apps/stress-test/src/components/v9/StressContainer.tsx b/apps/stress-test/src/components/v9/StressContainer.tsx
index 5d5ed9b956fa64..caeb16cd5b7444 100644
--- a/apps/stress-test/src/components/v9/StressContainer.tsx
+++ b/apps/stress-test/src/components/v9/StressContainer.tsx
@@ -1,8 +1,8 @@
import { makeStyles, shorthands } from '@fluentui/react-components';
import * as React from 'react';
-import { injectGlobalCss } from '../../shared/injectStyles';
-import { getTestParams } from '../../shared/testParams';
-import { performanceMeasure } from '../../shared/performanceMeasure';
+import { injectGlobalCss } from '../../shared/css/injectStyles';
+import { getTestOptions } from '../../shared/utils/testOptions';
+import { performanceMeasure } from '../../shared/utils/performanceMeasure';
import { StressComponent } from './StressComponent';
const useStyles = makeStyles({
@@ -21,7 +21,7 @@ export const StressContainer: React.FC = ({ numChildren =
const [checked, setChecked] = React.useState(false);
React.useEffect(() => {
- const { test } = getTestParams();
+ const { test } = getTestOptions();
if (test === 'mount') {
performanceMeasure('stress', 'start');
} else if (test === 'inject-styles') {
diff --git a/apps/stress-test/src/components/wc/stressApp.ts b/apps/stress-test/src/components/wc/stressApp.ts
new file mode 100644
index 00000000000000..6b390c098085cb
--- /dev/null
+++ b/apps/stress-test/src/components/wc/stressApp.ts
@@ -0,0 +1,65 @@
+import { FASTElement, customElement, attr, html, css, repeat, ValueConverter } from '@microsoft/fast-element';
+import { getTestOptions } from '../../shared/utils/testOptions';
+import { performanceMeasure } from '../../shared/utils/performanceMeasure';
+import { StressComponent } from './stressComponent';
+
+const styles = css`
+ :host {
+ width: 100%;
+ height: 100%;
+ }
+`;
+
+const template = html`
+
+ ${repeat(
+ el => new Array(el.numchildren),
+ html` ctx.parent.checked}
+ > `,
+ )}
+
+`;
+
+const numberConverter: ValueConverter = {
+ toView(value: any): string {
+ return String(value);
+ },
+
+ fromView(value: string): number {
+ return Number(value);
+ },
+};
+
+@customElement({
+ name: 'stress-app',
+ template,
+ styles,
+})
+export class StressApp extends FASTElement {
+ @attr({ converter: numberConverter }) public numchildren: number = 10;
+ @attr({ mode: 'boolean' }) public checked: boolean = false;
+
+ public connectedCallback(): void {
+ super.connectedCallback();
+
+ const { test, numStartNodes, numAddNodes, numRemoveNodes } = getTestOptions();
+
+ if (test === 'prop-update') {
+ setTimeout(() => {
+ performanceMeasure('stress', 'start');
+ this.checked = true;
+ }, 2000);
+ } else if (test === 'add-node') {
+ setTimeout(() => {
+ performanceMeasure('stress', 'start');
+ this.numchildren = Number(numStartNodes) + Number(numAddNodes);
+ }, 2000);
+ } else if (test === 'remove-node') {
+ setTimeout(() => {
+ performanceMeasure('stress', 'start');
+ this.numchildren = Number(numStartNodes) - Number(numRemoveNodes);
+ }, 2000);
+ }
+ }
+}
diff --git a/apps/stress-test/src/components/wc/stressApp.wc.ts b/apps/stress-test/src/components/wc/stressApp.wc.ts
deleted file mode 100644
index 30132397f0de0e..00000000000000
--- a/apps/stress-test/src/components/wc/stressApp.wc.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { FASTElement, customElement, attr, html, css, repeat, ValueConverter } from '@microsoft/fast-element';
-import { getTestParams } from '../../shared/testParams';
-import { performanceMeasure } from '../../shared/performanceMeasure';
-import { StressComponent } from './stressComponent.wc';
-
-const styles = css`
- :host {
- width: 100%;
- height: 100%;
- }
-`;
-
-const template = html`
-
- ${repeat(
- el => new Array(el.numchildren),
- html` ctx.parent.checked}
- > `,
- )}
-
-`;
-
-const numberConverter: ValueConverter = {
- toView(value: any): string {
- return String(value);
- },
-
- fromView(value: string): number {
- return Number(value);
- },
-};
-
-@customElement({
- name: 'stress-app',
- template,
- styles,
-})
-export class StressApp extends FASTElement {
- @attr({ converter: numberConverter }) public numchildren: number = 10;
- @attr({ mode: 'boolean' }) public checked: boolean = false;
-
- public connectedCallback(): void {
- super.connectedCallback();
-
- const { test, numStartNodes, numAddNodes, numRemoveNodes } = getTestParams();
-
- if (test === 'prop-update') {
- setTimeout(() => {
- performanceMeasure('stress', 'start');
- this.checked = true;
- }, 2000);
- } else if (test === 'add-node') {
- setTimeout(() => {
- performanceMeasure('stress', 'start');
- this.numchildren = numStartNodes + numAddNodes;
- }, 2000);
- } else if (test === 'remove-node') {
- setTimeout(() => {
- performanceMeasure('stress', 'start');
- this.numchildren = numStartNodes - numRemoveNodes;
- }, 2000);
- }
- }
-}
diff --git a/apps/stress-test/src/components/wc/stressComponent.wc.ts b/apps/stress-test/src/components/wc/stressComponent.ts
similarity index 100%
rename from apps/stress-test/src/components/wc/stressComponent.wc.ts
rename to apps/stress-test/src/components/wc/stressComponent.ts
diff --git a/apps/stress-test/src/components/wc/stressContainer.ts b/apps/stress-test/src/components/wc/stressContainer.ts
new file mode 100644
index 00000000000000..49507d8294c140
--- /dev/null
+++ b/apps/stress-test/src/components/wc/stressContainer.ts
@@ -0,0 +1,64 @@
+import { FASTElement, customElement, html, css } from '@microsoft/fast-element';
+import { injectGlobalCss } from '../../shared/css/injectStyles';
+import { getTestOptions } from '../../shared/utils/testOptions';
+import { performanceMeasure } from '../../shared/utils/performanceMeasure';
+
+const styles = css`
+ :host {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 10px;
+ }
+`;
+
+const template = html` `;
+
+@customElement({
+ name: 'stress-container',
+ template,
+ styles,
+})
+export class StressContainer extends FASTElement {
+ constructor() {
+ super();
+ }
+
+ public connectedCallback(): void {
+ super.connectedCallback();
+
+ const { test } = getTestOptions();
+
+ if (test === 'mount') {
+ performance.mark('start');
+ }
+
+ const slot = this.shadowRoot?.querySelector('slot');
+ slot?.addEventListener(
+ 'slotchange',
+ e => {
+ if (test === 'inject-styles') {
+ setTimeout(() => {
+ performanceMeasure('stress', 'start');
+ injectGlobalCss();
+ }, 2000);
+ return;
+ }
+
+ if (test === 'mount') {
+ // requestPostAnimationFrame polyfill
+ requestAnimationFrame(() => {
+ addEventListener(
+ 'message',
+ () => {
+ performance.measure('stress', 'start');
+ },
+ { once: true },
+ );
+ postMessage('', '*');
+ });
+ }
+ },
+ { once: true },
+ );
+ }
+}
diff --git a/apps/stress-test/src/components/wc/stressContainer.wc.ts b/apps/stress-test/src/components/wc/stressContainer.wc.ts
deleted file mode 100644
index 26a3df9100a5d2..00000000000000
--- a/apps/stress-test/src/components/wc/stressContainer.wc.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import { FASTElement, customElement, html, css } from '@microsoft/fast-element';
-import { injectGlobalCss } from '../../shared/injectStyles';
-import { getTestParams } from '../../shared/testParams';
-import { performanceMeasure } from '../../shared/performanceMeasure';
-
-const styles = css`
- :host {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 10px;
- }
-`;
-
-const template = html` `;
-
-@customElement({
- name: 'stress-container',
- template,
- styles,
-})
-export class StressContainer extends FASTElement {
- constructor() {
- super();
- }
-
- public connectedCallback(): void {
- super.connectedCallback();
-
- const { test } = getTestParams();
-
- if (test === 'mount') {
- performance.mark('start');
- }
-
- const slot = this.shadowRoot?.querySelector('slot');
- slot?.addEventListener(
- 'slotchange',
- e => {
- if (test === 'inject-styles') {
- setTimeout(() => {
- performanceMeasure('stress', 'start');
- injectGlobalCss();
- }, 2000);
- return;
- }
-
- if (test === 'mount') {
- // requestPostAnimationFrame polyfill
- requestAnimationFrame(() => {
- addEventListener(
- 'message',
- () => {
- performance.measure('stress', 'start');
- },
- { once: true },
- );
- postMessage('', '*');
- });
- }
- },
- { once: true },
- );
- }
-}
diff --git a/apps/stress-test/src/fixtures/.gitignore b/apps/stress-test/src/fixtures/.gitignore
new file mode 100644
index 00000000000000..a6c7c2852d068f
--- /dev/null
+++ b/apps/stress-test/src/fixtures/.gitignore
@@ -0,0 +1 @@
+*.js
diff --git a/apps/stress-test/src/pages/v8/stress-tree/index.html b/apps/stress-test/src/pages/v8/stress-tree/index.html
new file mode 100644
index 00000000000000..9ff4031b962193
--- /dev/null
+++ b/apps/stress-test/src/pages/v8/stress-tree/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+ v8: Stress Tree
+
+
+
+
+
diff --git a/apps/stress-test/src/pages/v8/stress-tree/index.tsx b/apps/stress-test/src/pages/v8/stress-tree/index.tsx
new file mode 100644
index 00000000000000..055cce6a621342
--- /dev/null
+++ b/apps/stress-test/src/pages/v8/stress-tree/index.tsx
@@ -0,0 +1,16 @@
+import * as React from 'react';
+import * as ReactDOM from 'react-dom';
+import { initializeIcons, ThemeProvider } from '@fluentui/react';
+import { getTestOptions } from '../../../shared/utils/testOptions';
+import { ReactTest } from '../../../shared/react/ReactTest';
+
+initializeIcons();
+
+const { fixtureName, rendererName, r } = getTestOptions();
+document.title += ' | ' + r ?? rendererName;
+ReactDOM.render(
+
+
+ ,
+ document.getElementById('root'),
+);
diff --git a/apps/stress-test/src/pages/v9/stress-tree/index.html b/apps/stress-test/src/pages/v9/stress-tree/index.html
new file mode 100644
index 00000000000000..5d99e8898db678
--- /dev/null
+++ b/apps/stress-test/src/pages/v9/stress-tree/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+ v9: Stress Tree
+
+
+
+
+
diff --git a/apps/stress-test/src/pages/v9/stress-tree/index.tsx b/apps/stress-test/src/pages/v9/stress-tree/index.tsx
new file mode 100644
index 00000000000000..c8b0001571dc11
--- /dev/null
+++ b/apps/stress-test/src/pages/v9/stress-tree/index.tsx
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import * as ReactDOM from 'react-dom';
+
+import { FluentProvider, webLightTheme } from '@fluentui/react-components';
+import { ReactTest } from '../../../shared/react/ReactTest';
+import { getTestOptions } from '../../../shared/utils/testOptions';
+
+const { fixtureName, rendererName, r } = getTestOptions();
+document.title += ' | ' + r ?? rendererName;
+ReactDOM.render(
+
+
+ ,
+ document.getElementById('root'),
+);
diff --git a/apps/stress-test/src/pages/wc/simple-stress/index.ts b/apps/stress-test/src/pages/wc/simple-stress/index.ts
new file mode 100644
index 00000000000000..ff27e60b08a274
--- /dev/null
+++ b/apps/stress-test/src/pages/wc/simple-stress/index.ts
@@ -0,0 +1,28 @@
+import {
+ fluentButton,
+ fluentDivider,
+ fluentCheckbox,
+ fluentProgressRing,
+ fluentNumberField,
+ provideFluentDesignSystem,
+} from '@fluentui/web-components';
+import { StressApp } from '../../../components/wc/stressApp';
+import { StressComponent } from '../../../components/wc/stressComponent';
+import { StressContainer } from '../../../components/wc/stressContainer';
+import { getTestOptions } from '../../../shared/utils/testOptions';
+
+const testOptions = getTestOptions();
+
+document.querySelector('stress-app')?.setAttribute('numchildren', testOptions.numStartNodes.toString());
+
+provideFluentDesignSystem().register(
+ fluentButton(),
+ fluentDivider(),
+ fluentCheckbox(),
+ fluentProgressRing(),
+ fluentNumberField(),
+);
+
+typeof StressApp;
+typeof StressComponent;
+typeof StressContainer;
diff --git a/apps/stress-test/src/pages/wc/simple-stress/index.wc.ts b/apps/stress-test/src/pages/wc/simple-stress/index.wc.ts
deleted file mode 100644
index 951bb24195e7ae..00000000000000
--- a/apps/stress-test/src/pages/wc/simple-stress/index.wc.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import {
- fluentButton,
- fluentDivider,
- fluentCheckbox,
- fluentProgressRing,
- fluentNumberField,
- provideFluentDesignSystem,
-} from '@fluentui/web-components';
-import { StressApp } from '../../../components/wc/stressApp.wc';
-import { StressComponent } from '../../../components/wc/stressComponent.wc';
-import { StressContainer } from '../../../components/wc/stressContainer.wc';
-import { getTestParams } from '../../../shared/testParams';
-
-const testParams = getTestParams();
-
-document.querySelector('stress-app')?.setAttribute('numchildren', testParams.numStartNodes.toString());
-
-provideFluentDesignSystem().register(
- fluentButton(),
- fluentDivider(),
- fluentCheckbox(),
- fluentProgressRing(),
- fluentNumberField(),
-);
-
-typeof StressApp;
-typeof StressComponent;
-typeof StressContainer;
diff --git a/apps/stress-test/src/pages/wc/stress-tree/index.html b/apps/stress-test/src/pages/wc/stress-tree/index.html
new file mode 100644
index 00000000000000..c20b268b0cb78d
--- /dev/null
+++ b/apps/stress-test/src/pages/wc/stress-tree/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+ WC: Stress Tree
+
+
+
+
+
diff --git a/apps/stress-test/src/pages/wc/stress-tree/index.ts b/apps/stress-test/src/pages/wc/stress-tree/index.ts
new file mode 100644
index 00000000000000..09d14b03269fe6
--- /dev/null
+++ b/apps/stress-test/src/pages/wc/stress-tree/index.ts
@@ -0,0 +1,9 @@
+import { getTestOptions } from '../../../shared/utils/testOptions';
+import { wcTest } from '../../../shared/wc/WCTest';
+
+wcTest().then(testNode => {
+ const { r, rendererName } = getTestOptions();
+ document.title += ' | ' + r ?? rendererName;
+
+ document.querySelector('#app')?.appendChild(testNode!);
+});
diff --git a/apps/stress-test/src/renderers/v8/button.tsx b/apps/stress-test/src/renderers/v8/button.tsx
new file mode 100644
index 00000000000000..74ca75be0686dd
--- /dev/null
+++ b/apps/stress-test/src/renderers/v8/button.tsx
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { DefaultButton } from '@fluentui/react';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v8/checkbox.tsx b/apps/stress-test/src/renderers/v8/checkbox.tsx
new file mode 100644
index 00000000000000..d52032c41e0917
--- /dev/null
+++ b/apps/stress-test/src/renderers/v8/checkbox.tsx
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { Checkbox } from '@fluentui/react';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v8/spinButton.tsx b/apps/stress-test/src/renderers/v8/spinButton.tsx
new file mode 100644
index 00000000000000..1f0db14c83fb58
--- /dev/null
+++ b/apps/stress-test/src/renderers/v8/spinButton.tsx
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { SpinButton } from '@fluentui/react';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v8/stress.tsx b/apps/stress-test/src/renderers/v8/stress.tsx
new file mode 100644
index 00000000000000..4bbd00d65c589d
--- /dev/null
+++ b/apps/stress-test/src/renderers/v8/stress.tsx
@@ -0,0 +1,49 @@
+import * as React from 'react';
+import {
+ mergeStyleSets,
+ DefaultButton,
+ Separator,
+ Checkbox,
+ SpinButton,
+ Spinner,
+ DefaultPalette,
+} from '@fluentui/react';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const styles = mergeStyleSets({
+ stressComponent: {
+ display: 'flex',
+ flexDirection: 'column',
+ rowGap: '10px',
+ maxWidth: '300px',
+ border: `1px solid ${DefaultPalette.neutralLight}`,
+ borderRadius: '4px',
+ padding: '10px',
+ },
+});
+
+export type StressComponentProps = {
+ id?: string;
+ checked: boolean;
+};
+
+const StressComponent: React.FC = ({ id = '', checked }) => {
+ return (
+
+ A button
+
+
+
+
+
+
+
+
+ );
+};
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v8/textField.tsx b/apps/stress-test/src/renderers/v8/textField.tsx
new file mode 100644
index 00000000000000..1d0d855cfae7af
--- /dev/null
+++ b/apps/stress-test/src/renderers/v8/textField.tsx
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { TextField } from '@fluentui/react';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v8/textarea.tsx b/apps/stress-test/src/renderers/v8/textarea.tsx
new file mode 100644
index 00000000000000..2dbd15db5085ea
--- /dev/null
+++ b/apps/stress-test/src/renderers/v8/textarea.tsx
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { TextField } from '@fluentui/react';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/btn/basic.tsx b/apps/stress-test/src/renderers/v9/btn/basic.tsx
new file mode 100644
index 00000000000000..0c30dbc0592ac8
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/btn/basic.tsx
@@ -0,0 +1,10 @@
+import * as React from 'react';
+import { useRootStyles } from './styles';
+import { ReactSelectorTreeComponentRenderer } from '../../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ const rootStyles = useRootStyles();
+ return {`${node.value.name}, ${index}`} ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/btn/idiomatic.tsx b/apps/stress-test/src/renderers/v9/btn/idiomatic.tsx
new file mode 100644
index 00000000000000..8d5e66f36fc800
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/btn/idiomatic.tsx
@@ -0,0 +1,44 @@
+import * as React from 'react';
+import {
+ useButton_unstable,
+ renderButton_unstable,
+ ForwardRefComponent,
+ ButtonProps,
+ ButtonState,
+ mergeClasses,
+ buttonClassNames,
+} from '@fluentui/react-components';
+import { ReactSelectorTreeComponentRenderer } from '../../../shared/react/types';
+import { useRootStyles, useRootDisabledStyles } from './styles';
+
+const useButtonIdiomaticOverrideStyles = (state: ButtonState): ButtonState => {
+ const rootStyles = useRootStyles();
+ const rootDisabledStyles = useRootDisabledStyles();
+
+ const { disabled, disabledFocusable } = state;
+
+ state.root.className = mergeClasses(
+ buttonClassNames.root,
+ rootStyles.base,
+ rootStyles.highContrast,
+ (disabled || disabledFocusable) && rootDisabledStyles.base,
+ (disabled || disabledFocusable) && rootDisabledStyles.highContrast,
+ state.root.className,
+ );
+
+ return state;
+};
+
+const ButtonIdiomaticOverride: ForwardRefComponent = React.forwardRef((props, ref) => {
+ const state = useButton_unstable(props, ref);
+
+ useButtonIdiomaticOverrideStyles(state);
+
+ return renderButton_unstable(state);
+}) as ForwardRefComponent;
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return {`${node.value.name}, ${index}`} ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/btn/override.tsx b/apps/stress-test/src/renderers/v9/btn/override.tsx
new file mode 100644
index 00000000000000..1e4daeeed1d3ee
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/btn/override.tsx
@@ -0,0 +1,42 @@
+import * as React from 'react';
+import { Button, ButtonProps, makeStyles, mergeClasses } from '@fluentui/react-components';
+import { ReactSelectorTreeComponentRenderer } from '../../../shared/react/types';
+import { useRootStyles, useRootDisabledStyles } from './styles';
+
+const useButtonOverridesStyles = makeStyles({
+ base: {
+ fontWeight: 'initial',
+ minWidth: 'initial',
+ fontSize: 'unset',
+ lineHeight: 'normal',
+ },
+});
+
+const ButtonOverride: React.FC = props => {
+ const rootStyles = useRootStyles();
+ const rootDisabledStyles = useRootDisabledStyles();
+ const buttonOverrideStyles = useButtonOverridesStyles();
+
+ const { className, disabled, disabledFocusable } = props;
+ const applyDisabledStyles = disabled || disabledFocusable;
+
+ return (
+
+ );
+};
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return {`${node.value.name}, ${index}`} ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/btn/styles.ts b/apps/stress-test/src/renderers/v9/btn/styles.ts
new file mode 100644
index 00000000000000..84ea73e21d8688
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/btn/styles.ts
@@ -0,0 +1,90 @@
+import { makeStyles, shorthands } from '@fluentui/react-components';
+
+export const useRootStyles = makeStyles({
+ base: {
+ alignItems: 'center',
+ display: 'inline-flex',
+ justifyContent: 'center',
+ verticalAlign: 'middle',
+
+ ...shorthands.margin(0),
+ ...shorthands.padding('4px'),
+ ...shorthands.overflow('hidden'),
+
+ backgroundColor: 'transparent',
+ color: '#000000',
+
+ ...shorthands.border('1px', 'solid', 'transparent'),
+ ...shorthands.borderRadius('4px'),
+
+ fontFamily: 'Arial',
+ fontSize: '14px',
+
+ ':hover': {
+ ...shorthands.border('1px', 'solid', '#000000'),
+ cursor: 'pointer',
+ backgroundColor: 'aliceblue',
+ },
+
+ ':hover:active': {
+ backgroundColor: 'darkgrey',
+ },
+ },
+
+ // High contrast styles
+ highContrast: {
+ '@media (forced-colors: active)': {
+ ':focus': {
+ ...shorthands.borderColor('ButtonText'),
+ },
+
+ ':hover': {
+ backgroundColor: 'HighlightText',
+ ...shorthands.borderColor('Highlight'),
+ color: 'Highlight',
+ forcedColorAdjust: 'none',
+ },
+
+ ':hover:active': {
+ backgroundColor: 'HighlightText',
+ ...shorthands.borderColor('Highlight'),
+ color: 'Highlight',
+ forcedColorAdjust: 'none',
+ },
+ },
+ },
+});
+
+export const useRootDisabledStyles = makeStyles({
+ base: {
+ color: 'lightgrey',
+ cursor: 'not-allowed',
+
+ ':hover,:hover:active': {
+ color: 'lightgrey',
+ cursor: 'not-allowed',
+ },
+ },
+
+ // High contrast styles
+ highContrast: {
+ '@media (forced-colors: active)': {
+ ...shorthands.borderColor('GrayText'),
+ color: 'GrayText',
+
+ ':focus': {
+ ...shorthands.borderColor('GrayText'),
+ },
+
+ ':hover': {
+ ...shorthands.borderColor('GrayText'),
+ color: 'GrayText',
+ },
+
+ ':hover:active': {
+ ...shorthands.borderColor('GrayText'),
+ color: 'GrayText',
+ },
+ },
+ },
+});
diff --git a/apps/stress-test/src/renderers/v9/button.tsx b/apps/stress-test/src/renderers/v9/button.tsx
new file mode 100644
index 00000000000000..729f2b76b6a5e6
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/button.tsx
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { Button } from '@fluentui/react-components';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return {`${node.value.name}, ${index}`} ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/checkbox.tsx b/apps/stress-test/src/renderers/v9/checkbox.tsx
new file mode 100644
index 00000000000000..976203251a208a
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/checkbox.tsx
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { Checkbox } from '@fluentui/react-components';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/input.tsx b/apps/stress-test/src/renderers/v9/input.tsx
new file mode 100644
index 00000000000000..3a36f5c647e3c5
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/input.tsx
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { Input } from '@fluentui/react-components';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/spinButton.tsx b/apps/stress-test/src/renderers/v9/spinButton.tsx
new file mode 100644
index 00000000000000..c32fa1ac1785b7
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/spinButton.tsx
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { SpinButton } from '@fluentui/react-components';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/spinButton/noPseudos.tsx b/apps/stress-test/src/renderers/v9/spinButton/noPseudos.tsx
new file mode 100644
index 00000000000000..c4ffd670a77531
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/spinButton/noPseudos.tsx
@@ -0,0 +1,483 @@
+import * as React from 'react';
+import {
+ useSpinButton_unstable,
+ renderSpinButton_unstable,
+ ForwardRefComponent,
+ SpinButtonProps,
+ SpinButtonState,
+ makeStyles,
+ mergeClasses,
+ shorthands,
+ spinButtonClassNames,
+ tokens,
+ useInputStyles_unstable,
+} from '@fluentui/react-components';
+import { ReactSelectorTreeComponentRenderer } from '../../../shared/react/types';
+
+const spinButtonExtraClassNames = {
+ buttonActive: 'fui-SpinButton__button_active',
+};
+
+const useRootStyles = makeStyles({
+ base: {
+ display: 'inline-grid',
+ gridTemplateColumns: `1fr 24px`,
+ gridTemplateRows: '1fr 1fr',
+ columnGap: tokens.spacingHorizontalXS,
+ rowGap: 0,
+ paddingRight: 0,
+ position: 'relative',
+ // Remove the border styles from react-input
+ ...shorthands.border('0'),
+ isolation: 'isolate',
+
+ // Apply border styles on the ::before pseudo element.
+ // We cannot use ::after since react-input uses that
+ // for the selector styles.
+ // Using the pseudo element allows us to place the border
+ // above content in the component which ensures the buttons
+ // line up visually with the border as expected. Without this
+ // there is a bit of a gap which can become very noticeable
+ // at high zoom or when OS zoom levels are not divisible by 2
+ // (e.g., 150% on Windows in Firefox)
+ // This is most noticeable on the "outline" appearance which is
+ // also the default so it feels worth the extra ceremony to get right.
+ '::before': {
+ content: '""',
+ boxSizing: 'border-box',
+ position: 'absolute',
+ top: 0,
+ right: 0,
+ bottom: 0,
+ left: 0,
+ ...shorthands.borderRadius(tokens.borderRadiusMedium),
+ pointerEvents: 'none',
+ zIndex: 10,
+ },
+
+ '::after': {
+ right: 0,
+ bottom: 0,
+ left: 0,
+ zIndex: 20,
+ },
+ },
+
+ outline: {
+ '::before': {
+ ...shorthands.border('1px', 'solid', tokens.colorNeutralStroke1),
+ borderBottomColor: tokens.colorNeutralStrokeAccessible,
+ },
+ },
+
+ outlineInteractive: {
+ ':hover': {
+ '::before': {
+ ...shorthands.borderColor(tokens.colorNeutralStroke1Hover),
+ borderBottomColor: tokens.colorNeutralStrokeAccessibleHover,
+ },
+ },
+ // DO NOT add a space between the selectors! It changes the behavior of make-styles.
+ ':active,:focus-within': {
+ '::before': {
+ ...shorthands.borderColor(tokens.colorNeutralStroke1Pressed),
+ borderBottomColor: tokens.colorNeutralStrokeAccessiblePressed,
+ },
+ },
+ },
+
+ underline: {
+ '::before': {
+ ...shorthands.borderRadius(0), // corners look strange if rounded
+ ...shorthands.borderBottom('1px', 'solid', tokens.colorNeutralStrokeAccessible),
+ },
+ },
+
+ underlineInteractive: {
+ ':hover': {
+ '::before': {
+ borderBottomColor: tokens.colorNeutralStrokeAccessibleHover,
+ },
+ },
+ // DO NOT add a space between the selectors! It changes the behavior of make-styles.
+ ':active,:focus-within': {
+ '::before': {
+ borderBottomColor: tokens.colorNeutralStrokeAccessiblePressed,
+ },
+ },
+ },
+
+ filled: {
+ '::before': {
+ ...shorthands.border('1px', 'solid', tokens.colorTransparentStroke),
+ },
+ },
+
+ filledInteractive: {
+ // DO NOT add a space between the selectors! It changes the behavior of make-styles.
+ ':hover,:focus-within': {
+ '::before': {
+ // also handles pressed border color (:active)
+ ...shorthands.borderColor(tokens.colorTransparentStrokeInteractive),
+ },
+ },
+ },
+
+ disabled: {
+ '@media (forced-colors: active)': {
+ ...shorthands.borderColor('GrayText'),
+ },
+ },
+
+ outlineDisabled: {
+ '::before': {
+ ...shorthands.border('1px', 'solid', tokens.colorNeutralStrokeDisabled),
+ ...shorthands.borderRadius(tokens.borderRadiusMedium), // because underline doesn't usually have a radius
+ },
+ },
+
+ underlineDisabled: {
+ '::before': {
+ ...shorthands.borderBottom('1px', 'solid', tokens.colorTransparentStrokeDisabled),
+ },
+ },
+
+ filledDisabled: {
+ '::before': {
+ ...shorthands.border('1px', 'solid', tokens.colorTransparentStrokeDisabled),
+ },
+ },
+});
+
+const useInputStyles = makeStyles({
+ base: {
+ gridColumnStart: '1',
+ gridColumnEnd: '2',
+ gridRowStart: '1',
+ gridRowEnd: '3',
+ outlineStyle: 'none',
+ ...shorthands.padding(0),
+ },
+});
+
+const useButtonStyles = makeStyles({
+ base: {
+ display: 'inline-flex',
+ width: '24px',
+ alignItems: 'center',
+ justifyContent: 'center',
+ ...shorthands.border(0),
+ position: 'absolute',
+
+ outlineStyle: 'none',
+ height: '100%',
+
+ ':enabled:hover': {
+ cursor: 'pointer',
+ },
+
+ ':active': {
+ outlineStyle: 'none',
+ },
+
+ ':disabled': {
+ cursor: 'not-allowed',
+ },
+ },
+
+ incrementButton: {
+ gridColumnStart: '2',
+ gridColumnEnd: '3',
+ gridRowStart: '1',
+ gridRowEnd: '2',
+ ...shorthands.borderRadius(0, tokens.borderRadiusMedium, 0, 0),
+ },
+
+ // TODO: revisit these padding numbers for aligning the icon.
+ // Padding values aren't perfect.
+ // The icon doesn't align perfectly with the Figma designs.
+ // It's set in a 16x16px square but the artwork is inset from that
+ // so I've had to compute the numbers by handle.
+ // Additionally the design uses fractional values so these are
+ // rounded to the nearest integer.
+ incrementButtonSmall: {
+ ...shorthands.padding('3px', '5px', '0px', '5px'),
+ },
+
+ incrementButtonMedium: {
+ ...shorthands.padding('4px', '5px', '1px', '5px'),
+ },
+
+ decrementButton: {
+ gridColumnStart: '2',
+ gridColumnEnd: '3',
+ gridRowStart: '2',
+ gridRowEnd: '3',
+ ...shorthands.borderRadius(0, 0, tokens.borderRadiusMedium, 0),
+ },
+
+ decrementButtonSmall: {
+ ...shorthands.padding('0px', '5px', '3px', '5px'),
+ },
+
+ decrementButtonMedium: {
+ ...shorthands.padding('1px', '5px', '4px', '5px'),
+ },
+
+ outline: {
+ backgroundColor: 'transparent',
+ color: tokens.colorNeutralForeground3,
+ ':enabled': {
+ ':hover': {
+ color: tokens.colorNeutralForeground3Hover,
+ backgroundColor: tokens.colorSubtleBackgroundHover,
+ },
+ ':active': {
+ color: tokens.colorNeutralForeground3Pressed,
+ backgroundColor: tokens.colorSubtleBackgroundPressed,
+ },
+ [`&.${spinButtonExtraClassNames.buttonActive}`]: {
+ color: tokens.colorNeutralForeground3Pressed,
+ backgroundColor: tokens.colorSubtleBackgroundPressed,
+ },
+ },
+ ':disabled': {
+ color: tokens.colorNeutralForegroundDisabled,
+ },
+ },
+
+ underline: {
+ backgroundColor: 'transparent',
+ color: tokens.colorNeutralForeground3,
+ ':enabled': {
+ ':hover': {
+ color: tokens.colorNeutralForeground3Hover,
+ backgroundColor: tokens.colorSubtleBackgroundHover,
+ },
+ ':active': {
+ color: tokens.colorNeutralForeground3Pressed,
+ backgroundColor: tokens.colorSubtleBackgroundPressed,
+ },
+ [`&.${spinButtonExtraClassNames.buttonActive}`]: {
+ color: tokens.colorNeutralForeground3Pressed,
+ backgroundColor: tokens.colorSubtleBackgroundPressed,
+ },
+ },
+ ':disabled': {
+ color: tokens.colorNeutralForegroundDisabled,
+ },
+ },
+ 'filled-darker': {
+ backgroundColor: 'transparent',
+ color: tokens.colorNeutralForeground3,
+
+ ':enabled': {
+ ':hover': {
+ color: tokens.colorNeutralForeground3Hover,
+ backgroundColor: tokens.colorNeutralBackground3Hover,
+ },
+ ':active': {
+ color: tokens.colorNeutralForeground3Pressed,
+ backgroundColor: tokens.colorNeutralBackground3Pressed,
+ },
+ [`&.${spinButtonExtraClassNames.buttonActive}`]: {
+ color: tokens.colorNeutralForeground3Pressed,
+ backgroundColor: tokens.colorNeutralBackground3Pressed,
+ },
+ },
+ ':disabled': {
+ color: tokens.colorNeutralForegroundDisabled,
+ },
+ },
+ 'filled-lighter': {
+ backgroundColor: 'transparent',
+ color: tokens.colorNeutralForeground3,
+
+ ':enabled': {
+ ':hover': {
+ color: tokens.colorNeutralForeground3Hover,
+ backgroundColor: tokens.colorNeutralBackground1Hover,
+ },
+ [`:active,&.${spinButtonExtraClassNames.buttonActive}`]: {
+ color: tokens.colorNeutralForeground3Pressed,
+ backgroundColor: tokens.colorNeutralBackground1Pressed,
+ },
+ },
+ ':disabled': {
+ color: tokens.colorNeutralForegroundDisabled,
+ },
+ },
+});
+
+// Cannot just disable button as they need to remain
+// exposed to ATs like screen readers.
+const useButtonDisabledStyles = makeStyles({
+ base: {
+ cursor: 'not-allowed',
+
+ ':hover': {
+ cursor: 'not-allowed',
+ },
+ },
+
+ outline: {
+ color: tokens.colorNeutralForegroundDisabled,
+ ':enabled': {
+ ':hover': {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ ':active': {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ [`&.${spinButtonExtraClassNames.buttonActive}`]: {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ },
+ },
+
+ underline: {
+ color: tokens.colorNeutralForegroundDisabled,
+ ':enabled': {
+ ':hover': {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ ':active': {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ [`&.${spinButtonExtraClassNames.buttonActive}`]: {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ },
+ },
+
+ 'filled-darker': {
+ color: tokens.colorNeutralForegroundDisabled,
+ ':enabled': {
+ ':hover': {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ ':active': {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ [`&.${spinButtonExtraClassNames.buttonActive}`]: {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ },
+ },
+
+ 'filled-lighter': {
+ color: tokens.colorNeutralForegroundDisabled,
+ ':enabled': {
+ ':hover': {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ ':active': {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ [`&.${spinButtonExtraClassNames.buttonActive}`]: {
+ color: tokens.colorNeutralForegroundDisabled,
+ backgroundColor: 'transparent',
+ },
+ },
+ },
+});
+
+/**
+ * Apply styling to the SpinButton slots based on the state
+ */
+export const useSpinButtonStyles_unstable = (state: SpinButtonState): SpinButtonState => {
+ const { appearance, atBound, spinState, size } = state;
+ const disabled = state.input.disabled;
+ const filled = appearance.startsWith('filled');
+
+ const rootStyles = useRootStyles();
+ const buttonStyles = useButtonStyles();
+ const buttonDisabledStyles = useButtonDisabledStyles();
+ const inputStyles = useInputStyles();
+
+ // Grab the root className here so we can be sure to merge is last
+ const rootClassName = state.root.className;
+ state.root.className = undefined;
+ // Reuse react-input's styles without re-using the Input component.
+ useInputStyles_unstable({
+ size,
+ appearance,
+ input: state.input,
+ root: state.root,
+ components: {
+ root: 'span',
+ input: 'input',
+ contentBefore: 'span',
+ contentAfter: 'span',
+ },
+ });
+
+ state.root.className = mergeClasses(
+ state.root.className, // Get the classes from useInputStyles_unstable
+ spinButtonClassNames.root,
+ rootStyles.base,
+ appearance === 'outline' && rootStyles.outline,
+ appearance === 'underline' && rootStyles.underline,
+ filled && rootStyles.filled,
+ !disabled && appearance === 'outline' && rootStyles.outlineInteractive,
+ !disabled && appearance === 'underline' && rootStyles.underlineInteractive,
+ !disabled && filled && rootStyles.filledInteractive,
+ disabled && rootStyles.disabled,
+ disabled && appearance === 'outline' && rootStyles.outlineDisabled,
+ disabled && appearance === 'underline' && rootStyles.underlineDisabled,
+ disabled && filled && rootStyles.filledDisabled,
+ rootClassName, // Make sure any original class name is applied last
+ );
+
+ state.incrementButton.className = mergeClasses(
+ spinButtonClassNames.incrementButton,
+ spinState === 'up' && `${spinButtonExtraClassNames.buttonActive}`,
+ buttonStyles.base,
+ buttonStyles.incrementButton,
+ buttonStyles[appearance],
+ size === 'small' ? buttonStyles.incrementButtonSmall : buttonStyles.incrementButtonMedium,
+ (atBound === 'max' || atBound === 'both') && buttonDisabledStyles.base,
+ (atBound === 'max' || atBound === 'both') && buttonDisabledStyles[appearance],
+ state.incrementButton.className,
+ );
+ state.decrementButton.className = mergeClasses(
+ spinButtonClassNames.decrementButton,
+ spinState === 'down' && `${spinButtonExtraClassNames.buttonActive}`,
+ buttonStyles.base,
+ buttonStyles.decrementButton,
+ buttonStyles[appearance],
+ size === 'small' ? buttonStyles.decrementButtonSmall : buttonStyles.decrementButtonMedium,
+ (atBound === 'min' || atBound === 'both') && buttonDisabledStyles.base,
+ (atBound === 'min' || atBound === 'both') && buttonDisabledStyles[appearance],
+ state.decrementButton.className,
+ );
+
+ state.input.className = mergeClasses(spinButtonClassNames.input, state.input.className, inputStyles.base);
+
+ return state;
+};
+
+const SpinButtonNoPseudos: ForwardRefComponent = React.forwardRef((props, ref) => {
+ const state = useSpinButton_unstable(props, ref);
+
+ useSpinButtonStyles_unstable(state);
+
+ return renderSpinButton_unstable(state);
+}) as ForwardRefComponent;
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/spinButton/vanilla.tsx b/apps/stress-test/src/renderers/v9/spinButton/vanilla.tsx
new file mode 100644
index 00000000000000..02451c886d9f03
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/spinButton/vanilla.tsx
@@ -0,0 +1,8 @@
+import * as React from 'react';
+import { ReactSelectorTreeComponentRenderer } from '../../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/stress.tsx b/apps/stress-test/src/renderers/v9/stress.tsx
new file mode 100644
index 00000000000000..3915d1cee00489
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/stress.tsx
@@ -0,0 +1,54 @@
+import * as React from 'react';
+import {
+ makeStyles,
+ tokens,
+ shorthands,
+ Button,
+ Divider,
+ Checkbox,
+ Label,
+ SpinButton,
+ Spinner,
+} from '@fluentui/react-components';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const useStyles = makeStyles({
+ stressComponent: {
+ display: 'flex',
+ flexDirection: 'column',
+ rowGap: '10px',
+ maxWidth: '300px',
+ ...shorthands.border('1px', 'solid', tokens.colorNeutralStroke1),
+ ...shorthands.borderRadius(tokens.borderRadiusMedium),
+ ...shorthands.padding('10px'),
+ },
+});
+
+export type StressComponentProps = {
+ id?: string;
+ checked: boolean;
+};
+
+const StressComponent: React.FC = ({ id = '', checked }) => {
+ const styles = useStyles();
+
+ return (
+
+
A button
+
+
Check me out
+
+
+
+
+
+
+
+ );
+};
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/textarea.tsx b/apps/stress-test/src/renderers/v9/textarea.tsx
new file mode 100644
index 00000000000000..74e67548d06c9f
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/textarea.tsx
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { Textarea } from '@fluentui/react-components';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/textarea/noPseudo.tsx b/apps/stress-test/src/renderers/v9/textarea/noPseudo.tsx
new file mode 100644
index 00000000000000..29e3fd460ae378
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/textarea/noPseudo.tsx
@@ -0,0 +1,282 @@
+import * as React from 'react';
+import {
+ useTextarea_unstable,
+ renderTextarea_unstable,
+ ForwardRefComponent,
+ TextareaProps,
+ TextareaState,
+ makeStyles,
+ mergeClasses,
+ shorthands,
+ tokens,
+ typographyStyles,
+ textareaClassNames,
+} from '@fluentui/react-components';
+import { ReactSelectorTreeComponentRenderer } from '../../../shared/react/types';
+
+const textareaHeight = {
+ small: '24px',
+ medium: '32px',
+ large: '40px',
+};
+
+/**
+ * Styles for the root(wrapper) slot
+ */
+const useRootStyles = makeStyles({
+ base: {
+ display: 'inline-flex',
+ boxSizing: 'border-box',
+ position: 'relative',
+ // Padding needed so the focus indicator does not overlap the resize handle, this should match focus indicator size.
+ ...shorthands.padding('0', '0', tokens.strokeWidthThick, '0'),
+ ...shorthands.margin('0'),
+ ...shorthands.borderRadius(tokens.borderRadiusMedium),
+ },
+
+ disabled: {
+ backgroundColor: tokens.colorTransparentBackground,
+ ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStrokeDisabled),
+ [`& > textarea`]: {
+ cursor: 'not-allowed',
+ '::placeholder': {
+ color: tokens.colorNeutralForegroundDisabled,
+ },
+ },
+ '@media (forced-colors: active)': {
+ ...shorthands.borderColor('GrayText'),
+ },
+ },
+
+ interactive: {
+ // This is all for the bottom focus border.
+ // It's supposed to be 2px flat all the way across and match the radius of the field's corners.
+ // '::after': {
+ // boxSizing: 'border-box',
+ // content: '""',
+ // position: 'absolute',
+ // left: '-1px',
+ // bottom: '-1px',
+ // right: '-1px',
+
+ // // Maintaining the correct corner radius:
+ // // Use the whole border-radius as the height and only put radii on the bottom corners.
+ // // (Otherwise the radius would be automatically reduced to fit available space.)
+ // // max() ensures the focus border still shows up even if someone sets tokens.borderRadiusMedium to 0.
+ // height: `max(${tokens.strokeWidthThick}, ${tokens.borderRadiusMedium})`,
+ // borderBottomLeftRadius: tokens.borderRadiusMedium,
+ // borderBottomRightRadius: tokens.borderRadiusMedium,
+
+ // // Flat 2px border:
+ // // By default borderBottom will cause little "horns" on the ends. The clipPath trims them off.
+ // // (This could be done without trimming using `background: linear-gradient(...)`, but using
+ // // borderBottom makes it easier for people to override the color if needed.)
+ // ...shorthands.borderBottom(tokens.strokeWidthThick, 'solid', tokens.colorCompoundBrandStroke),
+ // clipPath: `inset(calc(100% - ${tokens.strokeWidthThick}) 0 0 0)`,
+
+ // // Animation for focus OUT
+ // transform: 'scaleX(0)',
+ // transitionProperty: 'transform',
+ // transitionDuration: tokens.durationUltraFast,
+ // transitionDelay: tokens.curveAccelerateMid,
+
+ // '@media screen and (prefers-reduced-motion: reduce)': {
+ // transitionDuration: '0.01ms',
+ // transitionDelay: '0.01ms',
+ // },
+ // },
+ // ':focus-within::after': {
+ // // Animation for focus IN
+ // transform: 'scaleX(1)',
+ // transitionProperty: 'transform',
+ // transitionDuration: tokens.durationNormal,
+ // transitionDelay: tokens.curveDecelerateMid,
+
+ // '@media screen and (prefers-reduced-motion: reduce)': {
+ // transitionDuration: '0.01ms',
+ // transitionDelay: '0.01ms',
+ // },
+ // },
+ // ':focus-within:active::after': {
+ // // This is if the user clicks the field again while it's already focused
+ // borderBottomColor: tokens.colorCompoundBrandStrokePressed,
+ // },
+ ':focus-within': {
+ outlineWidth: tokens.strokeWidthThick,
+ outlineStyle: 'solid',
+ outlineColor: 'transparent',
+ },
+ },
+
+ filled: {
+ ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorTransparentStroke),
+ ':hover,:focus-within': {
+ ...shorthands.borderColor(tokens.colorTransparentStrokeInteractive),
+ },
+ },
+ 'filled-darker': {
+ backgroundColor: tokens.colorNeutralBackground3,
+ },
+ 'filled-lighter': {
+ backgroundColor: tokens.colorNeutralBackground1,
+ },
+
+ 'filled-darker-shadow': {
+ backgroundColor: tokens.colorNeutralBackground3,
+ ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorTransparentStrokeInteractive),
+ boxShadow: tokens.shadow2,
+ },
+
+ 'filled-lighter-shadow': {
+ backgroundColor: tokens.colorNeutralBackground1,
+ ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorTransparentStrokeInteractive),
+ boxShadow: tokens.shadow2,
+ },
+
+ outline: {
+ backgroundColor: tokens.colorNeutralBackground1,
+ ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStroke1),
+ borderBottomColor: tokens.colorNeutralStrokeAccessible,
+ },
+ outlineInteractive: {
+ ':hover': {
+ ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStroke1Hover),
+ borderBottomColor: tokens.colorNeutralStrokeAccessibleHover,
+ },
+
+ ':active': {
+ ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStroke1Pressed),
+ borderBottomColor: tokens.colorNeutralStrokeAccessiblePressed,
+ },
+
+ ':focus-within': {
+ ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStroke1),
+ borderBottomColor: tokens.colorCompoundBrandStroke,
+ },
+ },
+});
+
+/**
+ * Styles for the textarea slot
+ */
+const useTextareaStyles = makeStyles({
+ base: {
+ ...shorthands.borderStyle('none'),
+ ...shorthands.margin('0'),
+ backgroundColor: 'transparent',
+ boxSizing: 'border-box',
+ color: tokens.colorNeutralForeground1,
+ flexGrow: 1,
+ fontFamily: tokens.fontFamilyBase,
+ height: '100%',
+ maxHeight: '100%',
+
+ '::placeholder': {
+ color: tokens.colorNeutralForeground4,
+ opacity: 1,
+ },
+
+ '::selection': {
+ color: tokens.colorNeutralForegroundInverted,
+ backgroundColor: tokens.colorNeutralBackgroundInverted,
+ },
+
+ outlineStyle: 'none', // disable default browser outline
+ },
+
+ // The padding style adds both content and regular padding (from design spec), this is because the handle is not
+ // affected by changing the padding of the root.
+ small: {
+ height: textareaHeight.small,
+ minHeight: '40px',
+ ...shorthands.padding(
+ tokens.spacingVerticalXS,
+ `calc(${tokens.spacingHorizontalSNudge} + ${tokens.spacingHorizontalXXS})`,
+ ),
+ ...typographyStyles.caption1,
+ },
+ medium: {
+ height: textareaHeight.medium,
+ minHeight: '52px',
+ ...shorthands.padding(
+ tokens.spacingVerticalSNudge,
+ `calc(${tokens.spacingHorizontalMNudge} + ${tokens.spacingHorizontalXXS})`,
+ ),
+ ...typographyStyles.body1,
+ },
+ large: {
+ height: textareaHeight.large,
+ minHeight: '64px',
+ ...shorthands.padding(
+ tokens.spacingVerticalS,
+ `calc(${tokens.spacingHorizontalM} + ${tokens.spacingHorizontalXXS})`,
+ ),
+ fontSize: tokens.fontSizeBase400,
+ lineHeight: tokens.lineHeightBase400,
+ },
+});
+
+/**
+ * Styles for the textarea's resize property
+ */
+const useTextareaResizeStyles = makeStyles({
+ none: {
+ resize: 'none',
+ },
+ both: {
+ resize: 'both',
+ },
+ horizontal: {
+ resize: 'horizontal',
+ },
+ vertical: {
+ resize: 'vertical',
+ },
+});
+
+/**
+ * Apply styling to the Textarea slots based on the state
+ */
+export const useTextareaStyles_unstable = (state: TextareaState): TextareaState => {
+ const { size, appearance, resize } = state;
+ const disabled = state.textarea.disabled;
+ const filled = appearance.startsWith('filled');
+
+ const rootStyles = useRootStyles();
+ state.root.className = mergeClasses(
+ textareaClassNames.root,
+ rootStyles.base,
+ rootStyles[appearance],
+ filled && rootStyles.filled,
+ disabled && rootStyles.disabled,
+ !disabled && rootStyles.interactive,
+ !disabled && appearance === 'outline' && rootStyles.outlineInteractive,
+ state.root.className,
+ );
+
+ const textareaStyles = useTextareaStyles();
+ const textareaResizeStyles = useTextareaResizeStyles();
+ state.textarea.className = mergeClasses(
+ textareaClassNames.textarea,
+ textareaStyles.base,
+ textareaStyles[size],
+ textareaResizeStyles[resize],
+ state.textarea.className,
+ );
+
+ return state;
+};
+
+const TextareaNoPseudo: ForwardRefComponent = React.forwardRef((props, ref) => {
+ const state = useTextarea_unstable(props, ref);
+
+ useTextareaStyles_unstable(state);
+
+ return renderTextarea_unstable(state);
+}) as ForwardRefComponent;
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/v9/vanillaButton.tsx b/apps/stress-test/src/renderers/v9/vanillaButton.tsx
new file mode 100644
index 00000000000000..eb22f77fd39b8d
--- /dev/null
+++ b/apps/stress-test/src/renderers/v9/vanillaButton.tsx
@@ -0,0 +1,8 @@
+import * as React from 'react';
+import { ReactSelectorTreeComponentRenderer } from '../../shared/react/types';
+
+const componentRenderer: ReactSelectorTreeComponentRenderer = (node, depth, index) => {
+ return {`${node.value.name}, ${index}`} ;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/wc/btn/vanillaButton.ts b/apps/stress-test/src/renderers/wc/btn/vanillaButton.ts
new file mode 100644
index 00000000000000..bc1aaeb6b0c570
--- /dev/null
+++ b/apps/stress-test/src/renderers/wc/btn/vanillaButton.ts
@@ -0,0 +1,11 @@
+import { DOMSelectorTreeComponentRenderer } from '../../../shared/vanilla/types';
+
+const componentRenderer: DOMSelectorTreeComponentRenderer = (node, depth, index) => {
+ const btn = document.createElement('button');
+ btn.innerHTML = node.value.name + ' ' + index;
+ btn.classList.add('random-classname-6eb7ea7');
+
+ return btn;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/wc/btn/wcBasicButton.ts b/apps/stress-test/src/renderers/wc/btn/wcBasicButton.ts
new file mode 100644
index 00000000000000..0e2d2b2ac22e7d
--- /dev/null
+++ b/apps/stress-test/src/renderers/wc/btn/wcBasicButton.ts
@@ -0,0 +1,101 @@
+import { DOMSelectorTreeComponentRenderer } from '../../../shared/vanilla/types';
+
+declare global {
+ interface Document {
+ // eslint-disable-next-line
+ adoptedStyleSheets: any[];
+ }
+
+ interface ShadowRoot {
+ // eslint-disable-next-line
+ adoptedStyleSheets: any[];
+ }
+
+ interface CSSStyleSheet {
+ replaceSync: (css: string) => void;
+ }
+}
+
+const sheet = new CSSStyleSheet();
+sheet.replaceSync(
+ `
+ button {
+ align-items: center;
+ display: inline-flex;
+ justify-content: center;
+ vertical-align: middle;
+
+ margin: 0;
+ padding: 4px;
+ overflow: hidden;
+
+ background-color: transparent;
+ color: #000000;
+
+ border: 1px solid transparent;
+ border-radius: 4px;
+
+ font-family: 'Arial';
+ font-size: 14px;
+ }
+
+ button:hover {
+ border: 1px solid #000000;
+ cursor: pointer;
+ background-color: aliceblue;
+ }
+
+ button:hover:active {
+ background-color: darkgrey;
+ }
+
+ @media (forced-colors: active) {
+ button:focus {
+ border-color: ButtonText;
+ }
+
+ button:hover {
+ background-color: HighlightText;
+ border-color: Highlight;
+ color: Highlight;
+ forced-color-adjust: none;
+ }
+
+ button:hover:active {
+ background-color: HighlightText;
+ border-color: Highlight;
+ color: Highlight;
+ forced-color-adjust: none;
+ }
+ }
+`,
+);
+
+document.adoptedStyleSheets = [sheet];
+
+const template = document.createElement('template');
+template.innerHTML = `
+
+
+ `;
+
+class WCBasicButton extends HTMLElement {
+ constructor() {
+ super();
+
+ const root = this.attachShadow({ mode: 'open' });
+ root.adoptedStyleSheets = [sheet];
+ root.appendChild(template.content.cloneNode(true));
+ }
+}
+
+window.customElements.define('wc-basic-button', WCBasicButton);
+
+const componentRenderer: DOMSelectorTreeComponentRenderer = (node, depth, index) => {
+ const btn = document.createElement('wc-basic-button');
+ btn.innerHTML = node.value.name + ' ' + index;
+
+ return btn;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/wc/button.ts b/apps/stress-test/src/renderers/wc/button.ts
new file mode 100644
index 00000000000000..f9712944c3ef90
--- /dev/null
+++ b/apps/stress-test/src/renderers/wc/button.ts
@@ -0,0 +1,13 @@
+import { fluentButton, provideFluentDesignSystem } from '@fluentui/web-components';
+import { DOMSelectorTreeComponentRenderer } from '../../shared/vanilla/types';
+
+provideFluentDesignSystem().register(fluentButton());
+
+const componentRenderer: DOMSelectorTreeComponentRenderer = (node, depth, index) => {
+ const btn = document.createElement('fluent-button') as HTMLElement;
+ btn.textContent = node.value.name + ' ' + index;
+
+ return btn;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/wc/checkbox.ts b/apps/stress-test/src/renderers/wc/checkbox.ts
new file mode 100644
index 00000000000000..7cdb461e988d1e
--- /dev/null
+++ b/apps/stress-test/src/renderers/wc/checkbox.ts
@@ -0,0 +1,13 @@
+import { fluentCheckbox, provideFluentDesignSystem } from '@fluentui/web-components';
+import { DOMSelectorTreeComponentRenderer } from '../../shared/vanilla/types';
+
+provideFluentDesignSystem().register(fluentCheckbox());
+
+const componentRenderer: DOMSelectorTreeComponentRenderer = (node, depth, index) => {
+ const checkbox = document.createElement('fluent-checkbox') as HTMLInputElement;
+ checkbox.innerHTML = node.value.name + ' ' + index;
+
+ return checkbox;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/wc/numberField.ts b/apps/stress-test/src/renderers/wc/numberField.ts
new file mode 100644
index 00000000000000..cf42f26495813b
--- /dev/null
+++ b/apps/stress-test/src/renderers/wc/numberField.ts
@@ -0,0 +1,13 @@
+import { fluentNumberField, NumberField, provideFluentDesignSystem } from '@fluentui/web-components';
+import { DOMSelectorTreeComponentRenderer } from '../../shared/vanilla/types';
+
+provideFluentDesignSystem().register(fluentNumberField());
+
+const componentRenderer: DOMSelectorTreeComponentRenderer = (node, depth, index) => {
+ const numberField = document.createElement('fluent-number-field') as NumberField;
+ numberField.value = node.value.name + ' ' + index;
+
+ return numberField;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/wc/numberField/vanilla.ts b/apps/stress-test/src/renderers/wc/numberField/vanilla.ts
new file mode 100644
index 00000000000000..979aacdcb51e67
--- /dev/null
+++ b/apps/stress-test/src/renderers/wc/numberField/vanilla.ts
@@ -0,0 +1,11 @@
+import { DOMSelectorTreeComponentRenderer } from '../../../shared/vanilla/types';
+
+const componentRenderer: DOMSelectorTreeComponentRenderer = (node, depth, index) => {
+ const input = document.createElement('input');
+ input.type = 'number';
+ input.value = node.value.name + ' ' + index;
+
+ return input;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/wc/stress.ts b/apps/stress-test/src/renderers/wc/stress.ts
new file mode 100644
index 00000000000000..4738cec5a4e2ab
--- /dev/null
+++ b/apps/stress-test/src/renderers/wc/stress.ts
@@ -0,0 +1,11 @@
+import { StressComponent } from '../../components/wc/stressComponent';
+import { DOMSelectorTreeComponentRenderer } from '../../shared/vanilla/types';
+
+typeof StressComponent;
+
+const componentRenderer: DOMSelectorTreeComponentRenderer = (node, depth, index) => {
+ const stressComp = document.createElement('stress-component');
+ return stressComp;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/renderers/wc/textField.ts b/apps/stress-test/src/renderers/wc/textField.ts
new file mode 100644
index 00000000000000..88c1e67dbe5df6
--- /dev/null
+++ b/apps/stress-test/src/renderers/wc/textField.ts
@@ -0,0 +1,13 @@
+import { fluentTextField, provideFluentDesignSystem } from '@fluentui/web-components';
+import { DOMSelectorTreeComponentRenderer } from '../../shared/vanilla/types';
+
+provideFluentDesignSystem().register(fluentTextField());
+
+const componentRenderer: DOMSelectorTreeComponentRenderer = (node, depth, index) => {
+ const field = document.createElement('fluent-text-field') as HTMLInputElement;
+ field.value = node.value.name + ' ' + index;
+
+ return field;
+};
+
+export default componentRenderer;
diff --git a/apps/stress-test/src/shared/Element.tsx b/apps/stress-test/src/shared/Element.tsx
deleted file mode 100644
index 3e308d066dbc11..00000000000000
--- a/apps/stress-test/src/shared/Element.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import * as React from 'react';
-import { useElementContext } from './ElementContext';
-
-const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');
-const alphabetLength = alphabet.length;
-
-export type ElementProps = {
- as?: React.ReactNode;
- depth?: number;
- start?: number;
- classPrefix?: string;
- className?: string;
- children?: React.ReactNode;
-};
-
-export const Element: React.FC = props => {
- const { depth: contextDepth } = useElementContext();
- const { as = 'div', children, depth = contextDepth, start = 0, classPrefix = '', className, ...rest } = props;
-
- const El = as as React.ElementType;
- let depthClassName = alphabet[start % alphabetLength];
- depthClassName = classPrefix ? `${classPrefix}-${depthClassName}` : depthClassName;
-
- const cn = className ? `${className} ${depthClassName}` : depthClassName;
-
- return depth > 1 ? (
-
-
-
- ) : (
-
- {children}
-
- );
-};
diff --git a/apps/stress-test/src/shared/ElementContext.tsx b/apps/stress-test/src/shared/ElementContext.tsx
deleted file mode 100644
index 6f3caa4d6b5a53..00000000000000
--- a/apps/stress-test/src/shared/ElementContext.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import * as React from 'react';
-
-export type ElementContextObject = {
- depth: number;
-};
-
-const ElementContext = React.createContext({
- depth: 26,
-});
-
-export const useElementContext = () => React.useContext(ElementContext);
-
-const ElementProvider = ElementContext.Provider;
-export { ElementProvider };
diff --git a/apps/stress-test/src/shared/css/RandomSelector.ts b/apps/stress-test/src/shared/css/RandomSelector.ts
new file mode 100644
index 00000000000000..1a3e0b92665fd6
--- /dev/null
+++ b/apps/stress-test/src/shared/css/RandomSelector.ts
@@ -0,0 +1,137 @@
+import { random, Random } from '../utils/random.js';
+
+export const defaultSelectorTypes = [
+ 'class',
+ 'tag',
+ 'nth-child',
+ 'pseudo-element',
+ 'not-class',
+ 'not-attribute',
+ 'attribute-name',
+ 'attribute-value',
+] as const;
+
+type SelectorType = typeof defaultSelectorTypes[number];
+
+type SelectorParams = {
+ seed?: number;
+ selectorTypes?: SelectorType[];
+ tags?: string[];
+ classNames?: string[];
+ attributeNames?: string[];
+ attributeValues?: string[];
+};
+
+export class RandomSelector {
+ private rando: Random;
+ private readonly selectorTypes: SelectorType[];
+ private tags: string[];
+ private classNames: string[];
+ private attributeNames: string[];
+ private attributeValues: string[];
+
+ constructor({ seed, selectorTypes, tags, classNames, attributeNames, attributeValues }: SelectorParams = {}) {
+ this.rando = random(seed);
+ this.selectorTypes = selectorTypes ?? ((defaultSelectorTypes as unknown) as SelectorType[]);
+ this.tags = tags ?? [];
+ this.classNames = classNames ?? [];
+ this.attributeNames = attributeNames ?? [];
+ this.attributeValues = attributeValues ?? [];
+ }
+
+ public randomSelector = (selectorTypes?: SelectorType[]): string => {
+ const selectorType = this._randomSelectorType(selectorTypes);
+
+ switch (selectorType) {
+ case 'class':
+ return this._classSelector();
+
+ case 'tag':
+ return this._tagSelector();
+
+ case 'nth-child':
+ return this._nthChildSelector();
+
+ case 'pseudo-element':
+ return this._pseudoElement();
+
+ case 'not-class':
+ return this._notClass();
+
+ case 'not-attribute':
+ return this._notAttribute();
+
+ case 'attribute-name':
+ return this._attributeName();
+
+ case 'attribute-value':
+ return this._attributeValue();
+ }
+ };
+
+ private _randomSelectorType = (selectorTypes?: SelectorType[]): SelectorType => {
+ return this.rando.choice(selectorTypes ?? this.selectorTypes);
+ };
+
+ private _classSelector = (): string => {
+ const selector = this._randomChoice(this.classNames) ?? this._randomString('random-classname');
+ return `.${selector}`;
+ };
+
+ private _tagSelector = (): string => {
+ return this._randomChoice(this.tags) ?? this._randomString('random-tag');
+ };
+
+ private _nthChildSelector = (): string => {
+ const choices = [':first-child', ':last-child', ':nth-child'];
+ const selector = this.rando.choice(choices);
+
+ if (selector === ':nth-child') {
+ return `${selector}(${this.rando.range(1, 15)})`;
+ }
+
+ return selector;
+ };
+
+ private _pseudoElement = (): string => {
+ const choices = ['::after', '::before', /*'::part',*/ '::placeholder', '::slotted'];
+ const selector = this.rando.choice(choices);
+
+ return selector;
+ };
+
+ private _notClass = (): string => {
+ return `:not(${this._classSelector()})`;
+ };
+
+ private _notAttribute = (): string => {
+ return `:not(${this._attributeName()})`;
+ };
+
+ private _attributeName = (): string => {
+ return `[${this._randomAttributeName()}]`;
+ };
+
+ private _attributeValue = (): string => {
+ const name = this._randomAttributeName();
+ const value = this._randomChoice(this.attributeValues) ?? this._randomString('random-attr-value');
+
+ return `[${name}=${value}]`;
+ };
+
+ private _randomChoice = (choices: string[]): string | undefined => {
+ if (choices.length > 0) {
+ return this.rando.choice(choices);
+ }
+
+ return undefined;
+ };
+
+ private _randomAttributeName = (): string => {
+ return this._randomChoice(this.attributeNames) ?? this._randomString('data-random-attr');
+ };
+
+ private _randomString = (prefix: string = 'random-string'): string => {
+ return `${prefix}-${this.rando.integer().toString(16)}`;
+ };
+}
diff --git a/apps/stress-test/src/shared/css/injectStyles.ts b/apps/stress-test/src/shared/css/injectStyles.ts
new file mode 100644
index 00000000000000..211e4aa61b80cc
--- /dev/null
+++ b/apps/stress-test/src/shared/css/injectStyles.ts
@@ -0,0 +1,211 @@
+// Inspired by: https://github.com/nolanlawson/shadow-selector-benchmark
+import { random } from '../utils/random';
+
+const colors = [
+ 'aliceblue',
+ 'antiquewhite',
+ 'aqua',
+ 'aquamarine',
+ 'azure',
+ 'beige',
+ 'bisque',
+ 'black',
+ 'blanchedalmond',
+ 'blue',
+ 'blueviolet',
+ 'brown',
+ 'burlywood',
+ 'cadetblue',
+ 'chartreuse',
+ 'chocolate',
+ 'coral',
+ 'cornflowerblue',
+ 'cornsilk',
+ 'crimson',
+ 'cyan',
+ 'darkblue',
+ 'darkcyan',
+ 'darkgoldenrod',
+ 'darkgray',
+ 'darkgreen',
+ 'darkgrey',
+ 'darkkhaki',
+ 'darkmagenta',
+ 'darkolivegreen',
+ 'darkorange',
+ 'darkorchid',
+ 'darkred',
+ 'darksalmon',
+ 'darkseagreen',
+ 'darkslateblue',
+ 'darkslategray',
+ 'darkslategrey',
+ 'darkturquoise',
+ 'darkviolet',
+ 'deeppink',
+ 'deepskyblue',
+ 'dimgray',
+ 'dimgrey',
+ 'dodgerblue',
+ 'firebrick',
+ 'floralwhite',
+ 'forestgreen',
+ 'fuchsia',
+ 'gainsboro',
+ 'ghostwhite',
+ 'goldenrod',
+ 'gold',
+ 'gray',
+ 'green',
+ 'greenyellow',
+ 'grey',
+ 'honeydew',
+ 'hotpink',
+ 'indianred',
+ 'indigo',
+ 'ivory',
+ 'khaki',
+ 'lavenderblush',
+ 'lavender',
+ 'lawngreen',
+ 'lemonchiffon',
+ 'lightblue',
+ 'lightcoral',
+ 'lightcyan',
+ 'lightgoldenrodyellow',
+ 'lightgray',
+ 'lightgreen',
+ 'lightgrey',
+ 'lightpink',
+ 'lightsalmon',
+ 'lightseagreen',
+ 'lightskyblue',
+ 'lightslategray',
+ 'lightslategrey',
+ 'lightsteelblue',
+ 'lightyellow',
+ 'lime',
+ 'limegreen',
+ 'linen',
+ 'magenta',
+ 'maroon',
+ 'mediumaquamarine',
+ 'mediumblue',
+ 'mediumorchid',
+ 'mediumpurple',
+ 'mediumseagreen',
+ 'mediumslateblue',
+ 'mediumspringgreen',
+ 'mediumturquoise',
+ 'mediumvioletred',
+ 'midnightblue',
+ 'mintcream',
+ 'mistyrose',
+ 'moccasin',
+ 'navajowhite',
+ 'navy',
+ 'oldlace',
+ 'olive',
+ 'olivedrab',
+ 'orange',
+ 'orangered',
+ 'orchid',
+ 'palegoldenrod',
+ 'palegreen',
+ 'paleturquoise',
+ 'palevioletred',
+ 'papayawhip',
+ 'peachpuff',
+ 'peru',
+ 'pink',
+ 'plum',
+ 'powderblue',
+ 'purple',
+ 'rebeccapurple',
+ 'red',
+ 'rosybrown',
+ 'royalblue',
+ 'saddlebrown',
+ 'salmon',
+ 'sandybrown',
+ 'seagreen',
+ 'seashell',
+ 'sienna',
+ 'silver',
+ 'skyblue',
+ 'slateblue',
+ 'slategray',
+ 'slategrey',
+ 'snow',
+ 'springgreen',
+ 'steelblue',
+ 'tan',
+ 'teal',
+ 'thistle',
+ 'tomato',
+ 'turquoise',
+ 'violet',
+ 'wheat',
+ 'white',
+ 'whitesmoke',
+ 'yellow',
+ 'yellowgreen',
+];
+
+export const randomCssFromSelectors = (selectors: string[]): string => {
+ const { choice } = random();
+
+ let css = '';
+
+ selectors.forEach(selector => {
+ css += `${selector} { background-color: ${choice(colors)}; }\n`;
+ });
+
+ return css;
+};
+
+function createStyleTag(css: string) {
+ const style = document.createElement('style');
+ style.textContent = css;
+ return style;
+}
+
+export function injectGlobalCss(css?: string) {
+ performance.mark('fluent-inject-global-css-start');
+ css =
+ css ??
+ `
+ div {
+ background-color: yellow;
+ }
+
+ button {
+ background-color: hotpink;
+ }
+
+ hr {
+ background-color: red;
+ }
+
+ stress-app {
+ background-color: yellow;
+ }
+
+ stress-container {
+ background-color: green;
+ }
+
+ stress-component {
+ background-color: aliceblue;
+ }
+ `;
+
+ const style = createStyleTag(css);
+ document.head.appendChild(style);
+ performance.measure('fluent-inject-global-css', 'fluent-inject-global-css-start');
+ return style;
+}
+
+export const styleInjector = (selectors: string[]): HTMLStyleElement => {
+ return injectGlobalCss(randomCssFromSelectors(selectors));
+};
diff --git a/apps/stress-test/src/shared/injectStyles.ts b/apps/stress-test/src/shared/injectStyles.ts
deleted file mode 100644
index ab918be96ba2b3..00000000000000
--- a/apps/stress-test/src/shared/injectStyles.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-// Inspired by: https://github.com/nolanlawson/shadow-selector-benchmark
-function createStyleTag(css: string) {
- const style = document.createElement('style');
- style.textContent = css;
- return style;
-}
-
-export function injectGlobalCss(css?: string) {
- performance.mark('fluent-inject-global-css-start');
- css = `
- div {
- background-color: yellow;
- }
-
- button {
- background-color: hotpink;
- }
-
- hr {
- background-color: red;
- }
-
- stress-app {
- background-color: yellow;
- }
-
- stress-container {
- background-color: green;
- }
-
- stress-component {
- background-color: aliceblue;
- }
- `;
-
- document.head.appendChild(createStyleTag(css));
- performance.measure('fluent-inject-global-css', 'fluent-inject-global-css-start');
-}
diff --git a/apps/stress-test/src/shared/performanceMeasure.ts b/apps/stress-test/src/shared/performanceMeasure.ts
deleted file mode 100644
index 5c7ce7021d31e5..00000000000000
--- a/apps/stress-test/src/shared/performanceMeasure.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export type PerformanceMeasureFn = (measureName: string, startMark: string) => void;
-
-export const performanceMeasure: PerformanceMeasureFn = (measureName, startMark) => {
- performance.mark(startMark);
-
- // requestPostAnimationFrame polyfill
- requestAnimationFrame(() => {
- addEventListener(
- 'message',
- () => {
- performance.measure(measureName, startMark);
- },
- { once: true },
- );
- postMessage('', '*');
- });
-};
diff --git a/apps/stress-test/src/shared/react/ReactSelectorTree.tsx b/apps/stress-test/src/shared/react/ReactSelectorTree.tsx
new file mode 100644
index 00000000000000..b162180740c424
--- /dev/null
+++ b/apps/stress-test/src/shared/react/ReactSelectorTree.tsx
@@ -0,0 +1,33 @@
+import * as React from 'react';
+import { TreeNode } from '../tree/types';
+import { ReactTree } from './ReactTree';
+import { RandomSelectorTreeNode, SelectorTreeNode } from '../tree/types';
+import { ReactSelectorTreeComponentRenderer } from './types';
+
+type ReactSelectorTreeProps = {
+ tree?: TreeNode;
+ componentRenderer: ReactSelectorTreeComponentRenderer;
+};
+
+const buildRenderer = (componentRenderer: ReactSelectorTreeComponentRenderer) => {
+ const renderer = (node: SelectorTreeNode, depth: number, index: number): JSX.Element => {
+ const { value } = node;
+
+ const className = value.classNames.map(cn => cn.substring(1)).join(' ');
+ const attrs = value.attributes.reduce((map, attr) => {
+ map[attr.key] = attr.value ?? '';
+ return map;
+ }, {} as { [key: string]: string });
+
+ return (
+
+ {componentRenderer(node, depth, index)}
+
+ );
+ };
+
+ return renderer;
+};
+export const ReactSelectorTree: React.FC = ({ tree, componentRenderer }) => {
+ return <>{tree ? : null}>;
+};
diff --git a/apps/stress-test/src/shared/react/ReactTest.tsx b/apps/stress-test/src/shared/react/ReactTest.tsx
new file mode 100644
index 00000000000000..e06b0e3f5c48aa
--- /dev/null
+++ b/apps/stress-test/src/shared/react/ReactTest.tsx
@@ -0,0 +1,90 @@
+import * as React from 'react';
+import { getTestOptions, TestOptions } from '../utils/testOptions';
+import { loadTestData, TestReactRenderer, TestTreeFixture } from '../utils/testUtils';
+import { RandomSelectorTreeNode, TreeNode } from '../tree/types';
+import { RandomTree } from '../../../scripts/utils/tree/RandomTree';
+import { TestInjectStyles } from './TestInjectStyles';
+import { TestMount } from './TestMount';
+import { TestRemoveAll } from './TestRemoveAll';
+import { TestReRenderAll } from './TestReRenderAll';
+import { TestAdd } from './TestAdd';
+
+type TestData = {
+ tree?: TreeNode;
+ selectors?: string[];
+ testOptions: TestOptions;
+ renderer?: TestReactRenderer;
+};
+
+type ReactTestProps = {
+ target: string;
+ fixtureName: string;
+ rendererName: string;
+};
+
+export const ReactTest: React.FC = ({ target, fixtureName, rendererName }) => {
+ const [testData, setTestData] = React.useState({
+ testOptions: getTestOptions(),
+ });
+
+ React.useEffect(() => {
+ loadTestData(target, fixtureName, rendererName).then(
+ ({ fixture, renderer }) => {
+ const selectors = fixture.selectors;
+ const fixtureTree = fixture.tree;
+
+ const treeBuilder = new RandomTree();
+ const tree = treeBuilder.fromFixture(fixtureTree);
+
+ setTestData({
+ ...testData,
+ tree,
+ selectors,
+ renderer,
+ });
+ },
+ );
+ }, []);
+
+ const {
+ testOptions: { test },
+ tree,
+ selectors,
+ renderer,
+ } = testData;
+
+ let Test;
+ switch (test) {
+ case 'inject-styles':
+ Test = TestInjectStyles;
+ break;
+
+ case 'mount':
+ Test = TestMount;
+ break;
+
+ case 're-render-all':
+ Test = TestReRenderAll;
+ break;
+
+ case 'remove-all':
+ Test = TestRemoveAll;
+ break;
+
+ case 'add':
+ Test = TestAdd;
+ break;
+
+ default:
+ Test = TestMount;
+ break;
+ }
+
+ return (
+ <>
+ {selectors && tree && (
+
+ )}
+ >
+ );
+};
diff --git a/apps/stress-test/src/shared/react/ReactTree.tsx b/apps/stress-test/src/shared/react/ReactTree.tsx
new file mode 100644
index 00000000000000..de18e752b0b854
--- /dev/null
+++ b/apps/stress-test/src/shared/react/ReactTree.tsx
@@ -0,0 +1,44 @@
+import * as React from 'react';
+import { TreeNode } from '../tree/types';
+
+export type ReactTreeItemRenderer = (node: T, depth: number, index: number) => JSX.Element;
+
+export type ReactTreeProps> = {
+ tree: T;
+ itemRenderer: ReactTreeItemRenderer;
+};
+
+export type ReactTreeNodeProps> = {
+ root: T;
+ renderer: ReactTreeItemRenderer;
+ depth?: number;
+ index?: number;
+};
+
+export const ReactTreeNode = >(props: ReactTreeNodeProps): JSX.Element => {
+ const { root, renderer, depth = 0, index = 0, ...others } = props;
+
+ const { value } = root;
+
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
+ // @ts-ignore
+ const className = value.classNames.map(cn => cn.substring(1)).join(' ');
+ // @ts-ignore
+ const attrs = value.attributes.reduce((map, attr) => {
+ map[attr.key] = attr.value ?? '';
+ return map;
+ }, {} as { [key: string]: string });
+
+ return (
+
+ {renderer(root, depth, index)}
+ {root.children.map((child, i) => {
+ return ;
+ })}
+
+ );
+};
+
+export const ReactTree = >({ tree, itemRenderer }: ReactTreeProps): JSX.Element => {
+ return ;
+};
diff --git a/apps/stress-test/src/shared/react/TestAdd.tsx b/apps/stress-test/src/shared/react/TestAdd.tsx
new file mode 100644
index 00000000000000..1996cc5ee11935
--- /dev/null
+++ b/apps/stress-test/src/shared/react/TestAdd.tsx
@@ -0,0 +1,29 @@
+import * as React from 'react';
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+import { ReactSelectorTree } from './ReactSelectorTree';
+import type { TestProps } from './types';
+
+export const TestAdd: React.FC = ({ tree, selectors, componentRenderer, testOptions }) => {
+ const [added, setAdded] = React.useState(false);
+
+ React.useEffect(() => {
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+ }, []);
+
+ React.useEffect(() => {
+ setTimeout(() => {
+ setAdded(true);
+ performanceMeasure();
+ }, 2000);
+ }, []);
+
+ return (
+ <>
+
+ {added && }
+ >
+ );
+};
diff --git a/apps/stress-test/src/shared/react/TestInjectStyles.tsx b/apps/stress-test/src/shared/react/TestInjectStyles.tsx
new file mode 100644
index 00000000000000..452c8bee884a7d
--- /dev/null
+++ b/apps/stress-test/src/shared/react/TestInjectStyles.tsx
@@ -0,0 +1,17 @@
+import * as React from 'react';
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+import { ReactSelectorTree } from './ReactSelectorTree';
+import type { TestProps } from './types';
+
+export const TestInjectStyles: React.FC = ({ tree, selectors, componentRenderer, testOptions }) => {
+ // eslint-disable-next-line no-restricted-properties
+ React.useLayoutEffect(() => {
+ setTimeout(() => {
+ styleInjector(selectors);
+ performanceMeasure();
+ }, 2000);
+ }, []);
+
+ return ;
+};
diff --git a/apps/stress-test/src/shared/react/TestMount.tsx b/apps/stress-test/src/shared/react/TestMount.tsx
new file mode 100644
index 00000000000000..d766953f1f0dd6
--- /dev/null
+++ b/apps/stress-test/src/shared/react/TestMount.tsx
@@ -0,0 +1,48 @@
+import * as React from 'react';
+import { styleInjector } from '../css/injectStyles';
+// import { requestPostAnimationFrame } from '../utils/requestPostAnimationFrame';
+import { ReactSelectorTree } from './ReactSelectorTree';
+import type { TestProps } from './types';
+
+type DebouncedOnRender = () => React.ProfilerOnRenderCallback;
+
+const debouncedOnRender: DebouncedOnRender = () => {
+ let start: number;
+ let timeoutId: number;
+ return (_profilerId, _mode, _actualTime, _baseTime, startTime, commitTime) => {
+ if (!start) {
+ start = startTime;
+ }
+
+ if (timeoutId) {
+ clearTimeout(timeoutId);
+ }
+
+ timeoutId = window.setTimeout(() => {
+ requestAnimationFrame(() => {
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
+ performance.measure('stress', {
+ start,
+ end: performance.now(),
+ });
+ });
+ }, 250);
+ };
+};
+
+export const TestMount: React.FC = ({ tree, selectors, componentRenderer, testOptions }) => {
+ const ref = React.useRef(false);
+ if (!ref.current) {
+ ref.current = true;
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+ }
+
+ return (
+
+
+
+ );
+};
diff --git a/apps/stress-test/src/shared/react/TestReRenderAll.tsx b/apps/stress-test/src/shared/react/TestReRenderAll.tsx
new file mode 100644
index 00000000000000..2c2ab45af6d411
--- /dev/null
+++ b/apps/stress-test/src/shared/react/TestReRenderAll.tsx
@@ -0,0 +1,32 @@
+import * as React from 'react';
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+import { ReactSelectorTree } from './ReactSelectorTree';
+import type { TestProps } from './types';
+
+export const TestReRenderAll: React.FC = ({ tree, selectors, componentRenderer, testOptions }) => {
+ const [theTree, setTheTree] = React.useState();
+
+ React.useEffect(() => {
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+ }, []);
+
+ React.useEffect(() => {
+ if (theTree === undefined && tree) {
+ setTheTree(tree);
+
+ setTimeout(() => {
+ setTheTree(undefined);
+
+ setTimeout(() => {
+ setTheTree(tree);
+ performanceMeasure();
+ }, 2000);
+ }, 2000);
+ }
+ }, [tree]);
+
+ return ;
+};
diff --git a/apps/stress-test/src/shared/react/TestRemoveAll.tsx b/apps/stress-test/src/shared/react/TestRemoveAll.tsx
new file mode 100644
index 00000000000000..cdd4771ca58d2d
--- /dev/null
+++ b/apps/stress-test/src/shared/react/TestRemoveAll.tsx
@@ -0,0 +1,28 @@
+import * as React from 'react';
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+import { ReactSelectorTree } from './ReactSelectorTree';
+import type { TestProps } from './types';
+
+export const TestRemoveAll: React.FC = ({ tree, selectors, componentRenderer, testOptions }) => {
+ const [theTree, setTheTree] = React.useState();
+
+ React.useEffect(() => {
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+ }, []);
+
+ React.useEffect(() => {
+ if (theTree === undefined && tree) {
+ setTheTree(tree);
+
+ setTimeout(() => {
+ setTheTree(undefined);
+ performanceMeasure();
+ }, 2000);
+ }
+ }, [tree]);
+
+ return ;
+};
diff --git a/apps/stress-test/src/shared/react/onRender.ts b/apps/stress-test/src/shared/react/onRender.ts
new file mode 100644
index 00000000000000..a328c966e066c8
--- /dev/null
+++ b/apps/stress-test/src/shared/react/onRender.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+
+export const onRenderLog: React.ProfilerOnRenderCallback = (
+ profilerId,
+ mode,
+ actualTime,
+ baseTime,
+ startTime,
+ commitTime,
+) => {
+ console.log({ profilerId, mode, actualTime, baseTime, startTime, commitTime });
+};
diff --git a/apps/stress-test/src/shared/react/types.ts b/apps/stress-test/src/shared/react/types.ts
new file mode 100644
index 00000000000000..2725dda0548cc0
--- /dev/null
+++ b/apps/stress-test/src/shared/react/types.ts
@@ -0,0 +1,11 @@
+import { RandomSelectorTreeNode, SelectorTreeNode, TreeNode } from '../tree/types';
+import { TestOptions } from '../utils/testOptions';
+
+export type ReactSelectorTreeComponentRenderer = (node: SelectorTreeNode, depth: number, index: number) => JSX.Element;
+
+export type TestProps = {
+ componentRenderer: ReactSelectorTreeComponentRenderer;
+ tree: TreeNode;
+ selectors: string[];
+ testOptions: TestOptions;
+};
diff --git a/apps/stress-test/src/shared/testParams.ts b/apps/stress-test/src/shared/testParams.ts
deleted file mode 100644
index 5effe504fe6f27..00000000000000
--- a/apps/stress-test/src/shared/testParams.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-const testTypes = ['manual', 'mount', 'inject-styles', 'prop-update', 'remove-node', 'add-node'];
-
-export type TestParams = {
- test: typeof testTypes[number];
- numStartNodes: number;
- numAddNodes: number;
- numRemoveNodes: number;
-};
-
-export type GetTestParamsFn = () => TestParams;
-
-let params: TestParams;
-export const getTestParams = () => {
- if (params) {
- return params;
- }
- params = {} as TestParams;
-
- if (typeof window === 'undefined') {
- return params;
- }
-
- const searchParams = new URLSearchParams(window.location.search);
-
- let test = searchParams.get('test');
- if (!test || !testTypes.includes(test as TestParams['test'])) {
- test = 'manual';
- }
-
- let numStartNodes = Number(searchParams.get('numStartNodes'));
- if (!numStartNodes || isNaN(numStartNodes)) {
- numStartNodes = 100;
- }
-
- let numAddNodes = Number(searchParams.get('numAddNodes'));
- if (!numAddNodes || isNaN(numAddNodes)) {
- numAddNodes = 100;
- }
-
- let numRemoveNodes = Number(searchParams.get('numRemoveNodes'));
- if (!numRemoveNodes || isNaN(numRemoveNodes)) {
- numRemoveNodes = 99;
- }
-
- params.test = test as TestParams['test'];
- params.numStartNodes = numStartNodes;
- params.numAddNodes = numAddNodes;
- params.numRemoveNodes = numRemoveNodes;
-
- return params;
-};
diff --git a/apps/stress-test/src/shared/tree/iterators/dfs.ts b/apps/stress-test/src/shared/tree/iterators/dfs.ts
new file mode 100644
index 00000000000000..b6f61f88a93e44
--- /dev/null
+++ b/apps/stress-test/src/shared/tree/iterators/dfs.ts
@@ -0,0 +1,28 @@
+import { TreeNode } from '../types';
+
+type TreeResult = {
+ node: T;
+ index: number;
+};
+
+export const dfsIterator = (tree: TreeNode): Iterable> => {
+ let index = 0;
+ return {
+ *[Symbol.iterator]() {
+ const stack = [tree];
+ while (stack.length) {
+ const item = stack.pop()!;
+ if (item.children.length) {
+ let i = item.children.length - 1;
+ while (i > -1) {
+ stack.push(item.children[i]);
+ i--;
+ }
+ }
+
+ yield { node: item.value, index };
+ index++;
+ }
+ },
+ };
+};
diff --git a/apps/stress-test/src/shared/tree/types.ts b/apps/stress-test/src/shared/tree/types.ts
new file mode 100644
index 00000000000000..10cc6114437bf7
--- /dev/null
+++ b/apps/stress-test/src/shared/tree/types.ts
@@ -0,0 +1,24 @@
+export type Attribute = {
+ key: string;
+ value: string | undefined;
+ selector: string;
+};
+
+export type RandomSelectorTreeNode = {
+ name: string;
+ classNames: string[];
+ attributes: Attribute[];
+ siblings: string[];
+ pseudos: string[];
+};
+
+export type SelectorTreeNode = TreeNode;
+
+export type TreeNode = {
+ value: T;
+ children: TreeNode[];
+ parent: TreeNode | null;
+};
+
+export type TreeNodeCreateCallback = (parent: TreeNode | null, depth: number, breath: number) => TreeNode;
+export type TreeNodeVisitCallback = (node: TreeNode) => void;
diff --git a/apps/stress-test/src/shared/utils/performanceMeasure.ts b/apps/stress-test/src/shared/utils/performanceMeasure.ts
new file mode 100644
index 00000000000000..43d7af07a3fff8
--- /dev/null
+++ b/apps/stress-test/src/shared/utils/performanceMeasure.ts
@@ -0,0 +1,11 @@
+import { requestPostAnimationFrame } from './requestPostAnimationFrame';
+
+export type PerformanceMeasureFn = (measureName?: string, startMark?: string) => void;
+
+export const performanceMeasure: PerformanceMeasureFn = (measureName = 'stress', startMark = 'start') => {
+ performance.mark(startMark);
+
+ requestPostAnimationFrame(() => {
+ performance.measure(measureName, startMark);
+ });
+};
diff --git a/apps/stress-test/src/shared/utils/random.ts b/apps/stress-test/src/shared/utils/random.ts
new file mode 100644
index 00000000000000..b04b3d8d1320c0
--- /dev/null
+++ b/apps/stress-test/src/shared/utils/random.ts
@@ -0,0 +1,24 @@
+import { LCG } from 'random-seedable';
+
+const defaultSeed = 4212021;
+
+export type Random = {
+ coin: (pTrue: number) => boolean;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ choice: (choices: any[]) => any;
+ range: (min: number, max: number) => number;
+ integer: () => number;
+};
+
+export type RandomFn = (seed?: number) => Random;
+
+export const random: RandomFn = seed => {
+ const rando: LCG = new LCG(seed ?? defaultSeed);
+
+ return {
+ coin: (pTrue = 0.5) => rando.coin(pTrue),
+ choice: choices => rando.choice(choices),
+ range: (min, max) => rando.randRange(min, max),
+ integer: () => rando.int(),
+ };
+};
diff --git a/apps/stress-test/src/shared/utils/requestPostAnimationFrame.ts b/apps/stress-test/src/shared/utils/requestPostAnimationFrame.ts
new file mode 100644
index 00000000000000..1380db348d6a4f
--- /dev/null
+++ b/apps/stress-test/src/shared/utils/requestPostAnimationFrame.ts
@@ -0,0 +1,6 @@
+export const requestPostAnimationFrame = (callback: Function): void => {
+ requestAnimationFrame(() => {
+ addEventListener('message', _ => callback(), { once: true });
+ postMessage('', '*');
+ });
+};
diff --git a/apps/stress-test/src/shared/utils/testOptions.ts b/apps/stress-test/src/shared/utils/testOptions.ts
new file mode 100644
index 00000000000000..7e54a77013ef3b
--- /dev/null
+++ b/apps/stress-test/src/shared/utils/testOptions.ts
@@ -0,0 +1,63 @@
+export type TestOptions = {
+ test: string;
+ fixtureName: string;
+ rendererName: string;
+ [key: string]: string | number;
+};
+
+export type GetTestOptionsFn = () => TestOptions;
+
+declare global {
+ interface URLSearchParams {
+ keys: () => string[];
+ }
+}
+
+let params: TestOptions;
+export const getTestOptions = () => {
+ if (params) {
+ return params;
+ }
+ params = {} as TestOptions;
+
+ if (typeof window === 'undefined') {
+ return params;
+ }
+
+ const searchParams = new URLSearchParams(window.location.search);
+
+ let test = searchParams.get('test');
+ if (!test) {
+ test = 'manual';
+ }
+
+ let numStartNodes = Number(searchParams.get('numStartNodes'));
+ if (!numStartNodes || isNaN(numStartNodes)) {
+ numStartNodes = 100;
+ }
+
+ let numAddNodes = Number(searchParams.get('numAddNodes'));
+ if (!numAddNodes || isNaN(numAddNodes)) {
+ numAddNodes = 100;
+ }
+
+ let numRemoveNodes = Number(searchParams.get('numRemoveNodes'));
+ if (!numRemoveNodes || isNaN(numRemoveNodes)) {
+ numRemoveNodes = 99;
+ }
+
+ params.test = test as TestOptions['test'];
+ params.numStartNodes = numStartNodes;
+ params.numAddNodes = numAddNodes;
+ params.numRemoveNodes = numRemoveNodes;
+
+ const ignore = ['numStartNodes', 'numAddNodes', 'numRemoveNodes'];
+ for (const key of searchParams.keys()) {
+ const value = searchParams.get(key);
+ if (value && !ignore.includes(key)) {
+ params[key] = value;
+ }
+ }
+
+ return params;
+};
diff --git a/apps/stress-test/src/shared/utils/testUtils.ts b/apps/stress-test/src/shared/utils/testUtils.ts
new file mode 100644
index 00000000000000..e1de92452ff3ad
--- /dev/null
+++ b/apps/stress-test/src/shared/utils/testUtils.ts
@@ -0,0 +1,31 @@
+export type TestTreeFixture = {
+ tree: {
+ value: unknown;
+ children: TestTreeFixture['tree'][];
+ };
+ selectors: string[];
+};
+
+export type TestReactRenderer = (node: unknown, depth: number, index: number) => JSX.Element;
+export type TestDOMRenderer = (node: unknown, depth: number, index: number) => HTMLElement;
+
+export type LoaderResult = {
+ fixture: TFixture;
+ renderer: TRenderer;
+};
+
+export const loadTestData = (
+ target: string,
+ fixtureName: string,
+ rendererName: string,
+): Promise> => {
+ return Promise.all([
+ import(`../../fixtures/${fixtureName}`),
+ import(`../../renderers/${target}/${rendererName}`),
+ ]).then(([fixtureResult, rendererResult]) => {
+ const { default: fixture } = fixtureResult;
+ const { default: renderer } = rendererResult;
+
+ return { fixture, renderer };
+ });
+};
diff --git a/apps/stress-test/src/shared/vanilla/TestAdd.ts b/apps/stress-test/src/shared/vanilla/TestAdd.ts
new file mode 100644
index 00000000000000..59506a6348961c
--- /dev/null
+++ b/apps/stress-test/src/shared/vanilla/TestAdd.ts
@@ -0,0 +1,27 @@
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+import { TestOptions } from '../utils/testOptions';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from './types';
+import { renderVanillaSelectorTree } from './VanillaSelectorTree';
+
+export const testAdd = (
+ tree: SelectorTreeNode,
+ selectors: string[],
+ componentRenderer: DOMSelectorTreeComponentRenderer,
+ testOptions: TestOptions,
+): HTMLElement => {
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+
+ const wrapper = document.createElement('div');
+ wrapper.appendChild(renderVanillaSelectorTree(tree, selectors, componentRenderer, testOptions));
+
+ setTimeout(() => {
+ wrapper.appendChild(renderVanillaSelectorTree(tree, selectors, componentRenderer, testOptions));
+ performanceMeasure();
+ }, 2000);
+
+ return wrapper;
+};
diff --git a/apps/stress-test/src/shared/vanilla/TestInjectStyles.ts b/apps/stress-test/src/shared/vanilla/TestInjectStyles.ts
new file mode 100644
index 00000000000000..537eb2885ab8b9
--- /dev/null
+++ b/apps/stress-test/src/shared/vanilla/TestInjectStyles.ts
@@ -0,0 +1,22 @@
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+import { TestOptions } from '../utils/testOptions';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from './types';
+import { renderVanillaSelectorTree } from './VanillaSelectorTree';
+
+export const testInjectStyles = (
+ tree: SelectorTreeNode,
+ selectors: string[],
+ componentRenderer: DOMSelectorTreeComponentRenderer,
+ testOptions: TestOptions,
+): HTMLElement => {
+ const vanillaTree = renderVanillaSelectorTree(tree, selectors, componentRenderer, testOptions);
+
+ setTimeout(() => {
+ styleInjector(selectors);
+ performanceMeasure();
+ }, 2000);
+
+ return vanillaTree;
+};
diff --git a/apps/stress-test/src/shared/vanilla/TestMount.ts b/apps/stress-test/src/shared/vanilla/TestMount.ts
new file mode 100644
index 00000000000000..bee5e4275ca689
--- /dev/null
+++ b/apps/stress-test/src/shared/vanilla/TestMount.ts
@@ -0,0 +1,26 @@
+import { TestOptions } from '../utils/testOptions';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from './types';
+import { renderVanillaSelectorTree } from './VanillaSelectorTree';
+import { styleInjector } from '../css/injectStyles';
+import { requestPostAnimationFrame } from '../utils/requestPostAnimationFrame';
+
+export const testMount = (
+ tree: SelectorTreeNode,
+ selectors: string[],
+ componentRenderer: DOMSelectorTreeComponentRenderer,
+ testOptions: TestOptions,
+): HTMLElement => {
+ performance.mark('start');
+
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+
+ const vanillaTree = renderVanillaSelectorTree(tree, selectors, componentRenderer, testOptions);
+
+ requestPostAnimationFrame(() => {
+ performance.measure('stress', 'start');
+ });
+ return vanillaTree;
+};
diff --git a/apps/stress-test/src/shared/vanilla/TestReRenderAll.ts b/apps/stress-test/src/shared/vanilla/TestReRenderAll.ts
new file mode 100644
index 00000000000000..eba98a30ff3feb
--- /dev/null
+++ b/apps/stress-test/src/shared/vanilla/TestReRenderAll.ts
@@ -0,0 +1,33 @@
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+import { TestOptions } from '../utils/testOptions';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from './types';
+import { renderVanillaSelectorTree } from './VanillaSelectorTree';
+
+export const testReRenderAll = (
+ tree: SelectorTreeNode,
+ selectors: string[],
+ componentRenderer: DOMSelectorTreeComponentRenderer,
+ testOptions: TestOptions,
+): HTMLElement => {
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+
+ const wrapper = document.createElement('div');
+ wrapper.appendChild(renderVanillaSelectorTree(tree, selectors, componentRenderer, testOptions));
+
+ setTimeout(() => {
+ while (wrapper.hasChildNodes()) {
+ wrapper.removeChild(wrapper.lastChild!);
+ }
+
+ setTimeout(() => {
+ wrapper.appendChild(renderVanillaSelectorTree(tree, selectors, componentRenderer, testOptions));
+ performanceMeasure();
+ }, 2000);
+ }, 2000);
+
+ return wrapper;
+};
diff --git a/apps/stress-test/src/shared/vanilla/TestRemoveAll.ts b/apps/stress-test/src/shared/vanilla/TestRemoveAll.ts
new file mode 100644
index 00000000000000..44c8fc4005e003
--- /dev/null
+++ b/apps/stress-test/src/shared/vanilla/TestRemoveAll.ts
@@ -0,0 +1,29 @@
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+import { TestOptions } from '../utils/testOptions';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from './types';
+import { renderVanillaSelectorTree } from './VanillaSelectorTree';
+
+export const testRemoveAll = (
+ tree: SelectorTreeNode,
+ selectors: string[],
+ componentRenderer: DOMSelectorTreeComponentRenderer,
+ testOptions: TestOptions,
+): HTMLElement => {
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+
+ const wrapper = document.createElement('div');
+ wrapper.appendChild(renderVanillaSelectorTree(tree, selectors, componentRenderer, testOptions));
+
+ setTimeout(() => {
+ while (wrapper.hasChildNodes()) {
+ wrapper.removeChild(wrapper.lastChild!);
+ }
+ performanceMeasure();
+ }, 2000);
+
+ return wrapper;
+};
diff --git a/apps/stress-test/src/shared/vanilla/VanillaSelectorTree.ts b/apps/stress-test/src/shared/vanilla/VanillaSelectorTree.ts
new file mode 100644
index 00000000000000..34122b11e6b2af
--- /dev/null
+++ b/apps/stress-test/src/shared/vanilla/VanillaSelectorTree.ts
@@ -0,0 +1,33 @@
+import { TestOptions } from '../utils/testOptions';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from './types';
+import { renderVanillaTree } from './VanillaTree';
+
+const itemRenderer = (componentRenderer: DOMSelectorTreeComponentRenderer) => (
+ node: SelectorTreeNode,
+ depth: number,
+ index: number,
+): HTMLElement => {
+ const { value } = node;
+
+ const div = document.createElement('div');
+ div.classList.add(...value.classNames.map(cn => cn.substring(1)));
+ value.attributes.forEach(attr => {
+ div.setAttribute(attr.key, attr.value ?? '');
+ });
+
+ div.style.marginLeft = `${depth * 10}px`;
+ div.appendChild(componentRenderer(node, depth, index));
+
+ return div;
+};
+
+export const renderVanillaSelectorTree = (
+ tree: SelectorTreeNode,
+ _selectors: string[],
+ componentRenderer: DOMSelectorTreeComponentRenderer,
+ _testOptions: TestOptions,
+): HTMLElement => {
+ const vanillaTree = renderVanillaTree(tree, itemRenderer(componentRenderer));
+ return vanillaTree;
+};
diff --git a/apps/stress-test/src/shared/vanilla/VanillaTree.ts b/apps/stress-test/src/shared/vanilla/VanillaTree.ts
new file mode 100644
index 00000000000000..e56d9750770f11
--- /dev/null
+++ b/apps/stress-test/src/shared/vanilla/VanillaTree.ts
@@ -0,0 +1,32 @@
+import { TreeNode } from '../tree/types';
+
+export type VanillaTreeItemRenderer = (node: T, depth: number, index: number) => HTMLElement;
+
+export const renderVanillaTree = >(
+ tree: T,
+ itemRenderer: VanillaTreeItemRenderer,
+ depth: number = 0,
+ index: number = 0,
+): HTMLElement => {
+ const root = document.createElement('div');
+ root.classList.add('vanilla-tree-node');
+
+ const { value } = tree;
+
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
+ // @ts-ignore
+ root.classList.add(...value.classNames.map(cn => cn.substring(1)));
+ // @ts-ignore
+ value.attributes.forEach(attr => {
+ root.setAttribute(attr.key, attr.value ?? '');
+ });
+
+ root.appendChild(itemRenderer(tree, depth, index));
+
+ tree.children.forEach((child, i) => {
+ const node = renderVanillaTree(child as T, itemRenderer, depth + 1, i + 1);
+ root.appendChild(node);
+ });
+
+ return root;
+};
diff --git a/apps/stress-test/src/shared/vanilla/types.ts b/apps/stress-test/src/shared/vanilla/types.ts
new file mode 100644
index 00000000000000..fe46bf4ab53434
--- /dev/null
+++ b/apps/stress-test/src/shared/vanilla/types.ts
@@ -0,0 +1,3 @@
+import { SelectorTreeNode } from '../tree/types';
+
+export type DOMSelectorTreeComponentRenderer = (node: SelectorTreeNode, depth: number, index: number) => HTMLElement;
diff --git a/apps/stress-test/src/shared/wc/TestAdd.ts b/apps/stress-test/src/shared/wc/TestAdd.ts
new file mode 100644
index 00000000000000..66af63039550bd
--- /dev/null
+++ b/apps/stress-test/src/shared/wc/TestAdd.ts
@@ -0,0 +1,35 @@
+import { TestOptions } from '../utils/testOptions';
+import { WCSelectorTree } from './WCSelectorTree';
+import { WCTestTree } from './types';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from '../vanilla/types';
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+
+export class TestAdd extends HTMLElement implements WCTestTree {
+ constructor(
+ tree: SelectorTreeNode,
+ selectors: string[],
+ componentRenderer: DOMSelectorTreeComponentRenderer,
+ testOptions: TestOptions,
+ ) {
+ super();
+
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+
+ const domTree = new WCSelectorTree(componentRenderer, testOptions);
+ domTree.tree = tree;
+ this.appendChild(domTree);
+
+ setTimeout(() => {
+ const addDomTree = new WCSelectorTree(componentRenderer, testOptions);
+ addDomTree.tree = tree;
+ this.appendChild(addDomTree);
+ requestAnimationFrame(() => performanceMeasure());
+ }, 2000);
+ }
+}
+
+window.customElements.define('wc-test-add', TestAdd);
diff --git a/apps/stress-test/src/shared/wc/TestInjectStyles.ts b/apps/stress-test/src/shared/wc/TestInjectStyles.ts
new file mode 100644
index 00000000000000..65851107fb7cf7
--- /dev/null
+++ b/apps/stress-test/src/shared/wc/TestInjectStyles.ts
@@ -0,0 +1,29 @@
+import { TestOptions } from '../utils/testOptions';
+import { WCSelectorTree } from './WCSelectorTree';
+import { WCTestTree } from './types';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from '../vanilla/types';
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+
+export class TestInjectStyles extends HTMLElement implements WCTestTree {
+ constructor(
+ tree: SelectorTreeNode,
+ selectors: string[],
+ componentRenderer: DOMSelectorTreeComponentRenderer,
+ testOptions: TestOptions,
+ ) {
+ super();
+
+ const domTree = new WCSelectorTree(componentRenderer, testOptions);
+ domTree.tree = tree;
+ this.appendChild(domTree);
+
+ setTimeout(() => {
+ styleInjector(selectors);
+ performanceMeasure();
+ }, 2000);
+ }
+}
+
+window.customElements.define('wc-test-inject-styles', TestInjectStyles);
diff --git a/apps/stress-test/src/shared/wc/TestMount.ts b/apps/stress-test/src/shared/wc/TestMount.ts
new file mode 100644
index 00000000000000..90fb2309fffc6c
--- /dev/null
+++ b/apps/stress-test/src/shared/wc/TestMount.ts
@@ -0,0 +1,30 @@
+import { performanceMeasure } from '../utils/performanceMeasure';
+import { TestOptions } from '../utils/testOptions';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from '../vanilla/types';
+import { WCTestTree } from './types';
+import { WCSelectorTree } from './WCSelectorTree';
+import { styleInjector } from '../css/injectStyles';
+
+export class TestMount extends HTMLElement implements WCTestTree {
+ constructor(
+ tree: SelectorTreeNode,
+ selectors: string[],
+ componentRenderer: DOMSelectorTreeComponentRenderer,
+ testOptions: TestOptions,
+ ) {
+ super();
+
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+
+ const domTree = new WCSelectorTree(componentRenderer, testOptions);
+ domTree.tree = tree;
+
+ this.appendChild(domTree);
+ requestAnimationFrame(() => performanceMeasure());
+ }
+}
+
+window.customElements.define('wc-test-mount', TestMount);
diff --git a/apps/stress-test/src/shared/wc/TestReRenderAll.ts b/apps/stress-test/src/shared/wc/TestReRenderAll.ts
new file mode 100644
index 00000000000000..388e807b1c7b35
--- /dev/null
+++ b/apps/stress-test/src/shared/wc/TestReRenderAll.ts
@@ -0,0 +1,37 @@
+import { TestOptions } from '../utils/testOptions';
+import { WCSelectorTree } from './WCSelectorTree';
+import { WCTestTree } from './types';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from '../vanilla/types';
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+
+export class TestReRenderAll extends HTMLElement implements WCTestTree {
+ constructor(
+ tree: SelectorTreeNode,
+ selectors: string[],
+ componentRenderer: DOMSelectorTreeComponentRenderer,
+ testOptions: TestOptions,
+ ) {
+ super();
+
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+
+ const domTree = new WCSelectorTree(componentRenderer, testOptions);
+ domTree.tree = tree;
+ this.appendChild(domTree);
+
+ setTimeout(() => {
+ domTree.tree = null;
+
+ setTimeout(() => {
+ domTree.tree = tree;
+ requestAnimationFrame(() => performanceMeasure());
+ }, 2000);
+ }, 2000);
+ }
+}
+
+window.customElements.define('wc-test-re-render-all', TestReRenderAll);
diff --git a/apps/stress-test/src/shared/wc/TestRemoveAll.ts b/apps/stress-test/src/shared/wc/TestRemoveAll.ts
new file mode 100644
index 00000000000000..74b7c7a7de8580
--- /dev/null
+++ b/apps/stress-test/src/shared/wc/TestRemoveAll.ts
@@ -0,0 +1,33 @@
+import { TestOptions } from '../utils/testOptions';
+import { WCSelectorTree } from './WCSelectorTree';
+import { WCTestTree } from './types';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from '../vanilla/types';
+import { styleInjector } from '../css/injectStyles';
+import { performanceMeasure } from '../utils/performanceMeasure';
+
+export class TestRemoveAll extends HTMLElement implements WCTestTree {
+ constructor(
+ tree: SelectorTreeNode,
+ selectors: string[],
+ componentRenderer: DOMSelectorTreeComponentRenderer,
+ testOptions: TestOptions,
+ ) {
+ super();
+
+ if (testOptions.withStyles === 'true') {
+ styleInjector(selectors);
+ }
+
+ const domTree = new WCSelectorTree(componentRenderer, testOptions);
+ domTree.tree = tree;
+ this.appendChild(domTree);
+
+ setTimeout(() => {
+ domTree.tree = null;
+ requestAnimationFrame(() => performanceMeasure());
+ }, 2000);
+ }
+}
+
+window.customElements.define('wc-test-remove-all', TestRemoveAll);
diff --git a/apps/stress-test/src/shared/wc/WCSelectorTree.ts b/apps/stress-test/src/shared/wc/WCSelectorTree.ts
new file mode 100644
index 00000000000000..333d523a6296cf
--- /dev/null
+++ b/apps/stress-test/src/shared/wc/WCSelectorTree.ts
@@ -0,0 +1,64 @@
+import { TestOptions } from '../utils/testOptions';
+import { SelectorTreeNode } from '../tree/types';
+import { DOMSelectorTreeComponentRenderer } from '../vanilla/types';
+import { WCTree } from './WCTree';
+
+const template = document.createElement('template');
+template.innerHTML = `
`;
+
+export class WCSelectorTree extends HTMLElement {
+ private _root: HTMLElement | ShadowRoot;
+ private _testOptions: TestOptions;
+ private _tree: SelectorTreeNode | null;
+ private _componentRenderer: DOMSelectorTreeComponentRenderer;
+
+ constructor(componentRenderer: DOMSelectorTreeComponentRenderer, testOptions: TestOptions) {
+ super();
+
+ this._testOptions = testOptions;
+ this._tree = null;
+
+ this._componentRenderer = componentRenderer;
+
+ if (this._testOptions?.useShadowRoot === 'true') {
+ this._root = this.attachShadow({ mode: 'open' });
+ } else {
+ this._root = this;
+ }
+ }
+
+ public set tree(value: SelectorTreeNode | null) {
+ this._tree = value;
+
+ if (value === null) {
+ while (this._root.hasChildNodes()) {
+ this._root.removeChild(this._root.lastChild!);
+ }
+ } else {
+ const wcTree = new WCTree(this._itemRenderer, undefined, undefined, this._testOptions?.useShadowRoot === 'true');
+ wcTree.tree = value;
+ this._root.appendChild(wcTree);
+ }
+ }
+
+ public get tree() {
+ return this._tree;
+ }
+
+ private _itemRenderer = (node: SelectorTreeNode, depth: number, index: number): HTMLElement => {
+ const { value } = node;
+
+ const div = document.createElement('div');
+ div.classList.add(...value.classNames.map(cn => cn.substring(1)));
+ value.attributes.forEach(attr => {
+ div.setAttribute(attr.key, attr.value ?? '');
+ });
+
+ div.style.marginLeft = `${depth * 10}px`;
+ div.appendChild(this._componentRenderer(node, depth, index));
+
+ return div;
+ };
+}
+
+window.customElements.define('wc-selector-tree', WCSelectorTree);
diff --git a/apps/stress-test/src/shared/wc/WCTest.ts b/apps/stress-test/src/shared/wc/WCTest.ts
new file mode 100644
index 00000000000000..eecbb65a2fd870
--- /dev/null
+++ b/apps/stress-test/src/shared/wc/WCTest.ts
@@ -0,0 +1,61 @@
+import { getTestOptions } from '../utils/testOptions';
+import { loadTestData, TestDOMRenderer, TestTreeFixture } from '../utils/testUtils';
+import { RandomSelectorTreeNode } from '../tree/types';
+import { RandomTree } from '../../../scripts/utils/tree/RandomTree';
+import { testInjectStyles } from '../vanilla/TestInjectStyles';
+import { testMount } from '../vanilla/TestMount';
+import { testRemoveAll } from '../vanilla/TestRemoveAll';
+import { testReRenderAll } from '../vanilla/TestReRenderAll';
+import { TestInjectStyles } from './TestInjectStyles';
+import { TestMount } from './TestMount';
+import { TestRemoveAll } from './TestRemoveAll';
+import { TestReRenderAll } from './TestReRenderAll';
+import { TestAdd } from './TestAdd';
+import { testAdd } from '../vanilla/TestAdd';
+
+export const wcTest = (): Promise => {
+ const testOptions = getTestOptions();
+ const { test, fixtureName, rendererName, r } = testOptions;
+
+ return loadTestData('wc', fixtureName, rendererName ?? r).then(
+ ({ fixture, renderer }) => {
+ const selectors: string[] = fixture.selectors;
+ const fixtureTree = fixture.tree;
+
+ const treeBuilder = new RandomTree();
+ const tree = treeBuilder.fromFixture(fixtureTree);
+ const { wcRenderer } = testOptions;
+
+ let testFn;
+
+ const isWC = wcRenderer === 'wc';
+
+ if (test === 'inject-styles') {
+ testFn = isWC ? TestInjectStyles : testInjectStyles;
+ } else if (test === 're-render-all') {
+ testFn = isWC ? TestReRenderAll : testReRenderAll;
+ } else if (test === 'remove-all') {
+ testFn = isWC ? TestRemoveAll : testRemoveAll;
+ } else if (test === 'add') {
+ testFn = isWC ? TestAdd : testAdd;
+ } /*if (test === 'mount')*/ else {
+ testFn = isWC ? TestMount : testMount;
+ }
+
+ if (testFn) {
+ if (isWC) {
+ /* eslint-disable */
+ // @ts-ignore
+ return new testFn(tree, selectors, renderer, testOptions);
+ /* eslint-enable */
+ } else {
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
+ return testFn(tree, selectors, renderer, testOptions);
+ }
+ }
+
+ return null;
+ },
+ );
+};
diff --git a/apps/stress-test/src/shared/wc/WCTree.ts b/apps/stress-test/src/shared/wc/WCTree.ts
new file mode 100644
index 00000000000000..49c52fc3202e70
--- /dev/null
+++ b/apps/stress-test/src/shared/wc/WCTree.ts
@@ -0,0 +1,61 @@
+import { TreeNode } from '../tree/types';
+
+export type WCTreeItemRenderer = (node: T, depth: number, index: number) => HTMLElement;
+
+const template = document.createElement('template');
+template.innerHTML = `
+
+`;
+
+export class WCTree> extends HTMLElement {
+ private _root: HTMLElement | ShadowRoot;
+ private _tree: T | null;
+ private _itemRenderer: WCTreeItemRenderer;
+ private _depth: number;
+ private _index: number;
+ private _useShadowRoot: boolean;
+
+ constructor(itemRenderer: WCTreeItemRenderer, depth: number = 0, index = 0, useShadowRoot: boolean = false) {
+ super();
+
+ this._useShadowRoot = useShadowRoot;
+
+ if (useShadowRoot) {
+ this._root = this.attachShadow({ mode: 'open' });
+ } else {
+ this._root = this;
+ }
+ this._tree = null;
+ this._itemRenderer = itemRenderer;
+ this._depth = depth;
+ this._index = index;
+ }
+
+ public set tree(value: T | null) {
+ this._tree = value;
+ this._render();
+ }
+
+ public get tree(): T | null {
+ return this._tree;
+ }
+
+ private _render() {
+ if (this._tree === null) {
+ while (this._root.hasChildNodes()) {
+ this._root.removeChild(this._root.lastChild!);
+ }
+ return;
+ }
+
+ this._root.appendChild(this._itemRenderer(this._tree, this._depth, this._index));
+
+ this._tree.children.forEach((child, i) => {
+ const node = new WCTree(this._itemRenderer, this._depth + 1, i + 1, this._useShadowRoot);
+ node.tree = child as T;
+ this._root.appendChild(node);
+ });
+ }
+}
+
+window.customElements.define('wc-tree', WCTree);
diff --git a/apps/stress-test/src/shared/wc/types.ts b/apps/stress-test/src/shared/wc/types.ts
new file mode 100644
index 00000000000000..48fbc32bde2cdf
--- /dev/null
+++ b/apps/stress-test/src/shared/wc/types.ts
@@ -0,0 +1,4 @@
+export interface WCTestTree {}
+export interface TestOptions {
+ [key: string]: string | number;
+}
diff --git a/apps/stress-test/tsconfig.json b/apps/stress-test/tsconfig.json
index 0831510410cd52..84a9013ab71fc9 100644
--- a/apps/stress-test/tsconfig.json
+++ b/apps/stress-test/tsconfig.json
@@ -3,6 +3,7 @@
"compilerOptions": {
"noEmit": false,
"allowJs": true,
+ "checkJs": true,
"importHelpers": true,
"isolatedModules": true,
"jsx": "react",
@@ -13,5 +14,5 @@
"outDir": "./dist"
},
"include": ["src"],
- "exclude": ["node_modules"]
+ "exclude": ["node_modules", "src/fixtures"]
}
diff --git a/apps/stress-test/tsconfig.scripts.json b/apps/stress-test/tsconfig.scripts.json
new file mode 100644
index 00000000000000..aa733ecc6d8078
--- /dev/null
+++ b/apps/stress-test/tsconfig.scripts.json
@@ -0,0 +1,20 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "noEmit": false,
+ "allowJs": true,
+ "checkJs": true,
+ "importHelpers": true,
+ "isolatedModules": false,
+ "jsx": "react",
+ "noUnusedLocals": true,
+ "preserveConstEnums": true,
+ "experimentalDecorators": true,
+ "types": ["environment", "node"],
+ "moduleResolution": "node",
+ "module": "ESNext",
+ "esModuleInterop": true
+ },
+ "include": ["src", "scripts"],
+ "exclude": ["node_modules"]
+}
diff --git a/apps/stress-test/tsconfig.type.json b/apps/stress-test/tsconfig.type.json
new file mode 100644
index 00000000000000..6d2a4d4b82dc15
--- /dev/null
+++ b/apps/stress-test/tsconfig.type.json
@@ -0,0 +1,10 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "noEmit": true,
+ "moduleResolution": "node",
+ "module": "ESNext",
+ "esModuleInterop": true
+ },
+ "include": ["src", "scenarios", "webpack", "scripts"]
+}
diff --git a/apps/stress-test/webpack.config.js b/apps/stress-test/webpack.config.js
deleted file mode 100644
index f5d7408a615dcc..00000000000000
--- a/apps/stress-test/webpack.config.js
+++ /dev/null
@@ -1,68 +0,0 @@
-const path = require('path');
-const { CleanWebpackPlugin } = require('clean-webpack-plugin');
-const { TsconfigPathsPlugin } = require('tsconfig-paths-webpack-plugin');
-const { configurePages } = require('./pageConfig');
-const { configureGriffel } = require('./griffelConfig');
-
-module.exports = (env, argv) => {
- const isProd = argv.mode === 'production';
-
- let config = {
- output: {
- filename: '[name].[contenthash].bundle.js',
- sourceMapFilename: '[name].[contenthash].map',
- path: path.resolve(__dirname, 'dist'),
- },
- devtool: 'source-map',
- resolve: {
- extensions: ['.tsx', '.ts', '.js'],
- plugins: [
- new TsconfigPathsPlugin({
- configFile: path.resolve(__dirname, '../../tsconfig.base.json'),
- }),
- ],
- },
- module: {
- rules: [
- {
- test: /\.(ts|tsx)?$/,
- exclude: /node_modules/,
- oneOf: [
- {
- // Match Web Component files
- // Not sure why babel-loader isn't working but
- // the FAST docs use ts-loader and it "just works"
- // so let's roll with it for now.
- include: /\.wc\.(ts|tsx)?$/,
- use: 'ts-loader',
- },
- {
- use: 'swc-loader',
- },
- ],
- },
- ],
- },
- plugins: [new CleanWebpackPlugin()],
-
- optimization: {
- splitChunks: {
- chunks: 'all',
- },
- },
- };
-
- if (!isProd) {
- config.devServer = {
- port: 9000,
- open: false,
- hot: true,
- compress: true,
- };
- }
-
- config = configureGriffel(config);
- config = configurePages(config);
-
- return config;
-};
diff --git a/apps/stress-test/webpack/griffelConfig.ts b/apps/stress-test/webpack/griffelConfig.ts
new file mode 100644
index 00000000000000..ef699e94b0a483
--- /dev/null
+++ b/apps/stress-test/webpack/griffelConfig.ts
@@ -0,0 +1,63 @@
+import { GriffelCSSExtractionPlugin } from '@griffel/webpack-extraction-plugin';
+import MiniCssExtractPlugin from 'mini-css-extract-plugin';
+import webpack from 'webpack';
+import { GriffelMode } from '../scripts/utils/types';
+
+const griffelWebpackLoader: webpack.RuleSetRule = {
+ test: /\.(ts|tsx)$/,
+ exclude: [/node_modules/, /\.wc\.(ts|tsx)?$/],
+ use: {
+ loader: '@griffel/webpack-loader',
+ options: {
+ babelOptions: {
+ presets: ['@babel/preset-typescript'],
+ },
+ },
+ },
+};
+
+const griffelExtractionLoader: webpack.RuleSetRule = {
+ test: /\.(js|ts|tsx)$/,
+ // Apply "exclude" only if your dependencies **do not use** Griffel
+ // exclude: /node_modules/,
+ exclude: [/\.wc\.(ts|tsx)?$/, /v9\/simple\-stress/],
+ use: {
+ loader: GriffelCSSExtractionPlugin.loader,
+ },
+};
+const cssLoader = {
+ test: /\.css$/,
+ use: [MiniCssExtractPlugin.loader, 'css-loader'],
+};
+
+/**
+ * Take the Webpack config object and set properties to
+ * configure Griffel.
+ *
+ * NOTE: this function mutates the `config` object passed in to it.
+ */
+const configureGriffel: (config: webpack.Configuration, griffelMode: GriffelMode) => webpack.Configuration = (
+ config,
+ griffelMode,
+) => {
+ console.log(`Griffel running in ${griffelMode} mode.`);
+
+ config.module = config.module || {};
+
+ let rules = config.module.rules || [];
+ let plugins = config.plugins || [];
+
+ if (griffelMode === 'extraction') {
+ rules = [griffelExtractionLoader, griffelWebpackLoader, cssLoader, ...rules];
+ plugins = [...plugins, new MiniCssExtractPlugin(), new GriffelCSSExtractionPlugin()];
+ } else if (griffelMode === 'buildtime') {
+ rules = [griffelWebpackLoader, ...rules];
+ }
+
+ config.module.rules = rules;
+ config.plugins = plugins;
+
+ return config;
+};
+
+export { configureGriffel };
diff --git a/apps/stress-test/webpack/pageConfig.ts b/apps/stress-test/webpack/pageConfig.ts
new file mode 100644
index 00000000000000..02000396e03c1c
--- /dev/null
+++ b/apps/stress-test/webpack/pageConfig.ts
@@ -0,0 +1,91 @@
+import glob from 'glob';
+import HtmlWebpackPlugin from 'html-webpack-plugin';
+import webpack from 'webpack';
+
+/**
+ * Automatically configures Webpack to find pages so
+ * developers can just add new pages without touching
+ * the Webpack config.
+ */
+
+export type PageConfig = {
+ name: string;
+ path: string;
+ template: string;
+ output: string;
+};
+
+/**
+ * Find all the source pages and map them to
+ * config objects used to generate the Webpack config.
+ */
+const getPages: () => PageConfig[] = () => {
+ const extPattern = /\.(tsx?)/;
+ const pagePattern = './src/pages/**/*/index.?(tsx|ts)';
+
+ const files = glob.sync(pagePattern);
+
+ const pages = files.map(file => {
+ const template = file.replace(extPattern, '.html');
+ const prefix = './src/pages/';
+
+ const config = {
+ name: file.replace(prefix, '').replace(/\//g, '-').replace(extPattern, ''),
+ path: file,
+ template,
+ output: template.replace(prefix, ''),
+ };
+
+ return config;
+ });
+
+ return pages;
+};
+
+/**
+ * Take data from getPages() and generate Webpack
+ * config's `entry`.
+ */
+const getEntry: (pages: PageConfig[]) => webpack.Entry = pages => {
+ const init = {} as Record;
+ return pages.reduce((config, page) => {
+ config[page.name] = page.path;
+ return config;
+ }, init);
+};
+
+/**
+ * Take data from getPages() and generate
+ * HTML plugins for the pages.
+ */
+const getHtmlPlugin: (pages: PageConfig[]) => HtmlWebpackPlugin[] = pages => {
+ return pages.map(page => {
+ return new HtmlWebpackPlugin({
+ inject: 'body',
+ template: page.template,
+ filename: page.output,
+ chunks: [page.name],
+ });
+ });
+};
+
+/**
+ * Take the Webpack config object and set properties
+ * to automatically load pages.
+ *
+ * NOTE: this function mutates the `config` object passed in to it.
+ */
+const configurePages: (config: webpack.Configuration) => webpack.Configuration = config => {
+ const pages = getPages();
+
+ config.entry = getEntry(pages);
+ if (config.plugins) {
+ config.plugins = [...config.plugins, ...getHtmlPlugin(pages)];
+ } else {
+ config.plugins = getHtmlPlugin(pages);
+ }
+
+ return config;
+};
+
+export { configurePages };
diff --git a/apps/stress-test/webpack/webpack.config.ts b/apps/stress-test/webpack/webpack.config.ts
new file mode 100644
index 00000000000000..0082725a5112fd
--- /dev/null
+++ b/apps/stress-test/webpack/webpack.config.ts
@@ -0,0 +1,109 @@
+import * as path from 'path';
+import { fileURLToPath } from 'url';
+import { CleanWebpackPlugin } from 'clean-webpack-plugin';
+import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin';
+import { configurePages } from './pageConfig.js';
+import { configureGriffel } from './griffelConfig.js';
+import * as WebpackDevServer from 'webpack-dev-server';
+import { GriffelMode } from '../scripts/utils/types';
+
+const enabledReactProfiling = true;
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+
+type WebpackArgs = {
+ mode: 'production' | 'development' | 'none';
+ griffelMode: GriffelMode;
+};
+
+type WebpackConfigurationCreator = (
+ env: string | undefined,
+ argv: WebpackArgs,
+) => WebpackDevServer.WebpackConfiguration;
+
+const createConfig: WebpackConfigurationCreator = (_env, argv) => {
+ const isProd = argv.mode === 'production';
+
+ let config: WebpackDevServer.WebpackConfiguration = {
+ mode: argv.mode,
+ output: {
+ filename: '[name].[contenthash].bundle.js',
+ sourceMapFilename: '[name].[contenthash].map',
+ path: path.resolve(path.dirname(__dirname), !isProd ? 'dev-build' : 'dist'),
+ },
+ devtool: 'source-map',
+ resolve: {
+ alias: {
+ 'react-dom$': 'react-dom/profiling',
+ 'scheduler/tracing': 'scheduler/tracing-profiling',
+ },
+ extensions: ['.tsx', '.ts', '.js'],
+ plugins: [
+ new TsconfigPathsPlugin({
+ configFile: path.resolve(__dirname, '../../../tsconfig.base.json'),
+ }),
+ ],
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(ts|tsx)?$/,
+ exclude: /node_modules/,
+ use: {
+ loader: 'swc-loader',
+ options: {
+ jsc: {
+ target: 'es2019',
+ parser: {
+ syntax: 'typescript',
+ tsx: true,
+ decorators: true,
+ dynamicImport: true,
+ },
+ transform: {
+ decoratorMetadata: true,
+ legacyDecorator: true,
+ },
+ keepClassNames: true,
+ externalHelpers: true,
+ loose: true,
+ },
+ },
+ },
+ },
+ ],
+ },
+ plugins: [new CleanWebpackPlugin()],
+
+ optimization: {
+ minimize: isProd,
+ splitChunks: {
+ chunks: 'all',
+ },
+ },
+ };
+
+ if (enabledReactProfiling) {
+ config.resolve!.alias = {
+ ...config.resolve!.alias,
+ 'react-dom$': 'react-dom/profiling',
+ 'scheduler/tracing': 'scheduler/tracing-profiling',
+ };
+ }
+
+ if (!isProd) {
+ config.devServer = {
+ port: 9000,
+ open: false,
+ hot: true,
+ compress: true,
+ };
+ }
+
+ config = configureGriffel(config, argv.griffelMode);
+ config = configurePages(config);
+
+ return config;
+};
+
+export default createConfig;
diff --git a/apps/theming-designer/CHANGELOG.json b/apps/theming-designer/CHANGELOG.json
index 9aa47ec3381ac6..0747aa7d79700f 100644
--- a/apps/theming-designer/CHANGELOG.json
+++ b/apps/theming-designer/CHANGELOG.json
@@ -1,6 +1,168 @@
{
"name": "@fluentui/theming-designer",
"entries": [
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/theming-designer_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.3",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/theming-designer_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.2",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/theming-designer_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/theming-designer_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react-docsite-components to v8.10.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/theming-designer_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.36",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 12 Sep 2022 07:39:53 GMT",
+ "tag": "@fluentui/theming-designer_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.35",
+ "commit": "7f8bad094dadcdb671d5746848e96b5bd4b5791a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/theming-designer_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.34",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/theming-designer_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/theming-designer",
+ "comment": "Bump @fluentui/react-docsite-components to v8.9.33",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/theming-designer_v1.0.0",
diff --git a/apps/theming-designer/CHANGELOG.md b/apps/theming-designer/CHANGELOG.md
index bbe49ba91bd1c9..6a18d3f74bfab3 100644
--- a/apps/theming-designer/CHANGELOG.md
+++ b/apps/theming-designer/CHANGELOG.md
@@ -1,11 +1,90 @@
# Change Log - @fluentui/theming-designer
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Thu, 22 Sep 2022 07:43:45 GMT and should not be manually modified.
## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/theming-designer_v1.0.0)
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/theming-designer_v1.0.0..@fluentui/theming-designer_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.3 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/theming-designer_v1.0.0)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/theming-designer_v1.0.0..@fluentui/theming-designer_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.2 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/theming-designer_v1.0.0)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/theming-designer_v1.0.0..@fluentui/theming-designer_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/theming-designer_v1.0.0)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/theming-designer_v1.0.0..@fluentui/theming-designer_v1.0.0)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/react-docsite-components to v8.10.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/theming-designer_v1.0.0)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/theming-designer_v1.0.0..@fluentui/theming-designer_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+- Bump @fluentui/react-docsite-components to v8.9.36 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/theming-designer_v1.0.0)
+
+Mon, 12 Sep 2022 07:39:53 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/theming-designer_v1.0.0..@fluentui/theming-designer_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react-docsite-components to v8.9.35 ([PR #24746](https://github.com/microsoft/fluentui/pull/24746) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/theming-designer_v1.0.0)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/theming-designer_v1.0.0..@fluentui/theming-designer_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+- Bump @fluentui/react-docsite-components to v8.9.34 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/theming-designer_v1.0.0)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/theming-designer_v1.0.0..@fluentui/theming-designer_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+- Bump @fluentui/react-docsite-components to v8.9.33 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/theming-designer_v1.0.0)
+
Mon, 05 Sep 2022 07:38:30 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/theming-designer_v1.0.0..@fluentui/theming-designer_v1.0.0)
diff --git a/apps/theming-designer/package.json b/apps/theming-designer/package.json
index a6c948689b2c0d..aa50606ae3ac8e 100644
--- a/apps/theming-designer/package.json
+++ b/apps/theming-designer/package.json
@@ -18,13 +18,13 @@
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
- "@fluentui/react": "^8.94.1",
+ "@fluentui/react": "^8.98.8",
"@fluentui/merge-styles": "^8.5.3",
- "@fluentui/react-docsite-components": "^8.9.32",
- "@fluentui/foundation-legacy": "^8.2.20",
- "@fluentui/scheme-utilities": "^8.3.17",
+ "@fluentui/react-docsite-components": "^8.10.17",
+ "@fluentui/foundation-legacy": "^8.2.22",
+ "@fluentui/scheme-utilities": "^8.3.18",
"@fluentui/set-version": "^8.2.2",
- "@fluentui/font-icons-mdl2": "^8.4.13",
+ "@fluentui/font-icons-mdl2": "^8.5.2",
"@microsoft/load-themed-styles": "^1.10.26",
"react": "17.0.2",
"react-dom": "17.0.2",
diff --git a/apps/ts-minbar-test-react-components/CHANGELOG.json b/apps/ts-minbar-test-react-components/CHANGELOG.json
index 4f56284ac36792..9d0c8fb7a86179 100644
--- a/apps/ts-minbar-test-react-components/CHANGELOG.json
+++ b/apps/ts-minbar-test-react-components/CHANGELOG.json
@@ -1,6 +1,36 @@
{
"name": "@fluentui/ts-minbar-test-react-components",
"entries": [
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0",
+ "version": "9.0.0-rc.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ts-minbar-test-react-components",
+ "comment": "Bump @fluentui/react-components to v9.3.1",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:50:08 GMT",
+ "tag": "@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0",
+ "version": "9.0.0-rc.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ts-minbar-test-react-components",
+ "comment": "Bump @fluentui/react-components to v9.3.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:04:10 GMT",
"tag": "@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0",
diff --git a/apps/ts-minbar-test-react-components/CHANGELOG.md b/apps/ts-minbar-test-react-components/CHANGELOG.md
index 368edc8fde6830..bb82a6b9533b54 100644
--- a/apps/ts-minbar-test-react-components/CHANGELOG.md
+++ b/apps/ts-minbar-test-react-components/CHANGELOG.md
@@ -1,11 +1,29 @@
# Change Log - @fluentui/ts-minbar-test-react-components
-This log was last generated on Wed, 03 Aug 2022 16:04:10 GMT and should not be manually modified.
+This log was last generated on Tue, 20 Sep 2022 20:55:45 GMT and should not be manually modified.
## [9.0.0-rc.0](https://github.com/microsoft/fluentui/tree/@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0)
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0..@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0)
+
+### Patches
+
+- Bump @fluentui/react-components to v9.3.1 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.0.0-rc.0](https://github.com/microsoft/fluentui/tree/@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0)
+
+Thu, 15 Sep 2022 09:50:08 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0..@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0)
+
+### Patches
+
+- Bump @fluentui/react-components to v9.3.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
+## [9.0.0-rc.0](https://github.com/microsoft/fluentui/tree/@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0)
+
Wed, 03 Aug 2022 16:04:10 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0..@fluentui/ts-minbar-test-react-components_v9.0.0-rc.0)
diff --git a/apps/ts-minbar-test-react-components/package.json b/apps/ts-minbar-test-react-components/package.json
index da4173977d89e1..1ee18a144c16a2 100644
--- a/apps/ts-minbar-test-react-components/package.json
+++ b/apps/ts-minbar-test-react-components/package.json
@@ -5,7 +5,7 @@
"description": "Testing Fluent UI React Components compatibility with Typescript 3.9",
"license": "MIT",
"dependencies": {
- "@fluentui/react-components": "^9.2.0"
+ "@fluentui/react-components": "^9.6.1"
},
"scripts": {
"build": "just-scripts build",
diff --git a/apps/ts-minbar-test-react/CHANGELOG.json b/apps/ts-minbar-test-react/CHANGELOG.json
index 8608172e8ddfac..44cc92dff19cd8 100644
--- a/apps/ts-minbar-test-react/CHANGELOG.json
+++ b/apps/ts-minbar-test-react/CHANGELOG.json
@@ -1,6 +1,111 @@
{
"name": "@fluentui/ts-minbar-test-react",
"entries": [
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/ts-minbar-test-react_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ts-minbar-test-react",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/ts-minbar-test-react_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ts-minbar-test-react",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/ts-minbar-test-react_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ts-minbar-test-react",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/ts-minbar-test-react_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ts-minbar-test-react",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/ts-minbar-test-react_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ts-minbar-test-react",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/ts-minbar-test-react_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ts-minbar-test-react",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/ts-minbar-test-react_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/ts-minbar-test-react",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/ts-minbar-test-react_v1.0.0",
diff --git a/apps/ts-minbar-test-react/CHANGELOG.md b/apps/ts-minbar-test-react/CHANGELOG.md
index e0ce39ffd74195..55ab8e316a0b8f 100644
--- a/apps/ts-minbar-test-react/CHANGELOG.md
+++ b/apps/ts-minbar-test-react/CHANGELOG.md
@@ -1,11 +1,74 @@
# Change Log - @fluentui/ts-minbar-test-react
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Thu, 22 Sep 2022 07:43:45 GMT and should not be manually modified.
## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ts-minbar-test-react_v1.0.0)
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ts-minbar-test-react_v1.0.0..@fluentui/ts-minbar-test-react_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ts-minbar-test-react_v1.0.0)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ts-minbar-test-react_v1.0.0..@fluentui/ts-minbar-test-react_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ts-minbar-test-react_v1.0.0)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ts-minbar-test-react_v1.0.0..@fluentui/ts-minbar-test-react_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ts-minbar-test-react_v1.0.0)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ts-minbar-test-react_v1.0.0..@fluentui/ts-minbar-test-react_v1.0.0)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ts-minbar-test-react_v1.0.0)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ts-minbar-test-react_v1.0.0..@fluentui/ts-minbar-test-react_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ts-minbar-test-react_v1.0.0)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ts-minbar-test-react_v1.0.0..@fluentui/ts-minbar-test-react_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ts-minbar-test-react_v1.0.0)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ts-minbar-test-react_v1.0.0..@fluentui/ts-minbar-test-react_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/ts-minbar-test-react_v1.0.0)
+
Mon, 05 Sep 2022 07:38:30 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/ts-minbar-test-react_v1.0.0..@fluentui/ts-minbar-test-react_v1.0.0)
diff --git a/apps/ts-minbar-test-react/package.json b/apps/ts-minbar-test-react/package.json
index d8bb55c3560203..78c0826f9fa844 100644
--- a/apps/ts-minbar-test-react/package.json
+++ b/apps/ts-minbar-test-react/package.json
@@ -5,7 +5,7 @@
"description": "Testing Fluent UI React compatibility with Typescript 3.9",
"license": "MIT",
"dependencies": {
- "@fluentui/react": "^8.94.1"
+ "@fluentui/react": "^8.98.8"
},
"scripts": {
"build": "just-scripts build",
diff --git a/apps/vr-tests-react-components/CHANGELOG.json b/apps/vr-tests-react-components/CHANGELOG.json
index 2cb34ad23b58b5..af15cfdf47cbcb 100644
--- a/apps/vr-tests-react-components/CHANGELOG.json
+++ b/apps/vr-tests-react-components/CHANGELOG.json
@@ -1,6 +1,360 @@
{
"name": "@fluentui/vr-tests-react-components",
"entries": [
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/vr-tests-react-components_v9.0.0-rc.0",
+ "version": "9.0.0-rc.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-accordion to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-avatar to v9.1.1",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-badge to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-button to v9.1.2",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-card to v9.0.0-beta.26",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-checkbox to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-divider to v9.1.0",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-field to v9.0.0-alpha.2",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-image to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-input to v9.1.1",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-label to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-link to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-menu to v9.2.0",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-popover to v9.1.1",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-provider to v9.1.2",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-radio to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-select to v9.0.0-beta.10",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-slider to v9.0.5",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-spinner to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-spinbutton to v9.0.2",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-switch to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-tabs to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-table to v9.0.0-alpha.3",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-text to v9.1.1",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-textarea to v9.1.0",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-tooltip to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:50:08 GMT",
+ "tag": "@fluentui/vr-tests-react-components_v9.0.0-rc.0",
+ "version": "9.0.0-rc.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-accordion to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-avatar to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-badge to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-button to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-card to v9.0.0-beta.25",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-checkbox to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-divider to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-field to v9.0.0-alpha.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-image to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-input to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-label to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-link to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-menu to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-popover to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-positioning to v9.2.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-provider to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-radio to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-select to v9.0.0-beta.9",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-shared-contexts to v9.0.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-slider to v9.0.4",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-spinner to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-spinbutton to v9.0.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-switch to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-tabs to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-table to v9.0.0-alpha.2",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-text to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-textarea to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-tooltip to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests-react-components",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:04:10 GMT",
"tag": "@fluentui/vr-tests-react-components_v9.0.0-rc.0",
diff --git a/apps/vr-tests-react-components/CHANGELOG.md b/apps/vr-tests-react-components/CHANGELOG.md
index bef375703cd226..08c00f8aace48c 100644
--- a/apps/vr-tests-react-components/CHANGELOG.md
+++ b/apps/vr-tests-react-components/CHANGELOG.md
@@ -1,11 +1,83 @@
# Change Log - @fluentui/vr-tests-react-components
-This log was last generated on Wed, 03 Aug 2022 16:04:10 GMT and should not be manually modified.
+This log was last generated on Tue, 20 Sep 2022 20:55:45 GMT and should not be manually modified.
## [9.0.0-rc.0](https://github.com/microsoft/fluentui/tree/@fluentui/vr-tests-react-components_v9.0.0-rc.0)
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/vr-tests-react-components_v9.0.0-rc.0..@fluentui/vr-tests-react-components_v9.0.0-rc.0)
+
+### Patches
+
+- Bump @fluentui/react-accordion to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-avatar to v9.1.1 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-badge to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-button to v9.1.2 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-card to v9.0.0-beta.26 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-checkbox to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-divider to v9.1.0 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-field to v9.0.0-alpha.2 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-image to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-input to v9.1.1 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-label to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-link to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-menu to v9.2.0 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-popover to v9.1.1 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-provider to v9.1.2 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-radio to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-select to v9.0.0-beta.10 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-slider to v9.0.5 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-spinner to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-spinbutton to v9.0.2 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-switch to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-tabs to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-table to v9.0.0-alpha.3 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-text to v9.1.1 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-textarea to v9.1.0 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-tooltip to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.0.0-rc.0](https://github.com/microsoft/fluentui/tree/@fluentui/vr-tests-react-components_v9.0.0-rc.0)
+
+Thu, 15 Sep 2022 09:50:08 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/vr-tests-react-components_v9.0.0-rc.0..@fluentui/vr-tests-react-components_v9.0.0-rc.0)
+
+### Patches
+
+- Bump @fluentui/react-accordion to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-avatar to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-badge to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-button to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-card to v9.0.0-beta.25 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-checkbox to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-divider to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-field to v9.0.0-alpha.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-image to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-input to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-label to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-link to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-menu to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-popover to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-positioning to v9.2.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-provider to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-radio to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-select to v9.0.0-beta.9 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-shared-contexts to v9.0.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-slider to v9.0.4 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-spinner to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-spinbutton to v9.0.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-switch to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-tabs to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-table to v9.0.0-alpha.2 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-text to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-textarea to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-tooltip to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
+## [9.0.0-rc.0](https://github.com/microsoft/fluentui/tree/@fluentui/vr-tests-react-components_v9.0.0-rc.0)
+
Wed, 03 Aug 2022 16:04:10 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/vr-tests-react-components_v9.0.0-rc.0..@fluentui/vr-tests-react-components_v9.0.0-rc.0)
diff --git a/apps/vr-tests-react-components/package.json b/apps/vr-tests-react-components/package.json
index 1d8539ff652875..fbf47998f437c6 100644
--- a/apps/vr-tests-react-components/package.json
+++ b/apps/vr-tests-react-components/package.json
@@ -17,38 +17,42 @@
"@fluentui/eslint-plugin": "*"
},
"dependencies": {
- "@fluentui/react-accordion": "^9.0.4",
- "@fluentui/react-avatar": "^9.0.4",
- "@fluentui/react-badge": "^9.0.4",
- "@fluentui/react-button": "^9.1.0",
- "@fluentui/react-card": "9.0.0-beta.24",
- "@fluentui/react-checkbox": "^9.0.4",
- "@fluentui/react-divider": "^9.0.4",
+ "@fluentui/react-accordion": "^9.0.9",
+ "@fluentui/react-avatar": "^9.2.4",
+ "@fluentui/react-badge": "^9.0.10",
+ "@fluentui/react-button": "^9.1.6",
+ "@fluentui/react-card": "9.0.0-beta.30",
+ "@fluentui/react-checkbox": "^9.0.10",
+ "@fluentui/react-dialog": "^9.0.3",
+ "@fluentui/react-divider": "^9.1.2",
+ "@fluentui/react-field": "9.0.0-alpha.6",
"@fluentui/react-icons": "^2.0.175",
- "@fluentui/react-image": "^9.0.4",
- "@fluentui/react-input": "^9.0.4",
- "@fluentui/react-label": "^9.0.4",
- "@fluentui/react-link": "^9.0.4",
- "@fluentui/react-menu": "^9.0.4",
- "@fluentui/react-popover": "^9.0.4",
- "@fluentui/react-positioning": "^9.1.2",
- "@fluentui/react-provider": "^9.1.0",
- "@fluentui/react-radio": "^9.0.4",
- "@fluentui/react-select": "9.0.0-beta.8",
- "@fluentui/react-shared-contexts": "^9.0.0",
- "@fluentui/react-slider": "^9.0.3",
- "@fluentui/react-spinner": "^9.0.4",
- "@fluentui/react-spinbutton": "^9.0.0",
- "@fluentui/react-switch": "^9.0.4",
- "@fluentui/react-tabs": "^9.0.4",
- "@fluentui/react-table": "9.0.0-alpha.1",
- "@fluentui/react-text": "^9.0.4",
- "@fluentui/react-textarea": "^9.0.4",
- "@fluentui/react-theme": "^9.0.0",
- "@fluentui/react-tooltip": "^9.0.4",
- "@fluentui/react-utilities": "^9.0.2",
+ "@fluentui/react-image": "^9.0.9",
+ "@fluentui/react-input": "^9.2.3",
+ "@fluentui/react-label": "^9.0.8",
+ "@fluentui/react-link": "^9.0.9",
+ "@fluentui/react-menu": "^9.3.1",
+ "@fluentui/react-persona": "9.1.0-beta.1",
+ "@fluentui/react-popover": "^9.2.1",
+ "@fluentui/react-positioning": "^9.2.2",
+ "@fluentui/react-progress": "9.0.0-alpha.3",
+ "@fluentui/react-provider": "^9.1.5",
+ "@fluentui/react-radio": "^9.0.9",
+ "@fluentui/react-select": "9.0.0-beta.12",
+ "@fluentui/react-shared-contexts": "^9.0.2",
+ "@fluentui/react-slider": "^9.0.8",
+ "@fluentui/react-spinner": "^9.0.8",
+ "@fluentui/react-spinbutton": "^9.0.6",
+ "@fluentui/react-switch": "^9.0.9",
+ "@fluentui/react-tabs": "^9.0.9",
+ "@fluentui/react-table": "9.0.0-alpha.8",
+ "@fluentui/react-text": "^9.1.4",
+ "@fluentui/react-textarea": "^9.1.3",
+ "@fluentui/react-theme": "^9.1.1",
+ "@fluentui/react-tooltip": "^9.0.9",
+ "@fluentui/react-utilities": "^9.1.2",
"@fluentui/scripts": "^1.0.0",
- "@griffel/react": "^1.3.0",
+ "@griffel/react": "^1.4.1",
"react": "17.0.2",
"react-dom": "17.0.2",
"screener-storybook": "0.23.0",
diff --git a/apps/vr-tests-react-components/screener.config.js b/apps/vr-tests-react-components/screener.config.js
index caa843a8fbb11f..0e229136d99d10 100644
--- a/apps/vr-tests-react-components/screener.config.js
+++ b/apps/vr-tests-react-components/screener.config.js
@@ -17,26 +17,33 @@ function getCurrentHash() {
return '';
}
+/**
+ *
+ * @param {Object} options
+ * @param {string} options.screenerApiKey
+ * @param {string} options.sourceBranchName
+ * @param {string} options.deployUrl
+ * @param {string} options.targetBranch
+ * @returns {import('@fluentui/scripts/screener/screener.types').ScreenerRunnerConfig}
+ */
+function getConfig({ screenerApiKey, sourceBranchName, deployUrl, targetBranch }) {
+ const baseBranch = targetBranch ? targetBranch.replace(/^refs\/heads\//, '') : 'master';
+ // https://github.com/screener-io/screener-storybook#additional-configuration-options
+ const config = {
+ projectRepo: 'microsoft/fluentui/react-components',
+ storybookStaticBuildDir: 'dist/storybook',
+ storybookConfigDir: '.storybook',
+ apiKey: screenerApiKey,
+ resolution: '1024x768',
+ baseBranch,
+ failureExitCode: 0,
+ alwaysAcceptBaseBranch: true,
+ states: [],
+ ...(sourceBranchName !== 'master' ? { commit: getCurrentHash() } : null),
+ baseUrl: `${deployUrl}/react-components-screener/iframe.html`,
+ };
+ console.log('Screener config: ' + JSON.stringify({ ...config, apiKey: '...' }, null, 2));
+ return config;
+}
-const baseBranch = process.env.SYSTEM_PULLREQUEST_TARGETBRANCH
- ? process.env.SYSTEM_PULLREQUEST_TARGETBRANCH.replace(/^refs\/heads\//, '')
- : 'master';
-
-// https://github.com/screener-io/screener-storybook#additional-configuration-options
-const config = {
- projectRepo: 'microsoft/fluentui/react-components',
- storybookStaticBuildDir: 'dist/storybook',
- storybookConfigDir: '.storybook',
- apiKey: process.env.SCREENER_API_KEY,
- resolution: '1024x768',
- baseBranch,
- failureExitCode: 0,
- alwaysAcceptBaseBranch: true,
- ...(process.env.BUILD_SOURCEBRANCH && process.env.BUILD_SOURCEBRANCH.indexOf('refs/pull') > -1
- ? { commit: getCurrentHash() }
- : null),
- baseUrl: `${process.env.DEPLOYURL}/react-components-screener/iframe.html`,
-};
-console.log('Screener config: ' + JSON.stringify({ ...config, apiKey: '...' }, null, 2));
-
-module.exports = config;
+module.exports = getConfig;
diff --git a/apps/vr-tests-react-components/src/stories/AvatarGroup.stories.tsx b/apps/vr-tests-react-components/src/stories/AvatarGroup.stories.tsx
index 87fee0366f9a63..940e110f441951 100644
--- a/apps/vr-tests-react-components/src/stories/AvatarGroup.stories.tsx
+++ b/apps/vr-tests-react-components/src/stories/AvatarGroup.stories.tsx
@@ -57,11 +57,13 @@ const AvatarGroupList: React.FC<
{inlineItems.map(name => (
))}
-
- {overflowItems.map(name => (
-
- ))}
-
+ {overflowItems && (
+
+ {overflowItems.map(name => (
+
+ ))}
+
+ )}
))}
@@ -131,7 +133,7 @@ storiesOf('AvatarGroup Converged', module)
storiesOf('AvatarGroup Converged', module)
.addDecorator(TestWrapperDecorator)
.addDecorator(story => (
-
+
{story()}
))
@@ -145,11 +147,13 @@ storiesOf('AvatarGroup Converged', module)
{inlineItems.map(name => (
))}
-
- {overflowItems.map(name => (
-
- ))}
-
+ {overflowItems && (
+
+ {overflowItems.map(name => (
+
+ ))}
+
+ )}
);
diff --git a/apps/vr-tests-react-components/src/stories/Button.stories.tsx b/apps/vr-tests-react-components/src/stories/Button.stories.tsx
index 68be66eb1cd8b0..bb064b192f7b49 100644
--- a/apps/vr-tests-react-components/src/stories/Button.stories.tsx
+++ b/apps/vr-tests-react-components/src/stories/Button.stories.tsx
@@ -2,6 +2,10 @@ import { storiesOf } from '@storybook/react';
import * as React from 'react';
import Screener from 'screener-storybook/src/screener';
import { Button, CompoundButton, ToggleButton, MenuButton } from '@fluentui/react-button';
+import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
+import { makeStyles } from '@griffel/react';
+
+const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
const steps = new Screener.Steps()
.snapshot('default', { cropTo: '.testWrapper' })
@@ -13,6 +17,12 @@ const steps = new Screener.Steps()
const buttonId = 'button-id';
+const useStyles = makeStyles({
+ longText: {
+ width: '280px',
+ },
+});
+
storiesOf('Button Converged', module)
.addDecorator(story => {story()} )
.addStory('Default', () => Hello, world , {
@@ -20,6 +30,11 @@ storiesOf('Button Converged', module)
includeHighContrast: true,
includeDarkMode: true,
})
+ .addStory('As an anchor', () => (
+
+ Hello, world
+
+ ))
.addStory('Circular', () => (
Hello, world
@@ -118,19 +133,43 @@ storiesOf('Button Converged', module)
{ includeHighContrast: true, includeDarkMode: true },
)
.addStory('Size small', () => (
-
+ } size="small">
Hello, world
))
.addStory('Size large', () => (
-
+ } size="large">
Hello, world
))
+ .addStory('Size small - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ } size="small">
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
+ .addStory('Size medium - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ } size="medium">
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
+ .addStory('Size large - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ } size="large">
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
.addStory(
'With icon before content',
() => (
-
+ }>
Hello, world
),
@@ -141,14 +180,14 @@ storiesOf('Button Converged', module)
.addStory(
'With icon after content',
() => (
-
+ } iconPosition="after">
Hello, world
),
{ includeRtl: true },
)
- .addStory('Icon only', () => )
- .addStory('Circular and icon only', () => , {
+ .addStory('Icon only', () => } />)
+ .addStory('Circular and icon only', () => } />, {
includeRtl: true,
});
@@ -179,7 +218,7 @@ storiesOf('CompoundButton Converged', module)
.addStory(
'With icon before content',
() => (
-
+ }>
Hello, world
),
@@ -188,7 +227,12 @@ storiesOf('CompoundButton Converged', module)
.addStory(
'With icon after content',
() => (
-
+ }
+ iconPosition="after"
+ >
Hello, world
),
@@ -248,20 +292,65 @@ storiesOf('CompoundButton Converged', module)
))
.addStory('Size small', () => (
-
+ } size="small">
Hello, world
))
.addStory('Size large', () => (
-
+ } size="large">
Hello, world
))
-
- .addStory('Icon only', () => )
- .addStory('Circular and icon only', () => , {
- includeRtl: true,
- });
+ .addStory('Size small - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ }
+ size="small"
+ >
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
+ .addStory('Size medium - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ }
+ size="medium"
+ >
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
+ .addStory('Size large - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ }
+ size="large"
+ >
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
+ .addStory('Icon only', () => } />)
+ .addStory(
+ 'Circular and icon only',
+ () => } />,
+ {
+ includeRtl: true,
+ },
+ );
storiesOf('ToggleButton Converged', module)
.addDecorator(story => {story()} )
@@ -323,27 +412,51 @@ storiesOf('ToggleButton Converged', module)
))
.addStory('Size small', () => (
-
+ } size="small">
Hello, world
))
.addStory('Size large', () => (
-
+ } size="large">
Hello, world
))
+ .addStory('Size small - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ } size="small">
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
+ .addStory('Size medium - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ } size="medium">
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
+ .addStory('Size large - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ } size="large">
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
.addStory('With icon before content', () => (
-
+ }>
Hello, world
))
.addStory('With icon after content', () => (
-
+ } iconPosition="after">
Hello, world
))
- .addStory('Icon only', () => )
- .addStory('Circular and icon only', () => )
+ .addStory('Icon only', () => } />)
+ .addStory('Circular and icon only', () => } />)
.addStory('Checked', () => (
Hello, world
@@ -419,19 +532,43 @@ storiesOf('MenuButton Converged', module)
))
.addStory('Size small', () => (
-
+ } size="small">
Hello, world
))
.addStory('Size large', () => (
-
+ } size="large">
Hello, world
))
+ .addStory('Size small - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ } size="small">
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
+ .addStory('Size medium - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ } size="medium">
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
+ .addStory('Size large - with long text wrapping', () => {
+ const styles = useStyles();
+ return (
+ } size="large">
+ Long text wraps after it hits the max width of the component
+
+ );
+ })
.addStory('With icon', () => (
-
+ }>
Hello, world
))
- .addStory('Icon only', () => )
- .addStory('Circular and icon only', () => );
+ .addStory('Icon only', () => } />)
+ .addStory('Circular and icon only', () => } />);
diff --git a/apps/vr-tests-react-components/src/stories/Checkbox.stories.tsx b/apps/vr-tests-react-components/src/stories/Checkbox.stories.tsx
index 1be12aa908a5cd..ec456a60d55a09 100644
--- a/apps/vr-tests-react-components/src/stories/Checkbox.stories.tsx
+++ b/apps/vr-tests-react-components/src/stories/Checkbox.stories.tsx
@@ -19,7 +19,7 @@ storiesOf('Checkbox Converged', module)
{story()}
))
- .addStory('unchecked', () => )
+ .addStory('unchecked', () => , { includeRtl: true })
.addStory('checked', () => )
.addStory('mixed', () => )
.addStory('disabled', () => );
@@ -32,17 +32,21 @@ storiesOf('Checkbox Converged', module)
.addStory('disabled+checked', () => )
.addStory('disabled+mixed', () => )
.addStory('no-label', () => )
- .addStory('label-before', () => )
- .addStory('label-wrapping', () => (
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
- magna aliqua
- >
- }
- />
- ))
+ .addStory('label-before', () => , { includeRtl: true })
+ .addStory(
+ 'label-wrapping',
+ () => (
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
+ dolore magna aliqua
+ >
+ }
+ />
+ ),
+ { includeRtl: true },
+ )
.addStory('required', () => )
.addStory('required+label-before', () => (
@@ -53,7 +57,7 @@ storiesOf('Checkbox Converged', module)
//
// large variants
//
- .addStory('large', () => )
+ .addStory('large', () => , { includeRtl: true })
.addStory('large+checked', () => )
.addStory('large+mixed', () => )
.addStory('large+circular', () => )
@@ -63,14 +67,18 @@ storiesOf('Checkbox Converged', module)
.addStory('large+circular+mixed', () => (
))
- .addStory('large+label-wrapping', () => (
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
- magna aliqua
- >
- }
- />
- ));
+ .addStory(
+ 'large+label-wrapping',
+ () => (
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
+ dolore magna aliqua
+ >
+ }
+ />
+ ),
+ { includeRtl: true },
+ );
diff --git a/apps/vr-tests-react-components/src/stories/Dialog.stories.tsx b/apps/vr-tests-react-components/src/stories/Dialog.stories.tsx
new file mode 100644
index 00000000000000..98ccf2836eb637
--- /dev/null
+++ b/apps/vr-tests-react-components/src/stories/Dialog.stories.tsx
@@ -0,0 +1,411 @@
+import * as React from 'react';
+import { storiesOf } from '@storybook/react';
+import {
+ Dialog,
+ DialogActions,
+ DialogBody,
+ DialogContent,
+ DialogSurface,
+ DialogTitle,
+ DialogTrigger,
+} from '@fluentui/react-dialog';
+import { Button } from '@fluentui/react-button';
+import { Rocket24Regular } from '@fluentui/react-icons';
+
+storiesOf('Dialog', module)
+ .addStory(
+ 'default',
+ () => (
+
+
+ Open dialog
+
+
+
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+ Close
+
+ Do Something
+
+
+
+
+ ),
+ { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
+ )
+ .addStory(
+ 'non-modal',
+ () => (
+
+
+ Open dialog
+
+
+
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+ Close
+
+ Do Something
+
+
+
+
+ ),
+ { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
+ )
+ .addStory(
+ 'alert',
+ () => (
+
+
+ Open dialog
+
+
+
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+ Close
+
+ Do Something
+
+
+
+
+ ),
+ { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
+ )
+ .addStory(
+ 'actions position start',
+ () => (
+
+
+ Open dialog
+
+
+
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+ Close
+
+ Do Something
+
+
+
+
+ ),
+ { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
+ )
+ .addStory(
+ 'actions position start & position end',
+ () => (
+
+
+ Open dialog
+
+
+
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+ Some action
+
+
+
+
+ Close
+
+ Do Something
+
+
+
+
+ ),
+ { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
+ )
+ .addStory(
+ 'no actions',
+ () => (
+
+
+ Open dialog
+
+
+
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+
+ ),
+ { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
+ )
+ .addStory(
+ 'no title',
+ () => (
+
+
+ Open dialog
+
+
+
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+ Close
+
+ Do Something
+
+
+
+
+ ),
+ { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
+ )
+ .addStory(
+ 'no title & no actions',
+ () => (
+
+
+ Open dialog
+
+
+
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+
+ ),
+ { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
+ )
+ .addStory(
+ 'title custom action',
+ () => (
+
+
+ Open dialog
+
+
+
+ } />}>
+ Dialog title
+
+
+ Lorem, ipsum dolor sit amet consectetur adipisicing elit. Aliquid, explicabo repudiandae impedit doloribus
+ laborum quidem maxime dolores perspiciatis non ipsam, nostrum commodi quis autem sequi, incidunt cum?
+ Consequuntur, repellendus nostrum?
+
+
+
+
+ ),
+ { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
+ )
+ .addStory(
+ 'nested',
+ () => (
+
+
+ Open nested dialog
+
+
+
+ Dialog title
+
+
+
+ Open inner dialog
+
+
+
+ Inner dialog title
+
+ ⛔️ just because you can doesn't mean you should have nested dialogs ⛔️
+
+
+
+ Close
+
+
+
+
+
+
+
+
+
+ ),
+ { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
+ )
+ .addStory(
+ 'scroll long content',
+ () => (
+
+
+ Open dialog
+
+
+
+ Dialog title
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
+ dolore magna aliqua. Nisl pretium fusce id velit ut tortor. Leo vel fringilla est ullamcorper. Eget est
+ lorem ipsum dolor sit amet consectetur adipiscing elit. In mollis nunc sed id semper risus in hendrerit
+ gravida. Ullamcorper sit amet risus nullam eget felis eget. Dolor sed viverra ipsum nunc aliquet
+ bibendum. Facilisi morbi tempus iaculis urna id volutpat. Porta non pulvinar neque laoreet suspendisse.
+ Nunc id cursus metus aliquam eleifend mi in. A iaculis at erat pellentesque adipiscing commodo. Proin
+ nibh nisl condimentum id. In hac habitasse platea dictumst vestibulum rhoncus est. Non tellus orci ac
+ auctor augue mauris augue neque. Enim nulla aliquet porttitor lacus luctus accumsan tortor. Nascetur
+ ridiculus mus mauris vitae ultricies leo integer. Ullamcorper eget nulla facilisi etiam dignissim. Leo
+ in vitae turpis massa sed elementum tempus egestas sed.
+
+
+ Ut enim blandit volutpat maecenas volutpat. Venenatis urna cursus eget nunc scelerisque viverra mauris.
+ Neque aliquam vestibulum morbi blandit. Porttitor eget dolor morbi non. Nisi quis eleifend quam
+ adipiscing vitae. Aliquam ultrices sagittis orci a scelerisque purus semper. Interdum varius sit amet
+ mattis vulputate enim nulla aliquet. Ut sem viverra aliquet eget sit amet tellus cras. Sit amet tellus
+ cras adipiscing enim eu turpis egestas. Amet cursus sit amet dictum sit amet justo donec enim. Neque
+ gravida in fermentum et sollicitudin ac. Arcu cursus euismod quis viverra nibh cras pulvinar mattis
+ nunc. Ultrices eros in cursus turpis massa tincidunt dui. Nisl rhoncus mattis rhoncus urna neque viverra
+ justo. Odio pellentesque diam volutpat commodo sed egestas. Nunc mi ipsum faucibus vitae aliquet nec
+ ullamcorper. Ipsum nunc aliquet bibendum enim. Faucibus ornare suspendisse sed nisi lacus sed. Sapien
+ nec sagittis aliquam malesuada bibendum arcu vitae elementum. Metus vulputate eu scelerisque felis
+ imperdiet.
+
+
+ Consequat interdum varius sit amet mattis vulputate enim. Amet cursus sit amet dictum sit amet justo.
+ Eget aliquet nibh praesent tristique magna sit. Ut consequat semper viverra nam libero justo. Pharetra
+ massa massa ultricies mi. Sem viverra aliquet eget sit amet. Pulvinar mattis nunc sed blandit libero
+ volutpat sed. Pharetra diam sit amet nisl suscipit adipiscing bibendum. Consectetur adipiscing elit ut
+ aliquam. Volutpat diam ut venenatis tellus in metus vulputate. Scelerisque in dictum non consectetur a
+ erat. Venenatis lectus magna fringilla urna porttitor rhoncus. Vitae congue mauris rhoncus aenean vel
+ elit. Neque laoreet suspendisse interdum consectetur. Ultrices gravida dictum fusce ut placerat orci.
+ Bibendum ut tristique et egestas quis ipsum suspendisse. Mattis rhoncus urna neque viverra justo nec
+ ultrices dui. Elit duis tristique sollicitudin nibh sit amet.
+
+
+ At risus viverra adipiscing at. Interdum posuere lorem ipsum dolor sit amet consectetur adipiscing elit.
+ Nunc vel risus commodo viverra maecenas. Sit amet est placerat in egestas erat imperdiet sed euismod.
+ Turpis egestas maecenas pharetra convallis posuere. Egestas tellus rutrum tellus pellentesque eu
+ tincidunt tortor aliquam. Dolor sit amet consectetur adipiscing elit. Aliquam purus sit amet luctus
+ venenatis lectus magna fringilla. Scelerisque fermentum dui faucibus in ornare quam viverra. Egestas
+ maecenas pharetra convallis posuere morbi leo urna. A diam sollicitudin tempor id eu nisl nunc. Lectus
+ sit amet est placerat.
+
+
+ Mattis ullamcorper velit sed ullamcorper morbi tincidunt ornare massa eget. At tellus at urna
+ condimentum mattis pellentesque id nibh. Dui faucibus in ornare quam. Tincidunt id aliquet risus feugiat
+ in ante metus dictum. Adipiscing commodo elit at imperdiet dui. Dolor sed viverra ipsum nunc. Sodales
+ neque sodales ut etiam sit amet nisl. Hendrerit dolor magna eget est lorem ipsum dolor sit amet. Mattis
+ molestie a iaculis at erat pellentesque adipiscing. Adipiscing elit duis tristique sollicitudin nibh sit
+ amet commodo nulla. Fringilla urna porttitor rhoncus dolor purus.
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
+ dolore magna aliqua. Nisl pretium fusce id velit ut tortor. Leo vel fringilla est ullamcorper. Eget est
+ lorem ipsum dolor sit amet consectetur adipiscing elit. In mollis nunc sed id semper risus in hendrerit
+ gravida. Ullamcorper sit amet risus nullam eget felis eget. Dolor sed viverra ipsum nunc aliquet
+ bibendum. Facilisi morbi tempus iaculis urna id volutpat. Porta non pulvinar neque laoreet suspendisse.
+ Nunc id cursus metus aliquam eleifend mi in. A iaculis at erat pellentesque adipiscing commodo. Proin
+ nibh nisl condimentum id. In hac habitasse platea dictumst vestibulum rhoncus est. Non tellus orci ac
+ auctor augue mauris augue neque. Enim nulla aliquet porttitor lacus luctus accumsan tortor. Nascetur
+ ridiculus mus mauris vitae ultricies leo integer. Ullamcorper eget nulla facilisi etiam dignissim. Leo
+ in vitae turpis massa sed elementum tempus egestas sed.
+
+
+ Ut enim blandit volutpat maecenas volutpat. Venenatis urna cursus eget nunc scelerisque viverra mauris.
+ Neque aliquam vestibulum morbi blandit. Porttitor eget dolor morbi non. Nisi quis eleifend quam
+ adipiscing vitae. Aliquam ultrices sagittis orci a scelerisque purus semper. Interdum varius sit amet
+ mattis vulputate enim nulla aliquet. Ut sem viverra aliquet eget sit amet tellus cras. Sit amet tellus
+ cras adipiscing enim eu turpis egestas. Amet cursus sit amet dictum sit amet justo donec enim. Neque
+ gravida in fermentum et sollicitudin ac. Arcu cursus euismod quis viverra nibh cras pulvinar mattis
+ nunc. Ultrices eros in cursus turpis massa tincidunt dui. Nisl rhoncus mattis rhoncus urna neque viverra
+ justo. Odio pellentesque diam volutpat commodo sed egestas. Nunc mi ipsum faucibus vitae aliquet nec
+ ullamcorper. Ipsum nunc aliquet bibendum enim. Faucibus ornare suspendisse sed nisi lacus sed. Sapien
+ nec sagittis aliquam malesuada bibendum arcu vitae elementum. Metus vulputate eu scelerisque felis
+ imperdiet.
+
+
+ Consequat interdum varius sit amet mattis vulputate enim. Amet cursus sit amet dictum sit amet justo.
+ Eget aliquet nibh praesent tristique magna sit. Ut consequat semper viverra nam libero justo. Pharetra
+ massa massa ultricies mi. Sem viverra aliquet eget sit amet. Pulvinar mattis nunc sed blandit libero
+ volutpat sed. Pharetra diam sit amet nisl suscipit adipiscing bibendum. Consectetur adipiscing elit ut
+ aliquam. Volutpat diam ut venenatis tellus in metus vulputate. Scelerisque in dictum non consectetur a
+ erat. Venenatis lectus magna fringilla urna porttitor rhoncus. Vitae congue mauris rhoncus aenean vel
+ elit. Neque laoreet suspendisse interdum consectetur. Ultrices gravida dictum fusce ut placerat orci.
+ Bibendum ut tristique et egestas quis ipsum suspendisse. Mattis rhoncus urna neque viverra justo nec
+ ultrices dui. Elit duis tristique sollicitudin nibh sit amet.
+
+
+ At risus viverra adipiscing at. Interdum posuere lorem ipsum dolor sit amet consectetur adipiscing elit.
+ Nunc vel risus commodo viverra maecenas. Sit amet est placerat in egestas erat imperdiet sed euismod.
+ Turpis egestas maecenas pharetra convallis posuere. Egestas tellus rutrum tellus pellentesque eu
+ tincidunt tortor aliquam. Dolor sit amet consectetur adipiscing elit. Aliquam purus sit amet luctus
+ venenatis lectus magna fringilla. Scelerisque fermentum dui faucibus in ornare quam viverra. Egestas
+ maecenas pharetra convallis posuere morbi leo urna. A diam sollicitudin tempor id eu nisl nunc. Lectus
+ sit amet est placerat.
+
+
+ Mattis ullamcorper velit sed ullamcorper morbi tincidunt ornare massa eget. At tellus at urna
+ condimentum mattis pellentesque id nibh. Dui faucibus in ornare quam. Tincidunt id aliquet risus feugiat
+ in ante metus dictum. Adipiscing commodo elit at imperdiet dui. Dolor sed viverra ipsum nunc. Sodales
+ neque sodales ut etiam sit amet nisl. Hendrerit dolor magna eget est lorem ipsum dolor sit amet. Mattis
+ molestie a iaculis at erat pellentesque adipiscing. Adipiscing elit duis tristique sollicitudin nibh sit
+ amet commodo nulla. Fringilla urna porttitor rhoncus dolor purus.
+
+
+
+
+ Close
+
+ Do Something
+
+
+
+
+ ),
+ { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
+ );
diff --git a/apps/vr-tests-react-components/src/stories/Field.stories.tsx b/apps/vr-tests-react-components/src/stories/Field.stories.tsx
new file mode 100644
index 00000000000000..663edb63285237
--- /dev/null
+++ b/apps/vr-tests-react-components/src/stories/Field.stories.tsx
@@ -0,0 +1,134 @@
+import * as React from 'react';
+import Screener, { Steps } from 'screener-storybook/src/screener';
+import { storiesOf } from '@storybook/react';
+import { Radio } from '@fluentui/react-radio';
+import {
+ CheckboxField,
+ ComboboxField,
+ InputField,
+ ProgressField,
+ RadioGroupField,
+ SelectField,
+ SliderField,
+ SpinButtonField,
+ SwitchField,
+ TextareaField,
+} from '@fluentui/react-field';
+import { SparkleFilled } from '@fluentui/react-icons';
+import { FieldComponent, FieldPropsWithOptionalComponentProps } from '@fluentui/react-field/src/Field';
+
+type FieldComponentProps = Pick<
+ FieldPropsWithOptionalComponentProps,
+ 'orientation' | 'required' | 'label' | 'validationState' | 'validationMessage' | 'validationMessageIcon' | 'hint'
+>;
+
+/**
+ * Common VR tests for all field components. Pass the given Field component (or a wrapper around it).
+ */
+const storiesOfField = (name: string, Field: React.VoidFunctionComponent) =>
+ storiesOf(name, module)
+ .addDecorator(story => {story()} )
+ .addDecorator(story => (
+
+ ))
+ .addStory('base', () => )
+ .addStory('required', () => )
+ .addStory('validation', () => (
+
+
+
+
+ }
+ validationMessage="Custom message"
+ />
+
+ ))
+ .addStory('hint', () => )
+ .addStory('horizontal', () => (
+
+ ));
+
+/**
+ * Same as storiesOfField, but with extra stories for Field components that support the size prop.
+ */
+const storiesOfFieldWithSize = (
+ name: string,
+ Field: React.VoidFunctionComponent,
+) =>
+ storiesOfField(name, Field)
+ .addStory('size:small', () => )
+ .addStory('size:large', () => );
+
+//
+// CheckboxField
+//
+storiesOfField('CheckboxField converged', CheckboxField)
+ .addStory('size:large', () => )
+ .addStory('fieldLabel', () => );
+
+//
+// ComboboxField
+//
+storiesOfFieldWithSize('ComboboxField converged', ComboboxField);
+
+//
+// InputField
+//
+storiesOfFieldWithSize('InputField converged', InputField);
+
+//
+// ProgressField
+//
+storiesOfField('ProgressField converged', props => );
+
+//
+// RadioGroupField
+//
+storiesOfField('RadioGroupField converged', props => (
+
+
+
+
+
+));
+
+//
+// SelectField
+//
+storiesOfFieldWithSize('SelectField converged', props => (
+
+ Option one
+
+));
+
+//
+// SliderField
+//
+storiesOfField('SliderField converged', SliderField);
+
+//
+// SpinButtonField
+//
+storiesOfField('SpinButtonField converged', SpinButtonField);
+
+//
+// SwitchField
+//
+storiesOfField('SwitchField converged', SwitchField);
+
+//
+// TextareaField
+//
+storiesOfFieldWithSize('TextareaField converged', TextareaField);
diff --git a/apps/vr-tests-react-components/src/stories/Input.stories.tsx b/apps/vr-tests-react-components/src/stories/Input.stories.tsx
index 0ec55bb53aaee7..8e527d97762968 100644
--- a/apps/vr-tests-react-components/src/stories/Input.stories.tsx
+++ b/apps/vr-tests-react-components/src/stories/Input.stories.tsx
@@ -30,6 +30,15 @@ storiesOf('Input Converged', module)
))
+ .addStory('Invalid: outline', () => )
+ .addStory('Invalid: underline', () => )
+ .addStory('Invalid: filled-darker', () => )
+ .addStory('Invalid: filled-lighter', () => (
+ // filledLighter requires a background to show up (this is colorNeutralBackground3 in web light theme)
+
+
+
+ ))
.addStory('Disabled', () => )
.addStory('With value', () => );
diff --git a/apps/vr-tests-react-components/src/stories/Link.stories.tsx b/apps/vr-tests-react-components/src/stories/Link.stories.tsx
index fb7016111f52b2..9627393c11d628 100644
--- a/apps/vr-tests-react-components/src/stories/Link.stories.tsx
+++ b/apps/vr-tests-react-components/src/stories/Link.stories.tsx
@@ -14,10 +14,10 @@ storiesOf('Link Converged - Rendered as anchor', module)
.hover('.fui-Link')
.snapshot('hover', { cropTo: '.testWrapper' })
// This needs to be added so that the focus outline is shown correctly
- .executeScript("document.getElementsByClassName('fui-Link')[0].classList.add('fui-focus-visible')")
+ .executeScript("document.getElementsByClassName('fui-Link')[0].setAttribute('data-fui-focus-visible', '')")
.focus('.fui-Link')
.snapshot('focused', { cropTo: '.testWrapper' })
- .executeScript("document.getElementsByClassName('fui-Link')[0].classList.remove('fui-focus-visible')")
+ .executeScript("document.getElementsByClassName('fui-Link')[0].removeAttribute('data-fui-focus-visible')")
.mouseDown('.fui-Link')
.snapshot('pressed', { cropTo: '.testWrapper' })
.mouseUp('.fui-Link')
@@ -94,10 +94,10 @@ storiesOf('Link Converged - Rendered as button', module)
.hover('.fui-Link')
.snapshot('hover', { cropTo: '.testWrapper' })
// This needs to be added so that the focus outline is shown correctly
- .executeScript("document.getElementsByClassName('fui-Link')[0].classList.add('fui-focus-visible')")
+ .executeScript("document.getElementsByClassName('fui-Link')[0].setAttribute('data-fui-focus-visible', '')")
.focus('.fui-Link')
.snapshot('focused', { cropTo: '.testWrapper' })
- .executeScript("document.getElementsByClassName('fui-Link')[0].classList.remove('fui-focus-visible')")
+ .executeScript("document.getElementsByClassName('fui-Link')[0].removeAttribute('data-fui-focus-visible')")
.mouseDown('.fui-Link')
.snapshot('pressed', { cropTo: '.testWrapper' })
.mouseUp('.fui-Link')
diff --git a/apps/vr-tests-react-components/src/stories/Persona.stories.tsx b/apps/vr-tests-react-components/src/stories/Persona.stories.tsx
new file mode 100644
index 00000000000000..301444b78b22e3
--- /dev/null
+++ b/apps/vr-tests-react-components/src/stories/Persona.stories.tsx
@@ -0,0 +1,94 @@
+import * as React from 'react';
+import Screener from 'screener-storybook/src/screener';
+import { storiesOf } from '@storybook/react';
+import { Persona } from '@fluentui/react-persona';
+import { AvatarSizes } from '@fluentui/react-avatar';
+import { BadgeProps } from '@fluentui/react-badge/src/Badge';
+
+const avatarSizes: AvatarSizes[] = [16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 72, 96, 120, 128];
+const badgeSizes: BadgeProps['size'][] = ['tiny', 'extra-small', 'small', 'medium', 'large', 'extra-large'];
+
+storiesOf('Persona Converged', module)
+ .addDecorator(story => (
+
+ {story()}
+
+ ))
+ .addDecorator(story => (
+ {story()}
+ ))
+ .addStory(
+ 'basic',
+ () => (
+
+ ),
+ { includeRtl: true, includeHighContrast: true, includeDarkMode: true },
+ )
+ .addStory('single-double-lines', () => (
+
+ ))
+ .addStory('size-avatar', () => (
+
+ {avatarSizes.map(size => (
+
+ ))}
+
+ ))
+ .addStory('size-presence', () => (
+
+ {badgeSizes.map(size => (
+
+ ))}
+
+ ))
+ .addStory('scaling', () => (
+
+ ));
diff --git a/apps/vr-tests-react-components/src/stories/Positioning.stories.tsx b/apps/vr-tests-react-components/src/stories/Positioning.stories.tsx
index b2c26bc47ce66a..e51b2472645a4d 100644
--- a/apps/vr-tests-react-components/src/stories/Positioning.stories.tsx
+++ b/apps/vr-tests-react-components/src/stories/Positioning.stories.tsx
@@ -442,6 +442,31 @@ const VirtualElement = () => {
);
};
+const ResetTarget = () => {
+ const [virtualElement, setVirtualElement] = React.useState(null);
+ const { containerRef, targetRef } = usePositioning({
+ position: 'below',
+ align: 'end',
+ target: virtualElement,
+ });
+
+ React.useEffect(() => {
+ if (virtualElement) {
+ setVirtualElement(null);
+ }
+ }, [virtualElement]);
+
+ return (
+ <>
+
+ Virtual Target
+ Target should be fully visible
+
+ Anchored to virtual element then reset to real target.
+ >
+ );
+};
+
const TargetProp = () => {
const [target, setTarget] = React.useState(null);
@@ -562,6 +587,7 @@ storiesOf('Positioning', module)
.addStory('disable tether', () => )
.addStory('position fixed', () => , { includeRtl: true })
.addStory('virtual element', () => )
+ .addStory('reset target', () => )
.addStory('target property', () => )
.addStory('imperative target', () => )
.addStory('visibility modifiers', () => (
diff --git a/apps/vr-tests-react-components/src/stories/Progress.stories.tsx b/apps/vr-tests-react-components/src/stories/Progress.stories.tsx
new file mode 100644
index 00000000000000..dbcb867f9375c8
--- /dev/null
+++ b/apps/vr-tests-react-components/src/stories/Progress.stories.tsx
@@ -0,0 +1,20 @@
+import * as React from 'react';
+import { storiesOf } from '@storybook/react';
+import { Progress } from '@fluentui/react-progress';
+
+storiesOf('Progress converged', module)
+ .addStory('Indeterminate', () => , {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ })
+ .addStory('Indeterminate with thickness large', () => )
+ .addStory('Determinate', () => , {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ })
+ .addStory('Determinate with thickness large', () => )
+ .addStory('Error', () => )
+ .addStory('Warning', () => )
+ .addStory('Success', () => );
diff --git a/apps/vr-tests-react-components/src/stories/Select.stories.tsx b/apps/vr-tests-react-components/src/stories/Select.stories.tsx
index 981fe8337690d4..59b41cebe3cc74 100644
--- a/apps/vr-tests-react-components/src/stories/Select.stories.tsx
+++ b/apps/vr-tests-react-components/src/stories/Select.stories.tsx
@@ -43,6 +43,30 @@ storiesOf('Select Converged', module)
text
+ ))
+ .addStory('Invalid: outline', () => (
+
+ text
+
+ ))
+ .addStory('Invalid: underline', () => (
+
+ text
+
+ ))
+ .addStory('Invalid: filled-darker', () => (
+
+
+ text
+
+
+ ))
+ .addStory('Invalid: filled-lighter', () => (
+
+
+ text
+
+
));
// Non-interactive stories
diff --git a/apps/vr-tests-react-components/src/stories/SpinButton.stories.tsx b/apps/vr-tests-react-components/src/stories/SpinButton.stories.tsx
index 71d8244ee87761..f196bb27f94ab3 100644
--- a/apps/vr-tests-react-components/src/stories/SpinButton.stories.tsx
+++ b/apps/vr-tests-react-components/src/stories/SpinButton.stories.tsx
@@ -64,6 +64,15 @@ storiesOf('SpinButton Converged', module)
),
{ includeRtl: true, includeHighContrast: true, includeDarkMode: true },
)
+ .addStory('Invalid: outline', () => )
+ .addStory('Invalid: underline', () => )
+ .addStory('Invalid: filled-darker', () => )
+ .addStory('Invalid: filled-lighter', () => (
+ // filledLighter requires a background to show up (this is colorNeutralBackground3 in web light theme)
+
+
+
+ ))
.addStory('Display Value', () => , {
includeRtl: true,
includeHighContrast: true,
diff --git a/apps/vr-tests-react-components/src/stories/Switch.stories.tsx b/apps/vr-tests-react-components/src/stories/Switch.stories.tsx
index 6907fde3858c13..2e2226dbe6e027 100644
--- a/apps/vr-tests-react-components/src/stories/Switch.stories.tsx
+++ b/apps/vr-tests-react-components/src/stories/Switch.stories.tsx
@@ -54,9 +54,15 @@ storiesOf('Switch Converged', module)
includeDarkMode: true,
},
)
- .addStory('With label above', () => )
- .addStory('With label after', () => )
- .addStory('With label before', () => )
+ .addStory('With label above', () => , {
+ includeRtl: true,
+ })
+ .addStory('With label after', () => , {
+ includeRtl: true,
+ })
+ .addStory('With label before', () => , {
+ includeRtl: true,
+ })
.addStory('With label wrapping', () => (
(
- {story()}
- ))
- .addStory(
- 'default',
- () => (
-
-
-
- {columns.map(column => (
- {column.label}
- ))}
-
-
-
- {items.map(item => (
-
-
- {item.file.label}
-
- } appearance="subtle" />
- } appearance="subtle" />
-
-
-
- }
- >
- {item.author.label}
-
- {item.lastUpdated.label}
- {item.lastUpdate.label}
-
- ))}
-
-
- ),
- { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
- );
+interface SharedVrTestArgs {
+ noNativeElements: TableProps['noNativeElements'];
+ selectedRowAppearance?: TableRowProps['appearance'];
+}
-storiesOf('Table', module)
- .addStory(
- 'default',
- () => (
-
-
-
- {columns.map(column => (
- {column.label}
- ))}
-
-
-
- {items.map(item => (
-
- {item.file.label}
-
- }
- >
- {item.author.label}
-
- {item.lastUpdated.label}
- {item.lastUpdate.label}
-
- ))}
-
-
- ),
- { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
- )
- .addStory('size - small', () => (
-
-
-
- {columns.map(column => (
- {column.label}
- ))}
+const CellActionsDefault: React.FC = ({ noNativeElements }) => (
+
+
+
+ {columns.map(column => (
+ {column.label}
+ ))}
+
+
+
+ {items.map((item, i) => (
+
+
+
+ {item.file.label}
+
+ } appearance="subtle" />
+ } appearance="subtle" />
+
+
+
+
+ }
+ >
+ {item.author.label}
+
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
-
-
- {items.map(item => (
-
- {item.file.label}
-
+
+);
+
+const CellActionsAlwaysVisible: React.FC = ({ noNativeElements }) => (
+
+
+
+ {columns.map(column => (
+ {column.label}
+ ))}
+
+
+
+ {items.map((item, i) => (
+
+
+
+ {item.file.label}
+
+ } appearance="subtle" />
+ } appearance="subtle" />
+
+
+
+
+ }
+ >
+ {item.author.label}
+
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
+
+ ))}
+
+
+);
+
+const CellActionsInHeaderCell: React.FC = ({ noNativeElements }) => (
+
+
+
+ {columns.map(column => (
+ {column.label}
+ ))}
+
+
+
+ {items.map((item, i) => (
+
+
+
+ {item.file.label}
+
+ } appearance="subtle" />
+ } appearance="subtle" />
+
+
+
+
+ }
+ >
+ {item.author.label}
+
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
+
+ ))}
+
+
+);
+
+const SizeMedium: React.FC = ({ noNativeElements }) => (
+
+
+
+ {columns.map(column => (
+ {column.label}
+ ))}
+
+
+
+ {items.map(item => (
+
+
+ {item.file.label}
+
+
+ }
+ >
+ {item.author.label}
+
+
+
+ {item.lastUpdated.label}
+
+
+ {item.lastUpdate.label}
+
+
+ ))}
+
+
+);
+
+const SizeSmall: React.FC = ({ noNativeElements }) => (
+
+
+
+ {columns.map(column => (
+ {column.label}
+ ))}
+
+
+
+ {items.map(item => (
+
+
+ {item.file.label}
+
+
+
{item.author.label}
-
- {item.lastUpdated.label}
- {item.lastUpdate.label}
-
- ))}
-
-
- ))
- .addStory('size - smaller', () => (
-
-
-
- {columns.map(column => (
- {column.label}
- ))}
+
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
-
-
- {items.map(item => (
-
- {item.file.label}
-
+
+);
+
+const SizeSmaller: React.FC = ({ noNativeElements }) => (
+
+
+
+ {columns.map(column => (
+ {column.label}
+ ))}
+
+
+
+ {items.map(item => (
+
+
+ {item.file.label}
+
+
+
{item.author.label}
-
- {item.lastUpdated.label}
- {item.lastUpdate.label}
-
+
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
+
+ ))}
+
+
+);
+
+const PrimaryCell: React.FC = ({ noNativeElements }) => (
+
+
+
+ {columns.map(column => (
+ {column.label}
))}
-
-
- ))
- .addStory('primary cell', () => (
-
-
-
- {columns.map(column => (
- {column.label}
- ))}
+
+
+
+ {items.map(item => (
+
+
+
+ {item.file.label}
+
+
+ }
+ >
+ {item.author.label}
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
-
-
- {items.map(item => (
-
-
-
+
+);
+
+const Multiselect: React.FC = ({ noNativeElements }) => (
+
+
+
+
+ {columns.map(column => (
+ {column.label}
+ ))}
+
+
+
+ {items.map(item => (
+
+
+
+ {item.file.label}
+
+
+ }
>
{item.author.label}
-
- {item.lastUpdated.label}
- {item.lastUpdate.label}
-
+
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
+
+ ))}
+
+
+);
+
+const MultiselectChecked: React.FC = ({ noNativeElements, selectedRowAppearance }) => (
+
+
+
+
+ {columns.map(column => (
+ {column.label}
))}
-
-
- ))
- .addStory(
- 'multiselect',
- () => (
-
-
-
-
- {columns.map(column => (
- {column.label}
- ))}
-
-
-
- {items.map(item => (
-
-
- {item.file.label}
-
- }
- >
- {item.author.label}
-
- {item.lastUpdated.label}
- {item.lastUpdate.label}
-
- ))}
-
-
- ),
- { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
- )
- .addStory(
- 'multiselect (checked)',
- () => (
-
-
-
-
- {columns.map(column => (
- {column.label}
- ))}
-
-
-
- {items.map(item => (
-
-
- {item.file.label}
-
+
+
+ {items.map(item => {
+ return (
+
+
+
+ {item.file.label}
+
+
+
}
>
{item.author.label}
-
- {item.lastUpdated.label}
- {item.lastUpdate.label}
-
- ))}
-
-
- ),
- { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
- )
- .addStory(
- 'multiselect (mixed)',
- () => (
-
-
-
-
- {columns.map(column => (
- {column.label}
- ))}
+
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
-
-
- {items.map((item, i) => (
-
-
- {item.file.label}
-
+
+);
+
+const MultiselectMixed: React.FC = ({ noNativeElements, selectedRowAppearance }) => (
+
+
+
+
+ {columns.map(column => (
+ {column.label}
+ ))}
+
+
+
+ {items.map((item, i) => {
+ const checked = !!(i % 2);
+ return (
+
+
+
+ {item.file.label}
+
+
+
}
>
{item.author.label}
-
- {item.lastUpdated.label}
- {item.lastUpdate.label}
-
- ))}
-
-
- ),
- { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
- )
- .addStory(
- 'single select',
- () => (
-
-
-
-
- {columns.map(column => (
- {column.label}
- ))}
+
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
-
-
- {items.map(item => (
-
-
- {item.file.label}
-
+
+);
+
+const Singleselect: React.FC = ({ noNativeElements }) => (
+
+
+
+
+ {columns.map(column => (
+ {column.label}
+ ))}
+
+
+
+ {items.map(item => (
+
+
+
+ {item.file.label}
+
+
+ }
+ >
+ {item.author.label}
+
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
+
+ ))}
+
+
+);
+
+const SingleselectChecked: React.FC = ({ noNativeElements, selectedRowAppearance }) => (
+
+
+
+
+ {columns.map(column => (
+ {column.label}
+ ))}
+
+
+
+ {items.map((item, i) => {
+ const checked = i === 1;
+ return (
+
+
+
+ {item.file.label}
+
+
+
+
}
>
{item.author.label}
-
- {item.lastUpdated.label}
- {item.lastUpdate.label}
-
- ))}
-
-
- ),
- { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
- )
- .addStory(
- 'single select (checked)',
- () => (
-
-
-
-
- {columns.map(column => (
- {column.label}
- ))}
+
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
-
-
- {items.map((item, i) => (
-
-
- {item.file.label}
-
- }
- >
- {item.author.label}
-
- {item.lastUpdated.label}
- {item.lastUpdate.label}
-
- ))}
-
-
- ),
- { includeDarkMode: true, includeHighContrast: true, includeRtl: true },
- );
+ );
+ })}
+
+
+);
+
+const SortableHeaders: React.FC = ({ noNativeElements }) => (
+
+
+
+ {columns.map(column => (
+
+ {column.label}
+
+ ))}
+
+
+
+ {items.map(item => (
+
+
+ {item.file.label}
+
+
+ }
+ >
+ {item.author.label}
+
+
+
+ {item.lastUpdated.label}
+
+
+ {item.lastUpdate.label}
+
+
+ ))}
+
+
+);
+
+const SubtleSelection: React.FC = ({ noNativeElements }) => (
+
+
+
+
+ {columns.map(column => (
+ {column.label}
+ ))}
+
+
+
+ {items.map((item, i) => (
+
+
+
+ {item.file.label}
+
+
+
+ }
+ >
+ {item.author.label}
+
+
+ {item.lastUpdated.label}
+
+ {item.lastUpdate.label}
+
+
+ ))}
+
+
+);
+
+([true, false] as const).forEach(noNativeElements => {
+ const layoutName = noNativeElements ? 'flex' : 'table';
+ storiesOf(`Table layout ${layoutName} - cell actions`, module)
+ .addDecorator(story => (
+ {story()}
+ ))
+ .addStory('default', () => , {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ })
+ .addStory('always visible', () => , {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ })
+ .addStory('in header cell', () => );
+
+ storiesOf(`Table layout ${layoutName}`, module)
+ .addStory('size - medium', () => , {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ })
+ .addStory('size - small', () => )
+ .addStory('size - smaller', () => )
+ .addStory('primary cell', () => )
+ .addStory('multiselect', () => , {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ })
+ .addStory(
+ 'multiselect (checked) - brand',
+ () => ,
+ {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ },
+ )
+ .addStory(
+ 'multiselect (mixed) - brand',
+ () => ,
+ {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ },
+ )
+ .addStory('single select', () => , {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ })
+ .addStory(
+ 'single select (checked) - brand',
+ () => ,
+ {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ },
+ )
+ .addStory(
+ 'multiselect (checked) - neutral',
+ () => ,
+ {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ },
+ )
+ .addStory(
+ 'multiselect (mixed) - neutral',
+ () => ,
+ {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ },
+ )
+ .addStory(
+ 'single select (checked) - neutral',
+ () => ,
+ {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ },
+ )
+ .addStory('single select (checked)', () => , {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ includeRtl: true,
+ });
+
+ storiesOf(`Table ${layoutName} - subtle selection`, module)
+ .addDecorator(story => (
+
+ {story()}
+
+ ))
+ .addStory('rest', () => );
+ storiesOf(`Table layout ${layoutName} - headers`, module)
+ .addDecorator(story => (
+
+ {story()}
+
+ ))
+ .addStory('sortable', () => , {
+ includeDarkMode: true,
+ includeHighContrast: true,
+ });
+});
diff --git a/apps/vr-tests-react-components/src/stories/Textarea.stories.tsx b/apps/vr-tests-react-components/src/stories/Textarea.stories.tsx
index e0d46bd9340850..b27d34bd925613 100644
--- a/apps/vr-tests-react-components/src/stories/Textarea.stories.tsx
+++ b/apps/vr-tests-react-components/src/stories/Textarea.stories.tsx
@@ -27,6 +27,15 @@ storiesOf('Textarea Converged', module)
))
+ .addStory('Invalid: outline', () => )
+ .addStory('Invalid: filled-darker', () => (
+
+ ))
+ .addStory('Invalid: filled-lighter', () => (
+
+
+
+ ))
.addStory('Disabled', () => )
.addStory('With value', () => );
diff --git a/apps/vr-tests/CHANGELOG.json b/apps/vr-tests/CHANGELOG.json
index 9b43269be5b14d..9be0c53ad28c21 100644
--- a/apps/vr-tests/CHANGELOG.json
+++ b/apps/vr-tests/CHANGELOG.json
@@ -1,6 +1,153 @@
{
"name": "@fluentui/vr-tests",
"entries": [
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/vr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react-experiments to v8.13.3",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/vr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react-experiments to v8.13.2",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/vr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react-experiments to v8.13.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/vr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react-experiments to v8.13.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/vr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react-experiments to v8.12.34",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/vr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react-experiments to v8.12.33",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/vr-tests_v1.0.0",
+ "version": "1.0.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/vr-tests",
+ "comment": "Bump @fluentui/react-experiments to v8.12.32",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/vr-tests_v1.0.0",
diff --git a/apps/vr-tests/CHANGELOG.md b/apps/vr-tests/CHANGELOG.md
index d497a56425b403..306b27b4a41c28 100644
--- a/apps/vr-tests/CHANGELOG.md
+++ b/apps/vr-tests/CHANGELOG.md
@@ -1,11 +1,81 @@
# Change Log - @fluentui/vr-tests
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Thu, 22 Sep 2022 07:43:45 GMT and should not be manually modified.
## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/vr-tests_v1.0.0)
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/vr-tests_v1.0.0..@fluentui/vr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+- Bump @fluentui/react-experiments to v8.13.3 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/vr-tests_v1.0.0)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/vr-tests_v1.0.0..@fluentui/vr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+- Bump @fluentui/react-experiments to v8.13.2 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/vr-tests_v1.0.0)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/vr-tests_v1.0.0..@fluentui/vr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+- Bump @fluentui/react-experiments to v8.13.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/vr-tests_v1.0.0)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/vr-tests_v1.0.0..@fluentui/vr-tests_v1.0.0)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+- Bump @fluentui/react-experiments to v8.13.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/vr-tests_v1.0.0)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/vr-tests_v1.0.0..@fluentui/vr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+- Bump @fluentui/react-experiments to v8.12.34 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/vr-tests_v1.0.0)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/vr-tests_v1.0.0..@fluentui/vr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+- Bump @fluentui/react-experiments to v8.12.33 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/vr-tests_v1.0.0)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/vr-tests_v1.0.0..@fluentui/vr-tests_v1.0.0)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+- Bump @fluentui/react-experiments to v8.12.32 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
+## [1.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/vr-tests_v1.0.0)
+
Mon, 05 Sep 2022 07:38:30 GMT
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/vr-tests_v1.0.0..@fluentui/vr-tests_v1.0.0)
diff --git a/apps/vr-tests/package.json b/apps/vr-tests/package.json
index 36d9a2a90065f4..898d2f17a988a6 100644
--- a/apps/vr-tests/package.json
+++ b/apps/vr-tests/package.json
@@ -18,11 +18,11 @@
},
"dependencies": {
"@fluentui/example-data": "^8.4.2",
- "@fluentui/font-icons-mdl2": "^8.4.13",
- "@fluentui/react": "^8.94.1",
- "@fluentui/react-experiments": "^8.12.31",
- "@fluentui/react-hooks": "^8.6.11",
- "@fluentui/react-icons-mdl2": "^1.3.22",
+ "@fluentui/font-icons-mdl2": "^8.5.2",
+ "@fluentui/react": "^8.98.8",
+ "@fluentui/react-experiments": "^8.14.12",
+ "@fluentui/react-hooks": "^8.6.12",
+ "@fluentui/react-icons-mdl2": "^1.3.25",
"@fluentui/scripts": "^1.0.0",
"@fluentui/storybook": "^1.0.0",
"react": "17.0.2",
diff --git a/apps/vr-tests/screener.config.js b/apps/vr-tests/screener.config.js
index 3002918395bf26..13f073e99c97d0 100644
--- a/apps/vr-tests/screener.config.js
+++ b/apps/vr-tests/screener.config.js
@@ -20,25 +20,34 @@ function getCurrentHash() {
return '';
}
-const baseBranch = process.env.SYSTEM_PULLREQUEST_TARGETBRANCH
- ? process.env.SYSTEM_PULLREQUEST_TARGETBRANCH.replace(/^refs\/heads\//, '')
- : 'master';
+/**
+ *
+ * @param {Object} options
+ * @param {string} options.screenerApiKey
+ * @param {string} options.sourceBranchName
+ * @param {string} options.deployUrl
+ * @param {string} options.targetBranch
+ * @returns {import('@fluentui/scripts/screener/screener.types').ScreenerRunnerConfig}
+ */
+function getConfig({ screenerApiKey, sourceBranchName, deployUrl, targetBranch }) {
+ const baseBranch = targetBranch ? targetBranch.replace(/^refs\/heads\//, '') : 'master';
-// https://github.com/screener-io/screener-storybook#additional-configuration-options
-const config = {
- projectRepo: 'microsoft/fluentui',
- storybookStaticBuildDir: 'dist/storybook',
- storybookConfigDir: '.storybook',
- apiKey: process.env.SCREENER_API_KEY,
- resolution: '1024x768',
- baseBranch,
- failureExitCode: 0,
- alwaysAcceptBaseBranch: true,
- ...(process.env.BUILD_SOURCEBRANCH && process.env.BUILD_SOURCEBRANCH.indexOf('refs/pull') > -1
- ? { commit: getCurrentHash() }
- : null),
- baseUrl: `${process.env.DEPLOYURL}/react-screener/iframe.html`,
-};
-console.log('Screener config: ' + JSON.stringify({ ...config, apiKey: '...' }, null, 2));
+ // https://github.com/screener-io/screener-storybook#additional-configuration-options
+ const config = {
+ projectRepo: 'microsoft/fluentui',
+ storybookStaticBuildDir: 'dist/storybook',
+ storybookConfigDir: '.storybook',
+ apiKey: screenerApiKey,
+ resolution: '1024x768',
+ baseBranch,
+ failureExitCode: 0,
+ alwaysAcceptBaseBranch: true,
+ ...(sourceBranchName !== 'master' ? { commit: getCurrentHash() } : null),
+ baseUrl: `${deployUrl}/react-screener/iframe.html`,
+ states: [],
+ };
+ console.log('Screener config: ' + JSON.stringify({ ...config, apiKey: '...' }, null, 2));
+ return config;
+}
-module.exports = config;
+module.exports = getConfig;
diff --git a/azure-pipelines.release-vnext-nightly.yml b/azure-pipelines.release-vnext-nightly.yml
index 1299c378490a67..cdb35c04387455 100644
--- a/azure-pipelines.release-vnext-nightly.yml
+++ b/azure-pipelines.release-vnext-nightly.yml
@@ -37,6 +37,11 @@ jobs:
steps:
- template: .devops/templates/tools.yml
+ - script: |
+ git config user.name "Fluent UI Build"
+ git config user.email "fluentui-internal@service.microsoft.com"
+ displayName: Configure git user (used by beachball)
+
- task: Bash@3
inputs:
filePath: yarn-ci.sh
@@ -44,7 +49,7 @@ jobs:
# Deletes all existing changefiles so that only bump that happens is for nightly
- script: |
- rm change/*
+ rm -f change/*
displayName: 'Delete existing changefiles'
# Bumps all v9 packages to a x.x.x-nightly.commitSha version and checks in change files
@@ -60,15 +65,15 @@ jobs:
# --only makes it only run tests (otherwise due to the missing --production arg, lage would re-run the build)
# https://github.com/microsoft/fluentui/issues/21686
- script: |
- yarn run:published test
+ yarn lage test --to @fluentui/react-components
displayName: yarn test
- script: |
- yarn run:published lint
+ yarn lage lint --to @fluentui/react-components
displayName: yarn lint
- script: |
- yarn run:published build --production
+ yarn lage build --to @fluentui/react-components
displayName: yarn build
- script: |
diff --git a/azure-pipelines.release-vnext.yml b/azure-pipelines.release-vnext.yml
index 84bdc8c8c32675..acec40f871da39 100644
--- a/azure-pipelines.release-vnext.yml
+++ b/azure-pipelines.release-vnext.yml
@@ -93,7 +93,7 @@ jobs:
# TODO update release notes script for v9
# - script: |
- # node -r ./scripts/ts-node-register ./scripts/updateReleaseNotes/index.ts --token=$(githubPAT) --apply --debug
+ # node -r ./scripts/ts-node-register ./scripts/update-release-notes/index.ts --token=$(githubPAT) --apply --debug
# displayName: 'Update github release notes'
# This would usually be run automatically (via a pipeline decorator from an extension), but the
diff --git a/azure-pipelines.release.yml b/azure-pipelines.release.yml
index b02a6c92c2c291..47f50182d20d71 100644
--- a/azure-pipelines.release.yml
+++ b/azure-pipelines.release.yml
@@ -172,7 +172,7 @@ jobs:
# Run this near the end because it's more likely to fail than the artifact upload tasks, and its
# failure doesn't need to block anything else
- script: |
- node -r ./scripts/ts-node-register ./scripts/updateReleaseNotes/index.ts --token=$(githubPAT) --apply --debug
+ node -r ./scripts/ts-node-register ./scripts/update-release-notes/index.ts --token=$(githubPAT) --apply --debug
displayName: 'Update github release notes'
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
diff --git a/change/@fluentui-babel-preset-global-context-535d7f1f-836b-41b1-89e5-2b48236a940b.json b/change/@fluentui-babel-preset-global-context-535d7f1f-836b-41b1-89e5-2b48236a940b.json
deleted file mode 100644
index 6c178ea47660e5..00000000000000
--- a/change/@fluentui-babel-preset-global-context-535d7f1f-836b-41b1-89e5-2b48236a940b.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: consume cypress.config from it's package boundary",
- "packageName": "@fluentui/babel-preset-global-context",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-babel-preset-global-context-539eb6d3-cf8d-448a-a41d-36ae9302e8db.json b/change/@fluentui-babel-preset-global-context-539eb6d3-cf8d-448a-a41d-36ae9302e8db.json
deleted file mode 100644
index 5da314c9d80347..00000000000000
--- a/change/@fluentui-babel-preset-global-context-539eb6d3-cf8d-448a-a41d-36ae9302e8db.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/babel-preset-global-context",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-global-context-98220b20-0a19-45fd-92f0-99a65f8dbad7.json b/change/@fluentui-global-context-98220b20-0a19-45fd-92f0-99a65f8dbad7.json
deleted file mode 100644
index 7e58f4e46d3b2b..00000000000000
--- a/change/@fluentui-global-context-98220b20-0a19-45fd-92f0-99a65f8dbad7.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/global-context",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-global-context-aabceb12-cbe3-4830-b070-3d979119b329.json b/change/@fluentui-global-context-aabceb12-cbe3-4830-b070-3d979119b329.json
deleted file mode 100644
index 80195f2faf7444..00000000000000
--- a/change/@fluentui-global-context-aabceb12-cbe3-4830-b070-3d979119b329.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: consume cypress.config from it's package boundary",
- "packageName": "@fluentui/global-context",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-keyboard-keys-a05d7924-5060-4157-97c4-e6579b5d7064.json b/change/@fluentui-keyboard-keys-a05d7924-5060-4157-97c4-e6579b5d7064.json
deleted file mode 100644
index 2b7cf215b2b354..00000000000000
--- a/change/@fluentui-keyboard-keys-a05d7924-5060-4157-97c4-e6579b5d7064.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/keyboard-keys",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-priority-overflow-1b462a6d-8733-4a63-995c-c0768423bed9.json b/change/@fluentui-priority-overflow-1b462a6d-8733-4a63-995c-c0768423bed9.json
deleted file mode 100644
index 3fa471ee556153..00000000000000
--- a/change/@fluentui-priority-overflow-1b462a6d-8733-4a63-995c-c0768423bed9.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/priority-overflow",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-priority-overflow-be962710-d1fe-4f92-866d-35605c166f3d.json b/change/@fluentui-priority-overflow-be962710-d1fe-4f92-866d-35605c166f3d.json
deleted file mode 100644
index 0be9789d759fd0..00000000000000
--- a/change/@fluentui-priority-overflow-be962710-d1fe-4f92-866d-35605c166f3d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore(priority-flow): re-generate api.md",
- "packageName": "@fluentui/priority-overflow",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-accordion-288bef97-19e7-4052-a5e4-a12d1ec03620.json b/change/@fluentui-react-accordion-288bef97-19e7-4052-a5e4-a12d1ec03620.json
deleted file mode 100644
index f51cf9410427ca..00000000000000
--- a/change/@fluentui-react-accordion-288bef97-19e7-4052-a5e4-a12d1ec03620.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: fix no-context-default-value lint violations for cxe",
- "packageName": "@fluentui/react-accordion",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-accordion-40973217-d6aa-4183-8c34-1f60661c6117.json b/change/@fluentui-react-accordion-40973217-d6aa-4183-8c34-1f60661c6117.json
deleted file mode 100644
index d6f0d2ee1c0000..00000000000000
--- a/change/@fluentui-react-accordion-40973217-d6aa-4183-8c34-1f60661c6117.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix(Refactor accordion expandIcon styling)",
- "packageName": "@fluentui/react-accordion",
- "email": "ololubek@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-accordion-786c1a81-7dfb-41b9-8bea-5ada800bd5f0.json b/change/@fluentui-react-accordion-786c1a81-7dfb-41b9-8bea-5ada800bd5f0.json
deleted file mode 100644
index 401d0ce0d9659c..00000000000000
--- a/change/@fluentui-react-accordion-786c1a81-7dfb-41b9-8bea-5ada800bd5f0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: add type=button to button slot",
- "packageName": "@fluentui/react-accordion",
- "email": "sarah.higley@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-accordion-8b67b6ef-4b92-470a-8e18-b0a36a60c0e0.json b/change/@fluentui-react-accordion-8b67b6ef-4b92-470a-8e18-b0a36a60c0e0.json
deleted file mode 100644
index 1f2d8bf22b976c..00000000000000
--- a/change/@fluentui-react-accordion-8b67b6ef-4b92-470a-8e18-b0a36a60c0e0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-accordion",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-accordion-f73110f5-f647-4d31-b317-8983e73878b2.json b/change/@fluentui-react-accordion-f73110f5-f647-4d31-b317-8983e73878b2.json
deleted file mode 100644
index 32f7ba0d4e9193..00000000000000
--- a/change/@fluentui-react-accordion-f73110f5-f647-4d31-b317-8983e73878b2.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-accordion",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-alert-1565718b-e779-4394-bcbd-c0906e89ce0d.json b/change/@fluentui-react-alert-1565718b-e779-4394-bcbd-c0906e89ce0d.json
deleted file mode 100644
index 3464f48c4e4813..00000000000000
--- a/change/@fluentui-react-alert-1565718b-e779-4394-bcbd-c0906e89ce0d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-alert",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-alert-6f95b1e5-0014-4eae-9085-eb607ef1970d.json b/change/@fluentui-react-alert-6f95b1e5-0014-4eae-9085-eb607ef1970d.json
deleted file mode 100644
index 138796460c8fec..00000000000000
--- a/change/@fluentui-react-alert-6f95b1e5-0014-4eae-9085-eb607ef1970d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-alert",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-alert-951cc846-7012-424a-9b57-39b660e64d12.json b/change/@fluentui-react-alert-951cc846-7012-424a-9b57-39b660e64d12.json
deleted file mode 100644
index c8b8e7abc89516..00000000000000
--- a/change/@fluentui-react-alert-951cc846-7012-424a-9b57-39b660e64d12.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "Adding appearance prop to the alert component",
- "packageName": "@fluentui/react-alert",
- "email": "rohitpag@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-aria-4b79e85a-b5bc-45ce-802e-9ea17f31184c.json b/change/@fluentui-react-aria-4b79e85a-b5bc-45ce-802e-9ea17f31184c.json
deleted file mode 100644
index 11d8cc791fe720..00000000000000
--- a/change/@fluentui-react-aria-4b79e85a-b5bc-45ce-802e-9ea17f31184c.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: re-organize useARIAButton into its own folder",
- "packageName": "@fluentui/react-aria",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-aria-4c83e3c1-60e7-497a-9e1d-0e1bb35664a8.json b/change/@fluentui-react-aria-4c83e3c1-60e7-497a-9e1d-0e1bb35664a8.json
deleted file mode 100644
index e6fa227b4fe5bc..00000000000000
--- a/change/@fluentui-react-aria-4c83e3c1-60e7-497a-9e1d-0e1bb35664a8.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "docs(react-aria): re-generate api.md",
- "packageName": "@fluentui/react-aria",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-aria-6953c681-a237-41e0-b6e4-ba0e28c861f9.json b/change/@fluentui-react-aria-6953c681-a237-41e0-b6e4-ba0e28c861f9.json
deleted file mode 100644
index aee17a9d4dcbe7..00000000000000
--- a/change/@fluentui-react-aria-6953c681-a237-41e0-b6e4-ba0e28c861f9.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-aria",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-aria-994e3c56-fafa-4ce6-8578-1a14b0381c47.json b/change/@fluentui-react-aria-994e3c56-fafa-4ce6-8578-1a14b0381c47.json
deleted file mode 100644
index ff2b954c608e89..00000000000000
--- a/change/@fluentui-react-aria-994e3c56-fafa-4ce6-8578-1a14b0381c47.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "feat: upgrade typings on useARIAButtonProps to be more specific",
- "packageName": "@fluentui/react-aria",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-0a844534-f651-4b66-92c0-f9b1352ec334.json b/change/@fluentui-react-avatar-0a844534-f651-4b66-92c0-f9b1352ec334.json
deleted file mode 100644
index 26bafd8c7c928e..00000000000000
--- a/change/@fluentui-react-avatar-0a844534-f651-4b66-92c0-f9b1352ec334.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Change content to render as ul and list item to render as li.",
- "packageName": "@fluentui/react-avatar",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-2a688661-aab8-4e4a-9486-13730455ab6f.json b/change/@fluentui-react-avatar-2a688661-aab8-4e4a-9486-13730455ab6f.json
deleted file mode 100644
index 3533087fa73d36..00000000000000
--- a/change/@fluentui-react-avatar-2a688661-aab8-4e4a-9486-13730455ab6f.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "docs: Updating AvatarGroup's migration guide.",
- "packageName": "@fluentui/react-avatar",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-avatar-437899e9-1f87-4bbc-b90d-97f0df15e8ca.json b/change/@fluentui-react-avatar-437899e9-1f87-4bbc-b90d-97f0df15e8ca.json
deleted file mode 100644
index 52773a42c48414..00000000000000
--- a/change/@fluentui-react-avatar-437899e9-1f87-4bbc-b90d-97f0df15e8ca.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "minor",
- "comment": "feat: Adding functionality to AvatarGroupOverflow and updating AvatarGroup to use AvatarGroupOverflow.",
- "packageName": "@fluentui/react-avatar",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-553b43fa-6ccc-4d4b-a6e7-81b0e3803e07.json b/change/@fluentui-react-avatar-553b43fa-6ccc-4d4b-a6e7-81b0e3803e07.json
deleted file mode 100644
index dca9112b3376a9..00000000000000
--- a/change/@fluentui-react-avatar-553b43fa-6ccc-4d4b-a6e7-81b0e3803e07.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Cleaning up use of AvatarGroup context.",
- "packageName": "@fluentui/react-avatar",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-56d4ba21-e41a-42df-b101-f774986c8319.json b/change/@fluentui-react-avatar-56d4ba21-e41a-42df-b101-f774986c8319.json
deleted file mode 100644
index dce0c680a803ad..00000000000000
--- a/change/@fluentui-react-avatar-56d4ba21-e41a-42df-b101-f774986c8319.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "minor",
- "comment": "chore: Renaming AvatarGroupOverflow to AvatarGroupPopover.",
- "packageName": "@fluentui/react-avatar",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-612788d1-752a-4d77-bd7d-14f658532a4a.json b/change/@fluentui-react-avatar-612788d1-752a-4d77-bd7d-14f658532a4a.json
deleted file mode 100644
index 841d5dd8ca59a7..00000000000000
--- a/change/@fluentui-react-avatar-612788d1-752a-4d77-bd7d-14f658532a4a.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks",
- "packageName": "@fluentui/react-avatar",
- "email": "behowell@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-6c6ac0d8-779b-4863-b199-95916a602eab.json b/change/@fluentui-react-avatar-6c6ac0d8-779b-4863-b199-95916a602eab.json
deleted file mode 100644
index 25a7398576338b..00000000000000
--- a/change/@fluentui-react-avatar-6c6ac0d8-779b-4863-b199-95916a602eab.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Making PopoverSurface focusable, moving Overflow aria-label to PopoverSurface, and moving content styles to PopoverSurface.",
- "packageName": "@fluentui/react-avatar",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-72211d54-1016-4ea7-8a9a-2e264a243176.json b/change/@fluentui-react-avatar-72211d54-1016-4ea7-8a9a-2e264a243176.json
deleted file mode 100644
index d88e1b3fcb4eb1..00000000000000
--- a/change/@fluentui-react-avatar-72211d54-1016-4ea7-8a9a-2e264a243176.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: consume cypress.config from it's package boundary",
- "packageName": "@fluentui/react-avatar",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-avatar-73954508-ffed-4bfe-a16f-39fd287dafd4.json b/change/@fluentui-react-avatar-73954508-ffed-4bfe-a16f-39fd287dafd4.json
new file mode 100644
index 00000000000000..d9c1c9e4b8cf8f
--- /dev/null
+++ b/change/@fluentui-react-avatar-73954508-ffed-4bfe-a16f-39fd287dafd4.json
@@ -0,0 +1,7 @@
+{
+ "type": "none",
+ "comment": "chore: adds disableButtonEnhancement on triggers",
+ "packageName": "@fluentui/react-avatar",
+ "email": "bernardo.sunderhus@gmail.com",
+ "dependentChangeType": "none"
+}
diff --git a/change/@fluentui-react-avatar-7489c72b-eeec-417a-ac04-93edd28fe227.json b/change/@fluentui-react-avatar-7489c72b-eeec-417a-ac04-93edd28fe227.json
deleted file mode 100644
index 66ec60322b9f76..00000000000000
--- a/change/@fluentui-react-avatar-7489c72b-eeec-417a-ac04-93edd28fe227.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-avatar",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-avatar-79855439-3adf-4e84-a434-f95911b3655b.json b/change/@fluentui-react-avatar-79855439-3adf-4e84-a434-f95911b3655b.json
deleted file mode 100644
index 8aa591916bf12a..00000000000000
--- a/change/@fluentui-react-avatar-79855439-3adf-4e84-a434-f95911b3655b.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Set aria-hidden to AvatarGroupItem's label.",
- "packageName": "@fluentui/react-avatar",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-94258547-1e65-4b1f-9e2e-16e820ed3061.json b/change/@fluentui-react-avatar-94258547-1e65-4b1f-9e2e-16e820ed3061.json
deleted file mode 100644
index 2628e08c645941..00000000000000
--- a/change/@fluentui-react-avatar-94258547-1e65-4b1f-9e2e-16e820ed3061.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "minor",
- "comment": "feat: Add pie layout implementation.",
- "packageName": "@fluentui/react-avatar",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-9daae4e0-30db-4bb1-8cf2-ef1d23d23e56.json b/change/@fluentui-react-avatar-9daae4e0-30db-4bb1-8cf2-ef1d23d23e56.json
deleted file mode 100644
index 3165fb39048f6f..00000000000000
--- a/change/@fluentui-react-avatar-9daae4e0-30db-4bb1-8cf2-ef1d23d23e56.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "docs: Update spec to match implementation, add best practices, and update README.",
- "packageName": "@fluentui/react-avatar",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-avatar-a74ed07c-650a-48fa-897f-c9b151866f7c.json b/change/@fluentui-react-avatar-a74ed07c-650a-48fa-897f-c9b151866f7c.json
deleted file mode 100644
index 13f394d64b3dac..00000000000000
--- a/change/@fluentui-react-avatar-a74ed07c-650a-48fa-897f-c9b151866f7c.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "docs: re-generate api.md files",
- "packageName": "@fluentui/react-avatar",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-avatar-b1dfac68-c7d7-422c-bd64-b86fbc4f3c51.json b/change/@fluentui-react-avatar-b1dfac68-c7d7-422c-bd64-b86fbc4f3c51.json
deleted file mode 100644
index 0ce39218fc70d9..00000000000000
--- a/change/@fluentui-react-avatar-b1dfac68-c7d7-422c-bd64-b86fbc4f3c51.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-avatar",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-bbc12538-d128-45e3-9f9b-302829fede9d.json b/change/@fluentui-react-avatar-bbc12538-d128-45e3-9f9b-302829fede9d.json
deleted file mode 100644
index 0fac9579a59f56..00000000000000
--- a/change/@fluentui-react-avatar-bbc12538-d128-45e3-9f9b-302829fede9d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted",
- "packageName": "@fluentui/react-avatar",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-c592e3ad-6172-4061-ada6-57e0907c10c6.json b/change/@fluentui-react-avatar-c592e3ad-6172-4061-ada6-57e0907c10c6.json
deleted file mode 100644
index c9f93c2eecba11..00000000000000
--- a/change/@fluentui-react-avatar-c592e3ad-6172-4061-ada6-57e0907c10c6.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update tests and add e2e tests.",
- "packageName": "@fluentui/react-avatar",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-cf0035ba-5a49-4a26-9473-2fc7a29d34cd.json b/change/@fluentui-react-avatar-cf0035ba-5a49-4a26-9473-2fc7a29d34cd.json
deleted file mode 100644
index ae59886993ad1b..00000000000000
--- a/change/@fluentui-react-avatar-cf0035ba-5a49-4a26-9473-2fc7a29d34cd.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: update color tokens",
- "packageName": "@fluentui/react-avatar",
- "email": "seanmonahan@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-avatar-eb049e6c-3ced-4cee-90ed-60a042663fcb.json b/change/@fluentui-react-avatar-eb049e6c-3ced-4cee-90ed-60a042663fcb.json
deleted file mode 100644
index a3baba8a782e62..00000000000000
--- a/change/@fluentui-react-avatar-eb049e6c-3ced-4cee-90ed-60a042663fcb.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: fix no-context-default-value lint violations for cxe",
- "packageName": "@fluentui/react-avatar",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-badge-51dc5f10-7c9b-4b8c-9b1d-5ab8afc5ab54.json b/change/@fluentui-react-badge-51dc5f10-7c9b-4b8c-9b1d-5ab8afc5ab54.json
deleted file mode 100644
index 9ce3e6e7717c5b..00000000000000
--- a/change/@fluentui-react-badge-51dc5f10-7c9b-4b8c-9b1d-5ab8afc5ab54.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: update color tokens",
- "packageName": "@fluentui/react-badge",
- "email": "seanmonahan@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-badge-749f0a23-1986-4a17-899d-be7ef2db5724.json b/change/@fluentui-react-badge-749f0a23-1986-4a17-899d-be7ef2db5724.json
deleted file mode 100644
index 256cfd9eb59ccc..00000000000000
--- a/change/@fluentui-react-badge-749f0a23-1986-4a17-899d-be7ef2db5724.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted",
- "packageName": "@fluentui/react-badge",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-badge-b2fb3f62-7f44-4817-a0de-fe2d02047cd2.json b/change/@fluentui-react-badge-b2fb3f62-7f44-4817-a0de-fe2d02047cd2.json
deleted file mode 100644
index 0dcebbc65adf1b..00000000000000
--- a/change/@fluentui-react-badge-b2fb3f62-7f44-4817-a0de-fe2d02047cd2.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-badge",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-badge-b7bbc914-0542-4b2b-afcc-0bbbcca98a93.json b/change/@fluentui-react-badge-b7bbc914-0542-4b2b-afcc-0bbbcca98a93.json
deleted file mode 100644
index a3cfedbde96e09..00000000000000
--- a/change/@fluentui-react-badge-b7bbc914-0542-4b2b-afcc-0bbbcca98a93.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-badge",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-button-2869c3ac-e452-48e2-9a3c-7712ebbb999e.json b/change/@fluentui-react-button-2869c3ac-e452-48e2-9a3c-7712ebbb999e.json
deleted file mode 100644
index c61f46ba11a2cf..00000000000000
--- a/change/@fluentui-react-button-2869c3ac-e452-48e2-9a3c-7712ebbb999e.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Remove max-width style from Button components.",
- "packageName": "@fluentui/react-button",
- "email": "makotom@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-button-d04fe441-3f23-4f06-9908-6f5842e78c58.json b/change/@fluentui-react-button-d04fe441-3f23-4f06-9908-6f5842e78c58.json
deleted file mode 100644
index 9c7820e886cfa7..00000000000000
--- a/change/@fluentui-react-button-d04fe441-3f23-4f06-9908-6f5842e78c58.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks",
- "packageName": "@fluentui/react-button",
- "email": "behowell@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-button-dbe3ba44-8274-4167-b2a2-5e47f6d971a6.json b/change/@fluentui-react-button-dbe3ba44-8274-4167-b2a2-5e47f6d971a6.json
deleted file mode 100644
index 19cad315f979ff..00000000000000
--- a/change/@fluentui-react-button-dbe3ba44-8274-4167-b2a2-5e47f6d971a6.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-button",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-button-e79cf810-58a4-4dfb-9a92-21b263ed9963.json b/change/@fluentui-react-button-e79cf810-58a4-4dfb-9a92-21b263ed9963.json
deleted file mode 100644
index 0b1046e4082ad3..00000000000000
--- a/change/@fluentui-react-button-e79cf810-58a4-4dfb-9a92-21b263ed9963.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-button",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-button-e9fa5c16-6940-43e0-a311-7775d9c137a0.json b/change/@fluentui-react-button-e9fa5c16-6940-43e0-a311-7775d9c137a0.json
deleted file mode 100644
index 94780ff1fcac06..00000000000000
--- a/change/@fluentui-react-button-e9fa5c16-6940-43e0-a311-7775d9c137a0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: Removing CompoundButtonAsToggleButton story since it was using non-exported functions.",
- "packageName": "@fluentui/react-button",
- "email": "makotom@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-card-a21fd9b2-fdd1-4b90-92b0-5f17c633cbdb.json b/change/@fluentui-react-card-a21fd9b2-fdd1-4b90-92b0-5f17c633cbdb.json
deleted file mode 100644
index 231acf8ca7b803..00000000000000
--- a/change/@fluentui-react-card-a21fd9b2-fdd1-4b90-92b0-5f17c633cbdb.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-card",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-card-c5d71f5c-7306-428f-a36f-e7323387d78b.json b/change/@fluentui-react-card-c5d71f5c-7306-428f-a36f-e7323387d78b.json
deleted file mode 100644
index 8e388e14522dcc..00000000000000
--- a/change/@fluentui-react-card-c5d71f5c-7306-428f-a36f-e7323387d78b.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-card",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-card-ebe99300-6716-4ef3-9fa8-0f66e127ad1b.json b/change/@fluentui-react-card-ebe99300-6716-4ef3-9fa8-0f66e127ad1b.json
deleted file mode 100644
index 339d5c0996da79..00000000000000
--- a/change/@fluentui-react-card-ebe99300-6716-4ef3-9fa8-0f66e127ad1b.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: consume cypress.config from it's package boundary",
- "packageName": "@fluentui/react-card",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-checkbox-70a0011d-4bf1-4eb4-8a77-f8c3e9890f8d.json b/change/@fluentui-react-checkbox-70a0011d-4bf1-4eb4-8a77-f8c3e9890f8d.json
deleted file mode 100644
index bfb62ed6763d90..00000000000000
--- a/change/@fluentui-react-checkbox-70a0011d-4bf1-4eb4-8a77-f8c3e9890f8d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-checkbox",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-checkbox-94e0861e-f646-46f7-ae40-eb2b0b0f59ca.json b/change/@fluentui-react-checkbox-94e0861e-f646-46f7-ae40-eb2b0b0f59ca.json
deleted file mode 100644
index 266cd64bb2de22..00000000000000
--- a/change/@fluentui-react-checkbox-94e0861e-f646-46f7-ae40-eb2b0b0f59ca.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: update color tokens",
- "packageName": "@fluentui/react-checkbox",
- "email": "seanmonahan@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-checkbox-ecbd69d7-7e27-4c82-8e47-412a23d351f4.json b/change/@fluentui-react-checkbox-ecbd69d7-7e27-4c82-8e47-412a23d351f4.json
deleted file mode 100644
index e34271231c3681..00000000000000
--- a/change/@fluentui-react-checkbox-ecbd69d7-7e27-4c82-8e47-412a23d351f4.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-checkbox",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-combobox-03bbe68a-a87b-4349-99eb-17bf3c7df044.json b/change/@fluentui-react-combobox-03bbe68a-a87b-4349-99eb-17bf3c7df044.json
deleted file mode 100644
index 05920911add12d..00000000000000
--- a/change/@fluentui-react-combobox-03bbe68a-a87b-4349-99eb-17bf3c7df044.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "fix: typing moves active option in Dropdown",
- "packageName": "@fluentui/react-combobox",
- "email": "sarah.higley@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-combobox-0da3aa7d-1f93-4987-932b-52aaaf1e8f38.json b/change/@fluentui-react-combobox-0da3aa7d-1f93-4987-932b-52aaaf1e8f38.json
deleted file mode 100644
index 62da9ab4f60c27..00000000000000
--- a/change/@fluentui-react-combobox-0da3aa7d-1f93-4987-932b-52aaaf1e8f38.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "fix: Combobox and Dropdown hover/active border colors and padding styles",
- "packageName": "@fluentui/react-combobox",
- "email": "sarah.higley@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-combobox-2563cf61-b89b-4ffd-96ca-fc16b3028d20.json b/change/@fluentui-react-combobox-2563cf61-b89b-4ffd-96ca-fc16b3028d20.json
deleted file mode 100644
index 6c1ace954af357..00000000000000
--- a/change/@fluentui-react-combobox-2563cf61-b89b-4ffd-96ca-fc16b3028d20.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-combobox",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-combobox-93551253-e3c0-4c30-80d1-f6f8c965cead.json b/change/@fluentui-react-combobox-93551253-e3c0-4c30-80d1-f6f8c965cead.json
deleted file mode 100644
index 896d9766d66007..00000000000000
--- a/change/@fluentui-react-combobox-93551253-e3c0-4c30-80d1-f6f8c965cead.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-combobox",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-combobox-ad1b9fd3-1e90-4f60-969e-85774341c610.json b/change/@fluentui-react-combobox-ad1b9fd3-1e90-4f60-969e-85774341c610.json
deleted file mode 100644
index 2d90c283b62009..00000000000000
--- a/change/@fluentui-react-combobox-ad1b9fd3-1e90-4f60-969e-85774341c610.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "fix: open/close combobox on icon click",
- "packageName": "@fluentui/react-combobox",
- "email": "sarah.higley@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-combobox-b56a3d97-47e6-4c1f-98a6-0249120d1ed2.json b/change/@fluentui-react-combobox-b56a3d97-47e6-4c1f-98a6-0249120d1ed2.json
deleted file mode 100644
index d8b845990d1d4c..00000000000000
--- a/change/@fluentui-react-combobox-b56a3d97-47e6-4c1f-98a6-0249120d1ed2.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "feat: Allow typing by default, add allowFreeform",
- "packageName": "@fluentui/react-combobox",
- "email": "sarah.higley@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-combobox-bdb46b5d-61aa-4860-80b7-29555f813609.json b/change/@fluentui-react-combobox-bdb46b5d-61aa-4860-80b7-29555f813609.json
deleted file mode 100644
index dd19555e36a95f..00000000000000
--- a/change/@fluentui-react-combobox-bdb46b5d-61aa-4860-80b7-29555f813609.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "feat: make listbox slot nullable",
- "packageName": "@fluentui/react-combobox",
- "email": "sarah.higley@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-combobox-d1f4333e-0e57-4809-ad40-86df3bf5e61c.json b/change/@fluentui-react-combobox-d1f4333e-0e57-4809-ad40-86df3bf5e61c.json
deleted file mode 100644
index 514e82a850c4e3..00000000000000
--- a/change/@fluentui-react-combobox-d1f4333e-0e57-4809-ad40-86df3bf5e61c.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "bugfix: update useMergedEventCallbacks to mergeCallbacks",
- "packageName": "@fluentui/react-combobox",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-components-0d75da93-cd62-408e-b1b7-965a6224f8e7.json b/change/@fluentui-react-components-0d75da93-cd62-408e-b1b7-965a6224f8e7.json
deleted file mode 100644
index 9da548be0d70b5..00000000000000
--- a/change/@fluentui-react-components-0d75da93-cd62-408e-b1b7-965a6224f8e7.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "feat: Export `TableCellActions` and `TablePrimaryCell` as unstable",
- "packageName": "@fluentui/react-components",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-components-10e1655d-0ee6-4e2c-bf0a-a6b9f9abc7bc.json b/change/@fluentui-react-components-10e1655d-0ee6-4e2c-bf0a-a6b9f9abc7bc.json
deleted file mode 100644
index 4027e3c095b5c8..00000000000000
--- a/change/@fluentui-react-components-10e1655d-0ee6-4e2c-bf0a-a6b9f9abc7bc.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: use caret for @fluentui/react-spinbutton",
- "packageName": "@fluentui/react-components",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-components-52cc9453-6977-4504-9d2a-88769141c352.json b/change/@fluentui-react-components-52cc9453-6977-4504-9d2a-88769141c352.json
deleted file mode 100644
index 8688606ab16548..00000000000000
--- a/change/@fluentui-react-components-52cc9453-6977-4504-9d2a-88769141c352.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "minor",
- "comment": "feat: re-export GriffelRenderer type",
- "packageName": "@fluentui/react-components",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-components-5b36ce67-6a39-4343-a00b-9c45faaedc75.json b/change/@fluentui-react-components-5b36ce67-6a39-4343-a00b-9c45faaedc75.json
deleted file mode 100644
index 062db5241cd334..00000000000000
--- a/change/@fluentui-react-components-5b36ce67-6a39-4343-a00b-9c45faaedc75.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-components",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-components-6808fda2-7ec2-4b79-b721-49ad3feaebc0.json b/change/@fluentui-react-components-6808fda2-7ec2-4b79-b721-49ad3feaebc0.json
deleted file mode 100644
index 2f6a148da776e5..00000000000000
--- a/change/@fluentui-react-components-6808fda2-7ec2-4b79-b721-49ad3feaebc0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "feat: Export `TableSelectionCell` from unstable",
- "packageName": "@fluentui/react-components",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-components-74d5b4c3-172d-4577-a79b-ba567146f8c5.json b/change/@fluentui-react-components-74d5b4c3-172d-4577-a79b-ba567146f8c5.json
deleted file mode 100644
index 40873123e00c71..00000000000000
--- a/change/@fluentui-react-components-74d5b4c3-172d-4577-a79b-ba567146f8c5.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-components",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-components-847b38fb-34c3-40b2-b8d4-4c53b3027acc.json b/change/@fluentui-react-components-847b38fb-34c3-40b2-b8d4-4c53b3027acc.json
deleted file mode 100644
index 5bfbaf451a00e1..00000000000000
--- a/change/@fluentui-react-components-847b38fb-34c3-40b2-b8d4-4c53b3027acc.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: export ToolbarButton",
- "packageName": "@fluentui/react-components",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-components-e667c340-7730-439c-b549-707a3be95b21.json b/change/@fluentui-react-components-e667c340-7730-439c-b549-707a3be95b21.json
deleted file mode 100644
index 41833982e7adff..00000000000000
--- a/change/@fluentui-react-components-e667c340-7730-439c-b549-707a3be95b21.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "Move Icon Table to new page",
- "packageName": "@fluentui/react-components",
- "email": "ololubek@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-conformance-griffel-4db845ed-858f-4ed6-ad5c-139760db6ddd.json b/change/@fluentui-react-conformance-griffel-4db845ed-858f-4ed6-ad5c-139760db6ddd.json
deleted file mode 100644
index fb5733f068aacb..00000000000000
--- a/change/@fluentui-react-conformance-griffel-4db845ed-858f-4ed6-ad5c-139760db6ddd.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-conformance-griffel",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-conformance-griffel-544cd119-39f4-49a1-bf2b-c25acb7cd8a5.json b/change/@fluentui-react-conformance-griffel-544cd119-39f4-49a1-bf2b-c25acb7cd8a5.json
deleted file mode 100644
index ab7014c305cc54..00000000000000
--- a/change/@fluentui-react-conformance-griffel-544cd119-39f4-49a1-bf2b-c25acb7cd8a5.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-conformance-griffel",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-context-selector-cebd8b0a-d5c5-4eff-8069-ac3d9610c4ae.json b/change/@fluentui-react-context-selector-cebd8b0a-d5c5-4eff-8069-ac3d9610c4ae.json
deleted file mode 100644
index 121ca5e0a55eca..00000000000000
--- a/change/@fluentui-react-context-selector-cebd8b0a-d5c5-4eff-8069-ac3d9610c4ae.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-context-selector",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-context-selector-e362261c-c781-45d2-a4b2-1a2af9990e0e.json b/change/@fluentui-react-context-selector-e362261c-c781-45d2-a4b2-1a2af9990e0e.json
deleted file mode 100644
index c6b41b13e551df..00000000000000
--- a/change/@fluentui-react-context-selector-e362261c-c781-45d2-a4b2-1a2af9990e0e.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "docs(react-context-selector): re-generate api.md",
- "packageName": "@fluentui/react-context-selector",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-dialog-0e776115-4b8f-4a9a-937c-63318516ad3b.json b/change/@fluentui-react-dialog-0e776115-4b8f-4a9a-937c-63318516ad3b.json
deleted file mode 100644
index a6a1c9fd4149e0..00000000000000
--- a/change/@fluentui-react-dialog-0e776115-4b8f-4a9a-937c-63318516ad3b.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore(react-dialog): Updates trigger to use useARIAButtonProps",
- "packageName": "@fluentui/react-dialog",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-dialog-1de4176f-4dfd-4406-a1f5-4b2c00cf2bdd.json b/change/@fluentui-react-dialog-1de4176f-4dfd-4406-a1f5-4b2c00cf2bdd.json
deleted file mode 100644
index 2cab73955794de..00000000000000
--- a/change/@fluentui-react-dialog-1de4176f-4dfd-4406-a1f5-4b2c00cf2bdd.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-dialog",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-dialog-5d208332-d639-43b9-8909-1fb009f45d5f.json b/change/@fluentui-react-dialog-5d208332-d639-43b9-8909-1fb009f45d5f.json
deleted file mode 100644
index da2fa8c23f9f63..00000000000000
--- a/change/@fluentui-react-dialog-5d208332-d639-43b9-8909-1fb009f45d5f.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "feat: add scroll lock feature to Dialog",
- "packageName": "@fluentui/react-dialog",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-dialog-62084a3e-5a47-420d-b5b5-05fcb5956e3d.json b/change/@fluentui-react-dialog-62084a3e-5a47-420d-b5b5-05fcb5956e3d.json
deleted file mode 100644
index 27c911c7e91ec8..00000000000000
--- a/change/@fluentui-react-dialog-62084a3e-5a47-420d-b5b5-05fcb5956e3d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "feat(react-dialog): adds proper style to make DialogBody responsive",
- "packageName": "@fluentui/react-dialog",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-dialog-70a44d45-8098-4d30-953b-9f8799bdaaf0.json b/change/@fluentui-react-dialog-70a44d45-8098-4d30-953b-9f8799bdaaf0.json
deleted file mode 100644
index 8ec0d166b45611..00000000000000
--- a/change/@fluentui-react-dialog-70a44d45-8098-4d30-953b-9f8799bdaaf0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-dialog",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-dialog-7e208240-ef01-4ecb-861e-2693b939b990.json b/change/@fluentui-react-dialog-7e208240-ef01-4ecb-861e-2693b939b990.json
deleted file mode 100644
index db73e8e47610a6..00000000000000
--- a/change/@fluentui-react-dialog-7e208240-ef01-4ecb-861e-2693b939b990.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: renames overlay slot to backdrop",
- "packageName": "@fluentui/react-dialog",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-dialog-84bff749-0be3-413d-9554-13744acffbfa.json b/change/@fluentui-react-dialog-84bff749-0be3-413d-9554-13744acffbfa.json
deleted file mode 100644
index eff348d36bb2f7..00000000000000
--- a/change/@fluentui-react-dialog-84bff749-0be3-413d-9554-13744acffbfa.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "feat: Adds padding-right style to avoid jumping on scroll lock",
- "packageName": "@fluentui/react-dialog",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-dialog-914ff253-e601-4337-91a3-f7f8648eb1a5.json b/change/@fluentui-react-dialog-914ff253-e601-4337-91a3-f7f8648eb1a5.json
new file mode 100644
index 00000000000000..784dca56f6ea76
--- /dev/null
+++ b/change/@fluentui-react-dialog-914ff253-e601-4337-91a3-f7f8648eb1a5.json
@@ -0,0 +1,7 @@
+{
+ "type": "none",
+ "comment": "chore: adds disableButtonEnhancement on triggers",
+ "packageName": "@fluentui/react-dialog",
+ "email": "bernardo.sunderhus@gmail.com",
+ "dependentChangeType": "none"
+}
diff --git a/change/@fluentui-react-dialog-f1d29ea6-d47d-48b3-88a7-41f441622b05.json b/change/@fluentui-react-dialog-f1d29ea6-d47d-48b3-88a7-41f441622b05.json
deleted file mode 100644
index ec8c6b6b271437..00000000000000
--- a/change/@fluentui-react-dialog-f1d29ea6-d47d-48b3-88a7-41f441622b05.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: consume cypress.config from it's package boundary",
- "packageName": "@fluentui/react-dialog",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-divider-2bfdd93e-d2cd-4f3b-9b89-c452876fb730.json b/change/@fluentui-react-divider-2bfdd93e-d2cd-4f3b-9b89-c452876fb730.json
new file mode 100644
index 00000000000000..7604a59f9a4384
--- /dev/null
+++ b/change/@fluentui-react-divider-2bfdd93e-d2cd-4f3b-9b89-c452876fb730.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "chore: Migrate to new package structure.",
+ "packageName": "@fluentui/react-divider",
+ "email": "tristan.watanabe@gmail.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-divider-502fbcad-e656-417f-a240-e32b176d9c6d.json b/change/@fluentui-react-divider-502fbcad-e656-417f-a240-e32b176d9c6d.json
deleted file mode 100644
index 9e86a9004812fc..00000000000000
--- a/change/@fluentui-react-divider-502fbcad-e656-417f-a240-e32b176d9c6d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-divider",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-divider-5ea2a7b8-0e9c-4ee8-8357-b547c10abfe6.json b/change/@fluentui-react-divider-5ea2a7b8-0e9c-4ee8-8357-b547c10abfe6.json
deleted file mode 100644
index c4e2b42721fdce..00000000000000
--- a/change/@fluentui-react-divider-5ea2a7b8-0e9c-4ee8-8357-b547c10abfe6.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-divider",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-image-6e5dbc6c-a5ed-4e2f-9e97-10232bc493d2.json b/change/@fluentui-react-image-6e5dbc6c-a5ed-4e2f-9e97-10232bc493d2.json
deleted file mode 100644
index c46a0d6a6fa88d..00000000000000
--- a/change/@fluentui-react-image-6e5dbc6c-a5ed-4e2f-9e97-10232bc493d2.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-image",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-image-721bf145-0097-459d-bd2a-22813859b3d6.json b/change/@fluentui-react-image-721bf145-0097-459d-bd2a-22813859b3d6.json
deleted file mode 100644
index 992ecd96cf56b1..00000000000000
--- a/change/@fluentui-react-image-721bf145-0097-459d-bd2a-22813859b3d6.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-image",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-input-a4f73889-d309-4493-ba1e-6f3ede31cc7d.json b/change/@fluentui-react-input-a4f73889-d309-4493-ba1e-6f3ede31cc7d.json
deleted file mode 100644
index ef2c9a98f657f1..00000000000000
--- a/change/@fluentui-react-input-a4f73889-d309-4493-ba1e-6f3ede31cc7d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-input",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-input-b6dae232-bb04-4dcd-90b6-eb9272f009fe.json b/change/@fluentui-react-input-b6dae232-bb04-4dcd-90b6-eb9272f009fe.json
deleted file mode 100644
index 11598c81563d7b..00000000000000
--- a/change/@fluentui-react-input-b6dae232-bb04-4dcd-90b6-eb9272f009fe.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Remove box-shadow from filled appearances.",
- "packageName": "@fluentui/react-input",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-input-d6f6fbab-ea0e-4fd8-8eb7-a885d65525cb.json b/change/@fluentui-react-input-d6f6fbab-ea0e-4fd8-8eb7-a885d65525cb.json
deleted file mode 100644
index a426953f65f135..00000000000000
--- a/change/@fluentui-react-input-d6f6fbab-ea0e-4fd8-8eb7-a885d65525cb.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-input",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-label-2f937de0-0831-4f49-be42-94ee307cb652.json b/change/@fluentui-react-label-2f937de0-0831-4f49-be42-94ee307cb652.json
deleted file mode 100644
index 4a70901d889ce6..00000000000000
--- a/change/@fluentui-react-label-2f937de0-0831-4f49-be42-94ee307cb652.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-label",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-label-c7e9c9ac-cc37-4eef-a1d3-1e731878f0da.json b/change/@fluentui-react-label-c7e9c9ac-cc37-4eef-a1d3-1e731878f0da.json
deleted file mode 100644
index 87a48a676d1518..00000000000000
--- a/change/@fluentui-react-label-c7e9c9ac-cc37-4eef-a1d3-1e731878f0da.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-label",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-link-748580a8-f10f-41b6-bf28-b2b3653c74d4.json b/change/@fluentui-react-link-748580a8-f10f-41b6-bf28-b2b3653c74d4.json
deleted file mode 100644
index a8f91431b4d9fc..00000000000000
--- a/change/@fluentui-react-link-748580a8-f10f-41b6-bf28-b2b3653c74d4.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: add type=button when rendered as a button",
- "packageName": "@fluentui/react-link",
- "email": "sarah.higley@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-link-983b0860-70a3-4d4f-94e5-b0dc45885632.json b/change/@fluentui-react-link-983b0860-70a3-4d4f-94e5-b0dc45885632.json
deleted file mode 100644
index 67eb8735d8ae49..00000000000000
--- a/change/@fluentui-react-link-983b0860-70a3-4d4f-94e5-b0dc45885632.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-link",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-link-cd50b37d-faf6-4c62-ba62-eb4d8fa9f6f2.json b/change/@fluentui-react-link-cd50b37d-faf6-4c62-ba62-eb4d8fa9f6f2.json
deleted file mode 100644
index 174bc783f882c3..00000000000000
--- a/change/@fluentui-react-link-cd50b37d-faf6-4c62-ba62-eb4d8fa9f6f2.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-link",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-menu-0c55a50d-9c7d-47af-ad4b-a3473ce12a07.json b/change/@fluentui-react-menu-0c55a50d-9c7d-47af-ad4b-a3473ce12a07.json
deleted file mode 100644
index 1b85cd9a0a4723..00000000000000
--- a/change/@fluentui-react-menu-0c55a50d-9c7d-47af-ad4b-a3473ce12a07.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks",
- "packageName": "@fluentui/react-menu",
- "email": "behowell@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-menu-1c6c92b0-a2ee-4eed-b72d-148a405143db.json b/change/@fluentui-react-menu-1c6c92b0-a2ee-4eed-b72d-148a405143db.json
deleted file mode 100644
index 54f401566c08a2..00000000000000
--- a/change/@fluentui-react-menu-1c6c92b0-a2ee-4eed-b72d-148a405143db.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-menu",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-menu-4dd93206-2702-4680-829c-617e8b250bc0.json b/change/@fluentui-react-menu-4dd93206-2702-4680-829c-617e8b250bc0.json
new file mode 100644
index 00000000000000..6feeff353b77ff
--- /dev/null
+++ b/change/@fluentui-react-menu-4dd93206-2702-4680-829c-617e8b250bc0.json
@@ -0,0 +1,7 @@
+{
+ "type": "none",
+ "comment": "chore: adds disableButtonEnhancement on triggers",
+ "packageName": "@fluentui/react-menu",
+ "email": "bernardo.sunderhus@gmail.com",
+ "dependentChangeType": "none"
+}
diff --git a/change/@fluentui-react-menu-54e67f48-1fdd-4e7e-880f-b24641b8ef1f.json b/change/@fluentui-react-menu-54e67f48-1fdd-4e7e-880f-b24641b8ef1f.json
deleted file mode 100644
index aff73f53701554..00000000000000
--- a/change/@fluentui-react-menu-54e67f48-1fdd-4e7e-880f-b24641b8ef1f.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-menu",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-menu-83e936ff-2902-4533-baec-ef0d8009e7f8.json b/change/@fluentui-react-menu-83e936ff-2902-4533-baec-ef0d8009e7f8.json
deleted file mode 100644
index 0d8a6eec0d9f8f..00000000000000
--- a/change/@fluentui-react-menu-83e936ff-2902-4533-baec-ef0d8009e7f8.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "minor",
- "comment": "chore(react-menu): Updates trigger to use useARIAButton",
- "packageName": "@fluentui/react-menu",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-menu-f14f6480-cf2e-442b-9804-20c53dde2e97.json b/change/@fluentui-react-menu-f14f6480-cf2e-442b-9804-20c53dde2e97.json
deleted file mode 100644
index 7e641adc45062c..00000000000000
--- a/change/@fluentui-react-menu-f14f6480-cf2e-442b-9804-20c53dde2e97.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: consume cypress.config from it's package boundary",
- "packageName": "@fluentui/react-menu",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-menu-f8dcc543-b619-4573-b398-32120ddf06c4.json b/change/@fluentui-react-menu-f8dcc543-b619-4573-b398-32120ddf06c4.json
deleted file mode 100644
index 880582b53b944a..00000000000000
--- a/change/@fluentui-react-menu-f8dcc543-b619-4573-b398-32120ddf06c4.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore(react-menu): stop spreading props on state",
- "packageName": "@fluentui/react-menu",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-menu-fd6031a5-d8f5-4af0-bf16-a9bfe3990449.json b/change/@fluentui-react-menu-fd6031a5-d8f5-4af0-bf16-a9bfe3990449.json
deleted file mode 100644
index 76ab88b1ea584b..00000000000000
--- a/change/@fluentui-react-menu-fd6031a5-d8f5-4af0-bf16-a9bfe3990449.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: fix no-context-default-value lint violations",
- "packageName": "@fluentui/react-menu",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-overflow-5651b30f-165e-4fed-a01c-c6b83ef18f9a.json b/change/@fluentui-react-overflow-5651b30f-165e-4fed-a01c-c6b83ef18f9a.json
deleted file mode 100644
index 1d645bf2d324f2..00000000000000
--- a/change/@fluentui-react-overflow-5651b30f-165e-4fed-a01c-c6b83ef18f9a.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: fix no-context-default-value lint violations",
- "packageName": "@fluentui/react-overflow",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-overflow-d4c01778-8b3d-4b3e-83f5-eeee9dbea0e9.json b/change/@fluentui-react-overflow-d4c01778-8b3d-4b3e-83f5-eeee9dbea0e9.json
deleted file mode 100644
index 46173e81fd0873..00000000000000
--- a/change/@fluentui-react-overflow-d4c01778-8b3d-4b3e-83f5-eeee9dbea0e9.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-overflow",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-overflow-ecf714e3-d218-4cc2-b03b-330efd0d6e8d.json b/change/@fluentui-react-overflow-ecf714e3-d218-4cc2-b03b-330efd0d6e8d.json
deleted file mode 100644
index b2fbcef441aa44..00000000000000
--- a/change/@fluentui-react-overflow-ecf714e3-d218-4cc2-b03b-330efd0d6e8d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "docs: re-generate api.md files",
- "packageName": "@fluentui/react-overflow",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-overflow-f8c1e8df-6572-4548-b8b4-4a74bb2cb20c.json b/change/@fluentui-react-overflow-f8c1e8df-6572-4548-b8b4-4a74bb2cb20c.json
deleted file mode 100644
index bbb15298f7e1ed..00000000000000
--- a/change/@fluentui-react-overflow-f8c1e8df-6572-4548-b8b4-4a74bb2cb20c.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-overflow",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-popover-20004f36-0fef-42c5-b56e-3d0f618b2371.json b/change/@fluentui-react-popover-20004f36-0fef-42c5-b56e-3d0f618b2371.json
deleted file mode 100644
index e072a5aa67e5cf..00000000000000
--- a/change/@fluentui-react-popover-20004f36-0fef-42c5-b56e-3d0f618b2371.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Allow PopoverSurface to trap focus when it's focusable.",
- "packageName": "@fluentui/react-popover",
- "email": "esteban.230@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-popover-38cb556a-cc08-471a-8aeb-878b78bbbbcd.json b/change/@fluentui-react-popover-38cb556a-cc08-471a-8aeb-878b78bbbbcd.json
deleted file mode 100644
index 2f057dd013aace..00000000000000
--- a/change/@fluentui-react-popover-38cb556a-cc08-471a-8aeb-878b78bbbbcd.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted",
- "packageName": "@fluentui/react-popover",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-popover-7dd45c82-0e2f-4103-b68d-0a9749453b79.json b/change/@fluentui-react-popover-7dd45c82-0e2f-4103-b68d-0a9749453b79.json
deleted file mode 100644
index df58774aaff4fa..00000000000000
--- a/change/@fluentui-react-popover-7dd45c82-0e2f-4103-b68d-0a9749453b79.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: consume cypress.config from it's package boundary",
- "packageName": "@fluentui/react-popover",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-popover-930e66cd-a7fe-42e7-a5c0-7980f5118947.json b/change/@fluentui-react-popover-930e66cd-a7fe-42e7-a5c0-7980f5118947.json
deleted file mode 100644
index 0a6af642a942e5..00000000000000
--- a/change/@fluentui-react-popover-930e66cd-a7fe-42e7-a5c0-7980f5118947.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-popover",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-popover-a21a4cc3-6432-4b2e-ab1c-f81f9f9c0a0a.json b/change/@fluentui-react-popover-a21a4cc3-6432-4b2e-ab1c-f81f9f9c0a0a.json
deleted file mode 100644
index 1f5ecda4171707..00000000000000
--- a/change/@fluentui-react-popover-a21a4cc3-6432-4b2e-ab1c-f81f9f9c0a0a.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks",
- "packageName": "@fluentui/react-popover",
- "email": "behowell@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-popover-a614fdc2-600c-45eb-87be-446c387a1998.json b/change/@fluentui-react-popover-a614fdc2-600c-45eb-87be-446c387a1998.json
deleted file mode 100644
index 52362be0f7bfd4..00000000000000
--- a/change/@fluentui-react-popover-a614fdc2-600c-45eb-87be-446c387a1998.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "minor",
- "comment": "chore(react-popover): Updates trigger to use useARIAButton",
- "packageName": "@fluentui/react-popover",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-popover-b12a35f1-9fa8-418f-af79-dc3fc7ea18bb.json b/change/@fluentui-react-popover-b12a35f1-9fa8-418f-af79-dc3fc7ea18bb.json
deleted file mode 100644
index 82ceb9a09ab383..00000000000000
--- a/change/@fluentui-react-popover-b12a35f1-9fa8-418f-af79-dc3fc7ea18bb.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: update color tokens",
- "packageName": "@fluentui/react-popover",
- "email": "seanmonahan@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-popover-b9e6634e-3a09-47ca-a547-c308fb64d51a.json b/change/@fluentui-react-popover-b9e6634e-3a09-47ca-a547-c308fb64d51a.json
deleted file mode 100644
index 1efd662ad894ce..00000000000000
--- a/change/@fluentui-react-popover-b9e6634e-3a09-47ca-a547-c308fb64d51a.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-popover",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-popover-c9f8a637-4cdc-438c-b74a-b38279f3e1df.json b/change/@fluentui-react-popover-c9f8a637-4cdc-438c-b74a-b38279f3e1df.json
new file mode 100644
index 00000000000000..262fccf9227b1e
--- /dev/null
+++ b/change/@fluentui-react-popover-c9f8a637-4cdc-438c-b74a-b38279f3e1df.json
@@ -0,0 +1,7 @@
+{
+ "type": "none",
+ "comment": "chore: adds disableButtonEnhancement on triggers",
+ "packageName": "@fluentui/react-popover",
+ "email": "bernardo.sunderhus@gmail.com",
+ "dependentChangeType": "none"
+}
diff --git a/change/@fluentui-react-popover-d85987eb-ac0b-49ee-8421-f7325302b84e.json b/change/@fluentui-react-popover-d85987eb-ac0b-49ee-8421-f7325302b84e.json
deleted file mode 100644
index d39b8cc204e461..00000000000000
--- a/change/@fluentui-react-popover-d85987eb-ac0b-49ee-8421-f7325302b84e.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: fix no-context-default-value lint violations",
- "packageName": "@fluentui/react-popover",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-portal-630367ac-9d97-4cc3-b509-c921e52bbb3f.json b/change/@fluentui-react-portal-630367ac-9d97-4cc3-b509-c921e52bbb3f.json
deleted file mode 100644
index 9d5bcd2b3d2977..00000000000000
--- a/change/@fluentui-react-portal-630367ac-9d97-4cc3-b509-c921e52bbb3f.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-portal",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-portal-7a83ae1a-a67c-4edc-b9bf-61224a9b801a.json b/change/@fluentui-react-portal-7a83ae1a-a67c-4edc-b9bf-61224a9b801a.json
deleted file mode 100644
index fc6be94870e933..00000000000000
--- a/change/@fluentui-react-portal-7a83ae1a-a67c-4edc-b9bf-61224a9b801a.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-portal",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-portal-compat-8639e16e-850a-4d84-be6a-7c811df7b428.json b/change/@fluentui-react-portal-compat-8639e16e-850a-4d84-be6a-7c811df7b428.json
deleted file mode 100644
index f125e01588549b..00000000000000
--- a/change/@fluentui-react-portal-compat-8639e16e-850a-4d84-be6a-7c811df7b428.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-portal-compat",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-portal-compat-context-a20ea8f9-4d9c-4a1d-b903-e0042dc7cdc0.json b/change/@fluentui-react-portal-compat-context-a20ea8f9-4d9c-4a1d-b903-e0042dc7cdc0.json
deleted file mode 100644
index 736e811ff58b40..00000000000000
--- a/change/@fluentui-react-portal-compat-context-a20ea8f9-4d9c-4a1d-b903-e0042dc7cdc0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-portal-compat-context",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-portal-compat-context-f99bc709-8180-43f5-a052-113a2d424875.json b/change/@fluentui-react-portal-compat-context-f99bc709-8180-43f5-a052-113a2d424875.json
deleted file mode 100644
index 6f83070a3b6bfa..00000000000000
--- a/change/@fluentui-react-portal-compat-context-f99bc709-8180-43f5-a052-113a2d424875.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: fix no-context-default-value lint violations",
- "packageName": "@fluentui/react-portal-compat-context",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-positioning-2c04f2a8-30a8-43b4-9b96-36b24f1fce36.json b/change/@fluentui-react-positioning-2c04f2a8-30a8-43b4-9b96-36b24f1fce36.json
deleted file mode 100644
index 5e523a9e1147fe..00000000000000
--- a/change/@fluentui-react-positioning-2c04f2a8-30a8-43b4-9b96-36b24f1fce36.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "minor",
- "comment": "feat: Upgrade to Floating UI v1",
- "packageName": "@fluentui/react-positioning",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-positioning-8efb2e48-e33d-429a-be0e-d862aaf3e6f4.json b/change/@fluentui-react-positioning-8efb2e48-e33d-429a-be0e-d862aaf3e6f4.json
deleted file mode 100644
index 3e3a3e70e60c75..00000000000000
--- a/change/@fluentui-react-positioning-8efb2e48-e33d-429a-be0e-d862aaf3e6f4.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "docs: re-generate api.md files",
- "packageName": "@fluentui/react-positioning",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-positioning-9ba84c8e-1959-4d8d-b0c7-a4ab9716e84a.json b/change/@fluentui-react-positioning-9ba84c8e-1959-4d8d-b0c7-a4ab9716e84a.json
deleted file mode 100644
index f5714c1fa9ee01..00000000000000
--- a/change/@fluentui-react-positioning-9ba84c8e-1959-4d8d-b0c7-a4ab9716e84a.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-positioning",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-positioning-ae49d3d0-fc3f-41ce-85d2-5635c8f974fa.json b/change/@fluentui-react-positioning-ae49d3d0-fc3f-41ce-85d2-5635c8f974fa.json
deleted file mode 100644
index ab7f1cb67e5cd9..00000000000000
--- a/change/@fluentui-react-positioning-ae49d3d0-fc3f-41ce-85d2-5635c8f974fa.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-positioning",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-provider-746f0bda-8ae9-4263-86f0-39e635fddee4.json b/change/@fluentui-react-provider-746f0bda-8ae9-4263-86f0-39e635fddee4.json
deleted file mode 100644
index 45376a1471857d..00000000000000
--- a/change/@fluentui-react-provider-746f0bda-8ae9-4263-86f0-39e635fddee4.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-provider",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-provider-bf906eb6-120b-4f0e-a724-0234253b5c92.json b/change/@fluentui-react-provider-bf906eb6-120b-4f0e-a724-0234253b5c92.json
deleted file mode 100644
index 531de44c6698a7..00000000000000
--- a/change/@fluentui-react-provider-bf906eb6-120b-4f0e-a724-0234253b5c92.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-provider",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-radio-351deefa-bf0e-4ded-90b0-c7ff7c558400.json b/change/@fluentui-react-radio-351deefa-bf0e-4ded-90b0-c7ff7c558400.json
deleted file mode 100644
index 6d6e5565ba8616..00000000000000
--- a/change/@fluentui-react-radio-351deefa-bf0e-4ded-90b0-c7ff7c558400.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks",
- "packageName": "@fluentui/react-radio",
- "email": "behowell@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-radio-5d524062-22e8-48fc-8c0a-7813741322c1.json b/change/@fluentui-react-radio-5d524062-22e8-48fc-8c0a-7813741322c1.json
deleted file mode 100644
index a80e65e86e36f9..00000000000000
--- a/change/@fluentui-react-radio-5d524062-22e8-48fc-8c0a-7813741322c1.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-radio",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-radio-7135f1e8-6ce5-4c54-af93-d38311935a1d.json b/change/@fluentui-react-radio-7135f1e8-6ce5-4c54-af93-d38311935a1d.json
deleted file mode 100644
index 1e47d2723b9e04..00000000000000
--- a/change/@fluentui-react-radio-7135f1e8-6ce5-4c54-af93-d38311935a1d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: fix no-context-default-value lint violations for cxe",
- "packageName": "@fluentui/react-radio",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-radio-e908bd07-8621-46ba-b8ac-836ee59150f3.json b/change/@fluentui-react-radio-e908bd07-8621-46ba-b8ac-836ee59150f3.json
deleted file mode 100644
index 978ba3754346ca..00000000000000
--- a/change/@fluentui-react-radio-e908bd07-8621-46ba-b8ac-836ee59150f3.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-radio",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-select-09b46487-7458-451f-9308-7d09639780c3.json b/change/@fluentui-react-select-09b46487-7458-451f-9308-7d09639780c3.json
deleted file mode 100644
index 2b079e7f715124..00000000000000
--- a/change/@fluentui-react-select-09b46487-7458-451f-9308-7d09639780c3.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-select",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-select-287be14f-25f7-44e5-b5a7-290b8772638a.json b/change/@fluentui-react-select-287be14f-25f7-44e5-b5a7-290b8772638a.json
new file mode 100644
index 00000000000000..e3e3a66e17ddd8
--- /dev/null
+++ b/change/@fluentui-react-select-287be14f-25f7-44e5-b5a7-290b8772638a.json
@@ -0,0 +1,7 @@
+{
+ "type": "prerelease",
+ "comment": "fix: update styles based on design review",
+ "packageName": "@fluentui/react-select",
+ "email": "sarah.higley@microsoft.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-select-be677e57-0564-45b5-9366-0c4bd90d52d9.json b/change/@fluentui-react-select-be677e57-0564-45b5-9366-0c4bd90d52d9.json
new file mode 100644
index 00000000000000..4248e0263caf9d
--- /dev/null
+++ b/change/@fluentui-react-select-be677e57-0564-45b5-9366-0c4bd90d52d9.json
@@ -0,0 +1,7 @@
+{
+ "type": "prerelease",
+ "comment": "chore: Migrate to new package structure.",
+ "packageName": "@fluentui/react-select",
+ "email": "tristan.watanabe@gmail.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-select-dbd1441c-a501-4141-a848-5bca3e038520.json b/change/@fluentui-react-select-dbd1441c-a501-4141-a848-5bca3e038520.json
deleted file mode 100644
index e601daa619ca93..00000000000000
--- a/change/@fluentui-react-select-dbd1441c-a501-4141-a848-5bca3e038520.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-select",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-shared-contexts-42e6e4ca-81a1-4ec1-93f5-82a5939d5f7f.json b/change/@fluentui-react-shared-contexts-42e6e4ca-81a1-4ec1-93f5-82a5939d5f7f.json
deleted file mode 100644
index 5f8c8b1b23c396..00000000000000
--- a/change/@fluentui-react-shared-contexts-42e6e4ca-81a1-4ec1-93f5-82a5939d5f7f.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-shared-contexts",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-shared-contexts-4d01ca95-ef12-4baa-817e-1b032fd85cc2.json b/change/@fluentui-react-shared-contexts-4d01ca95-ef12-4baa-817e-1b032fd85cc2.json
deleted file mode 100644
index c1de1733e2c989..00000000000000
--- a/change/@fluentui-react-shared-contexts-4d01ca95-ef12-4baa-817e-1b032fd85cc2.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: fix no-context-default-value lint violations",
- "packageName": "@fluentui/react-shared-contexts",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-shared-contexts-e4e3f022-f79f-4ab2-95bf-a496d8d2784a.json b/change/@fluentui-react-shared-contexts-e4e3f022-f79f-4ab2-95bf-a496d8d2784a.json
deleted file mode 100644
index 35d8e41d6d9231..00000000000000
--- a/change/@fluentui-react-shared-contexts-e4e3f022-f79f-4ab2-95bf-a496d8d2784a.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "docs(react-shared-contexts): re-generate api.md",
- "packageName": "@fluentui/react-shared-contexts",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-slider-bfbb46d4-bf79-40d5-bf6b-bdb321106d33.json b/change/@fluentui-react-slider-bfbb46d4-bf79-40d5-bf6b-bdb321106d33.json
deleted file mode 100644
index 79120213e71732..00000000000000
--- a/change/@fluentui-react-slider-bfbb46d4-bf79-40d5-bf6b-bdb321106d33.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-slider",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-slider-c4c58103-3a2b-49d4-9f8d-7a7a3ac349a5.json b/change/@fluentui-react-slider-c4c58103-3a2b-49d4-9f8d-7a7a3ac349a5.json
deleted file mode 100644
index fe6f25c37a0810..00000000000000
--- a/change/@fluentui-react-slider-c4c58103-3a2b-49d4-9f8d-7a7a3ac349a5.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-slider",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-spinbutton-13d975eb-111b-4f77-8da8-b825b39535c0.json b/change/@fluentui-react-spinbutton-13d975eb-111b-4f77-8da8-b825b39535c0.json
deleted file mode 100644
index 757f25a09fb14e..00000000000000
--- a/change/@fluentui-react-spinbutton-13d975eb-111b-4f77-8da8-b825b39535c0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-spinbutton",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-spinbutton-29eae6c6-5dbe-4844-a8b2-560d7af69be7.json b/change/@fluentui-react-spinbutton-29eae6c6-5dbe-4844-a8b2-560d7af69be7.json
deleted file mode 100644
index d60bf21fd15bce..00000000000000
--- a/change/@fluentui-react-spinbutton-29eae6c6-5dbe-4844-a8b2-560d7af69be7.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks",
- "packageName": "@fluentui/react-spinbutton",
- "email": "behowell@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-spinbutton-803b9a0b-82dd-471f-b57d-7717eb0d925d.json b/change/@fluentui-react-spinbutton-803b9a0b-82dd-471f-b57d-7717eb0d925d.json
deleted file mode 100644
index 6b6c002266a3c2..00000000000000
--- a/change/@fluentui-react-spinbutton-803b9a0b-82dd-471f-b57d-7717eb0d925d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "docs: add accessibility documentation for SpinButton",
- "packageName": "@fluentui/react-spinbutton",
- "email": "jennz@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-spinbutton-cac50fe0-fc33-4bdf-9a80-a6e0aca74b32.json b/change/@fluentui-react-spinbutton-cac50fe0-fc33-4bdf-9a80-a6e0aca74b32.json
deleted file mode 100644
index 3e83b542296f1c..00000000000000
--- a/change/@fluentui-react-spinbutton-cac50fe0-fc33-4bdf-9a80-a6e0aca74b32.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-spinbutton",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-spinner-3631728e-701e-46a0-a6b5-41fb4785a921.json b/change/@fluentui-react-spinner-3631728e-701e-46a0-a6b5-41fb4785a921.json
deleted file mode 100644
index 662ad0af12c98f..00000000000000
--- a/change/@fluentui-react-spinner-3631728e-701e-46a0-a6b5-41fb4785a921.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted",
- "packageName": "@fluentui/react-spinner",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-spinner-589ed2a6-ccb9-4c1d-8f2c-706400addda2.json b/change/@fluentui-react-spinner-589ed2a6-ccb9-4c1d-8f2c-706400addda2.json
deleted file mode 100644
index 9c78af49ad22c9..00000000000000
--- a/change/@fluentui-react-spinner-589ed2a6-ccb9-4c1d-8f2c-706400addda2.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-spinner",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-spinner-7730c3a9-7cda-43ea-a5cb-54b649d48695.json b/change/@fluentui-react-spinner-7730c3a9-7cda-43ea-a5cb-54b649d48695.json
deleted file mode 100644
index fada0395c0fe4e..00000000000000
--- a/change/@fluentui-react-spinner-7730c3a9-7cda-43ea-a5cb-54b649d48695.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "(patch): Add line-height styling to Spinner",
- "packageName": "@fluentui/react-spinner",
- "email": "ololubek@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-spinner-b347a78d-da01-4087-9046-45412344cf1c.json b/change/@fluentui-react-spinner-b347a78d-da01-4087-9046-45412344cf1c.json
deleted file mode 100644
index f15038c532c70b..00000000000000
--- a/change/@fluentui-react-spinner-b347a78d-da01-4087-9046-45412344cf1c.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: update color tokens",
- "packageName": "@fluentui/react-spinner",
- "email": "seanmonahan@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-spinner-da19e8c2-03f3-4cbd-987e-6aba4eb185cb.json b/change/@fluentui-react-spinner-da19e8c2-03f3-4cbd-987e-6aba4eb185cb.json
deleted file mode 100644
index d7e9ebf8fad179..00000000000000
--- a/change/@fluentui-react-spinner-da19e8c2-03f3-4cbd-987e-6aba4eb185cb.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-spinner",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-spinner-ec347d0a-9ed1-4c97-abe2-2ea1d37a1a6a.json b/change/@fluentui-react-spinner-ec347d0a-9ed1-4c97-abe2-2ea1d37a1a6a.json
deleted file mode 100644
index 01cb8e36f4d58b..00000000000000
--- a/change/@fluentui-react-spinner-ec347d0a-9ed1-4c97-abe2-2ea1d37a1a6a.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "(chore): Remove appearance conditional from Spinner slot styling",
- "packageName": "@fluentui/react-spinner",
- "email": "ololubek@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-switch-23635943-537c-42d9-b219-575f3820e354.json b/change/@fluentui-react-switch-23635943-537c-42d9-b219-575f3820e354.json
deleted file mode 100644
index f3710527bb26ac..00000000000000
--- a/change/@fluentui-react-switch-23635943-537c-42d9-b219-575f3820e354.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: update color tokens",
- "packageName": "@fluentui/react-switch",
- "email": "seanmonahan@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-switch-8997849c-57fb-458c-8c41-18bbaeac00c7.json b/change/@fluentui-react-switch-8997849c-57fb-458c-8c41-18bbaeac00c7.json
deleted file mode 100644
index ccc17551c4b9f1..00000000000000
--- a/change/@fluentui-react-switch-8997849c-57fb-458c-8c41-18bbaeac00c7.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-switch",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-switch-a1ec88b5-7c27-4820-be92-bc97dc8efe87.json b/change/@fluentui-react-switch-a1ec88b5-7c27-4820-be92-bc97dc8efe87.json
deleted file mode 100644
index d83fde6f11c6cd..00000000000000
--- a/change/@fluentui-react-switch-a1ec88b5-7c27-4820-be92-bc97dc8efe87.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks",
- "packageName": "@fluentui/react-switch",
- "email": "behowell@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-switch-a96beccf-1588-4978-82ed-909fa6666d17.json b/change/@fluentui-react-switch-a96beccf-1588-4978-82ed-909fa6666d17.json
deleted file mode 100644
index 3e56bd219c768f..00000000000000
--- a/change/@fluentui-react-switch-a96beccf-1588-4978-82ed-909fa6666d17.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-switch",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-table-01783f46-dc46-4972-889a-a5aba30844cf.json b/change/@fluentui-react-table-01783f46-dc46-4972-889a-a5aba30844cf.json
deleted file mode 100644
index 6f7ab8660caea9..00000000000000
--- a/change/@fluentui-react-table-01783f46-dc46-4972-889a-a5aba30844cf.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "implement `useTable` state hook",
- "packageName": "@fluentui/react-table",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-table-5bfc4866-5bbc-4e35-8b10-38085d13ab4b.json b/change/@fluentui-react-table-5bfc4866-5bbc-4e35-8b10-38085d13ab4b.json
new file mode 100644
index 00000000000000..ab3ac654c8d6cd
--- /dev/null
+++ b/change/@fluentui-react-table-5bfc4866-5bbc-4e35-8b10-38085d13ab4b.json
@@ -0,0 +1,7 @@
+{
+ "type": "none",
+ "comment": "chore: Updates folder structure",
+ "packageName": "@fluentui/react-table",
+ "email": "lingfangao@hotmail.com",
+ "dependentChangeType": "none"
+}
diff --git a/change/@fluentui-react-table-6041cf27-7328-4c72-b07e-2f3ec826ee5e.json b/change/@fluentui-react-table-6041cf27-7328-4c72-b07e-2f3ec826ee5e.json
deleted file mode 100644
index ea5129a97cf120..00000000000000
--- a/change/@fluentui-react-table-6041cf27-7328-4c72-b07e-2f3ec826ee5e.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-table",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-table-78287e07-9d21-47ab-9ae1-efca3ecc54d5.json b/change/@fluentui-react-table-78287e07-9d21-47ab-9ae1-efca3ecc54d5.json
deleted file mode 100644
index 757b75f9042ed8..00000000000000
--- a/change/@fluentui-react-table-78287e07-9d21-47ab-9ae1-efca3ecc54d5.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "feat: Remove inferred row state and add `rowEnhancer` option",
- "packageName": "@fluentui/react-table",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-table-7a265a18-4500-433d-8321-41115bba1cd8.json b/change/@fluentui-react-table-7a265a18-4500-433d-8321-41115bba1cd8.json
deleted file mode 100644
index 006fe7742a95d4..00000000000000
--- a/change/@fluentui-react-table-7a265a18-4500-433d-8321-41115bba1cd8.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "feat: Implement unstable navigation modes",
- "packageName": "@fluentui/react-table",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-table-81a6575d-df00-4b6f-b575-a9a264ebd87c.json b/change/@fluentui-react-table-81a6575d-df00-4b6f-b575-a9a264ebd87c.json
deleted file mode 100644
index 3625ec7464ef24..00000000000000
--- a/change/@fluentui-react-table-81a6575d-df00-4b6f-b575-a9a264ebd87c.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-table",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-table-8af09ced-5374-4d8e-ab4f-6fd3d444e0e6.json b/change/@fluentui-react-table-8af09ced-5374-4d8e-ab4f-6fd3d444e0e6.json
deleted file mode 100644
index 8a47982700f333..00000000000000
--- a/change/@fluentui-react-table-8af09ced-5374-4d8e-ab4f-6fd3d444e0e6.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "refactor(useTable): selection manager to avoid calling multiple hooks",
- "packageName": "@fluentui/react-table",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-table-9593f504-f467-4334-ab3d-a7dc33cb104f.json b/change/@fluentui-react-table-9593f504-f467-4334-ab3d-a7dc33cb104f.json
deleted file mode 100644
index 10ea453186c127..00000000000000
--- a/change/@fluentui-react-table-9593f504-f467-4334-ab3d-a7dc33cb104f.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "feat: Implement `TableSelectionCell`",
- "packageName": "@fluentui/react-table",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-table-f9a9e579-38a0-40a4-b15e-b39dd5f2c11a.json b/change/@fluentui-react-table-f9a9e579-38a0-40a4-b15e-b39dd5f2c11a.json
deleted file mode 100644
index 564e8237e3ab65..00000000000000
--- a/change/@fluentui-react-table-f9a9e579-38a0-40a4-b15e-b39dd5f2c11a.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "feat: Implement `TableCellActions` and `TablePrimaryCell`",
- "packageName": "@fluentui/react-table",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-tabs-047ce97a-764d-44ff-a59b-ed7caf3e3b99.json b/change/@fluentui-react-tabs-047ce97a-764d-44ff-a59b-ed7caf3e3b99.json
deleted file mode 100644
index bd59cb05d71d33..00000000000000
--- a/change/@fluentui-react-tabs-047ce97a-764d-44ff-a59b-ed7caf3e3b99.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: add type=button to root slot ",
- "packageName": "@fluentui/react-tabs",
- "email": "sarah.higley@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-tabs-880edda9-94da-4c6a-b1ea-5b4eb71868ac.json b/change/@fluentui-react-tabs-880edda9-94da-4c6a-b1ea-5b4eb71868ac.json
deleted file mode 100644
index 657dd097d9793d..00000000000000
--- a/change/@fluentui-react-tabs-880edda9-94da-4c6a-b1ea-5b4eb71868ac.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-tabs",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-tabs-be5be45f-971d-43f4-9556-a19abcff8d31.json b/change/@fluentui-react-tabs-be5be45f-971d-43f4-9556-a19abcff8d31.json
deleted file mode 100644
index 7d57ff6eac7a75..00000000000000
--- a/change/@fluentui-react-tabs-be5be45f-971d-43f4-9556-a19abcff8d31.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-tabs",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-tabster-53ee5dbf-e807-4d01-a656-81663bc656b8.json b/change/@fluentui-react-tabster-53ee5dbf-e807-4d01-a656-81663bc656b8.json
deleted file mode 100644
index 689262e98e49c6..00000000000000
--- a/change/@fluentui-react-tabster-53ee5dbf-e807-4d01-a656-81663bc656b8.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: consume cypress.config from it's package boundary",
- "packageName": "@fluentui/react-tabster",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-tabster-59ed64de-6eec-46c5-b0d6-2cd22cba4d0c.json b/change/@fluentui-react-tabster-59ed64de-6eec-46c5-b0d6-2cd22cba4d0c.json
new file mode 100644
index 00000000000000..98b1703843bd43
--- /dev/null
+++ b/change/@fluentui-react-tabster-59ed64de-6eec-46c5-b0d6-2cd22cba4d0c.json
@@ -0,0 +1,7 @@
+{
+ "type": "patch",
+ "comment": "make allowCondition a optional parameter for findAllFocusable function",
+ "packageName": "@fluentui/react-tabster",
+ "email": "marcosvmmoura@gmail.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@fluentui-react-tabster-5ad9a59a-bea6-4483-9063-7c2d7dead914.json b/change/@fluentui-react-tabster-5ad9a59a-bea6-4483-9063-7c2d7dead914.json
deleted file mode 100644
index c4f00aa91e8c16..00000000000000
--- a/change/@fluentui-react-tabster-5ad9a59a-bea6-4483-9063-7c2d7dead914.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "docs: re-generate api.md files",
- "packageName": "@fluentui/react-tabster",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-tabster-8d97f222-b315-470d-88a0-50ab3e3b69fe.json b/change/@fluentui-react-tabster-8d97f222-b315-470d-88a0-50ab3e3b69fe.json
deleted file mode 100644
index 4965f3f5f14c32..00000000000000
--- a/change/@fluentui-react-tabster-8d97f222-b315-470d-88a0-50ab3e3b69fe.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Bumps tabster to 2.1.2 and removes deep import for KeyborgCallback",
- "packageName": "@fluentui/react-tabster",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-tabster-b5ac3104-4d7d-4ecc-b756-83e2c283336f.json b/change/@fluentui-react-tabster-b5ac3104-4d7d-4ecc-b756-83e2c283336f.json
deleted file mode 100644
index 23e195f47931a7..00000000000000
--- a/change/@fluentui-react-tabster-b5ac3104-4d7d-4ecc-b756-83e2c283336f.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-tabster",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-tabster-e1fb70e9-1c6e-45b3-8c02-094ea0827756.json b/change/@fluentui-react-tabster-e1fb70e9-1c6e-45b3-8c02-094ea0827756.json
deleted file mode 100644
index 25502cfa499748..00000000000000
--- a/change/@fluentui-react-tabster-e1fb70e9-1c6e-45b3-8c02-094ea0827756.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-tabster",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-text-01530fa1-545f-4a94-a9fb-00fa2be3dc3b.json b/change/@fluentui-react-text-01530fa1-545f-4a94-a9fb-00fa2be3dc3b.json
deleted file mode 100644
index d116d021180cc6..00000000000000
--- a/change/@fluentui-react-text-01530fa1-545f-4a94-a9fb-00fa2be3dc3b.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "minor",
- "comment": "feat: Add Body2",
- "packageName": "@fluentui/react-text",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-text-37f998d5-d30e-4102-8197-359c436dcfc1.json b/change/@fluentui-react-text-37f998d5-d30e-4102-8197-359c436dcfc1.json
deleted file mode 100644
index fe362a5a953ccd..00000000000000
--- a/change/@fluentui-react-text-37f998d5-d30e-4102-8197-359c436dcfc1.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-text",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-text-5957af85-aa48-4590-abdc-82c81db9486d.json b/change/@fluentui-react-text-5957af85-aa48-4590-abdc-82c81db9486d.json
deleted file mode 100644
index 424f8ed5ba61d3..00000000000000
--- a/change/@fluentui-react-text-5957af85-aa48-4590-abdc-82c81db9486d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-text",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-textarea-56a25cbe-7cc1-401b-9649-566c0eb5f412.json b/change/@fluentui-react-textarea-56a25cbe-7cc1-401b-9649-566c0eb5f412.json
deleted file mode 100644
index c0d9d86a9ef832..00000000000000
--- a/change/@fluentui-react-textarea-56a25cbe-7cc1-401b-9649-566c0eb5f412.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-textarea",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-textarea-c2525ad6-b2de-4fae-a3d9-f5b2fe05fab1.json b/change/@fluentui-react-textarea-c2525ad6-b2de-4fae-a3d9-f5b2fe05fab1.json
deleted file mode 100644
index 8ff8c7218c6969..00000000000000
--- a/change/@fluentui-react-textarea-c2525ad6-b2de-4fae-a3d9-f5b2fe05fab1.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: disabled textarea uses semantic contrast theme border color",
- "packageName": "@fluentui/react-textarea",
- "email": "sarah.higley@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-textarea-e7ae5a4d-1bd3-49a6-a67d-69915d4e066c.json b/change/@fluentui-react-textarea-e7ae5a4d-1bd3-49a6-a67d-69915d4e066c.json
deleted file mode 100644
index 22fd6d54816e41..00000000000000
--- a/change/@fluentui-react-textarea-e7ae5a4d-1bd3-49a6-a67d-69915d4e066c.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-textarea",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-theme-0a451fa0-2086-4a99-94c0-b3eb642e18eb.json b/change/@fluentui-react-theme-0a451fa0-2086-4a99-94c0-b3eb642e18eb.json
deleted file mode 100644
index e6862043e42e6b..00000000000000
--- a/change/@fluentui-react-theme-0a451fa0-2086-4a99-94c0-b3eb642e18eb.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: update token values to fix failing color contrast",
- "packageName": "@fluentui/react-theme",
- "email": "seanmonahan@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-theme-21c5a2e8-bfe1-4471-8729-c81221019f25.json b/change/@fluentui-react-theme-21c5a2e8-bfe1-4471-8729-c81221019f25.json
deleted file mode 100644
index d11e1b965ce1d9..00000000000000
--- a/change/@fluentui-react-theme-21c5a2e8-bfe1-4471-8729-c81221019f25.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-theme",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-theme-54c0704a-5974-4449-b128-7629e3c0566b.json b/change/@fluentui-react-theme-54c0704a-5974-4449-b128-7629e3c0566b.json
deleted file mode 100644
index a5fbbdc37f21d9..00000000000000
--- a/change/@fluentui-react-theme-54c0704a-5974-4449-b128-7629e3c0566b.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: Refactor global shared color tokens",
- "packageName": "@fluentui/react-theme",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-theme-588897ea-213d-4956-b34a-8bd1a9e63d21.json b/change/@fluentui-react-theme-588897ea-213d-4956-b34a-8bd1a9e63d21.json
deleted file mode 100644
index d07a0489389f0f..00000000000000
--- a/change/@fluentui-react-theme-588897ea-213d-4956-b34a-8bd1a9e63d21.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Update color tokens mapping",
- "packageName": "@fluentui/react-theme",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-theme-591d6c0f-d093-4b79-ae3e-067b74c7c0d0.json b/change/@fluentui-react-theme-591d6c0f-d093-4b79-ae3e-067b74c7c0d0.json
deleted file mode 100644
index 3c3cd9723ea503..00000000000000
--- a/change/@fluentui-react-theme-591d6c0f-d093-4b79-ae3e-067b74c7c0d0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted",
- "packageName": "@fluentui/react-theme",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-theme-91dd6ff2-c7b2-4e68-a3f4-75deb8832093.json b/change/@fluentui-react-theme-91dd6ff2-c7b2-4e68-a3f4-75deb8832093.json
deleted file mode 100644
index 32e0159ce0d3d7..00000000000000
--- a/change/@fluentui-react-theme-91dd6ff2-c7b2-4e68-a3f4-75deb8832093.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Change colorBrandForeground2 mapping in teamsDark theme",
- "packageName": "@fluentui/react-theme",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-theme-98ccbaf6-2736-430a-b1d6-8a28818a2bc4.json b/change/@fluentui-react-theme-98ccbaf6-2736-430a-b1d6-8a28818a2bc4.json
deleted file mode 100644
index 2a598698129649..00000000000000
--- a/change/@fluentui-react-theme-98ccbaf6-2736-430a-b1d6-8a28818a2bc4.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Swap Background1 and Foreground1 in HC color palette",
- "packageName": "@fluentui/react-theme",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-theme-bdcdae2f-8e92-4d18-b7da-d8336334caa6.json b/change/@fluentui-react-theme-bdcdae2f-8e92-4d18-b7da-d8336334caa6.json
deleted file mode 100644
index d8c84cd590e311..00000000000000
--- a/change/@fluentui-react-theme-bdcdae2f-8e92-4d18-b7da-d8336334caa6.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "minor",
- "comment": "feat: Add fontWeightBold, add Body2, fix font weight for *Stronger typography",
- "packageName": "@fluentui/react-theme",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-theme-sass-74c936a0-306b-4505-838c-c161eac2425d.json b/change/@fluentui-react-theme-sass-74c936a0-306b-4505-838c-c161eac2425d.json
deleted file mode 100644
index 9756e7129a5992..00000000000000
--- a/change/@fluentui-react-theme-sass-74c936a0-306b-4505-838c-c161eac2425d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-theme-sass",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-theme-sass-7c908a09-e43e-4e41-96c5-60c62bbc3249.json b/change/@fluentui-react-theme-sass-7c908a09-e43e-4e41-96c5-60c62bbc3249.json
deleted file mode 100644
index 9466cb9987d485..00000000000000
--- a/change/@fluentui-react-theme-sass-7c908a09-e43e-4e41-96c5-60c62bbc3249.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "feat: add new color tokens",
- "packageName": "@fluentui/react-theme-sass",
- "email": "seanmonahan@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-theme-sass-7ddd5d89-4d81-49e6-b347-a1f779b7dbf0.json b/change/@fluentui-react-theme-sass-7ddd5d89-4d81-49e6-b347-a1f779b7dbf0.json
deleted file mode 100644
index e54b812758210d..00000000000000
--- a/change/@fluentui-react-theme-sass-7ddd5d89-4d81-49e6-b347-a1f779b7dbf0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "feat: Add fontWeightBold",
- "packageName": "@fluentui/react-theme-sass",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-theme-sass-85b0f325-84a3-4866-ac55-5ed7015886e7.json b/change/@fluentui-react-theme-sass-85b0f325-84a3-4866-ac55-5ed7015886e7.json
deleted file mode 100644
index 80bc4ab820a2de..00000000000000
--- a/change/@fluentui-react-theme-sass-85b0f325-84a3-4866-ac55-5ed7015886e7.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "react-theme-sass dev-depends on react-theme",
- "packageName": "@fluentui/react-theme-sass",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-theme-sass-8ca8c7e8-cbe6-4104-b893-1de751254302.json b/change/@fluentui-react-theme-sass-8ca8c7e8-cbe6-4104-b893-1de751254302.json
deleted file mode 100644
index 8b03764ff06df7..00000000000000
--- a/change/@fluentui-react-theme-sass-8ca8c7e8-cbe6-4104-b893-1de751254302.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted",
- "packageName": "@fluentui/react-theme-sass",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-toolbar-0d3acebd-980f-4b9a-b517-316a652430ee.json b/change/@fluentui-react-toolbar-0d3acebd-980f-4b9a-b517-316a652430ee.json
deleted file mode 100644
index 261ee51ff77841..00000000000000
--- a/change/@fluentui-react-toolbar-0d3acebd-980f-4b9a-b517-316a652430ee.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: fix no-context-default-value lint violations",
- "packageName": "@fluentui/react-toolbar",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-toolbar-399933e0-18ad-4c23-b041-32de409b32f0.json b/change/@fluentui-react-toolbar-399933e0-18ad-4c23-b041-32de409b32f0.json
deleted file mode 100644
index 5a89ec422113de..00000000000000
--- a/change/@fluentui-react-toolbar-399933e0-18ad-4c23-b041-32de409b32f0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "prerelease",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-toolbar",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-toolbar-3e1d7781-11bc-4929-b8e8-25aa0d674e4a.json b/change/@fluentui-react-toolbar-3e1d7781-11bc-4929-b8e8-25aa0d674e4a.json
deleted file mode 100644
index 898aaab4f35355..00000000000000
--- a/change/@fluentui-react-toolbar-3e1d7781-11bc-4929-b8e8-25aa0d674e4a.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "feat: add toolbar controlled state example for toggle buttons",
- "packageName": "@fluentui/react-toolbar",
- "email": "chassunc@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-toolbar-4eab6bb7-c564-4b4a-b148-cef54e96270f.json b/change/@fluentui-react-toolbar-4eab6bb7-c564-4b4a-b148-cef54e96270f.json
deleted file mode 100644
index 54074ced17a828..00000000000000
--- a/change/@fluentui-react-toolbar-4eab6bb7-c564-4b4a-b148-cef54e96270f.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: add e2e tests for toolbar",
- "packageName": "@fluentui/react-toolbar",
- "email": "chassunc@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-toolbar-7008e90f-c248-4512-b5fa-a3f634950246.json b/change/@fluentui-react-toolbar-7008e90f-c248-4512-b5fa-a3f634950246.json
deleted file mode 100644
index cb3525700341c8..00000000000000
--- a/change/@fluentui-react-toolbar-7008e90f-c248-4512-b5fa-a3f634950246.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: consume cypress.config from it's package boundary",
- "packageName": "@fluentui/react-toolbar",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-toolbar-d1cfc244-fa29-4e3b-86e8-9fc64c2962f5.json b/change/@fluentui-react-toolbar-d1cfc244-fa29-4e3b-86e8-9fc64c2962f5.json
deleted file mode 100644
index 33fe826ca38d75..00000000000000
--- a/change/@fluentui-react-toolbar-d1cfc244-fa29-4e3b-86e8-9fc64c2962f5.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-toolbar",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-tooltip-67e5f77a-aaf1-476a-b652-d28b919371b0.json b/change/@fluentui-react-tooltip-67e5f77a-aaf1-476a-b652-d28b919371b0.json
deleted file mode 100644
index 9bf2bc7d3fe7ee..00000000000000
--- a/change/@fluentui-react-tooltip-67e5f77a-aaf1-476a-b652-d28b919371b0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-tooltip",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-tooltip-80b8fd2e-8725-4e1e-ad43-3d4a2e9d7a5b.json b/change/@fluentui-react-tooltip-80b8fd2e-8725-4e1e-ad43-3d4a2e9d7a5b.json
deleted file mode 100644
index 10e4d3e71283bd..00000000000000
--- a/change/@fluentui-react-tooltip-80b8fd2e-8725-4e1e-ad43-3d4a2e9d7a5b.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: update color tokens",
- "packageName": "@fluentui/react-tooltip",
- "email": "seanmonahan@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-tooltip-99a944f7-9d29-4f9f-9e96-630e45b54b14.json b/change/@fluentui-react-tooltip-99a944f7-9d29-4f9f-9e96-630e45b54b14.json
deleted file mode 100644
index 7c3d78e434a00d..00000000000000
--- a/change/@fluentui-react-tooltip-99a944f7-9d29-4f9f-9e96-630e45b54b14.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: Update Griffel to latest version",
- "packageName": "@fluentui/react-tooltip",
- "email": "olfedias@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-tooltip-b93321db-a567-48da-8f21-ad261216201e.json b/change/@fluentui-react-tooltip-b93321db-a567-48da-8f21-ad261216201e.json
deleted file mode 100644
index 77a91d3351a886..00000000000000
--- a/change/@fluentui-react-tooltip-b93321db-a567-48da-8f21-ad261216201e.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks",
- "packageName": "@fluentui/react-tooltip",
- "email": "behowell@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-tooltip-f76bb687-2740-4cb7-a9be-63917260000f.json b/change/@fluentui-react-tooltip-f76bb687-2740-4cb7-a9be-63917260000f.json
deleted file mode 100644
index d5e62b9856dfec..00000000000000
--- a/change/@fluentui-react-tooltip-f76bb687-2740-4cb7-a9be-63917260000f.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted",
- "packageName": "@fluentui/react-tooltip",
- "email": "miroslav.stastny@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-utilities-2010dc53-3470-4657-aa60-71b922d163e6.json b/change/@fluentui-react-utilities-2010dc53-3470-4657-aa60-71b922d163e6.json
deleted file mode 100644
index 4ed839d1096c3d..00000000000000
--- a/change/@fluentui-react-utilities-2010dc53-3470-4657-aa60-71b922d163e6.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "chore: update package scaffold",
- "packageName": "@fluentui/react-utilities",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-utilities-27817a14-4b0d-4844-9aff-b7ad8319b7d0.json b/change/@fluentui-react-utilities-27817a14-4b0d-4844-9aff-b7ad8319b7d0.json
deleted file mode 100644
index d36efcd2f14711..00000000000000
--- a/change/@fluentui-react-utilities-27817a14-4b0d-4844-9aff-b7ad8319b7d0.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "chore: fix no-context-default-value lint violations",
- "packageName": "@fluentui/react-utilities",
- "email": "lingfangao@hotmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-utilities-66c0b2d0-9776-4901-b5be-1e9c34ff62ba.json b/change/@fluentui-react-utilities-66c0b2d0-9776-4901-b5be-1e9c34ff62ba.json
deleted file mode 100644
index d61f7156045d92..00000000000000
--- a/change/@fluentui-react-utilities-66c0b2d0-9776-4901-b5be-1e9c34ff62ba.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "minor",
- "comment": "fix: Replace deprecated ReactNodeArray for React 17 support.",
- "packageName": "@fluentui/react-utilities",
- "email": "tristan.watanabe@gmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-utilities-76935223-2ad2-4d45-bb36-7bf9c363389d.json b/change/@fluentui-react-utilities-76935223-2ad2-4d45-bb36-7bf9c363389d.json
deleted file mode 100644
index 65dd41dae27f9a..00000000000000
--- a/change/@fluentui-react-utilities-76935223-2ad2-4d45-bb36-7bf9c363389d.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "fix: add microdata properties to allowed html properties",
- "packageName": "@fluentui/react-utilities",
- "email": "yuanboxue@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-utilities-a0cb439b-1243-4594-9a77-309c983360cf.json b/change/@fluentui-react-utilities-a0cb439b-1243-4594-9a77-309c983360cf.json
deleted file mode 100644
index f468fec39a1fcd..00000000000000
--- a/change/@fluentui-react-utilities-a0cb439b-1243-4594-9a77-309c983360cf.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "none",
- "comment": "docs(react-utilities): re-generate api.md",
- "packageName": "@fluentui/react-utilities",
- "email": "martinhochel@microsoft.com",
- "dependentChangeType": "none"
-}
diff --git a/change/@fluentui-react-utilities-ad0133ca-e4cf-497c-8392-5aae39878e94.json b/change/@fluentui-react-utilities-ad0133ca-e4cf-497c-8392-5aae39878e94.json
deleted file mode 100644
index 87e960b26003d8..00000000000000
--- a/change/@fluentui-react-utilities-ad0133ca-e4cf-497c-8392-5aae39878e94.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "minor",
- "comment": "feat(react-utilities): adds isResolvedShorthand guard method",
- "packageName": "@fluentui/react-utilities",
- "email": "bernardo.sunderhus@gmail.com",
- "dependentChangeType": "patch"
-}
diff --git a/change/@fluentui-react-utilities-bb49409b-4b81-473d-b10e-6429d1d554ad.json b/change/@fluentui-react-utilities-bb49409b-4b81-473d-b10e-6429d1d554ad.json
deleted file mode 100644
index 9c27167afa4b94..00000000000000
--- a/change/@fluentui-react-utilities-bb49409b-4b81-473d-b10e-6429d1d554ad.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "patch",
- "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks",
- "packageName": "@fluentui/react-utilities",
- "email": "behowell@microsoft.com",
- "dependentChangeType": "patch"
-}
diff --git a/ghdocs/medias/fluentui-ep03-preview.gif b/ghdocs/medias/fluentui-ep03-preview.gif
new file mode 100644
index 00000000000000..edd734bcb95689
Binary files /dev/null and b/ghdocs/medias/fluentui-ep03-preview.gif differ
diff --git a/gulpfile.ts b/gulpfile.ts
index e7f72e8db3565c..dd562b2ee3f980 100644
--- a/gulpfile.ts
+++ b/gulpfile.ts
@@ -22,7 +22,8 @@ tsPaths.register({
require('./scripts/gulp/tasks/bundle');
require('./scripts/gulp/tasks/component-info');
require('./scripts/gulp/tasks/docs');
-require('./scripts/gulp/tasks/screener');
+require('./scripts/gulp/tasks/vr-build');
+require('./scripts/gulp/tasks/vr-test');
require('./scripts/gulp/tasks/stats');
require('./scripts/gulp/tasks/test-unit');
require('./scripts/gulp/tasks/perf');
diff --git a/lage.config.js b/lage.config.js
index 2a31b2db5b9f01..3a5d5dce4f542c 100644
--- a/lage.config.js
+++ b/lage.config.js
@@ -8,6 +8,7 @@ module.exports = {
lint: ['build'],
clean: [],
test: ['build'],
+ 'type-check': ['build'],
'code-style': [],
'update-snapshots': ['^update-snapshots'],
'@fluentui/docs#build': ['@fluentui/react-northstar#build:info'],
diff --git a/package.json b/package.json
index 102521d9216f68..24797c0e76f252 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,7 @@
"check:change": "beachball check",
"check:modified-files": "yarn workspace @fluentui/scripts just check-for-modified-files",
"check:affected-package": "node ./scripts/monorepo/checkIfPackagesAffected.js",
- "check:installed-dependencies-versions": "satisfied --skip-invalid --ignore \"prettier|angular|lit|sass|@storybook/web-components|@storybook/html|@storybook/mdx2-csf|svelte|@testing-library|vue|@cypress/react|cypress|@swc/wasm|@cactuslab/usepubsub\"",
+ "check:installed-dependencies-versions": "satisfied --skip-invalid --ignore \"prettier|angular|lit|sass|@storybook/html|@storybook/mdx2-csf|svelte|@testing-library|vue|@cypress/react|cypress|@swc/wasm|@cactuslab/usepubsub\"",
"clean": "lage clean --verbose",
"code-style": "lage code-style --verbose",
"codepen": "cd packages/react && node ../../scripts/local-codepen.js",
@@ -64,9 +64,12 @@
"update-snapshots": "lage update-snapshots --verbose"
},
"devDependencies": {
+ "@actions/core": "1.9.1",
+ "@actions/github": "5.0.3",
"@azure/data-tables": "13.0.0",
"@babel/core": "7.14.8",
"@babel/plugin-proposal-class-properties": "7.14.5",
+ "@babel/plugin-proposal-decorators": "7.14.5",
"@babel/plugin-proposal-nullish-coalescing-operator": "7.14.5",
"@babel/plugin-proposal-optional-chaining": "7.14.5",
"@babel/plugin-syntax-dynamic-import": "7.8.3",
@@ -82,12 +85,12 @@
"@cypress/react": "5.12.4",
"@cypress/webpack-dev-server": "1.8.3",
"@fluentui/react-icons": "^2.0.175",
- "@griffel/babel-preset": "1.3.6",
+ "@griffel/babel-preset": "1.4.0",
"@griffel/eslint-plugin": "1.0.0",
- "@griffel/jest-serializer": "1.0.9",
- "@griffel/react": "^1.3.0",
- "@griffel/webpack-extraction-plugin": "0.1.4",
- "@griffel/webpack-loader": "2.0.12",
+ "@griffel/jest-serializer": "1.0.13",
+ "@griffel/react": "^1.4.1",
+ "@griffel/webpack-extraction-plugin": "0.2.0",
+ "@griffel/webpack-loader": "2.1.0",
"@microsoft/api-extractor": "7.18.1",
"@microsoft/eslint-plugin-sdl": "0.1.9",
"@nrwl/cli": "13.10.6",
@@ -96,6 +99,7 @@
"@nrwl/js": "13.10.6",
"@nrwl/node": "13.10.6",
"@nrwl/workspace": "13.10.6",
+ "@octokit/rest": "18.12.0",
"@storybook/addon-a11y": "6.5.5",
"@storybook/addon-actions": "6.5.5",
"@storybook/addon-docs": "6.5.5",
@@ -113,6 +117,7 @@
"@storybook/react": "6.5.5",
"@storybook/theming": "6.5.5",
"@swc/core": "1.2.220",
+ "@swc/helpers": "0.4.11",
"@testing-library/dom": "8.11.3",
"@testing-library/jest-dom": "5.16.1",
"@testing-library/react": "12.1.2",
@@ -120,32 +125,50 @@
"@testing-library/user-event": "13.5.0",
"@tsconfig/node14": "1.0.3",
"@types/babel__helper-plugin-utils": "7.10.0",
+ "@types/babel__register": "7.17.0",
+ "@types/chrome-remote-interface": "0.30.0",
+ "@types/circular-dependency-plugin": "5.0.5",
"@types/copy-webpack-plugin": "6.4.0",
"@types/dedent": "0.7.0",
"@types/doctrine": "0.0.5",
"@types/enhanced-resolve": "3.0.7",
- "@types/enzyme": "3.10.3",
+ "@types/enzyme": "3.10.7",
"@types/eslint": "7.2.13",
"@types/express": "4.17.2",
"@types/fs-extra": "8.0.1",
"@types/glob": "7.1.1",
+ "@types/graphviz": "0.0.34",
+ "@types/gulp": "4.0.9",
+ "@types/gulp-babel": "6.1.30",
+ "@types/gulp-cache": "0.4.5",
+ "@types/gulp-remember": "0.0.31",
+ "@types/gulp-sourcemaps": "0.0.35",
+ "@types/gulp-util": "3.0.36",
"@types/jest": "26.0.24",
"@types/jest-axe": "3.5.3",
"@types/jju": "1.4.1",
"@types/json-schema": "^7.0.8",
+ "@types/lerna__package-graph": "5.1.0",
+ "@types/lerna__project": "5.1.0",
"@types/loader-utils": "2.0.3",
+ "@types/markdown-table": "2.0.0",
+ "@types/micromatch": "4.0.2",
"@types/node": "10.17.55",
"@types/node-fetch": "2.5.7",
"@types/prettier": "2.2.3",
+ "@types/progress": "2.0.5",
"@types/react": "17.0.44",
"@types/react-dom": "17.0.15",
"@types/react-is": "17.0.3",
"@types/react-test-renderer": "17.0.2",
+ "@types/request-promise-native": "1.0.18",
"@types/scheduler": "0.16.2",
"@types/semver": "^6.2.0",
"@types/tmp": "0.2.0",
+ "@types/webpack-bundle-analyzer": "4.4.3",
"@types/webpack-dev-middleware": "4.1.0",
"@types/webpack-env": "1.16.0",
+ "@types/webpack-hot-middleware": "2.25.6",
"@types/yargs": "13.0.11",
"@types/yargs-unparser": "2.0.1",
"@typescript-eslint/eslint-plugin": "4.22.0",
@@ -158,10 +181,11 @@
"babel-loader": "8.2.2",
"babel-plugin-annotate-pure-calls": "0.4.0",
"babel-plugin-tester": "10.1.0",
- "beachball": "2.18.0",
+ "beachball": "2.31.0",
"chalk": "4.1.0",
- "chromedriver": "104.0.0",
+ "chrome-remote-interface": "0.28.2",
"ci-info": "3.2.0",
+ "circular-dependency-plugin": "5.2.2",
"clean-webpack-plugin": "4.0.0",
"cli-table3": "0.6.1",
"copy-webpack-plugin": "8.1.0",
@@ -173,9 +197,11 @@
"danger": "^11.0.0",
"dedent": "0.7.0",
"del": "6.0.0",
+ "dotparser": "1.1.1",
"enhanced-resolve": "5.8.2",
"enquirer": "2.3.6",
"enzyme": "3.10.0",
+ "enzyme-to-json": "3.6.2",
"esbuild": "0.14.27",
"esbuild-loader": "2.18.0",
"eslint": "7.25.0",
@@ -191,15 +217,22 @@
"eslint-plugin-react": "7.26.0",
"eslint-plugin-react-hooks": "4.2.0",
"express": "4.17.1",
+ "extract-comments": "1.1.0",
"file-loader": "6.2.0",
"fork-ts-checker-webpack-plugin": "6.1.0",
+ "find-free-port": "2.0.0",
"fs-extra": "8.1.0",
"geckodriver": "3.0.2",
"glob": "7.2.0",
- "gulp": "^4.0.2",
+ "graphviz": "0.0.9",
+ "gulp": "4.0.2",
+ "gulp-babel": "8.0.0",
+ "gulp-cache": "1.1.3",
+ "gulp-remember": "1.0.1",
+ "gulp-sourcemaps": "2.6.5",
+ "gulp-util": "3.0.8",
"gzip-size": "6.0.0",
"html-webpack-plugin": "5.1.0",
- "http-server": "14.1.1",
"ignore-not-found-export-webpack-plugin": "1.0.2",
"imports-loader": "1.2.0",
"jest": "26.6.3",
@@ -211,11 +244,13 @@
"jest-watch-typeahead": "0.6.5",
"jju": "1.4.0",
"json-schema": "0.4.0",
+ "json-stable-stringify-without-jsonify": "1.0.1",
"just-scripts": "1.8.2",
- "lage": "1.7.4",
- "lerna": "^3.21.0",
+ "lage": "1.8.8",
+ "lerna": "5.5.2",
"lint-staged": "10.2.10",
"loader-utils": "2.0.0",
+ "markdown-table": "2.0.0",
"memfs": "3.2.2",
"mini-css-extract-plugin": "2.6.1",
"node-fetch": "2.6.7",
@@ -226,6 +261,7 @@
"postcss-modules": "4.1.3",
"prettier": "2.2.1",
"pretty-bytes": "5.6.0",
+ "progress": "2.0.3",
"puppeteer": "14.4.0",
"raw-loader": "4.0.2",
"react": "17.0.2",
@@ -233,6 +269,14 @@
"react-dom": "17.0.2",
"react-is": "17.0.2",
"react-test-renderer": "17.0.2",
+ "request-promise-native": "1.0.9",
+ "rollup": "2.45.2",
+ "rollup-plugin-commonjs": "10.1.0",
+ "rollup-plugin-filesize": "8.0.2",
+ "rollup-plugin-node-resolve": "5.2.0",
+ "rollup-plugin-terser": "5.3.1",
+ "rollup-plugin-transform-tagged-template": "0.0.3",
+ "rollup-plugin-typescript2": "0.27.1",
"sass": "1.49.11",
"sass-loader": "12.4.0",
"satisfied": "^1.1.1",
@@ -240,6 +284,7 @@
"schema-utils": "3.1.1",
"screener-storybook": "0.23.0",
"semver": "^6.2.0",
+ "source-map-loader": "4.0.0",
"storybook-addon-export-to-codesandbox": "0.7.0",
"storybook-addon-performance": "0.16.1",
"strip-ansi": "6.0.0",
@@ -249,22 +294,23 @@
"tachometer": "0.7.0",
"terser": "5.14.2",
"terser-webpack-plugin": "5.3.1",
+ "through2": "4.0.2",
"tmp": "0.2.1",
"ts-jest": "26.5.6",
"ts-loader": "9.3.1",
"ts-node": "10.9.1",
- "tsconfig-paths": "3.9.0",
- "tsconfig-paths-webpack-plugin": "3.5.2",
+ "tsconfig-paths": "4.1.0",
+ "tsconfig-paths-webpack-plugin": "4.0.0",
"tslib": "2.4.0",
"typescript": "4.3.5",
- "webpack": "5.44.0",
+ "webpack": "5.74.0",
"webpack-bundle-analyzer": "4.4.2",
- "webpack-cli": "4.7.2",
+ "webpack-cli": "4.10.0",
"webpack-dev-middleware": "4.2.0",
"webpack-dev-server": "4.7.4",
"webpack-hot-middleware": "2.25.1",
"webpack-merge": "5.7.3",
- "workspace-tools": "0.18.4",
+ "workspace-tools": "0.27.0",
"yargs": "13.3.2",
"yargs-parser": "13.1.2",
"yargs-unparser": "2.0.0"
@@ -284,18 +330,7 @@
"typings"
],
"nohoist": [
- "@fluentui/react-northstar-fela-renderer/stylis",
- "@fluentui/react-northstar-emotion-renderer/@types/stylis",
- "@fluentui/react-northstar-emotion-renderer/stylis",
- "@fluentui/web-components/@microsoft/eslint-config-fast-dna",
- "@fluentui/web-components/@storybook/html",
- "@fluentui/web-components/ts-loader",
- "@fluentui/web-components/ts-loader/**",
- "@fluentui/web-components/webpack",
- "@fluentui/react-18-tests-v8/react",
- "@fluentui/react-18-tests-v8/react-dom",
- "@fluentui/react-18-tests-v9/react",
- "@fluentui/react-18-tests-v9/react-dom"
+ "@fluentui/web-components/@storybook/html"
]
},
"resolutions": {
@@ -303,10 +338,7 @@
"@typescript-eslint/experimental-utils": "4.22.0",
"@typescript-eslint/parser": "4.22.0",
"@types/jest-axe/axe-core": "4.2.1",
- "@types/react@<18.0.0": "@types/react@17.0.44",
- "@types/react-dom@<18.0.0": "@types/react-dom@17.0.15",
"eslint": "7.25.0",
- "workspace-tools": "0.18.4",
"requestretry": "7.0.0"
},
"syncpack": {
diff --git a/packages/a11y-testing/package.json b/packages/a11y-testing/package.json
index c6775a92df7358..4d249a8d49398f 100644
--- a/packages/a11y-testing/package.json
+++ b/packages/a11y-testing/package.json
@@ -28,6 +28,6 @@
"jest": "^26.0.0",
"@testing-library/react": "^12.0.0",
"@testing-library/user-event": "^13.0.0",
- "react": ">=16.8.0 <18.0.0"
+ "react": ">=16.8.0 <19.0.0"
}
}
diff --git a/packages/azure-themes/CHANGELOG.json b/packages/azure-themes/CHANGELOG.json
index 2dc47268a54e3d..c7184e9906593b 100644
--- a/packages/azure-themes/CHANGELOG.json
+++ b/packages/azure-themes/CHANGELOG.json
@@ -1,6 +1,321 @@
{
"name": "@fluentui/azure-themes",
"entries": [
+ {
+ "date": "Wed, 26 Oct 2022 07:52:54 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.17",
+ "version": "8.5.17",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.98.8",
+ "commit": "135655c2e9e32b5d50610d17792768ba0cb4e65e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 25 Oct 2022 07:43:18 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.16",
+ "version": "8.5.16",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.98.7",
+ "commit": "fd0e28e497856c9ddb6c82d0b6b336f5c263fb7e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 24 Oct 2022 07:45:24 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.15",
+ "version": "8.5.15",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.98.6",
+ "commit": "e255da7cf629534ebaaac05af3b5bb9a2f7def71"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 21 Oct 2022 07:44:53 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.14",
+ "version": "8.5.14",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.98.5",
+ "commit": "dd063ac623ca90e1fe919ff4471eae017bbf5576"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 07:43:14 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.13",
+ "version": "8.5.13",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.98.4",
+ "commit": "433209a6b5e8adb7619d3658c1606ec8adb02745"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 17 Oct 2022 07:49:17 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.12",
+ "version": "8.5.12",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.98.3",
+ "commit": "e14e5348f1f08aee8da7cb911a24a811d9f9cb09"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 14 Oct 2022 07:44:02 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.11",
+ "version": "8.5.11",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.98.2",
+ "commit": "82650ef8b3d436c039e33f3eb8a658a3d878064f"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 07:45:27 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.10",
+ "version": "8.5.10",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.98.1",
+ "commit": "4f46035db0cd28a5987932120c68755e024869c8"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 10 Oct 2022 07:38:24 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.9",
+ "version": "8.5.9",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.98.0",
+ "commit": "c0b200c4c2ce25dbe3b95f8fc08454e362d25e17"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 04 Oct 2022 07:45:03 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.8",
+ "version": "8.5.8",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.97.2",
+ "commit": "33559052b672f787b021bd2fbc9826e88ce2a2de"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 07:37:49 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.7",
+ "version": "8.5.7",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.97.1",
+ "commit": "86b3133d97c177cac545b253deb11374ee829574"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 30 Sep 2022 07:38:09 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.6",
+ "version": "8.5.6",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.97.0",
+ "commit": "fcb2ee2d270e6f584c6dbbd45f39a50c994c38be"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 29 Sep 2022 07:40:10 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.5",
+ "version": "8.5.5",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.96.3",
+ "commit": "cc8acd94d3f68011427d6e031201a156e3b04ed9"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 28 Sep 2022 07:37:49 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.4",
+ "version": "8.5.4",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.96.2",
+ "commit": "316aa1e8df88bd9ec563d32222565dc48bc9fa29"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.3",
+ "version": "8.5.3",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.2",
+ "version": "8.5.2",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.1",
+ "version": "8.5.1",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/azure-themes_v8.5.0",
+ "version": "8.5.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/azure-themes_v8.4.35",
+ "version": "8.4.35",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/azure-themes_v8.4.34",
+ "version": "8.4.34",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/azure-themes_v8.4.33",
+ "version": "8.4.33",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/azure-themes",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/azure-themes_v8.4.32",
diff --git a/packages/azure-themes/CHANGELOG.md b/packages/azure-themes/CHANGELOG.md
index 2e8a1be9dc1378..521448832dc273 100644
--- a/packages/azure-themes/CHANGELOG.md
+++ b/packages/azure-themes/CHANGELOG.md
@@ -1,9 +1,198 @@
# Change Log - @fluentui/azure-themes
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Wed, 26 Oct 2022 07:52:54 GMT and should not be manually modified.
+## [8.5.17](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.17)
+
+Wed, 26 Oct 2022 07:52:54 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.16..@fluentui/azure-themes_v8.5.17)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.8 ([PR #25381](https://github.com/microsoft/fluentui/pull/25381) by beachball)
+
+## [8.5.16](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.16)
+
+Tue, 25 Oct 2022 07:43:18 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.15..@fluentui/azure-themes_v8.5.16)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.7 ([PR #24903](https://github.com/microsoft/fluentui/pull/24903) by beachball)
+
+## [8.5.15](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.15)
+
+Mon, 24 Oct 2022 07:45:24 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.14..@fluentui/azure-themes_v8.5.15)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.6 ([PR #25226](https://github.com/microsoft/fluentui/pull/25226) by beachball)
+
+## [8.5.14](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.14)
+
+Fri, 21 Oct 2022 07:44:53 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.13..@fluentui/azure-themes_v8.5.14)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.5 ([PR #24283](https://github.com/microsoft/fluentui/pull/24283) by beachball)
+
+## [8.5.13](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.13)
+
+Thu, 20 Oct 2022 07:43:14 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.12..@fluentui/azure-themes_v8.5.13)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.4 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by beachball)
+
+## [8.5.12](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.12)
+
+Mon, 17 Oct 2022 07:49:17 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.11..@fluentui/azure-themes_v8.5.12)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.3 ([PR #25219](https://github.com/microsoft/fluentui/pull/25219) by beachball)
+
+## [8.5.11](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.11)
+
+Fri, 14 Oct 2022 07:44:02 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.10..@fluentui/azure-themes_v8.5.11)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.2 ([PR #24976](https://github.com/microsoft/fluentui/pull/24976) by beachball)
+
+## [8.5.10](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.10)
+
+Thu, 13 Oct 2022 07:45:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.9..@fluentui/azure-themes_v8.5.10)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.1 ([PR #25198](https://github.com/microsoft/fluentui/pull/25198) by beachball)
+
+## [8.5.9](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.9)
+
+Mon, 10 Oct 2022 07:38:24 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.8..@fluentui/azure-themes_v8.5.9)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.0 ([PR #25138](https://github.com/microsoft/fluentui/pull/25138) by beachball)
+
+## [8.5.8](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.8)
+
+Tue, 04 Oct 2022 07:45:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.7..@fluentui/azure-themes_v8.5.8)
+
+### Patches
+
+- Bump @fluentui/react to v8.97.2 ([PR #24947](https://github.com/microsoft/fluentui/pull/24947) by beachball)
+
+## [8.5.7](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.7)
+
+Mon, 03 Oct 2022 07:37:49 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.6..@fluentui/azure-themes_v8.5.7)
+
+### Patches
+
+- Bump @fluentui/react to v8.97.1 ([PR #25022](https://github.com/microsoft/fluentui/pull/25022) by beachball)
+
+## [8.5.6](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.6)
+
+Fri, 30 Sep 2022 07:38:09 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.5..@fluentui/azure-themes_v8.5.6)
+
+### Patches
+
+- Bump @fluentui/react to v8.97.0 ([PR #25025](https://github.com/microsoft/fluentui/pull/25025) by beachball)
+
+## [8.5.5](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.5)
+
+Thu, 29 Sep 2022 07:40:10 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.4..@fluentui/azure-themes_v8.5.5)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.3 ([PR #24990](https://github.com/microsoft/fluentui/pull/24990) by beachball)
+
+## [8.5.4](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.4)
+
+Wed, 28 Sep 2022 07:37:49 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.3..@fluentui/azure-themes_v8.5.4)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.2 ([PR #24900](https://github.com/microsoft/fluentui/pull/24900) by beachball)
+
+## [8.5.3](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.3)
+
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.2..@fluentui/azure-themes_v8.5.3)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [8.5.2](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.2)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.1..@fluentui/azure-themes_v8.5.2)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [8.5.1](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.1)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.5.0..@fluentui/azure-themes_v8.5.1)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [8.5.0](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.5.0)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.4.35..@fluentui/azure-themes_v8.5.0)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [8.4.35](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.4.35)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.4.34..@fluentui/azure-themes_v8.4.35)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [8.4.34](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.4.34)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.4.33..@fluentui/azure-themes_v8.4.34)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [8.4.33](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.4.33)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.4.32..@fluentui/azure-themes_v8.4.33)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
## [8.4.32](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.4.32)
Mon, 05 Sep 2022 07:38:30 GMT
diff --git a/packages/azure-themes/package.json b/packages/azure-themes/package.json
index 9f3c1ccc70f0d8..25f5107b018381 100644
--- a/packages/azure-themes/package.json
+++ b/packages/azure-themes/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/azure-themes",
- "version": "8.4.32",
+ "version": "8.5.17",
"description": "Azure themes for Fluent UI React",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -27,7 +27,7 @@
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
- "@fluentui/react": "^8.94.1",
+ "@fluentui/react": "^8.98.8",
"@fluentui/set-version": "^8.2.2",
"tslib": "^2.1.0"
}
diff --git a/packages/bundle-size/CHANGELOG.json b/packages/bundle-size/CHANGELOG.json
index 07ca41c9ecbd48..d3a56b60aaa21d 100644
--- a/packages/bundle-size/CHANGELOG.json
+++ b/packages/bundle-size/CHANGELOG.json
@@ -1,6 +1,21 @@
{
"name": "@fluentui/bundle-size",
"entries": [
+ {
+ "date": "Wed, 28 Sep 2022 07:37:48 GMT",
+ "tag": "@fluentui/bundle-size_v1.1.7",
+ "version": "1.1.7",
+ "comments": {
+ "patch": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/bundle-size",
+ "commit": "b7fc0c2998a2ed7584b6b7ca8a969b17793afd28",
+ "comment": "fix: bump workspace-tools and add options to collectLocalReport api"
+ }
+ ]
+ }
+ },
{
"date": "Thu, 12 May 2022 07:41:44 GMT",
"tag": "@fluentui/bundle-size_v1.1.6",
diff --git a/packages/bundle-size/CHANGELOG.md b/packages/bundle-size/CHANGELOG.md
index 0e7934c8b7166b..c1f66856949a72 100644
--- a/packages/bundle-size/CHANGELOG.md
+++ b/packages/bundle-size/CHANGELOG.md
@@ -1,9 +1,18 @@
# Change Log - @fluentui/bundle-size
-This log was last generated on Thu, 12 May 2022 07:41:44 GMT and should not be manually modified.
+This log was last generated on Wed, 28 Sep 2022 07:37:48 GMT and should not be manually modified.
+## [1.1.7](https://github.com/microsoft/fluentui/tree/@fluentui/bundle-size_v1.1.7)
+
+Wed, 28 Sep 2022 07:37:48 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/bundle-size_v1.1.6..@fluentui/bundle-size_v1.1.7)
+
+### Patches
+
+- fix: bump workspace-tools and add options to collectLocalReport api ([PR #24891](https://github.com/microsoft/fluentui/pull/24891) by martinhochel@microsoft.com)
+
## [1.1.6](https://github.com/microsoft/fluentui/tree/@fluentui/bundle-size_v1.1.6)
Thu, 12 May 2022 07:41:44 GMT
diff --git a/packages/bundle-size/package.json b/packages/bundle-size/package.json
index 3866d6315fa53e..64f78ec3500cf8 100644
--- a/packages/bundle-size/package.json
+++ b/packages/bundle-size/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/bundle-size",
- "version": "1.1.6",
+ "version": "1.1.7",
"bin": {
"bundle-size": "./bin/bundle-size.js"
},
@@ -23,7 +23,7 @@
"pretty-bytes": "^5.6.0",
"terser": "^5.5.1",
"webpack": "^5.21.2",
- "workspace-tools": "^0.16.2",
+ "workspace-tools": "^0.27.0",
"ci-info": "^3.2.0",
"node-fetch": "^2.6.1",
"yargs": "^13.3.2"
diff --git a/packages/bundle-size/src/utils/collectLocalReport.js b/packages/bundle-size/src/utils/collectLocalReport.js
index 498cf00b0a95a6..3c0a4e4a2e8ad4 100644
--- a/packages/bundle-size/src/utils/collectLocalReport.js
+++ b/packages/bundle-size/src/utils/collectLocalReport.js
@@ -39,15 +39,20 @@ async function readReportForPackage(reportFile) {
}
}
+const collectLocalReportDefaultOptions = {
+ root: /** @type {string | undefined} */ (undefined),
+ reportFilesGlob: 'packages/**/dist/bundle-size/bundle-size.json',
+};
/**
* Collects all reports for packages to a single one.
*
+ * @param {Partial} options
* @return {Promise}
*/
-async function collectLocalReport() {
- /** @type {string[]} */
- const reportFiles = glob.sync('packages/**/dist/bundle-size/bundle-size.json', {
- cwd: /** @type {string} */ (findGitRoot(process.cwd())),
+async function collectLocalReport(options = {}) {
+ const { reportFilesGlob, root = findGitRoot(process.cwd()) } = { ...collectLocalReportDefaultOptions, ...options };
+ const reportFiles = glob.sync(reportFilesGlob, {
+ cwd: root,
});
const reports = await Promise.all(reportFiles.map(readReportForPackage));
diff --git a/packages/bundle-size/src/utils/collectLocalReport.test.js b/packages/bundle-size/src/utils/collectLocalReport.test.js
index 3cacd28d963dd6..58b910557dc047 100644
--- a/packages/bundle-size/src/utils/collectLocalReport.test.js
+++ b/packages/bundle-size/src/utils/collectLocalReport.test.js
@@ -16,9 +16,6 @@ jest.mock('glob', () => ({
const collectLocalReport = require('./collectLocalReport');
-/**
- * @return {string}
- */
function mkPackagesDir() {
const projectDir = tmp.dirSync({ prefix: 'collectLocalReport', unsafeCleanup: true });
const packagesDir = tmp.dirSync({ dir: projectDir.name, name: 'packages', unsafeCleanup: true });
@@ -28,10 +25,7 @@ function mkPackagesDir() {
const spy = jest.spyOn(process, 'cwd');
spy.mockReturnValue(projectDir.name);
- // is required as root directory is determined based on Git project
- tmp.dirSync({ dir: projectDir.name, name: '.git', unsafeCleanup: true });
-
- return packagesDir.name;
+ return { packagesDir: packagesDir.name, rootDir: projectDir.name };
}
/**
@@ -53,7 +47,7 @@ describe('collectLocalReport', () => {
});
it('aggregates all local reports to a single one', async () => {
- const packagesDir = mkPackagesDir();
+ const { packagesDir, rootDir } = mkPackagesDir();
const reportAPath = mkReportDir(tmp.dirSync({ dir: packagesDir, name: 'package-a', unsafeCleanup: true }).name);
const reportBPath = mkReportDir(tmp.dirSync({ dir: packagesDir, name: 'package-b', unsafeCleanup: true }).name);
@@ -75,7 +69,7 @@ describe('collectLocalReport', () => {
await fs.writeFile(reportBPath, JSON.stringify(reportB));
await fs.writeFile(reportCPath, JSON.stringify(reportC));
- expect(await collectLocalReport()).toMatchInlineSnapshot(`
+ expect(await collectLocalReport({ root: rootDir })).toMatchInlineSnapshot(`
Array [
Object {
"gzippedSize": 50,
@@ -110,7 +104,7 @@ describe('collectLocalReport', () => {
});
it('throws an error if a report file contains invalid JSON', async () => {
- const packagesDir = mkPackagesDir();
+ const { packagesDir, rootDir } = mkPackagesDir();
const reportAPath = mkReportDir(tmp.dirSync({ dir: packagesDir, name: 'package-a', unsafeCleanup: true }).name);
const reportBPath = mkReportDir(tmp.dirSync({ dir: packagesDir, name: 'package-b', unsafeCleanup: true }).name);
@@ -127,6 +121,6 @@ describe('collectLocalReport', () => {
await fs.writeFile(reportBPath, JSON.stringify(reportB));
await fs.writeFile(reportCPath, JSON.stringify(reportC));
- await expect(collectLocalReport()).rejects.toThrow(/Failed to read JSON/);
+ await expect(collectLocalReport({ root: rootDir })).rejects.toThrow(/Failed to read JSON/);
});
});
diff --git a/packages/bundle-size/src/utils/readConfig.test.js b/packages/bundle-size/src/utils/readConfig.test.js
index c87edfbc546b20..19872dc095bc70 100644
--- a/packages/bundle-size/src/utils/readConfig.test.js
+++ b/packages/bundle-size/src/utils/readConfig.test.js
@@ -34,13 +34,13 @@ describe('prepareFixture', () => {
it('should read config from package', async () => {
await setup(`module.exports = { webpack: (config) => { config.foo = 'bar'; return config; } }`);
- const config = await readConfig();
+ const config = await readConfig(true);
expect(config.webpack({})).toEqual({ foo: 'bar' });
});
it('should return default webpack config if no config file defined', async () => {
- const config = await readConfig();
+ const config = await readConfig(true);
expect(config.webpack({})).toEqual({});
});
@@ -49,9 +49,9 @@ describe('prepareFixture', () => {
process.env.NODE_ENV = 'nottest';
await setup(`module.exports = { webpack: (config) => config }`);
- const firstConfig = await readConfig();
+ const firstConfig = await readConfig(true);
await setup(`module.exports = { webpack: (config) => { config.foo = 'bar'; return config; } }`);
- const config = await readConfig();
+ const config = await readConfig(true);
expect(firstConfig).toBe(config);
expect(config.webpack({})).toEqual({});
@@ -61,7 +61,7 @@ describe('prepareFixture', () => {
it.each([1, 2, 3])('should cache config for %i layers of nesting', async nesting => {
await setup(`module.exports = { webpack: (config) => { config.foo = 'bar'; return config; } }`, nesting);
- const config = await readConfig();
+ const config = await readConfig(true);
expect(config.webpack({})).toEqual({ foo: 'bar' });
});
diff --git a/packages/codemods/CHANGELOG.json b/packages/codemods/CHANGELOG.json
index f7a88772309f88..9f27f17958b4be 100644
--- a/packages/codemods/CHANGELOG.json
+++ b/packages/codemods/CHANGELOG.json
@@ -1,6 +1,21 @@
{
"name": "@fluentui/codemods",
"entries": [
+ {
+ "date": "Wed, 12 Oct 2022 07:38:30 GMT",
+ "tag": "@fluentui/codemods_v8.4.5",
+ "version": "8.4.5",
+ "comments": {
+ "patch": [
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/codemods",
+ "commit": "90200f61726f12deb407611ec32067301efeb0e9",
+ "comment": "fix: Do not fail on empty configMod config"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 24 Aug 2022 16:36:05 GMT",
"tag": "@fluentui/codemods_v8.4.4",
diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md
index 0fe77cd26dc567..6abc9358891f71 100644
--- a/packages/codemods/CHANGELOG.md
+++ b/packages/codemods/CHANGELOG.md
@@ -1,9 +1,18 @@
# Change Log - @fluentui/codemods
-This log was last generated on Wed, 24 Aug 2022 16:36:05 GMT and should not be manually modified.
+This log was last generated on Wed, 12 Oct 2022 07:38:30 GMT and should not be manually modified.
+## [8.4.5](https://github.com/microsoft/fluentui/tree/@fluentui/codemods_v8.4.5)
+
+Wed, 12 Oct 2022 07:38:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/codemods_v8.4.4..@fluentui/codemods_v8.4.5)
+
+### Patches
+
+- fix: Do not fail on empty configMod config ([PR #25148](https://github.com/microsoft/fluentui/pull/25148) by miroslav.stastny@microsoft.com)
+
## [8.4.4](https://github.com/microsoft/fluentui/tree/@fluentui/codemods_v8.4.4)
Wed, 24 Aug 2022 16:36:05 GMT
diff --git a/packages/codemods/package.json b/packages/codemods/package.json
index 93e3ad22158893..6d9a8ec5c58124 100644
--- a/packages/codemods/package.json
+++ b/packages/codemods/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/codemods",
- "version": "8.4.4",
+ "version": "8.4.5",
"description": "Tool enabling easy upgrades to new Fluent UI versions",
"main": "lib-commonjs/index.js",
"typings": "lib-commonjs/index.d.ts",
diff --git a/packages/codemods/src/codeMods/mods/configMod/configMod.mod.ts b/packages/codemods/src/codeMods/mods/configMod/configMod.mod.ts
index d78157e460728e..e1ebc41d528b85 100644
--- a/packages/codemods/src/codeMods/mods/configMod/configMod.mod.ts
+++ b/packages/codemods/src/codeMods/mods/configMod/configMod.mod.ts
@@ -131,9 +131,9 @@ const configMod: CodeMod = {
run: (file: SourceFile) => {
if (!__configs) {
__configs = getCodeModsFromJson();
- if (__configs === undefined || __configs.length === 0) {
+ if (__configs === undefined) {
return Err({
- error: 'failed to get any mods from json. Perhaps the file is missing or malformed?',
+ error: 'Failed to get any mods from json. Perhaps the file is missing or malformed?',
});
}
}
@@ -144,7 +144,7 @@ const configMod: CodeMod = {
results.push(mod.run(file));
}
if (results.length === 0) {
- return Err({ logs: ['No runabble mods were found in the config'] });
+ return Ok({ logs: ['No runnable mods were found in the config'] });
}
return results.reduce(combineResults);
diff --git a/packages/common-styles/CHANGELOG.json b/packages/common-styles/CHANGELOG.json
index 12afa2005cbd82..c365f856ac6879 100644
--- a/packages/common-styles/CHANGELOG.json
+++ b/packages/common-styles/CHANGELOG.json
@@ -1,6 +1,36 @@
{
"name": "@fluentui/common-styles",
"entries": [
+ {
+ "date": "Thu, 20 Oct 2022 07:43:14 GMT",
+ "tag": "@fluentui/common-styles_v1.2.11",
+ "version": "1.2.11",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/common-styles",
+ "comment": "Bump @fluentui/style-utilities to v8.8.1",
+ "commit": "433209a6b5e8adb7619d3658c1606ec8adb02745"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 10 Oct 2022 07:38:24 GMT",
+ "tag": "@fluentui/common-styles_v1.2.10",
+ "version": "1.2.10",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/common-styles",
+ "comment": "Bump @fluentui/style-utilities to v8.8.0",
+ "commit": "c0b200c4c2ce25dbe3b95f8fc08454e362d25e17"
+ }
+ ]
+ }
+ },
{
"date": "Fri, 02 Sep 2022 07:48:53 GMT",
"tag": "@fluentui/common-styles_v1.2.9",
diff --git a/packages/common-styles/CHANGELOG.md b/packages/common-styles/CHANGELOG.md
index 6d5806c10573fe..d9a1d96729c57a 100644
--- a/packages/common-styles/CHANGELOG.md
+++ b/packages/common-styles/CHANGELOG.md
@@ -1,9 +1,27 @@
# Change Log - @fluentui/common-styles
-This log was last generated on Fri, 02 Sep 2022 07:48:53 GMT and should not be manually modified.
+This log was last generated on Thu, 20 Oct 2022 07:43:14 GMT and should not be manually modified.
+## [1.2.11](https://github.com/microsoft/fluentui/tree/@fluentui/common-styles_v1.2.11)
+
+Thu, 20 Oct 2022 07:43:14 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/common-styles_v1.2.10..@fluentui/common-styles_v1.2.11)
+
+### Patches
+
+- Bump @fluentui/style-utilities to v8.8.1 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by beachball)
+
+## [1.2.10](https://github.com/microsoft/fluentui/tree/@fluentui/common-styles_v1.2.10)
+
+Mon, 10 Oct 2022 07:38:24 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/common-styles_v1.2.9..@fluentui/common-styles_v1.2.10)
+
+### Patches
+
+- Bump @fluentui/style-utilities to v8.8.0 ([PR #25138](https://github.com/microsoft/fluentui/pull/25138) by beachball)
+
## [1.2.9](https://github.com/microsoft/fluentui/tree/@fluentui/common-styles_v1.2.9)
Fri, 02 Sep 2022 07:48:53 GMT
diff --git a/packages/common-styles/package.json b/packages/common-styles/package.json
index d70b0d6bba2db2..763e158a60002e 100644
--- a/packages/common-styles/package.json
+++ b/packages/common-styles/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/common-styles",
- "version": "1.2.9",
+ "version": "1.2.11",
"description": "Common style definitions for Fluent UI React components",
"repository": {
"type": "git",
@@ -19,6 +19,6 @@
},
"devDependencies": {
"@fluentui/scripts": "^1.0.0",
- "@fluentui/style-utilities": "^8.7.12"
+ "@fluentui/style-utilities": "^8.8.1"
}
}
diff --git a/packages/cra-template/CHANGELOG.json b/packages/cra-template/CHANGELOG.json
index 1bc17aab64a7d5..af946ef09b1a40 100644
--- a/packages/cra-template/CHANGELOG.json
+++ b/packages/cra-template/CHANGELOG.json
@@ -1,6 +1,321 @@
{
"name": "@fluentui/cra-template",
"entries": [
+ {
+ "date": "Wed, 26 Oct 2022 07:52:54 GMT",
+ "tag": "@fluentui/cra-template_v8.4.17",
+ "version": "8.4.17",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.98.8",
+ "commit": "135655c2e9e32b5d50610d17792768ba0cb4e65e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 25 Oct 2022 07:43:18 GMT",
+ "tag": "@fluentui/cra-template_v8.4.16",
+ "version": "8.4.16",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.98.7",
+ "commit": "fd0e28e497856c9ddb6c82d0b6b336f5c263fb7e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 24 Oct 2022 07:45:24 GMT",
+ "tag": "@fluentui/cra-template_v8.4.15",
+ "version": "8.4.15",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.98.6",
+ "commit": "e255da7cf629534ebaaac05af3b5bb9a2f7def71"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 21 Oct 2022 07:44:53 GMT",
+ "tag": "@fluentui/cra-template_v8.4.14",
+ "version": "8.4.14",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.98.5",
+ "commit": "dd063ac623ca90e1fe919ff4471eae017bbf5576"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 07:43:14 GMT",
+ "tag": "@fluentui/cra-template_v8.4.13",
+ "version": "8.4.13",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.98.4",
+ "commit": "433209a6b5e8adb7619d3658c1606ec8adb02745"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 17 Oct 2022 07:49:17 GMT",
+ "tag": "@fluentui/cra-template_v8.4.12",
+ "version": "8.4.12",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.98.3",
+ "commit": "e14e5348f1f08aee8da7cb911a24a811d9f9cb09"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 14 Oct 2022 07:44:02 GMT",
+ "tag": "@fluentui/cra-template_v8.4.11",
+ "version": "8.4.11",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.98.2",
+ "commit": "82650ef8b3d436c039e33f3eb8a658a3d878064f"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 07:45:27 GMT",
+ "tag": "@fluentui/cra-template_v8.4.10",
+ "version": "8.4.10",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.98.1",
+ "commit": "4f46035db0cd28a5987932120c68755e024869c8"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 10 Oct 2022 07:38:24 GMT",
+ "tag": "@fluentui/cra-template_v8.4.9",
+ "version": "8.4.9",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.98.0",
+ "commit": "c0b200c4c2ce25dbe3b95f8fc08454e362d25e17"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 04 Oct 2022 07:45:03 GMT",
+ "tag": "@fluentui/cra-template_v8.4.8",
+ "version": "8.4.8",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.97.2",
+ "commit": "33559052b672f787b021bd2fbc9826e88ce2a2de"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 07:37:49 GMT",
+ "tag": "@fluentui/cra-template_v8.4.7",
+ "version": "8.4.7",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.97.1",
+ "commit": "86b3133d97c177cac545b253deb11374ee829574"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 30 Sep 2022 07:38:09 GMT",
+ "tag": "@fluentui/cra-template_v8.4.6",
+ "version": "8.4.6",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.97.0",
+ "commit": "fcb2ee2d270e6f584c6dbbd45f39a50c994c38be"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 29 Sep 2022 07:40:10 GMT",
+ "tag": "@fluentui/cra-template_v8.4.5",
+ "version": "8.4.5",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.96.3",
+ "commit": "cc8acd94d3f68011427d6e031201a156e3b04ed9"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 28 Sep 2022 07:37:49 GMT",
+ "tag": "@fluentui/cra-template_v8.4.4",
+ "version": "8.4.4",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.96.2",
+ "commit": "316aa1e8df88bd9ec563d32222565dc48bc9fa29"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/cra-template_v8.4.3",
+ "version": "8.4.3",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/cra-template_v8.4.2",
+ "version": "8.4.2",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/cra-template_v8.4.1",
+ "version": "8.4.1",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:27 GMT",
+ "tag": "@fluentui/cra-template_v8.4.0",
+ "version": "8.4.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/cra-template_v8.3.35",
+ "version": "8.3.35",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/cra-template_v8.3.34",
+ "version": "8.3.34",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/cra-template_v8.3.33",
+ "version": "8.3.33",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/cra-template",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/cra-template_v8.3.32",
diff --git a/packages/cra-template/CHANGELOG.md b/packages/cra-template/CHANGELOG.md
index 24324d8cb0b047..f3e06933b2056d 100644
--- a/packages/cra-template/CHANGELOG.md
+++ b/packages/cra-template/CHANGELOG.md
@@ -1,9 +1,198 @@
# Change Log - @fluentui/cra-template
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Wed, 26 Oct 2022 07:52:54 GMT and should not be manually modified.
+## [8.4.17](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.17)
+
+Wed, 26 Oct 2022 07:52:54 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.16..@fluentui/cra-template_v8.4.17)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.8 ([PR #25381](https://github.com/microsoft/fluentui/pull/25381) by beachball)
+
+## [8.4.16](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.16)
+
+Tue, 25 Oct 2022 07:43:18 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.15..@fluentui/cra-template_v8.4.16)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.7 ([PR #24903](https://github.com/microsoft/fluentui/pull/24903) by beachball)
+
+## [8.4.15](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.15)
+
+Mon, 24 Oct 2022 07:45:24 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.14..@fluentui/cra-template_v8.4.15)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.6 ([PR #25226](https://github.com/microsoft/fluentui/pull/25226) by beachball)
+
+## [8.4.14](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.14)
+
+Fri, 21 Oct 2022 07:44:53 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.13..@fluentui/cra-template_v8.4.14)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.5 ([PR #24283](https://github.com/microsoft/fluentui/pull/24283) by beachball)
+
+## [8.4.13](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.13)
+
+Thu, 20 Oct 2022 07:43:14 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.12..@fluentui/cra-template_v8.4.13)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.4 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by beachball)
+
+## [8.4.12](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.12)
+
+Mon, 17 Oct 2022 07:49:17 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.11..@fluentui/cra-template_v8.4.12)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.3 ([PR #25219](https://github.com/microsoft/fluentui/pull/25219) by beachball)
+
+## [8.4.11](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.11)
+
+Fri, 14 Oct 2022 07:44:02 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.10..@fluentui/cra-template_v8.4.11)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.2 ([PR #24976](https://github.com/microsoft/fluentui/pull/24976) by beachball)
+
+## [8.4.10](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.10)
+
+Thu, 13 Oct 2022 07:45:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.9..@fluentui/cra-template_v8.4.10)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.1 ([PR #25198](https://github.com/microsoft/fluentui/pull/25198) by beachball)
+
+## [8.4.9](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.9)
+
+Mon, 10 Oct 2022 07:38:24 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.8..@fluentui/cra-template_v8.4.9)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.0 ([PR #25138](https://github.com/microsoft/fluentui/pull/25138) by beachball)
+
+## [8.4.8](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.8)
+
+Tue, 04 Oct 2022 07:45:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.7..@fluentui/cra-template_v8.4.8)
+
+### Patches
+
+- Bump @fluentui/react to v8.97.2 ([PR #24947](https://github.com/microsoft/fluentui/pull/24947) by beachball)
+
+## [8.4.7](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.7)
+
+Mon, 03 Oct 2022 07:37:49 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.6..@fluentui/cra-template_v8.4.7)
+
+### Patches
+
+- Bump @fluentui/react to v8.97.1 ([PR #25022](https://github.com/microsoft/fluentui/pull/25022) by beachball)
+
+## [8.4.6](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.6)
+
+Fri, 30 Sep 2022 07:38:09 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.5..@fluentui/cra-template_v8.4.6)
+
+### Patches
+
+- Bump @fluentui/react to v8.97.0 ([PR #25025](https://github.com/microsoft/fluentui/pull/25025) by beachball)
+
+## [8.4.5](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.5)
+
+Thu, 29 Sep 2022 07:40:10 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.4..@fluentui/cra-template_v8.4.5)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.3 ([PR #24990](https://github.com/microsoft/fluentui/pull/24990) by beachball)
+
+## [8.4.4](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.4)
+
+Wed, 28 Sep 2022 07:37:49 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.3..@fluentui/cra-template_v8.4.4)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.2 ([PR #24900](https://github.com/microsoft/fluentui/pull/24900) by beachball)
+
+## [8.4.3](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.3)
+
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.2..@fluentui/cra-template_v8.4.3)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [8.4.2](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.2)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.1..@fluentui/cra-template_v8.4.2)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [8.4.1](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.1)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.4.0..@fluentui/cra-template_v8.4.1)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [8.4.0](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.4.0)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.3.35..@fluentui/cra-template_v8.4.0)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [8.3.35](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.3.35)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.3.34..@fluentui/cra-template_v8.3.35)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [8.3.34](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.3.34)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.3.33..@fluentui/cra-template_v8.3.34)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [8.3.33](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.3.33)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/cra-template_v8.3.32..@fluentui/cra-template_v8.3.33)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
## [8.3.32](https://github.com/microsoft/fluentui/tree/@fluentui/cra-template_v8.3.32)
Mon, 05 Sep 2022 07:38:30 GMT
diff --git a/packages/cra-template/package.json b/packages/cra-template/package.json
index 7b70a8dfcd0b59..b76dd37f5b0e9f 100644
--- a/packages/cra-template/package.json
+++ b/packages/cra-template/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/cra-template",
- "version": "8.3.32",
+ "version": "8.4.17",
"description": "Create React App template for Fluent UI React (@fluentui/react)",
"repository": {
"type": "git",
@@ -18,7 +18,7 @@
"template.json"
],
"devDependencies": {
- "@fluentui/react": "^8.94.1",
+ "@fluentui/react": "^8.98.8",
"@fluentui/scripts": "^1.0.0"
}
}
diff --git a/packages/eslint-plugin/CHANGELOG.json b/packages/eslint-plugin/CHANGELOG.json
index e38fe678a5cbc2..934d9b53e76736 100644
--- a/packages/eslint-plugin/CHANGELOG.json
+++ b/packages/eslint-plugin/CHANGELOG.json
@@ -1,6 +1,51 @@
{
"name": "@fluentui/eslint-plugin",
"entries": [
+ {
+ "date": "Mon, 10 Oct 2022 07:38:21 GMT",
+ "tag": "@fluentui/eslint-plugin_v1.12.5",
+ "version": "1.12.5",
+ "comments": {
+ "patch": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/eslint-plugin",
+ "commit": "ff55fc0e1abd7e61331bbcba18e066b6c449ba79",
+ "comment": "Turn off import/no-extraneous-dependencies rule for cypress component test files."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 04 Oct 2022 07:45:02 GMT",
+ "tag": "@fluentui/eslint-plugin_v1.12.4",
+ "version": "1.12.4",
+ "comments": {
+ "patch": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/eslint-plugin",
+ "commit": "8e630de5cdb8b26e6627cd6378d7e3c6c1271fb6",
+ "comment": "chore: enable object-shorthand in ESLint"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 27 Sep 2022 07:46:25 GMT",
+ "tag": "@fluentui/eslint-plugin_v1.12.3",
+ "version": "1.12.3",
+ "comments": {
+ "patch": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/eslint-plugin",
+ "commit": "f020ac1736d7b275d10d27ab868605343ca240e5",
+ "comment": "fix(eslint-plugin): properly resolve single-version policy dep issues in react-northstar packages"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 08 Aug 2022 07:39:31 GMT",
"tag": "@fluentui/eslint-plugin_v1.12.2",
diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md
index ca01c27cce3d65..5e9f973083f989 100644
--- a/packages/eslint-plugin/CHANGELOG.md
+++ b/packages/eslint-plugin/CHANGELOG.md
@@ -1,9 +1,36 @@
# Change Log - @fluentui/eslint-plugin
-This log was last generated on Mon, 08 Aug 2022 07:39:31 GMT and should not be manually modified.
+This log was last generated on Mon, 10 Oct 2022 07:38:21 GMT and should not be manually modified.
+## [1.12.5](https://github.com/microsoft/fluentui/tree/@fluentui/eslint-plugin_v1.12.5)
+
+Mon, 10 Oct 2022 07:38:21 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/eslint-plugin_v1.12.4..@fluentui/eslint-plugin_v1.12.5)
+
+### Patches
+
+- Turn off import/no-extraneous-dependencies rule for cypress component test files. ([PR #24458](https://github.com/microsoft/fluentui/pull/24458) by tristan.watanabe@gmail.com)
+
+## [1.12.4](https://github.com/microsoft/fluentui/tree/@fluentui/eslint-plugin_v1.12.4)
+
+Tue, 04 Oct 2022 07:45:02 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/eslint-plugin_v1.12.3..@fluentui/eslint-plugin_v1.12.4)
+
+### Patches
+
+- chore: enable object-shorthand in ESLint ([PR #25031](https://github.com/microsoft/fluentui/pull/25031) by olfedias@microsoft.com)
+
+## [1.12.3](https://github.com/microsoft/fluentui/tree/@fluentui/eslint-plugin_v1.12.3)
+
+Tue, 27 Sep 2022 07:46:25 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/eslint-plugin_v1.12.2..@fluentui/eslint-plugin_v1.12.3)
+
+### Patches
+
+- fix(eslint-plugin): properly resolve single-version policy dep issues in react-northstar packages ([PR #24526](https://github.com/microsoft/fluentui/pull/24526) by martinhochel@microsoft.com)
+
## [1.12.2](https://github.com/microsoft/fluentui/tree/@fluentui/eslint-plugin_v1.12.2)
Mon, 08 Aug 2022 07:39:31 GMT
diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json
index 952fb7d2435186..a6d9e69828cc87 100644
--- a/packages/eslint-plugin/package.json
+++ b/packages/eslint-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/eslint-plugin",
- "version": "1.12.2",
+ "version": "1.12.5",
"description": "ESLint configuration and custom rules for Fluent UI",
"main": "src/index.js",
"repository": {
diff --git a/packages/eslint-plugin/src/configs/core.js b/packages/eslint-plugin/src/configs/core.js
index b6a69150c2b9b3..95f9c7535af141 100644
--- a/packages/eslint-plugin/src/configs/core.js
+++ b/packages/eslint-plugin/src/configs/core.js
@@ -124,7 +124,7 @@ const config = {
'no-useless-escape': 'off',
'no-useless-rename': 'off',
'no-useless-return': 'off',
- 'object-shorthand': 'off',
+ 'object-shorthand': 'warn',
'operator-assignment': 'off',
'prefer-destructuring': 'off',
'prefer-template': 'off',
diff --git a/packages/eslint-plugin/src/configs/react-northstar.js b/packages/eslint-plugin/src/configs/react-northstar.js
index 49802b7d27cb76..d6ace7298ef293 100644
--- a/packages/eslint-plugin/src/configs/react-northstar.js
+++ b/packages/eslint-plugin/src/configs/react-northstar.js
@@ -1,3 +1,7 @@
+const { findGitRoot } = require('../utils/configHelpers');
+
+const workspaceRoot = findGitRoot();
+
module.exports = {
extends: [
'airbnb',
@@ -23,7 +27,10 @@ module.exports = {
'import/no-default-export': 'error',
'import/no-extraneous-dependencies': [
'error',
- { devDependencies: ['**/*-test.ts*', '**/*.test.ts*', '*.config.js', 'gulpfile.ts', 'just.config.ts'] },
+ {
+ packageDir: ['.', workspaceRoot],
+ devDependencies: ['**/*-test.ts*', '**/*.test.ts*', '*.config.js', 'gulpfile.ts', 'just.config.ts'],
+ },
],
// False positive on arg types:
diff --git a/packages/eslint-plugin/src/configs/react.js b/packages/eslint-plugin/src/configs/react.js
index 3e302383d984f3..4b8d2936aed148 100644
--- a/packages/eslint-plugin/src/configs/react.js
+++ b/packages/eslint-plugin/src/configs/react.js
@@ -44,5 +44,11 @@ module.exports = {
],
},
},
+ {
+ files: ['**/*.cy.{ts,tsx,js}', 'isConformant.{ts,tsx,js}'],
+ rules: {
+ 'import/no-extraneous-dependencies': 'off',
+ },
+ },
],
};
diff --git a/packages/fluentui/CHANGELOG.md b/packages/fluentui/CHANGELOG.md
index c70318a3a8f3ea..909ce81745ac12 100644
--- a/packages/fluentui/CHANGELOG.md
+++ b/packages/fluentui/CHANGELOG.md
@@ -18,14 +18,32 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
## [Unreleased]
-### Features
+### BREAKING CHANGES
+- Styles from `ChatMessage` content slot were moved to exact component `ChatMessageContent` @yuanboxue-amber ([#24691](https://github.com/microsoft/fluentui/pull/24691))
+- Remove `goToToday` prop from `DatePicker` as it had no effect @miroslavstastny ([#25242](https://github.com/microsoft/fluentui/pull/25242))
+### Features
- Add a new comfy layout variation for `ChatMessage` @davezuko ([#23974](https://github.com/microsoft/fluentui/pull/23974))
+- Add `FocusTrapZone` prop `preventScrollOnRestoreFocus` to prevent scroll on focus when `FocusTrapZone` releases @yuanboxue-amber ([#24632](https://github.com/microsoft/fluentui/pull/24632))
+- Add new style to v0 Tooltip to match v9 Tooltip @GianoglioEnrico ([#24908](https://github.com/microsoft/fluentui/pull/24908))
+- Limit keyboard detection in inputs @jurokapsiar ([#25087](https://github.com/microsoft/fluentui/pull/25087))
+- Dropdown Freeform search should be case insensitive @jurokapsiar ([#24879](https://github.com/microsoft/fluentui/pull/24879))
### Fixes
- Allow React 17 in `peerDependencies` of all packages and bump react-is to 17 @TristanWatanabe ([#24356](https://github.com/microsoft/fluentui/pull/24356))
- Fix `FocusTrapZone` to always remove `aria-hidden` on portal wrapper @yuanboxue-amber ([#24414](https://github.com/microsoft/fluentui/pull/24414))
+- Remove `rotate(360deg)` from `PopupContent` content styles @yuanboxue-amber ([#24432](https://github.com/microsoft/fluentui/pull/24432))
+- Fix `FocusZone` to reset tabindex when focus is outside the zone with prop `shouldResetActiveElementWhenTabFromZone` @yuanboxue-amber ([#24463](https://github.com/microsoft/fluentui/pull/24463))
- Change `useLayoutEffect` in `Dropdown` to `useIsomorphicLayoutEffect` @marwan38 ([#24559](https://github.com/microsoft/fluentui/pull/24559))
+- Fix `Popup` trigger attribute being override @chpalac ([#24794](https://github.com/microsoft/fluentui/pull/24794))
+- Fix styling mutation when merging themes in `Dropdown` @petrjaros ([#24787](https://github.com/microsoft/fluentui/pull/24787))
+- Fix `Toolbar` submenu closing when another submenu is opened @miroslavstastny ([#24836](https://github.com/microsoft/fluentui/pull/24836))
+
+### Performance
+- Avoid memory trashing in `felaExpandCssShorthandsPlugin` @layershifter ([#24663](https://github.com/microsoft/fluentui/pull/24663))
+
+### Documentation
+- Added theming documentation for windows high contrast mode support @ling1726 ([#24744](https://github.com/microsoft/fluentui/pull/24744))
## [v0.64.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-northstar_v0.64.0) (2022-08-10)
diff --git a/packages/fluentui/README.md b/packages/fluentui/README.md
index 3bf45caf2abe09..9aa376938345e0 100644
--- a/packages/fluentui/README.md
+++ b/packages/fluentui/README.md
@@ -1,6 +1,14 @@
# Fluent UI - React Northstar ([docs](https://aka.ms/fluent-ui))
-This is the new home for `@fluentui/react-northstar` and related packages which were migrated from the [`microsoft/fluent-ui-react` repo][1].
+[![npm version](https://img.shields.io/npm/v/@fluentui/react-northstar?style=flat-square)](https://www.npmjs.com/package/@fluentui/react-northstar)
+
+This is the home for `@fluentui/react-northstar` and related packages which were migrated from the [`microsoft/fluent-ui-react` repo][1].
+
+**Status**
+
+Fluent UI React Northstar has been superseded by Fluent UI React Components v9. For more details about migration to Fluent UI React Components v9, see [Migration documentation][5].
+
+**Versioning**
> Since the `@fluentui/react-northstar` packages are on version 0.x, note that:
>
@@ -16,8 +24,8 @@ This is the new home for `@fluentui/react-northstar` and related packages which
- [Issues](#issues)
- [Documentation and usage examples](#documentation-and-usage-examples)
- [FAQs](#faqs)
- - [Why the move?](#why-the-move)
- - [Why the separate folder?](#why-the-separate-folder)
+ - [What is the future of Fluent UI React Northstar?](#what-is-the-future-of-fluent-ui-react-northstar)
+ - [How can we migrate to Fluent UI React Components v9?](#how-can-we-migrate-to-fluent-ui-react-components-v9)
- [What's happening with Teams support?](#whats-happening-with-teams-support)
@@ -29,6 +37,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for a step-by-step setup and development
## Issues
If you need to [file an issue][3], please note in the title or description that it refers to `@fluentui/react-northstar`.
+List of [active issues][4]
## Documentation and usage examples
@@ -36,18 +45,20 @@ See the doc site at https://aka.ms/fluent-ui.
## FAQs
-### Why the move?
+### What is the future of Fluent UI React Northstar?
-We're in the process of converging UI projects at Microsoft under the "Fluent UI" banner to simplify the dev story. In the process, we're making performance improvements and enabling greater interoperability of these components across more places and platforms at Microsoft.
+The future of `@fluentui/react-northstar` is called `@fluentui/react-components`. It builds on top of many base principles that were present in Northstar, streamlines the API and brings significantly improved performance.
-### Why the separate folder?
+### How can we migrate to Fluent UI React Components v9?
-These packages remain in a separate folder while we work on converging the build systems and certain other details, but they will eventually move directly under `packages` (or `apps`) next to the other packages.
+Please see the [Migration documentation][5].
### What's happening with Teams support?
-`@fluentui/react-northstar v0.x.x` (formerly `@fluentui/react v0.x.x`) has been the official set of components for Teams. This is still the case and no support is being dropped.
+`@fluentui/react-northstar v0.x.x` (formerly `@fluentui/react v0.x.x`) has been the official set of components for Teams. This is still the case and no support is being dropped. New features will only be added to Fluent UI React Components v9.
[1]: https://github.com/microsoft/fluent-ui-react
[2]: https://github.com/microsoft/fluentui/blob/master/packages/fluentui/CHANGELOG.md
[3]: https://github.com/microsoft/fluentui/issues/new/choose
+[4]: https://github.com/microsoft/fluentui/issues?q=is%3Aissue+is%3Aopen+label%3A%22Fluent+UI+react-northstar+%28v0%29%22
+[5]: https://react.fluentui.dev/?path=/docs/concepts-migration-overview--page
diff --git a/packages/fluentui/accessibility/package.json b/packages/fluentui/accessibility/package.json
index f884f3de706d2a..d2c16bbaa16836 100644
--- a/packages/fluentui/accessibility/package.json
+++ b/packages/fluentui/accessibility/package.json
@@ -11,8 +11,6 @@
"devDependencies": {
"@fluentui/eslint-plugin": "*",
"@fluentui/scripts": "^1.0.0",
- "@types/gulp": "^4.0.6",
- "gulp": "^4.0.2",
"lerna-alias": "^3.0.3-0"
},
"files": [
diff --git a/packages/fluentui/accessibility/src/behaviors/Popup/popupBehavior.ts b/packages/fluentui/accessibility/src/behaviors/Popup/popupBehavior.ts
index b2a51ea697af97..451993bae6c3ed 100644
--- a/packages/fluentui/accessibility/src/behaviors/Popup/popupBehavior.ts
+++ b/packages/fluentui/accessibility/src/behaviors/Popup/popupBehavior.ts
@@ -10,7 +10,9 @@ export const popupBehavior: Accessibility = props => {
: undefined;
if (tabbableTriggerProps) {
- tabbableTriggerProps['aria-haspopup'] = 'dialog';
+ tabbableTriggerProps['aria-haspopup'] = props.trigger?.props.hasOwnProperty('aria-haspopup')
+ ? props.trigger?.props['aria-haspopup']
+ : 'dialog';
if (process.env.NODE_ENV !== 'production') {
// Override the default trigger's accessibility schema class.
diff --git a/packages/fluentui/accessibility/test/behaviors/popupBehavior-test.tsx b/packages/fluentui/accessibility/test/behaviors/popupBehavior-test.tsx
index 3beb60db437179..147f6d43eff201 100644
--- a/packages/fluentui/accessibility/test/behaviors/popupBehavior-test.tsx
+++ b/packages/fluentui/accessibility/test/behaviors/popupBehavior-test.tsx
@@ -20,6 +20,14 @@ describe('PopupBehavior.ts', () => {
expect(expectedResult.attributes.trigger.tabIndex).toEqual(-1);
});
+ test('Do not override trigger aria-haspopup attribute', () => {
+ const expectedResult = popupBehavior({
+ trigger: ,
+ tabbableTrigger: true,
+ });
+ expect(expectedResult.attributes.trigger['aria-haspopup']).toBeNull();
+ });
+
// TODO: Fix me
// test('does not add tabIndex if element is already tabbable', () => {
// const expectedResult = popupBehavior({ trigger: , tabbableTrigger: true })
diff --git a/packages/fluentui/circulars-test/package.json b/packages/fluentui/circulars-test/package.json
index e3df22f892d65b..42ebf13503f75d 100644
--- a/packages/fluentui/circulars-test/package.json
+++ b/packages/fluentui/circulars-test/package.json
@@ -7,8 +7,7 @@
"@fluentui/react-northstar": "^0.64.0"
},
"devDependencies": {
- "@fluentui/scripts": "^1.0.0",
- "gulp": "^4.0.2"
+ "@fluentui/scripts": "^1.0.0"
},
"publishConfig": {
"access": "public"
diff --git a/packages/fluentui/docs-components/package.json b/packages/fluentui/docs-components/package.json
index deb219bbb76b3a..85a2e0dedceab5 100644
--- a/packages/fluentui/docs-components/package.json
+++ b/packages/fluentui/docs-components/package.json
@@ -17,9 +17,7 @@
},
"devDependencies": {
"@fluentui/eslint-plugin": "*",
- "@fluentui/scripts": "^1.0.0",
- "@types/gulp": "^4.0.6",
- "gulp": "^4.0.2"
+ "@fluentui/scripts": "^1.0.0"
},
"files": [
"dist"
diff --git a/packages/fluentui/docs/package.json b/packages/fluentui/docs/package.json
index 07ff8b89c2d183..86439cfdcdee90 100644
--- a/packages/fluentui/docs/package.json
+++ b/packages/fluentui/docs/package.json
@@ -55,12 +55,10 @@
"@types/classnames": "^2.2.9",
"@types/color": "^3.0.0",
"@types/faker": "^4.1.3",
- "@types/gulp": "^4.0.6",
"@types/react-custom-scrollbars": "^4.0.5",
"@types/react-router-dom": "^5.1.5",
"@types/react-virtualized": "^9.21.8",
- "@types/react-window": "^1.8.2",
- "gulp": "^4.0.2"
+ "@types/react-window": "^1.8.2"
},
"publishConfig": {
"access": "public"
diff --git a/packages/fluentui/docs/src/examples/components/Chat/Content/ChatExampleReactionGroupMeReacting.shorthand.steps.ts b/packages/fluentui/docs/src/examples/components/Chat/Content/ChatExampleReactionGroupMeReacting.shorthand.steps.ts
index 975ba3744a680a..47c4430516daaa 100644
--- a/packages/fluentui/docs/src/examples/components/Chat/Content/ChatExampleReactionGroupMeReacting.shorthand.steps.ts
+++ b/packages/fluentui/docs/src/examples/components/Chat/Content/ChatExampleReactionGroupMeReacting.shorthand.steps.ts
@@ -1,8 +1,8 @@
import { ALL_THEMES, ScreenerTestsConfig } from '@fluentui/scripts/screener';
-import { reactionClassName, chatMessageSlotClassNames } from '@fluentui/react-northstar';
+import { reactionClassName, chatMessageContentClassName } from '@fluentui/react-northstar';
const selectors = {
- chatMessageContent: `.${chatMessageSlotClassNames.content}`,
+ chatMessageContent: chatMessageContentClassName,
reaction: `.${reactionClassName}`,
};
diff --git a/packages/fluentui/docs/src/examples/components/Chat/Playground.tsx b/packages/fluentui/docs/src/examples/components/Chat/Playground.tsx
index 4fe381e260c702..1ac90de5d886a8 100644
--- a/packages/fluentui/docs/src/examples/components/Chat/Playground.tsx
+++ b/packages/fluentui/docs/src/examples/components/Chat/Playground.tsx
@@ -15,6 +15,7 @@ import {
import {
Avatar,
Chat,
+ ChatItem,
ChatItemProps,
ChatMessageProps,
MenuProps,
@@ -126,17 +127,13 @@ const ChatPlayground: React.FunctionComponent = () => {
};
return (
- } size={size} />,
- key: '1',
- message: ,
- ...chatItemProps,
- },
- ]}
- />
+
+ } size={size} />}
+ message={ }
+ {...chatItemProps}
+ />
+
);
};
diff --git a/packages/fluentui/docs/src/examples/components/Chat/Types/ChatMessageExampleStyled.shorthand.tsx b/packages/fluentui/docs/src/examples/components/Chat/Types/ChatMessageExampleStyled.shorthand.tsx
index fde12dc562e7bf..d1932062888e57 100644
--- a/packages/fluentui/docs/src/examples/components/Chat/Types/ChatMessageExampleStyled.shorthand.tsx
+++ b/packages/fluentui/docs/src/examples/components/Chat/Types/ChatMessageExampleStyled.shorthand.tsx
@@ -72,7 +72,6 @@ const ChatMessageExampleStyled = () => (
backgroundColor: '#E0FFFF',
}),
}),
- content: { ...slotLabelStyles('content'), backgroundColor: '#F08080' },
timestamp: {
...slotLabelStyles('timestamp', {}, { display: 'inline-block' }),
backgroundColor: '#FFFFE0',
@@ -90,10 +89,13 @@ const ChatMessageExampleStyled = () => (
backgroundColor: '#FFFFE0',
},
},
+ ChatMessageContent: {
+ root: { ...slotLabelStyles('content'), backgroundColor: '#F08080' },
+ },
},
componentVariables: {
- ChatMessage: siteVars => ({
- content: {
+ ChatMessageContent: siteVars => ({
+ root: {
focusOutlineColor: siteVars.colors.red[400],
},
}),
diff --git a/packages/fluentui/docs/src/examples/components/Datepicker/Types/DatepickerExampleLocalizationStrings.shorthand.tsx b/packages/fluentui/docs/src/examples/components/Datepicker/Types/DatepickerExampleLocalizationStrings.shorthand.tsx
index 3c3ec84cb66955..ea7000e4ca74f4 100644
--- a/packages/fluentui/docs/src/examples/components/Datepicker/Types/DatepickerExampleLocalizationStrings.shorthand.tsx
+++ b/packages/fluentui/docs/src/examples/components/Datepicker/Types/DatepickerExampleLocalizationStrings.shorthand.tsx
@@ -19,7 +19,6 @@ const DatepickerExampleLocalizationStrings = () => {
'نوفمبر',
'ديسمبر',
],
- goToToday: 'اليوم',
openCalendarTitle: 'تقويم مفتوح',
inputPlaceholder: 'حدد التاريخ',
weekNumberFormatString: 'رقم الأسبوع',
diff --git a/packages/fluentui/docs/src/examples/components/Toolbar/Content/ToolbarExampleMenuWithSubmenu.shorthand.steps.ts b/packages/fluentui/docs/src/examples/components/Toolbar/Content/ToolbarExampleMenuWithSubmenu.shorthand.steps.ts
index 827a3308a91840..13c398590c9555 100644
--- a/packages/fluentui/docs/src/examples/components/Toolbar/Content/ToolbarExampleMenuWithSubmenu.shorthand.steps.ts
+++ b/packages/fluentui/docs/src/examples/components/Toolbar/Content/ToolbarExampleMenuWithSubmenu.shorthand.steps.ts
@@ -8,8 +8,10 @@ const config: ScreenerTestsConfig = {
builder
.click(`.${toolbarItemWrapperClassName} button`)
.snapshot('Shows menu')
- .keys(`.${toolbarMenuItemClassName}:nth-child(1)`, keys.rightArrow)
- .snapshot('Opens submenu'),
+ .keys(`.${toolbarMenuItemClassName}#ToolbarExampleMenuWithSubmenu_Play`, keys.rightArrow)
+ .snapshot('Opens first submenu')
+ .click(`.${toolbarMenuItemClassName}#ToolbarExampleMenuWithSubmenu_Appearance`)
+ .snapshot('Opens second submenu'),
],
};
diff --git a/packages/fluentui/docs/src/examples/components/Toolbar/Content/ToolbarExampleMenuWithSubmenu.shorthand.tsx b/packages/fluentui/docs/src/examples/components/Toolbar/Content/ToolbarExampleMenuWithSubmenu.shorthand.tsx
index ed0afee0b44893..fba7fbc631781f 100644
--- a/packages/fluentui/docs/src/examples/components/Toolbar/Content/ToolbarExampleMenuWithSubmenu.shorthand.tsx
+++ b/packages/fluentui/docs/src/examples/components/Toolbar/Content/ToolbarExampleMenuWithSubmenu.shorthand.tsx
@@ -37,12 +37,21 @@ const ToolbarExampleMenuWithSubmenuShorthand = () => {
menu: [
{
key: 'play',
+ id: 'ToolbarExampleMenuWithSubmenu_Play',
content: 'Play',
icon: ,
menu: {
items: ['Play with audio', { content: 'Play with video', key: 'playVideo', menu: ['HD', 'Full HD'] }],
},
},
+ {
+ key: 'appearance',
+ id: 'ToolbarExampleMenuWithSubmenu_Appearance',
+ content: 'Appearance',
+ menu: {
+ items: ['Centered Layout', 'Zen', 'Zoom In', 'Zoom Out'],
+ },
+ },
{ key: 'pause', content: 'Pause', icon: },
{ key: 'divider', kind: 'divider' },
'Without icon',
diff --git a/packages/fluentui/docs/src/views/Introduction.tsx b/packages/fluentui/docs/src/views/Introduction.tsx
index 93d233977890c1..5dab96ca57fc38 100644
--- a/packages/fluentui/docs/src/views/Introduction.tsx
+++ b/packages/fluentui/docs/src/views/Introduction.tsx
@@ -1,6 +1,6 @@
import * as _ from 'lodash';
import * as React from 'react';
-import { NavLink } from 'react-router-dom';
+import { Link, NavLink } from 'react-router-dom';
import { Flex, Header } from '@fluentui/react-northstar';
import pkg from '@fluentui/react-northstar/package.json';
@@ -34,9 +34,11 @@ const Introduction = () => (
Fluent UI provides extensible vanilla JavaScript solutions to component state, styling, and accessibility. These
powerful features are exposed behind simple APIs based on natural language.
+
+ Status
- Fluent UI React is being built as an exemplar of the Fluent UI design language, component specifications, and
- utilities.
+ Fluent UI React Northstar has been superseded by{' '}
+ Fluent UI React Components v9.
Learn
diff --git a/packages/fluentui/docs/src/views/Theming.tsx b/packages/fluentui/docs/src/views/Theming.tsx
index 71f1422e6883cc..e222df8157b615 100644
--- a/packages/fluentui/docs/src/views/Theming.tsx
+++ b/packages/fluentui/docs/src/views/Theming.tsx
@@ -285,5 +285,46 @@ export default () => (
previous={{ name: 'Accessibility', url: 'accessibility' }}
next={{ name: 'Theming Examples', url: 'theming-examples' }}
/>
+
+
+
+ This library was originally built as the design system for the Microsoft Teams application. Due to legacy reasons,
+ there was no support for Windows High Contrast Mode. Since version `0.61.0`, there is official support for high
+ contrast mode. However, high contrast mode is supported through a separate theme that must be passed to the{' '}
+ Provider at the root of your app. Below is an example of how you could
+ use the dedicated high contrast (aka forced colors) theme.
+
+
+ {
+ React.useEffect(() => {
+ const match = window.matchMedia("(forced-colors: active)");
+ if (match.matches) {
+ setTheme(teamsForcedColorsTheme);
+ }
+
+ // Listen to changes in OS theme
+ match.addEventListener("change", (ev) => {
+ if (ev.matches) {
+ setTheme(teamsForcedColorsTheme);
+ } else {
+ console.log("setting standard theme");
+ setTheme(teamsV2Theme);
+ }
+ });
+ }, []);
+
+ return (
+
+
+
+ );
+ }
+ `}
+ />
);
diff --git a/packages/fluentui/e2e/package.json b/packages/fluentui/e2e/package.json
index 279209aba3d8ea..2183a6b841ac77 100644
--- a/packages/fluentui/e2e/package.json
+++ b/packages/fluentui/e2e/package.json
@@ -16,8 +16,7 @@
},
"devDependencies": {
"@fluentui/eslint-plugin": "*",
- "@fluentui/scripts": "^1.0.0",
- "gulp": "^4.0.2"
+ "@fluentui/scripts": "^1.0.0"
},
"publishConfig": {
"access": "public"
diff --git a/packages/fluentui/local-sandbox/package.json b/packages/fluentui/local-sandbox/package.json
index 801e8055bb5b9d..09429b6c567271 100644
--- a/packages/fluentui/local-sandbox/package.json
+++ b/packages/fluentui/local-sandbox/package.json
@@ -12,9 +12,7 @@
"dependencies": {
"@fluentui/react-northstar": "^0.64.0"
},
- "devDependencies": {
- "source-map-loader": "2.0.0"
- },
+ "devDependencies": {},
"publishConfig": {
"access": "public"
}
diff --git a/packages/fluentui/projects-test/src/nextjs.ts b/packages/fluentui/projects-test/src/nextjs.ts
index 145d6ef73ddf60..3d0f2d4df342fc 100644
--- a/packages/fluentui/projects-test/src/nextjs.ts
+++ b/packages/fluentui/projects-test/src/nextjs.ts
@@ -19,7 +19,7 @@ export async function nextjs() {
logger(`✔️ Temporary directories created under ${tempPaths.root}`);
logger('STEP 1. Add dependencies to test project');
- const dependencies = ['next', 'react@17', 'react-dom@17'].join(' ');
+ const dependencies = ['next@12', 'react@17', 'react-dom@17'].join(' ');
await shEcho(`yarn add ${dependencies}`, tempPaths.testApp);
logger(`✔️ Dependencies were installed`);
diff --git a/packages/fluentui/react-bindings/src/FocusZone/FocusTrapZone.tsx b/packages/fluentui/react-bindings/src/FocusZone/FocusTrapZone.tsx
index cc44153dddd993..5988a255a46787 100644
--- a/packages/fluentui/react-bindings/src/FocusZone/FocusTrapZone.tsx
+++ b/packages/fluentui/react-bindings/src/FocusZone/FocusTrapZone.tsx
@@ -57,6 +57,7 @@ export class FocusTrapZone extends React.Component {
disableFirstFocus: PropTypes.bool,
focusPreviouslyFocusedInnerElement: PropTypes.bool,
focusTriggerOnOutsideClick: PropTypes.bool,
+ preventScrollOnRestoreFocus: PropTypes.bool,
innerRef: PropTypes.any,
};
@@ -236,9 +237,9 @@ export class FocusTrapZone extends React.Component {
}
};
- _focusAsync(element: HTMLElement): void {
+ _focusAsync(element: HTMLElement, options?: FocusOptions): void {
if (!this._isBumper(element)) {
- focusAsync(element);
+ focusAsync(element, options);
}
}
@@ -285,7 +286,9 @@ export class FocusTrapZone extends React.Component {
// @ts-ignore
(this._root.current.contains(activeElement) || activeElement === doc.body)
) {
- this._focusAsync(this._previouslyFocusedElementOutsideTrapZone);
+ this._focusAsync(this._previouslyFocusedElementOutsideTrapZone, {
+ preventScroll: this.props.preventScrollOnRestoreFocus,
+ });
}
// if last active focus trap zone is going to be released - show previously hidden content in accessibility tree
diff --git a/packages/fluentui/react-bindings/src/FocusZone/FocusTrapZone.types.tsx b/packages/fluentui/react-bindings/src/FocusZone/FocusTrapZone.types.tsx
index 6aa07e18094306..bbde64781f5e08 100644
--- a/packages/fluentui/react-bindings/src/FocusZone/FocusTrapZone.types.tsx
+++ b/packages/fluentui/react-bindings/src/FocusZone/FocusTrapZone.types.tsx
@@ -69,5 +69,11 @@ export interface FocusTrapZoneProps extends React.HTMLAttributes
*/
focusPreviouslyFocusedInnerElement?: boolean;
+ /**
+ * When FocusTrapZone is released, FocusTrapZone will try to restore focus back to the previously focused element;
+ * sometimes focusing on the previously focused element can cause page to scroll. Set this prop to true to prevent scrolling
+ */
+ preventScrollOnRestoreFocus?: boolean;
+
innerRef?: any;
}
diff --git a/packages/fluentui/react-bindings/src/FocusZone/FocusZone.tsx b/packages/fluentui/react-bindings/src/FocusZone/FocusZone.tsx
index 8fc37c6156fada..bb4cc373b09225 100644
--- a/packages/fluentui/react-bindings/src/FocusZone/FocusZone.tsx
+++ b/packages/fluentui/react-bindings/src/FocusZone/FocusZone.tsx
@@ -95,7 +95,13 @@ function _raiseClickFromKeyboardEvent(target: Element, ev?: React.KeyboardEvent<
*/
function _onKeyDownCapture(ev: KeyboardEvent) {
if (getCode(ev) === keyboardKey.Tab) {
- outerZones.getOutZone(getWindow(ev.target as Element)!)?.forEach(zone => zone.updateTabIndexes());
+ outerZones.getOutZone(getWindow(ev.target as Element)!)?.forEach(zone => {
+ if (zone.props.shouldResetActiveElementWhenTabFromZone && document.activeElement !== zone._activeElement) {
+ // when focus is outside of component and shouldResetActiveElementWhenTabFromZone, reset tabIndex
+ zone._activeElement = null;
+ }
+ zone.updateTabIndexes();
+ });
}
}
diff --git a/packages/fluentui/react-bindings/src/FocusZone/focusUtilities.ts b/packages/fluentui/react-bindings/src/FocusZone/focusUtilities.ts
index 2ad4f576f8d41f..a54404c31879cb 100644
--- a/packages/fluentui/react-bindings/src/FocusZone/focusUtilities.ts
+++ b/packages/fluentui/react-bindings/src/FocusZone/focusUtilities.ts
@@ -394,7 +394,10 @@ let targetToFocusOnNextRepaint: HTMLElement | { focus: () => void } | null | und
* only the latest called focusAsync element will actually be focused
* @param element - The element to focus
*/
-export function focusAsync(element: HTMLElement | { focus: () => void } | undefined | null): void {
+export function focusAsync(
+ element: HTMLElement | { focus: (options?: FocusOptions) => void } | undefined | null,
+ options?: FocusOptions,
+): void {
if (element) {
// An element was already queued to be focused, so replace that one with the new element
if (targetToFocusOnNextRepaint) {
@@ -409,7 +412,7 @@ export function focusAsync(element: HTMLElement | { focus: () => void } | undefi
if (win) {
// element.focus() is a no-op if the element is no longer in the DOM, meaning this is always safe
win.requestAnimationFrame(() => {
- targetToFocusOnNextRepaint && targetToFocusOnNextRepaint.focus();
+ targetToFocusOnNextRepaint && targetToFocusOnNextRepaint.focus(options);
// We are done focusing for this frame, so reset the queued focus element
targetToFocusOnNextRepaint = undefined;
diff --git a/packages/fluentui/react-bindings/test/FocusZone/FocusTrapZone-test.tsx b/packages/fluentui/react-bindings/test/FocusZone/FocusTrapZone-test.tsx
index 8101945c769a23..93bc006833a516 100644
--- a/packages/fluentui/react-bindings/test/FocusZone/FocusTrapZone-test.tsx
+++ b/packages/fluentui/react-bindings/test/FocusZone/FocusTrapZone-test.tsx
@@ -5,6 +5,7 @@ import * as ReactDOM from 'react-dom';
import * as ReactTestUtils from 'react-dom/test-utils';
import { createTestContainer } from './test-utils';
+import * as FocusUtilities from '../../src/FocusZone/focusUtilities';
// rAF does not exist in node - let's mock it
window.requestAnimationFrame = (callback: FrameRequestCallback) => {
@@ -793,4 +794,56 @@ describe('FocusTrapZone', () => {
removeTestContainer();
});
});
+
+ describe('Restore focus on unmounting FTZ', () => {
+ const TestComponent = ({ ftzProps }: { ftzProps?: FocusTrapZoneProps }) => {
+ const [open, setOpen] = React.useState(true);
+ return (
+ <>
+ {ReactDOM.createPortal(
+ <>
+ {open && (
+
+ zone button
+
+ )}
+ >,
+ document.body,
+ )}
+
+ setOpen(false)}>
+ button
+
+ >
+ );
+ };
+
+ it.each`
+ ftzProps | preventScroll
+ ${undefined} | ${undefined}
+ ${{ preventScrollOnRestoreFocus: true }} | ${true}
+ `('focus on previously focused element after unmounting the FTZ', async ({ ftzProps, preventScroll }) => {
+ const { testContainer, removeTestContainer } = createTestContainer();
+
+ const focusAsyncSpy = jest.spyOn(FocusUtilities, 'focusAsync');
+ ReactTestUtils.act(() => {
+ ReactDOM.render( , testContainer);
+ });
+
+ // initially FTZ is mounted
+ expect(document.body.querySelector('#zone') as HTMLElement).not.toBeNull();
+
+ // unmount FTZ
+ const unmountButton = testContainer.querySelector('#unmount-zone-button') as HTMLElement;
+ expect(unmountButton).not.toBeNull();
+ ReactTestUtils.Simulate.click(unmountButton);
+
+ // expect zone not is mounted, focus goes to button
+ expect(document.body.querySelector('#zone') as HTMLElement).toBeNull();
+
+ expect(focusAsyncSpy).toHaveBeenCalledWith(expect.any(HTMLElement), { preventScroll });
+
+ removeTestContainer();
+ });
+ });
});
diff --git a/packages/fluentui/react-bindings/test/FocusZone/FocusZone-test.tsx b/packages/fluentui/react-bindings/test/FocusZone/FocusZone-test.tsx
index 7c3f5bee310fa1..6e27cc83539f6f 100644
--- a/packages/fluentui/react-bindings/test/FocusZone/FocusZone-test.tsx
+++ b/packages/fluentui/react-bindings/test/FocusZone/FocusZone-test.tsx
@@ -1852,4 +1852,66 @@ describe('FocusZone', () => {
expect(buttonB.tabIndex).toBe(-1);
expect(buttonC.tabIndex).toBe(0);
});
+
+ it('Update tabIndex when FocusZone is changed before focused', () => {
+ const { testContainer, removeTestContainer } = createTestContainer();
+
+ // Prepare test component
+ // The test component is a 'Add' button + FocusZone.
+ // Initially there're 2 buttons in FocusZone. Click on the 'Add' button adds a 3rd button in focusZone.
+ // context and memo is used to make sure FocusZone component does not re-render during the process.
+ const ShowButton3Context = React.createContext(false);
+
+ const Button3 = () => {
+ const showButton3 = React.useContext(ShowButton3Context);
+ return showButton3 ? (
+
+ added button 3
+
+ ) : null;
+ };
+
+ const getDefaultTabbableElement = () => {
+ const buttons = document.body.getElementsByClassName('button-in-zone');
+ return buttons[buttons.length - 1] as HTMLElement;
+ };
+ const FocusZoneMemo = React.memo(() => (
+
+ button 1
+ button 2
+
+
+ ));
+
+ const TestComponent = () => {
+ const [showButton3, setShowButton3] = React.useState(false);
+
+ return (
+
+ setShowButton3(true)}>
+ Add
+
+
+
+ );
+ };
+ ReactTestUtils.act(() => {
+ ReactDOM.render( , testContainer);
+ });
+
+ // Start test
+ const addButton = document.getElementById('add-button') as HTMLElement;
+ expect(addButton).toBeTruthy();
+
+ ReactTestUtils.Simulate.click(addButton);
+ const button3 = document.getElementById('button-3') as HTMLElement;
+ expect(button3).toBeTruthy();
+
+ // expect tabIndex is recalculated on keydown, button3 now is the default focusable item in FocusZone
+ // (I used dispatchEvent instead of ReactTestUtils.Simulate.keydown because ReactTestUtils doesn't trigger _onKeyDownCapture in focusZone)
+ addButton.dispatchEvent(new KeyboardEvent('keydown', { which: keyboardKey.Tab } as KeyboardEventInit));
+ expect(button3.getAttribute('tabindex')).toBe('0');
+
+ removeTestContainer();
+ });
});
diff --git a/packages/fluentui/react-northstar-fela-renderer/src/felaExpandCssShorthandsPlugin.ts b/packages/fluentui/react-northstar-fela-renderer/src/felaExpandCssShorthandsPlugin.ts
index 99b25169a978d9..de4b9c2786f1e4 100644
--- a/packages/fluentui/react-northstar-fela-renderer/src/felaExpandCssShorthandsPlugin.ts
+++ b/packages/fluentui/react-northstar-fela-renderer/src/felaExpandCssShorthandsPlugin.ts
@@ -1,10 +1,9 @@
import { ICSSInJSStyle } from '@fluentui/styles';
-import * as CSS from 'csstype';
// @ts-ignore
import { expandProperty } from 'inline-style-expand-shorthand';
// https://jsperf.com/array-indexof-vs-object-key-lookup2/12
-const handledCssProps: Partial> = {
+const handledCssProps: Partial> = {
// 'font', Oops, is not supported by inline-style-expand-shorthand
padding: true,
margin: true,
@@ -22,29 +21,32 @@ const handledCssProps: Partial> = {
};
export const felaExpandCssShorthandsPlugin = (styles: ICSSInJSStyle): ICSSInJSStyle => {
- return Object.keys(styles).reduce((acc: ICSSInJSStyle, cssPropertyName: keyof CSS.Properties) => {
+ return Object.keys(styles).reduce((
+ // Without casting to any TSC gives "Expression produces a union type that is too complex to represent" error
+ acc: any,
+ cssPropertyName: keyof ICSSInJSStyle,
+ ) => {
const cssPropertyValue = styles[cssPropertyName];
if (cssPropertyValue === null || typeof cssPropertyValue === 'undefined') {
- return { ...acc, [cssPropertyName]: cssPropertyValue };
- }
-
- if (handledCssProps[cssPropertyName]) {
+ acc[cssPropertyName] = cssPropertyValue;
+ } else if (handledCssProps[cssPropertyName]) {
const expandedProps = expandProperty(cssPropertyName, cssPropertyValue);
if (expandedProps) {
- return { ...acc, ...expandedProps };
+ Object.assign(acc, expandedProps);
+ return acc;
}
- }
-
- if (Array.isArray(cssPropertyValue)) {
- return { ...acc, [cssPropertyName]: cssPropertyValue };
- }
- if (typeof cssPropertyValue === 'object') {
- return { ...acc, [cssPropertyName]: felaExpandCssShorthandsPlugin(cssPropertyValue as ICSSInJSStyle) };
+ acc[cssPropertyName] = cssPropertyValue;
+ } else if (Array.isArray(cssPropertyValue)) {
+ acc[cssPropertyName] = cssPropertyValue;
+ } else if (typeof cssPropertyValue === 'object') {
+ acc[cssPropertyName] = felaExpandCssShorthandsPlugin(cssPropertyValue as ICSSInJSStyle);
+ } else {
+ acc[cssPropertyName] = cssPropertyValue;
}
- return { ...acc, [cssPropertyName]: cssPropertyValue };
+ return acc;
}, {});
};
diff --git a/packages/fluentui/react-northstar-fela-renderer/src/felaStylisEnhancer.ts b/packages/fluentui/react-northstar-fela-renderer/src/felaStylisEnhancer.ts
index e9b842afd92353..f3d214af72176a 100644
--- a/packages/fluentui/react-northstar-fela-renderer/src/felaStylisEnhancer.ts
+++ b/packages/fluentui/react-northstar-fela-renderer/src/felaStylisEnhancer.ts
@@ -6,7 +6,7 @@ import { FelaRenderer, FelaRendererChange } from './types';
// `stylis@3` is a CJS library, there are known issues with them:
// https://github.com/rollup/rollup/issues/1267#issuecomment-446681320
-const Stylis = (_Stylis as any).default || _Stylis;
+const Stylis: typeof import('stylis') = (_Stylis as any).default || _Stylis;
// We use Stylis only for vendor prefixing, all other capabilities are disabled
const stylis = new Stylis({
diff --git a/packages/fluentui/react-northstar-prototypes/package.json b/packages/fluentui/react-northstar-prototypes/package.json
index b33b135a09bf8d..69559e0794fc71 100644
--- a/packages/fluentui/react-northstar-prototypes/package.json
+++ b/packages/fluentui/react-northstar-prototypes/package.json
@@ -36,8 +36,7 @@
"@types/faker": "^4.1.3",
"@types/react-custom-scrollbars": "^4.0.5",
"@types/react-virtualized": "^9.21.8",
- "@types/react-window": "^1.8.2",
- "gulp": "^4.0.2"
+ "@types/react-window": "^1.8.2"
},
"files": [
"dist"
diff --git a/packages/fluentui/react-northstar-prototypes/src/prototypes/chatMessages/ThreadedMessages/classNames.ts b/packages/fluentui/react-northstar-prototypes/src/prototypes/chatMessages/ThreadedMessages/classNames.ts
index 1f566667c5d821..05df9ed8db2b6e 100644
--- a/packages/fluentui/react-northstar-prototypes/src/prototypes/chatMessages/ThreadedMessages/classNames.ts
+++ b/packages/fluentui/react-northstar-prototypes/src/prototypes/chatMessages/ThreadedMessages/classNames.ts
@@ -4,13 +4,14 @@ import {
chatItemSlotClassNames,
chatItemClassName,
chatMessageClassName,
+ chatMessageContentClassName,
} from '@fluentui/react-northstar';
const classNames = {
threadedMessage: {
thread: `${chatMessageClassName}__thread`,
threadBody: `${chatMessageClassName}__thread-body`,
- innerContent: `${chatMessageSlotClassNames.content}-inner`,
+ innerContent: `${chatMessageContentClassName}-inner`,
author: `${chatMessageSlotClassNames.author}-inner`,
timestamp: `${chatMessageSlotClassNames.timestamp}-inner`,
},
diff --git a/packages/fluentui/react-northstar/package.json b/packages/fluentui/react-northstar/package.json
index 9951c334586c3f..e70659ca323cf8 100644
--- a/packages/fluentui/react-northstar/package.json
+++ b/packages/fluentui/react-northstar/package.json
@@ -14,7 +14,7 @@
"@fluentui/react-component-ref": "^0.64.0",
"@fluentui/react-icons-northstar": "^0.64.0",
"@fluentui/react-northstar-styles-renderer": "^0.64.0",
- "@fluentui/react-portal-compat-context": "^9.0.1",
+ "@fluentui/react-portal-compat-context": "^9.0.3",
"@fluentui/react-proptypes": "^0.64.0",
"@fluentui/state": "^0.64.0",
"@fluentui/styles": "^0.64.0",
@@ -35,12 +35,10 @@
"@fluentui/scripts": "^1.0.0",
"@types/classnames": "^2.2.9",
"@types/faker": "^4.1.3",
- "@types/gulp": "^4.0.6",
"@types/simulant": "^0.2.0",
"csstype": "^3.0.2",
"faker": "^4.1.0",
"fela-tools": "^10.6.1",
- "gulp": "^4.0.2",
"lerna-alias": "^3.0.3-0",
"qs": "^6.8.0",
"simulant": "^0.2.2"
diff --git a/packages/fluentui/react-northstar/src/components/Chat/ChatMessage.tsx b/packages/fluentui/react-northstar/src/components/Chat/ChatMessage.tsx
index 01b32a32f448ac..32ad0a8768500f 100644
--- a/packages/fluentui/react-northstar/src/components/Chat/ChatMessage.tsx
+++ b/packages/fluentui/react-northstar/src/components/Chat/ChatMessage.tsx
@@ -17,6 +17,7 @@ import {
useUnhandledProps,
useMergedRefs,
ForwardRefWithAs,
+ mergeVariablesOverrides,
} from '@fluentui/react-bindings';
import { Ref } from '@fluentui/react-component-ref';
import * as customPropTypes from '@fluentui/react-proptypes';
@@ -67,6 +68,7 @@ import { ChatItemContext } from './chatItemContext';
import { ChatMessageDetails, ChatMessageDetailsProps } from './ChatMessageDetails';
import { ChatMessageHeader, ChatMessageHeaderProps } from './ChatMessageHeader';
import { ChatMessageReadStatus, ChatMessageReadStatusProps } from './ChatMessageReadStatus';
+import { ChatMessageContent } from './ChatMessageContent';
export interface ChatMessageSlotClassNames {
actionMenu: string;
@@ -77,7 +79,6 @@ export interface ChatMessageSlotClassNames {
bubbleInset: string;
body: string;
compactBody: string;
- content: string;
reactionGroup: string;
timestamp: string;
}
@@ -226,7 +227,6 @@ export const chatMessageSlotClassNames: ChatMessageSlotClassNames = {
bubble: `${chatMessageClassName}__bubble`,
bubbleInset: `${chatMessageClassName}__bubble-inset`,
compactBody: `${chatMessageClassName}__compact-body`,
- content: `${chatMessageClassName}__content`,
reactionGroup: `${chatMessageClassName}__reactions`,
timestamp: `${chatMessageClassName}__timestamp`,
};
@@ -542,10 +542,10 @@ export const ChatMessage = (React.forwardRef((
}),
});
- const messageContent = Box.create(content, {
- defaultProps: () => ({
- className: chatMessageSlotClassNames.content,
- styles: resolvedStyles.content,
+ const messageContent = createShorthand(ChatMessageContent, content, {
+ defaultProps: () => ({ badgePosition, density, failed, hasBadge: !!badge, mine, unstable_layout: layout }),
+ overrideProps: predefinedProps => ({
+ variables: mergeVariablesOverrides(variables, predefinedProps.variables),
}),
});
diff --git a/packages/fluentui/react-northstar/src/components/Chat/ChatMessageContent.tsx b/packages/fluentui/react-northstar/src/components/Chat/ChatMessageContent.tsx
new file mode 100644
index 00000000000000..8ca7fc7fdc1e35
--- /dev/null
+++ b/packages/fluentui/react-northstar/src/components/Chat/ChatMessageContent.tsx
@@ -0,0 +1,56 @@
+import { compose } from '@fluentui/react-bindings';
+import * as PropTypes from 'prop-types';
+
+import { commonPropTypes } from '../../utils';
+import { Box, BoxProps, BoxStylesProps } from '../Box/Box';
+import { ChatDensity } from './chatDensity';
+import { ChatMessageLayout, ChatMessageProps } from './ChatMessage';
+
+export interface ChatMessageContentOwnProps
+ extends Pick {
+ /** Indicates whether parent ChatMessage has badge. */
+ hasBadge?: boolean;
+}
+export interface ChatMessageContentProps extends ChatMessageContentOwnProps, BoxProps {}
+
+export type ChatMessageContentStylesProps = Required<
+ Pick
+> & {
+ layout: ChatMessageLayout;
+};
+export const chatMessageContentClassName = 'ui-chat__messagecontent';
+
+/**
+ * A ChatMessageContent provides a slot for content in the ChatMessage.
+ */
+export const ChatMessageContent = compose<
+ 'div',
+ ChatMessageContentOwnProps,
+ ChatMessageContentStylesProps,
+ BoxProps,
+ BoxStylesProps
+>(Box, {
+ className: chatMessageContentClassName,
+ displayName: 'ChatMessageContent',
+ handledProps: ['badgePosition', 'density', 'failed', 'hasBadge', 'mine', 'unstable_layout'],
+ mapPropsToStylesProps: ({ badgePosition, density, failed, hasBadge, mine, unstable_layout }) => ({
+ badgePosition,
+ density,
+ failed,
+ hasBadge,
+ layout: unstable_layout,
+ mine,
+ }),
+ overrideStyles: true,
+ shorthandConfig: { mappedProp: 'content' },
+});
+
+ChatMessageContent.propTypes = {
+ ...commonPropTypes.createCommon(),
+ badgePosition: PropTypes.oneOf(['start', 'end']),
+ density: PropTypes.oneOf(['comfy', 'compact']),
+ failed: PropTypes.bool,
+ hasBadge: PropTypes.bool,
+ mine: PropTypes.bool,
+ unstable_layout: PropTypes.oneOf(['default', 'refresh']),
+};
diff --git a/packages/fluentui/react-northstar/src/components/Datepicker/Datepicker.tsx b/packages/fluentui/react-northstar/src/components/Datepicker/Datepicker.tsx
index 01b21c240a9202..d34c3de43cc0b4 100644
--- a/packages/fluentui/react-northstar/src/components/Datepicker/Datepicker.tsx
+++ b/packages/fluentui/react-northstar/src/components/Datepicker/Datepicker.tsx
@@ -170,7 +170,6 @@ export const Datepicker = (React.forwardRef((pr
isRequiredErrorMessage: props.isRequiredErrorMessage,
invalidInputErrorMessage: props.invalidInputErrorMessage,
isOutOfBoundsErrorMessage: props.isOutOfBoundsErrorMessage,
- goToToday: props.goToToday,
openCalendarTitle: props.openCalendarTitle,
inputPlaceholder: props.inputPlaceholder,
prevMonthAriaLabel: props.prevMonthAriaLabel,
@@ -489,7 +488,6 @@ Datepicker.propTypes = {
isRequiredErrorMessage: PropTypes.string,
invalidInputErrorMessage: PropTypes.string,
isOutOfBoundsErrorMessage: PropTypes.string,
- goToToday: PropTypes.string,
openCalendarTitle: PropTypes.string,
inputPlaceholder: PropTypes.string,
prevMonthAriaLabel: PropTypes.string,
diff --git a/packages/fluentui/react-northstar/src/components/Datepicker/DatepickerCalendar.tsx b/packages/fluentui/react-northstar/src/components/Datepicker/DatepickerCalendar.tsx
index a46b4ab06d1cdc..4696b35d4b0d69 100644
--- a/packages/fluentui/react-northstar/src/components/Datepicker/DatepickerCalendar.tsx
+++ b/packages/fluentui/react-northstar/src/components/Datepicker/DatepickerCalendar.tsx
@@ -476,7 +476,6 @@ DatepickerCalendar.propTypes = {
isRequiredErrorMessage: PropTypes.string,
invalidInputErrorMessage: PropTypes.string,
isOutOfBoundsErrorMessage: PropTypes.string,
- goToToday: PropTypes.string,
openCalendarTitle: PropTypes.string,
inputPlaceholder: PropTypes.string,
prevMonthAriaLabel: PropTypes.string,
diff --git a/packages/fluentui/react-northstar/src/components/Dropdown/Dropdown.tsx b/packages/fluentui/react-northstar/src/components/Dropdown/Dropdown.tsx
index 70ab574f0def0c..17c963580a8c23 100644
--- a/packages/fluentui/react-northstar/src/components/Dropdown/Dropdown.tsx
+++ b/packages/fluentui/react-northstar/src/components/Dropdown/Dropdown.tsx
@@ -35,6 +35,7 @@ import {
UIComponentProps,
isFromKeyboard as detectIsFromKeyboard,
createShorthand,
+ setWhatInputSource,
} from '../../utils';
import { List, ListProps } from '../List/List';
import { DropdownItem, DropdownItemProps } from './DropdownItem';
@@ -905,9 +906,14 @@ export const Dropdown = (React.forwardRef((props,
if (allowFreeform) {
// set highlighted index to first item starting with search query
- const itemIndex = items.findIndex(i => itemToString(i)?.startsWith(changes.inputValue));
+ const itemIndex = items.findIndex(i =>
+ itemToString(i)?.toLocaleLowerCase().startsWith(changes.inputValue?.toLowerCase()),
+ );
if (itemIndex !== -1) {
newState.highlightedIndex = itemIndex;
+ // for free form always keep searchQuery and inputValue in sync
+ // as state change might not be called after last letter was entered
+ newState.searchQuery = changes.inputValue;
}
} else {
newState.highlightedIndex = highlightFirstItemOnOpen ? 0 : null;
@@ -938,7 +944,9 @@ export const Dropdown = (React.forwardRef((props,
newState.searchQuery = getSelectedItemAsString(newValue);
if (allowFreeform && !inListbox.current && type === Downshift.stateChangeTypes.keyDownEnter) {
- const itemIndex = items.findIndex(i => itemToString(i)?.startsWith(searchQuery));
+ const itemIndex = items.findIndex(i =>
+ itemToString(i)?.toLocaleLowerCase().startsWith(searchQuery?.toLocaleLowerCase()),
+ );
// if there is an item that starts with searchQuery, still apply the search query
// to do auto complete (you enter '12:', can be completed to '12:00')
@@ -1009,7 +1017,9 @@ export const Dropdown = (React.forwardRef((props,
if (open) {
newState.open = false;
if (allowFreeform) {
- const itemIndex = items.findIndex(i => itemToString(i)?.startsWith(searchQuery));
+ const itemIndex = items.findIndex(i =>
+ itemToString(i)?.toLowerCase().startsWith(searchQuery?.toLowerCase()),
+ );
// if there is an item that starts with searchQuery, still apply the search query
// to do auto complete (you enter '12:', can be completed to '12:00')
@@ -1038,7 +1048,9 @@ export const Dropdown = (React.forwardRef((props,
listRef.current.focus();
}
} else if (allowFreeform) {
- const itemIndex = items.findIndex(i => itemToString(i)?.startsWith(searchQuery));
+ const itemIndex = items.findIndex(i =>
+ itemToString(i)?.toLocaleLowerCase().startsWith(searchQuery.toLowerCase()),
+ );
// if there is an item that starts with searchQuery, still apply the search query
// to do auto complete (you enter '12:', can be completed to '12:00')
@@ -1167,12 +1179,22 @@ export const Dropdown = (React.forwardRef((props,
case keyboardKey.ArrowLeft:
e.stopPropagation();
if (!context.rtl) {
+ // https://github.com/testing-library/user-event/issues/709
+ // JSDOM does not implement `event.view` so prune this code path in test
+ if (process.env.NODE_ENV !== 'test') {
+ setWhatInputSource(e.view.document, 'keyboard');
+ }
trySetLastSelectedItemAsActive();
}
break;
case keyboardKey.ArrowRight:
e.stopPropagation();
if (context.rtl) {
+ // https://github.com/testing-library/user-event/issues/709
+ // JSDOM does not implement `event.view` so prune this code path in test
+ if (process.env.NODE_ENV !== 'test') {
+ setWhatInputSource(e.view.document, 'keyboard');
+ }
trySetLastSelectedItemAsActive();
}
break;
diff --git a/packages/fluentui/react-northstar/src/components/Toolbar/ToolbarMenuItem.tsx b/packages/fluentui/react-northstar/src/components/Toolbar/ToolbarMenuItem.tsx
index ebb0a36e017800..3a78c14b67dbdb 100644
--- a/packages/fluentui/react-northstar/src/components/Toolbar/ToolbarMenuItem.tsx
+++ b/packages/fluentui/react-northstar/src/components/Toolbar/ToolbarMenuItem.tsx
@@ -416,7 +416,12 @@ export const ToolbarMenuItem = compose<'button', ToolbarMenuItemProps, ToolbarMe
-
+
>
);
}}
diff --git a/packages/fluentui/react-northstar/src/index.ts b/packages/fluentui/react-northstar/src/index.ts
index d635199fdb0b96..2e278a33074dbf 100644
--- a/packages/fluentui/react-northstar/src/index.ts
+++ b/packages/fluentui/react-northstar/src/index.ts
@@ -61,6 +61,7 @@ export * from './components/Breadcrumb/BreadcrumbLink';
export * from './components/Chat/Chat';
export * from './components/Chat/ChatItem';
export * from './components/Chat/ChatMessage';
+export * from './components/Chat/ChatMessageContent';
export * from './components/Chat/ChatMessageDetails';
export * from './components/Chat/ChatMessageHeader';
export * from './components/Chat/ChatMessageReadStatus';
diff --git a/packages/fluentui/react-northstar/src/themes/teams/componentStyles.ts b/packages/fluentui/react-northstar/src/themes/teams/componentStyles.ts
index 58d3ec740ef79a..e5508657092a9a 100644
--- a/packages/fluentui/react-northstar/src/themes/teams/componentStyles.ts
+++ b/packages/fluentui/react-northstar/src/themes/teams/componentStyles.ts
@@ -32,6 +32,7 @@ export { breadcrumbStyles as Breadcrumb } from './components/Breadcrumb/breadcru
export { chatStyles as Chat } from './components/Chat/chatStyles';
export { chatItemStyles as ChatItem } from './components/Chat/chatItemStyles';
export { chatMessageStyles as ChatMessage } from './components/Chat/chatMessageStyles';
+export { chatMessageContentStyles as ChatMessageContent } from './components/Chat/chatMessageContentStyles';
export { chatMessageDetailsStyles as ChatMessageDetails } from './components/Chat/chatMessageDetailsStyles';
export { chatMessageReadStatusStyles as ChatMessageReadStatus } from './components/Chat/chatMessageReadStatusStyles';
diff --git a/packages/fluentui/react-northstar/src/themes/teams/componentVariables.ts b/packages/fluentui/react-northstar/src/themes/teams/componentVariables.ts
index e86c403cf2abb7..455b5f6e49e598 100644
--- a/packages/fluentui/react-northstar/src/themes/teams/componentVariables.ts
+++ b/packages/fluentui/react-northstar/src/themes/teams/componentVariables.ts
@@ -31,6 +31,7 @@ export { breadcrumbDividerVariables as BreadcrumbDivider } from './components/Br
export { chatVariables as Chat } from './components/Chat/chatVariables';
export { chatItemVariables as ChatItem } from './components/Chat/chatItemVariables';
export { chatMessageVariables as ChatMessage } from './components/Chat/chatMessageVariables';
+export { chatMessageContentVariables as ChatMessageContent } from './components/Chat/chatMessageContentVariables';
export { chatMessageDetailsVariables as ChatMessageDetails } from './components/Chat/chatMessageDetailsVariables';
export { chatMessageReadStatusVariables as ChatMessageReadStatus } from './components/Chat/chatMessageReadStatusVariables';
diff --git a/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageContentStyles.ts b/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageContentStyles.ts
new file mode 100644
index 00000000000000..a3268ad71db47c
--- /dev/null
+++ b/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageContentStyles.ts
@@ -0,0 +1,45 @@
+import { ComponentSlotStylesPrepared, ICSSInJSStyle } from '@fluentui/styles';
+
+import { ChatMessageContentStylesProps } from '../../../../components/Chat/ChatMessageContent';
+import { ChatMessageVariables } from './chatMessageVariables';
+import { pxToRem } from '../../../../utils';
+
+export const chatMessageContentStyles: ComponentSlotStylesPrepared<
+ ChatMessageContentStylesProps,
+ ChatMessageVariables
+> = {
+ root: (componentStyleFunctionParam): ICSSInJSStyle => {
+ const { props: p, variables: v, theme } = componentStyleFunctionParam;
+ return {
+ color: v.contentColor,
+ display: 'block',
+ '& a': {
+ outline: 'none',
+ color: p.mine ? v.linkColorMine : v.linkColor,
+ ':focus': {
+ textDecoration: 'underline',
+ },
+ },
+
+ ...(p.layout === 'refresh' &&
+ p.density === 'comfy' && {
+ wordBreak: 'break-word',
+ wordWrap: 'break-word',
+ '& a': {
+ color: 'inherit',
+ textDecoration: 'underline',
+ wordBreak: 'break-all',
+ '&:hover': { textDecorationStyle: 'double' },
+ '&:focus': { textDecorationStyle: 'double' },
+ },
+ ...(p.failed && {
+ color: theme.siteVariables.colorScheme.default.foreground,
+ }),
+ }),
+
+ ...(p.density === 'comfy' && {
+ ...(p.hasBadge && p.badgePosition === 'end' && { marginRight: pxToRem(4) }),
+ }),
+ };
+ },
+};
diff --git a/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageContentVariables.ts b/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageContentVariables.ts
new file mode 100644
index 00000000000000..72a5ef81fee76a
--- /dev/null
+++ b/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageContentVariables.ts
@@ -0,0 +1 @@
+export { chatMessageVariables as chatMessageContentVariables } from './chatMessageVariables';
diff --git a/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStyles.ts b/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStyles.ts
index dda9be3a5b6fbe..3d5f9921d98dd1 100644
--- a/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStyles.ts
+++ b/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStyles.ts
@@ -114,22 +114,6 @@ export const chatMessageStyles: ComponentSlotStylesPrepared {
- const { props: p, variables: v } = componentStyleFunctionParam;
- return {
- color: v.contentColor,
- display: 'block',
- '& a': {
- outline: 'none',
- color: p.mine ? v.linkColorMine : v.linkColor,
- ':focus': {
- textDecoration: 'underline',
- },
- },
- ...getChatMessageVariantStyles(p).content?.(componentStyleFunctionParam),
- };
- },
-
badge: (componentStyleFunctionParam): ICSSInJSStyle => {
const { props: p, variables: v } = componentStyleFunctionParam;
return {
diff --git a/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStylesComfy.ts b/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStylesComfy.ts
index 05ec82c172efee..89694a21337614 100644
--- a/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStylesComfy.ts
+++ b/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStylesComfy.ts
@@ -66,10 +66,6 @@ export const chatMessageStylesComfy: ComponentSlotStylesPrepared ({
- ...(p.hasBadge && p.badgePosition === 'end' && { marginRight: pxToRem(4) }),
- }),
-
reactionGroup: ({ props: p, variables: v }) => ({
marginLeft: v.reactionGroupMarginLeft,
...(p.hasBadge && p.badgePosition === 'end' && { marginRight: pxToRem(2) }),
diff --git a/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStylesComfyRefresh.ts b/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStylesComfyRefresh.ts
index 58ce704aebf28d..75825264f73bde 100644
--- a/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStylesComfyRefresh.ts
+++ b/packages/fluentui/react-northstar/src/themes/teams/components/Chat/chatMessageStylesComfyRefresh.ts
@@ -160,22 +160,6 @@ export const chatMessageStylesComfyRefresh: ComponentSlotStylesPrepared<
},
}),
- content: ({ props: p, variables: v, theme }): ICSSInJSStyle => ({
- color: v.contentColor,
- wordBreak: 'break-word',
- wordWrap: 'break-word',
- '& a': {
- color: 'inherit',
- textDecoration: 'underline',
- wordBreak: 'break-all',
- '&:hover': { textDecorationStyle: 'double' },
- '&:focus': { textDecorationStyle: 'double' },
- },
- ...(p.failed && {
- color: theme.siteVariables.colorScheme.default.foreground,
- }),
- }),
-
badge: ({ props: p, variables: v }): ICSSInJSStyle => ({
position: 'relative',
top: pxToRem(-5),
diff --git a/packages/fluentui/react-northstar/src/themes/teams/components/Dropdown/dropdownStyles.ts b/packages/fluentui/react-northstar/src/themes/teams/components/Dropdown/dropdownStyles.ts
index 014133cd89ef1c..8e3d18807fe52c 100644
--- a/packages/fluentui/react-northstar/src/themes/teams/components/Dropdown/dropdownStyles.ts
+++ b/packages/fluentui/react-northstar/src/themes/teams/components/Dropdown/dropdownStyles.ts
@@ -10,15 +10,15 @@ const transparentColorStyle: ICSSInJSStyle = {
borderBottomColor: 'transparent',
};
-const transparentColorStyleObj: ICSSInJSStyle = {
+const createTransparentColorStyleObj = (): ICSSInJSStyle => ({
...transparentColorStyle,
- ':hover': transparentColorStyle,
- ':active': transparentColorStyle,
+ ':hover': { ...transparentColorStyle },
+ ':active': { ...transparentColorStyle },
':focus': {
...transparentColorStyle,
- ':active': transparentColorStyle,
+ ':active': { ...transparentColorStyle },
},
-};
+});
const getWidth = (p: DropdownStylesProps, v: DropdownVariables): string => {
if (p.fluid) {
@@ -99,7 +99,7 @@ export const dropdownStyles: ComponentSlotStylesPrepared {
eventTarget.addEventListener('keyup', eventBuffer, true);
};
+/**
+ *
+ * @param document document to apply the update to
+ * @param eventKey keyboard key passed from the event
+ * @returns true if mode should be switched, false if not (when an input-like element is focused, and the key was not a navigational key)
+ */
+const keyboardInputFocused = (document: Document, eventKey: number) => {
+ if (
+ document.activeElement.tagName === 'INPUT' ||
+ document.activeElement.tagName === 'TEXTAREA' ||
+ document.activeElement.getAttribute('contenteditable')
+ ) {
+ return (
+ eventKey === 9 || // tab
+ eventKey === 117
+ ); // F6
+ }
+ return true;
+};
+
// checks conditions before updating new input
const setInput = (event: WhatInputEvents) => {
// only execute if the event buffer timer isn't running
@@ -120,7 +140,10 @@ const setInput = (event: WhatInputEvents) => {
}
const ignoreMatch = ignoreMap.indexOf(eventKey) === -1;
- const shouldUpdate = (value === 'keyboard' && eventKey && ignoreMatch) || value === 'mouse' || value === 'touch';
+ const shouldUpdate =
+ (value === 'keyboard' && eventKey && ignoreMatch && keyboardInputFocused(event.view.document, eventKey)) ||
+ value === 'mouse' ||
+ value === 'touch';
if (currentInput !== value && shouldUpdate) {
currentInput = value;
diff --git a/packages/fluentui/react-northstar/test/specs/components/Chat/ChatMessage-test.tsx b/packages/fluentui/react-northstar/test/specs/components/Chat/ChatMessage-test.tsx
index 012f57f9a746cf..ffd1a2ee925037 100644
--- a/packages/fluentui/react-northstar/test/specs/components/Chat/ChatMessage-test.tsx
+++ b/packages/fluentui/react-northstar/test/specs/components/Chat/ChatMessage-test.tsx
@@ -2,8 +2,8 @@ import { handlesAccessibility, implementsShorthandProp, isConformant } from 'tes
import { ChatMessage } from 'src/components/Chat/ChatMessage';
import { Text } from 'src/components/Text/Text';
-import { Box } from 'src/components/Box/Box';
import { ChatMessageDetails } from 'src/components/Chat/ChatMessageDetails';
+import { ChatMessageContent } from 'src/components/Chat/ChatMessageContent';
const chatMessageImplementsShorthandProp = implementsShorthandProp(ChatMessage);
@@ -19,7 +19,7 @@ describe('ChatMessage', () => {
chatMessageImplementsShorthandProp('author', Text);
chatMessageImplementsShorthandProp('timestamp', Text);
chatMessageImplementsShorthandProp('details', ChatMessageDetails);
- chatMessageImplementsShorthandProp('content', Box, { mapsValueToProp: 'children' });
+ chatMessageImplementsShorthandProp('content', ChatMessageContent);
describe('accessibility', () => {
handlesAccessibility(ChatMessage);
diff --git a/packages/fluentui/react-northstar/test/specs/components/Chat/ChatMessageContent-test.tsx b/packages/fluentui/react-northstar/test/specs/components/Chat/ChatMessageContent-test.tsx
new file mode 100644
index 00000000000000..ee518926040569
--- /dev/null
+++ b/packages/fluentui/react-northstar/test/specs/components/Chat/ChatMessageContent-test.tsx
@@ -0,0 +1,9 @@
+import { ChatMessageContent } from 'src/components/Chat/ChatMessageContent';
+import { isConformant } from 'test/specs/commonTests';
+
+describe('ChatMessageContent', () => {
+ isConformant(ChatMessageContent, {
+ testPath: __filename,
+ constructorName: 'ChatMessageContent',
+ });
+});
diff --git a/packages/font-icons-mdl2/CHANGELOG.json b/packages/font-icons-mdl2/CHANGELOG.json
index 7cbdc47a1961f0..83503472707929 100644
--- a/packages/font-icons-mdl2/CHANGELOG.json
+++ b/packages/font-icons-mdl2/CHANGELOG.json
@@ -1,6 +1,60 @@
{
"name": "@fluentui/font-icons-mdl2",
"entries": [
+ {
+ "date": "Thu, 20 Oct 2022 07:43:14 GMT",
+ "tag": "@fluentui/font-icons-mdl2_v8.5.2",
+ "version": "8.5.2",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/font-icons-mdl2",
+ "comment": "Bump @fluentui/style-utilities to v8.8.1",
+ "commit": "433209a6b5e8adb7619d3658c1606ec8adb02745"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/font-icons-mdl2",
+ "comment": "Bump @fluentui/utilities to v8.13.2",
+ "commit": "433209a6b5e8adb7619d3658c1606ec8adb02745"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 10 Oct 2022 07:38:24 GMT",
+ "tag": "@fluentui/font-icons-mdl2_v8.5.1",
+ "version": "8.5.1",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/font-icons-mdl2",
+ "comment": "Bump @fluentui/style-utilities to v8.8.0",
+ "commit": "c0b200c4c2ce25dbe3b95f8fc08454e362d25e17"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 07:37:49 GMT",
+ "tag": "@fluentui/font-icons-mdl2_v8.5.0",
+ "version": "8.5.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "gcox@microsoft.com",
+ "package": "@fluentui/font-icons-mdl2",
+ "commit": "6112cd720c2a15635eae7175f22ec53510dd511c",
+ "comment": {
+ "title": "",
+ "value": ""
+ }
+ }
+ ]
+ }
+ },
{
"date": "Fri, 02 Sep 2022 07:48:53 GMT",
"tag": "@fluentui/font-icons-mdl2_v8.4.13",
diff --git a/packages/font-icons-mdl2/CHANGELOG.md b/packages/font-icons-mdl2/CHANGELOG.md
index 4beefde6cdbc67..5a16a0a583853b 100644
--- a/packages/font-icons-mdl2/CHANGELOG.md
+++ b/packages/font-icons-mdl2/CHANGELOG.md
@@ -1,9 +1,37 @@
# Change Log - @fluentui/font-icons-mdl2
-This log was last generated on Fri, 02 Sep 2022 07:48:53 GMT and should not be manually modified.
+This log was last generated on Thu, 20 Oct 2022 07:43:14 GMT and should not be manually modified.
+## [8.5.2](https://github.com/microsoft/fluentui/tree/@fluentui/font-icons-mdl2_v8.5.2)
+
+Thu, 20 Oct 2022 07:43:14 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/font-icons-mdl2_v8.5.1..@fluentui/font-icons-mdl2_v8.5.2)
+
+### Patches
+
+- Bump @fluentui/style-utilities to v8.8.1 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by beachball)
+- Bump @fluentui/utilities to v8.13.2 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by beachball)
+
+## [8.5.1](https://github.com/microsoft/fluentui/tree/@fluentui/font-icons-mdl2_v8.5.1)
+
+Mon, 10 Oct 2022 07:38:24 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/font-icons-mdl2_v8.5.0..@fluentui/font-icons-mdl2_v8.5.1)
+
+### Patches
+
+- Bump @fluentui/style-utilities to v8.8.0 ([PR #25138](https://github.com/microsoft/fluentui/pull/25138) by beachball)
+
+## [8.5.0](https://github.com/microsoft/fluentui/tree/@fluentui/font-icons-mdl2_v8.5.0)
+
+Mon, 03 Oct 2022 07:37:49 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/font-icons-mdl2_v8.4.13..@fluentui/font-icons-mdl2_v8.5.0)
+
+### Minor changes
+
+- [object Object] ([PR #24957](https://github.com/microsoft/fluentui/pull/24957) by gcox@microsoft.com)
+
## [8.4.13](https://github.com/microsoft/fluentui/tree/@fluentui/font-icons-mdl2_v8.4.13)
Fri, 02 Sep 2022 07:48:53 GMT
diff --git a/packages/font-icons-mdl2/etc/font-icons-mdl2.api.md b/packages/font-icons-mdl2/etc/font-icons-mdl2.api.md
index 8c3dd61be1398c..b40c4860a8daac 100644
--- a/packages/font-icons-mdl2/etc/font-icons-mdl2.api.md
+++ b/packages/font-icons-mdl2/etc/font-icons-mdl2.api.md
@@ -3613,8 +3613,10 @@ export const enum IconNames {
}
// @public (undocumented)
-export function initializeIcons(baseUrl?: string, options?: IIconOptions): void;
+export type IconNamesInput = keyof typeof IconNames;
+// @public (undocumented)
+export function initializeIcons(baseUrl?: string, options?: IIconOptions): void;
// (No @packageDocumentation comment for this package)
diff --git a/packages/font-icons-mdl2/package.json b/packages/font-icons-mdl2/package.json
index 58d41a9c12aae5..02d786f7bd4796 100644
--- a/packages/font-icons-mdl2/package.json
+++ b/packages/font-icons-mdl2/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/font-icons-mdl2",
- "version": "8.4.13",
+ "version": "8.5.2",
"description": "Fluent UI React icon set.",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -27,8 +27,8 @@
},
"dependencies": {
"@fluentui/set-version": "^8.2.2",
- "@fluentui/style-utilities": "^8.7.12",
- "@fluentui/utilities": "^8.13.1",
+ "@fluentui/style-utilities": "^8.8.1",
+ "@fluentui/utilities": "^8.13.2",
"tslib": "^2.1.0"
},
"exports": {
diff --git a/packages/font-icons-mdl2/src/index.ts b/packages/font-icons-mdl2/src/index.ts
index ea70102a5768f9..58d83f1f78d113 100644
--- a/packages/font-icons-mdl2/src/index.ts
+++ b/packages/font-icons-mdl2/src/index.ts
@@ -88,6 +88,6 @@ export function initializeIcons(
}
// eslint-disable-next-line deprecation/deprecation
-export { IconNames } from './IconNames';
+export { IconNames, IconNamesInput } from './IconNames';
import './version';
diff --git a/packages/foundation-legacy/CHANGELOG.json b/packages/foundation-legacy/CHANGELOG.json
index e4cdda7da01444..7fb875167430e3 100644
--- a/packages/foundation-legacy/CHANGELOG.json
+++ b/packages/foundation-legacy/CHANGELOG.json
@@ -1,6 +1,48 @@
{
"name": "@fluentui/foundation-legacy",
"entries": [
+ {
+ "date": "Thu, 20 Oct 2022 07:43:14 GMT",
+ "tag": "@fluentui/foundation-legacy_v8.2.22",
+ "version": "8.2.22",
+ "comments": {
+ "patch": [
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/foundation-legacy",
+ "commit": "772f9e3ebde2d5b8157a3204c1a4e007e56f5508",
+ "comment": "chore: Bump react peer dependency to react 18."
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/foundation-legacy",
+ "comment": "Bump @fluentui/style-utilities to v8.8.1",
+ "commit": "433209a6b5e8adb7619d3658c1606ec8adb02745"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/foundation-legacy",
+ "comment": "Bump @fluentui/utilities to v8.13.2",
+ "commit": "433209a6b5e8adb7619d3658c1606ec8adb02745"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 10 Oct 2022 07:38:24 GMT",
+ "tag": "@fluentui/foundation-legacy_v8.2.21",
+ "version": "8.2.21",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/foundation-legacy",
+ "comment": "Bump @fluentui/style-utilities to v8.8.0",
+ "commit": "c0b200c4c2ce25dbe3b95f8fc08454e362d25e17"
+ }
+ ]
+ }
+ },
{
"date": "Fri, 02 Sep 2022 07:48:53 GMT",
"tag": "@fluentui/foundation-legacy_v8.2.20",
diff --git a/packages/foundation-legacy/CHANGELOG.md b/packages/foundation-legacy/CHANGELOG.md
index c5c72372027442..e7f32e088e6a3c 100644
--- a/packages/foundation-legacy/CHANGELOG.md
+++ b/packages/foundation-legacy/CHANGELOG.md
@@ -1,9 +1,29 @@
# Change Log - @fluentui/foundation-legacy
-This log was last generated on Fri, 02 Sep 2022 07:48:53 GMT and should not be manually modified.
+This log was last generated on Thu, 20 Oct 2022 07:43:14 GMT and should not be manually modified.
+## [8.2.22](https://github.com/microsoft/fluentui/tree/@fluentui/foundation-legacy_v8.2.22)
+
+Thu, 20 Oct 2022 07:43:14 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/foundation-legacy_v8.2.21..@fluentui/foundation-legacy_v8.2.22)
+
+### Patches
+
+- chore: Bump react peer dependency to react 18. ([PR #25278](https://github.com/microsoft/fluentui/pull/25278) by mgodbolt@microsoft.com)
+- Bump @fluentui/style-utilities to v8.8.1 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by beachball)
+- Bump @fluentui/utilities to v8.13.2 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by beachball)
+
+## [8.2.21](https://github.com/microsoft/fluentui/tree/@fluentui/foundation-legacy_v8.2.21)
+
+Mon, 10 Oct 2022 07:38:24 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/foundation-legacy_v8.2.20..@fluentui/foundation-legacy_v8.2.21)
+
+### Patches
+
+- Bump @fluentui/style-utilities to v8.8.0 ([PR #25138](https://github.com/microsoft/fluentui/pull/25138) by beachball)
+
## [8.2.20](https://github.com/microsoft/fluentui/tree/@fluentui/foundation-legacy_v8.2.20)
Fri, 02 Sep 2022 07:48:53 GMT
diff --git a/packages/foundation-legacy/package.json b/packages/foundation-legacy/package.json
index f6e6862eacbb4f..9286d3d97c266b 100644
--- a/packages/foundation-legacy/package.json
+++ b/packages/foundation-legacy/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/foundation-legacy",
- "version": "8.2.20",
+ "version": "8.2.22",
"description": "Legacy utilities for building Fluent UI React components.",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -33,13 +33,13 @@
"dependencies": {
"@fluentui/merge-styles": "^8.5.3",
"@fluentui/set-version": "^8.2.2",
- "@fluentui/style-utilities": "^8.7.12",
- "@fluentui/utilities": "^8.13.1",
+ "@fluentui/style-utilities": "^8.8.1",
+ "@fluentui/utilities": "^8.13.2",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0"
+ "@types/react": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0"
},
"exports": {
".": {
diff --git a/packages/public-docsite-setup/CHANGELOG.json b/packages/public-docsite-setup/CHANGELOG.json
index 7a94f3495b1033..e7751424316f41 100644
--- a/packages/public-docsite-setup/CHANGELOG.json
+++ b/packages/public-docsite-setup/CHANGELOG.json
@@ -1,6 +1,36 @@
{
"name": "@fluentui/public-docsite-setup",
"entries": [
+ {
+ "date": "Mon, 10 Oct 2022 07:38:21 GMT",
+ "tag": "@fluentui/public-docsite-setup_v0.3.12",
+ "version": "0.3.12",
+ "comments": {
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/public-docsite-setup",
+ "commit": "337a32b1a4f2e82235e193e115666aee659c650c",
+ "comment": "chore: apply single version policy"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 12 Sep 2022 07:39:53 GMT",
+ "tag": "@fluentui/public-docsite-setup_v0.3.12",
+ "version": "0.3.12",
+ "comments": {
+ "patch": [
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/public-docsite-setup",
+ "commit": "21e6fe30633c31318137a066bc7ccb1b2cf299e4",
+ "comment": "return skipToMain functionality and hide back to top button"
+ }
+ ]
+ }
+ },
{
"date": "Thu, 01 Sep 2022 07:48:10 GMT",
"tag": "@fluentui/public-docsite-setup_v0.3.11",
diff --git a/packages/public-docsite-setup/CHANGELOG.md b/packages/public-docsite-setup/CHANGELOG.md
index 5e92d49a2f7d66..0f944052eae7a0 100644
--- a/packages/public-docsite-setup/CHANGELOG.md
+++ b/packages/public-docsite-setup/CHANGELOG.md
@@ -1,9 +1,18 @@
# Change Log - @fluentui/public-docsite-setup
-This log was last generated on Thu, 01 Sep 2022 07:48:10 GMT and should not be manually modified.
+This log was last generated on Mon, 12 Sep 2022 07:39:53 GMT and should not be manually modified.
+## [0.3.12](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-setup_v0.3.12)
+
+Mon, 12 Sep 2022 07:39:53 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/public-docsite-setup_v0.3.11..@fluentui/public-docsite-setup_v0.3.12)
+
+### Patches
+
+- return skipToMain functionality and hide back to top button ([PR #24745](https://github.com/microsoft/fluentui/pull/24745) by mgodbolt@microsoft.com)
+
## [0.3.11](https://github.com/microsoft/fluentui/tree/@fluentui/public-docsite-setup_v0.3.11)
Thu, 01 Sep 2022 07:48:10 GMT
diff --git a/packages/public-docsite-setup/index.html b/packages/public-docsite-setup/index.html
index 126587b45a2a96..5abd249be661cb 100644
--- a/packages/public-docsite-setup/index.html
+++ b/packages/public-docsite-setup/index.html
@@ -66,7 +66,7 @@
- Skip to main content
+ Skip to main content
+## [0.205.17](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.17)
+
+Wed, 26 Oct 2022 07:52:54 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.16..@fluentui/react-cards_v0.205.17)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.8 ([PR #25381](https://github.com/microsoft/fluentui/pull/25381) by beachball)
+
+## [0.205.16](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.16)
+
+Tue, 25 Oct 2022 07:43:18 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.15..@fluentui/react-cards_v0.205.16)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.7 ([PR #24903](https://github.com/microsoft/fluentui/pull/24903) by beachball)
+
+## [0.205.15](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.15)
+
+Mon, 24 Oct 2022 07:45:24 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.14..@fluentui/react-cards_v0.205.15)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.6 ([PR #25226](https://github.com/microsoft/fluentui/pull/25226) by beachball)
+
+## [0.205.14](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.14)
+
+Fri, 21 Oct 2022 07:44:53 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.13..@fluentui/react-cards_v0.205.14)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.5 ([PR #24283](https://github.com/microsoft/fluentui/pull/24283) by beachball)
+
+## [0.205.13](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.13)
+
+Thu, 20 Oct 2022 07:43:14 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.12..@fluentui/react-cards_v0.205.13)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.4 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by beachball)
+- Bump @fluentui/foundation-legacy to v8.2.22 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by beachball)
+
+## [0.205.12](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.12)
+
+Mon, 17 Oct 2022 07:49:17 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.11..@fluentui/react-cards_v0.205.12)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.3 ([PR #25219](https://github.com/microsoft/fluentui/pull/25219) by beachball)
+
+## [0.205.11](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.11)
+
+Fri, 14 Oct 2022 07:43:59 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.10..@fluentui/react-cards_v0.205.11)
+
+### Patches
+
+- chore: Bump v8 packages peer deps to include React 18 ([PR #24976](https://github.com/microsoft/fluentui/pull/24976) by mgodbolt@microsoft.com)
+- Bump @fluentui/react to v8.98.2 ([PR #24976](https://github.com/microsoft/fluentui/pull/24976) by beachball)
+
+## [0.205.10](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.10)
+
+Thu, 13 Oct 2022 07:45:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.9..@fluentui/react-cards_v0.205.10)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.1 ([PR #25198](https://github.com/microsoft/fluentui/pull/25198) by beachball)
+
+## [0.205.9](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.9)
+
+Mon, 10 Oct 2022 07:38:24 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.8..@fluentui/react-cards_v0.205.9)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.0 ([PR #25138](https://github.com/microsoft/fluentui/pull/25138) by beachball)
+- Bump @fluentui/foundation-legacy to v8.2.21 ([PR #25138](https://github.com/microsoft/fluentui/pull/25138) by beachball)
+
+## [0.205.8](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.8)
+
+Tue, 04 Oct 2022 07:45:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.7..@fluentui/react-cards_v0.205.8)
+
+### Patches
+
+- Bump @fluentui/react to v8.97.2 ([PR #24947](https://github.com/microsoft/fluentui/pull/24947) by beachball)
+
+## [0.205.7](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.7)
+
+Mon, 03 Oct 2022 07:37:49 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.6..@fluentui/react-cards_v0.205.7)
+
+### Patches
+
+- Bump @fluentui/react to v8.97.1 ([PR #25022](https://github.com/microsoft/fluentui/pull/25022) by beachball)
+
+## [0.205.6](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.6)
+
+Fri, 30 Sep 2022 07:38:09 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.5..@fluentui/react-cards_v0.205.6)
+
+### Patches
+
+- Bump @fluentui/react to v8.97.0 ([PR #25025](https://github.com/microsoft/fluentui/pull/25025) by beachball)
+
+## [0.205.5](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.5)
+
+Thu, 29 Sep 2022 07:40:10 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.4..@fluentui/react-cards_v0.205.5)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.3 ([PR #24990](https://github.com/microsoft/fluentui/pull/24990) by beachball)
+
+## [0.205.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.4)
+
+Wed, 28 Sep 2022 07:37:49 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.3..@fluentui/react-cards_v0.205.4)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.2 ([PR #24900](https://github.com/microsoft/fluentui/pull/24900) by beachball)
+
+## [0.205.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.3)
+
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.2..@fluentui/react-cards_v0.205.3)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [0.205.2](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.2)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.1..@fluentui/react-cards_v0.205.2)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [0.205.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.1)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.0..@fluentui/react-cards_v0.205.1)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [0.205.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.0)
+
+Thu, 15 Sep 2022 19:15:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.204.35..@fluentui/react-cards_v0.205.0)
+
+### Minor changes
+
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+## [0.204.35](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.204.35)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.204.34..@fluentui/react-cards_v0.204.35)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [0.204.34](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.204.34)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.204.33..@fluentui/react-cards_v0.204.34)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [0.204.33](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.204.33)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.204.32..@fluentui/react-cards_v0.204.33)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
## [0.204.32](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.204.32)
Mon, 05 Sep 2022 07:38:30 GMT
diff --git a/packages/react-cards/package.json b/packages/react-cards/package.json
index 092b3ef4b5fd4f..4a41a38fdb1a34 100644
--- a/packages/react-cards/package.json
+++ b/packages/react-cards/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/react-cards",
- "version": "0.204.32",
+ "version": "0.205.17",
"description": "Deprecated experimental Card container components for Fluent UI React.",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -31,17 +31,17 @@
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
- "@fluentui/react": "^8.94.1",
- "@fluentui/foundation-legacy": "^8.2.20",
+ "@fluentui/react": "^8.98.8",
+ "@fluentui/foundation-legacy": "^8.2.22",
"@fluentui/set-version": "^8.2.2",
"@microsoft/load-themed-styles": "^1.10.26",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0"
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0"
},
"exports": {
".": {
diff --git a/packages/react-cards/src/components/Card/CardItem/__snapshots__/CardItem.test.tsx.snap b/packages/react-cards/src/components/Card/CardItem/__snapshots__/CardItem.test.tsx.snap
index 392d27fd8cf212..af7d9b8ba8f738 100644
--- a/packages/react-cards/src/components/Card/CardItem/__snapshots__/CardItem.test.tsx.snap
+++ b/packages/react-cards/src/components/Card/CardItem/__snapshots__/CardItem.test.tsx.snap
@@ -28,9 +28,6 @@ exports[`Card Item renders correctly 1`] = `
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -95,9 +92,6 @@ exports[`Card Item renders correctly when filling up the margins while being the
& > *:not(:first-child) {
margin-left: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -188,9 +182,6 @@ exports[`Card Item renders correctly when filling up the margins while being the
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -281,9 +272,6 @@ exports[`Card Item renders correctly when filling up the margins while being the
& > *:not(:first-child) {
margin-left: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -374,9 +362,6 @@ exports[`Card Item renders correctly when filling up the margins while being the
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -467,9 +452,6 @@ exports[`Card Item renders correctly when filling up the margins while being the
& > *:not(:first-child) {
margin-left: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -586,9 +568,6 @@ exports[`Card Item renders correctly when filling up the margins while being the
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -705,9 +684,6 @@ exports[`Card Item renders correctly when filling up the margins while being the
& > *:not(:first-child) {
margin-left: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -772,9 +748,6 @@ exports[`Card Item renders correctly when filling up the margins while being the
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -839,9 +812,6 @@ exports[`Card Item renders correctly when having tokens passed to it 1`] = `
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
diff --git a/packages/react-cards/src/components/Card/CardSection/__snapshots__/CardSection.test.tsx.snap b/packages/react-cards/src/components/Card/CardSection/__snapshots__/CardSection.test.tsx.snap
index 654b87f43cc25f..0ed9e2944856a4 100644
--- a/packages/react-cards/src/components/Card/CardSection/__snapshots__/CardSection.test.tsx.snap
+++ b/packages/react-cards/src/components/Card/CardSection/__snapshots__/CardSection.test.tsx.snap
@@ -28,9 +28,6 @@ exports[`Card Section renders correctly 1`] = `
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -69,9 +66,6 @@ exports[`Card Section renders correctly 1`] = `
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -106,9 +100,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-left: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -147,9 +138,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -184,9 +172,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -221,9 +206,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -262,9 +244,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -299,9 +278,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -336,9 +312,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-left: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -377,9 +350,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -414,9 +384,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -451,9 +418,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -492,9 +456,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -529,9 +490,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -566,9 +524,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-left: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -607,9 +562,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -644,9 +596,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -681,9 +630,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -718,9 +664,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -759,9 +702,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -796,9 +736,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -833,9 +770,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -870,9 +804,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-left: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -911,9 +842,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -948,9 +876,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -989,9 +914,6 @@ exports[`Card Section renders correctly when filling up the margins while being
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
@@ -1026,9 +948,6 @@ exports[`Card Section renders correctly when having tokens passed to it 1`] = `
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
@media screen and (-ms-high-contrast: active), screen and (forced-colors: active){& {
box-shadow: 0 1.6px 3.6px 0 Highlight, 0 0.3px 0.9px 0 Highlight;
}
@@ -1067,9 +986,6 @@ exports[`Card Section renders correctly when having tokens passed to it 1`] = `
& > *:not(:first-child) {
margin-top: 12px;
}
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
>
diff --git a/packages/react-cards/src/components/Card/__snapshots__/Card.view.test.tsx.snap b/packages/react-cards/src/components/Card/__snapshots__/Card.view.test.tsx.snap
index 0249ec663bb7b8..2ca22ba1090728 100644
--- a/packages/react-cards/src/components/Card/__snapshots__/Card.view.test.tsx.snap
+++ b/packages/react-cards/src/components/Card/__snapshots__/Card.view.test.tsx.snap
@@ -17,12 +17,6 @@ exports[`CardView renders a Horizontal Card with an onClick function specified c
& > * {
text-overflow: ellipsis;
}
- & > *:not(:first-child) {
- margin-left: 0px;
- }
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
onClick={[Function]}
onKeyDown={[Function]}
role="button"
@@ -70,12 +64,6 @@ exports[`CardView renders a Horizontal Card with contents correctly 1`] = `
& > * {
text-overflow: ellipsis;
}
- & > *:not(:first-child) {
- margin-left: 0px;
- }
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
onKeyDown={[Function]}
role="presentation"
tabIndex={-1}
@@ -166,12 +154,6 @@ exports[`CardView renders a Horizontal Card without contents correctly 1`] = `
& > * {
text-overflow: ellipsis;
}
- & > *:not(:first-child) {
- margin-left: 0px;
- }
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
onKeyDown={[Function]}
role="presentation"
tabIndex={-1}
@@ -195,12 +177,6 @@ exports[`CardView renders a Vertical Card with an onClick function specified cor
& > * {
text-overflow: ellipsis;
}
- & > *:not(:first-child) {
- margin-top: 0px;
- }
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
onClick={[Function]}
onKeyDown={[Function]}
role="button"
@@ -248,12 +224,6 @@ exports[`CardView renders a Vertical Card with contents correctly 1`] = `
& > * {
text-overflow: ellipsis;
}
- & > *:not(:first-child) {
- margin-top: 0px;
- }
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
onKeyDown={[Function]}
role="presentation"
tabIndex={-1}
@@ -344,12 +314,6 @@ exports[`CardView renders a Vertical Card without contents correctly 1`] = `
& > * {
text-overflow: ellipsis;
}
- & > *:not(:first-child) {
- margin-top: 0px;
- }
- & > *:not(.ms-StackItem) {
- flex-shrink: 1;
- }
onKeyDown={[Function]}
role="presentation"
tabIndex={-1}
diff --git a/packages/react-charting/CHANGELOG.json b/packages/react-charting/CHANGELOG.json
index a27749441bee8f..b9ac6009ca20c0 100644
--- a/packages/react-charting/CHANGELOG.json
+++ b/packages/react-charting/CHANGELOG.json
@@ -1,6 +1,450 @@
{
"name": "@fluentui/react-charting",
"entries": [
+ {
+ "date": "Wed, 26 Oct 2022 07:52:53 GMT",
+ "tag": "@fluentui/react-charting_v5.14.7",
+ "version": "5.14.7",
+ "comments": {
+ "patch": [
+ {
+ "author": "kumarkshitij@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "fd0e28e497856c9ddb6c82d0b6b336f5c263fb7e",
+ "comment": "Fix wrong narration when legend selected"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react-focus to v8.8.8",
+ "commit": "135655c2e9e32b5d50610d17792768ba0cb4e65e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.98.8",
+ "commit": "135655c2e9e32b5d50610d17792768ba0cb4e65e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 25 Oct 2022 07:43:18 GMT",
+ "tag": "@fluentui/react-charting_v5.14.6",
+ "version": "5.14.6",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.98.7",
+ "commit": "fd0e28e497856c9ddb6c82d0b6b336f5c263fb7e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 24 Oct 2022 07:45:24 GMT",
+ "tag": "@fluentui/react-charting_v5.14.5",
+ "version": "5.14.5",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.98.6",
+ "commit": "e255da7cf629534ebaaac05af3b5bb9a2f7def71"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 21 Oct 2022 07:44:53 GMT",
+ "tag": "@fluentui/react-charting_v5.14.4",
+ "version": "5.14.4",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.98.5",
+ "commit": "dd063ac623ca90e1fe919ff4471eae017bbf5576"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 07:43:14 GMT",
+ "tag": "@fluentui/react-charting_v5.14.3",
+ "version": "5.14.3",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react-focus to v8.8.7",
+ "commit": "433209a6b5e8adb7619d3658c1606ec8adb02745"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.98.4",
+ "commit": "433209a6b5e8adb7619d3658c1606ec8adb02745"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 18 Oct 2022 07:42:43 GMT",
+ "tag": "@fluentui/react-charting_v5.14.2",
+ "version": "5.14.2",
+ "comments": {
+ "patch": [
+ {
+ "author": "kumarkshitij@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "eff4a290cbb0ca8fd7023be1e46b2719564743e6",
+ "comment": "Fix chart title overflow"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 17 Oct 2022 07:49:17 GMT",
+ "tag": "@fluentui/react-charting_v5.14.1",
+ "version": "5.14.1",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.98.3",
+ "commit": "e14e5348f1f08aee8da7cb911a24a811d9f9cb09"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 14 Oct 2022 07:44:00 GMT",
+ "tag": "@fluentui/react-charting_v5.14.0",
+ "version": "5.14.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "atishay.jain@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "77301c97c0539b9ebf891642eb0a077d1aeae9a6",
+ "comment": "Update d3-scale version to 4.0.0"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.98.2",
+ "commit": "82650ef8b3d436c039e33f3eb8a658a3d878064f"
+ }
+ ],
+ "patch": [
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "82650ef8b3d436c039e33f3eb8a658a3d878064f",
+ "comment": "chore: Bump v8 packages peer deps to include React 18"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 07:45:27 GMT",
+ "tag": "@fluentui/react-charting_v5.13.11",
+ "version": "5.13.11",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.98.1",
+ "commit": "4f46035db0cd28a5987932120c68755e024869c8"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 10 Oct 2022 07:38:24 GMT",
+ "tag": "@fluentui/react-charting_v5.13.10",
+ "version": "5.13.10",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react-focus to v8.8.6",
+ "commit": "c0b200c4c2ce25dbe3b95f8fc08454e362d25e17"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.98.0",
+ "commit": "c0b200c4c2ce25dbe3b95f8fc08454e362d25e17"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 04 Oct 2022 07:45:03 GMT",
+ "tag": "@fluentui/react-charting_v5.13.9",
+ "version": "5.13.9",
+ "comments": {
+ "patch": [
+ {
+ "author": "atishay.jain@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "4794f4f540c6df5dcf04fe12f18ee217084a1452",
+ "comment": {
+ "title": "",
+ "value": ""
+ }
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.97.2",
+ "commit": "33559052b672f787b021bd2fbc9826e88ce2a2de"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 07:37:49 GMT",
+ "tag": "@fluentui/react-charting_v5.13.8",
+ "version": "5.13.8",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.97.1",
+ "commit": "86b3133d97c177cac545b253deb11374ee829574"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 30 Sep 2022 07:38:09 GMT",
+ "tag": "@fluentui/react-charting_v5.13.7",
+ "version": "5.13.7",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.97.0",
+ "commit": "fcb2ee2d270e6f584c6dbbd45f39a50c994c38be"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 29 Sep 2022 07:40:09 GMT",
+ "tag": "@fluentui/react-charting_v5.13.6",
+ "version": "5.13.6",
+ "comments": {
+ "patch": [
+ {
+ "author": "atishay.jain@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "cc8acd94d3f68011427d6e031201a156e3b04ed9",
+ "comment": "Fix vertical bar chart bugs"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.96.3",
+ "commit": "cc8acd94d3f68011427d6e031201a156e3b04ed9"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 28 Sep 2022 07:37:48 GMT",
+ "tag": "@fluentui/react-charting_v5.13.5",
+ "version": "5.13.5",
+ "comments": {
+ "patch": [
+ {
+ "author": "ankityadav@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "d4e63670b2df10d81954275eb3479c279787ac06",
+ "comment": "Fixing Tree chart issues for adding the optional bodyText for parent node and adjusting the allignment of the tree in the screen"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.96.2",
+ "commit": "316aa1e8df88bd9ec563d32222565dc48bc9fa29"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 22 Sep 2022 07:43:45 GMT",
+ "tag": "@fluentui/react-charting_v5.13.4",
+ "version": "5.13.4",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.96.1",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 07:47:16 GMT",
+ "tag": "@fluentui/react-charting_v5.13.3",
+ "version": "5.13.3",
+ "comments": {
+ "patch": [
+ {
+ "author": "atishay.jain@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "ead191a8368bf64ecabffce5ea0e02565f449a95",
+ "comment": "Fix multi stacked bar chart min width"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 19 Sep 2022 07:47:30 GMT",
+ "tag": "@fluentui/react-charting_v5.13.2",
+ "version": "5.13.2",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.96.0",
+ "commit": "2420757404f54aba8e92cdbc41965a6fdbce8a3d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 16 Sep 2022 07:37:32 GMT",
+ "tag": "@fluentui/react-charting_v5.13.1",
+ "version": "5.13.1",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.95.1",
+ "commit": "9077e0a7d3911096a3337d76ec65591d191a780a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 19:15:26 GMT",
+ "tag": "@fluentui/react-charting_v5.13.0",
+ "version": "5.13.0",
+ "comments": {
+ "minor": [
+ {
+ "author": "dzearing@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "682ead9953a1d519133193033aafe392173009f5",
+ "comment": "All /lib-commonjs/ top-level entries have been added to the exports map for backwards compatibility."
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.95.0",
+ "commit": "682ead9953a1d519133193033aafe392173009f5"
+ }
+ ],
+ "patch": [
+ {
+ "author": "atishay.jain@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "ca89bb0a920f267f049347ce63ad45424ce37f32",
+ "comment": "Add support for custom locale for date axis"
+ },
+ {
+ "author": "kumarkshitij@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "eea486038db9ef0eca9a377bd38fcd61fde7b18d",
+ "comment": "Fix value font-weight inside heatmap chart"
+ },
+ {
+ "author": "kumarkshitij@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "bbf7b60d16ffbbfe6473b894297a40f18589e6d0",
+ "comment": "Fix legend overflow-indication-text role"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 13 Sep 2022 07:41:03 GMT",
+ "tag": "@fluentui/react-charting_v5.12.37",
+ "version": "5.12.37",
+ "comments": {
+ "none": [
+ {
+ "author": "kumarkshitij@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "8c22e074ce562f164c897378aa225e0b609cc343",
+ "comment": "Add tests for hover states"
+ }
+ ],
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.94.4",
+ "commit": "a40ef34fa6d1122bdfdb708f79b90de9edb2827d"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 08 Sep 2022 20:52:16 GMT",
+ "tag": "@fluentui/react-charting_v5.12.36",
+ "version": "5.12.36",
+ "comments": {
+ "patch": [
+ {
+ "author": "kumarkshitij@microsoft.com",
+ "package": "@fluentui/react-charting",
+ "commit": "a67fc637b6eeacd7a04e8cc9373945c9acea9334",
+ "comment": "Fix greyed out legend key contrast ratio"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.94.3",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Wed, 07 Sep 2022 07:54:43 GMT",
+ "tag": "@fluentui/react-charting_v5.12.35",
+ "version": "5.12.35",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-charting",
+ "comment": "Bump @fluentui/react to v8.94.2",
+ "commit": "2f740624c4e43d6bfe1b488e9d479c95ed71da09"
+ }
+ ]
+ }
+ },
{
"date": "Mon, 05 Sep 2022 07:38:30 GMT",
"tag": "@fluentui/react-charting_v5.12.34",
diff --git a/packages/react-charting/CHANGELOG.md b/packages/react-charting/CHANGELOG.md
index 8479646bb4ecea..23faf9db1427b9 100644
--- a/packages/react-charting/CHANGELOG.md
+++ b/packages/react-charting/CHANGELOG.md
@@ -1,9 +1,236 @@
# Change Log - @fluentui/react-charting
-This log was last generated on Mon, 05 Sep 2022 07:38:30 GMT and should not be manually modified.
+This log was last generated on Wed, 26 Oct 2022 07:52:53 GMT and should not be manually modified.
+## [5.14.7](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.14.7)
+
+Wed, 26 Oct 2022 07:52:53 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.14.6..@fluentui/react-charting_v5.14.7)
+
+### Patches
+
+- Fix wrong narration when legend selected ([PR #24903](https://github.com/microsoft/fluentui/pull/24903) by kumarkshitij@microsoft.com)
+- Bump @fluentui/react-focus to v8.8.8 ([PR #25381](https://github.com/microsoft/fluentui/pull/25381) by beachball)
+- Bump @fluentui/react to v8.98.8 ([PR #25381](https://github.com/microsoft/fluentui/pull/25381) by beachball)
+
+## [5.14.6](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.14.6)
+
+Tue, 25 Oct 2022 07:43:18 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.14.5..@fluentui/react-charting_v5.14.6)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.7 ([PR #24903](https://github.com/microsoft/fluentui/pull/24903) by beachball)
+
+## [5.14.5](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.14.5)
+
+Mon, 24 Oct 2022 07:45:24 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.14.4..@fluentui/react-charting_v5.14.5)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.6 ([PR #25226](https://github.com/microsoft/fluentui/pull/25226) by beachball)
+
+## [5.14.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.14.4)
+
+Fri, 21 Oct 2022 07:44:53 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.14.3..@fluentui/react-charting_v5.14.4)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.5 ([PR #24283](https://github.com/microsoft/fluentui/pull/24283) by beachball)
+
+## [5.14.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.14.3)
+
+Thu, 20 Oct 2022 07:43:14 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.14.2..@fluentui/react-charting_v5.14.3)
+
+### Patches
+
+- Bump @fluentui/react-focus to v8.8.7 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by beachball)
+- Bump @fluentui/react to v8.98.4 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by beachball)
+
+## [5.14.2](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.14.2)
+
+Tue, 18 Oct 2022 07:42:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.14.1..@fluentui/react-charting_v5.14.2)
+
+### Patches
+
+- Fix chart title overflow ([PR #25073](https://github.com/microsoft/fluentui/pull/25073) by kumarkshitij@microsoft.com)
+
+## [5.14.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.14.1)
+
+Mon, 17 Oct 2022 07:49:17 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.14.0..@fluentui/react-charting_v5.14.1)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.3 ([PR #25219](https://github.com/microsoft/fluentui/pull/25219) by beachball)
+
+## [5.14.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.14.0)
+
+Fri, 14 Oct 2022 07:44:00 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.11..@fluentui/react-charting_v5.14.0)
+
+### Minor changes
+
+- Update d3-scale version to 4.0.0 ([PR #25119](https://github.com/microsoft/fluentui/pull/25119) by atishay.jain@microsoft.com)
+- Bump @fluentui/react to v8.98.2 ([PR #24976](https://github.com/microsoft/fluentui/pull/24976) by beachball)
+
+### Patches
+
+- chore: Bump v8 packages peer deps to include React 18 ([PR #24976](https://github.com/microsoft/fluentui/pull/24976) by mgodbolt@microsoft.com)
+
+## [5.13.11](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.11)
+
+Thu, 13 Oct 2022 07:45:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.10..@fluentui/react-charting_v5.13.11)
+
+### Patches
+
+- Bump @fluentui/react to v8.98.1 ([PR #25198](https://github.com/microsoft/fluentui/pull/25198) by beachball)
+
+## [5.13.10](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.10)
+
+Mon, 10 Oct 2022 07:38:24 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.9..@fluentui/react-charting_v5.13.10)
+
+### Patches
+
+- Bump @fluentui/react-focus to v8.8.6 ([PR #25138](https://github.com/microsoft/fluentui/pull/25138) by beachball)
+- Bump @fluentui/react to v8.98.0 ([PR #25138](https://github.com/microsoft/fluentui/pull/25138) by beachball)
+
+## [5.13.9](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.9)
+
+Tue, 04 Oct 2022 07:45:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.8..@fluentui/react-charting_v5.13.9)
+
+### Patches
+
+- [object Object] ([PR #25040](https://github.com/microsoft/fluentui/pull/25040) by atishay.jain@microsoft.com)
+- Bump @fluentui/react to v8.97.2 ([PR #24947](https://github.com/microsoft/fluentui/pull/24947) by beachball)
+
+## [5.13.8](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.8)
+
+Mon, 03 Oct 2022 07:37:49 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.7..@fluentui/react-charting_v5.13.8)
+
+### Patches
+
+- Bump @fluentui/react to v8.97.1 ([PR #25022](https://github.com/microsoft/fluentui/pull/25022) by beachball)
+
+## [5.13.7](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.7)
+
+Fri, 30 Sep 2022 07:38:09 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.6..@fluentui/react-charting_v5.13.7)
+
+### Patches
+
+- Bump @fluentui/react to v8.97.0 ([PR #25025](https://github.com/microsoft/fluentui/pull/25025) by beachball)
+
+## [5.13.6](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.6)
+
+Thu, 29 Sep 2022 07:40:09 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.5..@fluentui/react-charting_v5.13.6)
+
+### Patches
+
+- Fix vertical bar chart bugs ([PR #24990](https://github.com/microsoft/fluentui/pull/24990) by atishay.jain@microsoft.com)
+- Bump @fluentui/react to v8.96.3 ([PR #24990](https://github.com/microsoft/fluentui/pull/24990) by beachball)
+
+## [5.13.5](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.5)
+
+Wed, 28 Sep 2022 07:37:48 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.4..@fluentui/react-charting_v5.13.5)
+
+### Patches
+
+- Fixing Tree chart issues for adding the optional bodyText for parent node and adjusting the allignment of the tree in the screen ([PR #24752](https://github.com/microsoft/fluentui/pull/24752) by ankityadav@microsoft.com)
+- Bump @fluentui/react to v8.96.2 ([PR #24900](https://github.com/microsoft/fluentui/pull/24900) by beachball)
+
+## [5.13.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.4)
+
+Thu, 22 Sep 2022 07:43:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.3..@fluentui/react-charting_v5.13.4)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.1 ([PR #24871](https://github.com/microsoft/fluentui/pull/24871) by beachball)
+
+## [5.13.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.3)
+
+Tue, 20 Sep 2022 07:47:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.2..@fluentui/react-charting_v5.13.3)
+
+### Patches
+
+- Fix multi stacked bar chart min width ([PR #24835](https://github.com/microsoft/fluentui/pull/24835) by atishay.jain@microsoft.com)
+
+## [5.13.2](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.2)
+
+Mon, 19 Sep 2022 07:47:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.1..@fluentui/react-charting_v5.13.2)
+
+### Patches
+
+- Bump @fluentui/react to v8.96.0 ([PR #24771](https://github.com/microsoft/fluentui/pull/24771) by beachball)
+
+## [5.13.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.1)
+
+Fri, 16 Sep 2022 07:37:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.13.0..@fluentui/react-charting_v5.13.1)
+
+### Patches
+
+- Bump @fluentui/react to v8.95.1 ([PR #24822](https://github.com/microsoft/fluentui/pull/24822) by beachball)
+
+## [5.13.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.13.0)
+
+Thu, 15 Sep 2022 19:15:26 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.12.37..@fluentui/react-charting_v5.13.0)
+
+### Minor changes
+
+- All /lib-commonjs/ top-level entries have been added to the exports map for backwards compatibility. ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by dzearing@microsoft.com)
+- Bump @fluentui/react to v8.95.0 ([PR #24792](https://github.com/microsoft/fluentui/pull/24792) by beachball)
+
+### Patches
+
+- Add support for custom locale for date axis ([PR #24753](https://github.com/microsoft/fluentui/pull/24753) by atishay.jain@microsoft.com)
+- Fix value font-weight inside heatmap chart ([PR #24726](https://github.com/microsoft/fluentui/pull/24726) by kumarkshitij@microsoft.com)
+- Fix legend overflow-indication-text role ([PR #24756](https://github.com/microsoft/fluentui/pull/24756) by kumarkshitij@microsoft.com)
+
+## [5.12.37](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.12.37)
+
+Tue, 13 Sep 2022 07:41:03 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.12.36..@fluentui/react-charting_v5.12.37)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.4 ([PR #24615](https://github.com/microsoft/fluentui/pull/24615) by beachball)
+
+## [5.12.36](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.12.36)
+
+Thu, 08 Sep 2022 20:52:16 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.12.35..@fluentui/react-charting_v5.12.36)
+
+### Patches
+
+- Fix greyed out legend key contrast ratio ([PR #24714](https://github.com/microsoft/fluentui/pull/24714) by kumarkshitij@microsoft.com)
+- Bump @fluentui/react to v8.94.3 ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by beachball)
+
+## [5.12.35](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.12.35)
+
+Wed, 07 Sep 2022 07:54:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.12.34..@fluentui/react-charting_v5.12.35)
+
+### Patches
+
+- Bump @fluentui/react to v8.94.2 ([PR #24663](https://github.com/microsoft/fluentui/pull/24663) by beachball)
+
## [5.12.34](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.12.34)
Mon, 05 Sep 2022 07:38:30 GMT
diff --git a/packages/react-charting/README.md b/packages/react-charting/README.md
index a9a36e3d15253f..452874e724ce3e 100644
--- a/packages/react-charting/README.md
+++ b/packages/react-charting/README.md
@@ -28,10 +28,6 @@ To import charting components:
import { ComponentName } from '@fluentui/react-charting/lib/ComponentName';
```
-**Technical Guide**
-
-Technical information about chart components is available at [Technical details](./TechnicalDetails.md)
-
**Contributing**
Refer the main fluentui [wiki](https://github.com/microsoft/fluentui/wiki) for detailed instructions on setup and contributing to the package.
@@ -56,3 +52,91 @@ You could also create issues under the [charting](https://github.com/microsoft/f
**Coding Guidelines**
Refer fluent [Coding guidelines](https://github.com/microsoft/fluentui/wiki/Coding-Style)
+
+# Technical details
+
+**Overview**
+
+This document describes different chart components in detail.
+
+This can be used as a guide to use the charts and contribute new functionalities or improvements to the library.
+
+**Components**
+
+The charting components are built using following building blocks.
+
+- Cartesian Charts.
+
+ - Charts built using cartesian coordinate system (two axes - x axis perpendicular to y axis) are called cartesian charts. Majority of the chart in the library are cartesian charts. Some charts like horizontal chart, donut chart, sankey and tree charts are non cartesian charts.
+
+- Legends.
+
+ - A legend contains a list of the variables appearing in the chart and an example of their appearance. This information allows the data from each variable to be identified in the chart.
+
+- Hover Callouts.
+
+ - Whenever the mouse is hovered over a datapoint, a callout is shown representing the details of data for that point. For a stacked chart, the hover callout can represent the data for all the points for the same X coordinate.
+
+- Axes.
+
+ - Our charts currently support cartesian axes. Different charts support different type of axes - numerical axis, date or time series axis, string or categorical axis. Detals about supported axes can be found in readme for each chart.
+
+ - Axes support for different charts
+
+ | Chart | Numeric Axis | Date Axis | String Axis |
+ | -------------------------- | ------------ | --------- | ----------- |
+ | Line Chart | Yes | Yes | No |
+ | Area Chart | Yes | Yes | No |
+ | Vertical Bar Chart | Yes | No | Yes |
+ | Vertical Stacked Bar Chart | Yes | No | Yes |
+ | Grouped Vertical Bar Chart | No | No | Yes |
+ | Heatmap Chart | Yes | Yes | Yes |
+ | Horizontal Bar Chart | -- | -- | -- |
+ | Donut Chart | -- | -- | -- |
+ | Sankey Chart | -- | -- | -- |
+ | Tree Chart | -- | -- | -- |
+ | Sparkline Chart | -- | -- | -- |
+
+ - Axis localization
+ The axes support 2 ways of localization.
+
+ 1. Javascript provided inbuilt localization for numeric and date axis. Specify the culture and dateLocalizeOptions for date axis to define target localization. Refer the [javascript localization guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString) for usage.
+ 2. Custom locale definition: The consumer of the library can specify a custom locale definition as supported by d3 (like [this](https://github.com/d3/d3-time-format/blob/main/locale/en-US.json)). The date axis will use the date range and the multiformat specified in the definition to determine the correct format to show in the ticks. For example - If the date range is in days then the axis will show hourly ticks. If the date range spans across months then the axis will show months in tick labels and so on.
+ Specify the custom locale definition in the timeFormatLocale prop.
+ Refer to the Custom Locale Date Axis example in line chart for sample usage.
+
+ - Date axis formatting
+ The date axis can be custom formatted using the customDateTimeFormatter prop.
+
+- Event annotations (Available in line charts).
+
+ - Data can be annotated using vertical lines representing the events of interest. See [line chart with events](https://fluentuipr.z22.web.core.windows.net/heads/master/react-charting/demo/index.html#/examples/linechart#Variants) for example.
+
+- Typography.
+
+ - Our font classes represent the type ramp for the fluent design language. Each base class sets a default size, weight, and color.
+
+- Colors
+
+ - The charts are designed using the accessible color palette defined for the fluent design system.
+
+- Themes
+
+ - The library supports light and dark mode out of box. In addition, consumers can define their own themese as detailed [here](https://github.com/microsoft/fluentui/wiki/Theming)
+
+- Accessibility.
+
+ - Our charts have elaborate accessibility support. The charts are WCAG 2.1 MAS C compliant for accessibility.
+ Consumers can define their own aria labels for each point by setting the `xAxisCalloutAccessibilityData` and `callOutAccessibilityData` properties.
+
+- RTL Support
+
+ - The charts support RTL languages wherever applicable.
+
+- Component Styling
+
+ - [This article](https://github.com/microsoft/fluentui/wiki/Component-Styling) talks about the styling approach followed within charting library.
+
+- Details about ticks.
+ - Tick values are applicable only for date axis. Doesn't work for string or numeric axis.
+ Tickcount works for numeric and date axis. Doesn't work for string (scaleBand) axis.
diff --git a/packages/react-charting/TechnicalDetails.md b/packages/react-charting/TechnicalDetails.md
deleted file mode 100644
index 2100767c26fd97..00000000000000
--- a/packages/react-charting/TechnicalDetails.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# Technical details
-
-**Overview**
-
-This document describes different charts and their components in detail.
-
-This can be used as a guide to use the charts and contribute new functionalities or improvements to the library.
-
-**Components**
-
-The charting components are built using following building blocks.
-
-- Cartesian Charts.
-
- - Charts built using cartesian coordinate system (two axes - x axis perpendicular to y axis) are called cartesian charts. Majority of the chart in the library are cartesian charts. Some charts like horizontal chart, donut chart, sankey and tree charts are non cartesian charts.
-
-- Legends.
-
- - A legend contains a list of the variables appearing in the chart and an example of their appearance. This information allows the data from each variable to be identified in the chart.
-
-- Hover Callouts.
-
- - Whenever the mouse is hovered over a datapoint, a callout is shown representing the details of data for that point. For a stacked chart, the hover callout can represent the data for all the points for the same X coordinate.
-
-- Axes.
-
- - Our charts currently support cartesian axes. Different charts support different type of axes - numerical axis, date or time series axis, string or categorical axis. Detals about supported axes can be found in readme for each chart.
-
- - Axes support for different charts
-
- | Chart | Numeric Axis | Date Axis | String Axis |
- | -------------------------- | ------------ | --------- | ----------- |
- | Line Chart | Yes | Yes | No |
- | Area Chart | Yes | Yes | No |
- | Vertical Bar Chart | Yes | No | Yes |
- | Vertical Stacked Bar Chart | Yes | No | Yes |
- | Grouped Vertical Bar Chart | No | No | Yes |
- | Heatmap Chart | Yes | Yes | Yes |
- | Horizontal Bar Chart | -- | -- | -- |
- | Donut Chart | -- | -- | -- |
- | Sankey Chart | -- | -- | -- |
- | Tree Chart | -- | -- | -- |
- | Sparkline Chart | -- | -- | -- |
-
- - Axis localization
- The axes support javascript provided localization for numeric and date axis.
- Specify the culture and dateLocalizeOptions for date axis to define target localization details.
-
-- Event annotations (Available in line charts).
-
- - Data can be annotated using vertical lines representing the events of interest. See [line chart with events](https://fluentuipr.z22.web.core.windows.net/heads/master/react-charting/demo/index.html#/examples/linechart#Variants) for example.
-
-- Typography.
-
- - Our font classes represent the type ramp for the fluent design language. Each base class sets a default size, weight, and color.
-
-- Colors
-
- - The charts are designed using the accessible color palette defined for the fluent design system.
-
-- Themes
-
- - The library supports light and dark mode out of box. In addition, consumers can define their own themese as detailed [here](https://github.com/microsoft/fluentui/wiki/Theming)
-
-- Accessibility.
-
- - Our charts have elaborate accessibility support. The charts are WCAG 2.1 MAS C compliant for accessibility.
- Consumers can define their own aria labels for each point by setting the `xAxisCalloutAccessibilityData` and `callOutAccessibilityData` properties.
-
-- RTL Support
-
- - The charts support RTL languages wherever applicable.
-
-- Component Styling
-
- - [This article](https://github.com/microsoft/fluentui/wiki/Component-Styling) talks about the styling approach followed within charting library.
-
-- Details about ticks.
- - Tick values are applicable only for date axis. Doesn't work for string or numeric axis.
- Tickcount works for numeric and date axis. Doesn't work for string (scaleBand) axis.
diff --git a/packages/react-charting/jest.config.js b/packages/react-charting/jest.config.js
index 7388104706e346..54b6ff363df17e 100644
--- a/packages/react-charting/jest.config.js
+++ b/packages/react-charting/jest.config.js
@@ -1,9 +1,29 @@
let { createConfig, resolveMergeStylesSerializer } = require('@fluentui/scripts/jest/jest-resources');
let path = require('path');
+function getEsmOnlyPackagesToCjsMapping() {
+ /**
+ * relative path to monorepo root
+ */
+ const prefix = `/../../`;
+ /**
+ * map of packages that ship only as ESM
+ */
+ const cjsPathsToEsmOnlyPackages = {
+ '^d3-scale$': prefix + 'node_modules/d3-scale/dist/d3-scale.js',
+ '^d3-array$': prefix + 'node_modules/d3-scale/node_modules/d3-array/dist/d3-array.js',
+ '^d3-time$': prefix + 'node_modules/d3-scale/node_modules/d3-time/dist/d3-time.js',
+ };
+ return cjsPathsToEsmOnlyPackages;
+}
+
const config = createConfig({
setupFiles: [path.resolve(path.join(__dirname, 'config', 'tests.js'))],
- snapshotSerializers: [resolveMergeStylesSerializer()],
+ snapshotSerializers: [resolveMergeStylesSerializer(), 'enzyme-to-json/serializer'],
+
+ moduleNameMapper: {
+ ...getEsmOnlyPackagesToCjsMapping(),
+ },
});
module.exports = config;
diff --git a/packages/react-charting/package.json b/packages/react-charting/package.json
index 675bbf1811caf0..33db33d6b0188c 100644
--- a/packages/react-charting/package.json
+++ b/packages/react-charting/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/react-charting",
- "version": "5.12.34",
+ "version": "5.14.7",
"description": "Experimental React charting components for building experiences for Microsoft 365.",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -28,41 +28,43 @@
},
"devDependencies": {
"@fluentui/eslint-plugin": "*",
- "@fluentui/react": "^8.94.1",
+ "@fluentui/react": "^8.98.8",
"@types/react-addons-test-utils": "0.14.18",
"@fluentui/scripts": "^1.0.0",
"@fluentui/jest-serializer-merge-styles": "^8.0.20"
},
"dependencies": {
- "@fluentui/react-focus": "^8.8.5",
+ "@fluentui/react-focus": "^8.8.8",
"@microsoft/load-themed-styles": "^1.10.26",
"@types/d3-array": "1.2.1",
"@types/d3-axis": "1.0.10",
"@types/d3-format": "^1.3.1",
"@types/d3-hierarchy": "2.0.0",
"@types/d3-sankey": "^0.11.0",
- "@types/d3-scale": "2.0.0",
+ "@types/d3-scale": "^4.0.0",
"@types/d3-selection": "1.4.1",
"@types/d3-shape": "^1.2.3",
"@types/d3-time-format": "^2.1.0",
+ "@types/d3-time": "^1.1.0",
"@fluentui/set-version": "^8.2.2",
"d3-array": "1.2.1",
"d3-axis": "1.0.8",
"d3-format": "^1.4.4",
"d3-hierarchy": "2.0.0",
"d3-sankey": "^0.12.3",
- "d3-scale": "2.0.0",
+ "d3-scale": "^4.0.0",
"d3-selection": "1.3.0",
"d3-shape": "^1.2.0",
"d3-time-format": "^2.1.3",
+ "d3-time": "^1.1.0",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@fluentui/react": "^8.94.1",
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0"
+ "@fluentui/react": "^8.98.8",
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0"
},
"exports": {
".": {
diff --git a/packages/react-charting/src/components/AreaChart/AreaChart.base.tsx b/packages/react-charting/src/components/AreaChart/AreaChart.base.tsx
index 1753d0ae6c20b5..5b656e4121c5a0 100644
--- a/packages/react-charting/src/components/AreaChart/AreaChart.base.tsx
+++ b/packages/react-charting/src/components/AreaChart/AreaChart.base.tsx
@@ -95,6 +95,7 @@ export class AreaChartBase extends React.Component {
let fillColor = lineColor;
if (this.state.nearestCircleToHighlight === xDataPoint) {
- if (this.state.isShowCalloutPending) {
- this.setState({
- refSelected: `#${circleId}`,
- isCalloutVisible: true,
- isShowCalloutPending: false,
- });
- }
+ this._highlightedCircleId = circleId;
if (!this.state.isCircleClicked) {
fillColor = this.props.theme!.palette.white;
}
diff --git a/packages/react-charting/src/components/AreaChart/AreaChart.test.tsx b/packages/react-charting/src/components/AreaChart/AreaChart.test.tsx
index 4cf7a0fd197dc5..08aed2d4459789 100644
--- a/packages/react-charting/src/components/AreaChart/AreaChart.test.tsx
+++ b/packages/react-charting/src/components/AreaChart/AreaChart.test.tsx
@@ -6,6 +6,7 @@ import { mount, ReactWrapper } from 'enzyme';
import { IAreaChartProps, AreaChart } from './index';
import { IAreaChartState, AreaChartBase } from './AreaChart.base';
import { ICustomizedCalloutData } from '../../index';
+import toJson from 'enzyme-to-json';
// Wrapper of the AreaChart to be tested.
let wrapper: ReactWrapper | undefined;
@@ -190,3 +191,80 @@ describe('Render calling with respective to props', () => {
renderMock.mockRestore();
});
});
+
+describe('AreaChart - mouse events', () => {
+ let root: HTMLDivElement | null;
+
+ beforeEach(() => {
+ sharedBeforeEach();
+
+ root = document.createElement('div');
+ document.body.appendChild(root);
+ });
+
+ afterEach(() => {
+ sharedAfterEach();
+
+ if (root) {
+ document.body.removeChild(root);
+ root = null;
+ }
+ });
+
+ it('Should render callout correctly on mouseover', () => {
+ // document.getElementbyId() returns null if component is not attached to DOM
+ wrapper = mount( , { attachTo: root });
+ wrapper.find('rect').simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('Should render callout correctly on mousemove', () => {
+ wrapper = mount( , { attachTo: root });
+ wrapper.find('rect').simulate('mousemove', { clientX: 40, clientY: 0 });
+ const html1 = wrapper.html();
+ wrapper.find('rect').simulate('mousemove', { clientX: -20, clientY: 0 });
+ const html2 = wrapper.html();
+ expect(html1).not.toBe(html2);
+ });
+
+ it('Should render customized callout on mouseover', () => {
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ { attachTo: root },
+ );
+ wrapper.find('rect').simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('Should render customized callout per stack on mouseover', () => {
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ { attachTo: root },
+ );
+ wrapper.find('rect').simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/packages/react-charting/src/components/AreaChart/__snapshots__/AreaChart.test.tsx.snap b/packages/react-charting/src/components/AreaChart/__snapshots__/AreaChart.test.tsx.snap
index 03c986af0f0b8d..a7b6297e69425e 100644
--- a/packages/react-charting/src/components/AreaChart/__snapshots__/AreaChart.test.tsx.snap
+++ b/packages/react-charting/src/components/AreaChart/__snapshots__/AreaChart.test.tsx.snap
@@ -1,5 +1,1395 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`AreaChart - mouse events Should render callout correctly on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`AreaChart - mouse events Should render customized callout on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`AreaChart - mouse events Should render customized callout per stack on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
exports[`AreaChart snapShot testing renders Areachart correctly 1`] = `
+
`;
@@ -659,6 +2052,9 @@ exports[`AreaChart snapShot testing renders enabledLegendsWrapLines correctly 1`
+
`;
@@ -841,6 +2237,9 @@ exports[`AreaChart snapShot testing renders hideLegend hhh correctly 1`] = `
+
`;
@@ -1182,6 +2581,9 @@ exports[`AreaChart snapShot testing renders hideTooltip correctly 1`] = `
+
`;
@@ -1523,6 +2925,9 @@ exports[`AreaChart snapShot testing renders showXAxisLablesTooltip correctly 1`]
+
`;
@@ -1864,6 +3269,9 @@ exports[`AreaChart snapShot testing renders wrapXAxisLables correctly 1`] = `
+
`;
@@ -2205,5 +3613,8 @@ exports[`AreaChart snapShot testing renders yAxisTickFormat correctly 1`] = `
+
`;
diff --git a/packages/react-charting/src/components/CommonComponents/CartesianChart.base.tsx b/packages/react-charting/src/components/CommonComponents/CartesianChart.base.tsx
index 54b395289f6585..fd830d7e742583 100644
--- a/packages/react-charting/src/components/CommonComponents/CartesianChart.base.tsx
+++ b/packages/react-charting/src/components/CommonComponents/CartesianChart.base.tsx
@@ -143,6 +143,8 @@ export class CartesianChartBase extends React.Component
)}
- {!this.props.hideTooltip && calloutProps!.isCalloutVisible && (
-
- {/** Given custom callout, then it will render */}
- {this.props.customizedCallout && this.props.customizedCallout}
- {/** single x point its corresponding y points of all the bars/lines in chart will render in callout */}
- {!this.props.customizedCallout && this.props.isCalloutForStack && this._multiValueCallout(calloutProps)}
- {/** single x point its corresponding y point of single line/bar in the chart will render in callout */}
- {!this.props.customizedCallout && !this.props.isCalloutForStack && (
-
- )}
-
- )}
+ {/** The callout is used for narration, so keep it mounted on the DOM */}
+
+ {/** Given custom callout, then it will render */}
+ {this.props.customizedCallout && this.props.customizedCallout}
+ {/** single x point its corresponding y points of all the bars/lines in chart will render in callout */}
+ {!this.props.customizedCallout && this.props.isCalloutForStack && this._multiValueCallout(calloutProps)}
+ {/** single x point its corresponding y point of single line/bar in the chart will render in callout */}
+ {!this.props.customizedCallout && !this.props.isCalloutForStack && (
+
+ )}
+
);
}
@@ -496,25 +509,29 @@ export class CartesianChartBase extends React.Component legendContainerHeight
- ? container.getBoundingClientRect().height
- : 350;
- const shouldResize =
- containerWidth !== currentContainerWidth || containerHeight !== currentContainerHeight - legendContainerHeight;
- if (shouldResize) {
- this.setState({
- containerWidth: currentContainerWidth,
- containerHeight: currentContainerHeight - legendContainerHeight,
- });
+ if (this.props.parentRef || this.chartContainer) {
+ const container = this.props.parentRef ? this.props.parentRef : this.chartContainer;
+ const currentContainerWidth = container.getBoundingClientRect().width;
+ const currentContainerHeight =
+ container.getBoundingClientRect().height > legendContainerHeight
+ ? container.getBoundingClientRect().height
+ : 350;
+ const shouldResize =
+ containerWidth !== currentContainerWidth ||
+ containerHeight !== currentContainerHeight - legendContainerHeight;
+ if (shouldResize) {
+ this.setState({
+ containerWidth: currentContainerWidth,
+ containerHeight: currentContainerHeight - legendContainerHeight,
+ });
+ }
}
});
}
diff --git a/packages/react-charting/src/components/CommonComponents/CartesianChart.types.ts b/packages/react-charting/src/components/CommonComponents/CartesianChart.types.ts
index b34e4e5d3c2b8e..59b36e18c8c8d0 100644
--- a/packages/react-charting/src/components/CommonComponents/CartesianChart.types.ts
+++ b/packages/react-charting/src/components/CommonComponents/CartesianChart.types.ts
@@ -7,6 +7,7 @@ import { ICalloutProps } from '@fluentui/react/lib/Callout';
import { ILegendsProps } from '../Legends/index';
import { IAccessibilityProps, IMargins } from '../../types/index';
import { ChartTypes, IChartHoverCardProps, XAxisTypes, YAxisType } from '../../utilities/index';
+import * as d3TimeFormat from 'd3-time-format';
export interface ICartesianChartStyleProps {
/**
@@ -328,6 +329,16 @@ export interface ICartesianChartProps {
*/
dateLocalizeOptions?: Intl.DateTimeFormatOptions;
+ /**
+ * The prop used to define a custom locale for the date time format.
+ */
+ timeFormatLocale?: d3TimeFormat.TimeLocaleDefinition;
+
+ /**
+ * The prop used to define a custom datetime formatter for date axis.
+ */
+ customDateTimeFormatter?: (dateTime: Date) => string;
+
/**
* Call to provide customized styling that will layer on top of the variant rules.
*/
diff --git a/packages/react-charting/src/components/DonutChart/Arc/Arc.styles.ts b/packages/react-charting/src/components/DonutChart/Arc/Arc.styles.ts
index 6711f517b60340..ffd932bb78a698 100644
--- a/packages/react-charting/src/components/DonutChart/Arc/Arc.styles.ts
+++ b/packages/react-charting/src/components/DonutChart/Arc/Arc.styles.ts
@@ -18,6 +18,7 @@ export const getStyles = (props: IArcProps): IArcStyles => {
focusRing: {
stroke: theme.semanticColors.focusBorder,
strokeWidth: 4,
+ fill: 'transparent',
},
insideDonutString: {
fontSize: FontSizes.large,
diff --git a/packages/react-charting/src/components/DonutChart/Arc/Arc.tsx b/packages/react-charting/src/components/DonutChart/Arc/Arc.tsx
index 5e15cd26b7dc15..d267f9483dbf18 100644
--- a/packages/react-charting/src/components/DonutChart/Arc/Arc.tsx
+++ b/packages/react-charting/src/components/DonutChart/Arc/Arc.tsx
@@ -86,9 +86,7 @@ export class Arc extends React.Component {
private _hoverOn(data: IChartDataPoint, mouseEvent: React.MouseEvent): void {
mouseEvent.persist();
- if (this.props.activeArc === this.props.data!.data.legend || this.props.activeArc === '') {
- this.props.hoverOnCallback!(data, mouseEvent);
- }
+ this.props.hoverOnCallback!(data, mouseEvent);
}
private _hoverOff = (): void => {
diff --git a/packages/react-charting/src/components/DonutChart/DonutChart.base.tsx b/packages/react-charting/src/components/DonutChart/DonutChart.base.tsx
index e19ac9ea195c83..77834f31c56b1c 100644
--- a/packages/react-charting/src/components/DonutChart/DonutChart.base.tsx
+++ b/packages/react-charting/src/components/DonutChart/DonutChart.base.tsx
@@ -144,6 +144,8 @@ export class DonutChartBase extends React.Component
@@ -237,12 +239,11 @@ export class DonutChartBase extends React.Component {
this._currentHoverElement = element;
this.setState({
- showHover: true,
+ /** Show the callout if highlighted arc is focused and Hide it if unhighlighted arc is focused */
+ showHover: this.state.activeLegend === data.legend || this.state.activeLegend === '',
value: data.data!.toString(),
legend: data.legend,
- activeLegend: data.legend,
color: data.color!,
- selectedLegend: data.legend!,
xCalloutValue: data.xAxisCalloutData!,
yCalloutValue: data.yAxisCalloutData!,
focusedArcId: id,
@@ -256,25 +257,24 @@ export class DonutChartBase extends React.Component {
- this.setState({ showHover: false, focusedArcId: '', activeLegend: '', selectedLegend: 'none' });
+ this.setState({ focusedArcId: '' });
};
private _hoverLeave(): void {
- this.setState({ activeLegend: '', selectedLegend: 'none', focusedArcId: '' });
+ /**/
}
private _handleChartMouseLeave = () => {
diff --git a/packages/react-charting/src/components/DonutChart/DonutChart.test.tsx b/packages/react-charting/src/components/DonutChart/DonutChart.test.tsx
index 533206ab7af8a2..1477ef848e737f 100644
--- a/packages/react-charting/src/components/DonutChart/DonutChart.test.tsx
+++ b/packages/react-charting/src/components/DonutChart/DonutChart.test.tsx
@@ -6,6 +6,7 @@ import { mount, ReactWrapper } from 'enzyme';
import { IDonutChartProps, DonutChart } from './index';
import { IDonutChartState, DonutChartBase } from './DonutChart.base';
import { IChartProps, IChartDataPoint } from '../../index';
+import toJson from 'enzyme-to-json';
// Wrapper of the DonutChart to be tested.
let wrapper: ReactWrapper | undefined;
@@ -117,3 +118,45 @@ describe('DonutChart - basic props', () => {
expect(renderedDOM!.length).toBe(0);
});
});
+
+describe('DonutChart - mouse events', () => {
+ beforeEach(sharedBeforeEach);
+ afterEach(sharedAfterEach);
+
+ it('Should render callout correctly on mouseover', () => {
+ wrapper = mount( );
+ wrapper.find('path[id^="_Pie_"]').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('Should render callout correctly on mousemove', () => {
+ wrapper = mount( );
+ wrapper.find('path[id^="_Pie_"]').at(0).simulate('mousemove');
+ const html1 = wrapper.html();
+ wrapper.find('path[id^="_Pie_"]').at(0).simulate('mouseleave');
+ wrapper.find('path[id^="_Pie_"]').at(1).simulate('mousemove');
+ const html2 = wrapper.html();
+ expect(html1).not.toBe(html2);
+ });
+
+ it('Should render customized callout on mouseover', () => {
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ );
+ wrapper.find('path[id^="_Pie_"]').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/packages/react-charting/src/components/DonutChart/__snapshots__/DonutChart.test.tsx.snap b/packages/react-charting/src/components/DonutChart/__snapshots__/DonutChart.test.tsx.snap
index e79772eb707d00..1e9cfcff7395bc 100644
--- a/packages/react-charting/src/components/DonutChart/__snapshots__/DonutChart.test.tsx.snap
+++ b/packages/react-charting/src/components/DonutChart/__snapshots__/DonutChart.test.tsx.snap
@@ -1,5 +1,1009 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`DonutChart - mouse events Should render callout correctly on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2020/04/30
+
+
+ 20,000
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`DonutChart - mouse events Should render customized callout on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ "legend": "first",
+ "data": 20000,
+ "color": "#E5E5E5",
+ "xAxisCalloutData": "2020/04/30"
+}
+
+
+
+
+
+
+
+`;
+
exports[`DonutChart snapShot testing renders DonutChart correctly 1`] = `
,
): void => {
mouseEvent.persist();
- if (
- (this.state.isLegendSelected === false ||
- (this.state.isLegendSelected && this.state.titleForHoverCard === pointData.legend)) &&
- this._calloutAnchorPoint !== pointData
- ) {
+ if (this._calloutAnchorPoint !== pointData) {
this._calloutAnchorPoint = pointData;
this.setState({
refSelected: mouseEvent,
- isCalloutVisible: true,
- titleForHoverCard: pointData.legend,
+ /** Show the callout if highlighted bar is hovered and Hide it if unhighlighted bar is hovered */
+ isCalloutVisible:
+ this.state.isLegendSelected === false ||
+ (this.state.isLegendSelected === true && this.state.titleForHoverCard === pointData.legend),
+ calloutLegend: pointData.legend,
dataForHoverCard: pointData.data,
color: pointData.color,
xCalloutValue: pointData.xAxisCalloutData,
@@ -266,30 +267,28 @@ export class GroupedVerticalBarChartBase extends React.Component<
groupData: any,
refArrayIndexNumber: number,
): void => {
- if (
- this.state.isLegendSelected === false ||
- (this.state.isLegendSelected && this.state.titleForHoverCard === pointData.legend)
- ) {
- this._refArray.forEach((obj: IRefArrayData, index: number) => {
- if (obj.index === pointData.legend && refArrayIndexNumber === index) {
- this.setState({
- refSelected: obj.refElement,
- isCalloutVisible: true,
- titleForHoverCard: pointData.legend,
- dataForHoverCard: pointData.data,
- color: pointData.color,
- xCalloutValue: pointData.xAxisCalloutData,
- yCalloutValue: pointData.yAxisCalloutData,
- dataPointCalloutProps: pointData,
- callOutAccessibilityData: this.props.isCalloutForStack
- ? groupData.stackCallOutAccessibilityData
- : pointData.callOutAccessibilityData,
- YValueHover: groupData.groupSeries,
- hoverXValue: pointData.xAxisCalloutData,
- });
- }
- });
- }
+ this._refArray.forEach((obj: IRefArrayData, index: number) => {
+ if (obj.index === pointData.legend && refArrayIndexNumber === index) {
+ this.setState({
+ refSelected: obj.refElement,
+ /** Show the callout if highlighted bar is focused and Hide it if unhighlighted bar is focused */
+ isCalloutVisible:
+ this.state.isLegendSelected === false ||
+ (this.state.isLegendSelected === true && this.state.titleForHoverCard === pointData.legend),
+ calloutLegend: pointData.legend,
+ dataForHoverCard: pointData.data,
+ color: pointData.color,
+ xCalloutValue: pointData.xAxisCalloutData,
+ yCalloutValue: pointData.yAxisCalloutData,
+ dataPointCalloutProps: pointData,
+ callOutAccessibilityData: this.props.isCalloutForStack
+ ? groupData.stackCallOutAccessibilityData
+ : pointData.callOutAccessibilityData,
+ YValueHover: groupData.groupSeries,
+ hoverXValue: pointData.xAxisCalloutData,
+ });
+ }
+ });
};
private _redirectToUrl = (href: string | undefined): void => {
diff --git a/packages/react-charting/src/components/GroupedVerticalBarChart/GroupedVerticalBarChart.test.tsx b/packages/react-charting/src/components/GroupedVerticalBarChart/GroupedVerticalBarChart.test.tsx
index f7946cce162e46..3e30fa715af8a2 100644
--- a/packages/react-charting/src/components/GroupedVerticalBarChart/GroupedVerticalBarChart.test.tsx
+++ b/packages/react-charting/src/components/GroupedVerticalBarChart/GroupedVerticalBarChart.test.tsx
@@ -6,6 +6,7 @@ import { mount, ReactWrapper } from 'enzyme';
import { DefaultPalette } from '@fluentui/react/lib/Styling';
import { IGroupedVerticalBarChartProps, GroupedVerticalBarChart, IGVBarChartSeriesPoint } from '../../index';
import { IGroupedVerticalBarChartState, GroupedVerticalBarChartBase } from './GroupedVerticalBarChart.base';
+import toJson from 'enzyme-to-json';
// Wrapper of the GroupedVerticalBarChart to be tested.
let wrapper:
@@ -202,3 +203,43 @@ describe('Render calling with respective to props', () => {
renderMock.mockRestore();
});
});
+
+describe('GroupedVerticalBarChart - mouse events', () => {
+ beforeEach(sharedBeforeEach);
+ afterEach(sharedAfterEach);
+
+ it('Should render callout correctly on mouseover', () => {
+ wrapper = mount(
);
+ wrapper.find('rect').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('Should render callout correctly on mousemove', () => {
+ wrapper = mount(
);
+ wrapper.find('rect').at(2).simulate('mousemove');
+ const html1 = wrapper.html();
+ wrapper.find('rect').at(3).simulate('mousemove');
+ const html2 = wrapper.html();
+ expect(html1).not.toBe(html2);
+ });
+
+ it('Should render customized callout on mouseover', () => {
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ );
+ wrapper.find('rect').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/packages/react-charting/src/components/GroupedVerticalBarChart/__snapshots__/GroupedVerticalBarChart.test.tsx.snap b/packages/react-charting/src/components/GroupedVerticalBarChart/__snapshots__/GroupedVerticalBarChart.test.tsx.snap
index 18e0a4afabca4f..3f700f17197207 100644
--- a/packages/react-charting/src/components/GroupedVerticalBarChart/__snapshots__/GroupedVerticalBarChart.test.tsx.snap
+++ b/packages/react-charting/src/components/GroupedVerticalBarChart/__snapshots__/GroupedVerticalBarChart.test.tsx.snap
@@ -1,5 +1,1421 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`GroupedVerticalBarChart - mouse events Should render callout correctly on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`GroupedVerticalBarChart - mouse events Should render customized callout on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
exports[`GroupedVerticalBarChart snapShot testing renders GroupedVerticalBarChart correctly 1`] = `
+
`;
@@ -1131,6 +2550,9 @@ exports[`GroupedVerticalBarChart snapShot testing renders enabledLegendsWrapLine
+
`;
@@ -1369,6 +2791,9 @@ exports[`GroupedVerticalBarChart snapShot testing renders hideLegend correctly 1
+
`;
@@ -1946,6 +3371,9 @@ exports[`GroupedVerticalBarChart snapShot testing renders hideTooltip correctly
+
`;
@@ -2523,6 +3951,9 @@ exports[`GroupedVerticalBarChart snapShot testing renders showXAxisLablesTooltip
+
`;
@@ -3100,6 +4531,9 @@ exports[`GroupedVerticalBarChart snapShot testing renders wrapXAxisLables correc
+
`;
@@ -3677,5 +5111,8 @@ exports[`GroupedVerticalBarChart snapShot testing renders yAxisTickFormat correc
+
`;
diff --git a/packages/react-charting/src/components/HeatMapChart/HeatMapChart.base.tsx b/packages/react-charting/src/components/HeatMapChart/HeatMapChart.base.tsx
index 2cfb39e29e6a53..1de69743d1f6d1 100644
--- a/packages/react-charting/src/components/HeatMapChart/HeatMapChart.base.tsx
+++ b/packages/react-charting/src/components/HeatMapChart/HeatMapChart.base.tsx
@@ -257,7 +257,10 @@ export class HeatMapChartBase extends React.Component {
this.setState({
target: this._rectRefArray[id].refElement,
- isCalloutVisible: true,
+ /** Show the callout if highlighted rectangle is focused and Hide it if unhighlighted rectangle is focused */
+ isCalloutVisible:
+ this.state.isLegendSelected === false ||
+ (this.state.isLegendSelected === true && this.state.activeLegend === data.legend),
calloutYValue: `${data.rectText}`,
calloutTextColor: this._colorScale(data.value),
calloutLegend: data.legend,
@@ -274,7 +277,10 @@ export class HeatMapChartBase extends React.Component {
@@ -9,6 +10,7 @@ export const getHeatMapChartStyles = (props: IHeatMapChartStyleProps): IHeatMapC
{
pointerEvents: 'none',
fill: theme.palette.white,
+ fontWeight: FontWeights.semibold,
},
],
subComponentStyles: {
diff --git a/packages/react-charting/src/components/HeatMapChart/HeatMapChart.test.tsx b/packages/react-charting/src/components/HeatMapChart/HeatMapChart.test.tsx
index 5fdc0061340962..0c1fc5e6cba8dc 100644
--- a/packages/react-charting/src/components/HeatMapChart/HeatMapChart.test.tsx
+++ b/packages/react-charting/src/components/HeatMapChart/HeatMapChart.test.tsx
@@ -2,6 +2,7 @@ jest.mock('react-dom');
import * as React from 'react';
import * as renderer from 'react-test-renderer';
import { mount, ReactWrapper } from 'enzyme';
+import toJson from 'enzyme-to-json';
import { resetIds } from '../../Utilities';
import { IHeatMapChartProps, HeatMapChart } from './index';
@@ -236,3 +237,22 @@ describe('Render calling with respective to props', () => {
renderMock.mockRestore();
});
});
+
+describe('HeatMapChart - mouse events', () => {
+ beforeEach(sharedBeforeEach);
+ afterEach(sharedAfterEach);
+
+ it('Should render callout correctly on mouseover', () => {
+ wrapper = mount(
+ ,
+ );
+ wrapper.find('rect').at(1).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/packages/react-charting/src/components/HeatMapChart/__snapshots__/HeatMapChart.test.tsx.snap b/packages/react-charting/src/components/HeatMapChart/__snapshots__/HeatMapChart.test.tsx.snap
index 2764e5afaec89c..6c0b6359f16489 100644
--- a/packages/react-charting/src/components/HeatMapChart/__snapshots__/HeatMapChart.test.tsx.snap
+++ b/packages/react-charting/src/components/HeatMapChart/__snapshots__/HeatMapChart.test.tsx.snap
@@ -1,5 +1,555 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`HeatMapChart - mouse events Should render callout correctly on mouseover 1`] = `
+
+
+
+
+
+
+
+
+ 25
+
+
+
+
+
+ 50
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Execllent (0-200)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Execllent (0-200)
+
+
+ 50
+
+
+
+
+ 50
+
+ /
+
+ 2,391
+
+
+
+
+ a good day to start with in Texas with best air quality
+
+
+
+
+
+
+`;
+
exports[`HeatMapChart snapShot testing renders HeatMapChart correctly 1`] = `
+
`;
@@ -447,7 +1000,7 @@ exports[`HeatMapChart snapShot testing renders corretly even when data is not pr
fill: #ffffff;
font-family: 'Segoe UI', 'Segoe UI Web (West European)', 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
font-size: 14px;
- font-weight: 400;
+ font-weight: 600;
pointer-events: none;
}
dominantBaseline="middle"
@@ -480,7 +1033,7 @@ exports[`HeatMapChart snapShot testing renders corretly even when data is not pr
fill: #ffffff;
font-family: 'Segoe UI', 'Segoe UI Web (West European)', 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
font-size: 14px;
- font-weight: 400;
+ font-weight: 600;
pointer-events: none;
}
dominantBaseline="middle"
@@ -741,6 +1294,9 @@ exports[`HeatMapChart snapShot testing renders corretly even when data is not pr
+
`;
@@ -864,7 +1420,7 @@ exports[`HeatMapChart snapShot testing renders hideLegend correctly 1`] = `
fill: #ffffff;
font-family: 'Segoe UI', 'Segoe UI Web (West European)', 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
font-size: 14px;
- font-weight: 400;
+ font-weight: 600;
pointer-events: none;
}
dominantBaseline="middle"
@@ -897,7 +1453,7 @@ exports[`HeatMapChart snapShot testing renders hideLegend correctly 1`] = `
fill: #ffffff;
font-family: 'Segoe UI', 'Segoe UI Web (West European)', 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
font-size: 14px;
- font-weight: 400;
+ font-weight: 600;
pointer-events: none;
}
dominantBaseline="middle"
@@ -909,6 +1465,9 @@ exports[`HeatMapChart snapShot testing renders hideLegend correctly 1`] = `
+
`;
@@ -1032,7 +1591,7 @@ exports[`HeatMapChart snapShot testing renders hideTooltip correctly 1`] = `
fill: #ffffff;
font-family: 'Segoe UI', 'Segoe UI Web (West European)', 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
font-size: 14px;
- font-weight: 400;
+ font-weight: 600;
pointer-events: none;
}
dominantBaseline="middle"
@@ -1065,7 +1624,7 @@ exports[`HeatMapChart snapShot testing renders hideTooltip correctly 1`] = `
fill: #ffffff;
font-family: 'Segoe UI', 'Segoe UI Web (West European)', 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
font-size: 14px;
- font-weight: 400;
+ font-weight: 600;
pointer-events: none;
}
dominantBaseline="middle"
@@ -1236,6 +1795,9 @@ exports[`HeatMapChart snapShot testing renders hideTooltip correctly 1`] = `
+
`;
@@ -1359,7 +1921,7 @@ exports[`HeatMapChart snapShot testing renders yAxisTickFormat correctly 1`] = `
fill: #ffffff;
font-family: 'Segoe UI', 'Segoe UI Web (West European)', 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
font-size: 14px;
- font-weight: 400;
+ font-weight: 600;
pointer-events: none;
}
dominantBaseline="middle"
@@ -1392,7 +1954,7 @@ exports[`HeatMapChart snapShot testing renders yAxisTickFormat correctly 1`] = `
fill: #ffffff;
font-family: 'Segoe UI', 'Segoe UI Web (West European)', 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
font-size: 14px;
- font-weight: 400;
+ font-weight: 600;
pointer-events: none;
}
dominantBaseline="middle"
@@ -1563,5 +2125,8 @@ exports[`HeatMapChart snapShot testing renders yAxisTickFormat correctly 1`] = `
+
`;
diff --git a/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.base.tsx b/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.base.tsx
index 4054279ee4d05a..068b07776febda 100644
--- a/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.base.tsx
+++ b/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.base.tsx
@@ -13,6 +13,7 @@ import {
import { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';
import { ChartHoverCard, convertToLocaleString, getAccessibleDataObject } from '../../utilities/index';
import { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';
+import { TooltipHost, TooltipOverflowMode } from '@fluentui/react';
const getClassNames = classNamesFunction();
@@ -88,12 +89,15 @@ export class HorizontalBarChartBase extends React.Component
{points!.chartTitle && (
-
- {points!.chartTitle}
-
+
+ {points!.chartTitle}
+
+
)}
{chartDataText}
@@ -228,21 +232,21 @@ export class HorizontalBarChartBase extends React.Component
+
{convertToLocaleString(x, culture)}
);
case 'fraction':
return (
- {convertToLocaleString(x, culture)}
+ {convertToLocaleString(x, culture)}
{'/' + convertToLocaleString(y, culture)}
);
case 'percentage':
const dataRatioPercentage = `${convertToLocaleString(Math.round((x / y) * 100), culture)}%`;
return (
-
+
{dataRatioPercentage}
);
diff --git a/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.styles.ts b/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.styles.ts
index 47a22f4807b440..d1040736c4a67e 100644
--- a/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.styles.ts
+++ b/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.styles.ts
@@ -34,7 +34,14 @@ export const getHorizontalBarChartStyles = (props: IHorizontalBarChartStyleProps
justifyContent: 'space-between',
marginBottom: '3px',
},
- chartDataText: {
+ chartTitleLeft: {
+ fontWeight: FontWeights.bold,
+ textOverflow: 'ellipsis',
+ overflow: 'hidden',
+ whiteSpace: 'nowrap',
+ display: 'block',
+ },
+ chartTitleRight: {
fontWeight: FontWeights.bold,
},
chartDataTextDenominator: {
diff --git a/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.test.tsx b/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.test.tsx
index 8a8ea9898435f9..b7a41cb1ff3b81 100644
--- a/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.test.tsx
+++ b/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.test.tsx
@@ -5,6 +5,7 @@ import { mount, ReactWrapper } from 'enzyme';
import { DefaultPalette } from '@fluentui/react/lib/Styling';
import { IChartProps, IChartDataPoint, IHorizontalBarChartProps, HorizontalBarChart } from './index';
import { IHorizontalBarChartState, HorizontalBarChartBase } from './HorizontalBarChart.base';
+import toJson from 'enzyme-to-json';
// Wrapper of the HorizontalBarChart to be tested.
let wrapper: ReactWrapper
| undefined;
@@ -114,3 +115,42 @@ describe('Render calling with respective to props', () => {
renderMock.mockRestore();
});
});
+
+describe('HorizontalBarChart - mouse events', () => {
+ beforeEach(sharedBeforeEach);
+ afterEach(sharedAfterEach);
+
+ it('Should render callout correctly on mouseover', () => {
+ jest.spyOn(global.Math, 'random').mockReturnValue(0.1);
+
+ wrapper = mount( );
+ wrapper.find('rect').at(2).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+
+ jest.spyOn(global.Math, 'random').mockRestore();
+ });
+
+ it('Should render customized callout on mouseover', () => {
+ jest.spyOn(global.Math, 'random').mockReturnValue(0.1);
+
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ );
+ wrapper.find('rect').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+
+ jest.spyOn(global.Math, 'random').mockRestore();
+ });
+});
diff --git a/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.types.ts b/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.types.ts
index 4ab5dbbeba4b00..9b3be300cf220b 100644
--- a/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.types.ts
+++ b/packages/react-charting/src/components/HorizontalBarChart/HorizontalBarChart.types.ts
@@ -132,9 +132,14 @@ export interface IHorizontalBarChartStyles {
barWrapper: IStyle;
/**
- * Style for the chart data text.
+ * Style for left side text of the chart title
*/
- chartDataText: IStyle;
+ chartTitleLeft: IStyle;
+
+ /**
+ * Style for right side text of the chart title
+ */
+ chartTitleRight: IStyle;
/**
* Style for the chart data text denominator.
diff --git a/packages/react-charting/src/components/HorizontalBarChart/__snapshots__/HorizontalBarChart.test.tsx.snap b/packages/react-charting/src/components/HorizontalBarChart/__snapshots__/HorizontalBarChart.test.tsx.snap
new file mode 100644
index 00000000000000..a5bf5bd1bb384d
--- /dev/null
+++ b/packages/react-charting/src/components/HorizontalBarChart/__snapshots__/HorizontalBarChart.test.tsx.snap
@@ -0,0 +1,939 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`HorizontalBarChart - mouse events Should render callout correctly on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+ 2020/04/30
+
+
+ 19%
+
+
+
+
+
+
+
+
+`;
+
+exports[`HorizontalBarChart - mouse events Should render customized callout on mouseover 1`] = `
+
+
+
+
+
+
+
+
+ {
+ "legend": "one",
+ "horizontalBarChartdata": {
+ "x": 1543,
+ "y": 15000
+ },
+ "color": "#004b50",
+ "xAxisCalloutData": "2020/04/30",
+ "yAxisCalloutData": "94%"
+}
+
+
+
+
+
+
+`;
diff --git a/packages/react-charting/src/components/Legends/Legends.base.tsx b/packages/react-charting/src/components/Legends/Legends.base.tsx
index cf238c91daf2c2..9c1615e22de136 100644
--- a/packages/react-charting/src/components/Legends/Legends.base.tsx
+++ b/packages/react-charting/src/components/Legends/Legends.base.tsx
@@ -306,7 +306,7 @@ export class LegendsBase extends React.Component {
className={classNames.overflowIndicationTextStyle}
ref={(rootElem: HTMLDivElement) => (this._hoverCardRef = rootElem)}
{...(allowFocusOnLegends && {
- role: 'link',
+ role: 'button',
'aria-expanded': this.state.isHoverCardVisible,
'aria-label': `${items.length} ${overflowString}`,
})}
diff --git a/packages/react-charting/src/components/Legends/Legends.styles.ts b/packages/react-charting/src/components/Legends/Legends.styles.ts
index 0dd4bc7f57424b..dfcd51a5d92430 100644
--- a/packages/react-charting/src/components/Legends/Legends.styles.ts
+++ b/packages/react-charting/src/components/Legends/Legends.styles.ts
@@ -81,7 +81,7 @@ export const getStyles = (props: ILegendStyleProps): ILegendsStyles => {
...fonts.small,
lineHeight: '16px',
color: theme?.semanticColors.bodyText,
- opacity: props.colorOnSelectedState === palette.white ? '0.6' : '',
+ opacity: props.colorOnSelectedState === palette.white ? '0.67' : '',
},
hoverChange: {
width: '12px',
diff --git a/packages/react-charting/src/components/Legends/__snapshots__/Legends.test.tsx.snap b/packages/react-charting/src/components/Legends/__snapshots__/Legends.test.tsx.snap
index 0622491c7cf53e..d9416e1d01197e 100644
--- a/packages/react-charting/src/components/Legends/__snapshots__/Legends.test.tsx.snap
+++ b/packages/react-charting/src/components/Legends/__snapshots__/Legends.test.tsx.snap
@@ -1578,7 +1578,7 @@ exports[`Legends snapShot testing renders Legends correctly 1`] = `
font-size: 12px;
font-weight: 400;
line-height: 16px;
- opacity: 0.6;
+ opacity: 0.67;
}
>
Legend 17
@@ -3171,7 +3171,7 @@ exports[`Legends snapShot testing renders allowFocusOnLegends correctly 1`] = `
font-size: 12px;
font-weight: 400;
line-height: 16px;
- opacity: 0.6;
+ opacity: 0.67;
}
>
Legend 17
@@ -4764,7 +4764,7 @@ exports[`Legends snapShot testing renders canSelectMultipleLegends correctly 1`]
font-size: 12px;
font-weight: 400;
line-height: 16px;
- opacity: 0.6;
+ opacity: 0.67;
}
>
Legend 17
@@ -6357,7 +6357,7 @@ exports[`Legends snapShot testing renders styles correctly 1`] = `
font-size: 12px;
font-weight: 400;
line-height: 16px;
- opacity: 0.6;
+ opacity: 0.67;
}
>
Legend 17
diff --git a/packages/react-charting/src/components/LineChart/LineChart.test.tsx b/packages/react-charting/src/components/LineChart/LineChart.test.tsx
index 7007f62cc25109..7c0f82f8ded2d6 100644
--- a/packages/react-charting/src/components/LineChart/LineChart.test.tsx
+++ b/packages/react-charting/src/components/LineChart/LineChart.test.tsx
@@ -5,6 +5,8 @@ import * as renderer from 'react-test-renderer';
import { mount, ReactWrapper } from 'enzyme';
import { ILineChartProps, LineChart } from './index';
import { ILineChartState, LineChartBase } from './LineChart.base';
+import { ICustomizedCalloutData } from '../../index';
+import toJson from 'enzyme-to-json';
// Wrapper of the LineChart to be tested.
let wrapper: ReactWrapper | undefined;
@@ -143,3 +145,82 @@ describe('Render calling with respective to props', () => {
renderMock.mockRestore();
});
});
+
+describe('LineChart - mouse events', () => {
+ let root: HTMLDivElement | null;
+
+ beforeEach(() => {
+ sharedBeforeEach();
+
+ root = document.createElement('div');
+ document.body.appendChild(root);
+ });
+
+ afterEach(() => {
+ sharedAfterEach();
+
+ if (root) {
+ document.body.removeChild(root);
+ root = null;
+ }
+ });
+
+ it('Should render callout correctly on mouseover', () => {
+ // document.getElementbyId() returns null if component is not attached to DOM
+ wrapper = mount( , { attachTo: root });
+ wrapper.find('line[id^="lineID"]').at(0).simulate('mouseover');
+ // Direct DOM changes like toggling visibility attr of verticalLine dont seem to update enzyme wrapper here
+ // but these changes are visible in wrapper.html()
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('Should render callout correctly on mousemove', () => {
+ wrapper = mount( , { attachTo: root });
+ wrapper.find('path[id^="circle"]').at(0).simulate('mousemove');
+ const html1 = wrapper.html();
+ wrapper.find('path[id^="circle"]').at(1).simulate('mousemove');
+ const html2 = wrapper.html();
+ expect(html1).not.toBe(html2);
+ });
+
+ it('Should render customized callout on mouseover', () => {
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ { attachTo: root },
+ );
+ wrapper.find('line[id^="lineID"]').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('Should render customized callout per stack on mouseover', () => {
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ { attachTo: root },
+ );
+ wrapper.find('line[id^="lineID"]').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/packages/react-charting/src/components/LineChart/__snapshots__/LineChart.test.tsx.snap b/packages/react-charting/src/components/LineChart/__snapshots__/LineChart.test.tsx.snap
index 365dab9034a1c5..db3e2e223ec4bf 100644
--- a/packages/react-charting/src/components/LineChart/__snapshots__/LineChart.test.tsx.snap
+++ b/packages/react-charting/src/components/LineChart/__snapshots__/LineChart.test.tsx.snap
@@ -1,5 +1,1358 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`LineChart - mouse events Should render callout correctly on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`LineChart - mouse events Should render customized callout on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`LineChart - mouse events Should render customized callout per stack on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
exports[`LineChart snapShot testing renders LineChart correctly 1`] = `
+
`;
@@ -635,6 +1991,9 @@ exports[`LineChart snapShot testing renders enabledLegendsWrapLines correctly 1`
+
`;
@@ -805,6 +2164,9 @@ exports[`LineChart snapShot testing renders hideLegend correctly 1`] = `
+
`;
@@ -1134,6 +2496,9 @@ exports[`LineChart snapShot testing renders hideTooltip correctly 1`] = `
+
`;
@@ -1463,6 +2828,9 @@ exports[`LineChart snapShot testing renders showXAxisLablesTooltip correctly 1`]
+
`;
@@ -1792,6 +3160,9 @@ exports[`LineChart snapShot testing renders wrapXAxisLables correctly 1`] = `
+
`;
@@ -2121,5 +3492,8 @@ exports[`LineChart snapShot testing renders yAxisTickFormat correctly 1`] = `
+
`;
diff --git a/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.base.tsx b/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.base.tsx
index 234b9cd05adea9..4ac1f4bf92f2a9 100644
--- a/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.base.tsx
+++ b/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.base.tsx
@@ -13,6 +13,7 @@ import {
import { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';
import { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';
import { ChartHoverCard, convertToLocaleString, getAccessibleDataObject } from '../../utilities/index';
+import { TooltipHost, TooltipOverflowMode } from '@fluentui/react';
const getClassNames = classNamesFunction();
@@ -35,6 +36,7 @@ export interface IMultiStackedBarChartState {
yCalloutValue?: string;
dataPointCalloutProps?: IChartDataPoint;
callOutAccessibilityData?: IAccessibilityProps;
+ calloutLegend: string;
}
export class MultiStackedBarChartBase extends React.Component {
@@ -61,6 +63,7 @@ export class MultiStackedBarChartBase extends React.Component {
@@ -108,6 +111,8 @@ export class MultiStackedBarChartBase extends React.Component
@@ -140,6 +145,22 @@ export class MultiStackedBarChartBase extends React.Component {
+ const pointData = point.data ? point.data : 0;
+ value = (pointData / total) * 100 ? (pointData / total) * 100 : 0;
+ if (value < 1 && value !== 0) {
+ value = 1;
+ } else if (value > 99 && value !== 100) {
+ value = 99;
+ }
+ sumOfPercent += value;
+
+ return sumOfPercent;
+ });
+
+ const scalingRatio = sumOfPercent !== 0 ? sumOfPercent / 100 : 1;
+
let prevPosition = 0;
let value = 0;
@@ -154,6 +175,13 @@ export class MultiStackedBarChartBase extends React.Component 99 && value !== 100) {
+ value = 99 / scalingRatio;
+ } else {
+ value = value / scalingRatio;
+ }
startingPoint.push(prevPosition);
@@ -214,9 +242,13 @@ export class MultiStackedBarChartBase extends React.Component
{data!.chartTitle && (
-
- {data!.chartTitle}
-
+
+ {data!.chartTitle}
+
)}
{showRatio && (
@@ -243,26 +275,24 @@ export class MultiStackedBarChartBase extends React.Component
{
- if (obj.legendText === point.legend!) {
- this.setState({
- refSelected: obj.refElement,
- isCalloutVisible: true,
- selectedLegendTitle: point.legend!,
- dataForHoverCard: pointData,
- color: color,
- xCalloutValue: point.xAxisCalloutData!,
- yCalloutValue: point.yAxisCalloutData!,
- dataPointCalloutProps: point,
- callOutAccessibilityData: point.callOutAccessibilityData!,
- });
- }
- });
- }
+ this.state.refArray.forEach((obj: IRefArrayData) => {
+ if (obj.legendText === point.legend!) {
+ this.setState({
+ refSelected: obj.refElement,
+ /** Show the callout if highlighted bar is focused and Hide it if unhighlighted bar is focused */
+ isCalloutVisible:
+ this.state.isLegendSelected === false ||
+ (this.state.isLegendSelected && this.state.selectedLegendTitle === point.legend!),
+ calloutLegend: point.legend!,
+ dataForHoverCard: pointData,
+ color: color,
+ xCalloutValue: point.xAxisCalloutData!,
+ yCalloutValue: point.yAxisCalloutData!,
+ dataPointCalloutProps: point,
+ callOutAccessibilityData: point.callOutAccessibilityData!,
+ });
+ }
+ });
}
private _refCallback(element: SVGGElement, legendTitle: string): void {
@@ -396,16 +426,15 @@ export class MultiStackedBarChartBase extends React.Component {
const { className, width, barHeight, shouldHighlight, theme, href } = props;
@@ -26,6 +27,13 @@ export const getMultiStackedBarChartStyles = (props: IMultiStackedBarChartStyleP
justifyContent: 'space-between',
marginBottom: '3px',
},
+ chartTitleLeft: {
+ fontWeight: FontWeights.bold,
+ textOverflow: 'ellipsis',
+ overflow: 'hidden',
+ whiteSpace: 'nowrap',
+ display: 'block',
+ },
singleChartRoot: {
width: width ? width : '100%',
display: 'flex',
diff --git a/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.test.tsx b/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.test.tsx
index ce57a4a330dc05..ec52126d220bef 100644
--- a/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.test.tsx
+++ b/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.test.tsx
@@ -6,6 +6,7 @@ import { mount, ReactWrapper } from 'enzyme';
import { DefaultPalette } from '@fluentui/react/lib/Styling';
import { IChartProps, IChartDataPoint, IMultiStackedBarChartProps, MultiStackedBarChart } from '../../index';
import { IMultiStackedBarChartState, MultiStackedBarChartBase } from './MultiStackedBarChart.base';
+import toJson from 'enzyme-to-json';
// Wrapper of the MultiStackedBarChart to be tested.
let wrapper: ReactWrapper | undefined;
@@ -197,3 +198,43 @@ describe('Render calling with respective to props', () => {
renderMock.mockRestore();
});
});
+
+describe('MultiStackedBarChart - mouse events', () => {
+ beforeEach(sharedBeforeEach);
+ afterEach(sharedAfterEach);
+
+ it('Should render callout correctly on mouseover', () => {
+ wrapper = mount( );
+ wrapper.find('rect').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('Should render callout correctly on mousemove', () => {
+ wrapper = mount( );
+ wrapper.find('rect').at(0).simulate('mousemove');
+ const html1 = wrapper.html();
+ wrapper.find('rect').at(1).simulate('mousemove');
+ const html2 = wrapper.html();
+ expect(html1).not.toBe(html2);
+ });
+
+ it('Should render customized callout on mouseover', () => {
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ );
+ wrapper.find('rect').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.types.ts b/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.types.ts
index 09eca46a0101dd..d54b23100f4b75 100644
--- a/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.types.ts
+++ b/packages/react-charting/src/components/StackedBarChart/MultiStackedBarChart.types.ts
@@ -168,6 +168,11 @@ export interface IMultiStackedBarChartStyles {
*/
chartTitle: IStyle;
+ /**
+ * Style for left side text of the chart title
+ */
+ chartTitleLeft: IStyle;
+
/**
* Style to change the opacity of bars in dataviz when we hover on a single bar or legends
*/
diff --git a/packages/react-charting/src/components/StackedBarChart/StackedBarChart.base.tsx b/packages/react-charting/src/components/StackedBarChart/StackedBarChart.base.tsx
index a62c7db2f19c8b..51927d30b4caea 100644
--- a/packages/react-charting/src/components/StackedBarChart/StackedBarChart.base.tsx
+++ b/packages/react-charting/src/components/StackedBarChart/StackedBarChart.base.tsx
@@ -7,6 +7,7 @@ import { IRefArrayData, IStackedBarChartProps, IStackedBarChartStyleProps, IStac
import { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';
import { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';
import { ChartHoverCard, convertToLocaleString, getAccessibleDataObject } from '../../utilities/index';
+import { TooltipHost, TooltipOverflowMode } from '@fluentui/react';
const getClassNames = classNamesFunction();
export interface IStackedBarChartState {
@@ -22,6 +23,7 @@ export interface IStackedBarChartState {
yCalloutValue?: string;
dataPointCalloutProps?: IChartDataPoint;
callOutAccessibilityData?: IAccessibilityProps;
+ calloutLegend: string;
}
export class StackedBarChartBase extends React.Component {
@@ -48,6 +50,7 @@ export class StackedBarChartBase extends React.Component
{data!.chartTitle && (
-
- {data!.chartTitle}
-
+
+ {data!.chartTitle}
+
)}
{showRatio && (
@@ -146,6 +153,8 @@ export class StackedBarChartBase extends React.Component
@@ -154,7 +163,7 @@ export class StackedBarChartBase extends React.Component {
- if (obj.index === point.legend!) {
- this.setState({
- refSelected: obj.refElement,
- isCalloutVisible: true,
- selectedLegendTitle: point.legend!,
- dataForHoverCard: pointData,
- color: color,
- xCalloutValue: point.xAxisCalloutData!,
- yCalloutValue: point.yAxisCalloutData!,
- dataPointCalloutProps: point,
- callOutAccessibilityData: point.callOutAccessibilityData!,
- });
- }
- });
- }
+ this._refArray.forEach((obj: IRefArrayData) => {
+ if (obj.index === point.legend!) {
+ this.setState({
+ refSelected: obj.refElement,
+ /** Show the callout if highlighted bar is focused and Hide it if unhighlighted bar is focused */
+ isCalloutVisible:
+ this.state.isLegendSelected === false ||
+ (this.state.isLegendSelected && this.state.selectedLegendTitle === point.legend!),
+ calloutLegend: point.legend!,
+ dataForHoverCard: pointData,
+ color: color,
+ xCalloutValue: point.xAxisCalloutData!,
+ yCalloutValue: point.yAxisCalloutData!,
+ dataPointCalloutProps: point,
+ callOutAccessibilityData: point.callOutAccessibilityData!,
+ });
+ }
+ });
}
private _addLegend(legendDataItems: ILegend[], data?: IChartDataPoint): void {
@@ -409,16 +416,15 @@ export class StackedBarChartBase extends React.Component,
): void {
mouseEvent.persist();
- if (
- (this.state.isLegendSelected === false ||
- (this.state.isLegendSelected && this.state.selectedLegendTitle === point.legend!)) &&
- this._calloutAnchorPoint !== point
- ) {
+ if (this._calloutAnchorPoint !== point) {
this._calloutAnchorPoint = point;
this.setState({
refSelected: mouseEvent,
- isCalloutVisible: true,
- selectedLegendTitle: point.legend!,
+ /** Show the callout if highlighted bar is hovered and Hide it if unhighlighted bar is hovered */
+ isCalloutVisible:
+ this.state.isLegendSelected === false ||
+ (this.state.isLegendSelected && this.state.selectedLegendTitle === point.legend!),
+ calloutLegend: point.legend!,
dataForHoverCard: pointData,
color: color,
xCalloutValue: point.xAxisCalloutData!,
diff --git a/packages/react-charting/src/components/StackedBarChart/StackedBarChart.styles.ts b/packages/react-charting/src/components/StackedBarChart/StackedBarChart.styles.ts
index ecb1bc992e2d42..3e6154f92fbdfb 100644
--- a/packages/react-charting/src/components/StackedBarChart/StackedBarChart.styles.ts
+++ b/packages/react-charting/src/components/StackedBarChart/StackedBarChart.styles.ts
@@ -36,6 +36,13 @@ export const getStyles = (props: IStackedBarChartStyleProps): IStackedBarChartSt
justifyContent: 'space-between',
marginBottom: '3px',
},
+ chartTitleLeft: {
+ fontWeight: FontWeights.bold,
+ textOverflow: 'ellipsis',
+ overflow: 'hidden',
+ whiteSpace: 'nowrap',
+ display: 'block',
+ },
legendContainer: {
margin: '4px 0px 0px 4px',
},
diff --git a/packages/react-charting/src/components/StackedBarChart/StackedBarChart.test.tsx b/packages/react-charting/src/components/StackedBarChart/StackedBarChart.test.tsx
index dca2b1e9fdc623..3671b7527c0839 100644
--- a/packages/react-charting/src/components/StackedBarChart/StackedBarChart.test.tsx
+++ b/packages/react-charting/src/components/StackedBarChart/StackedBarChart.test.tsx
@@ -6,6 +6,7 @@ import { mount, ReactWrapper } from 'enzyme';
import { DefaultPalette } from '@fluentui/react/lib/Styling';
import { IChartProps, IChartDataPoint, IStackedBarChartProps, StackedBarChart } from '../../index';
import { IStackedBarChartState, StackedBarChartBase } from './StackedBarChart.base';
+import toJson from 'enzyme-to-json';
// Wrapper of the StackedBarChart to be tested.
let wrapper: ReactWrapper | undefined;
@@ -175,3 +176,43 @@ describe('Render calling with respective to props', () => {
renderMock.mockRestore();
});
});
+
+describe('StackedBarChart - mouse events', () => {
+ beforeEach(sharedBeforeEach);
+ afterEach(sharedAfterEach);
+
+ it('Should render callout correctly on mouseover', () => {
+ wrapper = mount( );
+ wrapper.find('rect').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('Should render callout correctly on mousemove', () => {
+ wrapper = mount( );
+ wrapper.find('rect').at(0).simulate('mousemove');
+ const html1 = wrapper.html();
+ wrapper.find('rect').at(1).simulate('mousemove');
+ const html2 = wrapper.html();
+ expect(html1).not.toBe(html2);
+ });
+
+ it('Should render customized callout on mouseover', () => {
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ );
+ wrapper.find('rect').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/packages/react-charting/src/components/StackedBarChart/StackedBarChart.types.ts b/packages/react-charting/src/components/StackedBarChart/StackedBarChart.types.ts
index 5fe5d7d2a77043..43dbf3d23febcf 100644
--- a/packages/react-charting/src/components/StackedBarChart/StackedBarChart.types.ts
+++ b/packages/react-charting/src/components/StackedBarChart/StackedBarChart.types.ts
@@ -210,6 +210,11 @@ export interface IStackedBarChartStyles {
*/
chartTitle: IStyle;
+ /**
+ * Style for left side text of the chart title
+ */
+ chartTitleLeft: IStyle;
+
/**
* Style for the legend container div
*/
diff --git a/packages/react-charting/src/components/StackedBarChart/__snapshots__/MultiStackedBarChart.test.tsx.snap b/packages/react-charting/src/components/StackedBarChart/__snapshots__/MultiStackedBarChart.test.tsx.snap
index 865d98ae00c231..09b67808422bb9 100644
--- a/packages/react-charting/src/components/StackedBarChart/__snapshots__/MultiStackedBarChart.test.tsx.snap
+++ b/packages/react-charting/src/components/StackedBarChart/__snapshots__/MultiStackedBarChart.test.tsx.snap
@@ -1,5 +1,1170 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`MultiStackedBarChart - mouse events Should render callout correctly on mouseover 1`] = `
+
+
+
+
+
+
+
+ Monitored
+
+
+ Monitored
+
+
+
+
+ 40
+
+
+ /
+ 63
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unmonitored
+
+
+ Unmonitored
+
+
+
+
+ 40
+
+
+ /
+ 63
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2020/04/30
+
+
+ 40%
+
+
+
+
+
+
+
+
+`;
+
+exports[`MultiStackedBarChart - mouse events Should render customized callout on mouseover 1`] = `
+
+
+
+
+
+
+
+ Monitored
+
+
+ Monitored
+
+
+
+
+ 40
+
+
+ /
+ 63
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unmonitored
+
+
+ Unmonitored
+
+
+
+
+ 40
+
+
+ /
+ 63
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ "legend": "Debit card numbers (EU and USA)",
+ "data": 40,
+ "color": "#e81123",
+ "xAxisCalloutData": "2020/04/30",
+ "yAxisCalloutData": "40%"
+}
+
+
+
+
+
+
+`;
+
exports[`MultiStackedBarChart snapShot testing renders MultiStackedBarChart correctly 1`] = `
-
+
Monitored
-
+
+
+ Monitored
+
-
+
Unmonitored
-
+
+
+ Unmonitored
+
-
+
Monitored
-
+
+
+ Monitored
+
-
+
Unmonitored
-
+
+
+ Unmonitored
+
-
+
Monitored
-
+
+
+ Monitored
+
-
+
Unmonitored
-
+
+
+ Unmonitored
+
-
+
Monitored
-
+
+
+ Monitored
+
@@ -1142,7 +2545,7 @@ exports[`MultiStackedBarChart snapShot testing renders hideRatio correctly 1`] =
&:focus {
outline: none;
}
- data-focuszone-id="FocusZone19"
+ data-focuszone-id="FocusZone26"
onFocus={[Function]}
onKeyDown={[Function]}
onMouseDownCapture={[Function]}
@@ -1159,7 +2562,7 @@ exports[`MultiStackedBarChart snapShot testing renders hideRatio correctly 1`] =
>
-
+
Unmonitored
-
+
+
+ Unmonitored
+
-
+
Monitored
-
+
+
+ Monitored
+
-
+
Unmonitored
-
+
+
+ Unmonitored
+
+
+
+
+
+ Stacked bar chart 2nd example
+
+
+ Stacked bar chart 2nd example
+
+
+
+
+ 40
+
+
+ /
+
+ 63
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ first Lorem ipsum dolor sit amet
+
+
+ 40
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`StackedBarChart - mouse events Should render customized callout on mouseover 1`] = `
+
+
+
+
+
+ Stacked bar chart 2nd example
+
+
+ Stacked bar chart 2nd example
+
+
+
+
+ 40
+
+
+ /
+
+ 63
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ "legend": "first Lorem ipsum dolor sit amet",
+ "data": 40,
+ "color": "#5c005c"
+}
+
+
+
+
+
+
+
+
+
+`;
+
exports[`StackedBarChart snapShot testing renders StackedBarChart correctly 1`] = `
-
+
+ Stacked bar chart 2nd example
+
+
Stacked bar chart 2nd example
-
+
-
+
+ Stacked bar chart 2nd example
+
+
Stacked bar chart 2nd example
-
+
-
+
+ Stacked bar chart 2nd example
+
+
Stacked bar chart 2nd example
-
+
-
+
+ Stacked bar chart 2nd example
+
+
Stacked bar chart 2nd example
-
+
-
+
Stacked bar chart 2nd example
-
+
+
+ Stacked bar chart 2nd example
+
@@ -755,7 +1592,7 @@ exports[`StackedBarChart snapShot testing renders hideNumberDisplay correctly 1`
&:focus {
outline: none;
}
- data-focuszone-id="FocusZone11"
+ data-focuszone-id="FocusZone15"
onFocus={[Function]}
onKeyDown={[Function]}
onMouseDownCapture={[Function]}
@@ -774,7 +1611,7 @@ exports[`StackedBarChart snapShot testing renders hideNumberDisplay correctly 1`
-
+
+ Stacked bar chart 2nd example
+
+
Stacked bar chart 2nd example
-
+
-
+
+ Stacked bar chart 2nd example
+
+
Stacked bar chart 2nd example
-
+
@@ -1081,7 +1986,7 @@ exports[`StackedBarChart snapShot testing renders ignoreFixStyle correctly 1`] =
&:focus {
outline: none;
}
- data-focuszone-id="FocusZone17"
+ data-focuszone-id="FocusZone23"
onFocus={[Function]}
onKeyDown={[Function]}
onMouseDownCapture={[Function]}
@@ -1100,7 +2005,7 @@ exports[`StackedBarChart snapShot testing renders ignoreFixStyle correctly 1`] =
();
// Create a parent class for common tree components
class StandardTree {
public treeData: ITreeChartDataPoint;
- public styleClassNames: {
- rectmetricText: string | undefined;
- rectSubText: string | undefined;
- link: string;
- rectNode: string;
- rectText: string;
- };
-
- private _nodeElements: Array | React.SVGProps> = [];
- private _linkElements: Array> = [];
+ public styleClassNames: IProcessedStyleSet;
+
+ private _nodeElements: JSX.Element[] = [];
+ private _linkElements: JSX.Element[] = [];
+
constructor(
treeData: ITreeChartDataPoint,
- styleClassNames: { link: string; rectNode: string; rectText: string; rectSubText: string; rectmetricText: string },
- _nodeElements: Array | React.SVGProps> = [],
- _linkElements: Array> = [],
+ styleClassNames: IProcessedStyleSet,
+ _nodeElements: JSX.Element[] = [],
+ _linkElements: JSX.Element[] = [],
) {
this.treeData = treeData;
this.styleClassNames = styleClassNames;
@@ -48,7 +43,7 @@ class StandardTree {
let word: string = '';
const tspan = select('.svgTree').append('text').attr('class', 'tempText').append('tspan').text(null);
- if (styleClass !== undefined) {
+ if (styleClass) {
tspan.attr('class', styleClass);
}
@@ -77,8 +72,9 @@ class StandardTree {
public addNodeShapetoSVG(
name: string,
subname: string | undefined,
+ bodytext: string | undefined,
metricName: string | undefined,
- xCoordinate: number,
+ xCenterCoordinate: number,
yCoordinate: number,
fillColor: string,
rectangleWidth: number,
@@ -87,31 +83,37 @@ class StandardTree {
parentInfo: string,
) {
const ariaLabel = `nodeId: ${nodeId} \nnodeMainText: ${name}\nsubText ${subname} ${parentInfo}`;
- this._nodeElements.push(
- ,
- );
+ const xCoordinate = xCenterCoordinate - rectangleWidth / 2;
+ if (metricName || nodeId !== 0 || !bodytext) {
+ this._nodeElements.push(
+ ,
+ );
+ }
- if (subname !== undefined) {
+ if (subname) {
subname = this.truncateText(subname, rectangleWidth, rectangleWidth / 4, this.styleClassNames.rectSubText);
}
- if (metricName !== undefined) {
+ if (bodytext) {
+ bodytext = this.truncateText(bodytext, rectangleWidth, rectangleWidth / 4, this.styleClassNames.rectBodyText);
+ }
+ if (metricName) {
metricName = this.truncateText(
metricName,
rectangleWidth,
rectangleWidth / 4,
- this.styleClassNames.rectmetricText,
+ this.styleClassNames.rectMetricText,
);
}
name = this.truncateText(name, rectangleWidth, rectangleWidth / 4, this.styleClassNames.rectText);
@@ -120,22 +122,30 @@ class StandardTree {
// Text position x = x + rectWidth/2, 2 is ratio for length
// Sub-text position x = x + rectWidth/2, 2 is ratio for length
- const subValue =
- metricName !== undefined ? (
-
- {metricName}
-
- ) : (
+ const subValue = metricName ? (
+
+ {metricName}
+
+ ) : bodytext ? (
+ <>
{subname}
- );
+
+ {bodytext}
+
+ >
+ ) : (
+
+ {subname}
+
+ );
- if (subname === undefined && metricName === undefined) {
+ if (!subname && !metricName && !bodytext) {
this._nodeElements.push(
@@ -172,12 +182,25 @@ class StandardTree {
): string {
// gap adds ratio for parent.y to child.y
- const path = `M${childX},${childY - gap} H${childXMax + rectWidth} M${parentX + rectWidth / 2},${childY - gap}
+ /*Below code is used to draw lines(___|) to show the parent child relation i.e a vertical line
+ emerging from the parent and
+ then a horzontal line encompassing all the its children which are
+ shown below it .so it gives a visual representation of tree branches.
+
+ So for making this path firstly we are moving to the childX which is the mid point of the node and then
+ we are subtracting the half of rectwidth to move the complete width of the rectangle and
+ we are subtracting gap from y cordinate as we are making this line at a little gap from node.
+ Then we are building that line horizonatlly till childXmax, again adding half rectwidth to complete
+ the line till end as childXmax will be midpoint.
+ Then last part is for making line vertical for that we move to the parentx position and
+ then draw the vertical till parenty + rectHeight + gap/2
+ We have seperate path for leaf node as we are using different composition like compact, long etc.*/
+
+ const path = `M${childX - rectWidth / 2},${childY - gap} H${childXMax + rectWidth / 2} M${parentX},${childY - gap}
V${parentY + rectHeight + gap / 2}`;
- const leafpath = `M${parentX + rectWidth / 2},${parentY + rectHeight + gap / 2} V${
- parentY + gap * 5
- } H${parentX} H${parentX + rectWidth}`;
+ const leafpath = `M${parentX},${parentY + rectHeight + gap / 2} V${parentY + gap * 5}
+ H${parentX - rectWidth / 2} H${parentX + rectWidth / 2}`;
// based on the type of node return leafpath or path element
return leaf ? leafpath : path;
@@ -213,9 +236,9 @@ class LayeredTree extends StandardTree {
constructor(
treeData: ITreeChartDataPoint,
composition: number | undefined,
- styleClassNames: { link: string; rectNode: string; rectText: string; rectSubText: string; rectmetricText: string },
- _nodeElements: Array | React.SVGProps> = [],
- _linkElements: Array> = [],
+ styleClassNames: IProcessedStyleSet,
+ _nodeElements: JSX.Element[] = [],
+ _linkElements: JSX.Element[] = [],
_treeTraversal: number | undefined,
) {
super(treeData, styleClassNames, _nodeElements, _linkElements);
@@ -223,14 +246,7 @@ class LayeredTree extends StandardTree {
this._treeTraversal = _treeTraversal;
}
public createTree(givenLayoutWidth: number | undefined, screenWidth: number) {
- if (givenLayoutWidth !== undefined) {
- if (givenLayoutWidth < 65) {
- givenLayoutWidth = 65;
- }
- if (givenLayoutWidth > 90) {
- givenLayoutWidth = 90;
- }
- }
+ givenLayoutWidth = givenLayoutWidth! < 65 ? 65 : givenLayoutWidth! > 90 ? 90 : givenLayoutWidth;
const layoutWidth = givenLayoutWidth || 75;
const root = hierarchy(this.treeData, d => {
return d.children;
@@ -240,14 +256,14 @@ class LayeredTree extends StandardTree {
const treeHeight = root?.height + 1;
// Create tree layout, width: layoutWidth, height: layoutWidth/1.5 and add node separation
- const treemap = tree()
+ const treeChart = tree()
.nodeSize([layoutWidth, layoutWidth / 1.5])
.separation((a, b) => {
return a.parent === root && b.parent === root ? 3.5 : 1;
});
// Assigns the x and y position for the nodes
- const treeData = treemap(root);
+ const treeData = treeChart(root);
// Compute the new tree layout.
const nodes = treeData.descendants();
@@ -257,7 +273,7 @@ class LayeredTree extends StandardTree {
// Normalise x coordinate by start coordinate 0 with screenSize/3
nodes.forEach(d => {
d.y = d.depth === 0 ? 10 : d.depth * 130;
- d.x += screenWidth / 3;
+ d.x += screenWidth / 2;
});
// <------------------ Traversal section ------------------>
@@ -274,6 +290,7 @@ class LayeredTree extends StandardTree {
children: d.children,
dataName: d.data.name,
subName: d.data.subname,
+ bodyText: d.data.bodytext,
metricName: d.data?.metric,
fill: d.data.fill,
x: d.x,
@@ -306,8 +323,8 @@ class LayeredTree extends StandardTree {
// check for leaf nodes
if (!d.children && !parentSet.has(d.parentID) && treeHeight === 3) {
- const newWidth = (rectWidth - gap) / 2;
- const newHeight = rectHeight;
+ const compactNodeWidth = (rectWidth - gap) / 2;
+ const compactNodeHeight = rectHeight;
parentSet.add(d.parentID);
// <------------------ Links section ------------------>
@@ -328,8 +345,9 @@ class LayeredTree extends StandardTree {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const children: any = treeDataStructure[d.parentID]?.children;
- const dx1: number = treeDataStructure[d.parentID]?.x;
- const dx2: number = treeDataStructure[d.parentID]?.x + newWidth + gap;
+ const compactNodeCenterX1: number = treeDataStructure[d.parentID]?.x - compactNodeWidth / 2 - gap / 2;
+ const compactNodeCenterX2: number = treeDataStructure[d.parentID]?.x + compactNodeWidth / 2 + gap / 2;
+ const longNodeCenterX: number = treeDataStructure[d.parentID]?.x;
let dy: number = children[0]?.y;
for (let itr = 0; itr < children.length; ++itr) {
@@ -342,17 +360,20 @@ class LayeredTree extends StandardTree {
this.addNodeShapetoSVG(
child.data.name,
child.data.subname,
+ child.data.bodytext,
child.data.metricName,
- itr % 2 === 0 ? dx1 : dx2,
+ // If the leaf node count is 1 ,
+ //irrespective of provided composition we should always use long composition
+ itr % 2 === 0 ? (children.length === 1 ? longNodeCenterX : compactNodeCenterX1) : compactNodeCenterX2,
dy,
child.data.fill,
- children.length === 1 ? rectWidth : newWidth,
+ children.length === 1 ? rectWidth : compactNodeWidth,
rectHeight,
child.id,
parentInfo,
);
if (itr % 2 === 1) {
- dy += newHeight + gap;
+ dy += compactNodeHeight + gap;
}
}
// For long compostion
@@ -360,8 +381,9 @@ class LayeredTree extends StandardTree {
this.addNodeShapetoSVG(
child.data.name,
child.data.subname,
+ child.data.bodytext,
child.data.metricName,
- dx1,
+ longNodeCenterX,
dy,
child.data.fill,
rectWidth,
@@ -369,7 +391,7 @@ class LayeredTree extends StandardTree {
child.id,
parentInfo,
);
- dy += newHeight + gap;
+ dy += compactNodeHeight + gap;
}
}
@@ -379,24 +401,26 @@ class LayeredTree extends StandardTree {
this.addNodeShapetoSVG(
child.data.name,
child.data.subname,
+ child.data.bodytext,
child.data.metricName,
- itr % 2 === 0 ? dx1 : dx2,
+ itr % 2 === 0 ? compactNodeCenterX1 : compactNodeCenterX2,
dy,
child.data.fill,
- children.length === 1 ? rectWidth : newWidth,
+ children.length === 1 ? rectWidth : compactNodeWidth,
rectHeight,
child.id,
parentInfo,
);
if (itr % 2 === 1) {
- dy += newHeight + gap;
+ dy += compactNodeHeight + gap;
}
} else {
this.addNodeShapetoSVG(
child.data.name,
child.data.subname,
+ child.data.bodytext,
child.data.metricName,
- dx1,
+ longNodeCenterX,
dy,
child.data.fill,
rectWidth,
@@ -404,7 +428,7 @@ class LayeredTree extends StandardTree {
child.id,
parentInfo,
);
- dy += newHeight + gap;
+ dy += compactNodeHeight + gap;
}
}
}
@@ -412,9 +436,11 @@ class LayeredTree extends StandardTree {
if (d.children || treeHeight <= 2) {
// <------------------ Nodes section ------------------>
+ // Since the height <=2 we will be using long compositon.
this.addNodeShapetoSVG(
d.dataName,
d.subName,
+ d.bodyText,
d.metricName,
d.x,
d.y,
@@ -445,8 +471,8 @@ export class TreeChartBase extends React.Component {
private _composition: number | undefined;
private _classNames: IProcessedStyleSet;
private _margin: { left: number; right: number; top: number; bottom: number };
- private _nodeElements: Array | React.SVGProps> = [];
- private _linkElements: Array> = [];
+ private _nodeElements: JSX.Element[] = [];
+ private _linkElements: JSX.Element[] = [];
private _treeTraversal: number | undefined;
constructor(props: ITreeProps) {
@@ -498,27 +524,20 @@ export class TreeChartBase extends React.Component {
}
}
public createTreeChart() {
- const nodeElements: Array | React.SVGProps> = [];
- const linkElements: Array> = [];
-
- // Create styleClass object to access it in parent class
- const styleClassNames = {
- link: this._classNames.link,
- rectNode: this._classNames.rectNode,
- rectText: this._classNames.rectText,
- rectSubText: this._classNames.rectSubText,
- rectmetricText: this._classNames.rectMetricText,
- };
+ const nodeElements: JSX.Element[] = [];
+ const linkElements: JSX.Element[] = [];
+
// Instantiate inherited class and call createTree function for the object
const treeObject = new LayeredTree(
this._treeData,
this._composition,
- styleClassNames,
+ this._classNames,
nodeElements,
linkElements,
this._treeTraversal,
);
- treeObject.createTree(this.props.layoutWidth, this._width);
+ const width = this.state._width - this._margin.left - this._margin.right;
+ treeObject.createTree(this.props.layoutWidth, width);
this._nodeElements = nodeElements;
this._linkElements = linkElements;
}
diff --git a/packages/react-charting/src/components/TreeChart/TreeChart.styles.ts b/packages/react-charting/src/components/TreeChart/TreeChart.styles.ts
index 4ad561f40a65a8..45f89b733d1dd3 100644
--- a/packages/react-charting/src/components/TreeChart/TreeChart.styles.ts
+++ b/packages/react-charting/src/components/TreeChart/TreeChart.styles.ts
@@ -29,6 +29,10 @@ export const getStyles = (props: ITreeStyleProps): ITreeStyles => {
fill: '#484644',
...props.theme!.fonts.medium,
},
+ rectBodyText: {
+ fill: '#808080',
+ ...props.theme!.fonts.xSmall,
+ },
rectMetricText: {
fill: '#000000',
...props.theme!.fonts.xLarge,
diff --git a/packages/react-charting/src/components/TreeChart/TreeChart.types.ts b/packages/react-charting/src/components/TreeChart/TreeChart.types.ts
index 65236a2dff7de6..1217b914b0bd78 100644
--- a/packages/react-charting/src/components/TreeChart/TreeChart.types.ts
+++ b/packages/react-charting/src/components/TreeChart/TreeChart.types.ts
@@ -9,11 +9,15 @@ export interface ITreeChartDataPoint {
/**
* Subtext value (optional)
*/
- subname?: string | undefined;
+ subname?: string;
+ /**
+ * Bodytext value (optional)
+ */
+ bodytext?: string;
/**
* Metric text value (optional)
*/
- metric?: string | undefined;
+ metric?: string;
/**
* Color of the rectangular box
*/
@@ -54,12 +58,12 @@ export interface ITreeProps {
/**
* compostion for three layer chart, long: composition = 1; compact: composition = 0
*/
- composition?: NodesComposition.long | NodesComposition.compact | undefined;
+ composition?: NodesComposition.long | NodesComposition.compact;
/**
* Node Width Size for the Tree Layout
* * @default 75
*/
- layoutWidth?: number | undefined;
+ layoutWidth?: number;
/**
* traversal order for tree chart, preOrder = 1, levelOrder = 0
*/
@@ -125,11 +129,15 @@ export interface ITreeDataStructure {
/**
* Subtext value (optional)
*/
- subName?: string | undefined;
+ subName?: string;
+ /**
+ * Bodytext value (optional)
+ */
+ bodyText?: string;
/**
* Metric text value (optional)
*/
- metricName?: string | undefined;
+ metricName?: string;
/**
* Color of the rectangular box
*/
@@ -179,6 +187,10 @@ export interface ITreeStyles {
* Style for the node sub Text
*/
rectSubText: IStyle;
+ /**
+ * Style for the node body Text
+ */
+ rectBodyText: IStyle;
/**
* Style for the node metric value Text
*/
diff --git a/packages/react-charting/src/components/TreeChart/__snapshots__/TreeChart.test.tsx.snap b/packages/react-charting/src/components/TreeChart/__snapshots__/TreeChart.test.tsx.snap
index 07cf8d44c71f63..d61c93dadc05e9 100644
--- a/packages/react-charting/src/components/TreeChart/__snapshots__/TreeChart.test.tsx.snap
+++ b/packages/react-charting/src/components/TreeChart/__snapshots__/TreeChart.test.tsx.snap
@@ -53,7 +53,7 @@ subText subtext Root Node"
stroke="#0099BC"
tabIndex={0}
width={225}
- x={500}
+ x={602.5}
y={10}
/>
Root Node
subtext
@@ -112,7 +112,7 @@ subText subtext Parent info parentId: 0
stroke="#4F6BED"
tabIndex={0}
width={225}
- x={106.25}
+ x={208.75}
y={130}
/>
Child 1
100%
@@ -171,7 +171,7 @@ subText sub Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={102.5}
- x={106.25}
+ x={208.75}
y={260}
/>
leaf1
sub
@@ -230,7 +230,7 @@ subText undefined Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={102.5}
- x={228.75}
+ x={331.25}
y={260}
/>
leaf2
@@ -273,7 +273,7 @@ subText The subtext is as follows: sub Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={102.5}
- x={106.25}
+ x={208.75}
y={345.2173913043478}
/>
leaf3
The subtext is as follows: sub
@@ -332,7 +332,7 @@ subText sub Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={102.5}
- x={228.75}
+ x={331.25}
y={345.2173913043478}
/>
leaf4
sub
@@ -391,7 +391,7 @@ subText undefined Parent info parentId: 0
stroke="#881798"
tabIndex={0}
width={225}
- x={368.75}
+ x={471.25}
y={130}
/>
Child 2 is the child name
@@ -434,7 +434,7 @@ subText sub Parent info parentId: 6
stroke="#881798"
tabIndex={0}
width={102.5}
- x={368.75}
+ x={471.25}
y={260}
/>
leaf5
sub
@@ -493,7 +493,7 @@ subText sub Parent info parentId: 6
stroke="#881798"
tabIndex={0}
width={102.5}
- x={491.25}
+ x={593.75}
y={260}
/>
leaf6
sub
@@ -552,7 +552,7 @@ subText The subtext is as follows: subtext Parent info parentId: 0
stroke="#AE8C00"
tabIndex={0}
width={225}
- x={631.25}
+ x={733.75}
y={130}
/>
Child 3
The subtext is as follows: subtext
@@ -611,7 +611,7 @@ subText sub Parent info parentId: 9
stroke="#AE8C00"
tabIndex={0}
width={102.5}
- x={631.25}
+ x={733.75}
y={260}
/>
leaf7
sub
@@ -670,7 +670,7 @@ subText sub Parent info parentId: 9
stroke="#AE8C00"
tabIndex={0}
width={102.5}
- x={753.75}
+ x={856.25}
y={260}
/>
leaf8
sub
@@ -729,7 +729,7 @@ subText sub Parent info parentId: 9
stroke="#AE8C00"
tabIndex={0}
width={102.5}
- x={631.25}
+ x={733.75}
y={345.2173913043478}
/>
leaf9
sub
@@ -788,7 +788,7 @@ subText subtext Parent info parentId: 0
stroke="#FF00FF"
tabIndex={0}
width={225}
- x={893.75}
+ x={996.25}
y={130}
/>
Child 4
90%
@@ -847,7 +847,7 @@ subText sub Parent info parentId: 13
stroke="#FF00FF"
tabIndex={0}
width={225}
- x={893.75}
+ x={996.25}
y={260}
/>
leaf10
sub
@@ -895,7 +895,7 @@ subText sub Parent info parentId: 13
stroke-width: 2px;
stroke: #A1A1A1;
}
- d="M106.25,110 H1118.75 M612.5,110
+ d="M208.75,110 H1221.25 M715,110
V85.21739130434783"
/>
@@ -997,7 +1001,7 @@ subText subtext Root Node"
stroke="#0099BC"
tabIndex={0}
width={225}
- x={500}
+ x={602.5}
y={10}
/>
Root Node
subtext
@@ -1056,7 +1060,7 @@ subText subtext Parent info parentId: 0
stroke="#4F6BED"
tabIndex={0}
width={225}
- x={106.25}
+ x={208.75}
y={130}
/>
Child 1
100%
@@ -1115,7 +1119,7 @@ subText sub Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={225}
- x={106.25}
+ x={208.75}
y={260}
/>
leaf1
sub
@@ -1174,7 +1178,7 @@ subText undefined Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={225}
- x={106.25}
+ x={208.75}
y={345.2173913043478}
/>
leaf2
@@ -1217,7 +1221,7 @@ subText The subtext is as follows: sub Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={225}
- x={106.25}
+ x={208.75}
y={430.4347826086956}
/>
leaf3
The subtext is as follows: sub
@@ -1276,7 +1280,7 @@ subText sub Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={225}
- x={106.25}
+ x={208.75}
y={515.6521739130435}
/>
leaf4
sub
@@ -1335,7 +1339,7 @@ subText undefined Parent info parentId: 0
stroke="#881798"
tabIndex={0}
width={225}
- x={368.75}
+ x={471.25}
y={130}
/>
Child 2 is the child name
@@ -1378,7 +1382,7 @@ subText sub Parent info parentId: 6
stroke="#881798"
tabIndex={0}
width={225}
- x={368.75}
+ x={471.25}
y={260}
/>
leaf5
sub
@@ -1437,7 +1441,7 @@ subText sub Parent info parentId: 6
stroke="#881798"
tabIndex={0}
width={225}
- x={368.75}
+ x={471.25}
y={345.2173913043478}
/>
leaf6
sub
@@ -1496,7 +1500,7 @@ subText The subtext is as follows: subtext Parent info parentId: 0
stroke="#AE8C00"
tabIndex={0}
width={225}
- x={631.25}
+ x={733.75}
y={130}
/>
Child 3
The subtext is as follows: subtext
@@ -1555,7 +1559,7 @@ subText sub Parent info parentId: 9
stroke="#AE8C00"
tabIndex={0}
width={225}
- x={631.25}
+ x={733.75}
y={260}
/>
leaf7
sub
@@ -1614,7 +1618,7 @@ subText sub Parent info parentId: 9
stroke="#AE8C00"
tabIndex={0}
width={225}
- x={631.25}
+ x={733.75}
y={345.2173913043478}
/>
leaf8
sub
@@ -1673,7 +1677,7 @@ subText sub Parent info parentId: 9
stroke="#AE8C00"
tabIndex={0}
width={225}
- x={631.25}
+ x={733.75}
y={430.4347826086956}
/>
leaf9
sub
@@ -1732,7 +1736,7 @@ subText subtext Parent info parentId: 0
stroke="#FF00FF"
tabIndex={0}
width={225}
- x={893.75}
+ x={996.25}
y={130}
/>
Child 4
90%
@@ -1791,7 +1795,7 @@ subText sub Parent info parentId: 13
stroke="#FF00FF"
tabIndex={0}
width={225}
- x={893.75}
+ x={996.25}
y={260}
/>
leaf10
sub
@@ -1839,7 +1843,7 @@ subText sub Parent info parentId: 13
stroke-width: 2px;
stroke: #A1A1A1;
}
- d="M106.25,110 H1118.75 M612.5,110
+ d="M208.75,110 H1221.25 M715,110
V85.21739130434783"
/>
@@ -1941,7 +1949,7 @@ subText subtext Root Node"
stroke="#0099BC"
tabIndex={0}
width={225}
- x={500}
+ x={602.5}
y={10}
/>
Root Node
subtext
@@ -2000,7 +2008,7 @@ subText subtext Parent info parentId: 0
stroke="#4F6BED"
tabIndex={0}
width={225}
- x={106.25}
+ x={208.75}
y={130}
/>
Child 1
100%
@@ -2059,7 +2067,7 @@ subText sub Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={102.5}
- x={106.25}
+ x={208.75}
y={260}
/>
leaf1
sub
@@ -2118,7 +2126,7 @@ subText undefined Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={102.5}
- x={228.75}
+ x={331.25}
y={260}
/>
leaf2
@@ -2161,7 +2169,7 @@ subText The subtext is as follows: sub Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={102.5}
- x={106.25}
+ x={208.75}
y={345.2173913043478}
/>
leaf3
The subtext is as follows: sub
@@ -2220,7 +2228,7 @@ subText sub Parent info parentId: 1
stroke="#4F6BED"
tabIndex={0}
width={102.5}
- x={228.75}
+ x={331.25}
y={345.2173913043478}
/>
leaf4
sub
@@ -2279,7 +2287,7 @@ subText undefined Parent info parentId: 0
stroke="#881798"
tabIndex={0}
width={225}
- x={368.75}
+ x={471.25}
y={130}
/>
Child 2 is the child name
@@ -2322,7 +2330,7 @@ subText sub Parent info parentId: 6
stroke="#881798"
tabIndex={0}
width={225}
- x={368.75}
+ x={471.25}
y={260}
/>
leaf5
sub
@@ -2381,7 +2389,7 @@ subText sub Parent info parentId: 6
stroke="#881798"
tabIndex={0}
width={225}
- x={368.75}
+ x={471.25}
y={345.2173913043478}
/>
leaf6
sub
@@ -2440,7 +2448,7 @@ subText The subtext is as follows: subtext Parent info parentId: 0
stroke="#AE8C00"
tabIndex={0}
width={225}
- x={631.25}
+ x={733.75}
y={130}
/>
Child 3
The subtext is as follows: subtext
@@ -2499,7 +2507,7 @@ subText sub Parent info parentId: 9
stroke="#AE8C00"
tabIndex={0}
width={102.5}
- x={631.25}
+ x={733.75}
y={260}
/>
leaf7
sub
@@ -2558,7 +2566,7 @@ subText sub Parent info parentId: 9
stroke="#AE8C00"
tabIndex={0}
width={102.5}
- x={753.75}
+ x={856.25}
y={260}
/>
leaf8
sub
@@ -2617,7 +2625,7 @@ subText sub Parent info parentId: 9
stroke="#AE8C00"
tabIndex={0}
width={102.5}
- x={631.25}
+ x={733.75}
y={345.2173913043478}
/>
leaf9
sub
@@ -2676,7 +2684,7 @@ subText subtext Parent info parentId: 0
stroke="#FF00FF"
tabIndex={0}
width={225}
- x={893.75}
+ x={996.25}
y={130}
/>
Child 4
90%
@@ -2735,7 +2743,7 @@ subText sub Parent info parentId: 13
stroke="#FF00FF"
tabIndex={0}
width={225}
- x={893.75}
+ x={996.25}
y={260}
/>
leaf10
sub
@@ -2783,7 +2791,7 @@ subText sub Parent info parentId: 13
stroke-width: 2px;
stroke: #A1A1A1;
}
- d="M106.25,110 H1118.75 M612.5,110
+ d="M208.75,110 H1221.25 M715,110
V85.21739130434783"
/>
@@ -2885,7 +2897,7 @@ subText subtext Root Node"
stroke="#0099BC"
tabIndex={0}
width={225}
- x={500}
+ x={602.5}
y={10}
/>
Root Node
subtext
@@ -2944,7 +2956,7 @@ subText Subtext val is subtext Parent info parentId: 0
stroke="#4F6BED"
tabIndex={0}
width={225}
- x={106.25}
+ x={208.75}
y={130}
/>
Child 1
Subtext val is subtext
@@ -3003,7 +3015,7 @@ subText Subtext val is subtext Parent info parentId: 0
stroke="#881798"
tabIndex={0}
width={225}
- x={368.75}
+ x={471.25}
y={130}
/>
Child 2
Subtext val is subtext
@@ -3062,7 +3074,7 @@ subText Subtext val is subtext Parent info parentId: 0
stroke="#AE8C00"
tabIndex={0}
width={225}
- x={631.25}
+ x={733.75}
y={130}
/>
Child 3
Subtext val is subtext
@@ -3121,7 +3133,7 @@ subText Subtext val is subtext Parent info parentId: 0
stroke="#FF00FF"
tabIndex={0}
width={225}
- x={893.75}
+ x={996.25}
y={130}
/>
Child 4
Subtext val is subtext
@@ -3169,7 +3181,7 @@ subText Subtext val is subtext Parent info parentId: 0
stroke-width: 2px;
stroke: #A1A1A1;
}
- d="M106.25,110 H1118.75 M612.5,110
+ d="M208.75,110 H1221.25 M715,110
V85.21739130434783"
/>
diff --git a/packages/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx b/packages/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx
index 14d8ff291d987a..8082709ab61357 100644
--- a/packages/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx
+++ b/packages/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx
@@ -1,5 +1,5 @@
import * as React from 'react';
-import { max as d3Max } from 'd3-array';
+import { max as d3Max, min as d3Min } from 'd3-array';
import { line as d3Line } from 'd3-shape';
import { select as d3Select } from 'd3-selection';
import { scaleLinear as d3ScaleLinear, ScaleLinear as D3ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale';
@@ -49,6 +49,7 @@ export interface IVerticalBarChartState extends IBasestate {
YValueHover: IYValueHover[];
hoverXValue?: string | number | null;
callOutAccessibilityData?: IAccessibilityProps;
+ calloutLegend: string;
}
type ColorScale = (_p?: number) => string;
@@ -85,6 +86,7 @@ export class VerticalBarChartBase extends React.Component (!isNumericAxis ? xBarScale(d.index) + 0.5 * this._barWidth : xScale(d.x)))
+ .x((d: any) => (!isNumericAxis ? xBarScale(d.x) + 0.5 * xBarScale.bandwidth() : xScale(d.x)))
// eslint-disable-next-line @typescript-eslint/no-explicit-any
.y((d: any) => yScale(d.y));
let shouldHighlight = true;
@@ -229,7 +231,7 @@ export class VerticalBarChartBase extends React.Component {
- if (
- this.state.isLegendSelected === false ||
- (this.state.isLegendSelected && this.state.selectedLegendTitle === point.legend)
- ) {
- const { YValueHover, hoverXValue } = this._getCalloutContentForLineAndBar(point);
- this._refArray.forEach((obj: IRefArrayData, index: number) => {
- if (obj.index === point.legend! && refArrayIndexNumber === index) {
- this.setState({
- refSelected: obj.refElement,
- isCalloutVisible: true,
- selectedLegendTitle: point.legend!,
- dataForHoverCard: point.y,
- color: point.color || color,
- xCalloutValue: point.xAxisCalloutData || point.x.toString(),
- yCalloutValue: point.yAxisCalloutData!,
- dataPointCalloutProps: point,
- activeXdataPoint: point.x,
- YValueHover,
- hoverXValue,
- callOutAccessibilityData: point.callOutAccessibilityData,
- });
- }
- });
- }
+ const { YValueHover, hoverXValue } = this._getCalloutContentForLineAndBar(point);
+ this._refArray.forEach((obj: IRefArrayData, index: number) => {
+ if (obj.index === point.legend! && refArrayIndexNumber === index) {
+ this.setState({
+ refSelected: obj.refElement,
+ /** Show the callout if highlighted bar is focused and Hide it if unhighlighted bar is focused */
+ isCalloutVisible:
+ this.state.isLegendSelected === false ||
+ (this.state.isLegendSelected === true && this.state.selectedLegendTitle === point.legend),
+ calloutLegend: point.legend!,
+ dataForHoverCard: point.y,
+ color: point.color || color,
+ xCalloutValue: point.xAxisCalloutData || point.x.toString(),
+ yCalloutValue: point.yAxisCalloutData!,
+ dataPointCalloutProps: point,
+ activeXdataPoint: point.x,
+ YValueHover,
+ hoverXValue,
+ callOutAccessibilityData: point.callOutAccessibilityData,
+ });
+ }
+ });
};
private _getScales = (
@@ -462,8 +461,9 @@ export class VerticalBarChartBase extends React.Component {
if (isNumericScale) {
const xMax = d3Max(this._points, (point: IVerticalBarChartDataPoint) => point.x as number)!;
+ const xMin = d3Min(this._points, (point: IVerticalBarChartDataPoint) => point.x as number)!;
const xBarScale = d3ScaleLinear()
- .domain(this._isRtl ? [xMax, 0] : [0, xMax])
+ .domain(this._isRtl ? [xMax, xMin] : [xMin, xMax])
.nice()
.range([
this.margins.left! + this._barWidth / 2,
diff --git a/packages/react-charting/src/components/VerticalBarChart/VerticalBarChart.test.tsx b/packages/react-charting/src/components/VerticalBarChart/VerticalBarChart.test.tsx
index daa8b0ac8741ef..032471acff81b0 100644
--- a/packages/react-charting/src/components/VerticalBarChart/VerticalBarChart.test.tsx
+++ b/packages/react-charting/src/components/VerticalBarChart/VerticalBarChart.test.tsx
@@ -6,6 +6,7 @@ import { mount, ReactWrapper } from 'enzyme';
import { DefaultPalette } from '@fluentui/react/lib/Styling';
import { VerticalBarChart, IVerticalBarChartProps, IVerticalBarChartDataPoint } from '../../index';
import { IVerticalBarChartState, VerticalBarChartBase } from './VerticalBarChart.base';
+import toJson from 'enzyme-to-json';
// Wrapper of the VerticalBarChart to be tested.
let wrapper: ReactWrapper | undefined;
@@ -185,3 +186,44 @@ describe('Render calling with respective to props', () => {
renderMock.mockRestore();
});
});
+
+describe('VerticalBarChart - mouse events', () => {
+ beforeEach(sharedBeforeEach);
+ afterEach(sharedAfterEach);
+
+ it('Should render callout correctly on mouseover', async () => {
+ wrapper = mount(
+ ,
+ );
+
+ // Wait for the chart to be resized
+ await new Promise(resolve => setTimeout(resolve));
+ wrapper.update();
+
+ wrapper.find('rect').at(1).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('Should render customized callout on mouseover', async () => {
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ );
+ await new Promise(resolve => setTimeout(resolve));
+ wrapper.update();
+ wrapper.find('rect').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/packages/react-charting/src/components/VerticalBarChart/__snapshots__/VerticalBarChart.test.tsx.snap b/packages/react-charting/src/components/VerticalBarChart/__snapshots__/VerticalBarChart.test.tsx.snap
index d0f303e7ff5c86..fbcb6c599ba9a4 100644
--- a/packages/react-charting/src/components/VerticalBarChart/__snapshots__/VerticalBarChart.test.tsx.snap
+++ b/packages/react-charting/src/components/VerticalBarChart/__snapshots__/VerticalBarChart.test.tsx.snap
@@ -1,5 +1,1228 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`VerticalBarChart - mouse events Should render callout correctly on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`VerticalBarChart - mouse events Should render customized callout on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
exports[`VerticalBarChart snapShot testing renders VerticalBarChart correctly 1`] = `
+
`;
@@ -869,6 +2095,9 @@ exports[`VerticalBarChart snapShot testing renders enabledLegendsWrapLines corre
+
`;
@@ -976,6 +2205,9 @@ exports[`VerticalBarChart snapShot testing renders hideLegend correctly 1`] = `
+
`;
@@ -1422,6 +2654,9 @@ exports[`VerticalBarChart snapShot testing renders hideTooltip correctly 1`] = `
+
`;
@@ -1868,6 +3103,9 @@ exports[`VerticalBarChart snapShot testing renders showXAxisLablesTooltip correc
+
`;
@@ -2314,6 +3552,9 @@ exports[`VerticalBarChart snapShot testing renders wrapXAxisLables correctly 1`]
+
`;
@@ -2760,5 +4001,8 @@ exports[`VerticalBarChart snapShot testing renders yAxisTickFormat correctly 1`]
+
`;
diff --git a/packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.base.tsx b/packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.base.tsx
index 988c1b6b6f3740..077784687cf7e7 100644
--- a/packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.base.tsx
+++ b/packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.base.tsx
@@ -1,5 +1,5 @@
import * as React from 'react';
-import { max as d3Max } from 'd3-array';
+import { max as d3Max, min as d3Min } from 'd3-array';
import { Axis as D3Axis } from 'd3-axis';
import { select as d3Select } from 'd3-selection';
import { scaleLinear as d3ScaleLinear, ScaleLinear as D3ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale';
@@ -65,6 +65,7 @@ export interface IVerticalStackedBarChartState extends IBasestate {
stackCalloutProps?: IVerticalStackedChartProps;
activeXAxisDataPoint: number | string;
callOutAccessibilityData?: IAccessibilityProps;
+ calloutLegend: string;
}
export class VerticalStackedBarChartBase extends React.Component<
IVerticalStackedBarChartProps,
@@ -102,6 +103,7 @@ export class VerticalStackedBarChartBase extends React.Component<
xCalloutValue: '',
yCalloutValue: '',
activeXAxisDataPoint: '',
+ calloutLegend: '',
};
warnDeprecations(COMPONENT_NAME, props, {
colors: 'IVSChartDataPoint.color',
@@ -148,7 +150,7 @@ export class VerticalStackedBarChartBase extends React.Component<
isBeakVisible: false,
gapSpace: 15,
color: this.state.color,
- legend: this.state.selectedLegendTitle,
+ legend: this.state.calloutLegend,
XValue: this.state.xCalloutValue!,
YValue: this.state.yCalloutValue ? this.state.yCalloutValue : this.state.dataForHoverCard,
YValueHover: this.state.YValueHover,
@@ -570,16 +572,18 @@ export class VerticalStackedBarChartBase extends React.Component<
color: string,
refSelected: React.MouseEvent | SVGGElement,
): void {
- if (
- (this.state.isLegendSelected === false ||
- (this.state.isLegendSelected && this.state.selectedLegendTitle === point.legend)) &&
- this._calloutAnchorPoint !== point
- ) {
+ if (this._calloutAnchorPoint !== point) {
this._calloutAnchorPoint = point;
this.setState({
refSelected,
- isCalloutVisible: true,
- selectedLegendTitle: point.legend,
+ /**
+ * Show the callout if highlighted bar is focused/hovered
+ * and Hide it if unhighlighted bar is focused/hovered
+ */
+ isCalloutVisible:
+ this.state.isLegendSelected === false ||
+ (this.state.isLegendSelected === true && this.state.selectedLegendTitle === point.legend),
+ calloutLegend: point.legend,
dataForHoverCard: point.data,
color,
xCalloutValue: point.xAxisCalloutData ? point.xAxisCalloutData : xAxisPoint,
@@ -863,9 +867,10 @@ export class VerticalStackedBarChartBase extends React.Component<
.range([0, containerHeight - this.margins.bottom! - this.margins.top!]);
if (isNumeric) {
const xMax = d3Max(this._dataset, (point: IDataPoint) => point.x as number)!;
+ const xMin = d3Min(this._dataset, (point: IDataPoint) => point.x as number)!;
const xBarScale = d3ScaleLinear()
- .domain(this._isRtl ? [xMax, 0] : [0, xMax])
+ .domain(this._isRtl ? [xMax, xMin] : [xMin, xMax])
.nice()
.range([this.margins.left!, containerWidth - this.margins.right! - this._barWidth]);
diff --git a/packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.test.tsx b/packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.test.tsx
index 9fd598aad866b3..49baaab9b303a7 100644
--- a/packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.test.tsx
+++ b/packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.test.tsx
@@ -11,6 +11,7 @@ import {
IVerticalStackedChartProps,
} from '../../index';
import { IVerticalStackedBarChartState, VerticalStackedBarChartBase } from './VerticalStackedBarChart.base';
+import toJson from 'enzyme-to-json';
// Wrapper of the VerticalStackedBarChart to be tested.
let wrapper:
@@ -74,6 +75,15 @@ const chartPoints: IVerticalStackedChartProps[] = [
{ chartData: secondChartPoints, xAxisPoint: 20 },
];
+const chartPoints2: IVerticalStackedChartProps[] = [
+ { chartData: firstChartPoints, xAxisPoint: 0, lineData: [{ y: 15, legend: 'Line1', color: DefaultPalette.yellow }] },
+ {
+ chartData: secondChartPoints,
+ xAxisPoint: 20,
+ lineData: [{ y: 30, legend: 'Line1', color: DefaultPalette.yellow }],
+ },
+];
+
describe('VerticalStackedBarChart snapShot testing', () => {
it('renders VerticalStackedBarChart correctly', () => {
const component = renderer.create( );
@@ -227,3 +237,79 @@ describe('Render calling with respective to props', () => {
renderMock.mockRestore();
});
});
+
+describe('VerticalStackedBarChart - mouse events', () => {
+ beforeEach(sharedBeforeEach);
+ afterEach(sharedAfterEach);
+
+ it('Should render callout correctly on mouseover', async () => {
+ wrapper = mount(
+ ,
+ );
+
+ // Wait for the chart to be resized
+ await new Promise(resolve => setTimeout(resolve));
+ wrapper.update();
+
+ wrapper.find('rect').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('Should render callout correctly on mousemove', async () => {
+ wrapper = mount(
+ ,
+ );
+ await new Promise(resolve => setTimeout(resolve));
+ wrapper.update();
+ wrapper.find('rect').at(2).simulate('mousemove');
+ const html1 = wrapper.html();
+ wrapper.find('rect').at(3).simulate('mousemove');
+ const html2 = wrapper.html();
+ expect(html1).not.toBe(html2);
+ });
+
+ it('Should render customized callout on mouseover', async () => {
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ );
+ await new Promise(resolve => setTimeout(resolve));
+ wrapper.update();
+ wrapper.find('rect').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('Should render customized callout per stack on mouseover', async () => {
+ wrapper = mount(
+
+ props ? (
+
+
{JSON.stringify(props, null, 2)}
+
+ ) : null
+ }
+ />,
+ );
+ await new Promise(resolve => setTimeout(resolve));
+ wrapper.update();
+ wrapper.find('rect').at(0).simulate('mouseover');
+ const tree = toJson(wrapper, { mode: 'deep' });
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/packages/react-charting/src/components/VerticalStackedBarChart/__snapshots__/VerticalStackedBarChart.test.tsx.snap b/packages/react-charting/src/components/VerticalStackedBarChart/__snapshots__/VerticalStackedBarChart.test.tsx.snap
index fb20c0814321ea..1a9532f03cbfd8 100644
--- a/packages/react-charting/src/components/VerticalStackedBarChart/__snapshots__/VerticalStackedBarChart.test.tsx.snap
+++ b/packages/react-charting/src/components/VerticalStackedBarChart/__snapshots__/VerticalStackedBarChart.test.tsx.snap
@@ -1,5 +1,1791 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`VerticalStackedBarChart - mouse events Should render callout correctly on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`VerticalStackedBarChart - mouse events Should render customized callout on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`VerticalStackedBarChart - mouse events Should render customized callout per stack on mouseover 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
exports[`VerticalStackedBarChart snapShot testing renders VerticalStackedBarChart correctly 1`] = `
+
`;
@@ -683,6 +2472,9 @@ exports[`VerticalStackedBarChart snapShot testing renders enabledLegendsWrapLine
+
`;
@@ -787,6 +2579,9 @@ exports[`VerticalStackedBarChart snapShot testing renders hideLegend correctly 1
+
`;
@@ -1140,6 +2935,9 @@ exports[`VerticalStackedBarChart snapShot testing renders hideTooltip correctly
+
`;
@@ -1493,6 +3291,9 @@ exports[`VerticalStackedBarChart snapShot testing renders isCalloutForStack corr
+
`;
@@ -1846,6 +3647,9 @@ exports[`VerticalStackedBarChart snapShot testing renders showXAxisLablesTooltip
+
`;
@@ -2199,6 +4003,9 @@ exports[`VerticalStackedBarChart snapShot testing renders wrapXAxisLables correc
+
`;
@@ -2552,5 +4359,8 @@ exports[`VerticalStackedBarChart snapShot testing renders yAxisTickFormat correc
+
`;
diff --git a/packages/react-charting/src/utilities/utilities.ts b/packages/react-charting/src/utilities/utilities.ts
index e46db7ed85b09d..0260dff4beeaf2 100644
--- a/packages/react-charting/src/utilities/utilities.ts
+++ b/packages/react-charting/src/utilities/utilities.ts
@@ -4,6 +4,15 @@ import { scaleLinear as d3ScaleLinear, scaleTime as d3ScaleTime, scaleBand as d3
import { select as d3Select, event as d3Event, selectAll as d3SelectAll } from 'd3-selection';
import { format as d3Format } from 'd3-format';
import * as d3TimeFormat from 'd3-time-format';
+import {
+ timeSecond as d3TimeSecond,
+ timeMinute as d3TimeMinute,
+ timeHour as d3TimeHour,
+ timeDay as d3TimeDay,
+ timeMonth as d3TimeMonth,
+ timeWeek as d3TimeWeek,
+ timeYear as d3TimeYear,
+} from 'd3-time';
import {
IAccessibilityProps,
IEventsAnnotationProps,
@@ -152,6 +161,33 @@ export function createNumericXAxis(xAxisParams: IXAxisParams, culture?: string)
return xAxisScale;
}
+function multiFormat(date: Date, locale: d3TimeFormat.TimeLocaleObject) {
+ const formatMillisecond = locale.format('.%L');
+ const formatSecond = locale.format(':%S');
+ const formatMinute = locale.format('%I:%M');
+ const formatHour = locale.format('%I %p');
+ const formatDay = locale.format('%a %d');
+ const formatWeek = locale.format('%b %d');
+ const formatMonth = locale.format('%B');
+ const formatYear = locale.format('%Y');
+
+ return (d3TimeSecond(date) < date
+ ? formatMillisecond
+ : d3TimeMinute(date) < date
+ ? formatSecond
+ : d3TimeHour(date) < date
+ ? formatMinute
+ : d3TimeDay(date) < date
+ ? formatHour
+ : d3TimeMonth(date) < date
+ ? d3TimeWeek(date) < date
+ ? formatDay
+ : formatWeek
+ : d3TimeYear(date) < date
+ ? formatMonth
+ : formatYear)(date);
+}
+
/**
* Creating Date x axis of the Chart
* @export
@@ -163,17 +199,28 @@ export function createDateXAxis(
tickParams: ITickParams,
culture?: string,
options?: Intl.DateTimeFormatOptions,
+ timeFormatLocale?: d3TimeFormat.TimeLocaleDefinition,
+ customDateTimeFormatter?: (dateTime: Date) => string,
) {
const { domainNRangeValues, xAxisElement, tickPadding = 6, xAxistickSize = 6, xAxisCount = 6 } = xAxisParams;
const xAxisScale = d3ScaleTime()
.domain([domainNRangeValues.dStartValue, domainNRangeValues.dEndValue])
.range([domainNRangeValues.rStartValue, domainNRangeValues.rEndValue]);
const xAxis = d3AxisBottom(xAxisScale).tickSize(xAxistickSize).tickPadding(tickPadding).ticks(xAxisCount);
-
- if (culture && options) {
+ if (customDateTimeFormatter) {
+ xAxis.tickFormat((domainValue: Date, _index: number) => {
+ return customDateTimeFormatter(domainValue);
+ });
+ } else if (culture && options) {
xAxis.tickFormat((domainValue: Date, _index: number) => {
return domainValue.toLocaleString(culture, options);
});
+ } else if (timeFormatLocale) {
+ const locale: d3TimeFormat.TimeLocaleObject = d3TimeFormat.timeFormatLocale(timeFormatLocale!);
+
+ xAxis.tickFormat((domainValue: Date, _index: number) => {
+ return multiFormat(domainValue, locale);
+ });
}
tickParams.tickValues ? xAxis.tickValues(tickParams.tickValues) : '';
diff --git a/packages/react-components/babel-preset-global-context/.npmignore b/packages/react-components/babel-preset-global-context/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/babel-preset-global-context/.npmignore
+++ b/packages/react-components/babel-preset-global-context/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/babel-preset-global-context/CHANGELOG.json b/packages/react-components/babel-preset-global-context/CHANGELOG.json
index a8531676256729..126b200b792863 100644
--- a/packages/react-components/babel-preset-global-context/CHANGELOG.json
+++ b/packages/react-components/babel-preset-global-context/CHANGELOG.json
@@ -1,6 +1,95 @@
{
"name": "@fluentui/babel-preset-global-context",
"entries": [
+ {
+ "date": "Wed, 26 Oct 2022 18:05:52 GMT",
+ "tag": "@fluentui/babel-preset-global-context_v9.0.0-beta.6",
+ "version": "9.0.0-beta.6",
+ "comments": {
+ "none": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/babel-preset-global-context",
+ "commit": "326827f375a50719f96395a4d92ed941611d602b",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 25 Oct 2022 00:35:39 GMT",
+ "tag": "@fluentui/babel-preset-global-context_v9.0.0-beta.6",
+ "version": "9.0.0-beta.6",
+ "comments": {
+ "none": [
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/babel-preset-global-context",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:59 GMT",
+ "tag": "@fluentui/babel-preset-global-context_v9.0.0-beta.6",
+ "version": "9.0.0-beta.6",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/babel-preset-global-context",
+ "comment": "Bump @fluentui/global-context to v9.0.0-beta.6",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:03:06 GMT",
+ "tag": "@fluentui/babel-preset-global-context_v9.0.0-beta.5",
+ "version": "9.0.0-beta.5",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/babel-preset-global-context",
+ "comment": "Bump @fluentui/global-context to v9.0.0-beta.5",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:43 GMT",
+ "tag": "@fluentui/babel-preset-global-context_v9.0.0-beta.4",
+ "version": "9.0.0-beta.4",
+ "comments": {
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/babel-preset-global-context",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/babel-preset-global-context",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ }
+ ],
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/babel-preset-global-context",
+ "comment": "Bump @fluentui/global-context to v9.0.0-beta.4",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:35 GMT",
"tag": "@fluentui/babel-preset-global-context_v9.0.0-beta.3",
diff --git a/packages/react-components/babel-preset-global-context/CHANGELOG.md b/packages/react-components/babel-preset-global-context/CHANGELOG.md
index 9129f0dd6bd602..1e344fded3826b 100644
--- a/packages/react-components/babel-preset-global-context/CHANGELOG.md
+++ b/packages/react-components/babel-preset-global-context/CHANGELOG.md
@@ -1,9 +1,36 @@
# Change Log - @fluentui/babel-preset-global-context
-This log was last generated on Thu, 14 Jul 2022 21:21:13 GMT and should not be manually modified.
+This log was last generated on Thu, 20 Oct 2022 08:39:59 GMT and should not be manually modified.
+## [9.0.0-beta.6](https://github.com/microsoft/fluentui/tree/@fluentui/babel-preset-global-context_v9.0.0-beta.6)
+
+Thu, 20 Oct 2022 08:39:59 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/babel-preset-global-context_v9.0.0-beta.5..@fluentui/babel-preset-global-context_v9.0.0-beta.6)
+
+### Changes
+
+- Bump @fluentui/global-context to v9.0.0-beta.6 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.0.0-beta.5](https://github.com/microsoft/fluentui/tree/@fluentui/babel-preset-global-context_v9.0.0-beta.5)
+
+Thu, 13 Oct 2022 11:03:06 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/babel-preset-global-context_v9.0.0-beta.4..@fluentui/babel-preset-global-context_v9.0.0-beta.5)
+
+### Changes
+
+- Bump @fluentui/global-context to v9.0.0-beta.5 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.0.0-beta.4](https://github.com/microsoft/fluentui/tree/@fluentui/babel-preset-global-context_v9.0.0-beta.4)
+
+Thu, 15 Sep 2022 09:49:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/babel-preset-global-context_v9.0.0-beta.3..@fluentui/babel-preset-global-context_v9.0.0-beta.4)
+
+### Changes
+
+- Bump @fluentui/global-context to v9.0.0-beta.4 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.0.0-beta.3](https://github.com/microsoft/fluentui/tree/@fluentui/babel-preset-global-context_v9.0.0-beta.3)
Thu, 14 Jul 2022 21:21:13 GMT
diff --git a/packages/react-components/babel-preset-global-context/README.md b/packages/react-components/babel-preset-global-context/README.md
index 452969a2204518..d7ab5c89c58128 100644
--- a/packages/react-components/babel-preset-global-context/README.md
+++ b/packages/react-components/babel-preset-global-context/README.md
@@ -1,6 +1,6 @@
# @fluentui/babel-preset-global-context
-**Babel Preset Global Context for [Fluent UI React](https://developer.microsoft.com/en-us/fluentui)**
+**Babel Preset Global Context for [Fluent UI React](https://react.fluentui.dev)**
Babel preset that transforms createContext calls to use global context shims
diff --git a/packages/react-components/babel-preset-global-context/e2e/Test.e2e.tsx b/packages/react-components/babel-preset-global-context/e2e/Test.e2e.tsx
deleted file mode 100644
index 3ccb475eb8a2aa..00000000000000
--- a/packages/react-components/babel-preset-global-context/e2e/Test.e2e.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * These tests are run with the specific cypress.config.ts file
- * in this project in order to consume @fluentui/babel-preset-global-context during bundling
- */
-
-import * as React from 'react';
-import { mount } from '@cypress/react';
-import { ProviderContext as ProviderContextV1 } from './fake_node_modules/context-v1.0.0';
-import { ProviderContext as ProviderContextV11 } from './fake_node_modules/context-v1.1.0';
-import { ProviderContext as ProviderContextV2 } from './fake_node_modules/context-v2.0.0';
-
-import { ProviderContext as IgnoredContextV1 } from './fake_node_modules/ignored-context-v1.0.0';
-import { ProviderContext as IgnoredContextV11 } from './fake_node_modules/ignored-context-v1.1.0';
-
-describe('babel-preset-global-context', () => {
- describe('targeted packages', () => {
- const v1Foo = 'v1-foo';
- const v1Bar = 'v1-bar';
- const v2Bar = 'v2-bar';
-
- function Consumer() {
- const ctx = React.useContext(ProviderContextV1);
- const ctxV11 = React.useContext(ProviderContextV11);
- const ctxV2 = React.useContext(ProviderContextV2);
- return (
- <>
- {ctx.foo}
- {ctx.bar}
- {ctxV11.foo}
- {ctxV11.bar}
- {ctxV2.bar}
- >
- );
- }
-
- function Example() {
- return (
-
-
-
-
-
- );
- }
-
- it('Contexts in the same major should have the same values', () => {
- mount( );
- cy.get(`.${v1Foo}`).each($el => {
- expect($el.text()).equals('red');
- });
- cy.get(`.${v1Bar}`).each($el => {
- expect($el.text()).equals('blue');
- });
- });
-
- it('Contexts between different majors should have different values', () => {
- mount( );
- cy.get(`.${v1Bar}`).each($el => {
- expect($el.text()).equals('blue');
- });
-
- cy.get(`.${v2Bar}`).each($el => {
- expect($el.text()).equals('white');
- });
- });
- });
-
- // The contexts used in these tests should be ignored by babel preset
- // configured in cypress.config.ts
- describe('untargeted packages', () => {
- const v1Foo = 'v1-foo';
-
- function Consumer() {
- const ctx = React.useContext(IgnoredContextV1);
- const ctxV11 = React.useContext(IgnoredContextV11);
- return (
- <>
- {ctx.foo}
- {ctxV11.foo}
- >
- );
- }
-
- function Example() {
- return (
-
-
-
- );
- }
- it('Contexts should have different values', () => {
- mount( );
- cy.get(`.${v1Foo}`).first().should('have.text', 'red').get(`.${v1Foo}`).eq(1).should('have.text', 'foo');
- });
- });
-});
diff --git a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v1.0.0/index.ts b/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v1.0.0/index.ts
deleted file mode 100644
index e124f68f2847e5..00000000000000
--- a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v1.0.0/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import * as React from 'react';
-
-export interface ProviderContextValue {
- foo: string;
- bar: string;
-}
-
-export const ProviderContext = React.createContext({ foo: 'foo', bar: 'bar' });
diff --git a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v1.1.0/index.ts b/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v1.1.0/index.ts
deleted file mode 100644
index 8929771f513c23..00000000000000
--- a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v1.1.0/index.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { createContext } from 'react';
-
-export interface ProviderContextValue {
- foo: string;
- bar: string;
- baz: string;
-}
-
-export const ProviderContext = createContext({ foo: 'foo', bar: 'bar', baz: 'baz' });
diff --git a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v2.0.0/index.ts b/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v2.0.0/index.ts
deleted file mode 100644
index a3507ee85101fb..00000000000000
--- a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v2.0.0/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import * as React from 'react';
-
-export interface ProviderContextValueV2 {
- bar: string;
- baz: string;
-}
-
-export const ProviderContext = React.createContext({ bar: 'bar', baz: 'baz' });
diff --git a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/ignored-context-v1.0.0/index.ts b/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/ignored-context-v1.0.0/index.ts
deleted file mode 100644
index 757d0845497c91..00000000000000
--- a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/ignored-context-v1.0.0/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import * as React from 'react';
-
-export interface ProviderContextValueV2 {
- foo: string;
-}
-
-export const ProviderContext = React.createContext({ foo: 'foo' });
diff --git a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/ignored-context-v1.1.0/index.ts b/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/ignored-context-v1.1.0/index.ts
deleted file mode 100644
index 5c1bc655307a08..00000000000000
--- a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/ignored-context-v1.1.0/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import * as React from 'react';
-
-export interface ProviderContextValueV2 {
- foo: string;
- bar: string;
-}
-
-export const ProviderContext = React.createContext({ foo: 'foo', bar: 'bar' });
diff --git a/packages/react-components/babel-preset-global-context/package.json b/packages/react-components/babel-preset-global-context/package.json
index c8ab04c63a40a1..6961a57884d5ca 100644
--- a/packages/react-components/babel-preset-global-context/package.json
+++ b/packages/react-components/babel-preset-global-context/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/babel-preset-global-context",
- "version": "9.0.0-beta.3",
+ "version": "9.0.0-beta.6",
"description": "Babel preset that transforms createContext calls to use global context shims",
"main": "lib-commonjs/index.js",
"typings": "dist/index.d.ts",
@@ -38,7 +38,7 @@
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@fluentui/global-context": "9.0.0-beta.3"
+ "@fluentui/global-context": "9.0.0-beta.6"
},
"beachball": {
"disallowedChangeTypes": [
diff --git a/packages/react-components/babel-preset-global-context/src/Test.cy.tsx b/packages/react-components/babel-preset-global-context/src/Test.cy.tsx
new file mode 100644
index 00000000000000..47ed3fc7fc3adf
--- /dev/null
+++ b/packages/react-components/babel-preset-global-context/src/Test.cy.tsx
@@ -0,0 +1,98 @@
+/*
+ * These tests are run with the specific cypress.config.ts file
+ * in this project in order to consume @fluentui/babel-preset-global-context during bundling
+ */
+// eslint-disable-next-line import/no-extraneous-dependencies
+import * as React from 'react';
+// eslint-disable-next-line import/no-extraneous-dependencies
+import { mount } from '@cypress/react';
+import { ProviderContext as ProviderContextV1 } from './testing/fake_node_modules/context-v1.0.0';
+import { ProviderContext as ProviderContextV11 } from './testing/fake_node_modules/context-v1.1.0';
+import { ProviderContext as ProviderContextV2 } from './testing/fake_node_modules/context-v2.0.0';
+
+import { ProviderContext as IgnoredContextV1 } from './testing/fake_node_modules/ignored-context-v1.0.0';
+import { ProviderContext as IgnoredContextV11 } from './testing/fake_node_modules/ignored-context-v1.1.0';
+
+describe('babel-preset-global-context', () => {
+ describe('targeted packages', () => {
+ const v1Foo = 'v1-foo';
+ const v1Bar = 'v1-bar';
+ const v2Bar = 'v2-bar';
+
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ function Consumer() {
+ const ctx = React.useContext(ProviderContextV1);
+ const ctxV11 = React.useContext(ProviderContextV11);
+ const ctxV2 = React.useContext(ProviderContextV2);
+ return (
+ <>
+ {ctx.foo}
+ {ctx.bar}
+ {ctxV11.foo}
+ {ctxV11.bar}
+ {ctxV2.bar}
+ >
+ );
+ }
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ function Example() {
+ return (
+
+
+
+
+
+ );
+ }
+
+ it('Contexts in the same major should have the same values', () => {
+ mount( );
+ cy.get(`.${v1Foo}`).each($el => {
+ expect($el.text()).equals('red');
+ });
+ cy.get(`.${v1Bar}`).each($el => {
+ expect($el.text()).equals('blue');
+ });
+ });
+
+ it('Contexts between different majors should have different values', () => {
+ mount( );
+ cy.get(`.${v1Bar}`).each($el => {
+ expect($el.text()).equals('blue');
+ });
+
+ cy.get(`.${v2Bar}`).each($el => {
+ expect($el.text()).equals('white');
+ });
+ });
+ });
+
+ // The contexts used in these tests should be ignored by babel preset
+ // configured in cypress.config.ts
+ describe('untargeted packages', () => {
+ const v1Foo = 'v1-foo';
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ function Consumer() {
+ const ctx = React.useContext(IgnoredContextV1);
+ const ctxV11 = React.useContext(IgnoredContextV11);
+ return (
+ <>
+ {ctx.foo}
+ {ctxV11.foo}
+ >
+ );
+ }
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ function Example() {
+ return (
+
+
+
+ );
+ }
+ it('Contexts should have different values', () => {
+ mount( );
+ cy.get(`.${v1Foo}`).first().should('have.text', 'red').get(`.${v1Foo}`).eq(1).should('have.text', 'foo');
+ });
+ });
+});
diff --git a/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v1.0.0/index.ts b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v1.0.0/index.ts
new file mode 100644
index 00000000000000..62a0e79eaf2299
--- /dev/null
+++ b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v1.0.0/index.ts
@@ -0,0 +1,9 @@
+// eslint-disable-next-line import/no-extraneous-dependencies
+import * as React from 'react';
+
+export interface ProviderContextValue {
+ foo: string;
+ bar: string;
+}
+
+export const ProviderContext = React.createContext({ foo: 'foo', bar: 'bar' });
diff --git a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v1.0.0/package.json b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v1.0.0/package.json
similarity index 100%
rename from packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v1.0.0/package.json
rename to packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v1.0.0/package.json
diff --git a/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v1.1.0/index.ts b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v1.1.0/index.ts
new file mode 100644
index 00000000000000..c511162e9a23ca
--- /dev/null
+++ b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v1.1.0/index.ts
@@ -0,0 +1,10 @@
+// eslint-disable-next-line import/no-extraneous-dependencies
+import { createContext } from 'react';
+
+export interface ProviderContextValue {
+ foo: string;
+ bar: string;
+ baz: string;
+}
+
+export const ProviderContext = createContext({ foo: 'foo', bar: 'bar', baz: 'baz' });
diff --git a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v1.1.0/package.json b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v1.1.0/package.json
similarity index 100%
rename from packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v1.1.0/package.json
rename to packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v1.1.0/package.json
diff --git a/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v2.0.0/index.ts b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v2.0.0/index.ts
new file mode 100644
index 00000000000000..a8f26851d64e28
--- /dev/null
+++ b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v2.0.0/index.ts
@@ -0,0 +1,9 @@
+// eslint-disable-next-line import/no-extraneous-dependencies
+import * as React from 'react';
+
+export interface ProviderContextValueV2 {
+ bar: string;
+ baz: string;
+}
+
+export const ProviderContext = React.createContext({ bar: 'bar', baz: 'baz' });
diff --git a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v2.0.0/package.json b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v2.0.0/package.json
similarity index 100%
rename from packages/react-components/babel-preset-global-context/e2e/fake_node_modules/context-v2.0.0/package.json
rename to packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/context-v2.0.0/package.json
diff --git a/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/ignored-context-v1.0.0/index.ts b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/ignored-context-v1.0.0/index.ts
new file mode 100644
index 00000000000000..f46cebec169e26
--- /dev/null
+++ b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/ignored-context-v1.0.0/index.ts
@@ -0,0 +1,8 @@
+// eslint-disable-next-line import/no-extraneous-dependencies
+import * as React from 'react';
+
+export interface ProviderContextValueV2 {
+ foo: string;
+}
+
+export const ProviderContext = React.createContext({ foo: 'foo' });
diff --git a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/ignored-context-v1.0.0/package.json b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/ignored-context-v1.0.0/package.json
similarity index 100%
rename from packages/react-components/babel-preset-global-context/e2e/fake_node_modules/ignored-context-v1.0.0/package.json
rename to packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/ignored-context-v1.0.0/package.json
diff --git a/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/ignored-context-v1.1.0/index.ts b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/ignored-context-v1.1.0/index.ts
new file mode 100644
index 00000000000000..fca11d87326884
--- /dev/null
+++ b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/ignored-context-v1.1.0/index.ts
@@ -0,0 +1,9 @@
+// eslint-disable-next-line import/no-extraneous-dependencies
+import * as React from 'react';
+
+export interface ProviderContextValueV2 {
+ foo: string;
+ bar: string;
+}
+
+export const ProviderContext = React.createContext({ foo: 'foo', bar: 'bar' });
diff --git a/packages/react-components/babel-preset-global-context/e2e/fake_node_modules/ignored-context-v1.1.0/package.json b/packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/ignored-context-v1.1.0/package.json
similarity index 100%
rename from packages/react-components/babel-preset-global-context/e2e/fake_node_modules/ignored-context-v1.1.0/package.json
rename to packages/react-components/babel-preset-global-context/src/testing/fake_node_modules/ignored-context-v1.1.0/package.json
diff --git a/packages/react-components/babel-preset-global-context/tsconfig.cy.json b/packages/react-components/babel-preset-global-context/tsconfig.cy.json
new file mode 100644
index 00000000000000..93a140885851da
--- /dev/null
+++ b/packages/react-components/babel-preset-global-context/tsconfig.cy.json
@@ -0,0 +1,9 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "isolatedModules": false,
+ "types": ["node", "cypress", "cypress-storybook/cypress", "cypress-real-events"],
+ "lib": ["ES2019", "dom"]
+ },
+ "include": ["**/*.cy.ts", "**/*.cy.tsx"]
+}
diff --git a/packages/react-components/babel-preset-global-context/tsconfig.json b/packages/react-components/babel-preset-global-context/tsconfig.json
index dcb3b091c7bc92..c8027a33f2aeb3 100644
--- a/packages/react-components/babel-preset-global-context/tsconfig.json
+++ b/packages/react-components/babel-preset-global-context/tsconfig.json
@@ -19,7 +19,7 @@
"path": "./tsconfig.spec.json"
},
{
- "path": "./e2e/tsconfig.json"
+ "path": "./tsconfig.cy.json"
}
]
}
diff --git a/packages/react-components/babel-preset-global-context/tsconfig.lib.json b/packages/react-components/babel-preset-global-context/tsconfig.lib.json
index e959f1c626bb30..6b77ffea2342de 100644
--- a/packages/react-components/babel-preset-global-context/tsconfig.lib.json
+++ b/packages/react-components/babel-preset-global-context/tsconfig.lib.json
@@ -10,6 +10,6 @@
"types": ["static-assets", "environment", "node"],
"module": "CommonJS"
},
- "exclude": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx"],
+ "exclude": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.cy.ts", "**/*.cy.tsx"],
"include": ["./src/**/*.ts", "./src/**/*.tsx"]
}
diff --git a/packages/react-components/babel-preset-global-context/tsconfig.spec.json b/packages/react-components/babel-preset-global-context/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/babel-preset-global-context/tsconfig.spec.json
+++ b/packages/react-components/babel-preset-global-context/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/global-context/.npmignore b/packages/react-components/global-context/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/global-context/.npmignore
+++ b/packages/react-components/global-context/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/global-context/CHANGELOG.json b/packages/react-components/global-context/CHANGELOG.json
index 71c353c3e88f90..cb889a35245ffd 100644
--- a/packages/react-components/global-context/CHANGELOG.json
+++ b/packages/react-components/global-context/CHANGELOG.json
@@ -1,6 +1,110 @@
{
"name": "@fluentui/global-context",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 00:35:27 GMT",
+ "tag": "@fluentui/global-context_v9.0.0-beta.6",
+ "version": "9.0.0-beta.6",
+ "comments": {
+ "none": [
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/global-context",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/global-context",
+ "commit": "07141711530bbdba82fd5198fe4bcef462403f40",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:56 GMT",
+ "tag": "@fluentui/global-context_v9.0.0-beta.6",
+ "version": "9.0.0-beta.6",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/global-context",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/global-context",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.5",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/global-context",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:03:06 GMT",
+ "tag": "@fluentui/global-context_v9.0.0-beta.5",
+ "version": "9.0.0-beta.5",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/global-context",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.4",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/global-context",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:44 GMT",
+ "tag": "@fluentui/global-context_v9.0.0-beta.4",
+ "version": "9.0.0-beta.4",
+ "comments": {
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/global-context",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/global-context",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ }
+ ],
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/global-context",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.3",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/global-context",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:35 GMT",
"tag": "@fluentui/global-context_v9.0.0-beta.3",
diff --git a/packages/react-components/global-context/CHANGELOG.md b/packages/react-components/global-context/CHANGELOG.md
index b8c7ef3aec05ff..b5264a4dbeef24 100644
--- a/packages/react-components/global-context/CHANGELOG.md
+++ b/packages/react-components/global-context/CHANGELOG.md
@@ -1,9 +1,40 @@
# Change Log - @fluentui/global-context
-This log was last generated on Thu, 14 Jul 2022 21:21:07 GMT and should not be manually modified.
+This log was last generated on Thu, 20 Oct 2022 08:39:56 GMT and should not be manually modified.
+## [9.0.0-beta.6](https://github.com/microsoft/fluentui/tree/@fluentui/global-context_v9.0.0-beta.6)
+
+Thu, 20 Oct 2022 08:39:56 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/global-context_v9.0.0-beta.5..@fluentui/global-context_v9.0.0-beta.6)
+
+### Changes
+
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- Bump @fluentui/react-context-selector to v9.0.5 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.0.0-beta.5](https://github.com/microsoft/fluentui/tree/@fluentui/global-context_v9.0.0-beta.5)
+
+Thu, 13 Oct 2022 11:03:06 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/global-context_v9.0.0-beta.4..@fluentui/global-context_v9.0.0-beta.5)
+
+### Changes
+
+- Bump @fluentui/react-context-selector to v9.0.4 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.0.0-beta.4](https://github.com/microsoft/fluentui/tree/@fluentui/global-context_v9.0.0-beta.4)
+
+Thu, 15 Sep 2022 09:49:44 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/global-context_v9.0.0-beta.3..@fluentui/global-context_v9.0.0-beta.4)
+
+### Changes
+
+- Bump @fluentui/react-context-selector to v9.0.3 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.0.0-beta.3](https://github.com/microsoft/fluentui/tree/@fluentui/global-context_v9.0.0-beta.3)
Thu, 14 Jul 2022 21:21:07 GMT
diff --git a/packages/react-components/global-context/README.md b/packages/react-components/global-context/README.md
index 093dcffb4198c3..7366704adc0db6 100644
--- a/packages/react-components/global-context/README.md
+++ b/packages/react-components/global-context/README.md
@@ -1,6 +1,6 @@
# @fluentui/global-context
-**Global Context for [Fluent UI React](https://developer.microsoft.com/en-us/fluentui)**
+**Global Context for [Fluent UI React](https://react.fluentui.dev)**
This package contains a shim for `React.createContext` API that will register the context object to the global
scope (`window` for browsers, `global` for nodejs). This means that contexts will be real singletons.
diff --git a/packages/react-components/global-context/e2e/global-context.e2e.tsx b/packages/react-components/global-context/e2e/global-context.e2e.tsx
deleted file mode 100644
index d81e2fb263b226..00000000000000
--- a/packages/react-components/global-context/e2e/global-context.e2e.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import { createContext, createContextSelector } from '@fluentui/global-context';
-import { SYMBOL_NAMESPACE } from '../src/global-context';
-import { SYMBOL_NAMESPACE as CONTEXT_SELECTOR_SYMBOL_NAMESPACE } from '../src/global-context-selector';
-
-function cleanWindowSymbols(namespace: string) {
- getGlobalContextSymbols(namespace).forEach(sym => {
- // @ts-expect-error - Indexing object with symbols not supported until TS 4.4
- delete window[sym];
- });
-}
-
-function getWindowProperty(symbol: Symbol) {
- // @ts-expect-error - Indexing object with symbols not supported until TS 4.4
- return window[symbol];
-}
-
-function getGlobalContextSymbols(namespace: string) {
- return Object.getOwnPropertySymbols(global).reduce((acc, cur) => {
- if (Symbol.keyFor(cur)?.includes(namespace)) {
- acc.push(cur);
- }
-
- return acc;
- }, [] as Symbol[]);
-}
-
-describe('createContext', () => {
- beforeEach(() => cleanWindowSymbols(SYMBOL_NAMESPACE));
-
- it('should create context on window', () => {
- const MyContext = createContext({}, 'MyContext', 'package', '9.0.0');
- expect(getWindowProperty(getGlobalContextSymbols(SYMBOL_NAMESPACE)[0])).equals(MyContext);
- });
-
- it('should create single context', () => {
- const MyContext = createContext({}, 'MyContext', 'package', '9.0.0');
- const MyContext2 = createContext({}, 'MyContext', 'package', '9.0.0');
-
- expect(getGlobalContextSymbols(SYMBOL_NAMESPACE).length).equals(1);
- expect(getWindowProperty(getGlobalContextSymbols(SYMBOL_NAMESPACE)[0])).equals(MyContext);
- expect(MyContext2).equals(MyContext);
- });
-});
-
-describe('createContextSelector', () => {
- beforeEach(() => cleanWindowSymbols(CONTEXT_SELECTOR_SYMBOL_NAMESPACE));
-
- it('should create context on window', () => {
- const MyContext = createContextSelector({}, 'MyContext', 'package', '9.0.0');
- expect(getWindowProperty(getGlobalContextSymbols(CONTEXT_SELECTOR_SYMBOL_NAMESPACE)[0])).equals(MyContext);
- });
-
- it('should create single context', () => {
- const MyContext = createContextSelector({}, 'MyContext', 'package', '9.0.0');
- const MyContext2 = createContextSelector({}, 'MyContext', 'package', '9.0.0');
-
- expect(getGlobalContextSymbols(CONTEXT_SELECTOR_SYMBOL_NAMESPACE).length).equals(1);
- expect(getWindowProperty(getGlobalContextSymbols(CONTEXT_SELECTOR_SYMBOL_NAMESPACE)[0])).equals(MyContext);
- expect(MyContext2).equals(MyContext);
- });
-});
diff --git a/packages/react-components/global-context/package.json b/packages/react-components/global-context/package.json
index 0b3f06064d2e54..17bb77bad91bf5 100644
--- a/packages/react-components/global-context/package.json
+++ b/packages/react-components/global-context/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/global-context",
- "version": "9.0.0-beta.3",
+ "version": "9.0.0-beta.6",
"description": "Extension of React createContext to be a true singleton on the global scope",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -30,15 +30,15 @@
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
- "@fluentui/react-context-selector": "^9.0.2",
- "@fluentui/react-utilities": "^9.0.2",
+ "@fluentui/react-context-selector": "^9.0.5",
+ "@fluentui/react-utilities": "^9.1.2",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0",
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0",
"scheduler": "^0.19.0 || ^0.20.0"
},
"beachball": {
diff --git a/packages/react-components/global-context/src/global-context.cy.tsx b/packages/react-components/global-context/src/global-context.cy.tsx
new file mode 100644
index 00000000000000..57b16d589e00f1
--- /dev/null
+++ b/packages/react-components/global-context/src/global-context.cy.tsx
@@ -0,0 +1,61 @@
+import { createContext, createContextSelector } from '@fluentui/global-context';
+import { SYMBOL_NAMESPACE } from './global-context';
+import { SYMBOL_NAMESPACE as CONTEXT_SELECTOR_SYMBOL_NAMESPACE } from './global-context-selector';
+
+function cleanWindowSymbols(namespace: string) {
+ getGlobalContextSymbols(namespace).forEach(sym => {
+ // @ts-expect-error - Indexing object with symbols not supported until TS 4.4
+ delete window[sym];
+ });
+}
+
+function getWindowProperty(symbol: Symbol) {
+ // @ts-expect-error - Indexing object with symbols not supported until TS 4.4
+ return window[symbol];
+}
+
+function getGlobalContextSymbols(namespace: string) {
+ return Object.getOwnPropertySymbols(global).reduce((acc, cur) => {
+ if (Symbol.keyFor(cur)?.includes(namespace)) {
+ acc.push(cur);
+ }
+
+ return acc;
+ }, [] as Symbol[]);
+}
+
+describe('createContext', () => {
+ beforeEach(() => cleanWindowSymbols(SYMBOL_NAMESPACE));
+
+ it('should create context on window', () => {
+ const MyContext = createContext(undefined, 'MyContext', 'package', '9.0.0');
+ expect(getWindowProperty(getGlobalContextSymbols(SYMBOL_NAMESPACE)[0])).equals(MyContext);
+ });
+
+ it('should create single context', () => {
+ const MyContext = createContext(undefined, 'MyContext', 'package', '9.0.0');
+ const MyContext2 = createContext(undefined, 'MyContext', 'package', '9.0.0');
+
+ expect(getGlobalContextSymbols(SYMBOL_NAMESPACE).length).equals(1);
+ expect(getWindowProperty(getGlobalContextSymbols(SYMBOL_NAMESPACE)[0])).equals(MyContext);
+ expect(MyContext2).equals(MyContext);
+ });
+});
+
+describe('createContextSelector', () => {
+ beforeEach(() => cleanWindowSymbols(CONTEXT_SELECTOR_SYMBOL_NAMESPACE));
+
+ it('should create context on window', () => {
+ const MyContext = createContextSelector({}, 'MyContext', 'package', '9.0.0');
+ expect(getWindowProperty(getGlobalContextSymbols(CONTEXT_SELECTOR_SYMBOL_NAMESPACE)[0])).equals(MyContext);
+ });
+
+ it('should create single context', () => {
+ const MyContext = createContextSelector({}, 'MyContext', 'package', '9.0.0');
+ const MyContext2 = createContextSelector({}, 'MyContext', 'package', '9.0.0');
+
+ expect(getGlobalContextSymbols(CONTEXT_SELECTOR_SYMBOL_NAMESPACE).length).equals(1);
+ expect(getWindowProperty(getGlobalContextSymbols(CONTEXT_SELECTOR_SYMBOL_NAMESPACE)[0])).equals(MyContext);
+ expect(MyContext2).equals(MyContext);
+ });
+});
diff --git a/packages/react-components/global-context/tsconfig.cy.json b/packages/react-components/global-context/tsconfig.cy.json
new file mode 100644
index 00000000000000..93a140885851da
--- /dev/null
+++ b/packages/react-components/global-context/tsconfig.cy.json
@@ -0,0 +1,9 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "isolatedModules": false,
+ "types": ["node", "cypress", "cypress-storybook/cypress", "cypress-real-events"],
+ "lib": ["ES2019", "dom"]
+ },
+ "include": ["**/*.cy.ts", "**/*.cy.tsx"]
+}
diff --git a/packages/react-components/global-context/tsconfig.json b/packages/react-components/global-context/tsconfig.json
index dcb3b091c7bc92..c8027a33f2aeb3 100644
--- a/packages/react-components/global-context/tsconfig.json
+++ b/packages/react-components/global-context/tsconfig.json
@@ -19,7 +19,7 @@
"path": "./tsconfig.spec.json"
},
{
- "path": "./e2e/tsconfig.json"
+ "path": "./tsconfig.cy.json"
}
]
}
diff --git a/packages/react-components/global-context/tsconfig.lib.json b/packages/react-components/global-context/tsconfig.lib.json
index d6f931d85a702e..356da34103c916 100644
--- a/packages/react-components/global-context/tsconfig.lib.json
+++ b/packages/react-components/global-context/tsconfig.lib.json
@@ -9,6 +9,6 @@
"inlineSources": true,
"types": ["static-assets", "environment", "node"]
},
- "exclude": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx"],
+ "exclude": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.cy.ts", "**/*.cy.tsx"],
"include": ["./src/**/*.ts", "./src/**/*.tsx"]
}
diff --git a/packages/react-components/global-context/tsconfig.spec.json b/packages/react-components/global-context/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/global-context/tsconfig.spec.json
+++ b/packages/react-components/global-context/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/keyboard-keys/.npmignore b/packages/react-components/keyboard-keys/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/keyboard-keys/.npmignore
+++ b/packages/react-components/keyboard-keys/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/keyboard-keys/CHANGELOG.json b/packages/react-components/keyboard-keys/CHANGELOG.json
index 17f5770c9efe8e..197d3ec8ce684a 100644
--- a/packages/react-components/keyboard-keys/CHANGELOG.json
+++ b/packages/react-components/keyboard-keys/CHANGELOG.json
@@ -1,6 +1,36 @@
{
"name": "@fluentui/keyboard-keys",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 22:09:50 GMT",
+ "tag": "@fluentui/keyboard-keys_v9.0.0",
+ "version": "9.0.0",
+ "comments": {
+ "none": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/keyboard-keys",
+ "commit": "2435ea50f924fa6467a07829f3d4715e545d93c0",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:44 GMT",
+ "tag": "@fluentui/keyboard-keys_v9.0.0",
+ "version": "9.0.0",
+ "comments": {
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/keyboard-keys",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:35 GMT",
"tag": "@fluentui/keyboard-keys_v9.0.0",
diff --git a/packages/react-components/keyboard-keys/tsconfig.spec.json b/packages/react-components/keyboard-keys/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/keyboard-keys/tsconfig.spec.json
+++ b/packages/react-components/keyboard-keys/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/priority-overflow/.npmignore b/packages/react-components/priority-overflow/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/priority-overflow/.npmignore
+++ b/packages/react-components/priority-overflow/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/priority-overflow/CHANGELOG.json b/packages/react-components/priority-overflow/CHANGELOG.json
index baa04b7a616551..f4c7c23761950e 100644
--- a/packages/react-components/priority-overflow/CHANGELOG.json
+++ b/packages/react-components/priority-overflow/CHANGELOG.json
@@ -1,6 +1,78 @@
{
"name": "@fluentui/priority-overflow",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 22:09:50 GMT",
+ "tag": "@fluentui/priority-overflow_v9.0.0-beta.3",
+ "version": "9.0.0-beta.3",
+ "comments": {
+ "none": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "2435ea50f924fa6467a07829f3d4715e545d93c0",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 25 Oct 2022 00:35:27 GMT",
+ "tag": "@fluentui/priority-overflow_v9.0.0-beta.3",
+ "version": "9.0.0-beta.3",
+ "comments": {
+ "none": [
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:41 GMT",
+ "tag": "@fluentui/priority-overflow_v9.0.0-beta.3",
+ "version": "9.0.0-beta.3",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "6440417cb5db157acfb33d9f2c93de9bf7493791",
+ "comment": "feat: Adds API to register overflow menus for better available space calculation"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "d59683655d4d2a3775df4a2b41a09504cddd72ad",
+ "comment": "new overflow items should only be enqueued while observing"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:45 GMT",
+ "tag": "@fluentui/priority-overflow_v9.0.0-beta.2",
+ "version": "9.0.0-beta.2",
+ "comments": {
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "chore(priority-flow): re-generate api.md"
+ }
+ ]
+ }
+ },
{
"date": "Tue, 28 Jun 2022 15:14:10 GMT",
"tag": "@fluentui/priority-overflow_v9.0.0-beta.2",
diff --git a/packages/react-components/priority-overflow/CHANGELOG.md b/packages/react-components/priority-overflow/CHANGELOG.md
index b47662194b45e3..a06b0aec1ca234 100644
--- a/packages/react-components/priority-overflow/CHANGELOG.md
+++ b/packages/react-components/priority-overflow/CHANGELOG.md
@@ -1,9 +1,19 @@
# Change Log - @fluentui/priority-overflow
-This log was last generated on Tue, 28 Jun 2022 15:14:10 GMT and should not be manually modified.
+This log was last generated on Thu, 13 Oct 2022 11:02:41 GMT and should not be manually modified.
+## [9.0.0-beta.3](https://github.com/microsoft/fluentui/tree/@fluentui/priority-overflow_v9.0.0-beta.3)
+
+Thu, 13 Oct 2022 11:02:41 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/priority-overflow_v9.0.0-beta.2..@fluentui/priority-overflow_v9.0.0-beta.3)
+
+### Changes
+
+- feat: Adds API to register overflow menus for better available space calculation ([PR #25091](https://github.com/microsoft/fluentui/pull/25091) by lingfangao@hotmail.com)
+- new overflow items should only be enqueued while observing ([PR #25122](https://github.com/microsoft/fluentui/pull/25122) by lingfangao@hotmail.com)
+
## [9.0.0-beta.2](https://github.com/microsoft/fluentui/tree/@fluentui/priority-overflow_v9.0.0-beta.2)
Tue, 28 Jun 2022 15:14:10 GMT
diff --git a/packages/react-components/priority-overflow/README.md b/packages/react-components/priority-overflow/README.md
index 276f904fe3ac30..9ebde22a8b4a04 100644
--- a/packages/react-components/priority-overflow/README.md
+++ b/packages/react-components/priority-overflow/README.md
@@ -1,5 +1,5 @@
# @fluentui/priority-overflow
-**Priority Overflow components for [Fluent UI React](https://developer.microsoft.com/en-us/fluentui)**
+**Priority Overflow components for [Fluent UI React](https://react.fluentui.dev)**
These are not production-ready components and **should never be used in product**. This space is useful for testing new components whose APIs might change before final release.
diff --git a/packages/react-components/priority-overflow/etc/priority-overflow.api.md b/packages/react-components/priority-overflow/etc/priority-overflow.api.md
index 6ecdc4d372dcb8..a8a2ef84d50ce2 100644
--- a/packages/react-components/priority-overflow/etc/priority-overflow.api.md
+++ b/packages/react-components/priority-overflow/etc/priority-overflow.api.md
@@ -62,10 +62,12 @@ export interface OverflowItemEntry {
// @internal (undocumented)
export interface OverflowManager {
addItem: (items: OverflowItemEntry) => void;
+ addOverflowMenu: (element: HTMLElement) => void;
disconnect: () => void;
forceUpdate: () => void;
observe: (container: HTMLElement, options: ObserveOptions) => void;
removeItem: (itemId: string) => void;
+ removeOverflowMenu: () => void;
update: () => void;
}
diff --git a/packages/react-components/priority-overflow/package.json b/packages/react-components/priority-overflow/package.json
index 91163ecdf222af..fc5a72f042214b 100644
--- a/packages/react-components/priority-overflow/package.json
+++ b/packages/react-components/priority-overflow/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/priority-overflow",
- "version": "9.0.0-beta.2",
+ "version": "9.0.0-beta.3",
"description": "Vanilla JS utilities to implement overflow menus",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
diff --git a/packages/react-components/priority-overflow/src/overflowManager.ts b/packages/react-components/priority-overflow/src/overflowManager.ts
index c853f914feaebb..f9a45f67ce0539 100644
--- a/packages/react-components/priority-overflow/src/overflowManager.ts
+++ b/packages/react-components/priority-overflow/src/overflowManager.ts
@@ -8,6 +8,8 @@ import type { OverflowGroupState, OverflowItemEntry, OverflowManager, ObserveOpt
*/
export function createOverflowManager(): OverflowManager {
let container: HTMLElement | undefined;
+ let overflowMenu: HTMLElement | undefined;
+ let observing = false;
const options: Required = {
padding: 10,
overflowAxis: 'horizontal',
@@ -121,6 +123,8 @@ export function createOverflowManager(): OverflowManager {
return;
}
+ const overflowMenuOffset = overflowMenu ? getOffsetSize(overflowMenu) : 0;
+
// Snapshot of the visible/invisible state to compare for updates
const visibleTop = visibleItemQueue.peek();
const invisibleTop = invisibleItemQueue.peek();
@@ -143,6 +147,10 @@ export function createOverflowManager(): OverflowManager {
currentWidth -= makeItemInvisible();
}
+ if (invisibleItemQueue.size() > 0 && currentWidth + overflowMenuOffset > availableSize) {
+ makeItemInvisible();
+ }
+
// only update when the state of visible/invisible items has changed
if (visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop) {
dispatchOverflowUpdate();
@@ -162,17 +170,29 @@ export function createOverflowManager(): OverflowManager {
const observe: OverflowManager['observe'] = (observedContainer, userOptions) => {
Object.assign(options, userOptions);
+ observing = true;
+ Object.values(overflowItems).forEach(item => visibleItemQueue.enqueue(item.id));
+
container = observedContainer;
resizeObserver.observe(container);
};
const disconnect: OverflowManager['disconnect'] = () => {
+ observing = false;
resizeObserver.disconnect();
};
const addItem: OverflowManager['addItem'] = item => {
+ if (overflowItems[item.id]) {
+ return;
+ }
+
overflowItems[item.id] = item;
- visibleItemQueue.enqueue(item.id);
+
+ // some options can affect priority which are only set on `observe`
+ if (observing) {
+ visibleItemQueue.enqueue(item.id);
+ }
if (item.groupId) {
if (!overflowGroups[item.groupId]) {
@@ -188,7 +208,19 @@ export function createOverflowManager(): OverflowManager {
update();
};
+ const addOverflowMenu: OverflowManager['addOverflowMenu'] = el => {
+ overflowMenu = el;
+ };
+
+ const removeOverflowMenu: OverflowManager['removeOverflowMenu'] = () => {
+ overflowMenu = undefined;
+ };
+
const removeItem: OverflowManager['removeItem'] = itemId => {
+ if (!overflowItems[itemId]) {
+ return;
+ }
+
const item = overflowItems[itemId];
visibleItemQueue.remove(itemId);
invisibleItemQueue.remove(itemId);
@@ -209,5 +241,7 @@ export function createOverflowManager(): OverflowManager {
observe,
removeItem,
update,
+ addOverflowMenu,
+ removeOverflowMenu,
};
}
diff --git a/packages/react-components/priority-overflow/src/priorityQueue.ts b/packages/react-components/priority-overflow/src/priorityQueue.ts
index 5a727f43d82ff3..719559586eb00f 100644
--- a/packages/react-components/priority-overflow/src/priorityQueue.ts
+++ b/packages/react-components/priority-overflow/src/priorityQueue.ts
@@ -88,13 +88,14 @@ export function createPriorityQueue(compare: PriorityQueueCompareFn): Prio
};
const contains = (item: T) => {
- return arr.indexOf(item) >= 0;
+ const index = arr.indexOf(item);
+ return index >= 0 && index < size;
};
const remove = (item: T) => {
const i = arr.indexOf(item);
- if (i === -1) {
+ if (i === -1 || i >= size) {
return;
}
diff --git a/packages/react-components/priority-overflow/src/types.ts b/packages/react-components/priority-overflow/src/types.ts
index f5c5f66d5f9c7b..75cb10d193a937 100644
--- a/packages/react-components/priority-overflow/src/types.ts
+++ b/packages/react-components/priority-overflow/src/types.ts
@@ -104,4 +104,15 @@ export interface OverflowManager {
* Manually update the overflow sync
*/
forceUpdate: () => void;
+
+ /**
+ * Adds an element that opens an overflow menu. This is used to calculate
+ * available space and check if additional items need to overflow
+ */
+ addOverflowMenu: (element: HTMLElement) => void;
+
+ /**
+ * Unsets the overflow menu element
+ */
+ removeOverflowMenu: () => void;
}
diff --git a/packages/react-components/priority-overflow/tsconfig.spec.json b/packages/react-components/priority-overflow/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/priority-overflow/tsconfig.spec.json
+++ b/packages/react-components/priority-overflow/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/react-accordion/.npmignore b/packages/react-components/react-accordion/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/react-accordion/.npmignore
+++ b/packages/react-components/react-accordion/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/react-accordion/.storybook/main.js b/packages/react-components/react-accordion/.storybook/main.js
index f57cfd09509e78..26536b61b387f6 100644
--- a/packages/react-components/react-accordion/.storybook/main.js
+++ b/packages/react-components/react-accordion/.storybook/main.js
@@ -2,7 +2,7 @@ const rootMain = require('../../../../.storybook/main');
module.exports = /** @type {Omit} */ ({
...rootMain,
- stories: [...rootMain.stories, '../src/**/*.stories.mdx', '../src/**/index.stories.@(ts|tsx)'],
+ stories: [...rootMain.stories, '../stories/**/*.stories.mdx', '../stories/**/index.stories.@(ts|tsx)'],
addons: [...rootMain.addons],
webpackFinal: (config, options) => {
const localConfig = { ...rootMain.webpackFinal(config, options) };
diff --git a/packages/react-components/react-accordion/.storybook/tsconfig.json b/packages/react-components/react-accordion/.storybook/tsconfig.json
index f9f60e1234ed49..ea89218a3d916f 100644
--- a/packages/react-components/react-accordion/.storybook/tsconfig.json
+++ b/packages/react-components/react-accordion/.storybook/tsconfig.json
@@ -6,5 +6,5 @@
"checkJs": true,
"types": ["static-assets", "environment", "storybook__addons"]
},
- "include": ["../src/**/*.stories.ts", "../src/**/*.stories.tsx", "*.js"]
+ "include": ["../stories/**/*.stories.ts", "../stories/**/*.stories.tsx", "*.js"]
}
diff --git a/packages/react-components/react-accordion/CHANGELOG.json b/packages/react-components/react-accordion/CHANGELOG.json
index 85e47ffed7a013..81acd67547cb73 100644
--- a/packages/react-components/react-accordion/CHANGELOG.json
+++ b/packages/react-components/react-accordion/CHANGELOG.json
@@ -1,6 +1,254 @@
{
"name": "@fluentui/react-accordion",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 00:35:27 GMT",
+ "tag": "@fluentui/react-accordion_v9.0.9",
+ "version": "9.0.9",
+ "comments": {
+ "none": [
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:56 GMT",
+ "tag": "@fluentui/react-accordion_v9.0.9",
+ "version": "9.0.9",
+ "comments": {
+ "patch": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "4f7430e2fa321b96ce6022882a42aa897fcf67c9",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-aria to v9.2.3",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.5",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-shared-contexts to v9.0.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-tabster to v9.2.0",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-theme to v9.1.1",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:42 GMT",
+ "tag": "@fluentui/react-accordion_v9.0.8",
+ "version": "9.0.8",
+ "comments": {
+ "patch": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-aria to v9.2.2",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.4",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-tabster to v9.1.3",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 22:24:42 GMT",
+ "tag": "@fluentui/react-accordion_v9.0.7",
+ "version": "9.0.7",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-aria to v9.2.1",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-tabster to v9.1.2",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/react-accordion_v9.0.6",
+ "version": "9.0.6",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:45 GMT",
+ "tag": "@fluentui/react-accordion_v9.0.5",
+ "version": "9.0.5",
+ "comments": {
+ "patch": [
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "a606fbedcf7d618d1a48706a5e15c26c4cd85ba6",
+ "comment": "chore: fix no-context-default-value lint violations for cxe"
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "7b9f91b1fc1c2281bff1037b860b92dfbf99dfb1",
+ "comment": "fix(Refactor accordion expandIcon styling)"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "f17b8604209a099d354c212077832516dcfbbae2",
+ "comment": "fix: add type=button to button slot"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-aria to v9.2.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.3",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-shared-contexts to v9.0.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-tabster to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-accordion",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ],
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:35 GMT",
"tag": "@fluentui/react-accordion_v9.0.4",
diff --git a/packages/react-components/react-accordion/CHANGELOG.md b/packages/react-components/react-accordion/CHANGELOG.md
index 75aa6beb6c1c04..35c0a5eb7b3797 100644
--- a/packages/react-components/react-accordion/CHANGELOG.md
+++ b/packages/react-components/react-accordion/CHANGELOG.md
@@ -1,9 +1,79 @@
# Change Log - @fluentui/react-accordion
-This log was last generated on Wed, 03 Aug 2022 16:03:35 GMT and should not be manually modified.
+This log was last generated on Thu, 20 Oct 2022 08:39:56 GMT and should not be manually modified.
+## [9.0.9](https://github.com/microsoft/fluentui/tree/@fluentui/react-accordion_v9.0.9)
+
+Thu, 20 Oct 2022 08:39:56 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-accordion_v9.0.8..@fluentui/react-accordion_v9.0.9)
+
+### Patches
+
+- chore: Migrate to new package structure. ([PR #25196](https://github.com/microsoft/fluentui/pull/25196) by tristan.watanabe@gmail.com)
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- Bump @fluentui/react-aria to v9.2.3 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-context-selector to v9.0.5 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-shared-contexts to v9.0.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-tabster to v9.2.0 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-theme to v9.1.1 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.0.8](https://github.com/microsoft/fluentui/tree/@fluentui/react-accordion_v9.0.8)
+
+Thu, 13 Oct 2022 11:02:42 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-accordion_v9.0.7..@fluentui/react-accordion_v9.0.8)
+
+### Patches
+
+- chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- Bump @fluentui/react-aria to v9.2.2 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-context-selector to v9.0.4 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-tabster to v9.1.3 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.0.7](https://github.com/microsoft/fluentui/tree/@fluentui/react-accordion_v9.0.7)
+
+Mon, 03 Oct 2022 22:24:42 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-accordion_v9.0.6..@fluentui/react-accordion_v9.0.7)
+
+### Patches
+
+- Bump @fluentui/react-aria to v9.2.1 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+- Bump @fluentui/react-tabster to v9.1.2 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+
+## [9.0.6](https://github.com/microsoft/fluentui/tree/@fluentui/react-accordion_v9.0.6)
+
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-accordion_v9.0.5..@fluentui/react-accordion_v9.0.6)
+
+### Patches
+
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.0.5](https://github.com/microsoft/fluentui/tree/@fluentui/react-accordion_v9.0.5)
+
+Thu, 15 Sep 2022 09:49:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-accordion_v9.0.4..@fluentui/react-accordion_v9.0.5)
+
+### Patches
+
+- chore: fix no-context-default-value lint violations for cxe ([PR #24277](https://github.com/microsoft/fluentui/pull/24277) by lingfangao@hotmail.com)
+- fix(Refactor accordion expandIcon styling) ([PR #24597](https://github.com/microsoft/fluentui/pull/24597) by ololubek@microsoft.com)
+- fix: add type=button to button slot ([PR #24327](https://github.com/microsoft/fluentui/pull/24327) by sarah.higley@microsoft.com)
+- chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- Bump @fluentui/react-aria to v9.2.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-context-selector to v9.0.3 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-shared-contexts to v9.0.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-tabster to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.0.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-accordion_v9.0.4)
Wed, 03 Aug 2022 16:03:35 GMT
diff --git a/packages/react-components/react-accordion/README.md b/packages/react-components/react-accordion/README.md
index aa6c6aee8b86aa..051e6f97e824c7 100644
--- a/packages/react-components/react-accordion/README.md
+++ b/packages/react-components/react-accordion/README.md
@@ -1,5 +1,3 @@
# @fluentui/react-accordion
-**React Accordion components for [Fluent UI React](https://developer.microsoft.com/en-us/fluentui)**
-
-These are not production-ready components and **should never be used in product**. This space is useful for testing new components whose APIs might change before final release.
+**React Accordion components for [Fluent UI React](https://react.fluentui.dev)**
diff --git a/packages/react-components/react-accordion/config/api-extractor.json b/packages/react-components/react-accordion/config/api-extractor.json
index eee94ff6de902d..637d9797ae3e6e 100644
--- a/packages/react-components/react-accordion/config/api-extractor.json
+++ b/packages/react-components/react-accordion/config/api-extractor.json
@@ -1,5 +1,9 @@
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
"extends": "@fluentui/scripts/api-extractor/api-extractor.common.v-next.json",
- "mainEntryPointFilePath": "/dist/types/index.d.ts"
+ "dtsRollup": {
+ "enabled": true,
+ "untrimmedFilePath": "",
+ "publicTrimmedFilePath": "/dist/index.d.ts"
+ }
}
diff --git a/packages/react-components/react-accordion/config/api-extractor.local.json b/packages/react-components/react-accordion/config/api-extractor.local.json
deleted file mode 100644
index 69e764bce3a592..00000000000000
--- a/packages/react-components/react-accordion/config/api-extractor.local.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
- "extends": "./api-extractor.json",
- "mainEntryPointFilePath": "/dist/types/packages/react-components//src/index.d.ts"
-}
diff --git a/packages/react-components/react-accordion/Spec.md b/packages/react-components/react-accordion/docs/Spec.md
similarity index 100%
rename from packages/react-components/react-accordion/Spec.md
rename to packages/react-components/react-accordion/docs/Spec.md
diff --git a/packages/react-components/react-accordion/package.json b/packages/react-components/react-accordion/package.json
index 925d8db150c9d1..82c39d740dafff 100644
--- a/packages/react-components/react-accordion/package.json
+++ b/packages/react-components/react-accordion/package.json
@@ -1,10 +1,10 @@
{
"name": "@fluentui/react-accordion",
- "version": "9.0.4",
+ "version": "9.0.9",
"description": "Fluent UI accordion component",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
- "typings": "dist/index.d.ts",
+ "typings": "./dist/index.d.ts",
"sideEffects": false,
"repository": {
"type": "git",
@@ -20,33 +20,32 @@
"lint": "just-scripts lint",
"start": "yarn storybook",
"test": "jest --passWithNoTests",
- "docs": "api-extractor run --config=config/api-extractor.local.json --local",
- "build:local": "tsc -p ./tsconfig.lib.json --module esnext --emitDeclarationOnly && node ../../../scripts/typescript/normalize-import --output ./dist/types/packages/react-components/react-accordion/src && yarn docs",
"storybook": "start-storybook",
- "type-check": "tsc -b tsconfig.json"
+ "type-check": "tsc -b tsconfig.json",
+ "generate-api": "tsc -p ./tsconfig.lib.json --emitDeclarationOnly && just-scripts api-extractor"
},
"devDependencies": {
"@fluentui/eslint-plugin": "*",
"@fluentui/react-conformance": "*",
- "@fluentui/react-conformance-griffel": "9.0.0-beta.12",
+ "@fluentui/react-conformance-griffel": "9.0.0-beta.16",
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
- "@fluentui/react-aria": "^9.1.0",
- "@fluentui/react-context-selector": "^9.0.2",
+ "@fluentui/react-aria": "^9.2.3",
+ "@fluentui/react-context-selector": "^9.0.5",
"@fluentui/react-icons": "^2.0.175",
- "@fluentui/react-shared-contexts": "^9.0.0",
- "@fluentui/react-tabster": "^9.1.0",
- "@fluentui/react-theme": "^9.0.0",
- "@fluentui/react-utilities": "^9.0.2",
- "@griffel/react": "^1.3.0",
+ "@fluentui/react-shared-contexts": "^9.0.2",
+ "@fluentui/react-tabster": "^9.2.0",
+ "@fluentui/react-theme": "^9.1.1",
+ "@fluentui/react-utilities": "^9.1.2",
+ "@griffel/react": "^1.4.1",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0",
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0",
"scheduler": "^0.19.0 || ^0.20.0"
},
"beachball": {
@@ -57,9 +56,10 @@
},
"exports": {
".": {
- "types": "./lib/index.d.ts",
+ "types": "./dist/index.d.ts",
"import": "./lib/index.js",
"require": "./lib-commonjs/index.js"
- }
+ },
+ "./package.json": "./package.json"
}
}
diff --git a/packages/react-components/react-accordion/src/components/Accordion/Accordion.test.tsx b/packages/react-components/react-accordion/src/components/Accordion/Accordion.test.tsx
index d5216f292cdde2..def30246470952 100644
--- a/packages/react-components/react-accordion/src/components/Accordion/Accordion.test.tsx
+++ b/packages/react-components/react-accordion/src/components/Accordion/Accordion.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { Accordion } from './Accordion';
import * as renderer from 'react-test-renderer';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
describe('Accordion', () => {
isConformant({
diff --git a/packages/react-components/react-accordion/src/components/AccordionHeader/AccordionHeader.test.tsx b/packages/react-components/react-accordion/src/components/AccordionHeader/AccordionHeader.test.tsx
index 625f2398a04341..1f56f855a898d6 100644
--- a/packages/react-components/react-accordion/src/components/AccordionHeader/AccordionHeader.test.tsx
+++ b/packages/react-components/react-accordion/src/components/AccordionHeader/AccordionHeader.test.tsx
@@ -3,7 +3,7 @@ import * as React from 'react';
import { AccordionHeader } from './AccordionHeader';
import { AccordionHeaderProps } from './AccordionHeader.types';
import * as renderer from 'react-test-renderer';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
import { Accordion } from '../Accordion/Accordion';
import { AccordionItem } from '../AccordionItem';
import { AccordionPanel } from '../AccordionPanel';
diff --git a/packages/react-components/react-accordion/src/components/AccordionItem/AccordionItem.test.tsx b/packages/react-components/react-accordion/src/components/AccordionItem/AccordionItem.test.tsx
index 6da9384d908b8b..4962891a8d8649 100644
--- a/packages/react-components/react-accordion/src/components/AccordionItem/AccordionItem.test.tsx
+++ b/packages/react-components/react-accordion/src/components/AccordionItem/AccordionItem.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { AccordionItem } from './AccordionItem';
import * as renderer from 'react-test-renderer';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
describe('AccordionItem', () => {
isConformant({
diff --git a/packages/react-components/react-accordion/src/components/AccordionPanel/AccordionPanel.test.tsx b/packages/react-components/react-accordion/src/components/AccordionPanel/AccordionPanel.test.tsx
index 004cf68dc4ac04..90ecce32f3f974 100644
--- a/packages/react-components/react-accordion/src/components/AccordionPanel/AccordionPanel.test.tsx
+++ b/packages/react-components/react-accordion/src/components/AccordionPanel/AccordionPanel.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { AccordionPanel } from './AccordionPanel';
import * as renderer from 'react-test-renderer';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
import { AccordionItemContext } from '../AccordionItem';
describe('AccordionPanel', () => {
diff --git a/packages/react-components/react-accordion/src/common/isConformant.ts b/packages/react-components/react-accordion/src/testing/isConformant.ts
similarity index 100%
rename from packages/react-components/react-accordion/src/common/isConformant.ts
rename to packages/react-components/react-accordion/src/testing/isConformant.ts
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionCollapsible.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionCollapsible.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionCollapsible.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionCollapsible.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionDefault.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionDefault.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionDefault.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionDefault.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionDescription.md b/packages/react-components/react-accordion/stories/Accordion/AccordionDescription.md
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionDescription.md
rename to packages/react-components/react-accordion/stories/Accordion/AccordionDescription.md
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionDisabled.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionDisabled.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionDisabled.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionDisabled.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionExpandIcon.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionExpandIcon.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionExpandIcon.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionExpandIcon.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionExpandIconPosition.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionExpandIconPosition.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionExpandIconPosition.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionExpandIconPosition.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionHeaders.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionHeaders.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionHeaders.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionHeaders.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionInline.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionInline.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionInline.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionInline.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionMultiple.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionMultiple.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionMultiple.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionMultiple.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionNavigation.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionNavigation.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionNavigation.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionNavigation.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionOpenItems.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionOpenItems.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionOpenItems.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionOpenItems.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionSizes.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionSizes.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionSizes.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionSizes.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/AccordionWithIcon.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/AccordionWithIcon.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/AccordionWithIcon.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/AccordionWithIcon.stories.tsx
diff --git a/packages/react-components/react-accordion/src/stories/Accordion/index.stories.tsx b/packages/react-components/react-accordion/stories/Accordion/index.stories.tsx
similarity index 100%
rename from packages/react-components/react-accordion/src/stories/Accordion/index.stories.tsx
rename to packages/react-components/react-accordion/stories/Accordion/index.stories.tsx
diff --git a/packages/react-components/react-accordion/tsconfig.lib.json b/packages/react-components/react-accordion/tsconfig.lib.json
index 5d7b14f1e0b70c..6f90cf95c005bd 100644
--- a/packages/react-components/react-accordion/tsconfig.lib.json
+++ b/packages/react-components/react-accordion/tsconfig.lib.json
@@ -3,14 +3,14 @@
"compilerOptions": {
"noEmit": false,
"lib": ["ES2019", "dom"],
- "outDir": "dist",
"declaration": true,
- "declarationDir": "dist/types",
+ "declarationDir": "../../../dist/out-tsc/types",
+ "outDir": "../../../dist/out-tsc",
"inlineSources": true,
"types": ["static-assets", "environment"]
},
"exclude": [
- "./src/common/**",
+ "./src/testing/**",
"**/*.spec.ts",
"**/*.spec.tsx",
"**/*.test.ts",
diff --git a/packages/react-components/react-accordion/tsconfig.spec.json b/packages/react-components/react-accordion/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/react-accordion/tsconfig.spec.json
+++ b/packages/react-components/react-accordion/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/react-alert/.npmignore b/packages/react-components/react-alert/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/react-alert/.npmignore
+++ b/packages/react-components/react-alert/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/react-alert/.storybook/main.js b/packages/react-components/react-alert/.storybook/main.js
index f57cfd09509e78..26536b61b387f6 100644
--- a/packages/react-components/react-alert/.storybook/main.js
+++ b/packages/react-components/react-alert/.storybook/main.js
@@ -2,7 +2,7 @@ const rootMain = require('../../../../.storybook/main');
module.exports = /** @type {Omit} */ ({
...rootMain,
- stories: [...rootMain.stories, '../src/**/*.stories.mdx', '../src/**/index.stories.@(ts|tsx)'],
+ stories: [...rootMain.stories, '../stories/**/*.stories.mdx', '../stories/**/index.stories.@(ts|tsx)'],
addons: [...rootMain.addons],
webpackFinal: (config, options) => {
const localConfig = { ...rootMain.webpackFinal(config, options) };
diff --git a/packages/react-components/react-alert/.storybook/tsconfig.json b/packages/react-components/react-alert/.storybook/tsconfig.json
index f9f60e1234ed49..ea89218a3d916f 100644
--- a/packages/react-components/react-alert/.storybook/tsconfig.json
+++ b/packages/react-components/react-alert/.storybook/tsconfig.json
@@ -6,5 +6,5 @@
"checkJs": true,
"types": ["static-assets", "environment", "storybook__addons"]
},
- "include": ["../src/**/*.stories.ts", "../src/**/*.stories.tsx", "*.js"]
+ "include": ["../stories/**/*.stories.ts", "../stories/**/*.stories.tsx", "*.js"]
}
diff --git a/packages/react-components/react-alert/CHANGELOG.json b/packages/react-components/react-alert/CHANGELOG.json
index 1b5e9660f4c05d..a2e667b2a5f0c1 100644
--- a/packages/react-components/react-alert/CHANGELOG.json
+++ b/packages/react-components/react-alert/CHANGELOG.json
@@ -1,6 +1,253 @@
{
"name": "@fluentui/react-alert",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 00:35:27 GMT",
+ "tag": "@fluentui/react-alert_v9.0.0-beta.15",
+ "version": "9.0.0-beta.15",
+ "comments": {
+ "none": [
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ }
+ ],
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-avatar to v9.2.4",
+ "commit": "eef12b9ae58b64ff68576dc2d865b601e46c85b9"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-button to v9.1.6",
+ "commit": "eef12b9ae58b64ff68576dc2d865b601e46c85b9"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:57 GMT",
+ "tag": "@fluentui/react-alert_v9.0.0-beta.14",
+ "version": "9.0.0-beta.14",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-alert",
+ "commit": "791ed7453a6bf65342e9bed5876b02ef0b9fc944",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-avatar to v9.2.3",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-button to v9.1.5",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-theme to v9.1.1",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 12:56:30 GMT",
+ "tag": "@fluentui/react-alert_v9.0.0-beta.13",
+ "version": "9.0.0-beta.13",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-avatar to v9.2.2",
+ "commit": "77301c97c0539b9ebf891642eb0a077d1aeae9a6"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:42 GMT",
+ "tag": "@fluentui/react-alert_v9.0.0-beta.12",
+ "version": "9.0.0-beta.12",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-avatar to v9.2.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-button to v9.1.4",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 22:24:42 GMT",
+ "tag": "@fluentui/react-alert_v9.0.0-beta.11",
+ "version": "9.0.0-beta.11",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-avatar to v9.2.0",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-button to v9.1.3",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/react-alert_v9.0.0-beta.10",
+ "version": "9.0.0-beta.10",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-avatar to v9.1.1",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-button to v9.1.2",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:47 GMT",
+ "tag": "@fluentui/react-alert_v9.0.0-beta.9",
+ "version": "9.0.0-beta.9",
+ "comments": {
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "rohitpag@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "045c66e2a2142e3d2380da05a9aa60b54de6888c",
+ "comment": "Adding appearance prop to the alert component"
+ }
+ ],
+ "prerelease": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-avatar to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-button to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-alert",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:36 GMT",
"tag": "@fluentui/react-alert_v9.0.0-beta.8",
diff --git a/packages/react-components/react-alert/CHANGELOG.md b/packages/react-components/react-alert/CHANGELOG.md
index 8eaf857705c13d..5a3be1f723c130 100644
--- a/packages/react-components/react-alert/CHANGELOG.md
+++ b/packages/react-components/react-alert/CHANGELOG.md
@@ -1,9 +1,92 @@
# Change Log - @fluentui/react-alert
-This log was last generated on Wed, 03 Aug 2022 16:03:36 GMT and should not be manually modified.
+This log was last generated on Tue, 25 Oct 2022 00:35:27 GMT and should not be manually modified.
+## [9.0.0-beta.15](https://github.com/microsoft/fluentui/tree/@fluentui/react-alert_v9.0.0-beta.15)
+
+Tue, 25 Oct 2022 00:35:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-alert_v9.0.0-beta.14..@fluentui/react-alert_v9.0.0-beta.15)
+
+### Changes
+
+- Bump @fluentui/react-avatar to v9.2.4 ([PR #25363](https://github.com/microsoft/fluentui/pull/25363) by beachball)
+- Bump @fluentui/react-button to v9.1.6 ([PR #25363](https://github.com/microsoft/fluentui/pull/25363) by beachball)
+
+## [9.0.0-beta.14](https://github.com/microsoft/fluentui/tree/@fluentui/react-alert_v9.0.0-beta.14)
+
+Thu, 20 Oct 2022 08:39:57 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-alert_v9.0.0-beta.13..@fluentui/react-alert_v9.0.0-beta.14)
+
+### Changes
+
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- chore: Migrate to new package structure. ([PR #25197](https://github.com/microsoft/fluentui/pull/25197) by tristan.watanabe@gmail.com)
+- chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- Bump @fluentui/react-avatar to v9.2.3 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-button to v9.1.5 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-theme to v9.1.1 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.0.0-beta.13](https://github.com/microsoft/fluentui/tree/@fluentui/react-alert_v9.0.0-beta.13)
+
+Thu, 13 Oct 2022 12:56:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-alert_v9.0.0-beta.12..@fluentui/react-alert_v9.0.0-beta.13)
+
+### Changes
+
+- Bump @fluentui/react-avatar to v9.2.2 ([PR #25119](https://github.com/microsoft/fluentui/pull/25119) by beachball)
+
+## [9.0.0-beta.12](https://github.com/microsoft/fluentui/tree/@fluentui/react-alert_v9.0.0-beta.12)
+
+Thu, 13 Oct 2022 11:02:42 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-alert_v9.0.0-beta.11..@fluentui/react-alert_v9.0.0-beta.12)
+
+### Changes
+
+- chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- Bump @fluentui/react-avatar to v9.2.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-button to v9.1.4 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.0.0-beta.11](https://github.com/microsoft/fluentui/tree/@fluentui/react-alert_v9.0.0-beta.11)
+
+Mon, 03 Oct 2022 22:24:42 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-alert_v9.0.0-beta.10..@fluentui/react-alert_v9.0.0-beta.11)
+
+### Changes
+
+- Bump @fluentui/react-avatar to v9.2.0 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+- Bump @fluentui/react-button to v9.1.3 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+
+## [9.0.0-beta.10](https://github.com/microsoft/fluentui/tree/@fluentui/react-alert_v9.0.0-beta.10)
+
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-alert_v9.0.0-beta.9..@fluentui/react-alert_v9.0.0-beta.10)
+
+### Changes
+
+- Bump @fluentui/react-avatar to v9.1.1 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-button to v9.1.2 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.0.0-beta.9](https://github.com/microsoft/fluentui/tree/@fluentui/react-alert_v9.0.0-beta.9)
+
+Thu, 15 Sep 2022 09:49:47 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-alert_v9.0.0-beta.8..@fluentui/react-alert_v9.0.0-beta.9)
+
+### Changes
+
+- chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- Bump @fluentui/react-avatar to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-button to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.0.0-beta.8](https://github.com/microsoft/fluentui/tree/@fluentui/react-alert_v9.0.0-beta.8)
Wed, 03 Aug 2022 16:03:36 GMT
diff --git a/packages/react-components/react-alert/README.md b/packages/react-components/react-alert/README.md
index ebdae724bcf1ca..0fcf6d8c34bfff 100644
--- a/packages/react-components/react-alert/README.md
+++ b/packages/react-components/react-alert/README.md
@@ -1,6 +1,6 @@
# @fluentui/react-alert
-**React Alert component for [Fluent UI React](https://developer.microsoft.com/en-us/fluentui)**
+**React Alert component for [Fluent UI React](https://react.fluentui.dev)**
> WIP 🚧 - These are not production-ready components as we are still in a Beta phase.
> See the [spec.md](./Spec.md) for usage and component API details
diff --git a/packages/react-components/react-alert/config/api-extractor.json b/packages/react-components/react-alert/config/api-extractor.json
index eee94ff6de902d..637d9797ae3e6e 100644
--- a/packages/react-components/react-alert/config/api-extractor.json
+++ b/packages/react-components/react-alert/config/api-extractor.json
@@ -1,5 +1,9 @@
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
"extends": "@fluentui/scripts/api-extractor/api-extractor.common.v-next.json",
- "mainEntryPointFilePath": "/dist/types/index.d.ts"
+ "dtsRollup": {
+ "enabled": true,
+ "untrimmedFilePath": "",
+ "publicTrimmedFilePath": "/dist/index.d.ts"
+ }
}
diff --git a/packages/react-components/react-alert/config/api-extractor.local.json b/packages/react-components/react-alert/config/api-extractor.local.json
deleted file mode 100644
index 69e764bce3a592..00000000000000
--- a/packages/react-components/react-alert/config/api-extractor.local.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
- "extends": "./api-extractor.json",
- "mainEntryPointFilePath": "/dist/types/packages/react-components//src/index.d.ts"
-}
diff --git a/packages/react-components/react-alert/Migration.md b/packages/react-components/react-alert/docs/Migration.md
similarity index 100%
rename from packages/react-components/react-alert/Migration.md
rename to packages/react-components/react-alert/docs/Migration.md
diff --git a/packages/react-components/react-alert/Spec.md b/packages/react-components/react-alert/docs/Spec.md
similarity index 100%
rename from packages/react-components/react-alert/Spec.md
rename to packages/react-components/react-alert/docs/Spec.md
diff --git a/packages/react-components/react-alert/package.json b/packages/react-components/react-alert/package.json
index eb052c39986e78..6e105cb99642af 100644
--- a/packages/react-components/react-alert/package.json
+++ b/packages/react-components/react-alert/package.json
@@ -1,10 +1,10 @@
{
"name": "@fluentui/react-alert",
- "version": "9.0.0-beta.8",
+ "version": "9.0.0-beta.15",
"description": "An alert component to display brief messages",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
- "typings": "dist/index.d.ts",
+ "typings": "./dist/index.d.ts",
"sideEffects": false,
"repository": {
"type": "git",
@@ -20,31 +20,30 @@
"lint": "just-scripts lint",
"start": "yarn storybook",
"test": "jest --passWithNoTests",
- "docs": "api-extractor run --config=config/api-extractor.local.json --local",
- "build:local": "tsc -p ./tsconfig.lib.json --module esnext --emitDeclarationOnly && node ../../../scripts/typescript/normalize-import --output ./dist/types/packages/react-components/react-alert/src && yarn docs",
"storybook": "start-storybook",
- "type-check": "tsc -b tsconfig.json"
+ "type-check": "tsc -b tsconfig.json",
+ "generate-api": "tsc -p ./tsconfig.lib.json --emitDeclarationOnly && just-scripts api-extractor"
},
"devDependencies": {
"@fluentui/eslint-plugin": "*",
"@fluentui/react-conformance": "*",
- "@fluentui/react-conformance-griffel": "9.0.0-beta.12",
+ "@fluentui/react-conformance-griffel": "9.0.0-beta.16",
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
- "@fluentui/react-avatar": "^9.0.4",
- "@fluentui/react-button": "^9.1.0",
+ "@fluentui/react-avatar": "^9.2.4",
+ "@fluentui/react-button": "^9.1.6",
"@fluentui/react-icons": "^2.0.175",
- "@fluentui/react-theme": "^9.0.0",
- "@fluentui/react-utilities": "^9.0.2",
- "@griffel/react": "^1.3.0",
+ "@fluentui/react-theme": "^9.1.1",
+ "@fluentui/react-utilities": "^9.1.2",
+ "@griffel/react": "^1.4.1",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0"
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0"
},
"beachball": {
"disallowedChangeTypes": [
@@ -52,5 +51,13 @@
"minor",
"patch"
]
+ },
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./lib/index.js",
+ "require": "./lib-commonjs/index.js"
+ },
+ "./package.json": "./package.json"
}
}
diff --git a/packages/react-components/react-alert/src/components/Alert/Alert.test.tsx b/packages/react-components/react-alert/src/components/Alert/Alert.test.tsx
index 8db10c06886dae..67357cb0e2ba6f 100644
--- a/packages/react-components/react-alert/src/components/Alert/Alert.test.tsx
+++ b/packages/react-components/react-alert/src/components/Alert/Alert.test.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import { render, screen } from '@testing-library/react';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
import { Alert } from './Alert';
import { alertClassNames } from './useAlertStyles';
diff --git a/packages/react-components/react-alert/src/common/isConformant.ts b/packages/react-components/react-alert/src/testing/isConformant.ts
similarity index 100%
rename from packages/react-components/react-alert/src/common/isConformant.ts
rename to packages/react-components/react-alert/src/testing/isConformant.ts
diff --git a/packages/react-components/react-alert/src/stories/Alert/AlertAction.stories.tsx b/packages/react-components/react-alert/stories/Alert/AlertAction.stories.tsx
similarity index 100%
rename from packages/react-components/react-alert/src/stories/Alert/AlertAction.stories.tsx
rename to packages/react-components/react-alert/stories/Alert/AlertAction.stories.tsx
diff --git a/packages/react-components/react-alert/src/stories/Alert/AlertAppearance.stories.tsx b/packages/react-components/react-alert/stories/Alert/AlertAppearance.stories.tsx
similarity index 100%
rename from packages/react-components/react-alert/src/stories/Alert/AlertAppearance.stories.tsx
rename to packages/react-components/react-alert/stories/Alert/AlertAppearance.stories.tsx
diff --git a/packages/react-components/react-alert/src/stories/Alert/AlertAvatar.stories.tsx b/packages/react-components/react-alert/stories/Alert/AlertAvatar.stories.tsx
similarity index 93%
rename from packages/react-components/react-alert/src/stories/Alert/AlertAvatar.stories.tsx
rename to packages/react-components/react-alert/stories/Alert/AlertAvatar.stories.tsx
index eb9539fd538a3a..70856a17ad8f20 100644
--- a/packages/react-components/react-alert/src/stories/Alert/AlertAvatar.stories.tsx
+++ b/packages/react-components/react-alert/stories/Alert/AlertAvatar.stories.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { DismissCircleRegular } from '@fluentui/react-icons';
-import { Alert } from '../../index';
+import { Alert } from '@fluentui/react-alert';
export const Avatar = () => (
diff --git a/packages/react-components/react-alert/src/stories/Alert/AlertDefault.stories.tsx b/packages/react-components/react-alert/stories/Alert/AlertDefault.stories.tsx
similarity index 100%
rename from packages/react-components/react-alert/src/stories/Alert/AlertDefault.stories.tsx
rename to packages/react-components/react-alert/stories/Alert/AlertDefault.stories.tsx
diff --git a/packages/react-components/react-alert/src/stories/Alert/AlertDescription.md b/packages/react-components/react-alert/stories/Alert/AlertDescription.md
similarity index 100%
rename from packages/react-components/react-alert/src/stories/Alert/AlertDescription.md
rename to packages/react-components/react-alert/stories/Alert/AlertDescription.md
diff --git a/packages/react-components/react-alert/src/stories/Alert/AlertIcon.stories.tsx b/packages/react-components/react-alert/stories/Alert/AlertIcon.stories.tsx
similarity index 100%
rename from packages/react-components/react-alert/src/stories/Alert/AlertIcon.stories.tsx
rename to packages/react-components/react-alert/stories/Alert/AlertIcon.stories.tsx
diff --git a/packages/react-components/react-alert/src/stories/Alert/AlertIntent.stories.tsx b/packages/react-components/react-alert/stories/Alert/AlertIntent.stories.tsx
similarity index 100%
rename from packages/react-components/react-alert/src/stories/Alert/AlertIntent.stories.tsx
rename to packages/react-components/react-alert/stories/Alert/AlertIntent.stories.tsx
diff --git a/packages/react-components/react-alert/src/stories/Alert/index.stories.tsx b/packages/react-components/react-alert/stories/Alert/index.stories.tsx
similarity index 100%
rename from packages/react-components/react-alert/src/stories/Alert/index.stories.tsx
rename to packages/react-components/react-alert/stories/Alert/index.stories.tsx
diff --git a/packages/react-components/react-alert/tsconfig.lib.json b/packages/react-components/react-alert/tsconfig.lib.json
index 5d7b14f1e0b70c..6f90cf95c005bd 100644
--- a/packages/react-components/react-alert/tsconfig.lib.json
+++ b/packages/react-components/react-alert/tsconfig.lib.json
@@ -3,14 +3,14 @@
"compilerOptions": {
"noEmit": false,
"lib": ["ES2019", "dom"],
- "outDir": "dist",
"declaration": true,
- "declarationDir": "dist/types",
+ "declarationDir": "../../../dist/out-tsc/types",
+ "outDir": "../../../dist/out-tsc",
"inlineSources": true,
"types": ["static-assets", "environment"]
},
"exclude": [
- "./src/common/**",
+ "./src/testing/**",
"**/*.spec.ts",
"**/*.spec.tsx",
"**/*.test.ts",
diff --git a/packages/react-components/react-alert/tsconfig.spec.json b/packages/react-components/react-alert/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/react-alert/tsconfig.spec.json
+++ b/packages/react-components/react-alert/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/react-aria/.npmignore b/packages/react-components/react-aria/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/react-aria/.npmignore
+++ b/packages/react-components/react-aria/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/react-aria/.storybook/main.js b/packages/react-components/react-aria/.storybook/main.js
index f57cfd09509e78..26536b61b387f6 100644
--- a/packages/react-components/react-aria/.storybook/main.js
+++ b/packages/react-components/react-aria/.storybook/main.js
@@ -2,7 +2,7 @@ const rootMain = require('../../../../.storybook/main');
module.exports = /** @type {Omit
} */ ({
...rootMain,
- stories: [...rootMain.stories, '../src/**/*.stories.mdx', '../src/**/index.stories.@(ts|tsx)'],
+ stories: [...rootMain.stories, '../stories/**/*.stories.mdx', '../stories/**/index.stories.@(ts|tsx)'],
addons: [...rootMain.addons],
webpackFinal: (config, options) => {
const localConfig = { ...rootMain.webpackFinal(config, options) };
diff --git a/packages/react-components/react-aria/.storybook/tsconfig.json b/packages/react-components/react-aria/.storybook/tsconfig.json
index f9f60e1234ed49..ea89218a3d916f 100644
--- a/packages/react-components/react-aria/.storybook/tsconfig.json
+++ b/packages/react-components/react-aria/.storybook/tsconfig.json
@@ -6,5 +6,5 @@
"checkJs": true,
"types": ["static-assets", "environment", "storybook__addons"]
},
- "include": ["../src/**/*.stories.ts", "../src/**/*.stories.tsx", "*.js"]
+ "include": ["../stories/**/*.stories.ts", "../stories/**/*.stories.tsx", "*.js"]
}
diff --git a/packages/react-components/react-aria/CHANGELOG.json b/packages/react-components/react-aria/CHANGELOG.json
index 2ac32a17204e48..0ea58b542f682c 100644
--- a/packages/react-components/react-aria/CHANGELOG.json
+++ b/packages/react-components/react-aria/CHANGELOG.json
@@ -1,6 +1,157 @@
{
"name": "@fluentui/react-aria",
"entries": [
+ {
+ "date": "Wed, 26 Oct 2022 18:05:52 GMT",
+ "tag": "@fluentui/react-aria_v9.2.3",
+ "version": "9.2.3",
+ "comments": {
+ "none": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "bd5530ed0c9b2435d14f6e87878324343547ca34",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 25 Oct 2022 00:35:28 GMT",
+ "tag": "@fluentui/react-aria_v9.2.3",
+ "version": "9.2.3",
+ "comments": {
+ "none": [
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-aria",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:58 GMT",
+ "tag": "@fluentui/react-aria_v9.2.3",
+ "version": "9.2.3",
+ "comments": {
+ "patch": [
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-aria",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-aria",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:03:06 GMT",
+ "tag": "@fluentui/react-aria_v9.2.2",
+ "version": "9.2.2",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-aria",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 22:24:33 GMT",
+ "tag": "@fluentui/react-aria_v9.2.1",
+ "version": "9.2.1",
+ "comments": {
+ "patch": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "3b48ff5d92433635997aa69a59b138ec273172ea",
+ "comment": "chore: user defined tabIndex should prevail aria-button defined"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 23 Sep 2022 10:32:29 GMT",
+ "tag": "@fluentui/react-aria_v9.2.0",
+ "version": "9.2.0",
+ "comments": {
+ "none": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "ce5f1ec6a0c0f766679ea708c40538fc2d56c6d9",
+ "comment": "chore: restructure folder organization"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:48 GMT",
+ "tag": "@fluentui/react-aria_v9.2.0",
+ "version": "9.2.0",
+ "comments": {
+ "none": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "bf151e71e0ffa5de5c44cc722e629cdeb7abdbb2",
+ "comment": "chore: re-organize useARIAButton into its own folder"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-aria",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ }
+ ],
+ "patch": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-aria",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "docs(react-aria): re-generate api.md"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "de08c96226ec5d425f705c22c5d94dbac5811eb6",
+ "comment": "chore(react-aria): improve internal typings"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "0547583ebcebe746110e5ef8d0599b0972b1f4c6",
+ "comment": "feat: upgrade typings on useARIAButtonProps to be more specific"
+ }
+ ],
+ "minor": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "81191d9a45e629126a416e7202af3e241cd5e0fc",
+ "comment": "feat: add helper types to assist DOM element handling"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-aria",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:37 GMT",
"tag": "@fluentui/react-aria_v9.1.0",
diff --git a/packages/react-components/react-aria/CHANGELOG.md b/packages/react-components/react-aria/CHANGELOG.md
index 7ab5a84992d3e7..069309b2e93f81 100644
--- a/packages/react-components/react-aria/CHANGELOG.md
+++ b/packages/react-components/react-aria/CHANGELOG.md
@@ -1,9 +1,53 @@
# Change Log - @fluentui/react-aria
-This log was last generated on Wed, 03 Aug 2022 16:03:37 GMT and should not be manually modified.
+This log was last generated on Thu, 20 Oct 2022 08:39:58 GMT and should not be manually modified.
+## [9.2.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-aria_v9.2.3)
+
+Thu, 20 Oct 2022 08:39:58 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-aria_v9.2.2..@fluentui/react-aria_v9.2.3)
+
+### Patches
+
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.2.2](https://github.com/microsoft/fluentui/tree/@fluentui/react-aria_v9.2.2)
+
+Thu, 13 Oct 2022 11:03:06 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-aria_v9.2.1..@fluentui/react-aria_v9.2.2)
+
+### Patches
+
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.2.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-aria_v9.2.1)
+
+Mon, 03 Oct 2022 22:24:33 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-aria_v9.2.0..@fluentui/react-aria_v9.2.1)
+
+### Patches
+
+- chore: user defined tabIndex should prevail aria-button defined ([PR #24962](https://github.com/microsoft/fluentui/pull/24962) by bernardo.sunderhus@gmail.com)
+
+## [9.2.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-aria_v9.2.0)
+
+Thu, 15 Sep 2022 09:49:48 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-aria_v9.1.0..@fluentui/react-aria_v9.2.0)
+
+### Minor changes
+
+- feat: add helper types to assist DOM element handling ([PR #24722](https://github.com/microsoft/fluentui/pull/24722) by bernardo.sunderhus@gmail.com)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
+### Patches
+
+- docs(react-aria): re-generate api.md ([PR #23369](https://github.com/microsoft/fluentui/pull/23369) by martinhochel@microsoft.com)
+- chore(react-aria): improve internal typings ([PR #24742](https://github.com/microsoft/fluentui/pull/24742) by bernardo.sunderhus@gmail.com)
+- feat: upgrade typings on useARIAButtonProps to be more specific ([PR #24177](https://github.com/microsoft/fluentui/pull/24177) by bernardo.sunderhus@gmail.com)
+
## [9.1.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-aria_v9.1.0)
Wed, 03 Aug 2022 16:03:37 GMT
diff --git a/packages/react-components/react-aria/README.md b/packages/react-components/react-aria/README.md
index 33d16bcccd4584..26a4819802e1a3 100644
--- a/packages/react-components/react-aria/README.md
+++ b/packages/react-components/react-aria/README.md
@@ -1,5 +1,3 @@
# @fluentui/react-aria
-**React Aria components for [Fluent UI React](https://developer.microsoft.com/en-us/fluentui)**
-
-These are not production-ready components and **should never be used in product**. This space is useful for testing new components whose APIs might change before final release.
+**React Aria components for [Fluent UI React](https://react.fluentui.dev)**
diff --git a/packages/react-components/react-aria/Spec.md b/packages/react-components/react-aria/docs/Spec.md
similarity index 100%
rename from packages/react-components/react-aria/Spec.md
rename to packages/react-components/react-aria/docs/Spec.md
diff --git a/packages/react-components/react-aria/etc/react-aria.api.md b/packages/react-components/react-aria/etc/react-aria.api.md
index c9f136db5c0509..9450ba46c1e89e 100644
--- a/packages/react-components/react-aria/etc/react-aria.api.md
+++ b/packages/react-components/react-aria/etc/react-aria.api.md
@@ -9,6 +9,12 @@ import * as React_2 from 'react';
import type { ResolveShorthandFunction } from '@fluentui/react-utilities';
import type { Slot } from '@fluentui/react-utilities';
+// @internal (undocumented)
+export type ARIAButtonElement = HTMLButtonElement | (AlternateAs extends 'a' ? HTMLAnchorElement : never) | (AlternateAs extends 'div' ? HTMLDivElement : never);
+
+// @internal (undocumented)
+export type ARIAButtonElementIntersection = UnionToIntersection>;
+
// @public
export type ARIAButtonProps = React_2.PropsWithRef & {
disabled?: boolean;
diff --git a/packages/react-components/react-aria/package.json b/packages/react-components/react-aria/package.json
index 4b18fb4445a02c..bb0e86d0c96c3a 100644
--- a/packages/react-components/react-aria/package.json
+++ b/packages/react-components/react-aria/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/react-aria",
- "version": "9.1.0",
+ "version": "9.2.3",
"description": "React helper to ensure ARIA",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -31,14 +31,14 @@
},
"dependencies": {
"@fluentui/keyboard-keys": "^9.0.0",
- "@fluentui/react-utilities": "^9.0.2",
+ "@fluentui/react-utilities": "^9.1.2",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0"
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0"
},
"beachball": {
"disallowedChangeTypes": [
diff --git a/packages/react-components/react-aria/src/hooks/useARIAButton/index.ts b/packages/react-components/react-aria/src/button/index.ts
similarity index 100%
rename from packages/react-components/react-aria/src/hooks/useARIAButton/index.ts
rename to packages/react-components/react-aria/src/button/index.ts
diff --git a/packages/react-components/react-aria/src/button/types.ts b/packages/react-components/react-aria/src/button/types.ts
new file mode 100644
index 00000000000000..541be29d845f9c
--- /dev/null
+++ b/packages/react-components/react-aria/src/button/types.ts
@@ -0,0 +1,72 @@
+import type { ExtractSlotProps, Slot } from '@fluentui/react-utilities';
+import * as React from 'react';
+
+type UnionToIntersection = (U extends unknown ? (x: U) => U : never) extends (x: infer I) => U ? I : never;
+
+export type ARIAButtonType = 'button' | 'a' | 'div';
+
+/**
+ * @internal
+ */
+export type ARIAButtonElement =
+ | HTMLButtonElement
+ | (AlternateAs extends 'a' ? HTMLAnchorElement : never)
+ | (AlternateAs extends 'div' ? HTMLDivElement : never);
+
+/**
+ * @internal
+ */
+export type ARIAButtonElementIntersection = UnionToIntersection<
+ ARIAButtonElement
+>;
+
+/**
+ * Props expected by `useARIAButtonProps` hooks
+ */
+export type ARIAButtonProps = React.PropsWithRef<
+ JSX.IntrinsicElements[Type]
+> & {
+ disabled?: boolean;
+ /**
+ * When set, allows the button to be focusable even when it has been disabled.
+ * This is used in scenarios where it is important to keep a consistent tab order
+ * for screen reader and keyboard users. The primary example of this
+ * pattern is when the disabled button is in a menu or a commandbar and is seldom used for standalone buttons.
+ *
+ * @default false
+ */
+ disabledFocusable?: boolean;
+};
+
+export type ARIAButtonSlotProps = ExtractSlotProps<
+ Slot<'button', AlternateAs>
+> &
+ Pick, 'disabled' | 'disabledFocusable'>;
+
+/**
+ * @internal
+ * Props that will be modified internally by `useARIAButtonProps` by each case.
+ * This typing is to ensure a well specified return value for `useARIAbButtonProps`
+ */
+export type ARIAButtonAlteredProps =
+ | (Type extends 'button'
+ ? Pick<
+ JSX.IntrinsicElements['button'],
+ 'onClick' | 'onKeyDown' | 'onKeyUp' | 'disabled' | 'aria-disabled' | 'tabIndex'
+ >
+ : never)
+ | (Type extends 'a'
+ ? Pick<
+ JSX.IntrinsicElements['a'],
+ 'onClick' | 'onKeyDown' | 'onKeyUp' | 'aria-disabled' | 'tabIndex' | 'role' | 'href'
+ >
+ : never)
+ | (Type extends 'div'
+ ? Pick
+ : never);
+
+/**
+ * Merge of props provided by the user and props provided internally.
+ */
+export type ARIAButtonResultProps = Props &
+ UnionToIntersection>;
diff --git a/packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButtonProps.test.tsx b/packages/react-components/react-aria/src/button/useARIAButtonProps.test.tsx
similarity index 91%
rename from packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButtonProps.test.tsx
rename to packages/react-components/react-aria/src/button/useARIAButtonProps.test.tsx
index 65c6f0abead13f..e3ca1eb9e51496 100644
--- a/packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButtonProps.test.tsx
+++ b/packages/react-components/react-aria/src/button/useARIAButtonProps.test.tsx
@@ -106,7 +106,7 @@ describe('useARIAButton', () => {
it('should be aria-disabled when disabled', () => {
const {
result: { current },
- } = renderHook(() => useARIAButtonProps('a', { disabled: true }));
+ } = renderHook(() => useARIAButtonProps('div', { disabled: true }));
expect(current).not.toHaveProperty('as');
expect(current).not.toHaveProperty('disabledFocusable');
expect(current).toEqual(
@@ -123,7 +123,7 @@ describe('useARIAButton', () => {
it('should be aria-disabled when disabledFocusable but still focusabled', () => {
const {
result: { current },
- } = renderHook(() => useARIAButtonProps('a', { disabledFocusable: true }));
+ } = renderHook(() => useARIAButtonProps('div', { disabledFocusable: true }));
expect(current).not.toHaveProperty('as');
expect(current).not.toHaveProperty('disabledFocusable');
expect(current).toEqual(
@@ -133,7 +133,18 @@ describe('useARIAButton', () => {
}),
);
});
+ it('should keep user defined tabIndex', () => {
+ const {
+ result: { current },
+ } = renderHook(() => useARIAButtonProps('div', { tabIndex: undefined }));
+ expect(current).toEqual(
+ expect.objectContaining({
+ tabIndex: undefined,
+ }),
+ );
+ });
});
+
describe('', () => {
it('should omit href if disabled', () => {
const href = '/';
@@ -153,6 +164,7 @@ describe('useARIAButton', () => {
);
});
});
+
it.each(['button', 'div', 'a'] as const)('should not be possible to click %p when aria-disabled is true', type => {
const handleClick = jest.fn();
const { getByRole } = render( );
diff --git a/packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButtonProps.ts b/packages/react-components/react-aria/src/button/useARIAButtonProps.ts
similarity index 85%
rename from packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButtonProps.ts
rename to packages/react-components/react-aria/src/button/useARIAButtonProps.ts
index 6dead00dfdddd4..e4c95e6af26405 100644
--- a/packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButtonProps.ts
+++ b/packages/react-components/react-aria/src/button/useARIAButtonProps.ts
@@ -1,6 +1,7 @@
import { Enter, Space } from '@fluentui/keyboard-keys';
import { useEventCallback } from '@fluentui/react-utilities';
-import type { ARIAButtonProps, ARIAButtonResultProps, ARIAButtonType } from './types';
+import * as React from 'react';
+import type { ARIAButtonElementIntersection, ARIAButtonProps, ARIAButtonResultProps, ARIAButtonType } from './types';
/**
* @internal
@@ -33,22 +34,14 @@ export function useARIAButtonProps {
- const {
- disabled,
- tabIndex,
- disabledFocusable = false,
- onClick,
- onKeyDown,
- onKeyUp,
- ['aria-disabled']: ariaDisabled,
- ...rest
- } = props ?? {};
+ const { disabled, disabledFocusable = false, ['aria-disabled']: ariaDisabled, onClick, onKeyDown, onKeyUp, ...rest } =
+ props ?? {};
const normalizedARIADisabled = typeof ariaDisabled === 'string' ? ariaDisabled === 'true' : ariaDisabled;
const isDisabled = disabled || disabledFocusable || normalizedARIADisabled;
- const handleClick: Props['onClick'] = useEventCallback(ev => {
+ const handleClick = useEventCallback((ev: React.MouseEvent) => {
if (isDisabled) {
ev.preventDefault();
ev.stopPropagation();
@@ -57,7 +50,7 @@ export function useARIAButtonProps {
+ const handleKeyDown = useEventCallback((ev: React.KeyboardEvent) => {
onKeyDown?.(ev);
if (ev.isDefaultPrevented()) {
@@ -84,7 +77,7 @@ export function useARIAButtonProps {
+ const handleKeyUp = useEventCallback((ev: React.KeyboardEvent) => {
onKeyUp?.(ev);
if (ev.isDefaultPrevented()) {
@@ -109,7 +102,6 @@ export function useARIAButtonProps than listeners are required even with disabledFocusable
// Since you cannot assure the default behavior of the element
@@ -133,7 +126,6 @@ export function useARIAButtonProps;
if (type === 'a' && isDisabled) {
diff --git a/packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButtonShorthand.test.tsx b/packages/react-components/react-aria/src/button/useARIAButtonShorthand.test.tsx
similarity index 85%
rename from packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButtonShorthand.test.tsx
rename to packages/react-components/react-aria/src/button/useARIAButtonShorthand.test.tsx
index 336e2f1b0bcaf7..65085130363958 100644
--- a/packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButtonShorthand.test.tsx
+++ b/packages/react-components/react-aria/src/button/useARIAButtonShorthand.test.tsx
@@ -6,7 +6,7 @@ describe('useARIAButtonShorthands', () => {
const {
result: { current: buttonShorthand },
} = renderHook(() => useARIAButtonShorthand({ as: 'button' }));
- expect(buttonShorthand.as).toBe('button');
+ expect(buttonShorthand?.as).toBe('button');
const {
result: { current: buttonShorthand2 },
} = renderHook(() => useARIAButtonShorthand({ as: undefined }));
@@ -14,10 +14,10 @@ describe('useARIAButtonShorthands', () => {
const {
result: { current: anchorShorthand },
} = renderHook(() => useARIAButtonShorthand({ as: 'a' }));
- expect(anchorShorthand.as).toBe('a');
+ expect(anchorShorthand?.as).toBe('a');
const {
result: { current: divShorthand },
} = renderHook(() => useARIAButtonShorthand({ as: 'div' }));
- expect(divShorthand.as).toBe('div');
+ expect(divShorthand?.as).toBe('div');
});
});
diff --git a/packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButtonShorthand.ts b/packages/react-components/react-aria/src/button/useARIAButtonShorthand.ts
similarity index 100%
rename from packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButtonShorthand.ts
rename to packages/react-components/react-aria/src/button/useARIAButtonShorthand.ts
diff --git a/packages/react-components/react-aria/src/hooks/useARIAButton/types.ts b/packages/react-components/react-aria/src/hooks/useARIAButton/types.ts
deleted file mode 100644
index f712dcc341a8d0..00000000000000
--- a/packages/react-components/react-aria/src/hooks/useARIAButton/types.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import type { ExtractSlotProps, Slot } from '@fluentui/react-utilities';
-import * as React from 'react';
-
-export type ARIAButtonType = 'button' | 'a' | 'div';
-
-/**
- * Props expected by `useARIAButtonProps` hooks
- */
-export type ARIAButtonProps = React.PropsWithRef<
- JSX.IntrinsicElements[Type]
-> & {
- disabled?: boolean;
- /**
- * When set, allows the button to be focusable even when it has been disabled.
- * This is used in scenarios where it is important to keep a consistent tab order
- * for screen reader and keyboard users. The primary example of this
- * pattern is when the disabled button is in a menu or a commandbar and is seldom used for standalone buttons.
- *
- * @default false
- */
- disabledFocusable?: boolean;
-};
-
-export type ARIAButtonSlotProps = ExtractSlotProps<
- Slot<'button', AlternateAs>
-> &
- Pick, 'disabled' | 'disabledFocusable'>;
-
-/**
- * @internal
- * Props that will be modified internally by `useARIAButtonProps` by each case.
- * This typing is to ensure a well specified return value for `useARIAbButtonProps`
- */
-export type ARIAButtonAlteredProps =
- | (Type extends 'button'
- ? Pick<
- JSX.IntrinsicElements['button'],
- 'onClick' | 'onKeyDown' | 'onKeyUp' | 'disabled' | 'aria-disabled' | 'tabIndex'
- >
- : never)
- | (Type extends 'a'
- ? Pick<
- JSX.IntrinsicElements['a'],
- 'onClick' | 'onKeyDown' | 'onKeyUp' | 'aria-disabled' | 'tabIndex' | 'role' | 'href'
- >
- : never)
- | (Type extends 'div'
- ? Pick
- : never);
-
-type UnionToIntersection = (U extends unknown ? (x: U) => U : never) extends (x: infer I) => U ? I : never;
-
-/**
- * Merge of props provided by the user and props provided internally.
- */
-export type ARIAButtonResultProps = Props &
- UnionToIntersection>;
diff --git a/packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButton.stories.tsx b/packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButton.stories.tsx
deleted file mode 100644
index 339ed0dcc7891a..00000000000000
--- a/packages/react-components/react-aria/src/hooks/useARIAButton/useARIAButton.stories.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import * as React from 'react';
-import { useARIAButtonShorthand } from '../useARIAButton';
-import type { ARIAButtonSlotProps } from '../useARIAButton';
-import { getSlots } from '@fluentui/react-components';
-import type { ComponentState, Slot } from '@fluentui/react-components';
-
-type Slots = {
- root: Slot<'div'>;
- button: Slot;
-};
-
-interface State extends ComponentState {}
-
-interface DefaultArgs {
- onClick: (ev: React.MouseEvent) => void;
-}
-
-export const Default = (args: DefaultArgs) => {
- const state: State = {
- components: { root: 'div', button: 'button' },
- root: {},
- button: {
- ...useARIAButtonShorthand({ as: 'button', onClick: args.onClick }, { required: true }),
- children: React.Fragment,
- },
- };
- const { slots, slotProps } = getSlots(state);
- return (
-
- this is a button
-
- );
-};
-
-export const Anchor = (args: DefaultArgs) => {
- type AnchorSlots = {
- root: ARIAButtonSlotProps;
- };
- const props = useARIAButtonShorthand(
- {
- as: 'a',
- href: '/',
- onClick: ev => {
- ev.preventDefault();
- args.onClick(ev);
- },
- },
- { required: true },
- );
- const { slots, slotProps } = getSlots({
- components: { root: 'a' },
- root: props,
- });
- return this is an anchor ;
-};
-
-export default {
- title: 'useARIAButton',
- argTypes: { onClick: { action: 'clicked' } },
-};
diff --git a/packages/react-components/react-aria/src/index.ts b/packages/react-components/react-aria/src/index.ts
index 31983e05e85be0..86f3713ac66f82 100644
--- a/packages/react-components/react-aria/src/index.ts
+++ b/packages/react-components/react-aria/src/index.ts
@@ -1,7 +1,9 @@
-export { useARIAButtonShorthand, useARIAButtonProps } from './hooks/useARIAButton/index';
+export { useARIAButtonShorthand, useARIAButtonProps } from './button/index';
export type {
ARIAButtonSlotProps,
ARIAButtonProps,
ARIAButtonResultProps,
ARIAButtonType,
-} from './hooks/useARIAButton/index';
+ ARIAButtonElement,
+ ARIAButtonElementIntersection,
+} from './button/index';
diff --git a/packages/react-components/react-aria/stories/useARIAButton/index.stories.tsx b/packages/react-components/react-aria/stories/useARIAButton/index.stories.tsx
new file mode 100644
index 00000000000000..1b5cc18a8adf71
--- /dev/null
+++ b/packages/react-components/react-aria/stories/useARIAButton/index.stories.tsx
@@ -0,0 +1,60 @@
+import * as React from 'react';
+import { useARIAButtonShorthand } from '../../src/button';
+import type { ARIAButtonSlotProps } from '../../src/button';
+import { getSlots } from '@fluentui/react-components';
+import type { ComponentState, Slot } from '@fluentui/react-components';
+
+type Slots = {
+ root: Slot<'div'>;
+ button: Slot;
+};
+
+interface State extends ComponentState {}
+
+interface DefaultArgs {
+ onClick: (ev: React.MouseEvent) => void;
+}
+
+export const Default = (args: DefaultArgs) => {
+ const state: State = {
+ components: { root: 'div', button: 'button' },
+ root: {},
+ button: {
+ ...useARIAButtonShorthand({ as: 'button', onClick: args.onClick }, { required: true }),
+ children: React.Fragment,
+ },
+ };
+ const { slots, slotProps } = getSlots(state);
+ return (
+
+ this is a button
+
+ );
+};
+
+export const Anchor = (args: DefaultArgs) => {
+ type AnchorSlots = {
+ root: ARIAButtonSlotProps;
+ };
+ const props = useARIAButtonShorthand(
+ {
+ as: 'a',
+ href: '/',
+ onClick: ev => {
+ ev.preventDefault();
+ args.onClick(ev);
+ },
+ },
+ { required: true },
+ );
+ const { slots, slotProps } = getSlots({
+ components: { root: 'a' },
+ root: props,
+ });
+ return this is an anchor ;
+};
+
+export default {
+ title: 'useARIAButton',
+ argTypes: { onClick: { action: 'clicked' } },
+};
diff --git a/packages/react-components/react-aria/tsconfig.spec.json b/packages/react-components/react-aria/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/react-aria/tsconfig.spec.json
+++ b/packages/react-components/react-aria/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/react-list/.babelrc.json b/packages/react-components/react-avatar-context/.babelrc.json
similarity index 100%
rename from packages/react-components/react-list/.babelrc.json
rename to packages/react-components/react-avatar-context/.babelrc.json
diff --git a/packages/react-components/react-list/.eslintrc.json b/packages/react-components/react-avatar-context/.eslintrc.json
similarity index 100%
rename from packages/react-components/react-list/.eslintrc.json
rename to packages/react-components/react-avatar-context/.eslintrc.json
diff --git a/packages/react-components/react-list/.npmignore b/packages/react-components/react-avatar-context/.npmignore
similarity index 100%
rename from packages/react-components/react-list/.npmignore
rename to packages/react-components/react-avatar-context/.npmignore
diff --git a/packages/react-components/react-avatar-context/LICENSE b/packages/react-components/react-avatar-context/LICENSE
new file mode 100644
index 00000000000000..8ffd46fad3eca9
--- /dev/null
+++ b/packages/react-components/react-avatar-context/LICENSE
@@ -0,0 +1,15 @@
+@fluentui/react-avatar-context
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Note: Usage of the fonts and icons referenced in Fluent UI React is subject to the terms listed at https://aka.ms/fluentui-assets-license
diff --git a/packages/react-components/react-avatar-context/README.md b/packages/react-components/react-avatar-context/README.md
new file mode 100644
index 00000000000000..c3ad62ac1a187e
--- /dev/null
+++ b/packages/react-components/react-avatar-context/README.md
@@ -0,0 +1,5 @@
+# @fluentui/react-avatar-context
+
+**React Avatar Context components for [Fluent UI React](https://react.fluentui.dev/)**
+
+These are not production-ready components and **should never be used in product**. This space is useful for testing new components whose APIs might change before final release.
diff --git a/packages/react-components/react-avatar-context/Spec.md b/packages/react-components/react-avatar-context/Spec.md
new file mode 100644
index 00000000000000..1cd591a26b2fdc
--- /dev/null
+++ b/packages/react-components/react-avatar-context/Spec.md
@@ -0,0 +1,63 @@
+# @fluentui/react-avatar-context Spec
+
+## Background
+
+_Description and use cases of this component_
+
+## Prior Art
+
+_Include background research done for this component_
+
+- _Link to Open UI research_
+- _Link to comparison of v7 and v0_
+- _Link to GitHub epic issue for the converged component_
+
+## Sample Code
+
+_Provide some representative example code that uses the proposed API for the component_
+
+## Variants
+
+_Describe visual or functional variants of this control, if applicable. For example, a slider could have a 2D variant._
+
+## API
+
+_List the **Props** and **Slots** proposed for the component. Ideally this would just be a link to the component's `.types.ts` file_
+
+## Structure
+
+- _**Public**_
+- _**Internal**_
+- _**DOM** - how the component will be rendered as HTML elements_
+
+## Migration
+
+_Describe what will need to be done to upgrade from the existing implementations:_
+
+- _Migration from v8_
+- _Migration from v0_
+
+## Behaviors
+
+_Explain how the component will behave in use, including:_
+
+- _Component States_
+- _Interaction_
+ - _Keyboard_
+ - _Cursor_
+ - _Touch_
+ - _Screen readers_
+
+## Accessibility
+
+Base accessibility information is included in the design document. After the spec is filled and review, outcomes from it need to be communicated to design and incorporated in the design document.
+
+- Decide whether to use **native element** or folow **ARIA** and provide reasons
+- Identify the **[ARIA](https://www.w3.org/TR/wai-aria-practices-1.2/) pattern** and, if the component is listed there, follow its specification as possible.
+- Identify accessibility **variants**, the `role` ([ARIA roles](https://www.w3.org/TR/wai-aria-1.1/#role_definitions)) of the component, its `slots` and `aria-*` props.
+- Describe the **keyboard navigation**: Tab Oder and Arrow Key Navigation. Describe any other keyboard **shortcuts** used
+- Specify texts for **state change announcements** - [ARIA live regions
+ ](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions) (number of available items in dropdown, error messages, confirmations, ...)
+- Identify UI parts that appear on **hover or focus** and specify keyboard and screen reader interaction with them
+- List cases when **focus** needs to be **trapped** in sections of the UI (for dialogs and popups or for hierarchical navigation)
+- List cases when **focus** needs to be **moved programatically** (if parts of the UI are appearing/disappearing or other cases)
diff --git a/packages/react-components/react-avatar-context/config/api-extractor.json b/packages/react-components/react-avatar-context/config/api-extractor.json
new file mode 100644
index 00000000000000..637d9797ae3e6e
--- /dev/null
+++ b/packages/react-components/react-avatar-context/config/api-extractor.json
@@ -0,0 +1,9 @@
+{
+ "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
+ "extends": "@fluentui/scripts/api-extractor/api-extractor.common.v-next.json",
+ "dtsRollup": {
+ "enabled": true,
+ "untrimmedFilePath": "",
+ "publicTrimmedFilePath": "/dist/index.d.ts"
+ }
+}
diff --git a/packages/react-components/react-list/config/tests.js b/packages/react-components/react-avatar-context/config/tests.js
similarity index 100%
rename from packages/react-components/react-list/config/tests.js
rename to packages/react-components/react-avatar-context/config/tests.js
diff --git a/packages/react-components/react-avatar-context/etc/react-avatar-context.api.md b/packages/react-components/react-avatar-context/etc/react-avatar-context.api.md
new file mode 100644
index 00000000000000..30d00c02ec77fb
--- /dev/null
+++ b/packages/react-components/react-avatar-context/etc/react-avatar-context.api.md
@@ -0,0 +1,9 @@
+## API Report File for "@fluentui/react-avatar-context"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+
+// (No @packageDocumentation comment for this package)
+
+```
diff --git a/packages/react-components/react-avatar-context/jest.config.js b/packages/react-components/react-avatar-context/jest.config.js
new file mode 100644
index 00000000000000..fd11db2464c558
--- /dev/null
+++ b/packages/react-components/react-avatar-context/jest.config.js
@@ -0,0 +1,21 @@
+// @ts-check
+
+/**
+ * @type {import('@jest/types').Config.InitialOptions}
+ */
+module.exports = {
+ displayName: 'react-avatar-context',
+ preset: '../../../jest.preset.js',
+ globals: {
+ 'ts-jest': {
+ tsConfig: '/tsconfig.spec.json',
+ diagnostics: false,
+ },
+ },
+ transform: {
+ '^.+\\.tsx?$': 'ts-jest',
+ },
+ coverageDirectory: './coverage',
+ setupFilesAfterEnv: ['./config/tests.js'],
+ snapshotSerializers: ['@griffel/jest-serializer'],
+};
diff --git a/packages/react-components/react-list/just.config.ts b/packages/react-components/react-avatar-context/just.config.ts
similarity index 100%
rename from packages/react-components/react-list/just.config.ts
rename to packages/react-components/react-avatar-context/just.config.ts
diff --git a/packages/react-components/react-avatar-context/package.json b/packages/react-components/react-avatar-context/package.json
new file mode 100644
index 00000000000000..f84ceefe1114d7
--- /dev/null
+++ b/packages/react-components/react-avatar-context/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "@fluentui/react-avatar-context",
+ "version": "9.0.0-alpha.0",
+ "private": true,
+ "description": "Context to override avatar props",
+ "main": "lib-commonjs/index.js",
+ "module": "lib/index.js",
+ "typings": "dist/index.d.ts",
+ "sideEffects": false,
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/microsoft/fluentui"
+ },
+ "license": "MIT",
+ "scripts": {
+ "build": "just-scripts build",
+ "clean": "just-scripts clean",
+ "code-style": "just-scripts code-style",
+ "just": "just-scripts",
+ "lint": "just-scripts lint",
+ "test": "jest --passWithNoTests",
+ "generate-api": "tsc -p ./tsconfig.lib.json --emitDeclarationOnly && just-scripts api-extractor",
+ "type-check": "tsc -b tsconfig.json"
+ },
+ "devDependencies": {
+ "@fluentui/eslint-plugin": "*",
+ "@fluentui/react-conformance": "*",
+ "@fluentui/react-conformance-griffel": "9.0.0-beta.16",
+ "@fluentui/scripts": "^1.0.0"
+ },
+ "dependencies": {
+ "@fluentui/react-theme": "^9.1.1",
+ "@fluentui/react-utilities": "^9.1.2",
+ "@griffel/react": "^1.4.1",
+ "tslib": "^2.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0"
+ },
+ "beachball": {
+ "disallowedChangeTypes": [
+ "major",
+ "minor",
+ "patch"
+ ]
+ }
+}
diff --git a/packages/react-components/react-list/src/index.ts b/packages/react-components/react-avatar-context/src/index.ts
similarity index 100%
rename from packages/react-components/react-list/src/index.ts
rename to packages/react-components/react-avatar-context/src/index.ts
diff --git a/packages/react-components/react-list/tsconfig.json b/packages/react-components/react-avatar-context/tsconfig.json
similarity index 100%
rename from packages/react-components/react-list/tsconfig.json
rename to packages/react-components/react-avatar-context/tsconfig.json
diff --git a/packages/react-components/react-avatar-context/tsconfig.lib.json b/packages/react-components/react-avatar-context/tsconfig.lib.json
new file mode 100644
index 00000000000000..b2da24eff1b32f
--- /dev/null
+++ b/packages/react-components/react-avatar-context/tsconfig.lib.json
@@ -0,0 +1,14 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "noEmit": false,
+ "lib": ["ES2019", "dom"],
+ "declaration": true,
+ "declarationDir": "../../../dist/out-tsc/types",
+ "outDir": "../../../dist/out-tsc",
+ "inlineSources": true,
+ "types": ["static-assets", "environment"]
+ },
+ "exclude": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx"],
+ "include": ["./src/**/*.ts", "./src/**/*.tsx"]
+}
diff --git a/packages/react-components/react-list/tsconfig.spec.json b/packages/react-components/react-avatar-context/tsconfig.spec.json
similarity index 100%
rename from packages/react-components/react-list/tsconfig.spec.json
rename to packages/react-components/react-avatar-context/tsconfig.spec.json
diff --git a/packages/react-components/react-avatar/CHANGELOG.json b/packages/react-components/react-avatar/CHANGELOG.json
index 7634a06a2f73ba..2ef8216c0d97a0 100644
--- a/packages/react-components/react-avatar/CHANGELOG.json
+++ b/packages/react-components/react-avatar/CHANGELOG.json
@@ -1,6 +1,443 @@
{
"name": "@fluentui/react-avatar",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 00:35:28 GMT",
+ "tag": "@fluentui/react-avatar_v9.2.4",
+ "version": "9.2.4",
+ "comments": {
+ "patch": [
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "28364be921fa9e04eb472a069416b61b30da8652",
+ "comment": "fix: Add undefined option to overflowItems in partitionAvatarGroupItems."
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-badge to v9.0.10",
+ "commit": "eef12b9ae58b64ff68576dc2d865b601e46c85b9"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:58 GMT",
+ "tag": "@fluentui/react-avatar_v9.2.3",
+ "version": "9.2.3",
+ "comments": {
+ "patch": [
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-badge to v9.0.9",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.5",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-popover to v9.2.1",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-shared-contexts to v9.0.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-tabster to v9.2.0",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-theme to v9.1.1",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-tooltip to v9.0.9",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 12:56:30 GMT",
+ "tag": "@fluentui/react-avatar_v9.2.2",
+ "version": "9.2.2",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-popover to v9.2.0",
+ "commit": "77301c97c0539b9ebf891642eb0a077d1aeae9a6"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:43 GMT",
+ "tag": "@fluentui/react-avatar_v9.2.1",
+ "version": "9.2.1",
+ "comments": {
+ "patch": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-badge to v9.0.8",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.4",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-popover to v9.1.3",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-tabster to v9.1.3",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-tooltip to v9.0.8",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 22:24:34 GMT",
+ "tag": "@fluentui/react-avatar_v9.2.0",
+ "version": "9.2.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "3bce1e54d85b7bd4255aba62b2b0afa020097d4e",
+ "comment": "fix: Make AvatarGroupPopover's focus indicator the same for all layouts."
+ }
+ ],
+ "minor": [
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "9357de4af136dfb5e5ed37b68318024235aa4ba3",
+ "comment": "feat: Implement avatar context for slot overrides"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "1dcb695eb7e57a1128156049e08729206cc790ae",
+ "comment": "feat: Avatar's aria label includes 'active' or 'inactive' when using the active prop"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-badge to v9.0.7",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-popover to v9.1.2",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-tabster to v9.1.2",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-tooltip to v9.0.7",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ }
+ ],
+ "none": [
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "1333dab7a897e846eb70a493339cd13d1a095cb2",
+ "comment": "chore: Migrate react-avatar to use new build"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/react-avatar_v9.1.1",
+ "version": "9.1.1",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-badge to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-popover to v9.1.1",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-tooltip to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:49 GMT",
+ "tag": "@fluentui/react-avatar_v9.1.0",
+ "version": "9.1.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "5baea110a12d6c161c36b19b5b6768eeaa8370de",
+ "comment": "chore: Change content to render as ul and list item to render as li."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "abc61d6bf47190f96b5e32ed3b7df4b77614caaf",
+ "comment": "chore: Cleaning up use of AvatarGroup context."
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "e598325b985cad3e5057f00893e0176416edd292",
+ "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "4de0899dd07982aabdc611b1837bf9acfca44efc",
+ "comment": "fix: Making PopoverSurface focusable, moving Overflow aria-label to PopoverSurface, and moving content styles to PopoverSurface."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "a66448342c1f3e6a6911404486aef904529988c4",
+ "comment": "fix: Set aria-hidden to AvatarGroupItem's label."
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "0137f992b99b3b8ec927be8f7aef751d27cd5830",
+ "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "1542e766427a7f0b1ee122d507b7f50ebcb51a3c",
+ "comment": "chore: Update tests and add e2e tests."
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "fix: update color tokens"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "a606fbedcf7d618d1a48706a5e15c26c4cd85ba6",
+ "comment": "chore: fix no-context-default-value lint violations for cxe"
+ }
+ ],
+ "none": [
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "c5249ee380c5e17651b5122a716fcf5e4c477ad1",
+ "comment": "docs: Updating AvatarGroup's migration guide."
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "ab54d44126b26316d662551bbdd93bf5b044b022",
+ "comment": "docs: Update spec to match implementation, add best practices, and update README."
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "docs: re-generate api.md files"
+ }
+ ],
+ "minor": [
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "66762e1ca870a21db46b72c9b0848c5b107b8e09",
+ "comment": "feat: Adding functionality to AvatarGroupOverflow and updating AvatarGroup to use AvatarGroupOverflow."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "84e2b1a8b1e8d2e9008297b6c35c76231ae3a31c",
+ "comment": "chore: Renaming AvatarGroupOverflow to AvatarGroupPopover."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "27a3480f5361aa5d99f8978817d8395d9037e3b7",
+ "comment": "feat: Add pie layout implementation."
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-badge to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.3",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-popover to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-shared-contexts to v9.0.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-tabster to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-tooltip to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-avatar",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:37 GMT",
"tag": "@fluentui/react-avatar_v9.0.4",
diff --git a/packages/react-components/react-avatar/CHANGELOG.md b/packages/react-components/react-avatar/CHANGELOG.md
index d8db59de257719..1d0aca0e0bfc97 100644
--- a/packages/react-components/react-avatar/CHANGELOG.md
+++ b/packages/react-components/react-avatar/CHANGELOG.md
@@ -1,9 +1,126 @@
# Change Log - @fluentui/react-avatar
-This log was last generated on Wed, 03 Aug 2022 16:03:37 GMT and should not be manually modified.
+This log was last generated on Tue, 25 Oct 2022 00:35:28 GMT and should not be manually modified.
+## [9.2.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-avatar_v9.2.4)
+
+Tue, 25 Oct 2022 00:35:28 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-avatar_v9.2.3..@fluentui/react-avatar_v9.2.4)
+
+### Patches
+
+- fix: Add undefined option to overflowItems in partitionAvatarGroupItems. ([PR #25310](https://github.com/microsoft/fluentui/pull/25310) by esteban.230@hotmail.com)
+- Bump @fluentui/react-badge to v9.0.10 ([PR #25363](https://github.com/microsoft/fluentui/pull/25363) by beachball)
+
+## [9.2.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-avatar_v9.2.3)
+
+Thu, 20 Oct 2022 08:39:58 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-avatar_v9.2.2..@fluentui/react-avatar_v9.2.3)
+
+### Patches
+
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- Bump @fluentui/react-badge to v9.0.9 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-context-selector to v9.0.5 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-popover to v9.2.1 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-shared-contexts to v9.0.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-tabster to v9.2.0 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-theme to v9.1.1 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-tooltip to v9.0.9 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.2.2](https://github.com/microsoft/fluentui/tree/@fluentui/react-avatar_v9.2.2)
+
+Thu, 13 Oct 2022 12:56:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-avatar_v9.2.1..@fluentui/react-avatar_v9.2.2)
+
+### Patches
+
+- Bump @fluentui/react-popover to v9.2.0 ([PR #25119](https://github.com/microsoft/fluentui/pull/25119) by beachball)
+
+## [9.2.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-avatar_v9.2.1)
+
+Thu, 13 Oct 2022 11:02:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-avatar_v9.2.0..@fluentui/react-avatar_v9.2.1)
+
+### Patches
+
+- chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- Bump @fluentui/react-badge to v9.0.8 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-context-selector to v9.0.4 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-popover to v9.1.3 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-tabster to v9.1.3 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-tooltip to v9.0.8 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.2.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-avatar_v9.2.0)
+
+Mon, 03 Oct 2022 22:24:34 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-avatar_v9.1.1..@fluentui/react-avatar_v9.2.0)
+
+### Minor changes
+
+- feat: Implement avatar context for slot overrides ([PR #24807](https://github.com/microsoft/fluentui/pull/24807) by lingfangao@hotmail.com)
+- feat: Avatar's aria label includes 'active' or 'inactive' when using the active prop ([PR #24901](https://github.com/microsoft/fluentui/pull/24901) by behowell@microsoft.com)
+- Bump @fluentui/react-badge to v9.0.7 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+- Bump @fluentui/react-popover to v9.1.2 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+- Bump @fluentui/react-tabster to v9.1.2 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+- Bump @fluentui/react-tooltip to v9.0.7 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+
+### Patches
+
+- fix: Make AvatarGroupPopover's focus indicator the same for all layouts. ([PR #25006](https://github.com/microsoft/fluentui/pull/25006) by esteban.230@hotmail.com)
+
+## [9.1.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-avatar_v9.1.1)
+
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-avatar_v9.1.0..@fluentui/react-avatar_v9.1.1)
+
+### Patches
+
+- Bump @fluentui/react-badge to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-popover to v9.1.1 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-tooltip to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.1.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-avatar_v9.1.0)
+
+Thu, 15 Sep 2022 09:49:49 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-avatar_v9.0.4..@fluentui/react-avatar_v9.1.0)
+
+### Minor changes
+
+- feat: Adding functionality to AvatarGroupOverflow and updating AvatarGroup to use AvatarGroupOverflow. ([PR #24115](https://github.com/microsoft/fluentui/pull/24115) by esteban.230@hotmail.com)
+- chore: Renaming AvatarGroupOverflow to AvatarGroupPopover. ([PR #24338](https://github.com/microsoft/fluentui/pull/24338) by esteban.230@hotmail.com)
+- feat: Add pie layout implementation. ([PR #24241](https://github.com/microsoft/fluentui/pull/24241) by esteban.230@hotmail.com)
+- Bump @fluentui/react-badge to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-context-selector to v9.0.3 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-popover to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-shared-contexts to v9.0.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-tabster to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-tooltip to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
+### Patches
+
+- chore: Change content to render as ul and list item to render as li. ([PR #24347](https://github.com/microsoft/fluentui/pull/24347) by esteban.230@hotmail.com)
+- chore: Cleaning up use of AvatarGroup context. ([PR #24459](https://github.com/microsoft/fluentui/pull/24459) by esteban.230@hotmail.com)
+- refactor: Replace useMergedEventCallbacks utility with mergeCallbacks ([PR #24152](https://github.com/microsoft/fluentui/pull/24152) by behowell@microsoft.com)
+- fix: Making PopoverSurface focusable, moving Overflow aria-label to PopoverSurface, and moving content styles to PopoverSurface. ([PR #24417](https://github.com/microsoft/fluentui/pull/24417) by esteban.230@hotmail.com)
+- fix: Set aria-hidden to AvatarGroupItem's label. ([PR #24359](https://github.com/microsoft/fluentui/pull/24359) by esteban.230@hotmail.com)
+- chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted ([PR #24611](https://github.com/microsoft/fluentui/pull/24611) by miroslav.stastny@microsoft.com)
+- chore: Update tests and add e2e tests. ([PR #24348](https://github.com/microsoft/fluentui/pull/24348) by esteban.230@hotmail.com)
+- fix: update color tokens ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+- chore: fix no-context-default-value lint violations for cxe ([PR #24277](https://github.com/microsoft/fluentui/pull/24277) by lingfangao@hotmail.com)
+
## [9.0.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-avatar_v9.0.4)
Wed, 03 Aug 2022 16:03:37 GMT
diff --git a/packages/react-components/react-avatar/config/api-extractor.json b/packages/react-components/react-avatar/config/api-extractor.json
index eee94ff6de902d..637d9797ae3e6e 100644
--- a/packages/react-components/react-avatar/config/api-extractor.json
+++ b/packages/react-components/react-avatar/config/api-extractor.json
@@ -1,5 +1,9 @@
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
"extends": "@fluentui/scripts/api-extractor/api-extractor.common.v-next.json",
- "mainEntryPointFilePath": "/dist/types/index.d.ts"
+ "dtsRollup": {
+ "enabled": true,
+ "untrimmedFilePath": "",
+ "publicTrimmedFilePath": "/dist/index.d.ts"
+ }
}
diff --git a/packages/react-components/react-avatar/config/api-extractor.local.json b/packages/react-components/react-avatar/config/api-extractor.local.json
deleted file mode 100644
index 69e764bce3a592..00000000000000
--- a/packages/react-components/react-avatar/config/api-extractor.local.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
- "extends": "./api-extractor.json",
- "mainEntryPointFilePath": "/dist/types/packages/react-components//src/index.d.ts"
-}
diff --git a/packages/react-components/react-avatar/etc/react-avatar.api.md b/packages/react-components/react-avatar/etc/react-avatar.api.md
index 5779770c5074c2..6807ec3426c707 100644
--- a/packages/react-components/react-avatar/etc/react-avatar.api.md
+++ b/packages/react-components/react-avatar/etc/react-avatar.api.md
@@ -27,6 +27,15 @@ export const Avatar: ForwardRefComponent;
// @public (undocumented)
export const avatarClassNames: SlotClassNames;
+// @internal (undocumented)
+export const AvatarContextProvider: React_2.Provider;
+
+// @internal (undocumented)
+export interface AvatarContextValue {
+ // (undocumented)
+ size?: AvatarSizes;
+}
+
// @public
export const AvatarGroup: ForwardRefComponent;
@@ -89,7 +98,7 @@ export type AvatarGroupPopoverSlots = {
};
// @public
-export type AvatarGroupPopoverState = ComponentState & Required> & {
+export type AvatarGroupPopoverState = ComponentState & Required> & {
popoverOpen: boolean;
layout: AvatarGroupProps['layout'];
size: AvatarSizes;
@@ -141,6 +150,7 @@ export type AvatarSlots = {
// @public
export type AvatarState = ComponentState & Required> & {
color: NonNullable>;
+ activeAriaLabelElement?: JSX.Element;
};
// @internal
@@ -149,12 +159,15 @@ export function getInitials(displayName: string | undefined | null, isRtl: boole
firstInitialOnly?: boolean;
}): string;
-// @public
-export const partitionAvatarGroupItems: (options: PartitionAvatarGroupItemsOptions) => {
- inlineItems: T[];
- overflowItems: readonly T[];
+// @public (undocumented)
+export type PartitionAvatarGroupItems = {
+ inlineItems: readonly T[];
+ overflowItems?: readonly T[];
};
+// @public
+export const partitionAvatarGroupItems: (options: PartitionAvatarGroupItemsOptions) => PartitionAvatarGroupItems;
+
// @public (undocumented)
export type PartitionAvatarGroupItemsOptions = {
items: readonly T[];
@@ -177,6 +190,9 @@ export const renderAvatarGroupPopover_unstable: (state: AvatarGroupPopoverState,
// @public (undocumented)
export const useAvatar_unstable: (props: AvatarProps, ref: React_2.Ref) => AvatarState;
+// @internal (undocumented)
+export const useAvatarContext: () => AvatarContextValue;
+
// @public
export const useAvatarGroup_unstable: (props: AvatarGroupProps, ref: React_2.Ref) => AvatarGroupState;
diff --git a/packages/react-components/react-avatar/package.json b/packages/react-components/react-avatar/package.json
index dd73c31d02d04e..74d2bdfe177dc1 100644
--- a/packages/react-components/react-avatar/package.json
+++ b/packages/react-components/react-avatar/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/react-avatar",
- "version": "9.0.4",
+ "version": "9.2.4",
"description": "React components for building Microsoft web experiences.",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -19,39 +19,38 @@
"just": "just-scripts",
"lint": "just-scripts lint",
"start": "yarn storybook",
- "e2e": "yarn cypress run --component",
- "e2e:local": "yarn cypress open --component",
+ "e2e": "cypress run --component",
+ "e2e:local": "cypress open --component",
"test": "jest --passWithNoTests",
- "docs": "api-extractor run --config=config/api-extractor.local.json --local",
- "build:local": "tsc -p ./tsconfig.lib.json --module esnext --emitDeclarationOnly && node ../../../scripts/typescript/normalize-import --output ./dist/types/packages/react-components/react-avatar/src && yarn docs",
"storybook": "start-storybook",
- "type-check": "tsc -b tsconfig.json"
+ "type-check": "tsc -b tsconfig.json",
+ "generate-api": "tsc -p ./tsconfig.lib.json --emitDeclarationOnly && just-scripts api-extractor"
},
"devDependencies": {
"@fluentui/eslint-plugin": "*",
"@fluentui/react-conformance": "*",
- "@fluentui/react-conformance-griffel": "9.0.0-beta.12",
+ "@fluentui/react-conformance-griffel": "9.0.0-beta.16",
"@fluentui/scripts": "^1.0.0",
"es6-weak-map": "^2.0.2"
},
"dependencies": {
- "@fluentui/react-badge": "^9.0.4",
- "@fluentui/react-context-selector": "^9.0.2",
+ "@fluentui/react-badge": "^9.0.10",
+ "@fluentui/react-context-selector": "^9.0.5",
"@fluentui/react-icons": "^2.0.175",
- "@fluentui/react-popover": "^9.0.4",
- "@fluentui/react-shared-contexts": "^9.0.0",
- "@fluentui/react-tabster": "^9.1.0",
- "@fluentui/react-theme": "^9.0.0",
- "@fluentui/react-tooltip": "^9.0.4",
- "@fluentui/react-utilities": "^9.0.2",
- "@griffel/react": "^1.3.0",
+ "@fluentui/react-popover": "^9.2.1",
+ "@fluentui/react-shared-contexts": "^9.0.2",
+ "@fluentui/react-tabster": "^9.2.0",
+ "@fluentui/react-theme": "^9.1.1",
+ "@fluentui/react-tooltip": "^9.0.9",
+ "@fluentui/react-utilities": "^9.1.2",
+ "@griffel/react": "^1.4.1",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0",
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0",
"scheduler": "^0.19.0 || ^0.20.0"
},
"beachball": {
diff --git a/packages/react-components/react-avatar/src/components/Avatar/Avatar.test.tsx b/packages/react-components/react-avatar/src/components/Avatar/Avatar.test.tsx
index 0713f920e01e78..474c44c74226e5 100644
--- a/packages/react-components/react-avatar/src/components/Avatar/Avatar.test.tsx
+++ b/packages/react-components/react-avatar/src/components/Avatar/Avatar.test.tsx
@@ -3,6 +3,7 @@ import { isConformant } from '../../common/isConformant';
import { Avatar } from './Avatar';
import { render, screen } from '@testing-library/react';
import { avatarClassNames } from './useAvatarStyles';
+import { DEFAULT_STRINGS } from './useAvatar';
describe('Avatar', () => {
isConformant({
@@ -175,13 +176,13 @@ describe('Avatar', () => {
expect(iconRef.current?.getAttribute('aria-hidden')).toBeTruthy();
});
- it('falls back to initials for aria-labelledby', () => {
+ it('sets aria-labelledby to initials if no name is provided', () => {
render( );
expect(screen.getByRole('img').getAttribute('aria-labelledby')).toBe('initials-id');
});
- it('falls back to string initials for aria-labelledby', () => {
+ it('sets aria-labelledby to initials with a generated ID, if no name is provided', () => {
render( );
const intialsId = screen.getByText('ABC').id;
@@ -189,11 +190,67 @@ describe('Avatar', () => {
expect(screen.getByRole('img').getAttribute('aria-labelledby')).toBe(intialsId);
});
- it('includes badge in aria-labelledby', () => {
+ it('sets aria-labelledby to the name + badge', () => {
const name = 'First Last';
render( );
- expect(screen.getAllByRole('img')[0].getAttribute('aria-label')).toBe(name);
- expect(screen.getAllByRole('img')[0].getAttribute('aria-labelledby')).toBe('root-id badge-id');
+ const root = screen.getAllByRole('img')[0];
+ expect(root.getAttribute('aria-label')).toBe(name);
+ expect(root.getAttribute('aria-labelledby')).toBe('root-id badge-id');
+ });
+
+ it('sets aria-label to the name + activeState when active="active"', () => {
+ const name = 'First Last';
+ render( );
+
+ const root = screen.getAllByRole('img')[0];
+ expect(root.getAttribute('aria-label')).toBe(`${name} ${DEFAULT_STRINGS.active}`);
+ });
+
+ it('sets aria-label to the name + activeState when active="inactive"', () => {
+ const name = 'First Last';
+ render( );
+
+ const root = screen.getAllByRole('img')[0];
+ expect(root.getAttribute('aria-label')).toBe(`${name} ${DEFAULT_STRINGS.inactive}`);
+ });
+
+ it('sets aria-labelledby to the name + badge + activeState when there is a badge and active state', () => {
+ render( );
+
+ const activeAriaLabelElement = screen.getByText(DEFAULT_STRINGS.active);
+ expect(activeAriaLabelElement.id).toBeTruthy();
+ expect(activeAriaLabelElement.hidden).toBeTruthy();
+
+ const root = screen.getAllByRole('img')[0];
+ expect(root.getAttribute('aria-labelledby')).toBe(`root-id badge-id ${activeAriaLabelElement.id}`);
+ });
+
+ it('sets aria-labelledby to the initials + badge + activeState, if no name is provided', () => {
+ render(
+ ,
+ );
+
+ const activeAriaLabelElement = screen.getByText(DEFAULT_STRINGS.inactive);
+ expect(activeAriaLabelElement.id).toBeTruthy();
+ expect(activeAriaLabelElement.hidden).toBeTruthy();
+
+ const root = screen.getAllByRole('img')[0];
+ expect(root.getAttribute('aria-labelledby')).toBe(`initials-id badge-id ${activeAriaLabelElement.id}`);
+ });
+
+ it('does not render an activeAriaLabelElement when active state is unset', () => {
+ render( );
+
+ expect(screen.queryByText(DEFAULT_STRINGS.active)).toBeNull();
+ expect(screen.queryByText(DEFAULT_STRINGS.inactive)).toBeNull();
+
+ const root = screen.getAllByRole('img')[0];
+ expect(root.getAttribute('aria-label')).toBe('First Last');
+ expect(root.getAttribute('aria-labelledby')).toBeFalsy();
});
});
diff --git a/packages/react-components/react-avatar/src/components/Avatar/Avatar.types.ts b/packages/react-components/react-avatar/src/components/Avatar/Avatar.types.ts
index 5c68e0636cc6e8..1474b46dda127a 100644
--- a/packages/react-components/react-avatar/src/components/Avatar/Avatar.types.ts
+++ b/packages/react-components/react-avatar/src/components/Avatar/Avatar.types.ts
@@ -1,6 +1,11 @@
import { PresenceBadge } from '@fluentui/react-badge';
import type { ComponentProps, ComponentState, Slot } from '@fluentui/react-utilities';
+/**
+ * Sizes for the avatar
+ */
+export type AvatarSizes = 16 | 20 | 24 | 28 | 32 | 36 | 40 | 48 | 56 | 64 | 72 | 96 | 120 | 128;
+
export type AvatarSlots = {
root: Slot<'span'>;
@@ -69,11 +74,6 @@ export type AvatarNamedColor =
| 'platinum'
| 'anchor';
-/**
- * Sizes that can be used for the Avatar
- */
-export type AvatarSizes = 16 | 20 | 24 | 28 | 32 | 36 | 40 | 48 | 56 | 64 | 72 | 96 | 120 | 128;
-
/**
* Properties for Avatar
*/
@@ -154,4 +154,9 @@ export type AvatarState = ComponentState &
* The Avatar's color, it matches props.color but with `'colorful'` resolved to a named color
*/
color: NonNullable>;
+
+ /**
+ * Hidden span to render the active state label for the purposes of including in the aria-labelledby, if needed.
+ */
+ activeAriaLabelElement?: JSX.Element;
};
diff --git a/packages/react-components/react-avatar/src/components/Avatar/renderAvatar.tsx b/packages/react-components/react-avatar/src/components/Avatar/renderAvatar.tsx
index 98beddfbd043fd..1a68971339b9bf 100644
--- a/packages/react-components/react-avatar/src/components/Avatar/renderAvatar.tsx
+++ b/packages/react-components/react-avatar/src/components/Avatar/renderAvatar.tsx
@@ -11,6 +11,7 @@ export const renderAvatar_unstable = (state: AvatarState) => {
{slots.icon && }
{slots.image && }
{slots.badge && }
+ {state.activeAriaLabelElement}
);
};
diff --git a/packages/react-components/react-avatar/src/components/Avatar/useAvatar.tsx b/packages/react-components/react-avatar/src/components/Avatar/useAvatar.tsx
index 5769e3fc3c7246..7fda29c056d86d 100644
--- a/packages/react-components/react-avatar/src/components/Avatar/useAvatar.tsx
+++ b/packages/react-components/react-avatar/src/components/Avatar/useAvatar.tsx
@@ -5,10 +5,24 @@ import type { AvatarNamedColor, AvatarProps, AvatarState } from './Avatar.types'
import { PersonRegular } from '@fluentui/react-icons';
import { PresenceBadge } from '@fluentui/react-badge';
import { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';
+import { useAvatarContext } from '../../contexts/AvatarContext';
+
+export const DEFAULT_STRINGS = {
+ active: 'active',
+ inactive: 'inactive',
+};
export const useAvatar_unstable = (props: AvatarProps, ref: React.Ref): AvatarState => {
const { dir } = useFluent();
- const { name, size = 32, shape = 'circular', active = 'unset', activeAppearance = 'ring', idForColor } = props;
+ const { size: contextSize } = useAvatarContext();
+ const {
+ name,
+ size = contextSize ?? (32 as const),
+ shape = 'circular',
+ active = 'unset',
+ activeAppearance = 'ring',
+ idForColor,
+ } = props;
let { color = 'neutral' } = props;
// Resolve 'colorful' to a specific color name
@@ -75,6 +89,8 @@ export const useAvatar_unstable = (props: AvatarProps, ref: React.Ref
+ {activeText}
+
+ );
+ } else if (root['aria-label']) {
+ // Otherwise, just append it to the aria-label
+ root['aria-label'] += ' ' + activeText;
+ }
+ }
}
return {
@@ -95,6 +129,7 @@ export const useAvatar_unstable = (props: AvatarProps, ref: React.Ref &
- Required> & {
+ Required> & {
popoverOpen: boolean;
layout: AvatarGroupProps['layout'];
size: AvatarSizes;
diff --git a/packages/react-components/react-avatar/src/components/AvatarGroupPopover/renderAvatarGroupPopover.tsx b/packages/react-components/react-avatar/src/components/AvatarGroupPopover/renderAvatarGroupPopover.tsx
index ae5d43b4007e3c..3cc5008e14d8ea 100644
--- a/packages/react-components/react-avatar/src/components/AvatarGroupPopover/renderAvatarGroupPopover.tsx
+++ b/packages/react-components/react-avatar/src/components/AvatarGroupPopover/renderAvatarGroupPopover.tsx
@@ -17,7 +17,7 @@ export const renderAvatarGroupPopover_unstable = (
return (
-
+
diff --git a/packages/react-components/react-avatar/src/components/AvatarGroupPopover/useAvatarGroupPopover.tsx b/packages/react-components/react-avatar/src/components/AvatarGroupPopover/useAvatarGroupPopover.tsx
index c2daf32608906f..986a5f3a617341 100644
--- a/packages/react-components/react-avatar/src/components/AvatarGroupPopover/useAvatarGroupPopover.tsx
+++ b/packages/react-components/react-avatar/src/components/AvatarGroupPopover/useAvatarGroupPopover.tsx
@@ -46,9 +46,10 @@ export const useAvatarGroupPopover_unstable = (props: AvatarGroupPopoverProps):
}
return {
- popoverOpen,
- layout,
+ count,
indicator,
+ layout,
+ popoverOpen,
size,
components: {
@@ -77,7 +78,7 @@ export const useAvatarGroupPopover_unstable = (props: AvatarGroupPopoverProps):
content: resolveShorthand(props.content, {
required: true,
defaultProps: {
- children: children,
+ children,
role: 'list',
},
}),
diff --git a/packages/react-components/react-avatar/src/components/AvatarGroupPopover/useAvatarGroupPopoverStyles.ts b/packages/react-components/react-avatar/src/components/AvatarGroupPopover/useAvatarGroupPopoverStyles.ts
index 73740bc19fbc6c..b6f142c4619fb2 100644
--- a/packages/react-components/react-avatar/src/components/AvatarGroupPopover/useAvatarGroupPopoverStyles.ts
+++ b/packages/react-components/react-avatar/src/components/AvatarGroupPopover/useAvatarGroupPopoverStyles.ts
@@ -67,16 +67,7 @@ const useTriggerButtonStyles = makeStyles({
color: 'transparent',
},
- // These styles match the default button styles.
focusIndicator: createCustomFocusIndicatorStyle({
- ...shorthands.borderColor('transparent'),
- outlineColor: tokens.colorStrokeFocus2,
- outlineWidth: tokens.strokeWidthThick,
- outlineStyle: 'solid',
- }),
-
- // This custom focus indicator is required for the pie layout due to the clip-path applied to the root
- pieFocusIndicator: createCustomFocusIndicatorStyle({
...shorthands.border(tokens.strokeWidthThick, 'solid', tokens.colorStrokeFocus2),
}),
@@ -179,8 +170,7 @@ export const useAvatarGroupPopoverStyles_unstable = (state: AvatarGroupPopoverSt
sizeStyles[size],
triggerButtonStyles.base,
layout === 'pie' && triggerButtonStyles.pie,
- layout === 'pie' && triggerButtonStyles.pieFocusIndicator,
- layout !== 'pie' && triggerButtonStyles.focusIndicator,
+ triggerButtonStyles.focusIndicator,
layout !== 'pie' && triggerButtonStyles.states,
layout !== 'pie' && popoverOpen && triggerButtonStyles.selected,
...triggerButtonClasses,
diff --git a/packages/react-components/react-avatar/src/contexts/AvatarContext.ts b/packages/react-components/react-avatar/src/contexts/AvatarContext.ts
new file mode 100644
index 00000000000000..39bb4d84c93f8b
--- /dev/null
+++ b/packages/react-components/react-avatar/src/contexts/AvatarContext.ts
@@ -0,0 +1,23 @@
+import * as React from 'react';
+import { AvatarSizes } from '../components/Avatar/Avatar.types';
+
+const avatarContext = React.createContext(undefined);
+
+/**
+ * @internal
+ */
+export interface AvatarContextValue {
+ size?: AvatarSizes;
+}
+
+const avatarContextDefaultValue: AvatarContextValue = {};
+
+/**
+ * @internal
+ */
+export const AvatarContextProvider = avatarContext.Provider;
+
+/**
+ * @internal
+ */
+export const useAvatarContext = () => React.useContext(avatarContext) ?? avatarContextDefaultValue;
diff --git a/packages/react-components/react-avatar/src/contexts/index.ts b/packages/react-components/react-avatar/src/contexts/index.ts
index 5316e465d33035..9a81f44d0634db 100644
--- a/packages/react-components/react-avatar/src/contexts/index.ts
+++ b/packages/react-components/react-avatar/src/contexts/index.ts
@@ -1 +1,2 @@
export * from './AvatarGroupContext';
+export * from './AvatarContext';
diff --git a/packages/react-components/react-avatar/src/index.ts b/packages/react-components/react-avatar/src/index.ts
index b49aba63355af0..9bf255a845f582 100644
--- a/packages/react-components/react-avatar/src/index.ts
+++ b/packages/react-components/react-avatar/src/index.ts
@@ -7,7 +7,7 @@ export {
} from './Avatar';
export type { AvatarNamedColor, AvatarProps, AvatarSlots, AvatarState, AvatarSizes } from './Avatar';
export { getInitials, partitionAvatarGroupItems } from './utils/index';
-export type { PartitionAvatarGroupItemsOptions } from './utils/index';
+export type { PartitionAvatarGroupItems, PartitionAvatarGroupItemsOptions } from './utils/index';
export {
AvatarGroup,
avatarGroupClassNames,
@@ -39,4 +39,10 @@ export {
useAvatarGroupPopover_unstable,
} from './AvatarGroupPopover';
export type { AvatarGroupPopoverProps, AvatarGroupPopoverSlots, AvatarGroupPopoverState } from './AvatarGroupPopover';
-export { AvatarGroupProvider, useAvatarGroupContext_unstable } from './contexts/index';
+export {
+ AvatarGroupProvider,
+ useAvatarGroupContext_unstable,
+ AvatarContextProvider,
+ useAvatarContext,
+} from './contexts/index';
+export type { AvatarContextValue } from './contexts/index';
diff --git a/packages/react-components/react-avatar/src/stories/Avatar/AvatarActive.stories.tsx b/packages/react-components/react-avatar/src/stories/Avatar/AvatarActive.stories.tsx
index d7d50fd21006af..db579aab5680d4 100644
--- a/packages/react-components/react-avatar/src/stories/Avatar/AvatarActive.stories.tsx
+++ b/packages/react-components/react-avatar/src/stories/Avatar/AvatarActive.stories.tsx
@@ -3,8 +3,8 @@ import { Avatar } from '@fluentui/react-avatar';
export const Active = () => (
);
diff --git a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupDefault.stories.tsx b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupDefault.stories.tsx
index 32424d0a925758..6005c35e96ffdb 100644
--- a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupDefault.stories.tsx
+++ b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupDefault.stories.tsx
@@ -24,11 +24,13 @@ export const Default = (props: Partial) => {
{inlineItems.map(name => (
))}
-
- {overflowItems.map(name => (
-
- ))}
-
+ {overflowItems && (
+
+ {overflowItems.map(name => (
+
+ ))}
+
+ )}
);
};
diff --git a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupIndicator.stories.tsx b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupIndicator.stories.tsx
index 875a55ba534e2f..bca72cc72a5a12 100644
--- a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupIndicator.stories.tsx
+++ b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupIndicator.stories.tsx
@@ -34,21 +34,25 @@ export const Indicator = () => {
{inlineItems.map(name => (
))}
-
- {overflowItems.map(name => (
-
- ))}
-
+ {overflowItems && (
+
+ {overflowItems.map(name => (
+
+ ))}
+
+ )}
{inlineItems.map(name => (
))}
-
- {overflowItems.map(name => (
-
- ))}
-
+ {overflowItems && (
+
+ {overflowItems.map(name => (
+
+ ))}
+
+ )}
);
diff --git a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupLayout.stories.tsx b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupLayout.stories.tsx
index 223a7a692ec643..ffc79ae266ccc7 100644
--- a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupLayout.stories.tsx
+++ b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupLayout.stories.tsx
@@ -35,31 +35,37 @@ export const Layout = () => {
{partitionedItems.inlineItems.map(name => (
))}
-
- {partitionedItems.overflowItems.map(name => (
-
- ))}
-
+ {partitionedItems.overflowItems && (
+
+ {partitionedItems.overflowItems.map(name => (
+
+ ))}
+
+ )}
{partitionedItems.inlineItems.map(name => (
))}
-
- {partitionedItems.overflowItems.map(name => (
-
- ))}
-
+ {partitionedItems.overflowItems && (
+
+ {partitionedItems.overflowItems.map(name => (
+
+ ))}
+
+ )}
{piePartitionedItems.inlineItems.map(name => (
))}
-
- {piePartitionedItems.overflowItems.map(name => (
-
- ))}
-
+ {piePartitionedItems.overflowItems && (
+
+ {piePartitionedItems.overflowItems.map(name => (
+
+ ))}
+
+ )}
);
diff --git a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizePie.stories.tsx b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizePie.stories.tsx
index c3346b9dad6ede..2fcd3fbe8450a1 100644
--- a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizePie.stories.tsx
+++ b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizePie.stories.tsx
@@ -39,11 +39,13 @@ export const SizePie = () => {
{inlineItems.map(name => (
))}
-
- {overflowItems.map(name => (
-
- ))}
-
+ {overflowItems && (
+
+ {overflowItems.map(name => (
+
+ ))}
+
+ )}
);
})}
diff --git a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizeSpread.stories.tsx b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizeSpread.stories.tsx
index 926e8332c15f66..f84fe857908fdd 100644
--- a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizeSpread.stories.tsx
+++ b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizeSpread.stories.tsx
@@ -40,11 +40,13 @@ export const SizeSpread = () => {
{inlineItems.map(name => (
))}
-
- {overflowItems.map(name => (
-
- ))}
-
+ {overflowItems && (
+
+ {overflowItems.map(name => (
+
+ ))}
+
+ )}
);
})}
diff --git a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizeStack.stories.tsx b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizeStack.stories.tsx
index 9d3d7a96e4ea43..bd6cd3b12ec41c 100644
--- a/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizeStack.stories.tsx
+++ b/packages/react-components/react-avatar/src/stories/AvatarGroup/AvatarGroupSizeStack.stories.tsx
@@ -40,11 +40,13 @@ export const SizeStack = () => {
{inlineItems.map(name => (
))}
-
- {overflowItems.map(name => (
-
- ))}
-
+ {overflowItems && (
+
+ {overflowItems.map(name => (
+
+ ))}
+
+ )}
);
})}
diff --git a/packages/react-components/react-avatar/src/stories/AvatarGroup/index.stories.tsx b/packages/react-components/react-avatar/src/stories/AvatarGroup/index.stories.tsx
index 841bf9580cabb5..11afee06493add 100644
--- a/packages/react-components/react-avatar/src/stories/AvatarGroup/index.stories.tsx
+++ b/packages/react-components/react-avatar/src/stories/AvatarGroup/index.stories.tsx
@@ -5,10 +5,10 @@ import descriptionMd from './AvatarGroupDescription.md';
export { Default } from './AvatarGroupDefault.stories';
export { Layout } from './AvatarGroupLayout.stories';
+export { Indicator } from './AvatarGroupIndicator.stories';
export { SizeSpread } from './AvatarGroupSizeSpread.stories';
export { SizeStack } from './AvatarGroupSizeStack.stories';
export { SizePie } from './AvatarGroupSizePie.stories';
-export { Indicator } from './AvatarGroupIndicator.stories';
export default {
title: 'Preview Components/AvatarGroup',
diff --git a/packages/react-components/react-avatar/src/utils/index.ts b/packages/react-components/react-avatar/src/utils/index.ts
index 1b29cba3004607..f536b6a94556ff 100644
--- a/packages/react-components/react-avatar/src/utils/index.ts
+++ b/packages/react-components/react-avatar/src/utils/index.ts
@@ -1,3 +1,3 @@
export { getInitials } from './getInitials';
export { partitionAvatarGroupItems } from './partitionAvatarGroupItems';
-export type { PartitionAvatarGroupItemsOptions } from './partitionAvatarGroupItems';
+export type { PartitionAvatarGroupItems, PartitionAvatarGroupItemsOptions } from './partitionAvatarGroupItems';
diff --git a/packages/react-components/react-avatar/src/utils/partitionAvatarGroupItems.test.ts b/packages/react-components/react-avatar/src/utils/partitionAvatarGroupItems.test.ts
index 20f148119627a9..28cbc413383e71 100644
--- a/packages/react-components/react-avatar/src/utils/partitionAvatarGroupItems.test.ts
+++ b/packages/react-components/react-avatar/src/utils/partitionAvatarGroupItems.test.ts
@@ -38,7 +38,7 @@ describe('partitionAvatarGroupItems', () => {
const { inlineItems, overflowItems } = partitionAvatarGroupItems({ items });
expect(inlineItems).toEqual([0, 1, 2]);
- expect(overflowItems).toEqual([]);
+ expect(overflowItems).toBeUndefined();
});
it('partitions the items correctly when there is no overflow when using the pie layout', () => {
diff --git a/packages/react-components/react-avatar/src/utils/partitionAvatarGroupItems.ts b/packages/react-components/react-avatar/src/utils/partitionAvatarGroupItems.ts
index be8c021823931a..62e80bb7ab223d 100644
--- a/packages/react-components/react-avatar/src/utils/partitionAvatarGroupItems.ts
+++ b/packages/react-components/react-avatar/src/utils/partitionAvatarGroupItems.ts
@@ -4,6 +4,11 @@ export type PartitionAvatarGroupItemsOptions = {
maxInlineItems?: number;
};
+export type PartitionAvatarGroupItems = {
+ inlineItems: readonly T[];
+ overflowItems?: readonly T[];
+};
+
/**
* Get the inline items and overflowing items based on the array of AvatarGroupItems needed for AvatarGroup.
*
@@ -11,22 +16,25 @@ export type PartitionAvatarGroupItemsOptions = {
*
* @returns Two arrays split into inline items and overflow items based on maxInlineItems.
*/
-export const partitionAvatarGroupItems = (options: PartitionAvatarGroupItemsOptions) => {
+export const partitionAvatarGroupItems = (
+ options: PartitionAvatarGroupItemsOptions,
+): PartitionAvatarGroupItems => {
const { items } = options;
const isPie = options.layout === 'pie';
if (isPie) {
return {
inlineItems: items.slice(0, 3),
- overflowItems: items,
+ overflowItems: items.length > 0 ? items : undefined,
};
}
const maxInlineItems = options.maxInlineItems ?? 5;
const inlineCount = -(maxInlineItems - (items.length > maxInlineItems ? 1 : 0));
+ const overflowItems = items.slice(0, inlineCount);
return {
inlineItems: items.slice(inlineCount),
- overflowItems: items.slice(0, inlineCount),
+ overflowItems: overflowItems.length > 0 ? overflowItems : undefined,
};
};
diff --git a/packages/react-components/react-avatar/tsconfig.json b/packages/react-components/react-avatar/tsconfig.json
index 1941a041d46c19..9087bac77cc8d7 100644
--- a/packages/react-components/react-avatar/tsconfig.json
+++ b/packages/react-components/react-avatar/tsconfig.json
@@ -20,6 +20,9 @@
},
{
"path": "./.storybook/tsconfig.json"
+ },
+ {
+ "path": "./e2e/tsconfig.json"
}
]
}
diff --git a/packages/react-components/react-avatar/tsconfig.lib.json b/packages/react-components/react-avatar/tsconfig.lib.json
index 5d7b14f1e0b70c..7f94e04299ed85 100644
--- a/packages/react-components/react-avatar/tsconfig.lib.json
+++ b/packages/react-components/react-avatar/tsconfig.lib.json
@@ -3,9 +3,9 @@
"compilerOptions": {
"noEmit": false,
"lib": ["ES2019", "dom"],
- "outDir": "dist",
"declaration": true,
- "declarationDir": "dist/types",
+ "declarationDir": "../../../dist/out-tsc/types",
+ "outDir": "../../../dist/out-tsc",
"inlineSources": true,
"types": ["static-assets", "environment"]
},
diff --git a/packages/react-components/react-badge/.npmignore b/packages/react-components/react-badge/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/react-badge/.npmignore
+++ b/packages/react-components/react-badge/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/react-badge/.storybook/main.js b/packages/react-components/react-badge/.storybook/main.js
index f57cfd09509e78..26536b61b387f6 100644
--- a/packages/react-components/react-badge/.storybook/main.js
+++ b/packages/react-components/react-badge/.storybook/main.js
@@ -2,7 +2,7 @@ const rootMain = require('../../../../.storybook/main');
module.exports = /** @type {Omit} */ ({
...rootMain,
- stories: [...rootMain.stories, '../src/**/*.stories.mdx', '../src/**/index.stories.@(ts|tsx)'],
+ stories: [...rootMain.stories, '../stories/**/*.stories.mdx', '../stories/**/index.stories.@(ts|tsx)'],
addons: [...rootMain.addons],
webpackFinal: (config, options) => {
const localConfig = { ...rootMain.webpackFinal(config, options) };
diff --git a/packages/react-components/react-badge/.storybook/tsconfig.json b/packages/react-components/react-badge/.storybook/tsconfig.json
index f9f60e1234ed49..ea89218a3d916f 100644
--- a/packages/react-components/react-badge/.storybook/tsconfig.json
+++ b/packages/react-components/react-badge/.storybook/tsconfig.json
@@ -6,5 +6,5 @@
"checkJs": true,
"types": ["static-assets", "environment", "storybook__addons"]
},
- "include": ["../src/**/*.stories.ts", "../src/**/*.stories.tsx", "*.js"]
+ "include": ["../stories/**/*.stories.ts", "../stories/**/*.stories.tsx", "*.js"]
}
diff --git a/packages/react-components/react-badge/CHANGELOG.json b/packages/react-components/react-badge/CHANGELOG.json
index c6988ec69d8696..543b8bc2a7b640 100644
--- a/packages/react-components/react-badge/CHANGELOG.json
+++ b/packages/react-components/react-badge/CHANGELOG.json
@@ -1,6 +1,170 @@
{
"name": "@fluentui/react-badge",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 00:35:28 GMT",
+ "tag": "@fluentui/react-badge_v9.0.10",
+ "version": "9.0.10",
+ "comments": {
+ "patch": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-badge",
+ "commit": "1420e05c305e7396bc62028ff2563d79fbc1cc70",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:27 GMT",
+ "tag": "@fluentui/react-badge_v9.0.9",
+ "version": "9.0.9",
+ "comments": {
+ "patch": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-badge",
+ "comment": "Bump @fluentui/react-theme to v9.1.1",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-badge",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-badge",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:43 GMT",
+ "tag": "@fluentui/react-badge_v9.0.8",
+ "version": "9.0.8",
+ "comments": {
+ "patch": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-badge",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-badge",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 22:24:35 GMT",
+ "tag": "@fluentui/react-badge_v9.0.7",
+ "version": "9.0.7",
+ "comments": {
+ "patch": [
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "0885025f43076ebdf3a395cfb6ae65b3304cc5b2",
+ "comment": "fix: CounterBadge now always renders its children if provided"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/react-badge_v9.0.6",
+ "version": "9.0.6",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-badge",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:54 GMT",
+ "tag": "@fluentui/react-badge_v9.0.5",
+ "version": "9.0.5",
+ "comments": {
+ "patch": [
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "fix: update color tokens"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "0137f992b99b3b8ec927be8f7aef751d27cd5830",
+ "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-badge",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-badge",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-badge",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ],
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:39 GMT",
"tag": "@fluentui/react-badge_v9.0.4",
diff --git a/packages/react-components/react-badge/CHANGELOG.md b/packages/react-components/react-badge/CHANGELOG.md
index 34ea4815b271e3..dd0de191f86891 100644
--- a/packages/react-components/react-badge/CHANGELOG.md
+++ b/packages/react-components/react-badge/CHANGELOG.md
@@ -1,9 +1,74 @@
# Change Log - @fluentui/react-badge
-This log was last generated on Wed, 03 Aug 2022 16:03:39 GMT and should not be manually modified.
+This log was last generated on Tue, 25 Oct 2022 00:35:28 GMT and should not be manually modified.
+## [9.0.10](https://github.com/microsoft/fluentui/tree/@fluentui/react-badge_v9.0.10)
+
+Tue, 25 Oct 2022 00:35:28 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-badge_v9.0.9..@fluentui/react-badge_v9.0.10)
+
+### Patches
+
+- chore: Migrate to new package structure. ([PR #25335](https://github.com/microsoft/fluentui/pull/25335) by tristan.watanabe@gmail.com)
+
+## [9.0.9](https://github.com/microsoft/fluentui/tree/@fluentui/react-badge_v9.0.9)
+
+Thu, 20 Oct 2022 08:39:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-badge_v9.0.8..@fluentui/react-badge_v9.0.9)
+
+### Patches
+
+- chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- Bump @fluentui/react-theme to v9.1.1 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.0.8](https://github.com/microsoft/fluentui/tree/@fluentui/react-badge_v9.0.8)
+
+Thu, 13 Oct 2022 11:02:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-badge_v9.0.7..@fluentui/react-badge_v9.0.8)
+
+### Patches
+
+- chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.0.7](https://github.com/microsoft/fluentui/tree/@fluentui/react-badge_v9.0.7)
+
+Mon, 03 Oct 2022 22:24:35 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-badge_v9.0.6..@fluentui/react-badge_v9.0.7)
+
+### Patches
+
+- fix: CounterBadge now always renders its children if provided ([PR #24916](https://github.com/microsoft/fluentui/pull/24916) by behowell@microsoft.com)
+
+## [9.0.6](https://github.com/microsoft/fluentui/tree/@fluentui/react-badge_v9.0.6)
+
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-badge_v9.0.5..@fluentui/react-badge_v9.0.6)
+
+### Patches
+
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.0.5](https://github.com/microsoft/fluentui/tree/@fluentui/react-badge_v9.0.5)
+
+Thu, 15 Sep 2022 09:49:54 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-badge_v9.0.4..@fluentui/react-badge_v9.0.5)
+
+### Patches
+
+- fix: update color tokens ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+- fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted ([PR #24611](https://github.com/microsoft/fluentui/pull/24611) by miroslav.stastny@microsoft.com)
+- chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.0.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-badge_v9.0.4)
Wed, 03 Aug 2022 16:03:39 GMT
diff --git a/packages/react-components/react-badge/MIGRATION.md b/packages/react-components/react-badge/docs/MIGRATION.md
similarity index 100%
rename from packages/react-components/react-badge/MIGRATION.md
rename to packages/react-components/react-badge/docs/MIGRATION.md
diff --git a/packages/react-components/react-badge/Spec.md b/packages/react-components/react-badge/docs/Spec.md
similarity index 100%
rename from packages/react-components/react-badge/Spec.md
rename to packages/react-components/react-badge/docs/Spec.md
diff --git a/packages/react-components/react-badge/package.json b/packages/react-components/react-badge/package.json
index bd7e3e573ef0de..20a10289f74a88 100644
--- a/packages/react-components/react-badge/package.json
+++ b/packages/react-components/react-badge/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/react-badge",
- "version": "9.0.4",
+ "version": "9.0.10",
"description": "React components for building web experiences",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -28,21 +28,21 @@
"devDependencies": {
"@fluentui/eslint-plugin": "*",
"@fluentui/react-conformance": "*",
- "@fluentui/react-conformance-griffel": "9.0.0-beta.12",
+ "@fluentui/react-conformance-griffel": "9.0.0-beta.16",
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
"@fluentui/react-icons": "^2.0.175",
- "@griffel/react": "^1.3.0",
- "@fluentui/react-theme": "^9.0.0",
- "@fluentui/react-utilities": "^9.0.2",
+ "@griffel/react": "^1.4.1",
+ "@fluentui/react-theme": "^9.1.1",
+ "@fluentui/react-utilities": "^9.1.2",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0"
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0"
},
"beachball": {
"disallowedChangeTypes": [
diff --git a/packages/react-components/react-badge/src/components/Badge/Badge.test.tsx b/packages/react-components/react-badge/src/components/Badge/Badge.test.tsx
index e5195b010141f4..9b7859b9f8dc03 100644
--- a/packages/react-components/react-badge/src/components/Badge/Badge.test.tsx
+++ b/packages/react-components/react-badge/src/components/Badge/Badge.test.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import { Badge } from './Badge';
import * as renderer from 'react-test-renderer';
import { ReactWrapper } from 'enzyme';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
describe('Badge', () => {
isConformant({
diff --git a/packages/react-components/react-badge/src/components/CounterBadge/CounterBadge.test.tsx b/packages/react-components/react-badge/src/components/CounterBadge/CounterBadge.test.tsx
index b5dfdcfdae22f9..bf2bece4f0d67d 100644
--- a/packages/react-components/react-badge/src/components/CounterBadge/CounterBadge.test.tsx
+++ b/packages/react-components/react-badge/src/components/CounterBadge/CounterBadge.test.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import { CounterBadge } from './CounterBadge';
import * as renderer from 'react-test-renderer';
import { ReactWrapper } from 'enzyme';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
describe('CounterBadge', () => {
isConformant({
diff --git a/packages/react-components/react-badge/src/components/CounterBadge/__snapshots__/CounterBadge.test.tsx.snap b/packages/react-components/react-badge/src/components/CounterBadge/__snapshots__/CounterBadge.test.tsx.snap
index d7ee96c8633db7..3046f76a4c9e4b 100644
--- a/packages/react-components/react-badge/src/components/CounterBadge/__snapshots__/CounterBadge.test.tsx.snap
+++ b/packages/react-components/react-badge/src/components/CounterBadge/__snapshots__/CounterBadge.test.tsx.snap
@@ -3,7 +3,5 @@
exports[`CounterBadge renders a default state 1`] = `
- 0
-
+/>
`;
diff --git a/packages/react-components/react-badge/src/components/CounterBadge/useCounterBadge.ts b/packages/react-components/react-badge/src/components/CounterBadge/useCounterBadge.ts
index 5192375963c2e5..95c91aea713ac2 100644
--- a/packages/react-components/react-badge/src/components/CounterBadge/useCounterBadge.ts
+++ b/packages/react-components/react-badge/src/components/CounterBadge/useCounterBadge.ts
@@ -1,4 +1,5 @@
import * as React from 'react';
+import type { BadgeState } from '../Badge/index';
import { useBadge_unstable } from '../Badge/index';
import type { CounterBadgeProps, CounterBadgeState } from './CounterBadge.types';
@@ -16,7 +17,7 @@ export const useCounterBadge_unstable = (props: CounterBadgeProps, ref: React.Re
} = props;
const state: CounterBadgeState = {
- ...(useBadge_unstable(props, ref) as CounterBadgeState),
+ ...(useBadge_unstable(props, ref) as Pick),
shape,
appearance,
showZero,
@@ -24,8 +25,8 @@ export const useCounterBadge_unstable = (props: CounterBadgeProps, ref: React.Re
dot,
};
- if (!state.dot && !state.root.children) {
- state.root.children = state.count > overflowCount ? `${overflowCount}+` : `${state.count}`;
+ if ((count !== 0 || showZero) && !dot && !state.root.children) {
+ state.root.children = count > overflowCount ? `${overflowCount}+` : `${count}`;
}
return state;
diff --git a/packages/react-components/react-badge/src/components/CounterBadge/useCounterBadgeStyles.ts b/packages/react-components/react-badge/src/components/CounterBadge/useCounterBadgeStyles.ts
index 89c99e4026046f..e9188d3433e64a 100644
--- a/packages/react-components/react-badge/src/components/CounterBadge/useCounterBadgeStyles.ts
+++ b/packages/react-components/react-badge/src/components/CounterBadge/useCounterBadgeStyles.ts
@@ -29,7 +29,7 @@ export const useCounterBadgeStyles_unstable = (state: CounterBadgeState): Counte
state.root.className = mergeClasses(
counterBadgeClassNames.root,
state.dot && styles.dot,
- !state.showZero && state.count === 0 && !state.dot && styles.hide,
+ !state.root.children && !state.dot && styles.hide,
state.root.className,
);
diff --git a/packages/react-components/react-badge/src/components/PresenceBadge/PresenceBadge.test.tsx b/packages/react-components/react-badge/src/components/PresenceBadge/PresenceBadge.test.tsx
index e837a7d9ab2830..8ba73930e61488 100644
--- a/packages/react-components/react-badge/src/components/PresenceBadge/PresenceBadge.test.tsx
+++ b/packages/react-components/react-badge/src/components/PresenceBadge/PresenceBadge.test.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import { PresenceBadge } from './PresenceBadge';
import * as renderer from 'react-test-renderer';
import { ReactWrapper } from 'enzyme';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
describe('PresenceBadge', () => {
isConformant({
diff --git a/packages/react-components/react-badge/src/stories/Badge/index.stories.tsx b/packages/react-components/react-badge/src/stories/Badge/index.stories.tsx
deleted file mode 100644
index 6fdcd9921696cc..00000000000000
--- a/packages/react-components/react-badge/src/stories/Badge/index.stories.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import * as React from 'react';
-import { Meta } from '@storybook/react';
-import { Badge } from '../../Badge';
-import descriptionMd from './BadgeDescription.md';
-import bestPracticesMd from './BadgeBestPractices.md';
-export { Default } from './BadgeDefault.stories';
-export { Appearance } from './BadgeAppearance.stories';
-export { Sizes } from './BadgeSizes.stories';
-export { Shapes } from './BadgeShapes.stories';
-export { Color } from './BadgeColor.stories';
-export { Icon } from './BadgeIcon.stories';
-
-export default {
- title: 'Components/Badge/Badge',
- component: Badge,
- parameters: {
- docs: {
- description: {
- component: [descriptionMd, bestPracticesMd].join('\n'),
- },
- },
- },
- decorators: [
- Story => (
-
-
-
- ),
- ],
-} as Meta;
diff --git a/packages/react-components/react-badge/src/stories/CounterBadge/index.stories.tsx b/packages/react-components/react-badge/src/stories/CounterBadge/index.stories.tsx
deleted file mode 100644
index 785e8627fb20fc..00000000000000
--- a/packages/react-components/react-badge/src/stories/CounterBadge/index.stories.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import * as React from 'react';
-import { Meta } from '@storybook/react';
-import { CounterBadge } from '../../CounterBadge';
-import descriptionMd from './CounterBadgeDescription.md';
-import bestPracticesMd from './CounterBadgeBestPractices.md';
-export { Default } from './CounterBadgeDefault.stories';
-export { Appearance } from './CounterBadgeAppearance.stories';
-export { Shapes } from './CounterBadgeShapes.stories';
-export { Sizes } from './CounterBadgeSizes.stories';
-export { Color } from './CounterBadgeColor.stories';
-export { Dot } from './CounterBadgeDot.stories';
-
-export default {
- title: 'Components/Badge/Counter Badge',
- component: CounterBadge,
- parameters: {
- docs: {
- description: {
- component: [descriptionMd, bestPracticesMd].join('\n'),
- },
- },
- },
- decorators: [
- Story => (
-
-
-
- ),
- ],
-} as Meta;
diff --git a/packages/react-components/react-badge/src/stories/PresenceBadge/index.stories.tsx b/packages/react-components/react-badge/src/stories/PresenceBadge/index.stories.tsx
deleted file mode 100644
index 7c783a1fe10a8a..00000000000000
--- a/packages/react-components/react-badge/src/stories/PresenceBadge/index.stories.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import * as React from 'react';
-import { Meta } from '@storybook/react';
-import { PresenceBadge } from '../../PresenceBadge';
-import descriptionMd from './PresenceBadgeDescription.md';
-import bestPracticesMd from './PresenceBadgeBestPractices.md';
-export { Default } from './PresenceBadgeDefault.stories';
-export { Sizes } from './PresenceBadgeSizes.stories';
-export { Status } from './PresenceBadgeStatus.stories';
-export { OutOfOffice } from './PresenceBadgeOutOfOffice.stories';
-
-export default {
- title: 'Components/Badge/PresenceBadge',
- component: PresenceBadge,
- parameters: {
- docs: {
- description: {
- component: [descriptionMd, bestPracticesMd].join('\n'),
- },
- },
- },
- decorators: [
- Story => (
-
-
-
- ),
- ],
-} as Meta;
diff --git a/packages/react-components/react-badge/src/common/isConformant.ts b/packages/react-components/react-badge/src/testing/isConformant.ts
similarity index 100%
rename from packages/react-components/react-badge/src/common/isConformant.ts
rename to packages/react-components/react-badge/src/testing/isConformant.ts
diff --git a/packages/react-components/react-badge/src/stories/Badge/BadgeAppearance.stories.tsx b/packages/react-components/react-badge/stories/Badge/BadgeAppearance.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/Badge/BadgeAppearance.stories.tsx
rename to packages/react-components/react-badge/stories/Badge/BadgeAppearance.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/Badge/BadgeBestPractices.md b/packages/react-components/react-badge/stories/Badge/BadgeBestPractices.md
similarity index 100%
rename from packages/react-components/react-badge/src/stories/Badge/BadgeBestPractices.md
rename to packages/react-components/react-badge/stories/Badge/BadgeBestPractices.md
diff --git a/packages/react-components/react-badge/src/stories/Badge/BadgeColor.stories.tsx b/packages/react-components/react-badge/stories/Badge/BadgeColor.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/Badge/BadgeColor.stories.tsx
rename to packages/react-components/react-badge/stories/Badge/BadgeColor.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/Badge/BadgeDefault.stories.tsx b/packages/react-components/react-badge/stories/Badge/BadgeDefault.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/Badge/BadgeDefault.stories.tsx
rename to packages/react-components/react-badge/stories/Badge/BadgeDefault.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/Badge/BadgeDescription.md b/packages/react-components/react-badge/stories/Badge/BadgeDescription.md
similarity index 100%
rename from packages/react-components/react-badge/src/stories/Badge/BadgeDescription.md
rename to packages/react-components/react-badge/stories/Badge/BadgeDescription.md
diff --git a/packages/react-components/react-badge/src/stories/Badge/BadgeIcon.stories.tsx b/packages/react-components/react-badge/stories/Badge/BadgeIcon.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/Badge/BadgeIcon.stories.tsx
rename to packages/react-components/react-badge/stories/Badge/BadgeIcon.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/Badge/BadgeShapes.stories.tsx b/packages/react-components/react-badge/stories/Badge/BadgeShapes.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/Badge/BadgeShapes.stories.tsx
rename to packages/react-components/react-badge/stories/Badge/BadgeShapes.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/Badge/BadgeSizes.stories.tsx b/packages/react-components/react-badge/stories/Badge/BadgeSizes.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/Badge/BadgeSizes.stories.tsx
rename to packages/react-components/react-badge/stories/Badge/BadgeSizes.stories.tsx
diff --git a/packages/react-components/react-badge/stories/Badge/index.stories.tsx b/packages/react-components/react-badge/stories/Badge/index.stories.tsx
new file mode 100644
index 00000000000000..f811bd5d590057
--- /dev/null
+++ b/packages/react-components/react-badge/stories/Badge/index.stories.tsx
@@ -0,0 +1,30 @@
+import * as React from 'react';
+import { Meta } from '@storybook/react';
+import { Badge } from '@fluentui/react-components';
+import descriptionMd from './BadgeDescription.md';
+import bestPracticesMd from './BadgeBestPractices.md';
+export { Default } from './BadgeDefault.stories';
+export { Appearance } from './BadgeAppearance.stories';
+export { Sizes } from './BadgeSizes.stories';
+export { Shapes } from './BadgeShapes.stories';
+export { Color } from './BadgeColor.stories';
+export { Icon } from './BadgeIcon.stories';
+
+export default {
+ title: 'Components/Badge/Badge',
+ component: Badge,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd, bestPracticesMd].join('\n'),
+ },
+ },
+ },
+ decorators: [
+ Story => (
+
+
+
+ ),
+ ],
+} as Meta;
diff --git a/packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeAppearance.stories.tsx b/packages/react-components/react-badge/stories/CounterBadge/CounterBadgeAppearance.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeAppearance.stories.tsx
rename to packages/react-components/react-badge/stories/CounterBadge/CounterBadgeAppearance.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeBestPractices.md b/packages/react-components/react-badge/stories/CounterBadge/CounterBadgeBestPractices.md
similarity index 100%
rename from packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeBestPractices.md
rename to packages/react-components/react-badge/stories/CounterBadge/CounterBadgeBestPractices.md
diff --git a/packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeColor.stories.tsx b/packages/react-components/react-badge/stories/CounterBadge/CounterBadgeColor.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeColor.stories.tsx
rename to packages/react-components/react-badge/stories/CounterBadge/CounterBadgeColor.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeDefault.stories.tsx b/packages/react-components/react-badge/stories/CounterBadge/CounterBadgeDefault.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeDefault.stories.tsx
rename to packages/react-components/react-badge/stories/CounterBadge/CounterBadgeDefault.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeDescription.md b/packages/react-components/react-badge/stories/CounterBadge/CounterBadgeDescription.md
similarity index 100%
rename from packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeDescription.md
rename to packages/react-components/react-badge/stories/CounterBadge/CounterBadgeDescription.md
diff --git a/packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeDot.stories.tsx b/packages/react-components/react-badge/stories/CounterBadge/CounterBadgeDot.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeDot.stories.tsx
rename to packages/react-components/react-badge/stories/CounterBadge/CounterBadgeDot.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeShapes.stories.tsx b/packages/react-components/react-badge/stories/CounterBadge/CounterBadgeShapes.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeShapes.stories.tsx
rename to packages/react-components/react-badge/stories/CounterBadge/CounterBadgeShapes.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeSizes.stories.tsx b/packages/react-components/react-badge/stories/CounterBadge/CounterBadgeSizes.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/CounterBadge/CounterBadgeSizes.stories.tsx
rename to packages/react-components/react-badge/stories/CounterBadge/CounterBadgeSizes.stories.tsx
diff --git a/packages/react-components/react-badge/stories/CounterBadge/index.stories.tsx b/packages/react-components/react-badge/stories/CounterBadge/index.stories.tsx
new file mode 100644
index 00000000000000..3b601ede0fa261
--- /dev/null
+++ b/packages/react-components/react-badge/stories/CounterBadge/index.stories.tsx
@@ -0,0 +1,30 @@
+import * as React from 'react';
+import { Meta } from '@storybook/react';
+import { CounterBadge } from '@fluentui/react-components';
+import descriptionMd from './CounterBadgeDescription.md';
+import bestPracticesMd from './CounterBadgeBestPractices.md';
+export { Default } from './CounterBadgeDefault.stories';
+export { Appearance } from './CounterBadgeAppearance.stories';
+export { Shapes } from './CounterBadgeShapes.stories';
+export { Sizes } from './CounterBadgeSizes.stories';
+export { Color } from './CounterBadgeColor.stories';
+export { Dot } from './CounterBadgeDot.stories';
+
+export default {
+ title: 'Components/Badge/Counter Badge',
+ component: CounterBadge,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd, bestPracticesMd].join('\n'),
+ },
+ },
+ },
+ decorators: [
+ Story => (
+
+
+
+ ),
+ ],
+} as Meta;
diff --git a/packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeBestPractices.md b/packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeBestPractices.md
similarity index 100%
rename from packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeBestPractices.md
rename to packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeBestPractices.md
diff --git a/packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeDefault.stories.tsx b/packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeDefault.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeDefault.stories.tsx
rename to packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeDefault.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeDescription.md b/packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeDescription.md
similarity index 100%
rename from packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeDescription.md
rename to packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeDescription.md
diff --git a/packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeOutOfOffice.stories.tsx b/packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeOutOfOffice.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeOutOfOffice.stories.tsx
rename to packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeOutOfOffice.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeSizes.stories.tsx b/packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeSizes.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeSizes.stories.tsx
rename to packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeSizes.stories.tsx
diff --git a/packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeStatus.stories.tsx b/packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeStatus.stories.tsx
similarity index 100%
rename from packages/react-components/react-badge/src/stories/PresenceBadge/PresenceBadgeStatus.stories.tsx
rename to packages/react-components/react-badge/stories/PresenceBadge/PresenceBadgeStatus.stories.tsx
diff --git a/packages/react-components/react-badge/stories/PresenceBadge/index.stories.tsx b/packages/react-components/react-badge/stories/PresenceBadge/index.stories.tsx
new file mode 100644
index 00000000000000..a65de92d351afb
--- /dev/null
+++ b/packages/react-components/react-badge/stories/PresenceBadge/index.stories.tsx
@@ -0,0 +1,28 @@
+import * as React from 'react';
+import { Meta } from '@storybook/react';
+import { PresenceBadge } from '@fluentui/react-components';
+import descriptionMd from './PresenceBadgeDescription.md';
+import bestPracticesMd from './PresenceBadgeBestPractices.md';
+export { Default } from './PresenceBadgeDefault.stories';
+export { Sizes } from './PresenceBadgeSizes.stories';
+export { Status } from './PresenceBadgeStatus.stories';
+export { OutOfOffice } from './PresenceBadgeOutOfOffice.stories';
+
+export default {
+ title: 'Components/Badge/PresenceBadge',
+ component: PresenceBadge,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd, bestPracticesMd].join('\n'),
+ },
+ },
+ },
+ decorators: [
+ Story => (
+
+
+
+ ),
+ ],
+} as Meta;
diff --git a/packages/react-components/react-badge/tsconfig.lib.json b/packages/react-components/react-badge/tsconfig.lib.json
index 5d7b14f1e0b70c..53770c42da6dd0 100644
--- a/packages/react-components/react-badge/tsconfig.lib.json
+++ b/packages/react-components/react-badge/tsconfig.lib.json
@@ -10,7 +10,7 @@
"types": ["static-assets", "environment"]
},
"exclude": [
- "./src/common/**",
+ "./src/testing/**",
"**/*.spec.ts",
"**/*.spec.tsx",
"**/*.test.ts",
diff --git a/packages/react-components/react-badge/tsconfig.spec.json b/packages/react-components/react-badge/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/react-badge/tsconfig.spec.json
+++ b/packages/react-components/react-badge/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/react-button/.npmignore b/packages/react-components/react-button/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/react-button/.npmignore
+++ b/packages/react-components/react-button/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/react-button/.storybook/main.js b/packages/react-components/react-button/.storybook/main.js
index f57cfd09509e78..26536b61b387f6 100644
--- a/packages/react-components/react-button/.storybook/main.js
+++ b/packages/react-components/react-button/.storybook/main.js
@@ -2,7 +2,7 @@ const rootMain = require('../../../../.storybook/main');
module.exports = /** @type {Omit} */ ({
...rootMain,
- stories: [...rootMain.stories, '../src/**/*.stories.mdx', '../src/**/index.stories.@(ts|tsx)'],
+ stories: [...rootMain.stories, '../stories/**/*.stories.mdx', '../stories/**/index.stories.@(ts|tsx)'],
addons: [...rootMain.addons],
webpackFinal: (config, options) => {
const localConfig = { ...rootMain.webpackFinal(config, options) };
diff --git a/packages/react-components/react-button/.storybook/tsconfig.json b/packages/react-components/react-button/.storybook/tsconfig.json
index f9f60e1234ed49..ea89218a3d916f 100644
--- a/packages/react-components/react-button/.storybook/tsconfig.json
+++ b/packages/react-components/react-button/.storybook/tsconfig.json
@@ -6,5 +6,5 @@
"checkJs": true,
"types": ["static-assets", "environment", "storybook__addons"]
},
- "include": ["../src/**/*.stories.ts", "../src/**/*.stories.tsx", "*.js"]
+ "include": ["../stories/**/*.stories.ts", "../stories/**/*.stories.tsx", "*.js"]
}
diff --git a/packages/react-components/react-button/CHANGELOG.json b/packages/react-components/react-button/CHANGELOG.json
index 581956419c115e..958f4afba1eaac 100644
--- a/packages/react-components/react-button/CHANGELOG.json
+++ b/packages/react-components/react-button/CHANGELOG.json
@@ -1,6 +1,248 @@
{
"name": "@fluentui/react-button",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 00:35:29 GMT",
+ "tag": "@fluentui/react-button_v9.1.6",
+ "version": "9.1.6",
+ "comments": {
+ "patch": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-button",
+ "commit": "619b625d628ba1b30398052d7dc6b8110aff2c80",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:27 GMT",
+ "tag": "@fluentui/react-button_v9.1.5",
+ "version": "9.1.5",
+ "comments": {
+ "patch": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "makotom@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "db508a35cb86dac733878dab9e67feb4f39c2f83",
+ "comment": "fix: Fixing the styles of Buttons rendered as anchor tags."
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-aria to v9.2.3",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-tabster to v9.2.0",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-theme to v9.1.1",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:43 GMT",
+ "tag": "@fluentui/react-button_v9.1.4",
+ "version": "9.1.4",
+ "comments": {
+ "patch": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "makotom@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "755d076070dd69c0a798eb5863aadf98e76b024a",
+ "comment": "feat: Adding subtle transition between states on Button components."
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-aria to v9.2.2",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-tabster to v9.1.3",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 22:24:42 GMT",
+ "tag": "@fluentui/react-button_v9.1.3",
+ "version": "9.1.3",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-aria to v9.2.1",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-tabster to v9.1.2",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/react-button_v9.1.2",
+ "version": "9.1.2",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:56 GMT",
+ "tag": "@fluentui/react-button_v9.1.1",
+ "version": "9.1.1",
+ "comments": {
+ "patch": [
+ {
+ "author": "humberto_makoto@hotmail.com",
+ "package": "@fluentui/react-button",
+ "commit": "17b9063802b28bf7f4b1c4d439623819ad8940fa",
+ "comment": "fix: Adding 'aria-expanded=false' to collapsed MenuButtons."
+ },
+ {
+ "author": "makotom@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "6bc03a4e9ee815da750466f9dc2d25df1373f3e9",
+ "comment": "chore: Remove max-width style from Button components."
+ },
+ {
+ "author": "humberto_makoto@hotmail.com",
+ "package": "@fluentui/react-button",
+ "commit": "ef3ea2307fd97c893eded2164d96f1f56e378fd3",
+ "comment": "chore: Cleaning up tokens in Button components so they better adhere to the design spec."
+ },
+ {
+ "author": "humberto_makoto@hotmail.com",
+ "package": "@fluentui/react-button",
+ "commit": "28f55597050bcdd293e57e7d1fdc87802150c59d",
+ "comment": "fix: Wrapping long text in Button components."
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "e598325b985cad3e5057f00893e0176416edd292",
+ "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-aria to v9.2.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-tabster to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-button",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ],
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "makotom@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "e176621e71d595c6d17655c108db0b73eb9ec188",
+ "comment": "chore: Removing CompoundButtonAsToggleButton story since it was using non-exported functions."
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:39 GMT",
"tag": "@fluentui/react-button_v9.1.0",
diff --git a/packages/react-components/react-button/CHANGELOG.md b/packages/react-components/react-button/CHANGELOG.md
index d7c9fbc655b3f9..164c84f0d160e4 100644
--- a/packages/react-components/react-button/CHANGELOG.md
+++ b/packages/react-components/react-button/CHANGELOG.md
@@ -1,9 +1,86 @@
# Change Log - @fluentui/react-button
-This log was last generated on Wed, 03 Aug 2022 16:03:39 GMT and should not be manually modified.
+This log was last generated on Tue, 25 Oct 2022 00:35:29 GMT and should not be manually modified.
+## [9.1.6](https://github.com/microsoft/fluentui/tree/@fluentui/react-button_v9.1.6)
+
+Tue, 25 Oct 2022 00:35:29 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-button_v9.1.5..@fluentui/react-button_v9.1.6)
+
+### Patches
+
+- chore: Migrate to new package structure. ([PR #25336](https://github.com/microsoft/fluentui/pull/25336) by tristan.watanabe@gmail.com)
+
+## [9.1.5](https://github.com/microsoft/fluentui/tree/@fluentui/react-button_v9.1.5)
+
+Thu, 20 Oct 2022 08:39:27 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-button_v9.1.4..@fluentui/react-button_v9.1.5)
+
+### Patches
+
+- chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- fix: Fixing the styles of Buttons rendered as anchor tags. ([PR #25250](https://github.com/microsoft/fluentui/pull/25250) by makotom@microsoft.com)
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- Bump @fluentui/react-aria to v9.2.3 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-tabster to v9.2.0 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-theme to v9.1.1 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.1.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-button_v9.1.4)
+
+Thu, 13 Oct 2022 11:02:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-button_v9.1.3..@fluentui/react-button_v9.1.4)
+
+### Patches
+
+- chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- feat: Adding subtle transition between states on Button components. ([PR #25106](https://github.com/microsoft/fluentui/pull/25106) by makotom@microsoft.com)
+- Bump @fluentui/react-aria to v9.2.2 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-tabster to v9.1.3 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.1.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-button_v9.1.3)
+
+Mon, 03 Oct 2022 22:24:42 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-button_v9.1.2..@fluentui/react-button_v9.1.3)
+
+### Patches
+
+- Bump @fluentui/react-aria to v9.2.1 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+- Bump @fluentui/react-tabster to v9.1.2 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+
+## [9.1.2](https://github.com/microsoft/fluentui/tree/@fluentui/react-button_v9.1.2)
+
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-button_v9.1.1..@fluentui/react-button_v9.1.2)
+
+### Patches
+
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.1.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-button_v9.1.1)
+
+Thu, 15 Sep 2022 09:49:56 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-button_v9.1.0..@fluentui/react-button_v9.1.1)
+
+### Patches
+
+- fix: Adding 'aria-expanded=false' to collapsed MenuButtons. ([PR #24782](https://github.com/microsoft/fluentui/pull/24782) by humberto_makoto@hotmail.com)
+- chore: Remove max-width style from Button components. ([PR #24647](https://github.com/microsoft/fluentui/pull/24647) by makotom@microsoft.com)
+- chore: Cleaning up tokens in Button components so they better adhere to the design spec. ([PR #24732](https://github.com/microsoft/fluentui/pull/24732) by humberto_makoto@hotmail.com)
+- fix: Wrapping long text in Button components. ([PR #24682](https://github.com/microsoft/fluentui/pull/24682) by humberto_makoto@hotmail.com)
+- refactor: Replace useMergedEventCallbacks utility with mergeCallbacks ([PR #24152](https://github.com/microsoft/fluentui/pull/24152) by behowell@microsoft.com)
+- chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- Bump @fluentui/react-aria to v9.2.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-tabster to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.1.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-button_v9.1.0)
Wed, 03 Aug 2022 16:03:39 GMT
diff --git a/packages/react-components/react-button/src/components/Button/MIGRATION.md b/packages/react-components/react-button/docs/MIGRATION.md
similarity index 100%
rename from packages/react-components/react-button/src/components/Button/MIGRATION.md
rename to packages/react-components/react-button/docs/MIGRATION.md
diff --git a/packages/react-components/react-button/src/components/Button/SPEC.md b/packages/react-components/react-button/docs/SPEC.md
similarity index 100%
rename from packages/react-components/react-button/src/components/Button/SPEC.md
rename to packages/react-components/react-button/docs/SPEC.md
diff --git a/packages/react-components/react-button/package.json b/packages/react-components/react-button/package.json
index f792bb66eb6e76..3ea8c1b9585144 100644
--- a/packages/react-components/react-button/package.json
+++ b/packages/react-components/react-button/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/react-button",
- "version": "9.1.0",
+ "version": "9.1.6",
"description": "Fluent UI React Button component.",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -29,24 +29,24 @@
"@fluentui/a11y-testing": "^0.1.0",
"@fluentui/eslint-plugin": "*",
"@fluentui/react-conformance": "*",
- "@fluentui/react-conformance-griffel": "9.0.0-beta.12",
+ "@fluentui/react-conformance-griffel": "9.0.0-beta.16",
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
"@fluentui/keyboard-keys": "^9.0.0",
- "@fluentui/react-aria": "^9.1.0",
+ "@fluentui/react-aria": "^9.2.3",
"@fluentui/react-icons": "^2.0.175",
- "@fluentui/react-tabster": "^9.1.0",
- "@fluentui/react-theme": "^9.0.0",
- "@fluentui/react-utilities": "^9.0.2",
- "@griffel/react": "^1.3.0",
+ "@fluentui/react-tabster": "^9.2.0",
+ "@fluentui/react-theme": "^9.1.1",
+ "@fluentui/react-utilities": "^9.1.2",
+ "@griffel/react": "^1.4.1",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0"
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0"
},
"beachball": {
"disallowedChangeTypes": [
diff --git a/packages/react-components/react-button/src/components/Button/Button.test.tsx b/packages/react-components/react-button/src/components/Button/Button.test.tsx
index f5c6db9a5c44e7..4b8d33f545210a 100644
--- a/packages/react-components/react-button/src/components/Button/Button.test.tsx
+++ b/packages/react-components/react-button/src/components/Button/Button.test.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import { render } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { buttonAccessibilityBehaviorDefinition, validateBehavior, ComponentTestFacade } from '@fluentui/a11y-testing';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
import { Button } from './Button';
import { ButtonProps } from './Button.types';
diff --git a/packages/react-components/react-button/src/components/Button/useButtonStyles.ts b/packages/react-components/react-button/src/components/Button/useButtonStyles.ts
index 3d090064dfb690..148daa26a7d2d8 100644
--- a/packages/react-components/react-button/src/components/Button/useButtonStyles.ts
+++ b/packages/react-components/react-button/src/components/Button/useButtonStyles.ts
@@ -12,19 +12,22 @@ export const buttonClassNames: SlotClassNames = {
const iconSpacingVar = '--fui-Button__icon--spacing';
+const buttonSpacingSmall = '3px';
+const buttonSpacingMedium = '5px';
+
const useRootStyles = makeStyles({
// Base styles
base: {
alignItems: 'center',
+ boxSizing: 'border-box',
display: 'inline-flex',
justifyContent: 'center',
+ textDecorationLine: 'none',
verticalAlign: 'middle',
...shorthands.margin(0),
...shorthands.overflow('hidden'),
- textOverflow: 'ellipsis',
- whiteSpace: 'nowrap',
backgroundColor: tokens.colorNeutralBackground1,
color: tokens.colorNeutralForeground1,
@@ -65,6 +68,17 @@ const useRootStyles = makeStyles({
},
},
+ // Transition styles
+ transition: {
+ transitionDuration: '100ms',
+ transitionProperty: 'background, border, color',
+ transitionTimingFunction: 'cubic-bezier(0.33, 0, 0.67, 1)',
+
+ '@media screen and (prefers-reduced-motion: reduce)': {
+ transitionDuration: '0.01ms',
+ },
+ },
+
// High contrast styles
highContrast: {
'@media (forced-colors: active)': {
@@ -128,13 +142,13 @@ const useRootStyles = makeStyles({
':hover': {
backgroundColor: tokens.colorSubtleBackgroundHover,
...shorthands.borderColor('transparent'),
- color: tokens.colorNeutralForeground2BrandHover,
+ color: tokens.colorNeutralForeground2Hover,
},
':hover:active': {
backgroundColor: tokens.colorSubtleBackgroundPressed,
...shorthands.borderColor('transparent'),
- color: tokens.colorNeutralForeground2BrandPressed,
+ color: tokens.colorNeutralForeground2Pressed,
},
},
transparent: {
@@ -168,21 +182,19 @@ const useRootStyles = makeStyles({
// Size variations
small: {
- ...shorthands.padding(tokens.spacingVerticalNone, tokens.spacingHorizontalS),
+ ...shorthands.padding(buttonSpacingSmall, tokens.spacingHorizontalS),
- height: '24px',
minWidth: '64px',
- ...shorthands.borderRadius(tokens.borderRadiusMedium),
+ ...shorthands.borderRadius(buttonSpacingSmall),
fontSize: tokens.fontSizeBase200,
fontWeight: tokens.fontWeightRegular,
lineHeight: tokens.lineHeightBase200,
},
medium: {
- ...shorthands.padding(tokens.spacingVerticalNone, tokens.spacingHorizontalM),
+ ...shorthands.padding(buttonSpacingMedium, tokens.spacingHorizontalM),
- height: '32px',
minWidth: '96px',
...shorthands.borderRadius(tokens.borderRadiusMedium),
@@ -192,9 +204,8 @@ const useRootStyles = makeStyles({
lineHeight: tokens.lineHeightBase300,
},
large: {
- ...shorthands.padding(tokens.spacingVerticalNone, tokens.spacingHorizontalL),
+ ...shorthands.padding(tokens.spacingVerticalS, tokens.spacingHorizontalL),
- height: '40px',
minWidth: '96px',
...shorthands.borderRadius(tokens.borderRadiusMedium),
@@ -272,11 +283,11 @@ const useRootDisabledStyles = makeStyles({
backgroundColor: tokens.colorTransparentBackground,
':hover': {
- backgroundColor: tokens.colorTransparentBackgroundHover,
+ backgroundColor: tokens.colorTransparentBackground,
},
':hover:active': {
- backgroundColor: tokens.colorTransparentBackgroundPressed,
+ backgroundColor: tokens.colorTransparentBackground,
},
},
primary: {
@@ -294,30 +305,30 @@ const useRootDisabledStyles = makeStyles({
/* The secondary styles are exactly the same as the base styles. */
},
subtle: {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackground,
...shorthands.borderColor('transparent'),
':hover': {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackground,
...shorthands.borderColor('transparent'),
},
':hover:active': {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackground,
...shorthands.borderColor('transparent'),
},
},
transparent: {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackground,
...shorthands.borderColor('transparent'),
':hover': {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackground,
...shorthands.borderColor('transparent'),
},
':hover:active': {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackground,
...shorthands.borderColor('transparent'),
},
},
@@ -325,8 +336,8 @@ const useRootDisabledStyles = makeStyles({
const useRootFocusStyles = makeStyles({
base: createCustomFocusIndicatorStyle({
- ...shorthands.borderColor('transparent'),
- outlineColor: 'transparent',
+ ...shorthands.borderColor(tokens.colorTransparentStroke),
+ outlineColor: tokens.colorTransparentStroke,
outlineWidth: tokens.strokeWidthThick,
outlineStyle: 'solid',
boxShadow: `
@@ -418,6 +429,17 @@ const useIconStyles = makeStyles({
[iconSpacingVar]: tokens.spacingHorizontalSNudge,
},
+ // Appearance variations
+ subtle: {
+ ':hover': {
+ color: tokens.colorNeutralForeground2BrandHover,
+ },
+
+ ':hover:active': {
+ color: tokens.colorNeutralForeground2BrandPressed,
+ },
+ },
+
// Icon position variations
before: {
marginRight: `var(${iconSpacingVar})`,
@@ -441,6 +463,7 @@ export const useButtonStyles_unstable = (state: ButtonState): ButtonState => {
// Root styles
rootStyles.base,
+ rootStyles.transition,
rootStyles.highContrast,
appearance && rootStyles[appearance],
rootStyles[size],
@@ -469,6 +492,7 @@ export const useButtonStyles_unstable = (state: ButtonState): ButtonState => {
buttonClassNames.icon,
iconStyles.base,
state.root.children !== undefined && state.root.children !== null && iconStyles[iconPosition],
+ appearance === 'subtle' && iconStyles.subtle,
iconStyles[size],
state.icon.className,
);
diff --git a/packages/react-components/react-button/src/components/CompoundButton/CompoundButton.test.tsx b/packages/react-components/react-button/src/components/CompoundButton/CompoundButton.test.tsx
index 16995ef1d6aadb..aa97143d33339b 100644
--- a/packages/react-components/react-button/src/components/CompoundButton/CompoundButton.test.tsx
+++ b/packages/react-components/react-button/src/components/CompoundButton/CompoundButton.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { render } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
import { CompoundButton } from './CompoundButton';
import { CompoundButtonProps } from './CompoundButton.types';
diff --git a/packages/react-components/react-button/src/components/CompoundButton/useCompoundButtonStyles.ts b/packages/react-components/react-button/src/components/CompoundButton/useCompoundButtonStyles.ts
index c95d90d00cbc5f..b811f96e9b880c 100644
--- a/packages/react-components/react-button/src/components/CompoundButton/useCompoundButtonStyles.ts
+++ b/packages/react-components/react-button/src/components/CompoundButton/useCompoundButtonStyles.ts
@@ -81,13 +81,13 @@ const useRootStyles = makeStyles({
':hover': {
[`& .${compoundButtonClassNames.secondaryContent}`]: {
- color: tokens.colorNeutralForeground2BrandHover,
+ color: tokens.colorNeutralForeground2Hover,
},
},
':hover:active': {
[`& .${compoundButtonClassNames.secondaryContent}`]: {
- color: tokens.colorNeutralForeground2BrandPressed,
+ color: tokens.colorNeutralForeground2Pressed,
},
},
},
diff --git a/packages/react-components/react-button/src/components/MenuButton/MenuButton.test.tsx b/packages/react-components/react-button/src/components/MenuButton/MenuButton.test.tsx
index 4868d5ba482f34..c513929211a6f0 100644
--- a/packages/react-components/react-button/src/components/MenuButton/MenuButton.test.tsx
+++ b/packages/react-components/react-button/src/components/MenuButton/MenuButton.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { render } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
import { MenuButton } from './MenuButton';
import { MenuButtonProps } from './MenuButton.types';
import { menuButtonClassNames } from './useMenuButtonStyles';
diff --git a/packages/react-components/react-button/src/components/MenuButton/useMenuButton.tsx b/packages/react-components/react-button/src/components/MenuButton/useMenuButton.tsx
index 674a1481535c63..72c828ff06adfd 100644
--- a/packages/react-components/react-button/src/components/MenuButton/useMenuButton.tsx
+++ b/packages/react-components/react-button/src/components/MenuButton/useMenuButton.tsx
@@ -12,6 +12,8 @@ export const useMenuButton_unstable = (
ref: React.Ref,
): MenuButtonState => {
const buttonState = useButton_unstable(props, ref);
+ buttonState.root['aria-expanded'] = props['aria-expanded'] ?? false;
+
return {
// Button state
...buttonState,
diff --git a/packages/react-components/react-button/src/components/SplitButton/SplitButton.test.tsx b/packages/react-components/react-button/src/components/SplitButton/SplitButton.test.tsx
index e8fb53269a7239..a825cb7ea3b7c6 100644
--- a/packages/react-components/react-button/src/components/SplitButton/SplitButton.test.tsx
+++ b/packages/react-components/react-button/src/components/SplitButton/SplitButton.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { render } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
import { SplitButton } from './SplitButton';
import { SplitButtonProps } from './SplitButton.types';
diff --git a/packages/react-components/react-button/src/components/SplitButton/useSplitButtonStyles.ts b/packages/react-components/react-button/src/components/SplitButton/useSplitButtonStyles.ts
index 28451982af625c..f0e51476fa0b59 100644
--- a/packages/react-components/react-button/src/components/SplitButton/useSplitButtonStyles.ts
+++ b/packages/react-components/react-button/src/components/SplitButton/useSplitButtonStyles.ts
@@ -50,18 +50,18 @@ const useRootStyles = makeStyles({
},
primary: {
[`& .${splitButtonClassNames.primaryActionButton}`]: {
- borderRightColor: tokens.colorNeutralForegroundInverted,
+ borderRightColor: tokens.colorNeutralForegroundOnBrand,
},
':hover': {
[`& .${splitButtonClassNames.primaryActionButton}`]: {
- borderRightColor: tokens.colorNeutralForegroundInverted,
+ borderRightColor: tokens.colorNeutralForegroundOnBrand,
},
},
':hover:active': {
[`& .${splitButtonClassNames.primaryActionButton}`]: {
- borderRightColor: tokens.colorNeutralForegroundInverted,
+ borderRightColor: tokens.colorNeutralForegroundOnBrand,
},
},
},
@@ -70,7 +70,7 @@ const useRootStyles = makeStyles({
},
subtle: {
[`& .${splitButtonClassNames.primaryActionButton}`]: {
- borderRightColor: tokens.colorNeutralStroke1Hover,
+ borderRightColor: tokens.colorNeutralStroke1,
},
':hover': {
@@ -81,13 +81,13 @@ const useRootStyles = makeStyles({
':hover:active': {
[`& .${splitButtonClassNames.primaryActionButton}`]: {
- borderRightColor: tokens.colorNeutralStroke1Hover,
+ borderRightColor: tokens.colorNeutralStroke1Pressed,
},
},
},
transparent: {
[`& .${splitButtonClassNames.primaryActionButton}`]: {
- borderRightColor: tokens.colorNeutralStroke1Hover,
+ borderRightColor: tokens.colorNeutralStroke1,
},
':hover': {
@@ -98,7 +98,7 @@ const useRootStyles = makeStyles({
':hover:active': {
[`& .${splitButtonClassNames.primaryActionButton}`]: {
- borderRightColor: tokens.colorNeutralStroke1Hover,
+ borderRightColor: tokens.colorNeutralStroke1Pressed,
},
},
},
diff --git a/packages/react-components/react-button/src/components/ToggleButton/ToggleButton.test.tsx b/packages/react-components/react-button/src/components/ToggleButton/ToggleButton.test.tsx
index 30e69ac356b485..fbe06b821a30d5 100644
--- a/packages/react-components/react-button/src/components/ToggleButton/ToggleButton.test.tsx
+++ b/packages/react-components/react-button/src/components/ToggleButton/ToggleButton.test.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import { render } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { validateBehavior, ComponentTestFacade, toggleButtonBehaviorDefinition } from '@fluentui/a11y-testing';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
import { ToggleButton } from './ToggleButton';
import { ToggleButtonProps } from './ToggleButton.types';
diff --git a/packages/react-components/react-button/src/components/ToggleButton/useToggleButtonStyles.ts b/packages/react-components/react-button/src/components/ToggleButton/useToggleButtonStyles.ts
index d0b2b77b39e78a..f127fb1bf010e3 100644
--- a/packages/react-components/react-button/src/components/ToggleButton/useToggleButtonStyles.ts
+++ b/packages/react-components/react-button/src/components/ToggleButton/useToggleButtonStyles.ts
@@ -111,18 +111,18 @@ const useCheckedStyles = makeStyles({
subtle: {
backgroundColor: tokens.colorSubtleBackgroundSelected,
...shorthands.borderColor('transparent'),
- color: tokens.colorNeutralForeground2BrandSelected,
+ color: tokens.colorNeutralForeground2Selected,
':hover': {
backgroundColor: tokens.colorSubtleBackgroundHover,
...shorthands.borderColor('transparent'),
- color: tokens.colorNeutralForeground2BrandHover,
+ color: tokens.colorNeutralForeground2Hover,
},
':hover:active': {
backgroundColor: tokens.colorSubtleBackgroundPressed,
...shorthands.borderColor('transparent'),
- color: tokens.colorNeutralForeground2BrandPressed,
+ color: tokens.colorNeutralForeground2Pressed,
},
},
transparent: {
@@ -183,38 +183,54 @@ const useDisabledStyles = makeStyles({
/* The secondary styles are exactly the same as the base styles. */
},
subtle: {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackground,
...shorthands.borderColor('transparent'),
':hover': {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackgroundHover,
...shorthands.borderColor('transparent'),
},
':hover:active': {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackgroundPressed,
...shorthands.borderColor('transparent'),
},
},
transparent: {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackground,
...shorthands.borderColor('transparent'),
':hover': {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackgroundHover,
...shorthands.borderColor('transparent'),
},
':hover:active': {
- backgroundColor: 'transparent',
+ backgroundColor: tokens.colorTransparentBackgroundPressed,
...shorthands.borderColor('transparent'),
},
},
});
+const useIconStyles = makeStyles({
+ // Appearance variations
+ subtle: {
+ color: tokens.colorNeutralForeground2BrandSelected,
+
+ ':hover': {
+ color: tokens.colorNeutralForeground2BrandHover,
+ },
+
+ ':hover:active': {
+ color: tokens.colorNeutralForeground2BrandPressed,
+ },
+ },
+});
+
export const useToggleButtonStyles_unstable = (state: ToggleButtonState): ToggleButtonState => {
const checkedStyles = useCheckedStyles();
const disabledStyles = useDisabledStyles();
+ const iconStyles = useIconStyles();
const { appearance, checked, disabled, disabledFocusable } = state;
@@ -235,7 +251,11 @@ export const useToggleButtonStyles_unstable = (state: ToggleButtonState): Toggle
);
if (state.icon) {
- state.icon.className = mergeClasses(toggleButtonClassNames.icon, state.icon.className);
+ state.icon.className = mergeClasses(
+ toggleButtonClassNames.icon,
+ appearance === 'subtle' && iconStyles.subtle,
+ state.icon.className,
+ );
}
useButtonStyles_unstable(state);
diff --git a/packages/react-components/react-button/src/stories/Button/ButtonAppearance.stories.tsx b/packages/react-components/react-button/src/stories/Button/ButtonAppearance.stories.tsx
deleted file mode 100644
index 939aff7d783c89..00000000000000
--- a/packages/react-components/react-button/src/stories/Button/ButtonAppearance.stories.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import * as React from 'react';
-import { Button } from '@fluentui/react-components';
-
-export const Appearance = () => (
- <>
- Default
- Primary
- Outline
- Subtle
- Transparent
- >
-);
-Appearance.parameters = {
- docs: {
- description: {
- story:
- '- `(undefined)`: the button appears with the default style\n' +
- '- `primary`: emphasizes the button as a primary action.\n' +
- '- `outline`: removes background styling.\n' +
- '- `subtle`: minimizes emphasis to blend into the background until hovered or focused\n' +
- '- `transparent`: removes background and border styling.\n',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/Button/ButtonDefault.stories.tsx b/packages/react-components/react-button/src/stories/Button/ButtonDefault.stories.tsx
deleted file mode 100644
index 6ab9d7d7636b9e..00000000000000
--- a/packages/react-components/react-button/src/stories/Button/ButtonDefault.stories.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import * as React from 'react';
-import { Button } from '@fluentui/react-components';
-import type { ButtonProps } from '@fluentui/react-components';
-
-export const Default = (props: ButtonProps) => {
- return Example ;
-};
diff --git a/packages/react-components/react-button/src/stories/Button/ButtonDisabled.stories.tsx b/packages/react-components/react-button/src/stories/Button/ButtonDisabled.stories.tsx
deleted file mode 100644
index 9bafdb0fc7699d..00000000000000
--- a/packages/react-components/react-button/src/stories/Button/ButtonDisabled.stories.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import * as React from 'react';
-import { Button } from '@fluentui/react-components';
-
-export const Disabled = () => {
- const groupStyles: React.CSSProperties = { display: 'flex', flexWrap: 'wrap', gap: '0.5em' };
-
- return (
- <>
-
- Enabled state
- Disabled state
- Disabled focusable state
-
-
- Enabled state
-
- Disabled state
-
-
- Disabled focusable state
-
-
- >
- );
-};
-
-Disabled.parameters = {
- docs: {
- description: {
- story: `A button can be \`disabled\` or \`disabledFocusable\`.
- \`disabledFocusable\` is used in scenarios where it is important to keep a consistent tab order
- for screen reader and keyboard users. The primary example of this pattern is when
- the disabled button is in a menu or a commandbar and is seldom used for standalone buttons.`,
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/Button/ButtonIcon.stories.tsx b/packages/react-components/react-button/src/stories/Button/ButtonIcon.stories.tsx
deleted file mode 100644
index 43a5ccb0dae077..00000000000000
--- a/packages/react-components/react-button/src/stories/Button/ButtonIcon.stories.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import * as React from 'react';
-import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { Button, Tooltip } from '@fluentui/react-components';
-
-const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
-
-export const Icon = () => (
- <>
- }>With calendar icon before contents
- } iconPosition="after">
- With calendar icon after contents
-
-
- } />
-
- >
-);
-Icon.parameters = {
- docs: {
- description: {
- story:
- 'Button has an `icon` slot that, if specified, renders an icon either `before` or `after` the children, ' +
- 'as specified by the `iconPosition` prop.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/Button/ButtonShape.stories.tsx b/packages/react-components/react-button/src/stories/Button/ButtonShape.stories.tsx
deleted file mode 100644
index d8fc1f5e8c1550..00000000000000
--- a/packages/react-components/react-button/src/stories/Button/ButtonShape.stories.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import * as React from 'react';
-import { Button } from '@fluentui/react-components';
-
-export const Shape = () => (
- <>
- Rounded
- Circular
- Square
- >
-);
-
-Shape.parameters = {
- docs: {
- description: {
- story: 'A button can be rounded, circular, or square.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/Button/ButtonSize.stories.tsx b/packages/react-components/react-button/src/stories/Button/ButtonSize.stories.tsx
deleted file mode 100644
index 33f533d7868efb..00000000000000
--- a/packages/react-components/react-button/src/stories/Button/ButtonSize.stories.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import * as React from 'react';
-import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { Button, Tooltip } from '@fluentui/react-components';
-
-const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
-
-export const Size = () => {
- const groupStyles: React.CSSProperties = { display: 'flex', flexWrap: 'wrap', gap: '0.5em' };
- const headerStyles: React.CSSProperties = { width: '100%', margin: 0 };
-
- return (
- <>
-
-
small
- Small
- }>
- Small with calendar icon
-
-
- } />
-
-
-
-
medium
- Medium
- }>Medium with calendar icon
-
- } />
-
-
-
-
large
- Large
- }>
- Large with calendar icon
-
-
- } />
-
-
- >
- );
-};
-Size.parameters = {
- docs: {
- description: {
- story: 'A button supports `small`, `medium` and `large` size. Default size is `medium`.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/Button/ButtonWithLongText.stories.tsx b/packages/react-components/react-button/src/stories/Button/ButtonWithLongText.stories.tsx
deleted file mode 100644
index de462db25da2ed..00000000000000
--- a/packages/react-components/react-button/src/stories/Button/ButtonWithLongText.stories.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import * as React from 'react';
-import { Button } from '@fluentui/react-components';
-
-export const WithLongText = () => (
- <>
- Short text
- Long text truncates after it hits the max width of the component
- >
-);
-WithLongText.parameters = {
- docs: {
- description: {
- story: 'Text truncates after it hits the max width of the component.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/Button/index.stories.tsx b/packages/react-components/react-button/src/stories/Button/index.stories.tsx
deleted file mode 100644
index 4e77c33988580b..00000000000000
--- a/packages/react-components/react-button/src/stories/Button/index.stories.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import * as React from 'react';
-import { Meta } from '@storybook/react';
-import { Button } from '@fluentui/react-components';
-import descriptionMd from './ButtonDescription.md';
-import bestPracticesMd from './ButtonBestPractices.md';
-
-export { Default } from './ButtonDefault.stories';
-export { Shape } from './ButtonShape.stories';
-export { Appearance } from './ButtonAppearance.stories';
-export { Icon } from './ButtonIcon.stories';
-export { Size } from './ButtonSize.stories';
-export { Disabled } from './ButtonDisabled.stories';
-export { WithLongText } from './ButtonWithLongText.stories';
-
-export default {
- title: 'Components/Button/Button',
- component: Button,
- parameters: {
- docs: {
- description: {
- component: [descriptionMd, bestPracticesMd].join('\n'),
- },
- },
- },
- decorators: [
- Story => (
-
-
-
- ),
- ],
-} as Meta;
diff --git a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonAppearance.stories.tsx b/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonAppearance.stories.tsx
deleted file mode 100644
index e0a950002bbecc..00000000000000
--- a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonAppearance.stories.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import * as React from 'react';
-import { CompoundButton } from '@fluentui/react-components';
-
-export const Appearance = () => (
- <>
- Default
-
- Primary
-
-
- Outline
-
-
- Subtle
-
-
- Transparent
-
- >
-);
-Appearance.parameters = {
- docs: {
- description: {
- story:
- '- `(undefined)`: the compound button appears with the default style\n' +
- '- `primary`: emphasizes the compound button as a primary action.\n' +
- '- `outline`: removes background styling.\n' +
- '- `subtle`: minimizes emphasis to blend into the background until hovered or focused\n' +
- '- `transparent`: removes background and border styling.\n',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonDefault.stories.tsx b/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonDefault.stories.tsx
deleted file mode 100644
index fe400ecd715071..00000000000000
--- a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonDefault.stories.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import * as React from 'react';
-import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { CompoundButton } from '@fluentui/react-components';
-import type { CompoundButtonProps } from '@fluentui/react-components';
-
-const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
-
-export const Default = (props: CompoundButtonProps) => {
- return (
- } secondaryContent="Secondary content" {...props}>
- Example
-
- );
-};
diff --git a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonIcon.stories.tsx b/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonIcon.stories.tsx
deleted file mode 100644
index 8d9b7107fff4a3..00000000000000
--- a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonIcon.stories.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import * as React from 'react';
-import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { CompoundButton, Tooltip } from '@fluentui/react-components';
-
-const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
-
-export const Icon = () => (
- <>
- }>
- With calendar icon before contents
-
- } iconPosition="after">
- With calendar icon after contents
-
-
- } />
-
- >
-);
-Icon.parameters = {
- docs: {
- description: {
- story:
- 'The CompoundButton has an `icon` slot that, if specified, renders an icon either `before` ' +
- 'or `after` the children, as specified by the `iconPosition` prop.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonShape.stories.tsx b/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonShape.stories.tsx
deleted file mode 100644
index 8e96a62f0dbf19..00000000000000
--- a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonShape.stories.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import * as React from 'react';
-import { CompoundButton } from '@fluentui/react-components';
-
-export const Shape = () => (
- <>
- Rounded
-
- Circular
-
-
- Square
-
- >
-);
-
-Shape.parameters = {
- docs: {
- description: {
- story: 'A compound button can be rounded, circular, or square.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonWithLongText.stories.tsx b/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonWithLongText.stories.tsx
deleted file mode 100644
index 6afe7cfc8b64d1..00000000000000
--- a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonWithLongText.stories.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import * as React from 'react';
-import { makeStyles, CompoundButton } from '@fluentui/react-components';
-
-const useStyles = makeStyles({
- maxWidth: {
- maxWidth: '280px',
- },
-});
-
-export const WithLongText = () => {
- const styles = useStyles();
-
- return (
- <>
-
- Short text
-
-
- Long text truncates after it hits the max width of the component
-
- >
- );
-};
-WithLongText.parameters = {
- docs: {
- description: {
- story: 'Text truncates after it hits the max width of the component.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/CompoundButton/index.stories.tsx b/packages/react-components/react-button/src/stories/CompoundButton/index.stories.tsx
deleted file mode 100644
index 2ef08701574040..00000000000000
--- a/packages/react-components/react-button/src/stories/CompoundButton/index.stories.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import * as React from 'react';
-import { Meta } from '@storybook/react';
-import { CompoundButton } from '@fluentui/react-components';
-import descriptionMd from './CompoundButtonDescription.md';
-import bestPracticesMd from '../Button/ButtonBestPractices.md';
-
-export { Default } from './CompoundButtonDefault.stories';
-export { Shape } from './CompoundButtonShape.stories';
-export { Appearance } from './CompoundButtonAppearance.stories';
-export { Icon } from './CompoundButtonIcon.stories';
-export { Size } from './CompoundButtonSize.stories';
-export { Disabled } from './CompoundButtonDisabled.stories';
-export { WithLongText } from './CompoundButtonWithLongText.stories';
-
-export default {
- title: 'Components/Button/CompoundButton',
- component: CompoundButton,
- parameters: {
- docs: {
- description: {
- component: [descriptionMd, bestPracticesMd].join('\n'),
- },
- },
- },
- decorators: [
- Story => (
-
-
-
- ),
- ],
-} as Meta;
diff --git a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonAppearance.stories.tsx b/packages/react-components/react-button/src/stories/MenuButton/MenuButtonAppearance.stories.tsx
deleted file mode 100644
index 52aa49a5590ebc..00000000000000
--- a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonAppearance.stories.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import * as React from 'react';
-import { Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
-
-export const Appearance = () => (
- <>
-
-
- Default
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- Primary
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- Outline
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- Subtle
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- Transparent
-
-
-
-
- Item a
- Item b
-
-
-
- >
-);
-Appearance.parameters = {
- docs: {
- description: {
- story:
- '- `(undefined)`: the menu button appears with the default style\n' +
- '- `primary`: emphasizes the menu button as a primary action.\n' +
- '- `outline`: removes background styling.\n' +
- '- `subtle`: minimizes emphasis to blend into the background until hovered or focused\n' +
- '- `transparent`: removes background and border styling.\n',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonDefault.stories.tsx b/packages/react-components/react-button/src/stories/MenuButton/MenuButtonDefault.stories.tsx
deleted file mode 100644
index 7ea9621a9a5b89..00000000000000
--- a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonDefault.stories.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import * as React from 'react';
-import { Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
-
-export const Default = () => {
- return (
-
-
- Example
-
-
-
-
- Item a
- Item b
-
-
-
- );
-};
diff --git a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonShape.stories.tsx b/packages/react-components/react-button/src/stories/MenuButton/MenuButtonShape.stories.tsx
deleted file mode 100644
index 979e18e02eb74d..00000000000000
--- a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonShape.stories.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import * as React from 'react';
-import { Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
-
-export const Shape = () => (
- <>
-
-
- Rounded
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- Circular
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- Square
-
-
-
-
- Item a
- Item b
-
-
-
- >
-);
-
-Shape.parameters = {
- docs: {
- description: {
- story: 'A menu button can be rounded, circular, or square.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSize.stories.tsx b/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSize.stories.tsx
deleted file mode 100644
index 7721725d93bc23..00000000000000
--- a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSize.stories.tsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import * as React from 'react';
-import { Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
-
-export const Size = () => {
- return (
- <>
-
-
- Size: small
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- Size: medium
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- Size: large
-
-
-
-
- Item a
- Item b
-
-
-
- >
- );
-};
-
-Size.parameters = {
- docs: {
- description: {
- story: 'MenuButton supports `small`, `medium` and `large` size. Default size is `medium`.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSizeLarge.stories.tsx b/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSizeLarge.stories.tsx
deleted file mode 100644
index 9240900789e267..00000000000000
--- a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSizeLarge.stories.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import * as React from 'react';
-import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger, Tooltip } from '@fluentui/react-components';
-
-const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
-
-export const SizeLarge = () => {
- return (
- <>
-
-
- Large
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- } size="large">
- Large with calendar icon
-
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
-
- } size="large" />
-
-
-
-
-
- Item a
- Item b
-
-
-
- >
- );
-};
-
-SizeLarge.storyName = 'Size: large';
diff --git a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSizeMedium.stories.tsx b/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSizeMedium.stories.tsx
deleted file mode 100644
index a6b86a0bfc640f..00000000000000
--- a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSizeMedium.stories.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import * as React from 'react';
-import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger, Tooltip } from '@fluentui/react-components';
-
-const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
-
-export const SizeMedium = () => {
- return (
- <>
-
-
- Medium
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- } size="medium">
- Medium with calendar icon
-
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
-
- } size="medium" />
-
-
-
-
-
- Item a
- Item b
-
-
-
- >
- );
-};
-
-SizeMedium.storyName = 'Size: medium';
diff --git a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSizeSmall.stories.tsx b/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSizeSmall.stories.tsx
deleted file mode 100644
index 96201ced9ef54f..00000000000000
--- a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonSizeSmall.stories.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import * as React from 'react';
-import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger, Tooltip } from '@fluentui/react-components';
-
-const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
-
-export const SizeSmall = () => {
- return (
- <>
-
-
- Small
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- } size="small">
- Small with calendar icon
-
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
-
- } size="small" />
-
-
-
-
-
- Item a
- Item b
-
-
-
- >
- );
-};
-
-SizeSmall.storyName = 'Size: small';
diff --git a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonWithLongText.stories.tsx b/packages/react-components/react-button/src/stories/MenuButton/MenuButtonWithLongText.stories.tsx
deleted file mode 100644
index 98a615017c6749..00000000000000
--- a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonWithLongText.stories.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import * as React from 'react';
-import { Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
-
-export const WithLongText = () => (
- <>
-
-
- Short text
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- Long text truncates after it hits the max width of the component
-
-
-
-
- Item a
- Item b
-
-
-
- >
-);
-WithLongText.parameters = {
- docs: {
- description: {
- story: 'Text truncates after it hits the max width of the component.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/MenuButton/index.stories.tsx b/packages/react-components/react-button/src/stories/MenuButton/index.stories.tsx
deleted file mode 100644
index 07e0832f0cb4c1..00000000000000
--- a/packages/react-components/react-button/src/stories/MenuButton/index.stories.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import * as React from 'react';
-import { Meta } from '@storybook/react';
-import { MenuButton } from '@fluentui/react-components';
-import descriptionMd from './MenuButtonDescription.md';
-import bestPracticesMd from '../Button/ButtonBestPractices.md';
-
-export { Default } from './MenuButtonDefault.stories';
-export { Shape } from './MenuButtonShape.stories';
-export { Appearance } from './MenuButtonAppearance.stories';
-export { Icon } from './MenuButtonIcon.stories';
-export { Size } from './MenuButtonSize.stories';
-export { SizeSmall } from './MenuButtonSizeSmall.stories';
-export { SizeMedium } from './MenuButtonSizeMedium.stories';
-export { SizeLarge } from './MenuButtonSizeLarge.stories';
-export { Disabled } from './MenuButtonDisabled.stories';
-export { WithLongText } from './MenuButtonWithLongText.stories';
-
-export default {
- title: 'Components/Button/MenuButton',
- component: MenuButton,
- parameters: {
- docs: {
- description: {
- component: [descriptionMd, bestPracticesMd].join('\n'),
- },
- },
- },
- decorators: [
- Story => (
-
-
-
- ),
- ],
-} as Meta;
diff --git a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonAppearance.stories.tsx b/packages/react-components/react-button/src/stories/SplitButton/SplitButtonAppearance.stories.tsx
deleted file mode 100644
index 4804ea229efc5b..00000000000000
--- a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonAppearance.stories.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-import * as React from 'react';
-import { Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton } from '@fluentui/react-components';
-import type { MenuButtonProps } from '@fluentui/react-components';
-
-export const Appearance = () => (
- <>
-
-
- {(triggerProps: MenuButtonProps) => Default }
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- {(triggerProps: MenuButtonProps) => (
-
- Primary
-
- )}
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- {(triggerProps: MenuButtonProps) => (
-
- Outline
-
- )}
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- {(triggerProps: MenuButtonProps) => (
-
- Subtle
-
- )}
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- {(triggerProps: MenuButtonProps) => (
-
- Transparent
-
- )}
-
-
-
-
- Item a
- Item b
-
-
-
- >
-);
-Appearance.parameters = {
- docs: {
- description: {
- story:
- '- `(undefined)`: the split button appears with the default style\n' +
- '- `primary`: emphasizes the split button as a primary action.\n' +
- '- `outline`: removes background styling.\n' +
- '- `subtle`: minimizes emphasis to blend into the background until hovered or focused\n' +
- '- `transparent`: removes background and border styling.\n',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonDefault.stories.tsx b/packages/react-components/react-button/src/stories/SplitButton/SplitButtonDefault.stories.tsx
deleted file mode 100644
index f29ef713c54d86..00000000000000
--- a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonDefault.stories.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import * as React from 'react';
-import { Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton } from '@fluentui/react-components';
-import type { MenuButtonProps } from '@fluentui/react-components';
-
-export const Default = () => {
- return (
-
-
- {(triggerProps: MenuButtonProps) => Example }
-
-
-
-
- Item a
- Item b
-
-
-
- );
-};
diff --git a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonShape.stories.tsx b/packages/react-components/react-button/src/stories/SplitButton/SplitButtonShape.stories.tsx
deleted file mode 100644
index 72a5c6ab82424b..00000000000000
--- a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonShape.stories.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import * as React from 'react';
-import { Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton } from '@fluentui/react-components';
-import type { MenuButtonProps } from '@fluentui/react-components';
-
-export const Shape = () => (
- <>
-
-
- {(triggerProps: MenuButtonProps) => Rounded }
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- {(triggerProps: MenuButtonProps) => (
-
- Circular
-
- )}
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- {(triggerProps: MenuButtonProps) => (
-
- Square
-
- )}
-
-
-
-
- Item a
- Item b
-
-
-
- >
-);
-
-Shape.parameters = {
- docs: {
- description: {
- story: 'A split button can be rounded, circular, or square.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonWithLongText.stories.tsx b/packages/react-components/react-button/src/stories/SplitButton/SplitButtonWithLongText.stories.tsx
deleted file mode 100644
index 5149a6544f6729..00000000000000
--- a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonWithLongText.stories.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import * as React from 'react';
-import { Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton } from '@fluentui/react-components';
-import type { MenuButtonProps } from '@fluentui/react-components';
-
-export const WithLongText = () => (
- <>
-
-
- {(triggerProps: MenuButtonProps) => Short text }
-
-
-
-
- Item a
- Item b
-
-
-
-
-
-
- {(triggerProps: MenuButtonProps) => (
-
- Long text truncates after it hits the max width of the component
-
- )}
-
-
-
-
- Item a
- Item b
-
-
-
- >
-);
-WithLongText.parameters = {
- docs: {
- description: {
- story: 'Text truncates after it hits the max width of the component.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/SplitButton/index.stories.tsx b/packages/react-components/react-button/src/stories/SplitButton/index.stories.tsx
deleted file mode 100644
index 620fe13b36f95d..00000000000000
--- a/packages/react-components/react-button/src/stories/SplitButton/index.stories.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import * as React from 'react';
-import { Meta } from '@storybook/react';
-import { SplitButton } from '@fluentui/react-components';
-import descriptionMd from './SplitButtonDescription.md';
-import bestPracticesMd from '../Button/ButtonBestPractices.md';
-
-export { Default } from './SplitButtonDefault.stories';
-export { Shape } from './SplitButtonShape.stories';
-export { Appearance } from './SplitButtonAppearance.stories';
-export { Icon } from './SplitButtonIcon.stories';
-export { Size } from './SplitButtonSize.stories';
-export { SizeSmall } from './SplitButtonSizeSmall.stories';
-export { SizeMedium } from './SplitButtonSizeMedium.stories';
-export { SizeLarge } from './SplitButtonSizeLarge.stories';
-export { Disabled } from './SplitButtonDisabled.stories';
-export { WithLongText } from './SplitButtonWithLongText.stories';
-
-export default {
- title: 'Components/Button/SplitButton',
- component: SplitButton,
- parameters: {
- docs: {
- description: {
- component: [descriptionMd, bestPracticesMd].join('\n'),
- },
- },
- },
- decorators: [
- Story => (
-
-
-
- ),
- ],
-} as Meta;
diff --git a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonAppearance.stories.tsx b/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonAppearance.stories.tsx
deleted file mode 100644
index 1356c889b49c0f..00000000000000
--- a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonAppearance.stories.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import * as React from 'react';
-import { ToggleButton } from '@fluentui/react-components';
-
-export const Appearance = () => (
- <>
- Default
- Primary
- Outline
- Subtle
- Transparent
- >
-);
-Appearance.parameters = {
- docs: {
- description: {
- story:
- '- `(undefined)`: the toggle button appears with the default style\n' +
- '- `primary`: emphasizes the toggle button as a primary action.\n' +
- '- `outline`: removes background styling.\n' +
- '- `subtle`: minimizes emphasis to blend into the background until hovered or focused\n' +
- '- `transparent`: removes background and border styling.\n',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonChecked.stories.tsx b/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonChecked.stories.tsx
deleted file mode 100644
index 28290c9ed00c85..00000000000000
--- a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonChecked.stories.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import * as React from 'react';
-import { ToggleButton } from '@fluentui/react-components';
-
-export const Checked = () => (
- <>
- Controlled checked state
-
- Controlled unchecked state
- >
-);
-Checked.parameters = {
- docs: {
- description: {
- story: `A toggle button can be checked or unchecked. Unchecked is default.
- If a checked value is given, the button is 'controlled' and will only change state when the
- props value changes.`,
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonDefault.stories.tsx b/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonDefault.stories.tsx
deleted file mode 100644
index 429df08b41f212..00000000000000
--- a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonDefault.stories.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import * as React from 'react';
-import { ToggleButton } from '@fluentui/react-components';
-import type { ToggleButtonProps } from '@fluentui/react-components';
-
-export const Default = (props: ToggleButtonProps) => {
- return Example ;
-};
diff --git a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonDisabled.stories.tsx b/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonDisabled.stories.tsx
deleted file mode 100644
index 07c717ac838af5..00000000000000
--- a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonDisabled.stories.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import * as React from 'react';
-import { ToggleButton } from '@fluentui/react-components';
-
-export const Disabled = () => {
- const groupStyles: React.CSSProperties = { display: 'flex', flexWrap: 'wrap', gap: '0.5em' };
-
- return (
- <>
-
- Enabled state
- Disabled state
- Disabled focusable state
-
-
- Enabled state
-
- Disabled state
-
-
- Disabled focusable state
-
-
- >
- );
-};
-
-Disabled.parameters = {
- docs: {
- description: {
- story: `A toggle button can be \`disabled\` or \`disabledFocusable\`.
- \`disabledFocusable\` is used in scenarios where it is important to keep a consistent tab order
- for screen reader and keyboard users. The primary example of this pattern is when
- the disabled toggle button is in a menu or a commandbar and is seldom used for standalone buttons.`,
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonIcon.stories.tsx b/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonIcon.stories.tsx
deleted file mode 100644
index df2fc4813a0f9f..00000000000000
--- a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonIcon.stories.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import * as React from 'react';
-import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { ToggleButton, Tooltip } from '@fluentui/react-components';
-
-const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
-
-export const Icon = () => (
- <>
- }>With calendar icon before contents
- } iconPosition="after">
- With calendar icon after contents
-
-
- } aria-label="Icon only" />
-
- >
-);
-Icon.parameters = {
- docs: {
- description: {
- story:
- 'The ToggleButton has an `icon` slot that, if specified, renders an icon either `before` ' +
- 'or `after` the children, as specified by the `iconPosition` prop.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonShape.stories.tsx b/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonShape.stories.tsx
deleted file mode 100644
index b03e5734f16160..00000000000000
--- a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonShape.stories.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import * as React from 'react';
-import { ToggleButton } from '@fluentui/react-components';
-
-export const Shape = () => (
- <>
- Rounded
- Circular
- Square
- >
-);
-
-Shape.parameters = {
- docs: {
- description: {
- story: 'A toggle button can be rounded, circular, or square.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonSize.stories.tsx b/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonSize.stories.tsx
deleted file mode 100644
index de9393061dc890..00000000000000
--- a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonSize.stories.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import * as React from 'react';
-import { ToggleButton } from '@fluentui/react-components';
-
-export const Size = () => {
- return (
- <>
- Size: small
- Size: medium
- Size: large
- >
- );
-};
-
-Size.parameters = {
- docs: {
- description: {
- story: 'A toggle button supports `small`, `medium` and `large` size. Default size is `medium`.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonWithLongText.stories.tsx b/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonWithLongText.stories.tsx
deleted file mode 100644
index 50017f73f2f059..00000000000000
--- a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonWithLongText.stories.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import * as React from 'react';
-import { ToggleButton } from '@fluentui/react-components';
-
-export const WithLongText = () => (
- <>
- Short text
- Long text truncates after it hits the max width of the component
- >
-);
-WithLongText.parameters = {
- docs: {
- description: {
- story: 'Text truncates after it hits the max width theme of the component.',
- },
- },
-};
diff --git a/packages/react-components/react-button/src/stories/ToggleButton/index.stories.tsx b/packages/react-components/react-button/src/stories/ToggleButton/index.stories.tsx
deleted file mode 100644
index 312b6c5c1e98dc..00000000000000
--- a/packages/react-components/react-button/src/stories/ToggleButton/index.stories.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import * as React from 'react';
-import { Meta } from '@storybook/react';
-import { ToggleButton } from '@fluentui/react-components';
-import descriptionMd from './ToggleButtonDescription.md';
-import bestPracticesMd from '../Button/ButtonBestPractices.md';
-
-export { Default } from './ToggleButtonDefault.stories';
-export { Shape } from './ToggleButtonShape.stories';
-export { Appearance } from './ToggleButtonAppearance.stories';
-export { Icon } from './ToggleButtonIcon.stories';
-export { Size } from './ToggleButtonSize.stories';
-export { Disabled } from './ToggleButtonDisabled.stories';
-export { Checked } from './ToggleButtonChecked.stories';
-export { WithLongText } from './ToggleButtonWithLongText.stories';
-
-export default {
- title: 'Components/Button/ToggleButton',
- component: ToggleButton,
- parameters: {
- docs: {
- description: {
- component: [descriptionMd, bestPracticesMd].join('\n'),
- },
- },
- },
- decorators: [
- Story => (
-
-
-
- ),
- ],
-} as Meta;
diff --git a/packages/react-components/react-button/src/common/isConformant.ts b/packages/react-components/react-button/src/testing/isConformant.ts
similarity index 100%
rename from packages/react-components/react-button/src/common/isConformant.ts
rename to packages/react-components/react-button/src/testing/isConformant.ts
diff --git a/packages/react-components/react-button/stories/Button/ButtonAppearance.stories.tsx b/packages/react-components/react-button/stories/Button/ButtonAppearance.stories.tsx
new file mode 100644
index 00000000000000..031f42cd9fe554
--- /dev/null
+++ b/packages/react-components/react-button/stories/Button/ButtonAppearance.stories.tsx
@@ -0,0 +1,36 @@
+import * as React from 'react';
+import { makeStyles, Button } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Appearance = () => {
+ const styles = useStyles();
+
+ return (
+
+ Default
+ Primary
+ Outline
+ Subtle
+ Transparent
+
+ );
+};
+
+Appearance.parameters = {
+ docs: {
+ description: {
+ story:
+ '- `(undefined)`: the button appears with the default style\n' +
+ '- `primary`: emphasizes the button as a primary action.\n' +
+ '- `outline`: removes background styling.\n' +
+ '- `subtle`: minimizes emphasis to blend into the background until hovered or focused\n' +
+ '- `transparent`: removes background and border styling.\n',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/src/stories/Button/ButtonBestPractices.md b/packages/react-components/react-button/stories/Button/ButtonBestPractices.md
similarity index 100%
rename from packages/react-components/react-button/src/stories/Button/ButtonBestPractices.md
rename to packages/react-components/react-button/stories/Button/ButtonBestPractices.md
diff --git a/packages/react-components/react-button/stories/Button/ButtonDefault.stories.tsx b/packages/react-components/react-button/stories/Button/ButtonDefault.stories.tsx
new file mode 100644
index 00000000000000..e651f77551a100
--- /dev/null
+++ b/packages/react-components/react-button/stories/Button/ButtonDefault.stories.tsx
@@ -0,0 +1,5 @@
+import * as React from 'react';
+import { Button } from '@fluentui/react-components';
+import type { ButtonProps } from '@fluentui/react-components';
+
+export const Default = (props: ButtonProps) => Example ;
diff --git a/packages/react-components/react-button/src/stories/Button/ButtonDescription.md b/packages/react-components/react-button/stories/Button/ButtonDescription.md
similarity index 100%
rename from packages/react-components/react-button/src/stories/Button/ButtonDescription.md
rename to packages/react-components/react-button/stories/Button/ButtonDescription.md
diff --git a/packages/react-components/react-button/stories/Button/ButtonDisabled.stories.tsx b/packages/react-components/react-button/stories/Button/ButtonDisabled.stories.tsx
new file mode 100644
index 00000000000000..09edc72798285c
--- /dev/null
+++ b/packages/react-components/react-button/stories/Button/ButtonDisabled.stories.tsx
@@ -0,0 +1,48 @@
+import * as React from 'react';
+import { makeStyles, Button } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ innerWrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+ outerWrapper: {
+ display: 'flex',
+ flexDirection: 'column',
+ rowGap: '15px',
+ },
+});
+
+export const Disabled = () => {
+ const styles = useStyles();
+
+ return (
+
+
+ Enabled state
+ Disabled state
+ Disabled focusable state
+
+
+ Enabled state
+
+ Disabled state
+
+
+ Disabled focusable state
+
+
+
+ );
+};
+
+Disabled.parameters = {
+ docs: {
+ description: {
+ story: `A button can be \`disabled\` or \`disabledFocusable\`.
+ \`disabledFocusable\` is used in scenarios where it is important to keep a consistent tab order
+ for screen reader and keyboard users. The primary example of this pattern is when
+ the disabled button is in a menu or a commandbar and is seldom used for standalone buttons.`,
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/Button/ButtonIcon.stories.tsx b/packages/react-components/react-button/stories/Button/ButtonIcon.stories.tsx
new file mode 100644
index 00000000000000..742bedd5d95549
--- /dev/null
+++ b/packages/react-components/react-button/stories/Button/ButtonIcon.stories.tsx
@@ -0,0 +1,38 @@
+import * as React from 'react';
+import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
+import { makeStyles, Button, Tooltip } from '@fluentui/react-components';
+
+const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Icon = () => {
+ const styles = useStyles();
+
+ return (
+
+ }>With calendar icon before contents
+ } iconPosition="after">
+ With calendar icon after contents
+
+
+ } />
+
+
+ );
+};
+
+Icon.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Button has an `icon` slot that, if specified, renders an icon either `before` or `after` the children, ' +
+ 'as specified by the `iconPosition` prop.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/Button/ButtonShape.stories.tsx b/packages/react-components/react-button/stories/Button/ButtonShape.stories.tsx
new file mode 100644
index 00000000000000..e8e34e9255476c
--- /dev/null
+++ b/packages/react-components/react-button/stories/Button/ButtonShape.stories.tsx
@@ -0,0 +1,28 @@
+import * as React from 'react';
+import { makeStyles, Button } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Shape = () => {
+ const styles = useStyles();
+ return (
+
+ Rounded
+ Circular
+ Square
+
+ );
+};
+
+Shape.parameters = {
+ docs: {
+ description: {
+ story: 'A button can be rounded, circular, or square.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/Button/ButtonSize.stories.tsx b/packages/react-components/react-button/stories/Button/ButtonSize.stories.tsx
new file mode 100644
index 00000000000000..87c186dc22e9fc
--- /dev/null
+++ b/packages/react-components/react-button/stories/Button/ButtonSize.stories.tsx
@@ -0,0 +1,58 @@
+import * as React from 'react';
+import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
+import { makeStyles, Button, Tooltip } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ innerWrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+ outerWrapper: {
+ display: 'flex',
+ flexDirection: 'column',
+ rowGap: '15px',
+ },
+});
+
+const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+
+export const Size = () => {
+ const styles = useStyles();
+
+ return (
+
+
+ Small
+ }>
+ Small with calendar icon
+
+
+ } />
+
+
+
+ Medium
+ }>Medium with calendar icon
+
+ } />
+
+
+
+ Large
+ }>
+ Large with calendar icon
+
+
+ } />
+
+
+
+ );
+};
+Size.parameters = {
+ docs: {
+ description: {
+ story: 'A button supports `small`, `medium` and `large` size. Default size is `medium`.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/Button/ButtonWithLongText.stories.tsx b/packages/react-components/react-button/stories/Button/ButtonWithLongText.stories.tsx
new file mode 100644
index 00000000000000..2d352d976da468
--- /dev/null
+++ b/packages/react-components/react-button/stories/Button/ButtonWithLongText.stories.tsx
@@ -0,0 +1,32 @@
+import * as React from 'react';
+import { makeStyles, Button } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ longText: {
+ width: '280px',
+ },
+ wrapper: {
+ alignItems: 'center',
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const WithLongText = () => {
+ const styles = useStyles();
+
+ return (
+
+ Short text
+ Long text wraps after it hits the max width of the component
+
+ );
+};
+
+WithLongText.parameters = {
+ docs: {
+ description: {
+ story: 'Text wraps after it hits the max width of the component.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/Button/index.stories.tsx b/packages/react-components/react-button/stories/Button/index.stories.tsx
new file mode 100644
index 00000000000000..c3c668f9845554
--- /dev/null
+++ b/packages/react-components/react-button/stories/Button/index.stories.tsx
@@ -0,0 +1,24 @@
+import { Meta } from '@storybook/react';
+import { Button } from '@fluentui/react-components';
+import descriptionMd from './ButtonDescription.md';
+import bestPracticesMd from './ButtonBestPractices.md';
+
+export { Default } from './ButtonDefault.stories';
+export { Shape } from './ButtonShape.stories';
+export { Appearance } from './ButtonAppearance.stories';
+export { Icon } from './ButtonIcon.stories';
+export { Size } from './ButtonSize.stories';
+export { Disabled } from './ButtonDisabled.stories';
+export { WithLongText } from './ButtonWithLongText.stories';
+
+export default {
+ title: 'Components/Button/Button',
+ component: Button,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd, bestPracticesMd].join('\n'),
+ },
+ },
+ },
+} as Meta;
diff --git a/packages/react-components/react-button/stories/CompoundButton/CompoundButtonAppearance.stories.tsx b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonAppearance.stories.tsx
new file mode 100644
index 00000000000000..812d2a0aad0803
--- /dev/null
+++ b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonAppearance.stories.tsx
@@ -0,0 +1,44 @@
+import * as React from 'react';
+import { makeStyles, CompoundButton } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Appearance = () => {
+ const styles = useStyles();
+
+ return (
+
+ Default
+
+ Primary
+
+
+ Outline
+
+
+ Subtle
+
+
+ Transparent
+
+
+ );
+};
+
+Appearance.parameters = {
+ docs: {
+ description: {
+ story:
+ '- `(undefined)`: the compound button appears with the default style\n' +
+ '- `primary`: emphasizes the compound button as a primary action.\n' +
+ '- `outline`: removes background styling.\n' +
+ '- `subtle`: minimizes emphasis to blend into the background until hovered or focused\n' +
+ '- `transparent`: removes background and border styling.\n',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/CompoundButton/CompoundButtonDefault.stories.tsx b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonDefault.stories.tsx
new file mode 100644
index 00000000000000..444414cdaf6380
--- /dev/null
+++ b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonDefault.stories.tsx
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
+import { CompoundButton } from '@fluentui/react-components';
+import type { CompoundButtonProps } from '@fluentui/react-components';
+
+const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+
+export const Default = (props: CompoundButtonProps) => (
+ } secondaryContent="Secondary content" {...props}>
+ Example
+
+);
diff --git a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonDescription.md b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonDescription.md
similarity index 100%
rename from packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonDescription.md
rename to packages/react-components/react-button/stories/CompoundButton/CompoundButtonDescription.md
diff --git a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonDisabled.stories.tsx b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonDisabled.stories.tsx
similarity index 75%
rename from packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonDisabled.stories.tsx
rename to packages/react-components/react-button/stories/CompoundButton/CompoundButtonDisabled.stories.tsx
index b9e4d464bcec0b..f5adc1dd01b43d 100644
--- a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonDisabled.stories.tsx
+++ b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonDisabled.stories.tsx
@@ -1,12 +1,24 @@
import * as React from 'react';
-import { CompoundButton } from '@fluentui/react-components';
+import { makeStyles, CompoundButton } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ innerWrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+ outerWrapper: {
+ display: 'flex',
+ flexDirection: 'column',
+ rowGap: '15px',
+ },
+});
export const Disabled = () => {
- const groupStyles: React.CSSProperties = { display: 'flex', flexWrap: 'wrap', gap: '0.5em' };
+ const styles = useStyles();
return (
- <>
-
+
+
Enabled state
Disabled state
@@ -15,7 +27,7 @@ export const Disabled = () => {
Disabled focusable state
-
+
Enabled state
@@ -26,7 +38,7 @@ export const Disabled = () => {
Disabled focusable state
- >
+
);
};
diff --git a/packages/react-components/react-button/stories/CompoundButton/CompoundButtonIcon.stories.tsx b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonIcon.stories.tsx
new file mode 100644
index 00000000000000..1f184ec7aaedab
--- /dev/null
+++ b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonIcon.stories.tsx
@@ -0,0 +1,41 @@
+import * as React from 'react';
+import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
+import { makeStyles, CompoundButton, Tooltip } from '@fluentui/react-components';
+
+const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+
+const useStyles = makeStyles({
+ wrapper: {
+ alignItems: 'center',
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Icon = () => {
+ const styles = useStyles();
+
+ return (
+
+ }>
+ With calendar icon before contents
+
+ } iconPosition="after">
+ With calendar icon after contents
+
+
+ } />
+
+
+ );
+};
+
+Icon.parameters = {
+ docs: {
+ description: {
+ story:
+ 'The CompoundButton has an `icon` slot that, if specified, renders an icon either `before` ' +
+ 'or `after` the children, as specified by the `iconPosition` prop.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/CompoundButton/CompoundButtonShape.stories.tsx b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonShape.stories.tsx
new file mode 100644
index 00000000000000..030df23071358b
--- /dev/null
+++ b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonShape.stories.tsx
@@ -0,0 +1,33 @@
+import * as React from 'react';
+import { makeStyles, CompoundButton } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Shape = () => {
+ const styles = useStyles();
+
+ return (
+
+ Rounded
+
+ Circular
+
+
+ Square
+
+
+ );
+};
+
+Shape.parameters = {
+ docs: {
+ description: {
+ story: 'A compound button can be rounded, circular, or square.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonSize.stories.tsx b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonSize.stories.tsx
similarity index 75%
rename from packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonSize.stories.tsx
rename to packages/react-components/react-button/stories/CompoundButton/CompoundButtonSize.stories.tsx
index 4caac8f9f39425..2b2c83872f9b53 100644
--- a/packages/react-components/react-button/src/stories/CompoundButton/CompoundButtonSize.stories.tsx
+++ b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonSize.stories.tsx
@@ -1,12 +1,22 @@
import * as React from 'react';
import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { CompoundButton } from '@fluentui/react-components';
+import { makeStyles, CompoundButton } from '@fluentui/react-components';
const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+const useStyles = makeStyles({
+ wrapper: {
+ alignItems: 'center',
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
export const Size = () => {
+ const styles = useStyles();
+
return (
- <>
+
} secondaryContent="Secondary content" size="small">
Size: small
@@ -16,7 +26,7 @@ export const Size = () => {
} secondaryContent="Secondary content" size="large">
Size: large
- >
+
);
};
diff --git a/packages/react-components/react-button/stories/CompoundButton/CompoundButtonWithLongText.stories.tsx b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonWithLongText.stories.tsx
new file mode 100644
index 00000000000000..bb0455e22f949a
--- /dev/null
+++ b/packages/react-components/react-button/stories/CompoundButton/CompoundButtonWithLongText.stories.tsx
@@ -0,0 +1,34 @@
+import * as React from 'react';
+import { makeStyles, CompoundButton } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ longText: {
+ width: '280px',
+ },
+ wrapper: {
+ alignItems: 'center',
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const WithLongText = () => {
+ const styles = useStyles();
+
+ return (
+
+ Short text
+
+ Long text wraps after it hits the max width of the component
+
+
+ );
+};
+
+WithLongText.parameters = {
+ docs: {
+ description: {
+ story: 'Text wraps after it hits the max width of the component.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/CompoundButton/index.stories.tsx b/packages/react-components/react-button/stories/CompoundButton/index.stories.tsx
new file mode 100644
index 00000000000000..924d8f75f1c135
--- /dev/null
+++ b/packages/react-components/react-button/stories/CompoundButton/index.stories.tsx
@@ -0,0 +1,24 @@
+import { Meta } from '@storybook/react';
+import { CompoundButton } from '@fluentui/react-components';
+import descriptionMd from './CompoundButtonDescription.md';
+import bestPracticesMd from '../Button/ButtonBestPractices.md';
+
+export { Default } from './CompoundButtonDefault.stories';
+export { Shape } from './CompoundButtonShape.stories';
+export { Appearance } from './CompoundButtonAppearance.stories';
+export { Icon } from './CompoundButtonIcon.stories';
+export { Size } from './CompoundButtonSize.stories';
+export { Disabled } from './CompoundButtonDisabled.stories';
+export { WithLongText } from './CompoundButtonWithLongText.stories';
+
+export default {
+ title: 'Components/Button/CompoundButton',
+ component: CompoundButton,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd, bestPracticesMd].join('\n'),
+ },
+ },
+ },
+} as Meta;
diff --git a/packages/react-components/react-button/stories/MenuButton/MenuButtonAppearance.stories.tsx b/packages/react-components/react-button/stories/MenuButton/MenuButtonAppearance.stories.tsx
new file mode 100644
index 00000000000000..ea464e824bd06c
--- /dev/null
+++ b/packages/react-components/react-button/stories/MenuButton/MenuButtonAppearance.stories.tsx
@@ -0,0 +1,95 @@
+import * as React from 'react';
+import { makeStyles, Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Appearance = () => {
+ const styles = useStyles();
+
+ return (
+
+
+
+ Default
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ Primary
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ Outline
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ Subtle
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ Transparent
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+ );
+};
+
+Appearance.parameters = {
+ docs: {
+ description: {
+ story:
+ '- `(undefined)`: the menu button appears with the default style\n' +
+ '- `primary`: emphasizes the menu button as a primary action.\n' +
+ '- `outline`: removes background styling.\n' +
+ '- `subtle`: minimizes emphasis to blend into the background until hovered or focused\n' +
+ '- `transparent`: removes background and border styling.\n',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/MenuButton/MenuButtonDefault.stories.tsx b/packages/react-components/react-button/stories/MenuButton/MenuButtonDefault.stories.tsx
new file mode 100644
index 00000000000000..3ddb8a3572dce8
--- /dev/null
+++ b/packages/react-components/react-button/stories/MenuButton/MenuButtonDefault.stories.tsx
@@ -0,0 +1,17 @@
+import * as React from 'react';
+import { Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
+
+export const Default = () => (
+
+
+ Example
+
+
+
+
+ Item a
+ Item b
+
+
+
+);
diff --git a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonDescription.md b/packages/react-components/react-button/stories/MenuButton/MenuButtonDescription.md
similarity index 100%
rename from packages/react-components/react-button/src/stories/MenuButton/MenuButtonDescription.md
rename to packages/react-components/react-button/stories/MenuButton/MenuButtonDescription.md
diff --git a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonDisabled.stories.tsx b/packages/react-components/react-button/stories/MenuButton/MenuButtonDisabled.stories.tsx
similarity index 75%
rename from packages/react-components/react-button/src/stories/MenuButton/MenuButtonDisabled.stories.tsx
rename to packages/react-components/react-button/stories/MenuButton/MenuButtonDisabled.stories.tsx
index 8f552b847ca513..b4723ae9f53d2d 100644
--- a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonDisabled.stories.tsx
+++ b/packages/react-components/react-button/stories/MenuButton/MenuButtonDisabled.stories.tsx
@@ -1,11 +1,20 @@
import * as React from 'react';
-import { Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
+import { makeStyles, Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
export const Disabled = () => {
+ const styles = useStyles();
+
return (
- <>
+
-
+
Enabled state
@@ -17,7 +26,7 @@ export const Disabled = () => {
-
+
Disabled state
@@ -29,7 +38,7 @@ export const Disabled = () => {
-
+
Disabled focusable state
@@ -40,7 +49,7 @@ export const Disabled = () => {
- >
+
);
};
diff --git a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonIcon.stories.tsx b/packages/react-components/react-button/stories/MenuButton/MenuButtonIcon.stories.tsx
similarity index 77%
rename from packages/react-components/react-button/src/stories/MenuButton/MenuButtonIcon.stories.tsx
rename to packages/react-components/react-button/stories/MenuButton/MenuButtonIcon.stories.tsx
index 140331d2faa36c..7a8f5706ece304 100644
--- a/packages/react-components/react-button/src/stories/MenuButton/MenuButtonIcon.stories.tsx
+++ b/packages/react-components/react-button/stories/MenuButton/MenuButtonIcon.stories.tsx
@@ -6,16 +6,34 @@ import {
FilterFilled,
FilterRegular,
} from '@fluentui/react-icons';
-import { Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger, Tooltip } from '@fluentui/react-components';
+import {
+ makeStyles,
+ Menu,
+ MenuButton,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ Tooltip,
+} from '@fluentui/react-components';
const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
const Filter = bundleIcon(FilterFilled, FilterRegular);
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
export const Icon = () => {
+ const styles = useStyles();
+
return (
- <>
+
-
+
}>With calendar icon
@@ -27,7 +45,7 @@ export const Icon = () => {
-
+
} menuIcon={ }>
With calendar icon and custom filter menu icon
@@ -41,7 +59,7 @@ export const Icon = () => {
-
+
} />
@@ -53,9 +71,10 @@ export const Icon = () => {
- >
+
);
};
+
Icon.parameters = {
docs: {
description: {
diff --git a/packages/react-components/react-button/stories/MenuButton/MenuButtonShape.stories.tsx b/packages/react-components/react-button/stories/MenuButton/MenuButtonShape.stories.tsx
new file mode 100644
index 00000000000000..d8d76b28b13fab
--- /dev/null
+++ b/packages/react-components/react-button/stories/MenuButton/MenuButtonShape.stories.tsx
@@ -0,0 +1,64 @@
+import * as React from 'react';
+import { makeStyles, Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Shape = () => {
+ const styles = useStyles();
+
+ return (
+
+
+
+ Rounded
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ Circular
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ Square
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+ );
+};
+
+Shape.parameters = {
+ docs: {
+ description: {
+ story: 'A menu button can be rounded, circular, or square.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/MenuButton/MenuButtonSize.stories.tsx b/packages/react-components/react-button/stories/MenuButton/MenuButtonSize.stories.tsx
new file mode 100644
index 00000000000000..e2daec2d9b7bfb
--- /dev/null
+++ b/packages/react-components/react-button/stories/MenuButton/MenuButtonSize.stories.tsx
@@ -0,0 +1,65 @@
+import * as React from 'react';
+import { makeStyles, Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ alignItems: 'center',
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Size = () => {
+ const styles = useStyles();
+
+ return (
+
+
+
+ Size: small
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ Size: medium
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ Size: large
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+ );
+};
+
+Size.parameters = {
+ docs: {
+ description: {
+ story: 'MenuButton supports `small`, `medium` and `large` size. Default size is `medium`.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/MenuButton/MenuButtonSizeLarge.stories.tsx b/packages/react-components/react-button/stories/MenuButton/MenuButtonSizeLarge.stories.tsx
new file mode 100644
index 00000000000000..3fd32aa951abf0
--- /dev/null
+++ b/packages/react-components/react-button/stories/MenuButton/MenuButtonSizeLarge.stories.tsx
@@ -0,0 +1,74 @@
+import * as React from 'react';
+import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
+import {
+ makeStyles,
+ Menu,
+ MenuButton,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ Tooltip,
+} from '@fluentui/react-components';
+
+const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const SizeLarge = () => {
+ const styles = useStyles();
+
+ return (
+
+
+
+ Large
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ } size="large">
+ Large with calendar icon
+
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+
+ } size="large" />
+
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+ );
+};
+
+SizeLarge.storyName = 'Size: large';
diff --git a/packages/react-components/react-button/stories/MenuButton/MenuButtonSizeMedium.stories.tsx b/packages/react-components/react-button/stories/MenuButton/MenuButtonSizeMedium.stories.tsx
new file mode 100644
index 00000000000000..793f2ad12d53b9
--- /dev/null
+++ b/packages/react-components/react-button/stories/MenuButton/MenuButtonSizeMedium.stories.tsx
@@ -0,0 +1,74 @@
+import * as React from 'react';
+import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
+import {
+ makeStyles,
+ Menu,
+ MenuButton,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ Tooltip,
+} from '@fluentui/react-components';
+
+const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const SizeMedium = () => {
+ const styles = useStyles();
+
+ return (
+
+
+
+ Medium
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ } size="medium">
+ Medium with calendar icon
+
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+
+ } size="medium" />
+
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+ );
+};
+
+SizeMedium.storyName = 'Size: medium';
diff --git a/packages/react-components/react-button/stories/MenuButton/MenuButtonSizeSmall.stories.tsx b/packages/react-components/react-button/stories/MenuButton/MenuButtonSizeSmall.stories.tsx
new file mode 100644
index 00000000000000..0028de1c87fd74
--- /dev/null
+++ b/packages/react-components/react-button/stories/MenuButton/MenuButtonSizeSmall.stories.tsx
@@ -0,0 +1,74 @@
+import * as React from 'react';
+import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
+import {
+ makeStyles,
+ Menu,
+ MenuButton,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ Tooltip,
+} from '@fluentui/react-components';
+
+const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const SizeSmall = () => {
+ const styles = useStyles();
+
+ return (
+
+
+
+ Small
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ } size="small">
+ Small with calendar icon
+
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+
+ } size="small" />
+
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+ );
+};
+
+SizeSmall.storyName = 'Size: small';
diff --git a/packages/react-components/react-button/stories/MenuButton/MenuButtonWithLongText.stories.tsx b/packages/react-components/react-button/stories/MenuButton/MenuButtonWithLongText.stories.tsx
new file mode 100644
index 00000000000000..b12466eeca2e71
--- /dev/null
+++ b/packages/react-components/react-button/stories/MenuButton/MenuButtonWithLongText.stories.tsx
@@ -0,0 +1,57 @@
+import * as React from 'react';
+import { makeStyles, Menu, MenuButton, MenuItem, MenuList, MenuPopover, MenuTrigger } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ longText: {
+ width: '280px',
+ },
+ wrapper: {
+ alignItems: 'center',
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const WithLongText = () => {
+ const styles = useStyles();
+
+ return (
+
+
+
+ Short text
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+
+ Long text wraps after it hits the max width of the component
+
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+ );
+};
+
+WithLongText.parameters = {
+ docs: {
+ description: {
+ story: 'Text wraps after it hits the max width of the component.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/MenuButton/index.stories.tsx b/packages/react-components/react-button/stories/MenuButton/index.stories.tsx
new file mode 100644
index 00000000000000..9987737ec46116
--- /dev/null
+++ b/packages/react-components/react-button/stories/MenuButton/index.stories.tsx
@@ -0,0 +1,27 @@
+import { Meta } from '@storybook/react';
+import { MenuButton } from '@fluentui/react-components';
+import descriptionMd from './MenuButtonDescription.md';
+import bestPracticesMd from '../Button/ButtonBestPractices.md';
+
+export { Default } from './MenuButtonDefault.stories';
+export { Shape } from './MenuButtonShape.stories';
+export { Appearance } from './MenuButtonAppearance.stories';
+export { Icon } from './MenuButtonIcon.stories';
+export { Size } from './MenuButtonSize.stories';
+export { SizeSmall } from './MenuButtonSizeSmall.stories';
+export { SizeMedium } from './MenuButtonSizeMedium.stories';
+export { SizeLarge } from './MenuButtonSizeLarge.stories';
+export { Disabled } from './MenuButtonDisabled.stories';
+export { WithLongText } from './MenuButtonWithLongText.stories';
+
+export default {
+ title: 'Components/Button/MenuButton',
+ component: MenuButton,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd, bestPracticesMd].join('\n'),
+ },
+ },
+ },
+} as Meta;
diff --git a/packages/react-components/react-button/stories/SplitButton/SplitButtonAppearance.stories.tsx b/packages/react-components/react-button/stories/SplitButton/SplitButtonAppearance.stories.tsx
new file mode 100644
index 00000000000000..5c93612918e93e
--- /dev/null
+++ b/packages/react-components/react-button/stories/SplitButton/SplitButtonAppearance.stories.tsx
@@ -0,0 +1,120 @@
+import * as React from 'react';
+import {
+ makeStyles,
+ Menu,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ SplitButton,
+} from '@fluentui/react-components';
+import type { MenuButtonProps } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Appearance = () => {
+ const styles = useStyles();
+
+ return (
+
+
+
+ {(triggerProps: MenuButtonProps) => Default }
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ {(triggerProps: MenuButtonProps) => (
+
+ Primary
+
+ )}
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ {(triggerProps: MenuButtonProps) => (
+
+ Outline
+
+ )}
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ {(triggerProps: MenuButtonProps) => (
+
+ Subtle
+
+ )}
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ {(triggerProps: MenuButtonProps) => (
+
+ Transparent
+
+ )}
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+ );
+};
+
+Appearance.parameters = {
+ docs: {
+ description: {
+ story:
+ '- `(undefined)`: the split button appears with the default style\n' +
+ '- `primary`: emphasizes the split button as a primary action.\n' +
+ '- `outline`: removes background styling.\n' +
+ '- `subtle`: minimizes emphasis to blend into the background until hovered or focused\n' +
+ '- `transparent`: removes background and border styling.\n',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/SplitButton/SplitButtonDefault.stories.tsx b/packages/react-components/react-button/stories/SplitButton/SplitButtonDefault.stories.tsx
new file mode 100644
index 00000000000000..09a0f6b5230bc1
--- /dev/null
+++ b/packages/react-components/react-button/stories/SplitButton/SplitButtonDefault.stories.tsx
@@ -0,0 +1,18 @@
+import * as React from 'react';
+import { Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton } from '@fluentui/react-components';
+import type { MenuButtonProps } from '@fluentui/react-components';
+
+export const Default = () => (
+
+
+ {(triggerProps: MenuButtonProps) => Example }
+
+
+
+
+ Item a
+ Item b
+
+
+
+);
diff --git a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonDescription.md b/packages/react-components/react-button/stories/SplitButton/SplitButtonDescription.md
similarity index 100%
rename from packages/react-components/react-button/src/stories/SplitButton/SplitButtonDescription.md
rename to packages/react-components/react-button/stories/SplitButton/SplitButtonDescription.md
diff --git a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonDisabled.stories.tsx b/packages/react-components/react-button/stories/SplitButton/SplitButtonDisabled.stories.tsx
similarity index 80%
rename from packages/react-components/react-button/src/stories/SplitButton/SplitButtonDisabled.stories.tsx
rename to packages/react-components/react-button/stories/SplitButton/SplitButtonDisabled.stories.tsx
index 13d5566040f000..466f767921c64b 100644
--- a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonDisabled.stories.tsx
+++ b/packages/react-components/react-button/stories/SplitButton/SplitButtonDisabled.stories.tsx
@@ -1,12 +1,29 @@
import * as React from 'react';
-import { Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton } from '@fluentui/react-components';
+import {
+ makeStyles,
+ Menu,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ SplitButton,
+} from '@fluentui/react-components';
import type { MenuButtonProps } from '@fluentui/react-components';
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
export const Disabled = () => {
+ const styles = useStyles();
+
return (
- <>
+
-
+
{(triggerProps: MenuButtonProps) => Enabled state }
@@ -18,7 +35,7 @@ export const Disabled = () => {
-
+
{(triggerProps: MenuButtonProps) => (
Disabled state
@@ -34,7 +51,7 @@ export const Disabled = () => {
-
+
{(triggerProps: MenuButtonProps) => (
Disabled focusable state
@@ -49,7 +66,7 @@ export const Disabled = () => {
- >
+
);
};
diff --git a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonIcon.stories.tsx b/packages/react-components/react-button/stories/SplitButton/SplitButtonIcon.stories.tsx
similarity index 84%
rename from packages/react-components/react-button/src/stories/SplitButton/SplitButtonIcon.stories.tsx
rename to packages/react-components/react-button/stories/SplitButton/SplitButtonIcon.stories.tsx
index 61f752d1e82743..7be736ec8522ac 100644
--- a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonIcon.stories.tsx
+++ b/packages/react-components/react-button/stories/SplitButton/SplitButtonIcon.stories.tsx
@@ -6,21 +6,39 @@ import {
FilterFilled,
FilterRegular,
} from '@fluentui/react-icons';
-import { Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton, Tooltip } from '@fluentui/react-components';
+import {
+ makeStyles,
+ Menu,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ SplitButton,
+ Tooltip,
+} from '@fluentui/react-components';
import type { MenuButtonProps } from '@fluentui/react-components';
const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
const Filter = bundleIcon(FilterFilled, FilterRegular);
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
export const Icon = () => {
const [primaryActionButtonRef, setPrimaryActionButtonRef] = React.useState<
HTMLButtonElement | HTMLAnchorElement | null
>(null);
+ const styles = useStyles();
+
return (
- <>
+
-
+
{(triggerProps: MenuButtonProps) => (
}>
With calendar icon before contents
@@ -36,7 +54,7 @@ export const Icon = () => {
-
+
{(triggerProps: MenuButtonProps) => (
} iconPosition="after">
With calendar icon after contents
@@ -52,7 +70,7 @@ export const Icon = () => {
-
+
{(triggerProps: MenuButtonProps) => (
} menuIcon={ }>
With calendar icon and custom filter menu icon
@@ -68,7 +86,7 @@ export const Icon = () => {
-
+
{(triggerProps: MenuButtonProps) => (
{
- >
+
);
};
diff --git a/packages/react-components/react-button/stories/SplitButton/SplitButtonShape.stories.tsx b/packages/react-components/react-button/stories/SplitButton/SplitButtonShape.stories.tsx
new file mode 100644
index 00000000000000..39e15708216157
--- /dev/null
+++ b/packages/react-components/react-button/stories/SplitButton/SplitButtonShape.stories.tsx
@@ -0,0 +1,81 @@
+import * as React from 'react';
+import {
+ makeStyles,
+ Menu,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ SplitButton,
+} from '@fluentui/react-components';
+import type { MenuButtonProps } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Shape = () => {
+ const styles = useStyles();
+
+ return (
+
+
+
+ {(triggerProps: MenuButtonProps) => Rounded }
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ {(triggerProps: MenuButtonProps) => (
+
+ Circular
+
+ )}
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ {(triggerProps: MenuButtonProps) => (
+
+ Square
+
+ )}
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+ );
+};
+
+Shape.parameters = {
+ docs: {
+ description: {
+ story: 'A split button can be rounded, circular, or square.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonSize.stories.tsx b/packages/react-components/react-button/stories/SplitButton/SplitButtonSize.stories.tsx
similarity index 76%
rename from packages/react-components/react-button/src/stories/SplitButton/SplitButtonSize.stories.tsx
rename to packages/react-components/react-button/stories/SplitButton/SplitButtonSize.stories.tsx
index 25cb6da4f9e5c4..e18587a9544d19 100644
--- a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonSize.stories.tsx
+++ b/packages/react-components/react-button/stories/SplitButton/SplitButtonSize.stories.tsx
@@ -1,12 +1,30 @@
import * as React from 'react';
-import { Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton } from '@fluentui/react-components';
+import {
+ makeStyles,
+ Menu,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ SplitButton,
+} from '@fluentui/react-components';
import type { MenuButtonProps } from '@fluentui/react-components';
+const useStyles = makeStyles({
+ wrapper: {
+ alignItems: 'center',
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
export const Size = () => {
+ const styles = useStyles();
+
return (
- <>
+
-
+
{(triggerProps: MenuButtonProps) => (
Size: small
@@ -23,7 +41,7 @@ export const Size = () => {
-
+
{(triggerProps: MenuButtonProps) => (
Size: medium
@@ -40,7 +58,7 @@ export const Size = () => {
-
+
{(triggerProps: MenuButtonProps) => (
Size: large
@@ -55,7 +73,7 @@ export const Size = () => {
- >
+
);
};
diff --git a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonSizeLarge.stories.tsx b/packages/react-components/react-button/stories/SplitButton/SplitButtonSizeLarge.stories.tsx
similarity index 82%
rename from packages/react-components/react-button/src/stories/SplitButton/SplitButtonSizeLarge.stories.tsx
rename to packages/react-components/react-button/stories/SplitButton/SplitButtonSizeLarge.stories.tsx
index b93a6a4f7af52f..ffc509a5283231 100644
--- a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonSizeLarge.stories.tsx
+++ b/packages/react-components/react-button/stories/SplitButton/SplitButtonSizeLarge.stories.tsx
@@ -1,19 +1,37 @@
import * as React from 'react';
import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton, Tooltip } from '@fluentui/react-components';
+import {
+ makeStyles,
+ Menu,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ SplitButton,
+ Tooltip,
+} from '@fluentui/react-components';
import type { MenuButtonProps } from '@fluentui/react-components';
const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
export const SizeLarge = () => {
const [primaryActionButtonRef, setPrimaryActionButtonRef] = React.useState<
HTMLButtonElement | HTMLAnchorElement | null
>(null);
+ const styles = useStyles();
+
return (
- <>
+
-
+
{(triggerProps: MenuButtonProps) => (
Large
@@ -30,7 +48,7 @@ export const SizeLarge = () => {
-
+
{(triggerProps: MenuButtonProps) => (
} size="large">
Large with calendar icon
@@ -47,7 +65,7 @@ export const SizeLarge = () => {
-
+
{(triggerProps: MenuButtonProps) => (
{
- >
+
);
};
diff --git a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonSizeMedium.stories.tsx b/packages/react-components/react-button/stories/SplitButton/SplitButtonSizeMedium.stories.tsx
similarity index 82%
rename from packages/react-components/react-button/src/stories/SplitButton/SplitButtonSizeMedium.stories.tsx
rename to packages/react-components/react-button/stories/SplitButton/SplitButtonSizeMedium.stories.tsx
index 9a50b55f17dc8f..bb8748cb48a57b 100644
--- a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonSizeMedium.stories.tsx
+++ b/packages/react-components/react-button/stories/SplitButton/SplitButtonSizeMedium.stories.tsx
@@ -1,19 +1,37 @@
import * as React from 'react';
import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton, Tooltip } from '@fluentui/react-components';
+import {
+ makeStyles,
+ Menu,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ SplitButton,
+ Tooltip,
+} from '@fluentui/react-components';
import type { MenuButtonProps } from '@fluentui/react-components';
const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
export const SizeMedium = () => {
const [primaryActionButtonRef, setPrimaryActionButtonRef] = React.useState<
HTMLButtonElement | HTMLAnchorElement | null
>(null);
+ const styles = useStyles();
+
return (
- <>
+
-
+
{(triggerProps: MenuButtonProps) => (
Medium
@@ -30,7 +48,7 @@ export const SizeMedium = () => {
-
+
{(triggerProps: MenuButtonProps) => (
} size="medium">
Medium with calendar icon
@@ -47,7 +65,7 @@ export const SizeMedium = () => {
-
+
{(triggerProps: MenuButtonProps) => (
{
- >
+
);
};
diff --git a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonSizeSmall.stories.tsx b/packages/react-components/react-button/stories/SplitButton/SplitButtonSizeSmall.stories.tsx
similarity index 82%
rename from packages/react-components/react-button/src/stories/SplitButton/SplitButtonSizeSmall.stories.tsx
rename to packages/react-components/react-button/stories/SplitButton/SplitButtonSizeSmall.stories.tsx
index a1f1e5361f26cb..e9c2fdec47b055 100644
--- a/packages/react-components/react-button/src/stories/SplitButton/SplitButtonSizeSmall.stories.tsx
+++ b/packages/react-components/react-button/stories/SplitButton/SplitButtonSizeSmall.stories.tsx
@@ -1,19 +1,37 @@
import * as React from 'react';
import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
-import { Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton, Tooltip } from '@fluentui/react-components';
+import {
+ makeStyles,
+ Menu,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ SplitButton,
+ Tooltip,
+} from '@fluentui/react-components';
import type { MenuButtonProps } from '@fluentui/react-components';
const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
export const SizeSmall = () => {
const [primaryActionButtonRef, setPrimaryActionButtonRef] = React.useState<
HTMLButtonElement | HTMLAnchorElement | null
>(null);
+ const styles = useStyles();
+
return (
- <>
+
-
+
{(triggerProps: MenuButtonProps) => (
Small
@@ -30,7 +48,7 @@ export const SizeSmall = () => {
-
+
{(triggerProps: MenuButtonProps) => (
} size="small">
Small with calendar icon
@@ -47,7 +65,7 @@ export const SizeSmall = () => {
-
+
{(triggerProps: MenuButtonProps) => (
{
- >
+
);
};
diff --git a/packages/react-components/react-button/stories/SplitButton/SplitButtonWithLongText.stories.tsx b/packages/react-components/react-button/stories/SplitButton/SplitButtonWithLongText.stories.tsx
new file mode 100644
index 00000000000000..6fafe19faf0a6e
--- /dev/null
+++ b/packages/react-components/react-button/stories/SplitButton/SplitButtonWithLongText.stories.tsx
@@ -0,0 +1,68 @@
+import * as React from 'react';
+import {
+ makeStyles,
+ Menu,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ SplitButton,
+} from '@fluentui/react-components';
+import type { MenuButtonProps } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ longText: {
+ width: '280px',
+ },
+ wrapper: {
+ alignItems: 'center',
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const WithLongText = () => {
+ const styles = useStyles();
+
+ return (
+
+
+
+ {(triggerProps: MenuButtonProps) => Short text }
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+
+
+ {(triggerProps: MenuButtonProps) => (
+
+ Long text wraps after it hits the max width of the component
+
+ )}
+
+
+
+
+ Item a
+ Item b
+
+
+
+
+ );
+};
+
+WithLongText.parameters = {
+ docs: {
+ description: {
+ story: 'Text wraps after it hits the max width of the component.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/SplitButton/index.stories.tsx b/packages/react-components/react-button/stories/SplitButton/index.stories.tsx
new file mode 100644
index 00000000000000..ccba4ee7e28d67
--- /dev/null
+++ b/packages/react-components/react-button/stories/SplitButton/index.stories.tsx
@@ -0,0 +1,27 @@
+import { Meta } from '@storybook/react';
+import { SplitButton } from '@fluentui/react-components';
+import descriptionMd from './SplitButtonDescription.md';
+import bestPracticesMd from '../Button/ButtonBestPractices.md';
+
+export { Default } from './SplitButtonDefault.stories';
+export { Shape } from './SplitButtonShape.stories';
+export { Appearance } from './SplitButtonAppearance.stories';
+export { Icon } from './SplitButtonIcon.stories';
+export { Size } from './SplitButtonSize.stories';
+export { SizeSmall } from './SplitButtonSizeSmall.stories';
+export { SizeMedium } from './SplitButtonSizeMedium.stories';
+export { SizeLarge } from './SplitButtonSizeLarge.stories';
+export { Disabled } from './SplitButtonDisabled.stories';
+export { WithLongText } from './SplitButtonWithLongText.stories';
+
+export default {
+ title: 'Components/Button/SplitButton',
+ component: SplitButton,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd, bestPracticesMd].join('\n'),
+ },
+ },
+ },
+} as Meta;
diff --git a/packages/react-components/react-button/stories/ToggleButton/ToggleButtonAppearance.stories.tsx b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonAppearance.stories.tsx
new file mode 100644
index 00000000000000..c5d4ddd5855d74
--- /dev/null
+++ b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonAppearance.stories.tsx
@@ -0,0 +1,36 @@
+import * as React from 'react';
+import { makeStyles, ToggleButton } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Appearance = () => {
+ const styles = useStyles();
+
+ return (
+
+ Default
+ Primary
+ Outline
+ Subtle
+ Transparent
+
+ );
+};
+
+Appearance.parameters = {
+ docs: {
+ description: {
+ story:
+ '- `(undefined)`: the toggle button appears with the default style\n' +
+ '- `primary`: emphasizes the toggle button as a primary action.\n' +
+ '- `outline`: removes background styling.\n' +
+ '- `subtle`: minimizes emphasis to blend into the background until hovered or focused\n' +
+ '- `transparent`: removes background and border styling.\n',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/ToggleButton/ToggleButtonChecked.stories.tsx b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonChecked.stories.tsx
new file mode 100644
index 00000000000000..85e2fcd789f827
--- /dev/null
+++ b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonChecked.stories.tsx
@@ -0,0 +1,30 @@
+import * as React from 'react';
+import { makeStyles, ToggleButton } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Checked = () => {
+ const styles = useStyles();
+
+ return (
+
+ Controlled checked state
+ Controlled unchecked state
+
+ );
+};
+
+Checked.parameters = {
+ docs: {
+ description: {
+ story: `A toggle button can be checked or unchecked. Unchecked is default.
+ If a checked value is given, the button is 'controlled' and will only change state when the
+ props value changes.`,
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/ToggleButton/ToggleButtonDefault.stories.tsx b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonDefault.stories.tsx
new file mode 100644
index 00000000000000..596ad8f2a13638
--- /dev/null
+++ b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonDefault.stories.tsx
@@ -0,0 +1,5 @@
+import * as React from 'react';
+import { ToggleButton } from '@fluentui/react-components';
+import type { ToggleButtonProps } from '@fluentui/react-components';
+
+export const Default = (props: ToggleButtonProps) =>
Example ;
diff --git a/packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonDescription.md b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonDescription.md
similarity index 100%
rename from packages/react-components/react-button/src/stories/ToggleButton/ToggleButtonDescription.md
rename to packages/react-components/react-button/stories/ToggleButton/ToggleButtonDescription.md
diff --git a/packages/react-components/react-button/stories/ToggleButton/ToggleButtonDisabled.stories.tsx b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonDisabled.stories.tsx
new file mode 100644
index 00000000000000..10087f7e183d1f
--- /dev/null
+++ b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonDisabled.stories.tsx
@@ -0,0 +1,48 @@
+import * as React from 'react';
+import { makeStyles, ToggleButton } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ innerWrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+ outerWrapper: {
+ display: 'flex',
+ flexDirection: 'column',
+ rowGap: '15px',
+ },
+});
+
+export const Disabled = () => {
+ const styles = useStyles();
+
+ return (
+
+
+ Enabled state
+ Disabled state
+ Disabled focusable state
+
+
+ Enabled state
+
+ Disabled state
+
+
+ Disabled focusable state
+
+
+
+ );
+};
+
+Disabled.parameters = {
+ docs: {
+ description: {
+ story: `A toggle button can be \`disabled\` or \`disabledFocusable\`.
+ \`disabledFocusable\` is used in scenarios where it is important to keep a consistent tab order
+ for screen reader and keyboard users. The primary example of this pattern is when
+ the disabled toggle button is in a menu or a commandbar and is seldom used for standalone buttons.`,
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/ToggleButton/ToggleButtonIcon.stories.tsx b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonIcon.stories.tsx
new file mode 100644
index 00000000000000..14c29c2bc6fcf2
--- /dev/null
+++ b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonIcon.stories.tsx
@@ -0,0 +1,38 @@
+import * as React from 'react';
+import { bundleIcon, CalendarMonthFilled, CalendarMonthRegular } from '@fluentui/react-icons';
+import { makeStyles, ToggleButton, Tooltip } from '@fluentui/react-components';
+
+const CalendarMonth = bundleIcon(CalendarMonthFilled, CalendarMonthRegular);
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Icon = () => {
+ const styles = useStyles();
+
+ return (
+
+ }>With calendar icon before contents
+ } iconPosition="after">
+ With calendar icon after contents
+
+
+ } aria-label="Icon only" />
+
+
+ );
+};
+
+Icon.parameters = {
+ docs: {
+ description: {
+ story:
+ 'The ToggleButton has an `icon` slot that, if specified, renders an icon either `before` ' +
+ 'or `after` the children, as specified by the `iconPosition` prop.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/ToggleButton/ToggleButtonShape.stories.tsx b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonShape.stories.tsx
new file mode 100644
index 00000000000000..71949805ea8baa
--- /dev/null
+++ b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonShape.stories.tsx
@@ -0,0 +1,29 @@
+import * as React from 'react';
+import { makeStyles, ToggleButton } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Shape = () => {
+ const styles = useStyles();
+
+ return (
+
+ Rounded
+ Circular
+ Square
+
+ );
+};
+
+Shape.parameters = {
+ docs: {
+ description: {
+ story: 'A toggle button can be rounded, circular, or square.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/ToggleButton/ToggleButtonSize.stories.tsx b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonSize.stories.tsx
new file mode 100644
index 00000000000000..382bd466a6b175
--- /dev/null
+++ b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonSize.stories.tsx
@@ -0,0 +1,30 @@
+import * as React from 'react';
+import { makeStyles, ToggleButton } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ wrapper: {
+ alignItems: 'center',
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const Size = () => {
+ const styles = useStyles();
+
+ return (
+
+ Size: small
+ Size: medium
+ Size: large
+
+ );
+};
+
+Size.parameters = {
+ docs: {
+ description: {
+ story: 'A toggle button supports `small`, `medium` and `large` size. Default size is `medium`.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/ToggleButton/ToggleButtonWithLongText.stories.tsx b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonWithLongText.stories.tsx
new file mode 100644
index 00000000000000..78ec5e460b14e3
--- /dev/null
+++ b/packages/react-components/react-button/stories/ToggleButton/ToggleButtonWithLongText.stories.tsx
@@ -0,0 +1,34 @@
+import * as React from 'react';
+import { makeStyles, ToggleButton } from '@fluentui/react-components';
+
+const useStyles = makeStyles({
+ longText: {
+ width: '280px',
+ },
+ wrapper: {
+ alignItems: 'center',
+ columnGap: '15px',
+ display: 'flex',
+ },
+});
+
+export const WithLongText = () => {
+ const styles = useStyles();
+
+ return (
+
+ Short text
+
+ Long text wraps after it hits the max width of the component
+
+
+ );
+};
+
+WithLongText.parameters = {
+ docs: {
+ description: {
+ story: 'Text wraps after it hits the max width of the component.',
+ },
+ },
+};
diff --git a/packages/react-components/react-button/stories/ToggleButton/index.stories.tsx b/packages/react-components/react-button/stories/ToggleButton/index.stories.tsx
new file mode 100644
index 00000000000000..9ac7adf554a882
--- /dev/null
+++ b/packages/react-components/react-button/stories/ToggleButton/index.stories.tsx
@@ -0,0 +1,25 @@
+import { Meta } from '@storybook/react';
+import { ToggleButton } from '@fluentui/react-components';
+import descriptionMd from './ToggleButtonDescription.md';
+import bestPracticesMd from '../Button/ButtonBestPractices.md';
+
+export { Default } from './ToggleButtonDefault.stories';
+export { Shape } from './ToggleButtonShape.stories';
+export { Appearance } from './ToggleButtonAppearance.stories';
+export { Icon } from './ToggleButtonIcon.stories';
+export { Size } from './ToggleButtonSize.stories';
+export { Disabled } from './ToggleButtonDisabled.stories';
+export { Checked } from './ToggleButtonChecked.stories';
+export { WithLongText } from './ToggleButtonWithLongText.stories';
+
+export default {
+ title: 'Components/Button/ToggleButton',
+ component: ToggleButton,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd, bestPracticesMd].join('\n'),
+ },
+ },
+ },
+} as Meta;
diff --git a/packages/react-components/react-button/tsconfig.lib.json b/packages/react-components/react-button/tsconfig.lib.json
index 5d7b14f1e0b70c..53770c42da6dd0 100644
--- a/packages/react-components/react-button/tsconfig.lib.json
+++ b/packages/react-components/react-button/tsconfig.lib.json
@@ -10,7 +10,7 @@
"types": ["static-assets", "environment"]
},
"exclude": [
- "./src/common/**",
+ "./src/testing/**",
"**/*.spec.ts",
"**/*.spec.tsx",
"**/*.test.ts",
diff --git a/packages/react-components/react-button/tsconfig.spec.json b/packages/react-components/react-button/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/react-button/tsconfig.spec.json
+++ b/packages/react-components/react-button/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/react-card/.npmignore b/packages/react-components/react-card/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/react-card/.npmignore
+++ b/packages/react-components/react-card/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/react-card/.storybook/main.js b/packages/react-components/react-card/.storybook/main.js
index f57cfd09509e78..26536b61b387f6 100644
--- a/packages/react-components/react-card/.storybook/main.js
+++ b/packages/react-components/react-card/.storybook/main.js
@@ -2,7 +2,7 @@ const rootMain = require('../../../../.storybook/main');
module.exports = /** @type {Omit
} */ ({
...rootMain,
- stories: [...rootMain.stories, '../src/**/*.stories.mdx', '../src/**/index.stories.@(ts|tsx)'],
+ stories: [...rootMain.stories, '../stories/**/*.stories.mdx', '../stories/**/index.stories.@(ts|tsx)'],
addons: [...rootMain.addons],
webpackFinal: (config, options) => {
const localConfig = { ...rootMain.webpackFinal(config, options) };
diff --git a/packages/react-components/react-card/.storybook/tsconfig.json b/packages/react-components/react-card/.storybook/tsconfig.json
index f9f60e1234ed49..ea89218a3d916f 100644
--- a/packages/react-components/react-card/.storybook/tsconfig.json
+++ b/packages/react-components/react-card/.storybook/tsconfig.json
@@ -6,5 +6,5 @@
"checkJs": true,
"types": ["static-assets", "environment", "storybook__addons"]
},
- "include": ["../src/**/*.stories.ts", "../src/**/*.stories.tsx", "*.js"]
+ "include": ["../stories/**/*.stories.ts", "../stories/**/*.stories.tsx", "*.js"]
}
diff --git a/packages/react-components/react-card/CHANGELOG.json b/packages/react-components/react-card/CHANGELOG.json
index a4a93b11c816c7..90484ca0bfa8d5 100644
--- a/packages/react-components/react-card/CHANGELOG.json
+++ b/packages/react-components/react-card/CHANGELOG.json
@@ -1,6 +1,248 @@
{
"name": "@fluentui/react-card",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 00:35:40 GMT",
+ "tag": "@fluentui/react-card_v9.0.0-beta.30",
+ "version": "9.0.0-beta.30",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-text to v9.1.4",
+ "commit": "eef12b9ae58b64ff68576dc2d865b601e46c85b9"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-button to v9.1.6",
+ "commit": "eef12b9ae58b64ff68576dc2d865b601e46c85b9"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:28 GMT",
+ "tag": "@fluentui/react-card_v9.0.0-beta.29",
+ "version": "9.0.0-beta.29",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-card",
+ "commit": "ffad7cc2b7fd1da575db124105c4bc2dbb352cbb",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-tabster to v9.2.0",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-theme to v9.1.1",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-text to v9.1.3",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-button to v9.1.5",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:44 GMT",
+ "tag": "@fluentui/react-card_v9.0.0-beta.28",
+ "version": "9.0.0-beta.28",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-tabster to v9.1.3",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-text to v9.1.2",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-button to v9.1.4",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 22:24:42 GMT",
+ "tag": "@fluentui/react-card_v9.0.0-beta.27",
+ "version": "9.0.0-beta.27",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-tabster to v9.1.2",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-button to v9.1.3",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/react-card_v9.0.0-beta.26",
+ "version": "9.0.0-beta.26",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-text to v9.1.1",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-button to v9.1.2",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:58 GMT",
+ "tag": "@fluentui/react-card_v9.0.0-beta.25",
+ "version": "9.0.0-beta.25",
+ "comments": {
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ }
+ ],
+ "prerelease": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-tabster to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-text to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-card",
+ "comment": "Bump @fluentui/react-button to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:40 GMT",
"tag": "@fluentui/react-card_v9.0.0-beta.24",
diff --git a/packages/react-components/react-card/CHANGELOG.md b/packages/react-components/react-card/CHANGELOG.md
index 4664afb79ea52d..535d94ce88a67d 100644
--- a/packages/react-components/react-card/CHANGELOG.md
+++ b/packages/react-components/react-card/CHANGELOG.md
@@ -1,9 +1,86 @@
# Change Log - @fluentui/react-card
-This log was last generated on Wed, 03 Aug 2022 16:03:40 GMT and should not be manually modified.
+This log was last generated on Tue, 25 Oct 2022 00:35:40 GMT and should not be manually modified.
+## [9.0.0-beta.30](https://github.com/microsoft/fluentui/tree/@fluentui/react-card_v9.0.0-beta.30)
+
+Tue, 25 Oct 2022 00:35:40 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-card_v9.0.0-beta.29..@fluentui/react-card_v9.0.0-beta.30)
+
+### Changes
+
+- Bump @fluentui/react-text to v9.1.4 ([PR #25363](https://github.com/microsoft/fluentui/pull/25363) by beachball)
+- Bump @fluentui/react-button to v9.1.6 ([PR #25363](https://github.com/microsoft/fluentui/pull/25363) by beachball)
+
+## [9.0.0-beta.29](https://github.com/microsoft/fluentui/tree/@fluentui/react-card_v9.0.0-beta.29)
+
+Thu, 20 Oct 2022 08:39:28 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-card_v9.0.0-beta.28..@fluentui/react-card_v9.0.0-beta.29)
+
+### Changes
+
+- chore: Migrate to new package structure. ([PR #25229](https://github.com/microsoft/fluentui/pull/25229) by tristan.watanabe@gmail.com)
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-tabster to v9.2.0 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-theme to v9.1.1 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-text to v9.1.3 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-button to v9.1.5 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.0.0-beta.28](https://github.com/microsoft/fluentui/tree/@fluentui/react-card_v9.0.0-beta.28)
+
+Thu, 13 Oct 2022 11:02:44 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-card_v9.0.0-beta.27..@fluentui/react-card_v9.0.0-beta.28)
+
+### Changes
+
+- chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-tabster to v9.1.3 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-text to v9.1.2 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-button to v9.1.4 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.0.0-beta.27](https://github.com/microsoft/fluentui/tree/@fluentui/react-card_v9.0.0-beta.27)
+
+Mon, 03 Oct 2022 22:24:42 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-card_v9.0.0-beta.26..@fluentui/react-card_v9.0.0-beta.27)
+
+### Changes
+
+- Bump @fluentui/react-tabster to v9.1.2 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+- Bump @fluentui/react-button to v9.1.3 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+
+## [9.0.0-beta.26](https://github.com/microsoft/fluentui/tree/@fluentui/react-card_v9.0.0-beta.26)
+
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-card_v9.0.0-beta.25..@fluentui/react-card_v9.0.0-beta.26)
+
+### Changes
+
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-text to v9.1.1 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-button to v9.1.2 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.0.0-beta.25](https://github.com/microsoft/fluentui/tree/@fluentui/react-card_v9.0.0-beta.25)
+
+Thu, 15 Sep 2022 09:49:58 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-card_v9.0.0-beta.24..@fluentui/react-card_v9.0.0-beta.25)
+
+### Changes
+
+- chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-tabster to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-text to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-button to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.0.0-beta.24](https://github.com/microsoft/fluentui/tree/@fluentui/react-card_v9.0.0-beta.24)
Wed, 03 Aug 2022 16:03:40 GMT
diff --git a/packages/react-components/react-card/README.md b/packages/react-components/react-card/README.md
index 9780bd30e8d4d2..0137722d821f88 100644
--- a/packages/react-components/react-card/README.md
+++ b/packages/react-components/react-card/README.md
@@ -16,7 +16,7 @@ import { Card, CardPreview, CardHeader, CardFooter } from "@fluentui/react-compo
Example Card usage:
-![example of a Card component in usage](./assets/card-example.png)
+![example of a Card component in usage](./docs/assets/card-example.png)
```jsx
import { Share16Regular, ArrowReply16Regular } from '@fluentui/react-icons';
diff --git a/packages/react-components/react-card/config/api-extractor.json b/packages/react-components/react-card/config/api-extractor.json
index eee94ff6de902d..637d9797ae3e6e 100644
--- a/packages/react-components/react-card/config/api-extractor.json
+++ b/packages/react-components/react-card/config/api-extractor.json
@@ -1,5 +1,9 @@
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
"extends": "@fluentui/scripts/api-extractor/api-extractor.common.v-next.json",
- "mainEntryPointFilePath": "/dist/types/index.d.ts"
+ "dtsRollup": {
+ "enabled": true,
+ "untrimmedFilePath": "",
+ "publicTrimmedFilePath": "/dist/index.d.ts"
+ }
}
diff --git a/packages/react-components/react-card/config/api-extractor.local.json b/packages/react-components/react-card/config/api-extractor.local.json
deleted file mode 100644
index 69e764bce3a592..00000000000000
--- a/packages/react-components/react-card/config/api-extractor.local.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
- "extends": "./api-extractor.json",
- "mainEntryPointFilePath": "/dist/types/packages/react-components//src/index.d.ts"
-}
diff --git a/packages/react-components/react-card/MIGRATION.md b/packages/react-components/react-card/docs/MIGRATION.md
similarity index 100%
rename from packages/react-components/react-card/MIGRATION.md
rename to packages/react-components/react-card/docs/MIGRATION.md
diff --git a/packages/react-components/react-card/Spec.md b/packages/react-components/react-card/docs/Spec.md
similarity index 100%
rename from packages/react-components/react-card/Spec.md
rename to packages/react-components/react-card/docs/Spec.md
diff --git a/packages/react-components/react-card/assets/Card.png b/packages/react-components/react-card/docs/assets/Card.png
similarity index 100%
rename from packages/react-components/react-card/assets/Card.png
rename to packages/react-components/react-card/docs/assets/Card.png
diff --git a/packages/react-components/react-card/assets/CardHeader.png b/packages/react-components/react-card/docs/assets/CardHeader.png
similarity index 100%
rename from packages/react-components/react-card/assets/CardHeader.png
rename to packages/react-components/react-card/docs/assets/CardHeader.png
diff --git a/packages/react-components/react-card/assets/CardPreview.png b/packages/react-components/react-card/docs/assets/CardPreview.png
similarity index 100%
rename from packages/react-components/react-card/assets/CardPreview.png
rename to packages/react-components/react-card/docs/assets/CardPreview.png
diff --git a/packages/react-components/react-card/assets/ai_deck_template.png b/packages/react-components/react-card/docs/assets/ai_deck_template.png
similarity index 100%
rename from packages/react-components/react-card/assets/ai_deck_template.png
rename to packages/react-components/react-card/docs/assets/ai_deck_template.png
diff --git a/packages/react-components/react-card/assets/avatar_mauricio.svg b/packages/react-components/react-card/docs/assets/avatar_mauricio.svg
similarity index 100%
rename from packages/react-components/react-card/assets/avatar_mauricio.svg
rename to packages/react-components/react-card/docs/assets/avatar_mauricio.svg
diff --git a/packages/react-components/react-card/assets/card-example.png b/packages/react-components/react-card/docs/assets/card-example.png
similarity index 100%
rename from packages/react-components/react-card/assets/card-example.png
rename to packages/react-components/react-card/docs/assets/card-example.png
diff --git a/packages/react-components/react-card/assets/context-interaction-keyboard.png b/packages/react-components/react-card/docs/assets/context-interaction-keyboard.png
similarity index 100%
rename from packages/react-components/react-card/assets/context-interaction-keyboard.png
rename to packages/react-components/react-card/docs/assets/context-interaction-keyboard.png
diff --git a/packages/react-components/react-card/assets/context-interaction-mouse.png b/packages/react-components/react-card/docs/assets/context-interaction-mouse.png
similarity index 100%
rename from packages/react-components/react-card/assets/context-interaction-mouse.png
rename to packages/react-components/react-card/docs/assets/context-interaction-mouse.png
diff --git a/packages/react-components/react-card/assets/context-narrator.png b/packages/react-components/react-card/docs/assets/context-narrator.png
similarity index 100%
rename from packages/react-components/react-card/assets/context-narrator.png
rename to packages/react-components/react-card/docs/assets/context-narrator.png
diff --git a/packages/react-components/react-card/assets/disabled-narrator.png b/packages/react-components/react-card/docs/assets/disabled-narrator.png
similarity index 100%
rename from packages/react-components/react-card/assets/disabled-narrator.png
rename to packages/react-components/react-card/docs/assets/disabled-narrator.png
diff --git a/packages/react-components/react-card/assets/disabled.png b/packages/react-components/react-card/docs/assets/disabled.png
similarity index 100%
rename from packages/react-components/react-card/assets/disabled.png
rename to packages/react-components/react-card/docs/assets/disabled.png
diff --git a/packages/react-components/react-card/assets/interactive-interaction-keyboard.png b/packages/react-components/react-card/docs/assets/interactive-interaction-keyboard.png
similarity index 100%
rename from packages/react-components/react-card/assets/interactive-interaction-keyboard.png
rename to packages/react-components/react-card/docs/assets/interactive-interaction-keyboard.png
diff --git a/packages/react-components/react-card/assets/interactive-interaction-mouse.png b/packages/react-components/react-card/docs/assets/interactive-interaction-mouse.png
similarity index 100%
rename from packages/react-components/react-card/assets/interactive-interaction-mouse.png
rename to packages/react-components/react-card/docs/assets/interactive-interaction-mouse.png
diff --git a/packages/react-components/react-card/assets/interactive-narrator.png b/packages/react-components/react-card/docs/assets/interactive-narrator.png
similarity index 100%
rename from packages/react-components/react-card/assets/interactive-narrator.png
rename to packages/react-components/react-card/docs/assets/interactive-narrator.png
diff --git a/packages/react-components/react-card/assets/non-interactive-interaction-keyboard.png b/packages/react-components/react-card/docs/assets/non-interactive-interaction-keyboard.png
similarity index 100%
rename from packages/react-components/react-card/assets/non-interactive-interaction-keyboard.png
rename to packages/react-components/react-card/docs/assets/non-interactive-interaction-keyboard.png
diff --git a/packages/react-components/react-card/assets/non-interactive-interaction-mouse.png b/packages/react-components/react-card/docs/assets/non-interactive-interaction-mouse.png
similarity index 100%
rename from packages/react-components/react-card/assets/non-interactive-interaction-mouse.png
rename to packages/react-components/react-card/docs/assets/non-interactive-interaction-mouse.png
diff --git a/packages/react-components/react-card/assets/non-interactive-narrator.png b/packages/react-components/react-card/docs/assets/non-interactive-narrator.png
similarity index 100%
rename from packages/react-components/react-card/assets/non-interactive-narrator.png
rename to packages/react-components/react-card/docs/assets/non-interactive-narrator.png
diff --git a/packages/react-components/react-card/assets/non-interactive-selectable-interaction-keyboard.png b/packages/react-components/react-card/docs/assets/non-interactive-selectable-interaction-keyboard.png
similarity index 100%
rename from packages/react-components/react-card/assets/non-interactive-selectable-interaction-keyboard.png
rename to packages/react-components/react-card/docs/assets/non-interactive-selectable-interaction-keyboard.png
diff --git a/packages/react-components/react-card/assets/non-interactive-selectable-interaction-mouse.png b/packages/react-components/react-card/docs/assets/non-interactive-selectable-interaction-mouse.png
similarity index 100%
rename from packages/react-components/react-card/assets/non-interactive-selectable-interaction-mouse.png
rename to packages/react-components/react-card/docs/assets/non-interactive-selectable-interaction-mouse.png
diff --git a/packages/react-components/react-card/assets/selectable-interaction-keyboard.png b/packages/react-components/react-card/docs/assets/selectable-interaction-keyboard.png
similarity index 100%
rename from packages/react-components/react-card/assets/selectable-interaction-keyboard.png
rename to packages/react-components/react-card/docs/assets/selectable-interaction-keyboard.png
diff --git a/packages/react-components/react-card/assets/selectable-interaction-mouse.png b/packages/react-components/react-card/docs/assets/selectable-interaction-mouse.png
similarity index 100%
rename from packages/react-components/react-card/assets/selectable-interaction-mouse.png
rename to packages/react-components/react-card/docs/assets/selectable-interaction-mouse.png
diff --git a/packages/react-components/react-card/assets/selectable-narrator.png b/packages/react-components/react-card/docs/assets/selectable-narrator.png
similarity index 100%
rename from packages/react-components/react-card/assets/selectable-narrator.png
rename to packages/react-components/react-card/docs/assets/selectable-narrator.png
diff --git a/packages/react-components/react-card/e2e/Card.e2e.tsx b/packages/react-components/react-card/e2e/Card.e2e.tsx
deleted file mode 100644
index 66c7bfa324e0db..00000000000000
--- a/packages/react-components/react-card/e2e/Card.e2e.tsx
+++ /dev/null
@@ -1,243 +0,0 @@
-import * as React from 'react';
-import { mount } from '@cypress/react';
-import type {} from '@cypress/react';
-import { FluentProvider } from '@fluentui/react-provider';
-import { webLightTheme } from '@fluentui/react-theme';
-import { Button } from '@fluentui/react-button';
-import { Card, CardFooter, CardHeader } from '@fluentui/react-card';
-import type { CardProps } from '@fluentui/react-card';
-
-const mountFluent = (element: JSX.Element) => {
- mount({element} );
-};
-
-const CardSample = (props: CardProps) => {
- const ASSET_URL = 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-card';
-
- const powerpointLogoURL = ASSET_URL + '/assets/powerpoint_logo.svg';
-
- return (
- <>
-
- Before
-
-
- }
- header={App Name }
- description={Developer }
- />
-
- Donut chocolate bar oat cake. Dragée tiramisu lollipop bear claw. Marshmallow pastry jujubes toffee sugar
- plum.
-
-
-
- Open
-
-
- Close
-
-
-
-
- After
-
- >
- );
-};
-
-describe('Card', () => {
- describe('focus behaviors', () => {
- describe('focusMode="off" (default)', () => {
- it('should not be focusable', () => {
- mountFluent( );
-
- cy.get('#before').focus();
-
- cy.get('#card').should('not.be.focused');
-
- cy.realPress('Tab');
-
- cy.get('#card').should('not.be.focused');
- cy.get('#open-button').should('be.focused');
- });
- });
-
- describe('focusMode="no-tab"', () => {
- it('should be focusable', () => {
- mountFluent( );
-
- const card = cy.get('#card');
-
- card.should('not.be.focused');
-
- card.focus();
-
- card.should('be.focused');
- });
-
- it('should focus inner elements on EnterKey press', () => {
- mountFluent( );
-
- cy.get('#card').focus();
-
- cy.realPress('Enter');
-
- cy.get('#open-button').should('be.focused');
- });
-
- it('should not focus inner elements on Tab press', () => {
- mountFluent( );
-
- cy.get('#card').focus();
-
- cy.realPress('Tab');
-
- cy.get('#card').should('not.be.focused');
- cy.get('#after').should('be.focused');
- });
-
- it('should trap focus', () => {
- mountFluent( );
-
- cy.get('#open-button').focus();
-
- cy.realPress('Tab');
-
- cy.get('#open-button').should('not.be.focused');
- cy.get('#close-button').should('be.focused');
-
- cy.realPress('Tab');
-
- cy.get('#open-button').should('be.focused');
- cy.get('#close-button').should('not.be.focused');
- });
-
- it('should focus parent on Esc press', () => {
- mountFluent( );
-
- cy.get('#open-button').focus();
-
- cy.realPress('Escape');
-
- cy.get('#open-button').should('not.be.focused');
- cy.get('#card').should('be.focused');
- });
- });
-
- describe('focusMode="tab-exit"', () => {
- it('should be focusable', () => {
- mountFluent( );
-
- const card = cy.get('#card');
-
- card.should('not.be.focused');
-
- card.focus();
-
- card.should('be.focused');
- });
-
- it('should focus inner elements on EnterKey press', () => {
- mountFluent( );
-
- cy.get('#card').focus();
-
- cy.realPress('Enter');
-
- cy.get('#open-button').should('be.focused');
- });
-
- it('should not focus inner elements on Tab press', () => {
- mountFluent( );
-
- cy.get('#card').focus();
-
- cy.realPress('Tab');
-
- cy.get('#card').should('not.be.focused');
- cy.get('#after').should('be.focused');
- });
-
- it('should exit on Tab press', () => {
- mountFluent( );
-
- cy.get('#close-button').focus();
-
- cy.realPress('Tab');
-
- cy.get('#after').should('be.focused');
- });
-
- it('should focus parent on Esc press', () => {
- mountFluent( );
-
- cy.get('#card').focus().realPress('Enter');
-
- cy.get('#open-button').should('be.focused');
-
- cy.realPress('Escape');
-
- cy.get('#card').should('be.focused');
- });
- });
-
- describe('focusMode="tab-only"', () => {
- it('should be focusable', () => {
- mountFluent( );
-
- const card = cy.get('#card');
-
- card.should('not.be.focused');
-
- card.focus();
-
- card.should('be.focused');
- });
-
- it('should focus inner elements on EnterKey press', () => {
- mountFluent( );
-
- cy.get('#card').focus();
-
- cy.realPress('Enter');
-
- cy.get('#open-button').should('be.focused');
- });
-
- it('should focus inner elements on Tab press', () => {
- mountFluent( );
-
- cy.get('#card').focus();
-
- cy.realPress('Tab');
-
- cy.get('#card').should('not.be.focused');
- cy.get('#open-button').should('be.focused');
- });
-
- it('should exit on Tab press', () => {
- mountFluent( );
-
- cy.get('#close-button').focus();
-
- cy.realPress('Tab');
-
- cy.get('#after').should('be.focused');
- });
-
- it('should focus parent on Esc press', () => {
- mountFluent( );
-
- cy.get('#card').focus().realPress('Enter');
-
- cy.get('#open-button').should('be.focused');
-
- cy.realPress('Escape');
-
- cy.get('#card').should('be.focused');
- });
- });
- });
-});
diff --git a/packages/react-components/react-card/e2e/tsconfig.json b/packages/react-components/react-card/e2e/tsconfig.json
deleted file mode 100644
index f6b23b30d510ba..00000000000000
--- a/packages/react-components/react-card/e2e/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "../tsconfig.json",
- "compilerOptions": {
- "isolatedModules": false,
- "types": ["node", "cypress", "cypress-storybook/cypress", "cypress-real-events"],
- "lib": ["ES2019", "dom"]
- },
- "include": ["**/*.ts", "**/*.tsx"]
-}
diff --git a/packages/react-components/react-card/package.json b/packages/react-components/react-card/package.json
index f8a805f02717fb..3983f73f4ef215 100644
--- a/packages/react-components/react-card/package.json
+++ b/packages/react-components/react-card/package.json
@@ -1,11 +1,11 @@
{
"name": "@fluentui/react-card",
- "version": "9.0.0-beta.24",
+ "version": "9.0.0-beta.30",
"private": false,
"description": "Card container components for Fluent UI React.",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
- "typings": "dist/index.d.ts",
+ "typings": "./dist/index.d.ts",
"sideEffects": false,
"repository": {
"type": "git",
@@ -23,31 +23,30 @@
"lint": "just-scripts lint",
"start": "yarn storybook",
"test": "jest --passWithNoTests",
- "docs": "api-extractor run --config=config/api-extractor.local.json --local",
- "build:local": "tsc -p ./tsconfig.lib.json --module esnext --emitDeclarationOnly && node ../../../scripts/typescript/normalize-import --output ./dist/types/packages/react-components/react-card/src && yarn docs",
"storybook": "start-storybook",
- "type-check": "tsc -b tsconfig.json"
+ "type-check": "tsc -b tsconfig.json",
+ "generate-api": "tsc -p ./tsconfig.lib.json --emitDeclarationOnly && just-scripts api-extractor"
},
"devDependencies": {
"@fluentui/eslint-plugin": "*",
"@fluentui/react-conformance": "*",
- "@fluentui/react-conformance-griffel": "9.0.0-beta.12",
+ "@fluentui/react-conformance-griffel": "9.0.0-beta.16",
"@fluentui/scripts": "^1.0.0",
- "@fluentui/react-text": "^9.0.4",
- "@fluentui/react-button": "^9.1.0"
+ "@fluentui/react-text": "^9.1.4",
+ "@fluentui/react-button": "^9.1.6"
},
"dependencies": {
- "@griffel/react": "^1.3.0",
- "@fluentui/react-utilities": "^9.0.2",
- "@fluentui/react-tabster": "^9.1.0",
- "@fluentui/react-theme": "^9.0.0",
+ "@griffel/react": "^1.4.1",
+ "@fluentui/react-utilities": "^9.1.2",
+ "@fluentui/react-tabster": "^9.2.0",
+ "@fluentui/react-theme": "^9.1.1",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0"
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0"
},
"beachball": {
"disallowedChangeTypes": [
@@ -58,9 +57,10 @@
},
"exports": {
".": {
- "types": "./lib/index.d.ts",
+ "types": "./dist/index.d.ts",
"import": "./lib/index.js",
"require": "./lib-commonjs/index.js"
- }
+ },
+ "./package.json": "./package.json"
}
}
diff --git a/packages/react-components/react-card/src/components/Card/Card.cy.tsx b/packages/react-components/react-card/src/components/Card/Card.cy.tsx
new file mode 100644
index 00000000000000..eb6393c8358c18
--- /dev/null
+++ b/packages/react-components/react-card/src/components/Card/Card.cy.tsx
@@ -0,0 +1,243 @@
+import * as React from 'react';
+import { mount } from '@cypress/react';
+import type {} from '@cypress/react';
+import { FluentProvider } from '@fluentui/react-provider';
+import { webLightTheme } from '@fluentui/react-theme';
+import { Button } from '@fluentui/react-button';
+import { Card, CardFooter, CardHeader } from '@fluentui/react-card';
+import type { CardProps } from '@fluentui/react-card';
+
+const mountFluent = (element: JSX.Element) => {
+ mount({element} );
+};
+
+const CardSample = (props: CardProps) => {
+ const ASSET_URL = 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-card';
+
+ const powerpointLogoURL = ASSET_URL + '/stories/assets/powerpoint_logo.svg';
+
+ return (
+ <>
+
+ Before
+
+
+ }
+ header={App Name }
+ description={Developer }
+ />
+
+ Donut chocolate bar oat cake. Dragée tiramisu lollipop bear claw. Marshmallow pastry jujubes toffee sugar
+ plum.
+
+
+
+ Open
+
+
+ Close
+
+
+
+
+ After
+
+ >
+ );
+};
+
+describe('Card', () => {
+ describe('focus behaviors', () => {
+ describe('focusMode="off" (default)', () => {
+ it('should not be focusable', () => {
+ mountFluent( );
+
+ cy.get('#before').focus();
+
+ cy.get('#card').should('not.be.focused');
+
+ cy.realPress('Tab');
+
+ cy.get('#card').should('not.be.focused');
+ cy.get('#open-button').should('be.focused');
+ });
+ });
+
+ describe('focusMode="no-tab"', () => {
+ it('should be focusable', () => {
+ mountFluent( );
+
+ const card = cy.get('#card');
+
+ card.should('not.be.focused');
+
+ card.focus();
+
+ card.should('be.focused');
+ });
+
+ it('should focus inner elements on EnterKey press', () => {
+ mountFluent( );
+
+ cy.get('#card').focus();
+
+ cy.realPress('Enter');
+
+ cy.get('#open-button').should('be.focused');
+ });
+
+ it('should not focus inner elements on Tab press', () => {
+ mountFluent( );
+
+ cy.get('#card').focus();
+
+ cy.realPress('Tab');
+
+ cy.get('#card').should('not.be.focused');
+ cy.get('#after').should('be.focused');
+ });
+
+ it('should trap focus', () => {
+ mountFluent( );
+
+ cy.get('#open-button').focus();
+
+ cy.realPress('Tab');
+
+ cy.get('#open-button').should('not.be.focused');
+ cy.get('#close-button').should('be.focused');
+
+ cy.realPress('Tab');
+
+ cy.get('#open-button').should('be.focused');
+ cy.get('#close-button').should('not.be.focused');
+ });
+
+ it('should focus parent on Esc press', () => {
+ mountFluent( );
+
+ cy.get('#open-button').focus();
+
+ cy.realPress('Escape');
+
+ cy.get('#open-button').should('not.be.focused');
+ cy.get('#card').should('be.focused');
+ });
+ });
+
+ describe('focusMode="tab-exit"', () => {
+ it('should be focusable', () => {
+ mountFluent( );
+
+ const card = cy.get('#card');
+
+ card.should('not.be.focused');
+
+ card.focus();
+
+ card.should('be.focused');
+ });
+
+ it('should focus inner elements on EnterKey press', () => {
+ mountFluent( );
+
+ cy.get('#card').focus();
+
+ cy.realPress('Enter');
+
+ cy.get('#open-button').should('be.focused');
+ });
+
+ it('should not focus inner elements on Tab press', () => {
+ mountFluent( );
+
+ cy.get('#card').focus();
+
+ cy.realPress('Tab');
+
+ cy.get('#card').should('not.be.focused');
+ cy.get('#after').should('be.focused');
+ });
+
+ it('should exit on Tab press', () => {
+ mountFluent( );
+
+ cy.get('#close-button').focus();
+
+ cy.realPress('Tab');
+
+ cy.get('#after').should('be.focused');
+ });
+
+ it('should focus parent on Esc press', () => {
+ mountFluent( );
+
+ cy.get('#card').focus().realPress('Enter');
+
+ cy.get('#open-button').should('be.focused');
+
+ cy.realPress('Escape');
+
+ cy.get('#card').should('be.focused');
+ });
+ });
+
+ describe('focusMode="tab-only"', () => {
+ it('should be focusable', () => {
+ mountFluent( );
+
+ const card = cy.get('#card');
+
+ card.should('not.be.focused');
+
+ card.focus();
+
+ card.should('be.focused');
+ });
+
+ it('should focus inner elements on EnterKey press', () => {
+ mountFluent( );
+
+ cy.get('#card').focus();
+
+ cy.realPress('Enter');
+
+ cy.get('#open-button').should('be.focused');
+ });
+
+ it('should focus inner elements on Tab press', () => {
+ mountFluent( );
+
+ cy.get('#card').focus();
+
+ cy.realPress('Tab');
+
+ cy.get('#card').should('not.be.focused');
+ cy.get('#open-button').should('be.focused');
+ });
+
+ it('should exit on Tab press', () => {
+ mountFluent( );
+
+ cy.get('#close-button').focus();
+
+ cy.realPress('Tab');
+
+ cy.get('#after').should('be.focused');
+ });
+
+ it('should focus parent on Esc press', () => {
+ mountFluent( );
+
+ cy.get('#card').focus().realPress('Enter');
+
+ cy.get('#open-button').should('be.focused');
+
+ cy.realPress('Escape');
+
+ cy.get('#card').should('be.focused');
+ });
+ });
+ });
+});
diff --git a/packages/react-components/react-card/src/components/Card/Card.test.tsx b/packages/react-components/react-card/src/components/Card/Card.test.tsx
index 5c791958cff0a2..cff120190e4d85 100644
--- a/packages/react-components/react-card/src/components/Card/Card.test.tsx
+++ b/packages/react-components/react-card/src/components/Card/Card.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { render } from '@testing-library/react';
import { Card } from './Card';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
describe('Card', () => {
isConformant({
diff --git a/packages/react-components/react-card/src/components/CardFooter/CardFooter.test.tsx b/packages/react-components/react-card/src/components/CardFooter/CardFooter.test.tsx
index faf4af2bb6342c..119c955d5593ab 100644
--- a/packages/react-components/react-card/src/components/CardFooter/CardFooter.test.tsx
+++ b/packages/react-components/react-card/src/components/CardFooter/CardFooter.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { render } from '@testing-library/react';
import { CardFooter } from './CardFooter';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
describe('CardFooter', () => {
isConformant({
diff --git a/packages/react-components/react-card/src/components/CardHeader/CardHeader.test.tsx b/packages/react-components/react-card/src/components/CardHeader/CardHeader.test.tsx
index d70c8f7d3a9894..4f1a171daa2168 100644
--- a/packages/react-components/react-card/src/components/CardHeader/CardHeader.test.tsx
+++ b/packages/react-components/react-card/src/components/CardHeader/CardHeader.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { render } from '@testing-library/react';
import { CardHeader } from './CardHeader';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
describe('CardHeader', () => {
isConformant({
diff --git a/packages/react-components/react-card/src/components/CardPreview/CardPreview.test.tsx b/packages/react-components/react-card/src/components/CardPreview/CardPreview.test.tsx
index 4aa45bb0642c3a..adc5afdc0aab89 100644
--- a/packages/react-components/react-card/src/components/CardPreview/CardPreview.test.tsx
+++ b/packages/react-components/react-card/src/components/CardPreview/CardPreview.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { render } from '@testing-library/react';
import { CardPreview } from './CardPreview';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
describe('CardPreview', () => {
isConformant({
diff --git a/packages/react-components/react-card/src/stories/Card/CardDefault.stories.tsx b/packages/react-components/react-card/src/stories/Card/CardDefault.stories.tsx
deleted file mode 100644
index 4c84a862a626a2..00000000000000
--- a/packages/react-components/react-card/src/stories/Card/CardDefault.stories.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import * as React from 'react';
-
-import { Body1, Caption1, Button } from '@fluentui/react-components';
-import { ArrowReplyRegular, ShareRegular } from '@fluentui/react-icons';
-import { Card, CardFooter, CardHeader, CardPreview } from '@fluentui/react-card';
-import { ASSET_URL } from './SampleCard.stories';
-
-const avatarElviaURL = ASSET_URL + '/assets/avatar_elvia.svg';
-const wordLogoURL = ASSET_URL + '/assets/word_logo.svg';
-const docTemplateURL = ASSET_URL + '/assets/doc_template.png';
-
-export const Default = () => {
- return (
-
-
- Elvia Atkins mentioned you
-
- }
- description={5h ago · About us - Overview }
- />
-
- }>
-
-
-
- }>Reply
- }>Share
-
-
- );
-};
diff --git a/packages/react-components/react-card/src/stories/CardFooter/index.stories.tsx b/packages/react-components/react-card/src/stories/CardFooter/index.stories.tsx
deleted file mode 100644
index f7869cc4380e5d..00000000000000
--- a/packages/react-components/react-card/src/stories/CardFooter/index.stories.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { CardFooter } from '../../index';
-import descriptionMd from './CardFooterDescription.md';
-
-export { Default } from './CardFooterDefault.stories';
-
-export default {
- title: 'Preview Components/Card/CardFooter',
- component: CardFooter,
- parameters: {
- docs: {
- description: {
- component: [descriptionMd].join('\n'),
- },
- },
- },
-};
diff --git a/packages/react-components/react-card/src/stories/CardHeader/index.stories.tsx b/packages/react-components/react-card/src/stories/CardHeader/index.stories.tsx
deleted file mode 100644
index 5df747bf210ff4..00000000000000
--- a/packages/react-components/react-card/src/stories/CardHeader/index.stories.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { CardHeader } from '../../index';
-import descriptionMd from './CardHeaderDescription.md';
-
-export { Default } from './CardHeaderDefault.stories';
-
-export default {
- title: 'Preview Components/Card/CardHeader',
- component: CardHeader,
- parameters: {
- docs: {
- description: {
- component: [descriptionMd].join('\n'),
- },
- },
- },
-};
diff --git a/packages/react-components/react-card/src/stories/CardPreview/CardPreviewDefault.stories.tsx b/packages/react-components/react-card/src/stories/CardPreview/CardPreviewDefault.stories.tsx
deleted file mode 100644
index 10367d71a3508a..00000000000000
--- a/packages/react-components/react-card/src/stories/CardPreview/CardPreviewDefault.stories.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import * as React from 'react';
-import { CardPreview } from '../../index';
-
-const ASSET_URL = 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-components/react-card';
-const wordLogoURL = ASSET_URL + '/assets/word_logo.svg';
-const docTemplateURL = ASSET_URL + '/assets/doc_template.png';
-
-export const Default = () => (
- }>
-
-
-);
diff --git a/packages/react-components/react-card/src/stories/CardPreview/index.stories.tsx b/packages/react-components/react-card/src/stories/CardPreview/index.stories.tsx
deleted file mode 100644
index 9d0f61bd6555e1..00000000000000
--- a/packages/react-components/react-card/src/stories/CardPreview/index.stories.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { CardPreview } from '../../index';
-import descriptionMd from './CardPreviewDescription.md';
-
-export { Default } from './CardPreviewDefault.stories';
-
-export default {
- title: 'Preview Components/Card/CardPreview',
- component: CardPreview,
- parameters: {
- docs: {
- description: {
- component: [descriptionMd].join('\n'),
- },
- },
- },
-};
diff --git a/packages/react-components/react-card/src/common/isConformant.ts b/packages/react-components/react-card/src/testing/isConformant.ts
similarity index 100%
rename from packages/react-components/react-card/src/common/isConformant.ts
rename to packages/react-components/react-card/src/testing/isConformant.ts
diff --git a/packages/react-components/react-card/src/stories/Card/CardAppearance.stories.tsx b/packages/react-components/react-card/stories/Card/CardAppearance.stories.tsx
similarity index 100%
rename from packages/react-components/react-card/src/stories/Card/CardAppearance.stories.tsx
rename to packages/react-components/react-card/stories/Card/CardAppearance.stories.tsx
diff --git a/packages/react-components/react-card/stories/Card/CardDefault.stories.tsx b/packages/react-components/react-card/stories/Card/CardDefault.stories.tsx
new file mode 100644
index 00000000000000..7a3f426b87b8ea
--- /dev/null
+++ b/packages/react-components/react-card/stories/Card/CardDefault.stories.tsx
@@ -0,0 +1,34 @@
+import * as React from 'react';
+
+import { Body1, Caption1, Button } from '@fluentui/react-components';
+import { ArrowReplyRegular, ShareRegular } from '@fluentui/react-icons';
+import { Card, CardFooter, CardHeader, CardPreview } from '@fluentui/react-card';
+
+const ASSET_URL = 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-components/react-card';
+const avatarElviaURL = ASSET_URL + '/stories/assets/avatar_elvia.svg';
+const wordLogoURL = ASSET_URL + '/stories/assets/word_logo.svg';
+const docTemplateURL = ASSET_URL + '/stories/assets/doc_template.png';
+
+export const Default = () => {
+ return (
+
+
+ Elvia Atkins mentioned you
+
+ }
+ description={5h ago · About us - Overview }
+ />
+
+ }>
+
+
+
+ }>Reply
+ }>Share
+
+
+ );
+};
diff --git a/packages/react-components/react-card/src/stories/Card/CardDescription.md b/packages/react-components/react-card/stories/Card/CardDescription.md
similarity index 100%
rename from packages/react-components/react-card/src/stories/Card/CardDescription.md
rename to packages/react-components/react-card/stories/Card/CardDescription.md
diff --git a/packages/react-components/react-card/src/stories/Card/CardFocusMode.stories.tsx b/packages/react-components/react-card/stories/Card/CardFocusMode.stories.tsx
similarity index 100%
rename from packages/react-components/react-card/src/stories/Card/CardFocusMode.stories.tsx
rename to packages/react-components/react-card/stories/Card/CardFocusMode.stories.tsx
diff --git a/packages/react-components/react-card/src/stories/Card/CardOrientation.stories.tsx b/packages/react-components/react-card/stories/Card/CardOrientation.stories.tsx
similarity index 86%
rename from packages/react-components/react-card/src/stories/Card/CardOrientation.stories.tsx
rename to packages/react-components/react-card/stories/Card/CardOrientation.stories.tsx
index 6c8fe0601ebe4d..a4c05436219b8c 100644
--- a/packages/react-components/react-card/src/stories/Card/CardOrientation.stories.tsx
+++ b/packages/react-components/react-card/stories/Card/CardOrientation.stories.tsx
@@ -3,12 +3,10 @@ import { makeStyles, shorthands, Avatar, Body1, Button, Caption1 } from '@fluent
import { MoreHorizontal24Regular } from '@fluentui/react-icons';
import { Card, CardHeader, CardPreview } from '@fluentui/react-card';
import { SampleCard, Title } from './SampleCard.stories';
-import Logo from '../../../assets/logo.svg';
+import Logo from '../assets/logo.svg';
-export const ASSET_URL =
- 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-components/react-card';
-
-const avatarElviaURL = ASSET_URL + '/assets/avatar_elvia.svg';
+const ASSET_URL = 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-components/react-card';
+const avatarElviaURL = ASSET_URL + '/stories/assets/avatar_elvia.svg';
const useStyles = makeStyles({
root: {
diff --git a/packages/react-components/react-card/src/stories/Card/CardSize.stories.tsx b/packages/react-components/react-card/stories/Card/CardSize.stories.tsx
similarity index 100%
rename from packages/react-components/react-card/src/stories/Card/CardSize.stories.tsx
rename to packages/react-components/react-card/stories/Card/CardSize.stories.tsx
diff --git a/packages/react-components/react-card/src/stories/Card/CardTemplates.stories.tsx b/packages/react-components/react-card/stories/Card/CardTemplates.stories.tsx
similarity index 91%
rename from packages/react-components/react-card/src/stories/Card/CardTemplates.stories.tsx
rename to packages/react-components/react-card/stories/Card/CardTemplates.stories.tsx
index 612a88f0ee0bdb..524406c4e31245 100644
--- a/packages/react-components/react-card/src/stories/Card/CardTemplates.stories.tsx
+++ b/packages/react-components/react-card/stories/Card/CardTemplates.stories.tsx
@@ -24,19 +24,17 @@ import {
MoreHorizontal48Regular,
} from '@fluentui/react-icons';
import { Card, CardHeader, CardPreview } from '@fluentui/react-card';
-import appLogo from '../../../assets/app_logo.svg';
-import logo1 from '../../../assets/logo.svg';
-import logo2 from '../../../assets/logo2.svg';
-import logo3 from '../../../assets/logo3.svg';
-import excelLogo from '../../../assets/excel_logo.svg';
-import office1 from '../../../assets/office1.png';
-import office2 from '../../../assets/office2.png';
-import avatarColin from '../../../assets/avatar_colin.svg';
+import appLogo from '../assets/app_logo.svg';
+import logo1 from '../assets/logo.svg';
+import logo2 from '../assets/logo2.svg';
+import logo3 from '../assets/logo3.svg';
+import excelLogo from '../assets/excel_logo.svg';
+import office1 from '../assets/office1.png';
+import office2 from '../assets/office2.png';
+import avatarColin from '../assets/avatar_colin.svg';
-export const ASSET_URL =
- 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-components/react-card';
-
-const powerpointLogoURL = ASSET_URL + '/assets/powerpoint_logo.svg';
+const ASSET_URL = 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-components/react-card';
+const powerpointLogoURL = ASSET_URL + '/stories/assets/powerpoint_logo.svg';
const useStyles = makeStyles({
mainContainer: {
diff --git a/packages/react-components/react-card/src/stories/Card/SampleCard.stories.tsx b/packages/react-components/react-card/stories/Card/SampleCard.stories.tsx
similarity index 84%
rename from packages/react-components/react-card/src/stories/Card/SampleCard.stories.tsx
rename to packages/react-components/react-card/stories/Card/SampleCard.stories.tsx
index 40c0de3830e8b1..9b2c2427167929 100644
--- a/packages/react-components/react-card/src/stories/Card/SampleCard.stories.tsx
+++ b/packages/react-components/react-card/stories/Card/SampleCard.stories.tsx
@@ -4,11 +4,9 @@ import { MoreHorizontal20Filled, Open16Regular, Share16Regular } from '@fluentui
import { Card, CardHeader, CardFooter, CardPreview } from '@fluentui/react-card';
import type { CardProps } from '@fluentui/react-card';
-export const ASSET_URL =
- 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-components/react-card';
-
-const powerpointLogoURL = ASSET_URL + '/assets/powerpoint_logo.svg';
-const salesPresentationTemplateURL = ASSET_URL + '/assets/sales_template.png';
+const ASSET_URL = 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-components/react-card';
+const powerpointLogoURL = ASSET_URL + '/stories/assets/powerpoint_logo.svg';
+const salesPresentationTemplateURL = ASSET_URL + '/stories/assets/sales_template.png';
export const SampleCard = (props: CardProps) => (
diff --git a/packages/react-components/react-card/src/stories/Card/index.stories.tsx b/packages/react-components/react-card/stories/Card/index.stories.tsx
similarity index 100%
rename from packages/react-components/react-card/src/stories/Card/index.stories.tsx
rename to packages/react-components/react-card/stories/Card/index.stories.tsx
diff --git a/packages/react-components/react-card/src/stories/CardFooter/CardFooterDefault.stories.tsx b/packages/react-components/react-card/stories/CardFooter/CardFooterDefault.stories.tsx
similarity index 92%
rename from packages/react-components/react-card/src/stories/CardFooter/CardFooterDefault.stories.tsx
rename to packages/react-components/react-card/stories/CardFooter/CardFooterDefault.stories.tsx
index 288ebd05abd1d9..8349ec5e29a152 100644
--- a/packages/react-components/react-card/src/stories/CardFooter/CardFooterDefault.stories.tsx
+++ b/packages/react-components/react-card/stories/CardFooter/CardFooterDefault.stories.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { makeStyles, Button } from '@fluentui/react-components';
import { ArrowReply16Regular, MoreHorizontal16Filled, Share16Regular } from '@fluentui/react-icons';
-import { CardFooter } from '../../index';
+import { CardFooter } from '@fluentui/react-card';
const useStyles = makeStyles({
footer: {
diff --git a/packages/react-components/react-card/src/stories/CardFooter/CardFooterDescription.md b/packages/react-components/react-card/stories/CardFooter/CardFooterDescription.md
similarity index 100%
rename from packages/react-components/react-card/src/stories/CardFooter/CardFooterDescription.md
rename to packages/react-components/react-card/stories/CardFooter/CardFooterDescription.md
diff --git a/packages/react-components/react-card/stories/CardFooter/index.stories.tsx b/packages/react-components/react-card/stories/CardFooter/index.stories.tsx
new file mode 100644
index 00000000000000..d06cde1636407c
--- /dev/null
+++ b/packages/react-components/react-card/stories/CardFooter/index.stories.tsx
@@ -0,0 +1,16 @@
+import { CardFooter } from '@fluentui/react-card';
+import descriptionMd from './CardFooterDescription.md';
+
+export { Default } from './CardFooterDefault.stories';
+
+export default {
+ title: 'Preview Components/Card/CardFooter',
+ component: CardFooter,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd].join('\n'),
+ },
+ },
+ },
+};
diff --git a/packages/react-components/react-card/src/stories/CardHeader/CardHeaderDefault.stories.tsx b/packages/react-components/react-card/stories/CardHeader/CardHeaderDefault.stories.tsx
similarity index 95%
rename from packages/react-components/react-card/src/stories/CardHeader/CardHeaderDefault.stories.tsx
rename to packages/react-components/react-card/stories/CardHeader/CardHeaderDefault.stories.tsx
index 38a95693e15b1e..59dfa5e7a2b487 100644
--- a/packages/react-components/react-card/src/stories/CardHeader/CardHeaderDefault.stories.tsx
+++ b/packages/react-components/react-card/stories/CardHeader/CardHeaderDefault.stories.tsx
@@ -1,11 +1,11 @@
import * as React from 'react';
-import { CardHeader } from '../../index';
+import { CardHeader } from '@fluentui/react-card';
import { makeStyles, shorthands, Button, Body1, Caption1 } from '@fluentui/react-components';
import { MoreHorizontal20Filled } from '@fluentui/react-icons';
const ASSET_URL = 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-components/react-card';
-const powerpointLogoURL = ASSET_URL + '/assets/powerpoint_logo.svg';
+const powerpointLogoURL = ASSET_URL + '/stories/assets/powerpoint_logo.svg';
const useStyles = makeStyles({
container: {
diff --git a/packages/react-components/react-card/src/stories/CardHeader/CardHeaderDescription.md b/packages/react-components/react-card/stories/CardHeader/CardHeaderDescription.md
similarity index 100%
rename from packages/react-components/react-card/src/stories/CardHeader/CardHeaderDescription.md
rename to packages/react-components/react-card/stories/CardHeader/CardHeaderDescription.md
diff --git a/packages/react-components/react-card/stories/CardHeader/index.stories.tsx b/packages/react-components/react-card/stories/CardHeader/index.stories.tsx
new file mode 100644
index 00000000000000..4f2a2cc6f1302a
--- /dev/null
+++ b/packages/react-components/react-card/stories/CardHeader/index.stories.tsx
@@ -0,0 +1,16 @@
+import { CardHeader } from '@fluentui/react-card';
+import descriptionMd from './CardHeaderDescription.md';
+
+export { Default } from './CardHeaderDefault.stories';
+
+export default {
+ title: 'Preview Components/Card/CardHeader',
+ component: CardHeader,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd].join('\n'),
+ },
+ },
+ },
+};
diff --git a/packages/react-components/react-card/stories/CardPreview/CardPreviewDefault.stories.tsx b/packages/react-components/react-card/stories/CardPreview/CardPreviewDefault.stories.tsx
new file mode 100644
index 00000000000000..7c74c65cf0c49d
--- /dev/null
+++ b/packages/react-components/react-card/stories/CardPreview/CardPreviewDefault.stories.tsx
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CardPreview } from '@fluentui/react-card';
+
+const ASSET_URL = 'https://raw.githubusercontent.com/microsoft/fluentui/master/packages/react-components/react-card';
+const wordLogoURL = ASSET_URL + '/stories/assets/word_logo.svg';
+const docTemplateURL = ASSET_URL + '/stories/assets/doc_template.png';
+
+export const Default = () => (
+ }>
+
+
+);
diff --git a/packages/react-components/react-card/src/stories/CardPreview/CardPreviewDescription.md b/packages/react-components/react-card/stories/CardPreview/CardPreviewDescription.md
similarity index 100%
rename from packages/react-components/react-card/src/stories/CardPreview/CardPreviewDescription.md
rename to packages/react-components/react-card/stories/CardPreview/CardPreviewDescription.md
diff --git a/packages/react-components/react-card/stories/CardPreview/index.stories.tsx b/packages/react-components/react-card/stories/CardPreview/index.stories.tsx
new file mode 100644
index 00000000000000..29cb88293d2329
--- /dev/null
+++ b/packages/react-components/react-card/stories/CardPreview/index.stories.tsx
@@ -0,0 +1,16 @@
+import { CardPreview } from '@fluentui/react-card';
+import descriptionMd from './CardPreviewDescription.md';
+
+export { Default } from './CardPreviewDefault.stories';
+
+export default {
+ title: 'Preview Components/Card/CardPreview',
+ component: CardPreview,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd].join('\n'),
+ },
+ },
+ },
+};
diff --git a/packages/react-components/react-card/assets/app_logo.svg b/packages/react-components/react-card/stories/assets/app_logo.svg
similarity index 100%
rename from packages/react-components/react-card/assets/app_logo.svg
rename to packages/react-components/react-card/stories/assets/app_logo.svg
diff --git a/packages/react-components/react-card/assets/avatar_colin.svg b/packages/react-components/react-card/stories/assets/avatar_colin.svg
similarity index 100%
rename from packages/react-components/react-card/assets/avatar_colin.svg
rename to packages/react-components/react-card/stories/assets/avatar_colin.svg
diff --git a/packages/react-components/react-card/assets/avatar_elvia.svg b/packages/react-components/react-card/stories/assets/avatar_elvia.svg
similarity index 100%
rename from packages/react-components/react-card/assets/avatar_elvia.svg
rename to packages/react-components/react-card/stories/assets/avatar_elvia.svg
diff --git a/packages/react-components/react-card/assets/doc_template.png b/packages/react-components/react-card/stories/assets/doc_template.png
similarity index 100%
rename from packages/react-components/react-card/assets/doc_template.png
rename to packages/react-components/react-card/stories/assets/doc_template.png
diff --git a/packages/react-components/react-card/assets/excel_logo.svg b/packages/react-components/react-card/stories/assets/excel_logo.svg
similarity index 100%
rename from packages/react-components/react-card/assets/excel_logo.svg
rename to packages/react-components/react-card/stories/assets/excel_logo.svg
diff --git a/packages/react-components/react-card/assets/logo.svg b/packages/react-components/react-card/stories/assets/logo.svg
similarity index 100%
rename from packages/react-components/react-card/assets/logo.svg
rename to packages/react-components/react-card/stories/assets/logo.svg
diff --git a/packages/react-components/react-card/assets/logo2.svg b/packages/react-components/react-card/stories/assets/logo2.svg
similarity index 100%
rename from packages/react-components/react-card/assets/logo2.svg
rename to packages/react-components/react-card/stories/assets/logo2.svg
diff --git a/packages/react-components/react-card/assets/logo3.svg b/packages/react-components/react-card/stories/assets/logo3.svg
similarity index 100%
rename from packages/react-components/react-card/assets/logo3.svg
rename to packages/react-components/react-card/stories/assets/logo3.svg
diff --git a/packages/react-components/react-card/assets/office1.png b/packages/react-components/react-card/stories/assets/office1.png
similarity index 100%
rename from packages/react-components/react-card/assets/office1.png
rename to packages/react-components/react-card/stories/assets/office1.png
diff --git a/packages/react-components/react-card/assets/office2.png b/packages/react-components/react-card/stories/assets/office2.png
similarity index 100%
rename from packages/react-components/react-card/assets/office2.png
rename to packages/react-components/react-card/stories/assets/office2.png
diff --git a/packages/react-components/react-card/assets/powerpoint_logo.svg b/packages/react-components/react-card/stories/assets/powerpoint_logo.svg
similarity index 100%
rename from packages/react-components/react-card/assets/powerpoint_logo.svg
rename to packages/react-components/react-card/stories/assets/powerpoint_logo.svg
diff --git a/packages/react-components/react-card/assets/sales_template.png b/packages/react-components/react-card/stories/assets/sales_template.png
similarity index 100%
rename from packages/react-components/react-card/assets/sales_template.png
rename to packages/react-components/react-card/stories/assets/sales_template.png
diff --git a/packages/react-components/react-card/assets/word_logo.svg b/packages/react-components/react-card/stories/assets/word_logo.svg
similarity index 100%
rename from packages/react-components/react-card/assets/word_logo.svg
rename to packages/react-components/react-card/stories/assets/word_logo.svg
diff --git a/packages/react-components/react-card/tsconfig.cy.json b/packages/react-components/react-card/tsconfig.cy.json
new file mode 100644
index 00000000000000..93a140885851da
--- /dev/null
+++ b/packages/react-components/react-card/tsconfig.cy.json
@@ -0,0 +1,9 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "isolatedModules": false,
+ "types": ["node", "cypress", "cypress-storybook/cypress", "cypress-real-events"],
+ "lib": ["ES2019", "dom"]
+ },
+ "include": ["**/*.cy.ts", "**/*.cy.tsx"]
+}
diff --git a/packages/react-components/react-card/tsconfig.json b/packages/react-components/react-card/tsconfig.json
index 9087bac77cc8d7..1317f81620ca5e 100644
--- a/packages/react-components/react-card/tsconfig.json
+++ b/packages/react-components/react-card/tsconfig.json
@@ -22,7 +22,7 @@
"path": "./.storybook/tsconfig.json"
},
{
- "path": "./e2e/tsconfig.json"
+ "path": "./tsconfig.cy.json"
}
]
}
diff --git a/packages/react-components/react-card/tsconfig.lib.json b/packages/react-components/react-card/tsconfig.lib.json
index 5d7b14f1e0b70c..e17f808c039339 100644
--- a/packages/react-components/react-card/tsconfig.lib.json
+++ b/packages/react-components/react-card/tsconfig.lib.json
@@ -3,20 +3,22 @@
"compilerOptions": {
"noEmit": false,
"lib": ["ES2019", "dom"],
- "outDir": "dist",
"declaration": true,
- "declarationDir": "dist/types",
+ "declarationDir": "../../../dist/out-tsc/types",
+ "outDir": "../../../dist/out-tsc",
"inlineSources": true,
"types": ["static-assets", "environment"]
},
"exclude": [
- "./src/common/**",
+ "./src/testing/**",
"**/*.spec.ts",
"**/*.spec.tsx",
"**/*.test.ts",
"**/*.test.tsx",
"**/*.stories.ts",
- "**/*.stories.tsx"
+ "**/*.stories.tsx",
+ "**/*.cy.ts",
+ "**/*.cy.tsx"
],
"include": ["./src/**/*.ts", "./src/**/*.tsx"]
}
diff --git a/packages/react-components/react-card/tsconfig.spec.json b/packages/react-components/react-card/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/react-card/tsconfig.spec.json
+++ b/packages/react-components/react-card/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/react-checkbox/.npmignore b/packages/react-components/react-checkbox/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/react-checkbox/.npmignore
+++ b/packages/react-components/react-checkbox/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/react-checkbox/.storybook/main.js b/packages/react-components/react-checkbox/.storybook/main.js
index f57cfd09509e78..26536b61b387f6 100644
--- a/packages/react-components/react-checkbox/.storybook/main.js
+++ b/packages/react-components/react-checkbox/.storybook/main.js
@@ -2,7 +2,7 @@ const rootMain = require('../../../../.storybook/main');
module.exports = /** @type {Omit} */ ({
...rootMain,
- stories: [...rootMain.stories, '../src/**/*.stories.mdx', '../src/**/index.stories.@(ts|tsx)'],
+ stories: [...rootMain.stories, '../stories/**/*.stories.mdx', '../stories/**/index.stories.@(ts|tsx)'],
addons: [...rootMain.addons],
webpackFinal: (config, options) => {
const localConfig = { ...rootMain.webpackFinal(config, options) };
diff --git a/packages/react-components/react-checkbox/.storybook/tsconfig.json b/packages/react-components/react-checkbox/.storybook/tsconfig.json
index f9f60e1234ed49..ea89218a3d916f 100644
--- a/packages/react-components/react-checkbox/.storybook/tsconfig.json
+++ b/packages/react-components/react-checkbox/.storybook/tsconfig.json
@@ -6,5 +6,5 @@
"checkJs": true,
"types": ["static-assets", "environment", "storybook__addons"]
},
- "include": ["../src/**/*.stories.ts", "../src/**/*.stories.tsx", "*.js"]
+ "include": ["../stories/**/*.stories.ts", "../stories/**/*.stories.tsx", "*.js"]
}
diff --git a/packages/react-components/react-checkbox/CHANGELOG.json b/packages/react-components/react-checkbox/CHANGELOG.json
index 0bcee43a6d1717..ac4faf840f1e02 100644
--- a/packages/react-components/react-checkbox/CHANGELOG.json
+++ b/packages/react-components/react-checkbox/CHANGELOG.json
@@ -1,6 +1,218 @@
{
"name": "@fluentui/react-checkbox",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 00:35:29 GMT",
+ "tag": "@fluentui/react-checkbox_v9.0.10",
+ "version": "9.0.10",
+ "comments": {
+ "patch": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "11156f964c91c90f778a08e1d7ec650104756f80",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:29 GMT",
+ "tag": "@fluentui/react-checkbox_v9.0.9",
+ "version": "9.0.9",
+ "comments": {
+ "patch": [
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-label to v9.0.8",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-tabster to v9.2.0",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-theme to v9.1.1",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:44 GMT",
+ "tag": "@fluentui/react-checkbox_v9.0.8",
+ "version": "9.0.8",
+ "comments": {
+ "patch": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-label to v9.0.7",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-tabster to v9.1.3",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 22:24:35 GMT",
+ "tag": "@fluentui/react-checkbox_v9.0.7",
+ "version": "9.0.7",
+ "comments": {
+ "patch": [
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "d8219051250909d31767845375b6e1ed6a053856",
+ "comment": "fix: Checkbox's label shouldn't have a pointer cursor when disabled"
+ },
+ {
+ "author": "makotom@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "e44263f522e3e690c49ac69e5eef8e522e6e0a4a",
+ "comment": "fix: Making the hidden input only cover the indicator and not also the label."
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-tabster to v9.1.2",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/react-checkbox_v9.0.6",
+ "version": "9.0.6",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-label to v9.0.6",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:49:59 GMT",
+ "tag": "@fluentui/react-checkbox_v9.0.5",
+ "version": "9.0.5",
+ "comments": {
+ "patch": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "fix: update color tokens"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-label to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-tabster to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-checkbox",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ],
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:41 GMT",
"tag": "@fluentui/react-checkbox_v9.0.4",
diff --git a/packages/react-components/react-checkbox/CHANGELOG.md b/packages/react-components/react-checkbox/CHANGELOG.md
index c756b3d76dd230..68b1b1cd60dfa5 100644
--- a/packages/react-components/react-checkbox/CHANGELOG.md
+++ b/packages/react-components/react-checkbox/CHANGELOG.md
@@ -1,9 +1,82 @@
# Change Log - @fluentui/react-checkbox
-This log was last generated on Wed, 03 Aug 2022 16:03:41 GMT and should not be manually modified.
+This log was last generated on Tue, 25 Oct 2022 00:35:29 GMT and should not be manually modified.
+## [9.0.10](https://github.com/microsoft/fluentui/tree/@fluentui/react-checkbox_v9.0.10)
+
+Tue, 25 Oct 2022 00:35:29 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-checkbox_v9.0.9..@fluentui/react-checkbox_v9.0.10)
+
+### Patches
+
+- chore: Migrate to new package structure. ([PR #25337](https://github.com/microsoft/fluentui/pull/25337) by tristan.watanabe@gmail.com)
+
+## [9.0.9](https://github.com/microsoft/fluentui/tree/@fluentui/react-checkbox_v9.0.9)
+
+Thu, 20 Oct 2022 08:39:29 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-checkbox_v9.0.8..@fluentui/react-checkbox_v9.0.9)
+
+### Patches
+
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- Bump @fluentui/react-label to v9.0.8 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-tabster to v9.2.0 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-theme to v9.1.1 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.0.8](https://github.com/microsoft/fluentui/tree/@fluentui/react-checkbox_v9.0.8)
+
+Thu, 13 Oct 2022 11:02:44 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-checkbox_v9.0.7..@fluentui/react-checkbox_v9.0.8)
+
+### Patches
+
+- chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- Bump @fluentui/react-label to v9.0.7 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-tabster to v9.1.3 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.0.7](https://github.com/microsoft/fluentui/tree/@fluentui/react-checkbox_v9.0.7)
+
+Mon, 03 Oct 2022 22:24:35 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-checkbox_v9.0.6..@fluentui/react-checkbox_v9.0.7)
+
+### Patches
+
+- fix: Checkbox's label shouldn't have a pointer cursor when disabled ([PR #25018](https://github.com/microsoft/fluentui/pull/25018) by behowell@microsoft.com)
+- fix: Making the hidden input only cover the indicator and not also the label. ([PR #24638](https://github.com/microsoft/fluentui/pull/24638) by makotom@microsoft.com)
+- Bump @fluentui/react-tabster to v9.1.2 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+
+## [9.0.6](https://github.com/microsoft/fluentui/tree/@fluentui/react-checkbox_v9.0.6)
+
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-checkbox_v9.0.5..@fluentui/react-checkbox_v9.0.6)
+
+### Patches
+
+- Bump @fluentui/react-label to v9.0.6 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.0.5](https://github.com/microsoft/fluentui/tree/@fluentui/react-checkbox_v9.0.5)
+
+Thu, 15 Sep 2022 09:49:59 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-checkbox_v9.0.4..@fluentui/react-checkbox_v9.0.5)
+
+### Patches
+
+- chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- fix: update color tokens ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+- Bump @fluentui/react-label to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-tabster to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.0.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-checkbox_v9.0.4)
Wed, 03 Aug 2022 16:03:41 GMT
diff --git a/packages/react-components/react-checkbox/MIGRATION.md b/packages/react-components/react-checkbox/docs/MIGRATION.md
similarity index 100%
rename from packages/react-components/react-checkbox/MIGRATION.md
rename to packages/react-components/react-checkbox/docs/MIGRATION.md
diff --git a/packages/react-components/react-checkbox/Spec.md b/packages/react-components/react-checkbox/docs/Spec.md
similarity index 100%
rename from packages/react-components/react-checkbox/Spec.md
rename to packages/react-components/react-checkbox/docs/Spec.md
diff --git a/packages/react-components/react-checkbox/package.json b/packages/react-components/react-checkbox/package.json
index 432d6495ff7400..4ce48d326da673 100644
--- a/packages/react-components/react-checkbox/package.json
+++ b/packages/react-components/react-checkbox/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/react-checkbox",
- "version": "9.0.4",
+ "version": "9.0.10",
"description": "Fluent UI checkbox component",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -27,23 +27,23 @@
"devDependencies": {
"@fluentui/eslint-plugin": "*",
"@fluentui/react-conformance": "*",
- "@fluentui/react-conformance-griffel": "9.0.0-beta.12",
+ "@fluentui/react-conformance-griffel": "9.0.0-beta.16",
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
"@fluentui/react-icons": "^2.0.175",
- "@fluentui/react-label": "^9.0.4",
- "@fluentui/react-tabster": "^9.1.0",
- "@fluentui/react-theme": "^9.0.0",
- "@fluentui/react-utilities": "^9.0.2",
- "@griffel/react": "^1.3.0",
+ "@fluentui/react-label": "^9.0.8",
+ "@fluentui/react-tabster": "^9.2.0",
+ "@fluentui/react-theme": "^9.1.1",
+ "@fluentui/react-utilities": "^9.1.2",
+ "@griffel/react": "^1.4.1",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0"
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0"
},
"beachball": {
"disallowedChangeTypes": [
diff --git a/packages/react-components/react-checkbox/src/components/Checkbox/Checkbox.test.tsx b/packages/react-components/react-checkbox/src/components/Checkbox/Checkbox.test.tsx
index 23312cc6231341..7c4c5b270a6a24 100644
--- a/packages/react-components/react-checkbox/src/components/Checkbox/Checkbox.test.tsx
+++ b/packages/react-components/react-checkbox/src/components/Checkbox/Checkbox.test.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { render, fireEvent } from '@testing-library/react';
import { Checkbox } from './Checkbox';
-import { isConformant } from '../../common/isConformant';
+import { isConformant } from '../../testing/isConformant';
import { resetIdsForTests } from '@fluentui/react-utilities';
import { CheckboxOnChangeData } from './Checkbox.types';
diff --git a/packages/react-components/react-checkbox/src/components/Checkbox/useCheckboxStyles.ts b/packages/react-components/react-checkbox/src/components/Checkbox/useCheckboxStyles.ts
index 760f82030719a7..f4ad51ad52c338 100644
--- a/packages/react-components/react-checkbox/src/components/Checkbox/useCheckboxStyles.ts
+++ b/packages/react-components/react-checkbox/src/components/Checkbox/useCheckboxStyles.ts
@@ -19,22 +19,19 @@ const useRootStyles = makeStyles({
base: {
position: 'relative',
display: 'inline-flex',
- ...shorthands.padding(tokens.spacingVerticalS, tokens.spacingHorizontalS),
...createFocusOutlineStyle({ style: {}, selector: 'focus-within' }),
},
});
const useInputStyles = makeStyles({
base: {
- position: 'absolute',
- left: 0,
- top: 0,
- width: '100%',
- height: '100%',
boxSizing: 'border-box',
+ cursor: 'pointer',
+ height: '100%',
...shorthands.margin(0),
opacity: 0,
- cursor: 'pointer',
+ position: 'absolute',
+ top: 0,
// When unchecked, hide the the checkmark icon (child of the indicator slot)
[`:not(:checked):not(:indeterminate) ~ .${checkboxClassNames.indicator} > *`]: {
@@ -124,6 +121,7 @@ const useInputStyles = makeStyles({
cursor: 'default',
[`& ~ .${checkboxClassNames.label}`]: {
+ cursor: 'default',
color: tokens.colorNeutralForegroundDisabled,
'@media (forced-colors: active)': {
color: 'GrayText',
@@ -143,6 +141,22 @@ const useInputStyles = makeStyles({
},
},
},
+
+ before: {
+ right: 0,
+ },
+ after: {
+ left: 0,
+ },
+
+ // Calculate the width of the hidden input by taking into account the size of the indicator + the padding around it.
+ // This is done so that clicking on that "empty space" still toggles the checkbox.
+ medium: {
+ width: `calc(${indicatorSizeMedium} + 2 * ${tokens.spacingHorizontalS})`,
+ },
+ large: {
+ width: `calc(${indicatorSizeLarge} + 2 * ${tokens.spacingHorizontalS})`,
+ },
});
const useIndicatorStyles = makeStyles({
@@ -158,20 +172,21 @@ const useIndicatorStyles = makeStyles({
...shorthands.border(tokens.strokeWidthThin, 'solid'),
...shorthands.borderRadius(tokens.borderRadiusSmall),
+ ...shorthands.margin(tokens.spacingVerticalS, tokens.spacingHorizontalS),
fill: 'currentColor',
pointerEvents: 'none',
},
medium: {
- width: indicatorSizeMedium,
- height: indicatorSizeMedium,
fontSize: '12px',
+ height: indicatorSizeMedium,
+ width: indicatorSizeMedium,
},
large: {
- width: indicatorSizeLarge,
- height: indicatorSizeLarge,
fontSize: '16px',
+ height: indicatorSizeLarge,
+ width: indicatorSizeLarge,
},
circular: {
@@ -182,19 +197,20 @@ const useIndicatorStyles = makeStyles({
const useLabelStyles = makeStyles({
base: {
alignSelf: 'center',
- cursor: 'inherit',
color: 'inherit',
+ cursor: 'pointer',
+ ...shorthands.padding(tokens.spacingVerticalS, tokens.spacingHorizontalS),
},
before: {
- marginRight: tokens.spacingHorizontalM,
+ paddingRight: tokens.spacingHorizontalXS,
},
after: {
- marginLeft: tokens.spacingHorizontalM,
+ paddingLeft: tokens.spacingHorizontalXS,
},
// Use a (negative) margin to account for the difference between the indicator's height and the label's line height.
- // This prevents the label from expanding the height of the Checkbox, but preserves line height if the label wraps.
+ // This prevents the label from expanding the height of the checkbox, but preserves line height if the label wraps.
medium: {
marginTop: `calc((${indicatorSizeMedium} - ${tokens.lineHeightBase300}) / 2)`,
marginBottom: `calc((${indicatorSizeMedium} - ${tokens.lineHeightBase300}) / 2)`,
@@ -212,16 +228,24 @@ export const useCheckboxStyles_unstable = (state: CheckboxState): CheckboxState
const rootStyles = useRootStyles();
state.root.className = mergeClasses(checkboxClassNames.root, rootStyles.base, state.root.className);
+ const { labelPosition, shape, size } = state;
+
const inputStyles = useInputStyles();
- state.input.className = mergeClasses(checkboxClassNames.input, inputStyles.base, state.input.className);
+ state.input.className = mergeClasses(
+ checkboxClassNames.input,
+ inputStyles.base,
+ inputStyles[size],
+ inputStyles[labelPosition],
+ state.input.className,
+ );
const indicatorStyles = useIndicatorStyles();
if (state.indicator) {
state.indicator.className = mergeClasses(
checkboxClassNames.indicator,
indicatorStyles.base,
- indicatorStyles[state.size],
- state.shape === 'circular' && indicatorStyles.circular,
+ indicatorStyles[size],
+ shape === 'circular' && indicatorStyles.circular,
state.indicator.className,
);
}
@@ -231,8 +255,8 @@ export const useCheckboxStyles_unstable = (state: CheckboxState): CheckboxState
state.label.className = mergeClasses(
checkboxClassNames.label,
labelStyles.base,
- labelStyles[state.size],
- labelStyles[state.labelPosition],
+ labelStyles[size],
+ labelStyles[labelPosition],
state.label.className,
);
}
diff --git a/packages/react-components/react-checkbox/src/common/isConformant.ts b/packages/react-components/react-checkbox/src/testing/isConformant.ts
similarity index 100%
rename from packages/react-components/react-checkbox/src/common/isConformant.ts
rename to packages/react-components/react-checkbox/src/testing/isConformant.ts
diff --git a/packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxChecked.stories.tsx b/packages/react-components/react-checkbox/stories/Checkbox/CheckboxChecked.stories.tsx
similarity index 100%
rename from packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxChecked.stories.tsx
rename to packages/react-components/react-checkbox/stories/Checkbox/CheckboxChecked.stories.tsx
diff --git a/packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxCircular.stories.tsx b/packages/react-components/react-checkbox/stories/Checkbox/CheckboxCircular.stories.tsx
similarity index 100%
rename from packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxCircular.stories.tsx
rename to packages/react-components/react-checkbox/stories/Checkbox/CheckboxCircular.stories.tsx
diff --git a/packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxDefault.stories.tsx b/packages/react-components/react-checkbox/stories/Checkbox/CheckboxDefault.stories.tsx
similarity index 100%
rename from packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxDefault.stories.tsx
rename to packages/react-components/react-checkbox/stories/Checkbox/CheckboxDefault.stories.tsx
diff --git a/packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxDisabled.stories.tsx b/packages/react-components/react-checkbox/stories/Checkbox/CheckboxDisabled.stories.tsx
similarity index 100%
rename from packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxDisabled.stories.tsx
rename to packages/react-components/react-checkbox/stories/Checkbox/CheckboxDisabled.stories.tsx
diff --git a/packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxLabelBefore.stories.tsx b/packages/react-components/react-checkbox/stories/Checkbox/CheckboxLabelBefore.stories.tsx
similarity index 100%
rename from packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxLabelBefore.stories.tsx
rename to packages/react-components/react-checkbox/stories/Checkbox/CheckboxLabelBefore.stories.tsx
diff --git a/packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxLabelWrapping.stories.tsx b/packages/react-components/react-checkbox/stories/Checkbox/CheckboxLabelWrapping.stories.tsx
similarity index 100%
rename from packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxLabelWrapping.stories.tsx
rename to packages/react-components/react-checkbox/stories/Checkbox/CheckboxLabelWrapping.stories.tsx
diff --git a/packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxLarge.stories.tsx b/packages/react-components/react-checkbox/stories/Checkbox/CheckboxLarge.stories.tsx
similarity index 100%
rename from packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxLarge.stories.tsx
rename to packages/react-components/react-checkbox/stories/Checkbox/CheckboxLarge.stories.tsx
diff --git a/packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxMixed.stories.tsx b/packages/react-components/react-checkbox/stories/Checkbox/CheckboxMixed.stories.tsx
similarity index 100%
rename from packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxMixed.stories.tsx
rename to packages/react-components/react-checkbox/stories/Checkbox/CheckboxMixed.stories.tsx
diff --git a/packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxRequired.stories.tsx b/packages/react-components/react-checkbox/stories/Checkbox/CheckboxRequired.stories.tsx
similarity index 100%
rename from packages/react-components/react-checkbox/src/stories/Checkbox/CheckboxRequired.stories.tsx
rename to packages/react-components/react-checkbox/stories/Checkbox/CheckboxRequired.stories.tsx
diff --git a/packages/react-components/react-checkbox/src/stories/Checkbox/index.stories.tsx b/packages/react-components/react-checkbox/stories/Checkbox/index.stories.tsx
similarity index 100%
rename from packages/react-components/react-checkbox/src/stories/Checkbox/index.stories.tsx
rename to packages/react-components/react-checkbox/stories/Checkbox/index.stories.tsx
diff --git a/packages/react-components/react-checkbox/tsconfig.lib.json b/packages/react-components/react-checkbox/tsconfig.lib.json
index 5d7b14f1e0b70c..53770c42da6dd0 100644
--- a/packages/react-components/react-checkbox/tsconfig.lib.json
+++ b/packages/react-components/react-checkbox/tsconfig.lib.json
@@ -10,7 +10,7 @@
"types": ["static-assets", "environment"]
},
"exclude": [
- "./src/common/**",
+ "./src/testing/**",
"**/*.spec.ts",
"**/*.spec.tsx",
"**/*.test.ts",
diff --git a/packages/react-components/react-checkbox/tsconfig.spec.json b/packages/react-components/react-checkbox/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/react-checkbox/tsconfig.spec.json
+++ b/packages/react-components/react-checkbox/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/react-combobox/CHANGELOG.json b/packages/react-components/react-combobox/CHANGELOG.json
index 82d7341943f579..8f9003d5dc48f5 100644
--- a/packages/react-components/react-combobox/CHANGELOG.json
+++ b/packages/react-components/react-combobox/CHANGELOG.json
@@ -1,6 +1,296 @@
{
"name": "@fluentui/react-combobox",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 00:35:29 GMT",
+ "tag": "@fluentui/react-combobox_v9.0.0-beta.13",
+ "version": "9.0.0-beta.13",
+ "comments": {
+ "none": [
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "d9dda6aafb1571b08e5cc0ba3437a24a20c694f6",
+ "comment": "feat: add full Dropdown component accessibility spec"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:30 GMT",
+ "tag": "@fluentui/react-combobox_v9.0.0-beta.13",
+ "version": "9.0.0-beta.13",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "d55f6633f62c5715c41c8dbc8c5a428bef424345",
+ "comment": "feat: Add red border when aria-invalid is set"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.5",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-portal to v9.0.8",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-positioning to v9.2.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-theme to v9.1.1",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:45 GMT",
+ "tag": "@fluentui/react-combobox_v9.0.0-beta.12",
+ "version": "9.0.0-beta.12",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "610eaf4725950121d3646e07a452d541ea3f3776",
+ "comment": "fix: add ScrollIntoView hook for Listbox options"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "0bf5374da5df0649ac7fdc065d141f0b8cd7ddf6",
+ "comment": "feat: export contexts from react-combobox"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "e154da8243c0b3a900aeaaa55d91c4ca96f8a705",
+ "comment": "fix: Dropdown arrow icon layout when no placeholder or value is present"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.4",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-portal to v9.0.7",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-positioning to v9.2.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 22:24:42 GMT",
+ "tag": "@fluentui/react-combobox_v9.0.0-beta.11",
+ "version": "9.0.0-beta.11",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-portal to v9.0.6",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 20:55:45 GMT",
+ "tag": "@fluentui/react-combobox_v9.0.0-beta.10",
+ "version": "9.0.0-beta.10",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:50:00 GMT",
+ "tag": "@fluentui/react-combobox_v9.0.0-beta.9",
+ "version": "9.0.0-beta.9",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "8484a3ec4abb520d716d199ea79a3cde57fa1da2",
+ "comment": "fix: typing moves active option in Dropdown"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "286479fb4e813506a9560c279215675e8b097500",
+ "comment": "fix: Combobox and Dropdown hover/active border colors and padding styles"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "58026c94a40e8589645d3f6a6b0171a21ba3f879",
+ "comment": "fix: Combobox and Dropdown only show option focus outline when navigating by keyboard"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "83b033de0fe819bc30cc437ec7c4a83dd4c6997e",
+ "comment": "fix: set popup Listbox width to trigger width"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "a5b36f689a2eed64ffca5f43e48e213ccba1d925",
+ "comment": "fix: open/close combobox on icon click"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "7d19a95495b04963b9f88b45da993e590df06b6a",
+ "comment": "feat: Allow typing by default, add allowFreeform"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "cde2f43f6bf0522ddf189dbf3b2905ec1f2f7f88",
+ "comment": "feat: make listbox slot nullable"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "4f921f9810a55ae8d2077de4013fad1516001c0c",
+ "comment": "fix: react-combobox change onSelect to onOptionSelect to avoid conflicts with native onSelect"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.3",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-portal to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-positioning to v9.2.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-combobox",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ],
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "84017b6464e13c46a7ae8c61875ead2ff4b6965b",
+ "comment": "bugfix: update useMergedEventCallbacks to mergeCallbacks"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:42 GMT",
"tag": "@fluentui/react-combobox_v9.0.0-beta.8",
diff --git a/packages/react-components/react-combobox/CHANGELOG.md b/packages/react-components/react-combobox/CHANGELOG.md
index a5772157123f41..5761618616d48b 100644
--- a/packages/react-components/react-combobox/CHANGELOG.md
+++ b/packages/react-components/react-combobox/CHANGELOG.md
@@ -1,9 +1,84 @@
# Change Log - @fluentui/react-combobox
-This log was last generated on Wed, 03 Aug 2022 16:03:42 GMT and should not be manually modified.
+This log was last generated on Thu, 20 Oct 2022 08:39:30 GMT and should not be manually modified.
+## [9.0.0-beta.13](https://github.com/microsoft/fluentui/tree/@fluentui/react-combobox_v9.0.0-beta.13)
+
+Thu, 20 Oct 2022 08:39:30 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-combobox_v9.0.0-beta.12..@fluentui/react-combobox_v9.0.0-beta.13)
+
+### Changes
+
+- chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- feat: Add red border when aria-invalid is set ([PR #25252](https://github.com/microsoft/fluentui/pull/25252) by behowell@microsoft.com)
+- Bump @fluentui/react-context-selector to v9.0.5 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-portal to v9.0.8 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-positioning to v9.2.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-theme to v9.1.1 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.0.0-beta.12](https://github.com/microsoft/fluentui/tree/@fluentui/react-combobox_v9.0.0-beta.12)
+
+Thu, 13 Oct 2022 11:02:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-combobox_v9.0.0-beta.11..@fluentui/react-combobox_v9.0.0-beta.12)
+
+### Changes
+
+- chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- fix: add ScrollIntoView hook for Listbox options ([PR #25080](https://github.com/microsoft/fluentui/pull/25080) by sarah.higley@microsoft.com)
+- feat: export contexts from react-combobox ([PR #25099](https://github.com/microsoft/fluentui/pull/25099) by sarah.higley@microsoft.com)
+- fix: Dropdown arrow icon layout when no placeholder or value is present ([PR #25049](https://github.com/microsoft/fluentui/pull/25049) by sarah.higley@microsoft.com)
+- Bump @fluentui/react-context-selector to v9.0.4 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-portal to v9.0.7 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-positioning to v9.2.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.0.0-beta.11](https://github.com/microsoft/fluentui/tree/@fluentui/react-combobox_v9.0.0-beta.11)
+
+Mon, 03 Oct 2022 22:24:42 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-combobox_v9.0.0-beta.10..@fluentui/react-combobox_v9.0.0-beta.11)
+
+### Changes
+
+- Bump @fluentui/react-portal to v9.0.6 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+
+## [9.0.0-beta.10](https://github.com/microsoft/fluentui/tree/@fluentui/react-combobox_v9.0.0-beta.10)
+
+Tue, 20 Sep 2022 20:55:45 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-combobox_v9.0.0-beta.9..@fluentui/react-combobox_v9.0.0-beta.10)
+
+### Changes
+
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.0.0-beta.9](https://github.com/microsoft/fluentui/tree/@fluentui/react-combobox_v9.0.0-beta.9)
+
+Thu, 15 Sep 2022 09:50:00 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-combobox_v9.0.0-beta.8..@fluentui/react-combobox_v9.0.0-beta.9)
+
+### Changes
+
+- fix: typing moves active option in Dropdown ([PR #24437](https://github.com/microsoft/fluentui/pull/24437) by sarah.higley@microsoft.com)
+- fix: Combobox and Dropdown hover/active border colors and padding styles ([PR #24362](https://github.com/microsoft/fluentui/pull/24362) by sarah.higley@microsoft.com)
+- chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- fix: Combobox and Dropdown only show option focus outline when navigating by keyboard ([PR #24700](https://github.com/microsoft/fluentui/pull/24700) by sarah.higley@microsoft.com)
+- fix: set popup Listbox width to trigger width ([PR #24733](https://github.com/microsoft/fluentui/pull/24733) by sarah.higley@microsoft.com)
+- fix: open/close combobox on icon click ([PR #24147](https://github.com/microsoft/fluentui/pull/24147) by sarah.higley@microsoft.com)
+- feat: Allow typing by default, add allowFreeform ([PR #23819](https://github.com/microsoft/fluentui/pull/23819) by sarah.higley@microsoft.com)
+- feat: make listbox slot nullable ([PR #24392](https://github.com/microsoft/fluentui/pull/24392) by sarah.higley@microsoft.com)
+- fix: react-combobox change onSelect to onOptionSelect to avoid conflicts with native onSelect ([PR #24550](https://github.com/microsoft/fluentui/pull/24550) by sarah.higley@microsoft.com)
+- Bump @fluentui/react-context-selector to v9.0.3 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-portal to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-positioning to v9.2.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.0.0-beta.8](https://github.com/microsoft/fluentui/tree/@fluentui/react-combobox_v9.0.0-beta.8)
Wed, 03 Aug 2022 16:03:42 GMT
diff --git a/packages/react-components/react-combobox/README.md b/packages/react-components/react-combobox/README.md
index dc784893a963bf..7ad3f781030e95 100644
--- a/packages/react-components/react-combobox/README.md
+++ b/packages/react-components/react-combobox/README.md
@@ -1,5 +1,5 @@
# @fluentui/react-combobox
-**Combobox component for [Fluent UI React](https://developer.microsoft.com/en-us/fluentui)**
+**Combobox component for [Fluent UI React](https://react.fluentui.dev)**
These are not production-ready components and **should never be used in product**. This space is useful for testing new components whose APIs might change before final release.
diff --git a/packages/react-components/react-combobox/Spec.md b/packages/react-components/react-combobox/Spec.md
index 8a3c5a94b16b6c..c0ad13cdf7190e 100644
--- a/packages/react-components/react-combobox/Spec.md
+++ b/packages/react-components/react-combobox/Spec.md
@@ -143,9 +143,9 @@ Combobox in v9 allows both controlled and uncontrolled selection, as do the corr
| -------------------- | ------------------- | ------------------- | ------------------ | -------------------- | ------------ |
| Initial selection | initialSelectedKeys | defaultSelectedKeys | defaultSelectedKey | defaultSelectedItems | defaultValue |
| Controlled selection | selectedKeys | selectedKey | selectedKey | selectedItems | value |
-| Callback | onSelect | onChange | onChange | onChange | onChange |
+| Callback | onOptionSelect | onChange | onChange | onChange | onChange |
-The reason to move to `onSelect` over `onChange` in the v9 Combobox is because the editable Combobox uses an ` ` element as its primary slot. Using `onSelect` allows the input to retain it's built-in `onChange` event. This could be revisited if we want to override `onChange` to handle both input value changes and selection changes.
+The reason to move to `onOptionSelect` over `onChange` in the v9 Combobox is because the editable Combobox uses an ` ` element as its primary slot. Using `onOptionSelect` allows the input to retain it's built-in `onChange` event.
## Sample Code
@@ -344,7 +344,7 @@ type SimpleComboboxProps = {
onOpenChange?(event: OpenEvents, data: OnOpenChangeData): void;
/* Callback when an option is selected */
- onSelect?(event: SelectionEvents, optionKey: string): void;
+ onOptionSelect?(event: SelectionEvents, optionKey: string): void;
};
```
@@ -367,7 +367,7 @@ type SimpleListboxProps = {
selectedKeys?: string[];
/* Callback when an option is selected */
- onSelect?(event: SelectionEvents, optionKey: string): void;
+ onOptionSelect?(event: SelectionEvents, optionKey: string): void;
};
```
diff --git a/packages/react-components/react-combobox/etc/react-combobox.api.md b/packages/react-components/react-combobox/etc/react-combobox.api.md
index 7c7e09dfb6caff..0b3719b173c67d 100644
--- a/packages/react-components/react-combobox/etc/react-combobox.api.md
+++ b/packages/react-components/react-combobox/etc/react-combobox.api.md
@@ -8,8 +8,11 @@
import type { ComponentProps } from '@fluentui/react-utilities';
import type { ComponentState } from '@fluentui/react-utilities';
+import { FC } from 'react';
import type { ForwardRefComponent } from '@fluentui/react-utilities';
import type { PositioningShorthand } from '@fluentui/react-positioning';
+import { Provider } from 'react';
+import { ProviderProps } from 'react';
import * as React_2 from 'react';
import type { Slot } from '@fluentui/react-utilities';
import { SlotClassNames } from '@fluentui/react-utilities';
@@ -20,6 +23,9 @@ export const Combobox: ForwardRefComponent;
// @public (undocumented)
export const comboboxClassNames: SlotClassNames;
+// @public
+export type ComboboxContextValue = Pick;
+
// @public (undocumented)
export type ComboboxContextValues = ComboboxBaseContextValues;
@@ -35,6 +41,9 @@ export type ComboboxProps = Omit, 'input'>
children?: React_2.ReactNode;
};
+// @public (undocumented)
+export const ComboboxProvider: Provider & FC>;
+
// @public (undocumented)
export type ComboboxSlots = {
root: NonNullable>;
@@ -83,6 +92,9 @@ export const Listbox: ForwardRefComponent;
// @public (undocumented)
export const listboxClassNames: SlotClassNames;
+// @public
+export type ListboxContextValue = Pick;
+
// @public (undocumented)
export type ListboxContextValues = {
listbox: ListboxContextValue;
@@ -91,6 +103,9 @@ export type ListboxContextValues = {
// @public
export type ListboxProps = ComponentProps & SelectionProps;
+// @public (undocumented)
+export const ListboxProvider: Provider & FC>;
+
// @public (undocumented)
export type ListboxSlots = {
root: Slot<'div'>;
@@ -99,6 +114,7 @@ export type ListboxSlots = {
// @public
export type ListboxState = ComponentState & OptionCollectionState & SelectionState & {
activeOption?: OptionValue;
+ focusVisible: boolean;
selectOption(event: SelectionEvents, option: OptionValue): void;
setActiveOption(option?: OptionValue): void;
};
@@ -143,6 +159,7 @@ export type OptionSlots = {
// @public
export type OptionState = ComponentState & Pick & {
active: boolean;
+ focusVisible: boolean;
multiselect?: boolean;
selected: boolean;
};
@@ -165,6 +182,9 @@ export const renderOptionGroup_unstable: (state: OptionGroupState) => JSX.Elemen
// @public
export const useCombobox_unstable: (props: ComboboxProps, ref: React_2.Ref) => ComboboxState;
+// @public (undocumented)
+export function useComboboxContextValues(state: ComboboxBaseState): ComboboxBaseContextValues;
+
// @public
export const useComboboxStyles_unstable: (state: ComboboxState) => ComboboxState;
@@ -177,6 +197,9 @@ export const useDropdownStyles_unstable: (state: DropdownState) => DropdownState
// @public
export const useListbox_unstable: (props: ListboxProps, ref: React_2.Ref) => ListboxState;
+// @public (undocumented)
+export function useListboxContextValues(state: ListboxState): ListboxContextValues;
+
// @public
export const useListboxStyles_unstable: (state: ListboxState) => ListboxState;
diff --git a/packages/react-components/react-combobox/package.json b/packages/react-components/react-combobox/package.json
index 54b6a012190676..0e203b02143d73 100644
--- a/packages/react-components/react-combobox/package.json
+++ b/packages/react-components/react-combobox/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/react-combobox",
- "version": "9.0.0-beta.8",
+ "version": "9.0.0-beta.13",
"description": "Fluent UI React Combobox component",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -28,25 +28,25 @@
"devDependencies": {
"@fluentui/eslint-plugin": "*",
"@fluentui/react-conformance": "*",
- "@fluentui/react-conformance-griffel": "9.0.0-beta.12",
+ "@fluentui/react-conformance-griffel": "9.0.0-beta.16",
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
"@fluentui/keyboard-keys": "^9.0.0",
- "@fluentui/react-context-selector": "^9.0.2",
+ "@fluentui/react-context-selector": "^9.0.5",
"@fluentui/react-icons": "^2.0.175",
- "@fluentui/react-portal": "^9.0.4",
- "@fluentui/react-positioning": "^9.1.2",
- "@fluentui/react-theme": "^9.0.0",
- "@fluentui/react-utilities": "^9.0.2",
- "@griffel/react": "^1.3.0",
+ "@fluentui/react-portal": "^9.0.8",
+ "@fluentui/react-positioning": "^9.2.2",
+ "@fluentui/react-theme": "^9.1.1",
+ "@fluentui/react-utilities": "^9.1.2",
+ "@griffel/react": "^1.4.1",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0",
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0",
"scheduler": "^0.19.0 || ^0.20.0"
},
"beachball": {
diff --git a/packages/react-components/react-combobox/src/components/Combobox/Combobox.test.tsx b/packages/react-components/react-combobox/src/components/Combobox/Combobox.test.tsx
index ecd02097b3d428..58f1f9c870386c 100644
--- a/packages/react-components/react-combobox/src/components/Combobox/Combobox.test.tsx
+++ b/packages/react-components/react-combobox/src/components/Combobox/Combobox.test.tsx
@@ -406,6 +406,53 @@ describe('Combobox', () => {
expect((getByRole('combobox') as HTMLInputElement).value).toEqual('Red');
});
+ it('calls onOptionSelect with correct data for single-select', () => {
+ const onOptionSelect = jest.fn();
+
+ const { getByRole, getByText } = render(
+
+ Red
+ Green
+ Blue
+ ,
+ );
+
+ userEvent.click(getByRole('combobox'));
+ userEvent.click(getByText('Green'));
+
+ expect(onOptionSelect).toHaveBeenCalledTimes(1);
+ expect(onOptionSelect).toHaveBeenCalledWith(expect.anything(), {
+ optionValue: 'Green',
+ selectedOptions: ['Green'],
+ });
+ });
+
+ it('calls onOptionSelect with correct data for multi-select', () => {
+ const onOptionSelect = jest.fn();
+
+ const { getByRole, getByText } = render(
+
+ Red
+ Green
+ Blue
+ ,
+ );
+
+ userEvent.click(getByRole('combobox'));
+ userEvent.click(getByText('Green'));
+ userEvent.click(getByText('Blue'));
+
+ expect(onOptionSelect).toHaveBeenCalledTimes(2);
+ expect(onOptionSelect).toHaveBeenNthCalledWith(1, expect.anything(), {
+ optionValue: 'Green',
+ selectedOptions: ['Green'],
+ });
+ expect(onOptionSelect).toHaveBeenNthCalledWith(2, expect.anything(), {
+ optionValue: 'Blue',
+ selectedOptions: ['Green', 'Blue'],
+ });
+ });
+
/* Active option */
it('should set active option on click', () => {
const { getByTestId } = render(
diff --git a/packages/react-components/react-combobox/src/components/Combobox/__snapshots__/Combobox.test.tsx.snap b/packages/react-components/react-combobox/src/components/Combobox/__snapshots__/Combobox.test.tsx.snap
index be8774d5ac05a8..387507376d143a 100644
--- a/packages/react-components/react-combobox/src/components/Combobox/__snapshots__/Combobox.test.tsx.snap
+++ b/packages/react-components/react-combobox/src/components/Combobox/__snapshots__/Combobox.test.tsx.snap
@@ -68,7 +68,7 @@ exports[`Combobox renders an open listbox 1`] = `
(null);
const triggerRef = React.useRef
(null);
+ // calculate listbox width style based on trigger width
+ const [popupWidth, setPopupWidth] = React.useState();
+ React.useEffect(() => {
+ const width = open ? `${rootRef.current?.clientWidth}px` : undefined;
+ setPopupWidth(width);
+ }, [open]);
+
+ // handle input type-to-select
const getSearchString = (inputValue: string): string => {
// if there are commas in the value string, take the text after the last comma
const searchString = inputValue.split(',').pop();
@@ -118,6 +128,8 @@ export const useCombobox_unstable = (props: ComboboxProps, ref: React.Ref {
const { appearance, open, size } = state;
+ const invalid = `${state.input['aria-invalid']}` === 'true';
const styles = useStyles();
const iconStyles = useIconStyles();
const inputStyles = useInputStyles();
@@ -208,6 +220,8 @@ export const useComboboxStyles_unstable = (state: ComboboxState): ComboboxState
styles.root,
styles[appearance],
styles[size],
+ invalid && appearance !== 'underline' && styles.invalid,
+ invalid && appearance === 'underline' && styles.invalidUnderline,
state.root.className,
);
diff --git a/packages/react-components/react-combobox/src/components/Dropdown/Dropdown.test.tsx b/packages/react-components/react-combobox/src/components/Dropdown/Dropdown.test.tsx
index 23e8035e83ea4d..b5a838d4bbaa65 100644
--- a/packages/react-components/react-combobox/src/components/Dropdown/Dropdown.test.tsx
+++ b/packages/react-components/react-combobox/src/components/Dropdown/Dropdown.test.tsx
@@ -323,6 +323,53 @@ describe('Dropdown', () => {
expect(getByText('Blue').getAttribute('aria-selected')).toEqual('false');
});
+ it('calls onOptionSelect with correct data for single-select', () => {
+ const onOptionSelect = jest.fn();
+
+ const { getByRole, getByText } = render(
+
+ Red
+ Green
+ Blue
+ ,
+ );
+
+ userEvent.click(getByRole('combobox'));
+ userEvent.click(getByText('Green'));
+
+ expect(onOptionSelect).toHaveBeenCalledTimes(1);
+ expect(onOptionSelect).toHaveBeenCalledWith(expect.anything(), {
+ optionValue: 'Green',
+ selectedOptions: ['Green'],
+ });
+ });
+
+ it('calls onOptionSelect with correct data for multi-select', () => {
+ const onOptionSelect = jest.fn();
+
+ const { getByRole, getByText } = render(
+
+ Red
+ Green
+ Blue
+ ,
+ );
+
+ userEvent.click(getByRole('combobox'));
+ userEvent.click(getByText('Green'));
+ userEvent.click(getByText('Blue'));
+
+ expect(onOptionSelect).toHaveBeenCalledTimes(2);
+ expect(onOptionSelect).toHaveBeenNthCalledWith(1, expect.anything(), {
+ optionValue: 'Green',
+ selectedOptions: ['Green'],
+ });
+ expect(onOptionSelect).toHaveBeenNthCalledWith(2, expect.anything(), {
+ optionValue: 'Blue',
+ selectedOptions: ['Green', 'Blue'],
+ });
+ });
+
it('stays open on click for multiselect', () => {
const { getByText, getByRole } = render(
diff --git a/packages/react-components/react-combobox/src/components/Dropdown/__snapshots__/Dropdown.test.tsx.snap b/packages/react-components/react-combobox/src/components/Dropdown/__snapshots__/Dropdown.test.tsx.snap
index 5059a9e61d2d04..7dcf6069bcc49f 100644
--- a/packages/react-components/react-combobox/src/components/Dropdown/__snapshots__/Dropdown.test.tsx.snap
+++ b/packages/react-components/react-combobox/src/components/Dropdown/__snapshots__/Dropdown.test.tsx.snap
@@ -68,7 +68,7 @@ exports[`Dropdown renders an open listbox 1`] = `
): DropdownState => {
const baseState = useComboboxBaseState(props);
- const { activeOption, getIndexOfId, getOptionsMatchingValue, open, setActiveOption, setOpen } = baseState;
+ const {
+ activeOption,
+ getIndexOfId,
+ getOptionsMatchingValue,
+ open,
+ setActiveOption,
+ setFocusVisible,
+ setOpen,
+ } = baseState;
const { primary: triggerNativeProps, root: rootNativeProps } = getPartitionedNativeProps({
props,
@@ -29,6 +38,14 @@ export const useDropdown_unstable = (props: DropdownProps, ref: React.Ref
(null);
+ const [popupWidth, setPopupWidth] = React.useState();
+ React.useEffect(() => {
+ const width = open ? `${rootRef.current?.clientWidth}px` : undefined;
+ setPopupWidth(width);
+ }, [open]);
+
// jump to matching option based on typing
const searchString = React.useRef('');
const [setKeyTimeout, clearKeyTimeout] = useTimeout();
@@ -86,6 +103,7 @@ export const useDropdown_unstable = (props: DropdownProps, ref: React.Ref {
const { appearance, open, placeholderVisible, size } = state;
+ const invalid = `${state.button['aria-invalid']}` === 'true';
const styles = useStyles();
const iconStyles = useIconStyles();
- state.root.className = mergeClasses(dropdownClassNames.root, styles.root, styles[appearance], state.root.className);
+ state.root.className = mergeClasses(
+ dropdownClassNames.root,
+ styles.root,
+ styles[appearance],
+ invalid && appearance !== 'underline' && styles.invalid,
+ invalid && appearance === 'underline' && styles.invalidUnderline,
+ state.root.className,
+ );
state.button.className = mergeClasses(
dropdownClassNames.button,
diff --git a/packages/react-components/react-combobox/src/components/Listbox/Listbox.test.tsx b/packages/react-components/react-combobox/src/components/Listbox/Listbox.test.tsx
index 65cdb88e5507a8..d219e814102bd3 100644
--- a/packages/react-components/react-combobox/src/components/Listbox/Listbox.test.tsx
+++ b/packages/react-components/react-combobox/src/components/Listbox/Listbox.test.tsx
@@ -206,10 +206,10 @@ describe('Listbox', () => {
});
it('should fire onChange when an option is selected', () => {
- const onSelect = jest.fn();
+ const onOptionSelect = jest.fn();
const { getByText } = render(
-
+
Red
Green
Blue
@@ -218,15 +218,15 @@ describe('Listbox', () => {
fireEvent.click(getByText('Red'));
- expect(onSelect).toHaveBeenCalled();
- expect(onSelect.mock.calls[0][1]).toEqual({ optionValue: 'Red', selectedOptions: ['Red'] });
+ expect(onOptionSelect).toHaveBeenCalled();
+ expect(onOptionSelect.mock.calls[0][1]).toEqual({ optionValue: 'Red', selectedOptions: ['Red'] });
});
it('should not change selection with selectedOptions', () => {
- const onSelect = jest.fn();
+ const onOptionSelect = jest.fn();
const { getByText } = render(
-
+
Red
Green
Blue
@@ -238,15 +238,15 @@ describe('Listbox', () => {
fireEvent.click(option);
expect(option.getAttribute('aria-selected')).toEqual('false');
- expect(onSelect).toHaveBeenCalled();
- expect(onSelect.mock.calls[0][1]).toEqual({ optionValue: 'Red', selectedOptions: ['Red'] });
+ expect(onOptionSelect).toHaveBeenCalled();
+ expect(onOptionSelect.mock.calls[0][1]).toEqual({ optionValue: 'Red', selectedOptions: ['Red'] });
});
it('should select option with the enter key', () => {
- const onSelect = jest.fn();
+ const onOptionSelect = jest.fn();
const { getByTestId } = render(
-
+
Red
Green
Blue
@@ -258,14 +258,14 @@ describe('Listbox', () => {
fireEvent.keyDown(listbox, { key: 'Enter' });
expect(getByTestId('red').getAttribute('aria-selected')).toEqual('true');
- expect(onSelect).toHaveBeenCalled();
+ expect(onOptionSelect).toHaveBeenCalled();
});
it('should select option with the space key', () => {
- const onSelect = jest.fn();
+ const onOptionSelect = jest.fn();
const { getByTestId } = render(
-
+
Red
Green
Blue
@@ -277,6 +277,6 @@ describe('Listbox', () => {
fireEvent.keyDown(listbox, { key: ' ' });
expect(getByTestId('red').getAttribute('aria-selected')).toEqual('true');
- expect(onSelect).toHaveBeenCalled();
+ expect(onOptionSelect).toHaveBeenCalled();
});
});
diff --git a/packages/react-components/react-combobox/src/components/Listbox/Listbox.types.ts b/packages/react-components/react-combobox/src/components/Listbox/Listbox.types.ts
index 7f2175172d0a95..4f34dbc48e3e38 100644
--- a/packages/react-components/react-combobox/src/components/Listbox/Listbox.types.ts
+++ b/packages/react-components/react-combobox/src/components/Listbox/Listbox.types.ts
@@ -22,6 +22,9 @@ export type ListboxState = ComponentState &
/* Option data for the currently highlighted option (not the selected option) */
activeOption?: OptionValue;
+ // Whether the keyboard focus outline style should be visible
+ focusVisible: boolean;
+
selectOption(event: SelectionEvents, option: OptionValue): void;
setActiveOption(option?: OptionValue): void;
diff --git a/packages/react-components/react-combobox/src/components/Listbox/useListbox.ts b/packages/react-components/react-combobox/src/components/Listbox/useListbox.ts
index b09e3697ba021e..2e1b3a9db1adb1 100644
--- a/packages/react-components/react-combobox/src/components/Listbox/useListbox.ts
+++ b/packages/react-components/react-combobox/src/components/Listbox/useListbox.ts
@@ -1,12 +1,13 @@
import * as React from 'react';
-import { getNativeElementProps } from '@fluentui/react-utilities';
+import { getNativeElementProps, mergeCallbacks, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';
import { useContextSelector, useHasParentContext } from '@fluentui/react-context-selector';
-import { useSelection } from '../../utils/useSelection';
import { getDropdownActionFromKey, getIndexFromAction } from '../../utils/dropdownKeyActions';
+import type { OptionValue } from '../../utils/OptionCollection.types';
+import { useOptionCollection } from '../../utils/useOptionCollection';
+import { useScrollOptionsIntoView } from '../../utils/useScrollOptionsIntoView';
+import { useSelection } from '../../utils/useSelection';
import { ComboboxContext } from '../../contexts/ComboboxContext';
import type { ListboxProps, ListboxState } from './Listbox.types';
-import { useOptionCollection } from '../../utils/useOptionCollection';
-import { OptionValue } from '../../utils/OptionCollection.types';
/**
* Create the state required to render Listbox.
@@ -26,6 +27,10 @@ export const useListbox_unstable = (props: ListboxProps, ref: React.Ref();
+ // track whether keyboard focus outline should be shown
+ // tabster/keyborg doesn't work here, since the actual keyboard focus target doesn't move
+ const [focusVisible, setFocusVisible] = React.useState(false);
+
const onKeyDown = (event: React.KeyboardEvent) => {
const action = getDropdownActionFromKey(event, { open: true });
const maxIndex = getCount() - 1;
@@ -45,12 +50,18 @@ export const useListbox_unstable = (props: ListboxProps, ref: React.Ref) => {
+ setFocusVisible(false);
+ };
+
// get state from parent combobox, if it exists
const hasComboboxContext = useHasParentContext(ComboboxContext);
const comboboxActiveOption = useContextSelector(ComboboxContext, ctx => ctx.activeOption);
+ const comboboxFocusVisible = useContextSelector(ComboboxContext, ctx => ctx.focusVisible);
const comboboxSelectedOptions = useContextSelector(ComboboxContext, ctx => ctx.selectedOptions);
const comboboxSelectOption = useContextSelector(ComboboxContext, ctx => ctx.selectOption);
const comboboxSetActiveOption = useContextSelector(ComboboxContext, ctx => ctx.setActiveOption);
@@ -59,18 +70,20 @@ export const useListbox_unstable = (props: ListboxProps, ref: React.Ref {
const defaultContextValues = {
activeOption: undefined,
+ focusVisible: false,
multiselect: false,
registerOption() {
return () => undefined;
diff --git a/packages/react-components/react-combobox/src/components/Option/Option.types.ts b/packages/react-components/react-combobox/src/components/Option/Option.types.ts
index 8df12c5ef37497..2d83a664a28f59 100644
--- a/packages/react-components/react-combobox/src/components/Option/Option.types.ts
+++ b/packages/react-components/react-combobox/src/components/Option/Option.types.ts
@@ -33,6 +33,9 @@ export type OptionState = ComponentState &
/* If true, this is the currently highlighted option */
active: boolean;
+ // Whether the keyboard focus outline style should be visible
+ focusVisible: boolean;
+
/* If true, the option is part of a multiselect combobox or listbox */
multiselect?: boolean;
diff --git a/packages/react-components/react-combobox/src/components/Option/useOption.tsx b/packages/react-components/react-combobox/src/components/Option/useOption.tsx
index ca99493a0f7c6d..8bf86d69b00d38 100644
--- a/packages/react-components/react-combobox/src/components/Option/useOption.tsx
+++ b/packages/react-components/react-combobox/src/components/Option/useOption.tsx
@@ -46,6 +46,7 @@ export const useOption_unstable = (props: OptionProps, ref: React.Ref ctx.focusVisible);
const multiselect = useContextSelector(ListboxContext, ctx => ctx.multiselect);
const registerOption = useContextSelector(ListboxContext, ctx => ctx.registerOption);
const selected = useContextSelector(ListboxContext, ctx => {
@@ -118,6 +119,7 @@ export const useOption_unstable = (props: OptionProps, ref: React.Ref {
- const { active, disabled, multiselect, selected } = state;
+ const { active, disabled, focusVisible, multiselect, selected } = state;
const styles = useStyles();
state.root.className = mergeClasses(
optionClassNames.root,
styles.root,
- active && styles.active,
+ active && focusVisible && styles.active,
disabled && styles.disabled,
selected && styles.selected,
state.root.className,
diff --git a/packages/react-components/react-combobox/src/contexts/ComboboxContext.ts b/packages/react-components/react-combobox/src/contexts/ComboboxContext.ts
index 3c17fafcacc671..e009c9e943a189 100644
--- a/packages/react-components/react-combobox/src/contexts/ComboboxContext.ts
+++ b/packages/react-components/react-combobox/src/contexts/ComboboxContext.ts
@@ -8,6 +8,7 @@ export type ComboboxContextValue = Pick<
ComboboxState,
| 'activeOption'
| 'appearance'
+ | 'focusVisible'
| 'open'
| 'registerOption'
| 'selectedOptions'
@@ -21,6 +22,7 @@ export type ComboboxContextValue = Pick<
export const ComboboxContext = createContext({
activeOption: undefined,
appearance: 'outline',
+ focusVisible: false,
open: false,
registerOption() {
return () => undefined;
@@ -37,3 +39,5 @@ export const ComboboxContext = createContext({
},
size: 'medium',
});
+
+export const ComboboxProvider = ComboboxContext.Provider;
diff --git a/packages/react-components/react-combobox/src/contexts/ListboxContext.ts b/packages/react-components/react-combobox/src/contexts/ListboxContext.ts
index ad44b28d9efaa6..ba09c4653941f6 100644
--- a/packages/react-components/react-combobox/src/contexts/ListboxContext.ts
+++ b/packages/react-components/react-combobox/src/contexts/ListboxContext.ts
@@ -6,12 +6,19 @@ import { ListboxState } from '../components/Listbox/Listbox.types';
*/
export type ListboxContextValue = Pick<
ListboxState,
- 'activeOption' | 'multiselect' | 'registerOption' | 'selectedOptions' | 'selectOption' | 'setActiveOption'
+ | 'activeOption'
+ | 'focusVisible'
+ | 'multiselect'
+ | 'registerOption'
+ | 'selectedOptions'
+ | 'selectOption'
+ | 'setActiveOption'
>;
// eslint-disable-next-line @fluentui/no-context-default-value
export const ListboxContext = createContext({
activeOption: undefined,
+ focusVisible: false,
multiselect: false,
registerOption() {
return () => undefined;
@@ -24,3 +31,5 @@ export const ListboxContext = createContext({
// noop
},
});
+
+export const ListboxProvider = ListboxContext.Provider;
diff --git a/packages/react-components/react-combobox/src/contexts/useComboboxContextValues.ts b/packages/react-components/react-combobox/src/contexts/useComboboxContextValues.ts
index 278005bcc18b4e..ffd4ed3d46cccd 100644
--- a/packages/react-components/react-combobox/src/contexts/useComboboxContextValues.ts
+++ b/packages/react-components/react-combobox/src/contexts/useComboboxContextValues.ts
@@ -4,6 +4,7 @@ export function useComboboxContextValues(state: ComboboxBaseState): ComboboxBase
const {
activeOption,
appearance,
+ focusVisible,
open,
registerOption,
selectedOptions,
@@ -16,6 +17,7 @@ export function useComboboxContextValues(state: ComboboxBaseState): ComboboxBase
const combobox = {
activeOption,
appearance,
+ focusVisible,
open,
registerOption,
selectedOptions,
diff --git a/packages/react-components/react-combobox/src/contexts/useListboxContextValues.ts b/packages/react-components/react-combobox/src/contexts/useListboxContextValues.ts
index 2c8a0006defecc..a9339ad2c577de 100644
--- a/packages/react-components/react-combobox/src/contexts/useListboxContextValues.ts
+++ b/packages/react-components/react-combobox/src/contexts/useListboxContextValues.ts
@@ -4,7 +4,15 @@ import { ComboboxContext } from './ComboboxContext';
export function useListboxContextValues(state: ListboxState): ListboxContextValues {
const hasComboboxContext = useHasParentContext(ComboboxContext);
- const { activeOption, multiselect, registerOption, selectedOptions, selectOption, setActiveOption } = state;
+ const {
+ activeOption,
+ focusVisible,
+ multiselect,
+ registerOption,
+ selectedOptions,
+ selectOption,
+ setActiveOption,
+ } = state;
// get register/unregister functions from parent combobox context
const comboboxRegisterOption = useContextSelector(ComboboxContext, ctx => ctx.registerOption);
@@ -13,6 +21,7 @@ export function useListboxContextValues(state: ListboxState): ListboxContextValu
const listbox = {
activeOption,
+ focusVisible,
multiselect,
registerOption: registerOptionValue,
selectedOptions,
diff --git a/packages/react-components/react-combobox/src/index.ts b/packages/react-components/react-combobox/src/index.ts
index 462e3d421d6ec0..bb95cbfb3cb5b4 100644
--- a/packages/react-components/react-combobox/src/index.ts
+++ b/packages/react-components/react-combobox/src/index.ts
@@ -1,3 +1,9 @@
+export { ComboboxProvider } from './contexts/ComboboxContext';
+export type { ComboboxContextValue } from './contexts/ComboboxContext';
+export { ListboxProvider } from './contexts/ListboxContext';
+export type { ListboxContextValue } from './contexts/ListboxContext';
+export { useComboboxContextValues } from './contexts/useComboboxContextValues';
+export { useListboxContextValues } from './contexts/useListboxContextValues';
export {
Listbox,
listboxClassNames,
diff --git a/packages/react-components/react-combobox/src/stories/Combobox/ComboboxAppearance.stories.tsx b/packages/react-components/react-combobox/src/stories/Combobox/ComboboxAppearance.stories.tsx
index 943af6ff08c0db..63f83bc828a529 100644
--- a/packages/react-components/react-combobox/src/stories/Combobox/ComboboxAppearance.stories.tsx
+++ b/packages/react-components/react-combobox/src/stories/Combobox/ComboboxAppearance.stories.tsx
@@ -22,15 +22,15 @@ const useStyles = makeStyles({
},
// filledLighter and filledDarker appearances depend on particular background colors
filledLighter: {
- backgroundColor: tokens.colorPaletteBerryForeground1,
+ backgroundColor: tokens.colorNeutralBackgroundInverted,
'> label': {
- color: tokens.colorNeutralForegroundInverted,
+ color: tokens.colorNeutralForegroundInverted2,
},
},
filledDarker: {
- backgroundColor: tokens.colorPaletteBerryForeground1,
+ backgroundColor: tokens.colorNeutralBackgroundInverted,
'> label': {
- color: tokens.colorNeutralForegroundInverted,
+ color: tokens.colorNeutralForegroundInverted2,
},
},
});
diff --git a/packages/react-components/react-combobox/src/stories/Combobox/ComboboxCustomOptions.stories.tsx b/packages/react-components/react-combobox/src/stories/Combobox/ComboboxCustomOptions.stories.tsx
index 72f52bd629ff18..1891dd10959feb 100644
--- a/packages/react-components/react-combobox/src/stories/Combobox/ComboboxCustomOptions.stories.tsx
+++ b/packages/react-components/react-combobox/src/stories/Combobox/ComboboxCustomOptions.stories.tsx
@@ -31,6 +31,9 @@ const useStyles = makeStyles({
...shorthands.gap('2px'),
maxWidth: '400px',
},
+ listbox: {
+ maxHeight: '200px',
+ },
});
export const CustomOptions = (props: Partial) => {
@@ -41,7 +44,12 @@ export const CustomOptions = (props: Partial) => {
return (
Best pet
-
+
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/DropdownAccessibility.stories.mdx b/packages/react-components/react-combobox/src/stories/Dropdown/DropdownAccessibility.stories.mdx
new file mode 100644
index 00000000000000..c903d4c61667fb
--- /dev/null
+++ b/packages/react-components/react-combobox/src/stories/Dropdown/DropdownAccessibility.stories.mdx
@@ -0,0 +1,326 @@
+import { Meta } from '@storybook/addon-docs';
+import clickImg from './images/dropdown-click.png';
+import collapsedImg from './images/dropdown-collapsed.png';
+import hoverImg from './images/dropdown-hover.png';
+import keySelectImg from './images/dropdown-key-select.png';
+import multiselect1Img from './images/dropdown-multiselection1.png';
+import multiselect2Img from './images/dropdown-multiselection2.png';
+import navImg from './images/dropdown-nav.png';
+import openImg from './images/dropdown-open.png';
+import optionHoverImg from './images/dropdown-option-hover.png';
+import selectedOpenImg from './images/dropdown-selected-open.png';
+import semanticsImg from './images/dropdown-semantics.png';
+import tabbingImg from './images/dropdown-tabbing.png';
+
+
+
+# Dropdown Accessibility Spec
+
+`Dropdown` is one of three form selection components that display the current selection, and allow a user to expand a popup to modify the selection. The other two are `Select` and `Combobox`.
+
+The semantics and behavior are roughly similar to a more complex version of the `Select` component (an HTML `` element), but with more functionality and full control over styling. Unlike `Combobox`, `Dropdown` does not allow text input. `Dropdown` supports both single-selection and multi-selection.
+
+## Usage
+
+### When to choose Dropdown
+
+#### Dropdown vs. Select
+
+`Dropdown` is a more feature-rich version of `Select`, which comes at the cost a larger code footprint, and less robust support for accessibility compared to the native `` element.
+
+Use `Dropdown` when any of the following are required:
+
+- Control over styling the popup and options
+- Multiple selection
+- Virtualization
+
+Otherwise, `Select` is recommended for performance, accessibility, and native-feeling mobile support.
+
+#### Dropdown vs. Combobox
+
+`Combobox` allows text input, which enables filtering and freeform values. This is a better fit for use cases with a large number of options, or where the user may want to type a value directly without interacting with the popup.
+
+#### Dropdown vs. Menu
+
+`Select` or `Dropdown` should be used over `Menu` when creating a standalone control for selecting values. `Menu` should be used when the purpose is to allow the user to perform an immediate action on the page, or when the control is embedded within a parent `Menu`.
+
+Examples of appropriate `Menu` usage include:
+
+- Application top menus
+- Context menus
+- Editing menubars
+
+#### Multiselect Dropdown vs. Checkboxes
+
+Checkboxes are significantly more usable and accessible than multiselect comboboxes for smaller numbers of choices. Consider using a checkbox group over `Dropdown` if there are less than 10 options.
+
+### Implementing Dropdown
+
+#### Label
+
+Authors must provide label text for `Dropdown`. The recommended pattern for Fluent form controls is to use the `Label` component like this:
+
+```tsx
+Favorite Fruit
+
+ Apple
+ Banana
+
+```
+
+Other options include:
+
+1. `aria-label="label text string"` on the `` component
+2. `aria-labelledby="label-id"` on the `` component, pointing to the id of label text
+
+The `placeholder` prop is not a substitute for a label. It is no longer displayed when a value is selected, while labels must be persistently visible and exposed to the user.
+
+#### Content restrictions
+
+The following content types should not be used within children or slots of `Dropdown`:
+
+- Any interactive or focusable content, aside from ``.
+- Any structured content, such as tables, lists, or headings.
+
+The following content types should not be used within children or slots of `Option`:
+
+- Any interactive or focusable content, aside from ` `.
+- Any structured content, such as tables, lists, or headings.
+- Tooltips
+
+Focusable and interactive content is prohibited based on the semantics of `Dropdown` and `Option`, and will cause issues for screen reader users. Focusable items within the popup will additionally not be keyboard accessible.
+
+The following content types may be used within children and slot content in `Dropdown` and `Option`:
+
+- Images and icons
+- Generic elements like `` and `
`, without `tabindex` or `role` properties
+- Fluent's `` component
+
+#### inlinePopup
+
+By default, the popup renders in its own layer at the end of the DOM to ensure it appears above all other UI, and is not clipped by containers with overflow: hidden or overflow: scroll. This causes an issue for people who use iOS VoiceOver (Apple's touch-based screen reader), since it strictly follows DOM order when swiping from one control to the next. This makes it difficult to reach the options popup after opening the `Dropdown`.
+
+If possible, we recommend setting `inlinePopup={true}`, which will render the popup directly after the `Dropdown` button in the DOM for better `VoiceOver` touch support.
+
+#### Option value
+
+By default, the `` component calculates its text value from its children. This works if the children are a simple string, like this:
+
+```tsx
+ Simple text string
+```
+
+However, if the `` contains JSX, this will not work correctly. If that is the case, provide a string value with the `value` prop:
+
+```tsx
+
+
+ Simple text string
+
+```
+
+`Dropdown` uses string values to handle jumping between options based on alphanumeric keyboard input, so `value` must match the visual text displayed within the `Option`.
+
+#### Color contrast and appearance variants
+
+The `filled-lighter`, `filled-darker`, and `underline` all have contrast requirements for their background color:
+
+- `filled-lighter` and `filled-darker` variants must both be placed over background colors dark enough to meet 3:1 contrast against the `Dropdown` button's background color.
+- `underline` must be placed over a light enough background for the placeholder and value text to meet 4.5:1 contrast against the page background.
+
+## Semantics
+
+
+
+
+
+
+ Role
+ States and properties
+
+
+
+
+ 1. combobox
+
+ type="button"
+
+
+
+
+ aria-haspopup="listbox"
+
+
+
+
+ aria-activedescendant="active-option-id"
+
+
+
+
+ aria-expanded="true/false"
+
+
+
+ 2. listbox
+ -
+
+
+ 3. option
+
+ aria-selected="true/false"
+
+
+
+ wrapper (no role)
+
+ aria-owns="listbox-id"*
+
+
+
+
+
+** \* putting `aria-owns` on the wrapping element moves the listbox immediately after the trigger in the accessibility tree, even though it is rendered at the end of the DOM. For all screen readers but VoiceOver, this enables virtual cursor navigation between the trigger and listbox/options. **
+
+## Keyboard interaction
+
+### Navigate to dropdown
+
+
+
+| Name | Role | States and properties |
+| -------------- | -------- | ----------------------- |
+| (1) Best fruit | combobox | `aria-expanded="false"` |
+
+### Open or close the listbox popup
+
+#### Open popup with no selected options
+
+
+
+| Name | Role | States and properties |
+| -------------- | -------- | ---------------------- |
+| (1) Best fruit | combobox | `aria-expanded="true"` |
+
+| Key | Result |
+| ------------------------------------------------------ | --------------------------------------------------------------------- |
+| Enter | Opens popup with first option in focus |
+| Space | Opens popup with first option in focus |
+| Up or Down arrow | Opens popup with first option in focus |
+| Any printable character | Opens popup with focus on first option matching that character |
+| Esc or Alt + Up arrow | Closes popup without modifying selection, and keeps dropdown in focus |
+
+#### Open popup with a selected option (or options)
+
+When one or more options are already selected, focus will move to the most recently selected option when opened.
+
+
+
+| Name | Role | States and properties |
+| -------------- | -------- | ---------------------- |
+| (2) Best fruit | combobox | `aria-expanded="true"` |
+| (3) Banana | option | `aria-selected="true"` |
+
+### Navigate between options in popup
+
+
+
+| Name | Role | States and properties |
+| ---------- | ------- | ----------------------- |
+| (2) - | listbox | - |
+| (3) Banana | option | `aria-selected="false"` |
+
+| Key | Result |
+| ----------------------- | ------------------------------------------------------ |
+| Up arrow | Moves focus to the previous option, if one exists |
+| Down arrow | Moves focus to the next option, if one exists |
+| Home | Moves focus to the first option |
+| End | Moves focus to the last option |
+| PageUp | Moves focus up 10 options, or to the first option |
+| PageDown | Moves focus down 10 options, or to the last option |
+| Any printable character | Moves focus to the next option matching that character |
+
+### Behavior: Single-selection
+
+#### Select an option
+
+
+
+| Name | Role | States and properties |
+| ---------- | ------ | ----------------------- |
+| (1) Banana | option | `aria-selected="false"` |
+
+| Key | Result |
+| ------------------------------------ | --------------------------------------------------------------------------------- |
+| Enter or Space | Selects the focused option and closes the popup |
+| Tab | Selects the focused option, closes the popup, and moves focus after the dropdown |
+| Shift + Tab | Selects the focused option, closes the popup, and moves focus before the dropdown |
+
+#### Popup closes automatically after an option is selected
+
+
+
+| Name | Role | States and properties |
+| -------------- | -------- | ----------------------- |
+| (2) Best fruit | combobox | `aria-expanded="false"` |
+
+### Behavior: Multiselection
+
+Unlike single-select behavior, mutliselect Dropdowns do not close automatically after a selection is made, unless using Tab or Shift + Tab .
+
+
+
+
+
+| Name | Role | States and properties |
+| ----------- | ------ | ----------------------- |
+| (1a) Banana | option | `aria-selected="false"` |
+| (1b) Banana | option | `aria-selected="true"` |
+
+| Key | Result |
+| ------------------------------------ | ----------------------------------------------------------------------------------------------------- |
+| Enter or Space | Toggles selection on or off for focused option |
+| Tab | Toggles selection on or off for focused option, closes the popup, and moves focus after the dropdown |
+| Shift + Tab | Toggles selection on or off for focused option, closes the popup, and moves focus before the dropdown |
+
+## Windows contrast themes (high contrast mode)
+
+Dropdown fully relies on native browser behavior for Windows contrast themes. All borders, icons, and text adapt to the user-selected theme colors without modifying styles in a media query.
+
+## Motion and animation
+
+The focus underline's growing animation does not run when [prefers-reduced-motion](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion) is true.
+
+## Known issues
+
+- [Safari does not support `aria-owns`](https://bugs.webkit.org/show_bug.cgi?id=241694)
+- [JAWS does not expose option group labels](https://github.com/FreedomScientific/VFO-standards-support/issues/381)
+- [Android Talkback does not expose option group labels](https://issuetracker.google.com/issues/225987035)
+- NVDA and JAWS do not explicitly announce "selected" for selected options (this is not a bug per se, but occasionally causes confusion)
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-click.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-click.png
new file mode 100755
index 00000000000000..c217cdd729785a
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-click.png differ
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-collapsed.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-collapsed.png
new file mode 100644
index 00000000000000..746c1656c8dc4d
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-collapsed.png differ
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-hover.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-hover.png
new file mode 100755
index 00000000000000..9fb5c5736f8600
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-hover.png differ
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-key-select.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-key-select.png
new file mode 100644
index 00000000000000..4a3668eeac65fa
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-key-select.png differ
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-multiselection1.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-multiselection1.png
new file mode 100644
index 00000000000000..a8e8145996cbb1
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-multiselection1.png differ
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-multiselection2.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-multiselection2.png
new file mode 100644
index 00000000000000..90950bfac8af53
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-multiselection2.png differ
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-nav.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-nav.png
new file mode 100755
index 00000000000000..0f593d4f3a19eb
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-nav.png differ
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-open.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-open.png
new file mode 100755
index 00000000000000..9ea997686dd6a3
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-open.png differ
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-option-hover.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-option-hover.png
new file mode 100755
index 00000000000000..d9304576440244
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-option-hover.png differ
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-selected-open.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-selected-open.png
new file mode 100644
index 00000000000000..3421dedf51bdf7
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-selected-open.png differ
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-semantics.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-semantics.png
new file mode 100755
index 00000000000000..d80d8789588211
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-semantics.png differ
diff --git a/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-tabbing.png b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-tabbing.png
new file mode 100755
index 00000000000000..ba169883e83bb3
Binary files /dev/null and b/packages/react-components/react-combobox/src/stories/Dropdown/images/dropdown-tabbing.png differ
diff --git a/packages/react-components/react-combobox/src/utils/ComboboxBase.types.ts b/packages/react-components/react-combobox/src/utils/ComboboxBase.types.ts
index 7c9a8c445a4a6f..24aeee49419d01 100644
--- a/packages/react-components/react-combobox/src/utils/ComboboxBase.types.ts
+++ b/packages/react-components/react-combobox/src/utils/ComboboxBase.types.ts
@@ -62,7 +62,7 @@ export type ComboboxBaseProps = SelectionProps & {
/**
* The value displayed by the Combobox.
- * Use this with `onSelect` to directly control the displayed value string
+ * Use this with `onOptionSelect` to directly control the displayed value string
*/
value?: string;
};
@@ -77,6 +77,9 @@ export type ComboboxBaseState = Required void;
/**
* An array of selected option keys.
- * Use this with `onSelect` to directly control the selected option(s)
+ * Use this with `onOptionSelect` to directly control the selected option(s)
*/
selectedOptions?: string[];
};
@@ -33,12 +33,12 @@ export type SelectionValue = {
};
/*
- * Data for the onSelect callback.
+ * Data for the onOptionSelect callback.
* `optionValue` will be undefined if the multiple options are modified at once.
*/
-export type OnSelectData = { optionValue: string | undefined; selectedOptions: string[] };
+export type OptionOnSelectData = { optionValue: string | undefined; selectedOptions: string[] };
-/* Possible event types for onSelect */
+/* Possible event types for onOptionSelect */
export type SelectionEvents =
| React.ChangeEvent
| React.KeyboardEvent
diff --git a/packages/react-components/react-combobox/src/utils/useComboboxBaseState.ts b/packages/react-components/react-combobox/src/utils/useComboboxBaseState.ts
index a03e3bf5d501bc..2e50ea22f4805f 100644
--- a/packages/react-components/react-combobox/src/utils/useComboboxBaseState.ts
+++ b/packages/react-components/react-combobox/src/utils/useComboboxBaseState.ts
@@ -16,6 +16,10 @@ export const useComboboxBaseState = (props: ComboboxBaseProps) => {
const [activeOption, setActiveOption] = React.useState();
+ // track whether keyboard focus outline should be shown
+ // tabster/keyborg doesn't work here, since the actual keyboard focus target doesn't move
+ const [focusVisible, setFocusVisible] = React.useState(false);
+
// track focused state to conditionally render collapsed listbox
const [hasFocus, setHasFocus] = React.useState(false);
@@ -88,11 +92,13 @@ export const useComboboxBaseState = (props: ComboboxBaseProps) => {
...selectionState,
activeOption,
appearance,
+ focusVisible,
hasFocus,
ignoreNextBlur,
inlinePopup,
open,
setActiveOption,
+ setFocusVisible,
setHasFocus,
setOpen,
setValue,
diff --git a/packages/react-components/react-combobox/src/utils/useScrollOptionsIntoView.ts b/packages/react-components/react-combobox/src/utils/useScrollOptionsIntoView.ts
new file mode 100644
index 00000000000000..de31be3a14c3db
--- /dev/null
+++ b/packages/react-components/react-combobox/src/utils/useScrollOptionsIntoView.ts
@@ -0,0 +1,36 @@
+import * as React from 'react';
+import { canUseDOM } from '@fluentui/react-utilities';
+import { ListboxState } from '../Listbox';
+
+export function useScrollOptionsIntoView(state: ListboxState): React.Ref {
+ const { activeOption } = state;
+ const scrollContainerRef = React.useRef(null);
+
+ React.useEffect(() => {
+ if (scrollContainerRef.current && activeOption && canUseDOM()) {
+ const activeOptionElement = scrollContainerRef.current.querySelector(`#${activeOption.id}`) as HTMLElement;
+
+ if (!activeOptionElement) {
+ return;
+ }
+
+ const { offsetHeight, offsetTop } = activeOptionElement;
+ const { offsetHeight: parentOffsetHeight, scrollTop } = scrollContainerRef.current;
+
+ const isAbove = offsetTop < scrollTop;
+ const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;
+
+ // add a small buffer for general visual nicety
+ // it looks slightly better if the option has some space from the top/bottom while arrowing
+ const buffer = 2;
+
+ if (isAbove) {
+ scrollContainerRef.current.scrollTo(0, offsetTop - buffer);
+ } else if (isBelow) {
+ scrollContainerRef.current.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight + buffer);
+ }
+ }
+ }, [activeOption]);
+
+ return scrollContainerRef;
+}
diff --git a/packages/react-components/react-combobox/src/utils/useSelection.ts b/packages/react-components/react-combobox/src/utils/useSelection.ts
index 8ee6540ffaf091..39b33834200310 100644
--- a/packages/react-components/react-combobox/src/utils/useSelection.ts
+++ b/packages/react-components/react-combobox/src/utils/useSelection.ts
@@ -3,7 +3,7 @@ import { OptionValue } from './OptionCollection.types';
import { SelectionEvents, SelectionProps, SelectionValue } from './Selection.types';
export const useSelection = (props: SelectionProps): SelectionValue => {
- const { defaultSelectedOptions, multiselect, onSelect } = props;
+ const { defaultSelectedOptions, multiselect, onOptionSelect } = props;
const [selectedOptions, setSelectedOptions] = useControllableState({
state: props.selectedOptions,
@@ -33,12 +33,12 @@ export const useSelection = (props: SelectionProps): SelectionValue => {
}
setSelectedOptions(newSelection);
- onSelect?.(event, { optionValue: option.value, selectedOptions: newSelection });
+ onOptionSelect?.(event, { optionValue: option.value, selectedOptions: newSelection });
};
const clearSelection = (event: SelectionEvents) => {
setSelectedOptions([]);
- onSelect?.(event, { optionValue: undefined, selectedOptions: [] });
+ onOptionSelect?.(event, { optionValue: undefined, selectedOptions: [] });
};
return { clearSelection, selectOption, selectedOptions };
diff --git a/packages/react-components/react-combobox/src/utils/useTriggerListboxSlots.ts b/packages/react-components/react-combobox/src/utils/useTriggerListboxSlots.ts
index c90f3f1e02fa2d..06b01b54c0714c 100644
--- a/packages/react-components/react-combobox/src/utils/useTriggerListboxSlots.ts
+++ b/packages/react-components/react-combobox/src/utils/useTriggerListboxSlots.ts
@@ -45,6 +45,7 @@ export function useTriggerListboxSlots(
open,
selectOption,
setActiveOption,
+ setFocusVisible,
setHasFocus,
setOpen,
} = state;
@@ -78,18 +79,17 @@ export function useTriggerListboxSlots(
* 1. Move focus back to the button/input when the listbox is clicked (otherwise it goes to body)
* 2. Do not close the listbox on button/input blur when clicking into the listbox
*/
- const { onClick: onListboxClick, onMouseDown: onListboxMouseDown } = listbox;
- listbox.onClick = (event: React.MouseEvent) => {
+ listbox.onClick = mergeCallbacks((event: React.MouseEvent) => {
triggerRef.current?.focus();
+ }, listbox.onClick);
- onListboxClick?.(event);
- };
+ listbox.onMouseOver = mergeCallbacks((event: React.MouseEvent) => {
+ setFocusVisible(false);
+ }, listbox.onMouseOver);
- listbox.onMouseDown = (event: React.MouseEvent) => {
+ listbox.onMouseDown = mergeCallbacks((event: React.MouseEvent) => {
ignoreNextBlur.current = true;
-
- onListboxMouseDown?.(event);
- };
+ }, listbox.onMouseDown);
}
// the trigger should open/close the popup on click or blur
@@ -128,6 +128,7 @@ export function useTriggerListboxSlots(
switch (action) {
case 'Open':
event.preventDefault();
+ setFocusVisible(true);
setOpen(event, true);
break;
case 'Close':
@@ -153,10 +154,18 @@ export function useTriggerListboxSlots(
// prevent default page scroll/keyboard action if the index changed
event.preventDefault();
setActiveOption(getOptionAtIndex(newIndex));
+ setFocusVisible(true);
}
},
trigger.onKeyDown,
);
+ trigger.onMouseOver = mergeCallbacks(
+ (event: React.MouseEvent & React.MouseEvent) => {
+ setFocusVisible(false);
+ },
+ trigger.onMouseOver,
+ );
+
return [trigger, listbox];
}
diff --git a/packages/react-components/react-components/.storybook/manager-head.html b/packages/react-components/react-components/.storybook/manager-head.html
index e651c934639471..7197bdcba97cd3 100644
--- a/packages/react-components/react-components/.storybook/manager-head.html
+++ b/packages/react-components/react-components/.storybook/manager-head.html
@@ -115,7 +115,7 @@
Usign suggested temporary workaround until storybook gets proper support
See https://github.com/microsoft/fluentui/blob/master/rfcs/convergence/authoring-stories.md#10-internal-stories-for-testing
*/
- [id*='accessibility-scenario'] {
+ [id*='accessibility-stories'] {
display: none !important;
}
diff --git a/packages/react-components/react-components/.storybook/preview.js b/packages/react-components/react-components/.storybook/preview.js
index a0818f9f645060..6ea980be2543cb 100644
--- a/packages/react-components/react-components/.storybook/preview.js
+++ b/packages/react-components/react-components/.storybook/preview.js
@@ -20,7 +20,7 @@ export const parameters = {
[
'Introduction',
'Developer',
- ['Quick Start', 'Styling Components', 'Positioning Components'],
+ ['Quick Start', 'Styling Components', 'Positioning Components', 'Accessibility', ['*', 'Components']],
'Upgrading',
[
'from v8',
diff --git a/packages/react-components/react-components/CHANGELOG.json b/packages/react-components/react-components/CHANGELOG.json
index dccd49c82b2345..edd6ca8637420b 100644
--- a/packages/react-components/react-components/CHANGELOG.json
+++ b/packages/react-components/react-components/CHANGELOG.json
@@ -1,6 +1,3364 @@
{
"name": "@fluentui/react-components",
"entries": [
+ {
+ "date": "Wed, 26 Oct 2022 18:05:51 GMT",
+ "tag": "@fluentui/react-components_v9.6.1",
+ "version": "9.6.1",
+ "comments": {
+ "none": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/babel-preset-global-context",
+ "commit": "326827f375a50719f96395a4d92ed941611d602b",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "bd5530ed0c9b2435d14f6e87878324343547ca34",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ],
+ "patch": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "32865fdfad96c52b75ffdce36120e30940871229",
+ "comment": "feat: export react-table logic hooks"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 25 Oct 2022 22:09:49 GMT",
+ "tag": "@fluentui/react-components_v9.6.0",
+ "version": "9.6.0",
+ "comments": {
+ "none": [
+ {
+ "author": "chassunc@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "dba7e9c342ca32d05d49d341b3912cd79652f238",
+ "comment": "chore: remove best practices"
+ },
+ {
+ "author": "chassunc@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "9bde21168a1032d2a429939b9b2d7d3ba590726f",
+ "comment": "feat: replace ToolbarRadio implementation by usage of toggle button as radio"
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/keyboard-keys",
+ "commit": "2435ea50f924fa6467a07829f3d4715e545d93c0",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "2435ea50f924fa6467a07829f3d4715e545d93c0",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "2435ea50f924fa6467a07829f3d4715e545d93c0",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-context-selector",
+ "commit": "2435ea50f924fa6467a07829f3d4715e545d93c0",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ],
+ "minor": [
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "acb0fd721bd23f4d66d18a0f27abd399d3877bc4",
+ "comment": "fix: Change react-persona to pinned version."
+ }
+ ],
+ "patch": [
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "025e0740b1c47bd105b9cc6277072941bf855b8c",
+ "comment": "fix: Export PopoverTriggerChildProps"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 25 Oct 2022 00:35:26 GMT",
+ "tag": "@fluentui/react-components_v9.5.3",
+ "version": "9.5.3",
+ "comments": {
+ "none": [
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/global-context",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/global-context",
+ "commit": "07141711530bbdba82fd5198fe4bcef462403f40",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-aria",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "d9dda6aafb1571b08e5cc0ba3437a24a20c694f6",
+ "comment": "feat: add full Dropdown component accessibility spec"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-input",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-menu",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-persona",
+ "commit": "eef12b9ae58b64ff68576dc2d865b601e46c85b9",
+ "comment": "chore: Update beachball settings."
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-popover",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-portal",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-positioning",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-provider",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-radio",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-select",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-shared-contexts",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-text",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-textarea",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme-sass",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-utilities",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/babel-preset-global-context",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ }
+ ],
+ "patch": [
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "28364be921fa9e04eb472a069416b61b30da8652",
+ "comment": "fix: Add undefined option to overflowItems in partitionAvatarGroupItems."
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-badge",
+ "commit": "1420e05c305e7396bc62028ff2563d79fbc1cc70",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-button",
+ "commit": "619b625d628ba1b30398052d7dc6b8110aff2c80",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "11156f964c91c90f778a08e1d7ec650104756f80",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "e255da7cf629534ebaaac05af3b5bb9a2f7def71",
+ "comment": "feat: add react-progress to react-components/unstable"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "28364be921fa9e04eb472a069416b61b30da8652",
+ "comment": "chore: Export missing partitionAvatarGroupItems in unstable."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "69892eab60695a2da2dca35a067cc12fa3a44bac",
+ "comment": "chore: Updating react-persona's version."
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc",
+ "comment": "bugfix: adds cursor pointer style to dialog close button"
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-image",
+ "commit": "c483be010271f3224064a9778e6432167f2249d0",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-spinbutton",
+ "commit": "ab9bf285848173c8a3f2113b9dac63dbbebf7407",
+ "comment": "feat: updates internal SpinButton padding"
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-text",
+ "commit": "36a3fc729e3ece19ba59fdf996a685578c0d0876",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ],
+ "prerelease": [
+ {
+ "author": "adam.samec@gmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "5464a92a4301e431fe322b67212d47b866e048ad",
+ "comment": "Add uncomplete Input scenario"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-field",
+ "commit": "f9436f583d3c291921fe7a4531f69551096e758c",
+ "comment": "feat: Add support for validationState to ProgressField"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-persona",
+ "commit": "69892eab60695a2da2dca35a067cc12fa3a44bac",
+ "comment": "chore: Change version back to beta."
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-progress",
+ "commit": "f9436f583d3c291921fe7a4531f69551096e758c",
+ "comment": "feat: Add validationState to Progress, to make the bar red or green"
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-progress",
+ "commit": "e255da7cf629534ebaaac05af3b5bb9a2f7def71",
+ "comment": "feat: add react-progress to react-components/unstable"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:25 GMT",
+ "tag": "@fluentui/react-components_v9.5.2",
+ "version": "9.5.2",
+ "comments": {
+ "patch": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "makotom@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "db508a35cb86dac733878dab9e67feb4f39c2f83",
+ "comment": "fix: Fixing the styles of Buttons rendered as anchor tags."
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-context-selector",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "083a2c4c3bf07a279bbf01c1d8fad582857beda1",
+ "comment": "chore: updates disallowed change types"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-divider",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-divider",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-image",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-image",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-input",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-input",
+ "commit": "d55f6633f62c5715c41c8dbc8c5a428bef424345",
+ "comment": "feat: Add red border when aria-invalid is set"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-input",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-label",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-label",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-link",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-link",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-menu",
+ "commit": "099d9f0f3d9e033ebb3bb450f31cf3e5765ec8f0",
+ "comment": "fix: Menu trigger should be focused when dismissed by menuitem click"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-menu",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-menu",
+ "commit": "61915ced2a350da17f8d1a1c520070796dc90d46",
+ "comment": "chore: Migrate to new package structure"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-menu",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-persona",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-persona",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-popover",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-popover",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-portal",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-portal",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-portal-compat",
+ "commit": "772f9e3ebde2d5b8157a3204c1a4e007e56f5508",
+ "comment": "chore: Bump react peer dependency to react 18."
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-portal-compat-context",
+ "commit": "772f9e3ebde2d5b8157a3204c1a4e007e56f5508",
+ "comment": "chore: Bump react peer dependency to react 18."
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-positioning",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-positioning",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-provider",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-provider",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-radio",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-radio",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-shared-contexts",
+ "commit": "772f9e3ebde2d5b8157a3204c1a4e007e56f5508",
+ "comment": "chore: Bump react peer dependency to react 18."
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-slider",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-slider",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-slider",
+ "commit": "8b54aac14b71af53725108ee36b1b061624dc9e8",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-spinbutton",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-spinbutton",
+ "commit": "d55f6633f62c5715c41c8dbc8c5a428bef424345",
+ "comment": "feat: Add red border when aria-invalid is set"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-spinbutton",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-spinner",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-spinner",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-switch",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-switch",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-tabs",
+ "commit": "6c47e6bc6ca2298df181b7417ce937b1783be31e",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-tabs",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-tabs",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "bd212e73e6a6e3c92495b793c6e682c24f27b6db",
+ "comment": "feat: Disabling default browser outline should be an option"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-text",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-text",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-textarea",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-textarea",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-textarea",
+ "commit": "d55f6633f62c5715c41c8dbc8c5a428bef424345",
+ "comment": "feat: Add red border when aria-invalid is set"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-utilities",
+ "commit": "772f9e3ebde2d5b8157a3204c1a4e007e56f5508",
+ "comment": "chore: Bump react peer dependency to react 18."
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "4f7430e2fa321b96ce6022882a42aa897fcf67c9",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-aria",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ }
+ ],
+ "prerelease": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-card",
+ "commit": "ffad7cc2b7fd1da575db124105c4bc2dbb352cbb",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "d55f6633f62c5715c41c8dbc8c5a428bef424345",
+ "comment": "feat: Add red border when aria-invalid is set"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "772f9e3ebde2d5b8157a3204c1a4e007e56f5508",
+ "comment": "chore: Bump react peer dependency to react 18."
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-field",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-field",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-progress",
+ "commit": "e14e5348f1f08aee8da7cb911a24a811d9f9cb09",
+ "comment": "feat: Add shape prop to Progress"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-progress",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-progress",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-select",
+ "commit": "d55f6633f62c5715c41c8dbc8c5a428bef424345",
+ "comment": "feat: Add red border when aria-invalid is set"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-select",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-select",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "15b7b57ee484f8d500b3c7afb9aa46c17a9beaeb",
+ "comment": "fix: Row and header interactive styles are separate"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "bd212e73e6a6e3c92495b793c6e682c24f27b6db",
+ "comment": "feat(TableSelectionCell): Use Radio component, adds subtle and hidden"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-table",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-table",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "66bf477e336a9248e138e31ee6e58d9672da8f8f",
+ "comment": "feat: Add `appearance` prop to `TableRow`"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/global-context",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-alert",
+ "commit": "791ed7453a6bf65342e9bed5876b02ef0b9fc944",
+ "comment": "chore: Migrate to new package structure."
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ }
+ ],
+ "none": [
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "099d9f0f3d9e033ebb3bb450f31cf3e5765ec8f0",
+ "comment": "Remove it.only from unit tests"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-persona",
+ "commit": "82650ef8b3d436c039e33f3eb8a658a3d878064f",
+ "comment": "prettier update"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-progress",
+ "commit": "82650ef8b3d436c039e33f3eb8a658a3d878064f",
+ "comment": "prettier update"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-radio",
+ "commit": "8f731012796f3a5a96116b029b3e7f9f5091b6d9",
+ "comment": "chore: Add documentation for Radio control, in addition to RadioGroup"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "5280dfeda349453f42b51ae49c9d128bc322c609",
+ "comment": "docs: Remove row navigation"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "433209a6b5e8adb7619d3658c1606ec8adb02745",
+ "comment": "docs: Update keyboard navigation examples to use `useArrowNavigationGroup`"
+ },
+ {
+ "author": "chassunc@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "9d4b8f5d85760307e49781ad694ae5db19b2018b",
+ "comment": "chore: typo"
+ }
+ ],
+ "minor": [
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "433209a6b5e8adb7619d3658c1606ec8adb02745",
+ "comment": "feat: Bump tabster to 3.0.4"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 12:56:29 GMT",
+ "tag": "@fluentui/react-components_v9.5.1",
+ "version": "9.5.1",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "e563f3daaea9b7cc62f50bc15edd44edf5045107",
+ "comment": "feat: adds disableButtonEnhancement property on DialogTrigger"
+ }
+ ],
+ "minor": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-menu",
+ "commit": "e563f3daaea9b7cc62f50bc15edd44edf5045107",
+ "comment": "feat: adds disableButtonEnhancement property on MenuTrigger"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-popover",
+ "commit": "e563f3daaea9b7cc62f50bc15edd44edf5045107",
+ "comment": "feat: adds disableButtonEnhancement property on PopoverTrigger"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:40 GMT",
+ "tag": "@fluentui/react-components_v9.5.0",
+ "version": "9.5.0",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "6440417cb5db157acfb33d9f2c93de9bf7493791",
+ "comment": "feat: Adds API to register overflow menus for better available space calculation"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "d59683655d4d2a3775df4a2b41a09504cddd72ad",
+ "comment": "new overflow items should only be enqueued while observing"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "610eaf4725950121d3646e07a452d541ea3f3776",
+ "comment": "fix: add ScrollIntoView hook for Listbox options"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "0bf5374da5df0649ac7fdc065d141f0b8cd7ddf6",
+ "comment": "feat: export contexts from react-combobox"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "e154da8243c0b3a900aeaaa55d91c4ca96f8a705",
+ "comment": "fix: Dropdown arrow icon layout when no placeholder or value is present"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "12222c2cfb1851ac6fbf57d17a1573432e842ec7",
+ "comment": "feat: focus on surface if no focusable element is available"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "17c5fe742918bbc41ed22f492a289f53bffc5008",
+ "comment": "chore: improves DialogTrigger types"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "443c503b94e602e55857e4e311413c6257d60766",
+ "comment": "chore: cleanups in types"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "b48083b3009bc75f28c328de0024eb400b989145",
+ "comment": "fix: aria-* properties should be reassignable"
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-field",
+ "commit": "a8e81b5296f1551e74010c1d2ad9d37c6fd48306",
+ "comment": "Add ProgressField to @fluentui/react-field"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-field",
+ "commit": "c78ae4c551ef8dd8109fc339047cfdfd1c1b9948",
+ "comment": "fix: CheckboxField to set a generated ID on the input, to match the label's htmlFor"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-field",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-field",
+ "commit": "8954cd0e856c4fdda7745f40d3c30916a6e24f6b",
+ "comment": "fix: Field should have block layout, not inline"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "6440417cb5db157acfb33d9f2c93de9bf7493791",
+ "comment": "fix: useOverflowMenu should register overflow menu"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-progress",
+ "commit": "863058740bb2f3e82680db503268b3e937ddf86d",
+ "comment": "chore: Add vr and conformance tests."
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-progress",
+ "commit": "a8e81b5296f1551e74010c1d2ad9d37c6fd48306",
+ "comment": "Add justify-self styling to Progress styles"
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-progress",
+ "commit": "7c61a4294381ddc4b738a31c71f0a953cbe2ee95",
+ "comment": "Add documentation"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-progress",
+ "commit": "4f46035db0cd28a5987932120c68755e024869c8",
+ "comment": "fix: Progress should set aria-valuemin and aria-valuemax when the value is 0"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-progress",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-select",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-table",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "33559052b672f787b021bd2fbc9826e88ce2a2de",
+ "comment": "BREAKING: refactor `useTable` to be composable"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "2d36a7c692d301b420b6a4b1a78b139fdc955612",
+ "comment": "fix: Toolbar selection should work"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ }
+ ],
+ "patch": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "makotom@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "755d076070dd69c0a798eb5863aadf98e76b024a",
+ "comment": "feat: Adding subtle transition between states on Button components."
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "93f154ac2821be1fd408fa98943a641f9d3dc464",
+ "comment": "docs: update Icon docs with examples"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a",
+ "comment": "feat: react-dialog stable release"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-divider",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-image",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-input",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-label",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-link",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-menu",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-menu",
+ "commit": "17c5fe742918bbc41ed22f492a289f53bffc5008",
+ "comment": "chore: improves MenuTrigger types"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-menu",
+ "commit": "77e15dac2727ae2a8b466744fc291447548e4249",
+ "comment": "fix: Menu trigger should be focused when menu is closed with keyboard"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-persona",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-persona",
+ "commit": "0b45dbb1df893c61086b5de4f312f7258d3d8fd7",
+ "comment": "chore: Add unit and conformance tests."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-persona",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a",
+ "comment": "chore: Adding bundle-size command for bundle-size fixtures."
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-popover",
+ "commit": "17c5fe742918bbc41ed22f492a289f53bffc5008",
+ "comment": "chore: improves PopoverTrigger types"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-popover",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-portal",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-positioning",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "yuanboxue@microsoft.com",
+ "package": "@fluentui/react-positioning",
+ "commit": "16c7bcadf6f5a1f66dd8224f014ceee4c4800be3",
+ "comment": "fix `usePositioning` to reset `overrideTargetRef` when target in hook options is undefined"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-provider",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-radio",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-slider",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-spinbutton",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-spinner",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-switch",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-tabs",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-text",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-textarea",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "17c5fe742918bbc41ed22f492a289f53bffc5008",
+ "comment": "chore: improves Tooltip types"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "c0b200c4c2ce25dbe3b95f8fc08454e362d25e17",
+ "comment": "fix: The Tooltip should not hide if it gets keyboard focus"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-utilities",
+ "commit": "17c5fe742918bbc41ed22f492a289f53bffc5008",
+ "comment": "chore: restricts trigger API types"
+ }
+ ],
+ "minor": [
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "90e00c3534b8f263446f995ac040de135032797f",
+ "comment": "feat: Re-export Portal component and related bits"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a",
+ "comment": "feat: react-dialog stable release"
+ }
+ ],
+ "none": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "324fe638ab10e48e83dc379054c7c6f3ea634c51",
+ "comment": "chore: add a bundle size fixture (Button, Provider & theme)"
+ },
+ {
+ "author": "email not defined",
+ "package": "@fluentui/react-dialog",
+ "commit": "42acccd4445b42c806f957de00e5f2567589279f",
+ "comment": "chore: updates stories and tests"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "d59683655d4d2a3775df4a2b41a09504cddd72ad",
+ "comment": "chore: Add browser e2e tests"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-portal",
+ "commit": "90e00c3534b8f263446f995ac040de135032797f",
+ "comment": "chore: Update docs and prep for addition to react-components package"
+ },
+ {
+ "author": "chassunc@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "41c30da2fdb58551d5ec3ce2450ccab5d2d49969",
+ "comment": "chore: update api"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 22:24:33 GMT",
+ "tag": "@fluentui/react-components_v9.4.0",
+ "version": "9.4.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "3b48ff5d92433635997aa69a59b138ec273172ea",
+ "comment": "chore: user defined tabIndex should prevail aria-button defined"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "3bce1e54d85b7bd4255aba62b2b0afa020097d4e",
+ "comment": "fix: Make AvatarGroupPopover's focus indicator the same for all layouts."
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "0885025f43076ebdf3a395cfb6ae65b3304cc5b2",
+ "comment": "fix: CounterBadge now always renders its children if provided"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "d8219051250909d31767845375b6e1ed6a053856",
+ "comment": "fix: Checkbox's label shouldn't have a pointer cursor when disabled"
+ },
+ {
+ "author": "makotom@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "e44263f522e3e690c49ac69e5eef8e522e6e0a4a",
+ "comment": "fix: Making the hidden input only cover the indicator and not also the label."
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "9b4a6b41db93754a43b8057a1d1881ecc7bd5802",
+ "comment": "feat: exports DialogContent as unstable"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-menu",
+ "commit": "b0b7f99bbbb05b0bd136432983a74fea252c7163",
+ "comment": "fix: Menu triggers no longer take focus when they are mounted"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-persona",
+ "commit": "86b3133d97c177cac545b253deb11374ee829574",
+ "comment": "docs: Add migration guide."
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-popover",
+ "commit": "bb8f6add9449dcb9557b6b5d4485ec57e7179f32",
+ "comment": "fix: update popover role to be note when it does not trap focus"
+ },
+ {
+ "author": "humberto_makoto@hotmail.com",
+ "package": "@fluentui/react-radio",
+ "commit": "fcb2ee2d270e6f584c6dbbd45f39a50c994c38be",
+ "comment": "fix: Making the hidden input only cover the indicator and not also the label."
+ },
+ {
+ "author": "makotom@microsoft.com",
+ "package": "@fluentui/react-switch",
+ "commit": "e44263f522e3e690c49ac69e5eef8e522e6e0a4a",
+ "comment": "fix: Making the hidden input only cover the indicator and not also the label."
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-switch",
+ "commit": "6a60b17a2e1ef2709a76c5b209d3b579e437feba",
+ "comment": "fix: Switch's label shouldn't have a pointer cursor when disabled"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "5129090c2dedbaf91b8441898788413992c556e3",
+ "comment": "fix: focus outline selectors are data attributes"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-textarea",
+ "commit": "316aa1e8df88bd9ec563d32222565dc48bc9fa29",
+ "comment": "chore: Deprecating filled with shadow appearance variant."
+ }
+ ],
+ "minor": [
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "9357de4af136dfb5e5ed37b68318024235aa4ba3",
+ "comment": "feat: Implement avatar context for slot overrides"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "1dcb695eb7e57a1128156049e08729206cc790ae",
+ "comment": "feat: Avatar's aria label includes 'active' or 'inactive' when using the active prop"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "2e8d044a4ce2c1095f13e08716c3ba13069ebf0d",
+ "comment": "feat: Moving Persona to unstable."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-input",
+ "commit": "316aa1e8df88bd9ec563d32222565dc48bc9fa29",
+ "comment": "chore: Deprecating filled with shadow appearance variant."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-persona",
+ "commit": "2e8d044a4ce2c1095f13e08716c3ba13069ebf0d",
+ "comment": "feat: Publishing package."
+ }
+ ],
+ "none": [
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "1333dab7a897e846eb70a493339cd13d1a095cb2",
+ "comment": "chore: Migrate react-avatar to use new build"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "9f774b95fbc119b55838315e2515e93b4ba62445",
+ "comment": "refactor: normalize relative import for unstable package.json"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-menu",
+ "commit": "f91303a8d285fd52e29c7bdfcc8cc29c3951db48",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "fa59098280d8187ce9a62a568525694a56782e45",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-popover",
+ "commit": "53f71701af6d88abf66d0cb0a73543f97bd4da51",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-portal-compat",
+ "commit": "5129090c2dedbaf91b8441898788413992c556e3",
+ "comment": "chore: Update tests for focus outline selectors"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "cd88ecf2e2407c308c8364b9167440b9bac171f3",
+ "comment": "chore: Migrate react-table to use new build"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "48d8c5c16b5367a3dfd295391512984051bbe727",
+ "comment": "chore: update package scaffold"
+ }
+ ],
+ "prerelease": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "da8a1d4d97efdb6d95818b605136415d9428e811",
+ "comment": "feat: removes DialogSurface native dialog support "
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-field",
+ "commit": "9c2ca0da077238fa1d2dc9475eeacacde06f79d7",
+ "comment": "fix: Remove SwitchField's labelPosition prop, as it has no effect"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "0bece748c51ef324f23ddce3e83f0f796bfced5f",
+ "comment": "feat: `noNativeElements` renders a flex layout"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "9357de4af136dfb5e5ed37b68318024235aa4ba3",
+ "comment": "feat: Use AvatarContext to override avatar size"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 23 Sep 2022 10:32:29 GMT",
+ "tag": "@fluentui/react-components_v9.3.2",
+ "version": "9.3.2",
+ "comments": {
+ "none": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "ce5f1ec6a0c0f766679ea708c40538fc2d56c6d9",
+ "comment": "chore: restructure folder organization"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517",
+ "comment": "chore: move spinbutton a11y spec to Concepts/Developer/Accessibility"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-spinbutton",
+ "commit": "483f160617f1037e672fe74b8e52abfee9378517",
+ "comment": "chore: move spinbutton a11y spec to Concepts/Developer/Accessibility"
+ }
+ ],
+ "prerelease": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "4dd18085b968e10d512c179705d31148e28148b4",
+ "comment": "feat: implements DialogContent as a swap of DialogBody"
+ }
+ ],
+ "patch": [
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-menu",
+ "commit": "f6202c4bb7ca9f352e7b4bc376242849648dcfd6",
+ "comment": "fix: Make Menu openOnHover prop work again"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 20:55:42 GMT",
+ "tag": "@fluentui/react-components_v9.3.1",
+ "version": "9.3.1",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "30d0ecb1a37bd941f01be0bc4a673374c422752b",
+ "comment": "feat: Adds `visible` prop to `TableCellActions`"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "cd9c220e8ca2c6ab0bc4b598801ce38eee21688f",
+ "comment": "fix: `TableCellActions` displays correctly inside `TableHeaderCell`"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "9617a5a46ef4c5e310a066a5374ff2ed61db3c66",
+ "comment": "bump react-conformance"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "79d1b0e32631bf916a52834e3731de464aa4898c",
+ "comment": "bugfix(react-dialog): Adds color style to DialogSurface"
+ }
+ ],
+ "minor": [
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-textarea",
+ "commit": "151520d8a82767f0270793ce040c5aa6eefa64c0",
+ "comment": "feat: Adding filled with shadow appearance."
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-divider",
+ "commit": "7c868d1d8a5f0e158ebda2b42d9dba486f72053a",
+ "comment": "fix: Divider - allow props to override default values"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-menu",
+ "commit": "e8f84e8262c165e5809b4ffc18381e6398b12c4f",
+ "comment": "feat: replace keydown handlers by useARIAButtonShorthand on MenuItem"
+ }
+ ],
+ "patch": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "81de40f0df0dfa8bac4e4fb522bf830d9fe8e066",
+ "comment": "bugfix: stops propagation on Escape key"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "e23edb70bfcde6fc5f82b676a1ddcf8d5a854dbd",
+ "comment": "fix: export `tableCellActionsClassNames` from unstable"
+ }
+ ],
+ "none": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "81de40f0df0dfa8bac4e4fb522bf830d9fe8e066",
+ "comment": "Includes Tooltip Escape scenarios on e2e tests"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "cf5f5e14c86cc35ee8bfff6c6be130a36fb6d16d",
+ "comment": "chore: scaffold DialogContent component"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:48:53 GMT",
+ "tag": "@fluentui/react-components_v9.3.0",
+ "version": "9.3.0",
+ "comments": {
+ "patch": [
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "e598325b985cad3e5057f00893e0176416edd292",
+ "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "0137f992b99b3b8ec927be8f7aef751d27cd5830",
+ "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted"
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "fix: update color tokens"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-utilities",
+ "commit": "a0cfab0e5f74e3a3bfa9c269fff574295042d7f2",
+ "comment": "chore: fix no-context-default-value lint violations"
+ },
+ {
+ "author": "yuanboxue@microsoft.com",
+ "package": "@fluentui/react-utilities",
+ "commit": "8cd907f0c88ecd6d21d0f5b4ea1e60f57f9bd04f",
+ "comment": "fix: add microdata properties to allowed html properties"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-utilities",
+ "commit": "e598325b985cad3e5057f00893e0176416edd292",
+ "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-divider",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-image",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-input",
+ "commit": "c868d64e3c84449d5e3d1235a5ef49f9eb0ec487",
+ "comment": "fix: Remove box-shadow from filled appearances."
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-input",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-label",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-link",
+ "commit": "f17b8604209a099d354c212077832516dcfbbae2",
+ "comment": "fix: add type=button when rendered as a button"
+ },
+ {
+ "author": "humberto_makoto@hotmail.com",
+ "package": "@fluentui/react-link",
+ "commit": "f97dc9f0f713bdf845cdd250d3b2d2993a0a5a0d",
+ "comment": "fix: Replacing bottom border styles with text decoration underline."
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-link",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-menu",
+ "commit": "e598325b985cad3e5057f00893e0176416edd292",
+ "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-menu",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-menu",
+ "commit": "6c6fe4c8246abec30d9cd3ba2079d379c4d7acb8",
+ "comment": "bugfix: stops propagation on Escape keydown"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-menu",
+ "commit": "a0cfab0e5f74e3a3bfa9c269fff574295042d7f2",
+ "comment": "chore: fix no-context-default-value lint violations"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-popover",
+ "commit": "3b1fea37fa1f5c4abbf76919e37833f3f1010647",
+ "comment": "fix: Allow PopoverSurface to trap focus when it's focusable."
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-popover",
+ "commit": "6c6fe4c8246abec30d9cd3ba2079d379c4d7acb8",
+ "comment": "bugfix: stops propagation on Escape keydown"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-popover",
+ "commit": "0137f992b99b3b8ec927be8f7aef751d27cd5830",
+ "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-popover",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-popover",
+ "commit": "e598325b985cad3e5057f00893e0176416edd292",
+ "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks"
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-popover",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "fix: update color tokens"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-popover",
+ "commit": "a0cfab0e5f74e3a3bfa9c269fff574295042d7f2",
+ "comment": "chore: fix no-context-default-value lint violations"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-portal",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-portal-compat",
+ "commit": "f1f4ab4ac21226c8f6729ca263ca09c1ec9b76f2",
+ "comment": "fix: Portal compat should apply `focus-visible` ponyfill"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-portal-compat-context",
+ "commit": "a0cfab0e5f74e3a3bfa9c269fff574295042d7f2",
+ "comment": "chore: fix no-context-default-value lint violations"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-positioning",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-provider",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-radio",
+ "commit": "e598325b985cad3e5057f00893e0176416edd292",
+ "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-radio",
+ "commit": "a606fbedcf7d618d1a48706a5e15c26c4cd85ba6",
+ "comment": "chore: fix no-context-default-value lint violations for cxe"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-radio",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-shared-contexts",
+ "commit": "a0cfab0e5f74e3a3bfa9c269fff574295042d7f2",
+ "comment": "chore: fix no-context-default-value lint violations"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-slider",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-spinbutton",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-spinbutton",
+ "commit": "e598325b985cad3e5057f00893e0176416edd292",
+ "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-spinner",
+ "commit": "0137f992b99b3b8ec927be8f7aef751d27cd5830",
+ "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-spinner",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-spinner",
+ "commit": "7c2ccadde562224609e08d5bdd2c42b078f5bef2",
+ "comment": "(patch): Add line-height styling to Spinner"
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-spinner",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "fix: update color tokens"
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-spinner",
+ "commit": "a210c2524d1961b6b9b7cb8774bec951dbbd9db0",
+ "comment": "(chore): Remove appearance conditional from Spinner slot styling"
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-switch",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "fix: update color tokens"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-switch",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-switch",
+ "commit": "e598325b985cad3e5057f00893e0176416edd292",
+ "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-tabs",
+ "commit": "f17b8604209a099d354c212077832516dcfbbae2",
+ "comment": "fix: add type=button to root slot "
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-tabs",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "e4d50f2c501c4a8be23b24373242f650a601fdaf",
+ "comment": "fix: Remove provider classname from focus styles"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "e2b71230d03f2cf03eff3cda02484dfcb72e9c51",
+ "comment": "fix: Bumps tabster to 2.1.2 and removes deep import for KeyborgCallback"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "f1f4ab4ac21226c8f6729ca263ca09c1ec9b76f2",
+ "comment": "chore: Exports `applyFocusVisible` as internal"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-text",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-textarea",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-textarea",
+ "commit": "38bd1c146cb2e635bc181cda1b2f11b17a07c4c4",
+ "comment": "fix: Change filled appearances' normal state's token."
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-textarea",
+ "commit": "15d5c09a2ba67362ea67cc5d4d5341f66e7ec65a",
+ "comment": "fix: disabled textarea uses semantic contrast theme border color"
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "fix: update token values to fix failing color contrast"
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "5c78472d96502d05a10016d9502eceada4edfd8a",
+ "comment": "fix: update color neutral background inverted color in teams dark"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "21af8da1d98c070a682b26b7d56775d43a749b3d",
+ "comment": "fix: Update color tokens mapping"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "0137f992b99b3b8ec927be8f7aef751d27cd5830",
+ "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "817814abbc2b4acbf63eb5e6dfb75863aa033184",
+ "comment": "fix: Change colorBrandForeground2 mapping in teamsDark theme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "018509c3926449f70b357b80952f40ff2aa9071f",
+ "comment": "fix: Swap Background1 and Foreground1 in HC color palette"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "a606fbedcf7d618d1a48706a5e15c26c4cd85ba6",
+ "comment": "chore: fix no-context-default-value lint violations for cxe"
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "7b9f91b1fc1c2281bff1037b860b92dfbf99dfb1",
+ "comment": "fix(Refactor accordion expandIcon styling)"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "f17b8604209a099d354c212077832516dcfbbae2",
+ "comment": "fix: add type=button to button slot"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-aria",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "docs(react-aria): re-generate api.md"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "de08c96226ec5d425f705c22c5d94dbac5811eb6",
+ "comment": "chore(react-aria): improve internal typings"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "0547583ebcebe746110e5ef8d0599b0972b1f4c6",
+ "comment": "feat: upgrade typings on useARIAButtonProps to be more specific"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "5baea110a12d6c161c36b19b5b6768eeaa8370de",
+ "comment": "chore: Change content to render as ul and list item to render as li."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "abc61d6bf47190f96b5e32ed3b7df4b77614caaf",
+ "comment": "chore: Cleaning up use of AvatarGroup context."
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "e598325b985cad3e5057f00893e0176416edd292",
+ "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "4de0899dd07982aabdc611b1837bf9acfca44efc",
+ "comment": "fix: Making PopoverSurface focusable, moving Overflow aria-label to PopoverSurface, and moving content styles to PopoverSurface."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "a66448342c1f3e6a6911404486aef904529988c4",
+ "comment": "fix: Set aria-hidden to AvatarGroupItem's label."
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "0137f992b99b3b8ec927be8f7aef751d27cd5830",
+ "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "1542e766427a7f0b1ee122d507b7f50ebcb51a3c",
+ "comment": "chore: Update tests and add e2e tests."
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "fix: update color tokens"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "a606fbedcf7d618d1a48706a5e15c26c4cd85ba6",
+ "comment": "chore: fix no-context-default-value lint violations for cxe"
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "fix: update color tokens"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "0137f992b99b3b8ec927be8f7aef751d27cd5830",
+ "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "humberto_makoto@hotmail.com",
+ "package": "@fluentui/react-button",
+ "commit": "17b9063802b28bf7f4b1c4d439623819ad8940fa",
+ "comment": "fix: Adding 'aria-expanded=false' to collapsed MenuButtons."
+ },
+ {
+ "author": "makotom@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "6bc03a4e9ee815da750466f9dc2d25df1373f3e9",
+ "comment": "chore: Remove max-width style from Button components."
+ },
+ {
+ "author": "humberto_makoto@hotmail.com",
+ "package": "@fluentui/react-button",
+ "commit": "ef3ea2307fd97c893eded2164d96f1f56e378fd3",
+ "comment": "chore: Cleaning up tokens in Button components so they better adhere to the design spec."
+ },
+ {
+ "author": "humberto_makoto@hotmail.com",
+ "package": "@fluentui/react-button",
+ "commit": "28f55597050bcdd293e57e7d1fdc87802150c59d",
+ "comment": "fix: Wrapping long text in Button components."
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "e598325b985cad3e5057f00893e0176416edd292",
+ "comment": "refactor: Replace useMergedEventCallbacks utility with mergeCallbacks"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "fix: update color tokens"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "9253171aac6e08d6830361d125d657f21ddfc90a",
+ "comment": "feat: Export `TableCellActions` and `TablePrimaryCell` as unstable"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "59479f0b1751fddf0cc8229f4ad6f2607584584a",
+ "comment": "fix: use caret for @fluentui/react-spinbutton"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "b51ebaec4a0681dc71e8f67a28a9d28b051bcba8",
+ "comment": "chore: Stop exporting TablePrimaryCell and associated utilities and types"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "a7903208206d2a43394ce30b34a601c5eda9303b",
+ "comment": "feat: Adding missing AvatarGroup exports."
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "e79be7955cfeef07aa3377bf123b88800e4af1cc",
+ "comment": "feat: Remove TableCellPrimaryLayout, adds `appearance` prop to TableCellLayout for primary layout"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "059b48cc66cbeb9c545b60ef842407895cd4e505",
+ "comment": "feat: Export table cell layout components from unstable"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "b9b2c4cf2b69e8d5e4b0a8a01fcc8458b1c8efc6",
+ "comment": "feat: Export `TableSelectionCell` from unstable"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "9b0a3e873d32876d844bb193bbb984af0ab3f423",
+ "comment": "fix: export ToolbarButton"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "cd8f5a11fd89c77582950fe714fece2bdf9c08c0",
+ "comment": "feat: Add *Field components to @fluentui/react-components/unstable"
+ },
+ {
+ "author": "gcox@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "4c31b27421360e80d8435235092a634a67b0418a",
+ "comment": "Changed from upgrade to migrate terminology"
+ },
+ {
+ "author": "ololubek@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "76ec1f86ae20b24c103d6fcdf1ddd47f43289e49",
+ "comment": "Move Icon Table to new page"
+ }
+ ],
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-tooltip",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-utilities",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-utilities",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "docs(react-utilities): re-generate api.md"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "5cd0e8dbc07b0a71ab0a48813cdcbbbd37a222e1",
+ "comment": "chore: remove localShorthands in favor of griffel shorthands"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-divider",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-image",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-input",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-label",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-link",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-menu",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-menu",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-menu",
+ "commit": "a105236ca0a6eac1035fee7bfca274972fb89da1",
+ "comment": "chore(react-menu): stop spreading props on state"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "docs: re-generate api.md files"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-popover",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-popover",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-portal",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-portal-compat",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-portal-compat-context",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-positioning",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "docs: re-generate api.md files"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-positioning",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-provider",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-radio",
+ "commit": "22de26fac5b939224884052b0bf86cecc5f22fee",
+ "comment": "docs: Clarify the documentation of RadioGroup's required prop"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-radio",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-select",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-shared-contexts",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-shared-contexts",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "docs(react-shared-contexts): re-generate api.md"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-slider",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "jennz@microsoft.com",
+ "package": "@fluentui/react-spinbutton",
+ "commit": "7f7f925f576751f77c612bfdd6557232451f9990",
+ "comment": "docs: add accessibility documentation for SpinButton"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-spinbutton",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-spinner",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-switch",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-table",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "9e604a18ef914090301b4d0cd0b602f646f5719c",
+ "comment": "chore: Add preview warning for Table component"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-tabs",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "docs: re-generate api.md files"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-tabster",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-text",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-textarea",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "e95ba37f3a8155930542712bfc63055c306cce56",
+ "comment": "docs: Update readme"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "faf23288345ea43d3cfa8efbe2bd29917271128f",
+ "comment": "chore: Refactor global shared color tokens"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-theme-sass",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme-sass",
+ "commit": "9c97dc2efbfe7d22b3686cb765fd93916b303642",
+ "comment": "react-theme-sass dev-depends on react-theme"
+ },
+ {
+ "author": "chassunc@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "bee2c5b4e2ced66d3897fe2ca7d255f17f5f865b",
+ "comment": "feat: add toolbar controlled state example for toggle buttons"
+ },
+ {
+ "author": "chassunc@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "92a2649587483cef44c5ce186f05b0254e015e02",
+ "comment": "chore: add e2e tests for toolbar"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/babel-preset-global-context",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/babel-preset-global-context",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/global-context",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/global-context",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/keyboard-keys",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/priority-overflow",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "chore(priority-flow): re-generate api.md"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-accordion",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "rohitpag@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "045c66e2a2142e3d2380da05a9aa60b54de6888c",
+ "comment": "Adding appearance prop to the alert component"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "bf151e71e0ffa5de5c44cc722e629cdeb7abdbb2",
+ "comment": "chore: re-organize useARIAButton into its own folder"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-aria",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "c5249ee380c5e17651b5122a716fcf5e4c477ad1",
+ "comment": "docs: Updating AvatarGroup's migration guide."
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "ab54d44126b26316d662551bbdd93bf5b044b022",
+ "comment": "docs: Update spec to match implementation, add best practices, and update README."
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "docs: re-generate api.md files"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-badge",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "makotom@microsoft.com",
+ "package": "@fluentui/react-button",
+ "commit": "e176621e71d595c6d17655c108db0b73eb9ec188",
+ "comment": "chore: Removing CompoundButtonAsToggleButton story since it was using non-exported functions."
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-checkbox",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "84017b6464e13c46a7ae8c61875ead2ff4b6965b",
+ "comment": "bugfix: update useMergedEventCallbacks to mergeCallbacks"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-components",
+ "commit": "b02e8f3ab48daf6b9db7f7efebbf026c6cbed740",
+ "comment": "chore: updates react-components export of react-dialog"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-context-selector",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-context-selector",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "docs(react-context-selector): re-generate api.md"
+ }
+ ],
+ "minor": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-utilities",
+ "commit": "6fd8556690d3716c3f37b88b366dd51502d11d76",
+ "comment": "feat: add dialog properties to getNativeElementProps"
+ },
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-utilities",
+ "commit": "c8f9d1ef1983bffe9917da81b097f503f587faa9",
+ "comment": "fix: Replace deprecated ReactNodeArray for React 17 support."
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-utilities",
+ "commit": "a85b5f8ff499fddcb1edcee28c7b0dede92ab674",
+ "comment": "feat(react-utilities): adds isResolvedShorthand guard method"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-input",
+ "commit": "2f46a7abf0dd20cf3b07b4527d177ae1fff55b77",
+ "comment": "feat: Adding optional shadow to filled appearances."
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-menu",
+ "commit": "0547583ebcebe746110e5ef8d0599b0972b1f4c6",
+ "comment": "chore(react-menu): Updates trigger to use useARIAButton"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-popover",
+ "commit": "0547583ebcebe746110e5ef8d0599b0972b1f4c6",
+ "comment": "chore(react-popover): Updates trigger to use useARIAButton"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-positioning",
+ "commit": "4ba03b2e704668cb253f8ad16e8995a8a44b3d22",
+ "comment": "feat: Upgrade to Floating UI v1"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-text",
+ "commit": "61557d7e48a7380b2fbf2bcc5c8faa4a3ed7d89f",
+ "comment": "feat: Add Body2"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme",
+ "commit": "61557d7e48a7380b2fbf2bcc5c8faa4a3ed7d89f",
+ "comment": "feat: Add fontWeightBold, add Body2, fix font weight for *Stronger typography"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-aria",
+ "commit": "81191d9a45e629126a416e7202af3e241cd5e0fc",
+ "comment": "feat: add helper types to assist DOM element handling"
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "66762e1ca870a21db46b72c9b0848c5b107b8e09",
+ "comment": "feat: Adding functionality to AvatarGroupOverflow and updating AvatarGroup to use AvatarGroupOverflow."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "84e2b1a8b1e8d2e9008297b6c35c76231ae3a31c",
+ "comment": "chore: Renaming AvatarGroupOverflow to AvatarGroupPopover."
+ },
+ {
+ "author": "esteban.230@hotmail.com",
+ "package": "@fluentui/react-avatar",
+ "commit": "27a3480f5361aa5d99f8978817d8395d9037e3b7",
+ "comment": "feat: Add pie layout implementation."
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-components",
+ "commit": "9bbe648f7b7373fad7fcf39cecfe76d037a3e7bf",
+ "comment": "feat: re-export GriffelRenderer type"
+ }
+ ],
+ "prerelease": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "0547583ebcebe746110e5ef8d0599b0972b1f4c6",
+ "comment": "chore(react-dialog): Updates trigger to use useARIAButtonProps"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "827dffa4e4a164682c29b157b572ceb63c5dd6a9",
+ "comment": "chore(react-dialog): removes react-button max-width overrides"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "7b46e969e352bd636f7094ac5e29177fb7e8bff2",
+ "comment": "feat: add scroll lock feature to Dialog"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "b02e8f3ab48daf6b9db7f7efebbf026c6cbed740",
+ "comment": "feat(react-dialog): moves backdrop slot from Dialog to DialogSurface"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "9c10bc432b8fc8df6d51975c580a19603a10fd1e",
+ "comment": "feat(react-dialog): adds proper style to make DialogBody responsive"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "c9a58334a7abebf949f59d2c0a4bb1271074d808",
+ "comment": "chore: renames overlay slot to backdrop"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "6c6fe4c8246abec30d9cd3ba2079d379c4d7acb8",
+ "comment": "bugfix: stops propagation on Escape key"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "2630091d8093879d26c38dc6a4c585e886cff057",
+ "comment": "feat: Adds padding-right style to avoid jumping on scroll lock"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "94ab82dd00db0bf177908e7ccc60125efaa4e22d",
+ "comment": "chore(react-dialog): removes document listener to Escape keydown"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "0865ee92c7cab7273aafd21b1b3dff9418c0d479",
+ "comment": "feat(react-dialog): replace `closeButton` to a more generic `action` slot"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "fd88d8b10fe32eb635c949aa28653c3376f64c3d",
+ "comment": "feat(react-dialog): 1st rule of ARIA for Dialog"
+ },
+ {
+ "author": "behowell@microsoft.com",
+ "package": "@fluentui/react-field",
+ "commit": "cd8f5a11fd89c77582950fe714fece2bdf9c08c0",
+ "comment": "Initial release"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "a0cfab0e5f74e3a3bfa9c269fff574295042d7f2",
+ "comment": "chore: fix no-context-default-value lint violations"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-overflow",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-select",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "851d0fd82f7d802d048be89dc363271f7cf1720a",
+ "comment": "implement `useTable` state hook"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "e79be7955cfeef07aa3377bf123b88800e4af1cc",
+ "comment": "feat: Remove TableCellPrimaryLayout, adds `appearance` prop to TableCellLayout for primary layout"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "b51ebaec4a0681dc71e8f67a28a9d28b051bcba8",
+ "comment": "BREAKING: TableCell layouts are handled by layout components"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "059b48cc66cbeb9c545b60ef842407895cd4e505",
+ "comment": "feat: Implement table cell layout components"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "8f420a1c55f283156b758bda1e7ef0591ec57a78",
+ "comment": "feat: Remove inferred row state and add `rowEnhancer` option"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "cf7b0b6c6941c1b798a57ead0bc67b98e4e0ddbb",
+ "comment": "feat: Implement unstable navigation modes"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-table",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "02a6a76a3350adfb4fd95cdfc178864801c8e2bf",
+ "comment": "refactor(useTable): selection manager to avoid calling multiple hooks"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "b9b2c4cf2b69e8d5e4b0a8a01fcc8458b1c8efc6",
+ "comment": "feat: Implement `TableSelectionCell`"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "f5398157ebbea5c748d8d7336f18b378a8bdec16",
+ "comment": "refactor: Stop using context selector for Table primitives"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "573289549f9712357c5561057fc24e97f62a6c63",
+ "comment": "feat: autocontrolled `useTable` hook"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-table",
+ "commit": "9253171aac6e08d6830361d125d657f21ddfc90a",
+ "comment": "feat: Implement `TableCellActions` and `TablePrimaryCell`"
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-theme-sass",
+ "commit": "1d0a72865a151962362aa3e5054ac9bf8178f09c",
+ "comment": "feat: add new color tokens"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme-sass",
+ "commit": "61557d7e48a7380b2fbf2bcc5c8faa4a3ed7d89f",
+ "comment": "feat: Add fontWeightBold"
+ },
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-theme-sass",
+ "commit": "0137f992b99b3b8ec927be8f7aef751d27cd5830",
+ "comment": "fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted"
+ },
+ {
+ "author": "seanmonahan@microsoft.com",
+ "package": "@fluentui/react-theme-sass",
+ "commit": "5c78472d96502d05a10016d9502eceada4edfd8a",
+ "comment": "feat: add color neutral foreground inverted 2 token"
+ },
+ {
+ "author": "lingfangao@hotmail.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "a0cfab0e5f74e3a3bfa9c269fff574295042d7f2",
+ "comment": "chore: fix no-context-default-value lint violations"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-toolbar",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-alert",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-card",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "8484a3ec4abb520d716d199ea79a3cde57fa1da2",
+ "comment": "fix: typing moves active option in Dropdown"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "286479fb4e813506a9560c279215675e8b097500",
+ "comment": "fix: Combobox and Dropdown hover/active border colors and padding styles"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "58026c94a40e8589645d3f6a6b0171a21ba3f879",
+ "comment": "fix: Combobox and Dropdown only show option focus outline when navigating by keyboard"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "83b033de0fe819bc30cc437ec7c4a83dd4c6997e",
+ "comment": "fix: set popup Listbox width to trigger width"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "a5b36f689a2eed64ffca5f43e48e213ccba1d925",
+ "comment": "fix: open/close combobox on icon click"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "7d19a95495b04963b9f88b45da993e590df06b6a",
+ "comment": "feat: Allow typing by default, add allowFreeform"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "cde2f43f6bf0522ddf189dbf3b2905ec1f2f7f88",
+ "comment": "feat: make listbox slot nullable"
+ },
+ {
+ "author": "sarah.higley@microsoft.com",
+ "package": "@fluentui/react-combobox",
+ "commit": "4f921f9810a55ae8d2077de4013fad1516001c0c",
+ "comment": "fix: react-combobox change onSelect to onOptionSelect to avoid conflicts with native onSelect"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:34 GMT",
"tag": "@fluentui/react-components_v9.2.0",
diff --git a/packages/react-components/react-components/CHANGELOG.md b/packages/react-components/react-components/CHANGELOG.md
index 5c36d5d7602aba..1529508c34beab 100644
--- a/packages/react-components/react-components/CHANGELOG.md
+++ b/packages/react-components/react-components/CHANGELOG.md
@@ -1,9 +1,714 @@
# Change Log - @fluentui/react-components
-This log was last generated on Wed, 03 Aug 2022 16:03:34 GMT and should not be manually modified.
+This log was last generated on Wed, 26 Oct 2022 18:05:51 GMT and should not be manually modified.
+## [9.6.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.6.1)
+
+Wed, 26 Oct 2022 18:05:51 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.6.0..@fluentui/react-components_v9.6.1)
+
+### Patches
+
+- `@fluentui/react-components`
+ - feat: export react-table logic hooks ([PR #25386](https://github.com/microsoft/fluentui/pull/25386) by bernardo.sunderhus@gmail.com)
+
+## [9.6.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.6.0)
+
+Tue, 25 Oct 2022 22:09:49 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.5.3..@fluentui/react-components_v9.6.0)
+
+### Minor changes
+
+- `@fluentui/react-components`
+ - fix: Change react-persona to pinned version. ([PR #25367](https://github.com/microsoft/fluentui/pull/25367) by esteban.230@hotmail.com)
+
+### Patches
+
+- `@fluentui/react-components`
+ - fix: Export PopoverTriggerChildProps ([PR #25159](https://github.com/microsoft/fluentui/pull/25159) by lingfangao@hotmail.com)
+
+## [9.5.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.5.3)
+
+Tue, 25 Oct 2022 00:35:26 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.5.2..@fluentui/react-components_v9.5.3)
+
+### Patches
+
+- `@fluentui/react-avatar`
+ - fix: Add undefined option to overflowItems in partitionAvatarGroupItems. ([PR #25310](https://github.com/microsoft/fluentui/pull/25310) by esteban.230@hotmail.com)
+- `@fluentui/react-badge`
+ - chore: Migrate to new package structure. ([PR #25335](https://github.com/microsoft/fluentui/pull/25335) by tristan.watanabe@gmail.com)
+- `@fluentui/react-button`
+ - chore: Migrate to new package structure. ([PR #25336](https://github.com/microsoft/fluentui/pull/25336) by tristan.watanabe@gmail.com)
+- `@fluentui/react-checkbox`
+ - chore: Migrate to new package structure. ([PR #25337](https://github.com/microsoft/fluentui/pull/25337) by tristan.watanabe@gmail.com)
+- `@fluentui/react-components`
+ - feat: add react-progress to react-components/unstable ([PR #25226](https://github.com/microsoft/fluentui/pull/25226) by ololubek@microsoft.com)
+ - chore: Export missing partitionAvatarGroupItems in unstable. ([PR #25310](https://github.com/microsoft/fluentui/pull/25310) by esteban.230@hotmail.com)
+ - chore: Updating react-persona's version. ([PR #25357](https://github.com/microsoft/fluentui/pull/25357) by esteban.230@hotmail.com)
+- `@fluentui/react-dialog`
+ - bugfix: adds cursor pointer style to dialog close button ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-image`
+ - chore: Migrate to new package structure. ([PR #25230](https://github.com/microsoft/fluentui/pull/25230) by tristan.watanabe@gmail.com)
+- `@fluentui/react-spinbutton`
+ - feat: updates internal SpinButton padding ([PR #25286](https://github.com/microsoft/fluentui/pull/25286) by seanmonahan@microsoft.com)
+- `@fluentui/react-text`
+ - chore: Migrate to new package structure. ([PR #25231](https://github.com/microsoft/fluentui/pull/25231) by tristan.watanabe@gmail.com)
+
+### Changes
+
+- `@fluentui/react-components`
+ - Add uncomplete Input scenario ([PR #21651](https://github.com/microsoft/fluentui/pull/21651) by adam.samec@gmail.com)
+- `@fluentui/react-field`
+ - feat: Add support for validationState to ProgressField ([PR #25253](https://github.com/microsoft/fluentui/pull/25253) by behowell@microsoft.com)
+- `@fluentui/react-persona`
+ - chore: Change version back to beta. ([PR #25357](https://github.com/microsoft/fluentui/pull/25357) by esteban.230@hotmail.com)
+- `@fluentui/react-progress`
+ - feat: Add validationState to Progress, to make the bar red or green ([PR #25253](https://github.com/microsoft/fluentui/pull/25253) by behowell@microsoft.com)
+ - feat: add react-progress to react-components/unstable ([PR #25226](https://github.com/microsoft/fluentui/pull/25226) by ololubek@microsoft.com)
+
+## [9.5.2](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.5.2)
+
+Thu, 20 Oct 2022 08:39:25 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.5.1..@fluentui/react-components_v9.5.2)
+
+### Minor changes
+
+- `@fluentui/react-tabster`
+ - feat: Bump tabster to 3.0.4 ([PR #25294](https://github.com/microsoft/fluentui/pull/25294) by lingfangao@hotmail.com)
+
+### Patches
+
+- `@fluentui/react-badge`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-button`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - fix: Fixing the styles of Buttons rendered as anchor tags. ([PR #25250](https://github.com/microsoft/fluentui/pull/25250) by makotom@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-checkbox`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-components`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-context-selector`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-dialog`
+ - chore: updates disallowed change types ([PR #25214](https://github.com/microsoft/fluentui/pull/25214) by bernardo.sunderhus@gmail.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-divider`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-image`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-input`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - feat: Add red border when aria-invalid is set ([PR #25252](https://github.com/microsoft/fluentui/pull/25252) by behowell@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-label`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-link`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-menu`
+ - fix: Menu trigger should be focused when dismissed by menuitem click ([PR #25289](https://github.com/microsoft/fluentui/pull/25289) by lingfangao@hotmail.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Migrate to new package structure ([PR #25015](https://github.com/microsoft/fluentui/pull/25015) by tristan.watanabe@gmail.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-persona`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-popover`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-portal`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-portal-compat`
+ - chore: Bump react peer dependency to react 18. ([PR #25278](https://github.com/microsoft/fluentui/pull/25278) by mgodbolt@microsoft.com)
+- `@fluentui/react-portal-compat-context`
+ - chore: Bump react peer dependency to react 18. ([PR #25278](https://github.com/microsoft/fluentui/pull/25278) by mgodbolt@microsoft.com)
+- `@fluentui/react-positioning`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-provider`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-radio`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-shared-contexts`
+ - chore: Bump react peer dependency to react 18. ([PR #25278](https://github.com/microsoft/fluentui/pull/25278) by mgodbolt@microsoft.com)
+- `@fluentui/react-slider`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Migrate to new package structure. ([PR #25240](https://github.com/microsoft/fluentui/pull/25240) by tristan.watanabe@gmail.com)
+- `@fluentui/react-spinbutton`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - feat: Add red border when aria-invalid is set ([PR #25252](https://github.com/microsoft/fluentui/pull/25252) by behowell@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-spinner`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-switch`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-tabs`
+ - chore: Migrate to new package structure. ([PR #25241](https://github.com/microsoft/fluentui/pull/25241) by tristan.watanabe@gmail.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-tabster`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - feat: Disabling default browser outline should be an option ([PR #25202](https://github.com/microsoft/fluentui/pull/25202) by lingfangao@hotmail.com)
+- `@fluentui/react-text`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-textarea`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - feat: Add red border when aria-invalid is set ([PR #25252](https://github.com/microsoft/fluentui/pull/25252) by behowell@microsoft.com)
+- `@fluentui/react-theme`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-tooltip`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-utilities`
+ - chore: Bump react peer dependency to react 18. ([PR #25278](https://github.com/microsoft/fluentui/pull/25278) by mgodbolt@microsoft.com)
+- `@fluentui/react-accordion`
+ - chore: Migrate to new package structure. ([PR #25196](https://github.com/microsoft/fluentui/pull/25196) by tristan.watanabe@gmail.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-aria`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-avatar`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+
+### Changes
+
+- `@fluentui/react-card`
+ - chore: Migrate to new package structure. ([PR #25229](https://github.com/microsoft/fluentui/pull/25229) by tristan.watanabe@gmail.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-combobox`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - feat: Add red border when aria-invalid is set ([PR #25252](https://github.com/microsoft/fluentui/pull/25252) by behowell@microsoft.com)
+- `@fluentui/react-conformance-griffel`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump react peer dependency to react 18. ([PR #25278](https://github.com/microsoft/fluentui/pull/25278) by mgodbolt@microsoft.com)
+- `@fluentui/react-field`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-overflow`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-progress`
+ - feat: Add shape prop to Progress ([PR #25219](https://github.com/microsoft/fluentui/pull/25219) by ololubek@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-select`
+ - feat: Add red border when aria-invalid is set ([PR #25252](https://github.com/microsoft/fluentui/pull/25252) by behowell@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- `@fluentui/react-table`
+ - fix: Row and header interactive styles are separate ([PR #25201](https://github.com/microsoft/fluentui/pull/25201) by lingfangao@hotmail.com)
+ - feat(TableSelectionCell): Use Radio component, adds subtle and hidden ([PR #25202](https://github.com/microsoft/fluentui/pull/25202) by lingfangao@hotmail.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - feat: Add `appearance` prop to `TableRow` ([PR #25192](https://github.com/microsoft/fluentui/pull/25192) by lingfangao@hotmail.com)
+- `@fluentui/react-toolbar`
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/global-context`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- `@fluentui/react-alert`
+ - chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+ - chore: Migrate to new package structure. ([PR #25197](https://github.com/microsoft/fluentui/pull/25197) by tristan.watanabe@gmail.com)
+ - chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+
+## [9.5.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.5.1)
+
+Thu, 13 Oct 2022 12:56:29 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.5.0..@fluentui/react-components_v9.5.1)
+
+### Minor changes
+
+- `@fluentui/react-menu`
+ - feat: adds disableButtonEnhancement property on MenuTrigger ([PR #25112](https://github.com/microsoft/fluentui/pull/25112) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-popover`
+ - feat: adds disableButtonEnhancement property on PopoverTrigger ([PR #25112](https://github.com/microsoft/fluentui/pull/25112) by bernardo.sunderhus@gmail.com)
+
+### Changes
+
+- `@fluentui/react-dialog`
+ - feat: adds disableButtonEnhancement property on DialogTrigger ([PR #25112](https://github.com/microsoft/fluentui/pull/25112) by bernardo.sunderhus@gmail.com)
+
+## [9.5.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.5.0)
+
+Thu, 13 Oct 2022 11:02:40 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.4.0..@fluentui/react-components_v9.5.0)
+
+### Minor changes
+
+- `@fluentui/react-components`
+ - feat: Re-export Portal component and related bits ([PR #25047](https://github.com/microsoft/fluentui/pull/25047) by mgodbolt@microsoft.com)
+ - feat: react-dialog stable release ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by bernardo.sunderhus@gmail.com)
+
+### Patches
+
+- `@fluentui/react-accordion`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-avatar`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-badge`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-button`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+ - feat: Adding subtle transition between states on Button components. ([PR #25106](https://github.com/microsoft/fluentui/pull/25106) by makotom@microsoft.com)
+- `@fluentui/react-checkbox`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-components`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+ - docs: update Icon docs with examples ([PR #24768](https://github.com/microsoft/fluentui/pull/24768) by ololubek@microsoft.com)
+- `@fluentui/react-dialog`
+ - feat: react-dialog stable release ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-divider`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-image`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-input`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-label`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-link`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-menu`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+ - chore: improves MenuTrigger types ([PR #25044](https://github.com/microsoft/fluentui/pull/25044) by bernardo.sunderhus@gmail.com)
+ - fix: Menu trigger should be focused when menu is closed with keyboard ([PR #25165](https://github.com/microsoft/fluentui/pull/25165) by lingfangao@hotmail.com)
+- `@fluentui/react-persona`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+ - chore: Add unit and conformance tests. ([PR #25007](https://github.com/microsoft/fluentui/pull/25007) by esteban.230@hotmail.com)
+ - chore: Adding bundle-size command for bundle-size fixtures. ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by esteban.230@hotmail.com)
+- `@fluentui/react-popover`
+ - chore: improves PopoverTrigger types ([PR #25044](https://github.com/microsoft/fluentui/pull/25044) by bernardo.sunderhus@gmail.com)
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-portal`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-positioning`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+ - fix `usePositioning` to reset `overrideTargetRef` when target in hook options is undefined ([PR #25135](https://github.com/microsoft/fluentui/pull/25135) by yuanboxue@microsoft.com)
+- `@fluentui/react-provider`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-radio`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-slider`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-spinbutton`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-spinner`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-switch`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-tabs`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-tabster`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-text`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-textarea`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-tooltip`
+ - chore: improves Tooltip types ([PR #25044](https://github.com/microsoft/fluentui/pull/25044) by bernardo.sunderhus@gmail.com)
+ - fix: The Tooltip should not hide if it gets keyboard focus ([PR #25138](https://github.com/microsoft/fluentui/pull/25138) by behowell@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-utilities`
+ - chore: restricts trigger API types ([PR #25044](https://github.com/microsoft/fluentui/pull/25044) by bernardo.sunderhus@gmail.com)
+
+### Changes
+
+- `@fluentui/priority-overflow`
+ - feat: Adds API to register overflow menus for better available space calculation ([PR #25091](https://github.com/microsoft/fluentui/pull/25091) by lingfangao@hotmail.com)
+ - new overflow items should only be enqueued while observing ([PR #25122](https://github.com/microsoft/fluentui/pull/25122) by lingfangao@hotmail.com)
+- `@fluentui/react-alert`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-card`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-combobox`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+ - fix: add ScrollIntoView hook for Listbox options ([PR #25080](https://github.com/microsoft/fluentui/pull/25080) by sarah.higley@microsoft.com)
+ - feat: export contexts from react-combobox ([PR #25099](https://github.com/microsoft/fluentui/pull/25099) by sarah.higley@microsoft.com)
+ - fix: Dropdown arrow icon layout when no placeholder or value is present ([PR #25049](https://github.com/microsoft/fluentui/pull/25049) by sarah.higley@microsoft.com)
+- `@fluentui/react-conformance-griffel`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-dialog`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+ - feat: focus on surface if no focusable element is available ([PR #25173](https://github.com/microsoft/fluentui/pull/25173) by bernardo.sunderhus@gmail.com)
+ - chore: improves DialogTrigger types ([PR #25044](https://github.com/microsoft/fluentui/pull/25044) by bernardo.sunderhus@gmail.com)
+ - chore: cleanups in types ([PR #25070](https://github.com/microsoft/fluentui/pull/25070) by bernardo.sunderhus@gmail.com)
+ - fix: aria-* properties should be reassignable ([PR #25092](https://github.com/microsoft/fluentui/pull/25092) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-field`
+ - Add ProgressField to @fluentui/react-field ([PR #25103](https://github.com/microsoft/fluentui/pull/25103) by ololubek@microsoft.com)
+ - fix: CheckboxField to set a generated ID on the input, to match the label's htmlFor ([PR #25079](https://github.com/microsoft/fluentui/pull/25079) by behowell@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+ - fix: Field should have block layout, not inline ([PR #25126](https://github.com/microsoft/fluentui/pull/25126) by behowell@microsoft.com)
+- `@fluentui/react-overflow`
+ - fix: useOverflowMenu should register overflow menu ([PR #25091](https://github.com/microsoft/fluentui/pull/25091) by lingfangao@hotmail.com)
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-progress`
+ - chore: Add vr and conformance tests. ([PR #25105](https://github.com/microsoft/fluentui/pull/25105) by ololubek@microsoft.com)
+ - Add justify-self styling to Progress styles ([PR #25103](https://github.com/microsoft/fluentui/pull/25103) by ololubek@microsoft.com)
+ - Add documentation ([PR #25194](https://github.com/microsoft/fluentui/pull/25194) by ololubek@microsoft.com)
+ - fix: Progress should set aria-valuemin and aria-valuemax when the value is 0 ([PR #25198](https://github.com/microsoft/fluentui/pull/25198) by behowell@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-select`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- `@fluentui/react-table`
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+ - BREAKING: refactor `useTable` to be composable ([PR #24947](https://github.com/microsoft/fluentui/pull/24947) by lingfangao@hotmail.com)
+- `@fluentui/react-toolbar`
+ - fix: Toolbar selection should work ([PR #25153](https://github.com/microsoft/fluentui/pull/25153) by lingfangao@hotmail.com)
+ - chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+
+## [9.4.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.4.0)
+
+Mon, 03 Oct 2022 22:24:33 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.3.2..@fluentui/react-components_v9.4.0)
+
+### Minor changes
+
+- `@fluentui/react-avatar`
+ - feat: Implement avatar context for slot overrides ([PR #24807](https://github.com/microsoft/fluentui/pull/24807) by lingfangao@hotmail.com)
+ - feat: Avatar's aria label includes 'active' or 'inactive' when using the active prop ([PR #24901](https://github.com/microsoft/fluentui/pull/24901) by behowell@microsoft.com)
+- `@fluentui/react-components`
+ - feat: Moving Persona to unstable. ([PR #25008](https://github.com/microsoft/fluentui/pull/25008) by esteban.230@hotmail.com)
+- `@fluentui/react-input`
+ - chore: Deprecating filled with shadow appearance variant. ([PR #24900](https://github.com/microsoft/fluentui/pull/24900) by esteban.230@hotmail.com)
+- `@fluentui/react-persona`
+ - feat: Publishing package. ([PR #25008](https://github.com/microsoft/fluentui/pull/25008) by esteban.230@hotmail.com)
+
+### Patches
+
+- `@fluentui/react-aria`
+ - chore: user defined tabIndex should prevail aria-button defined ([PR #24962](https://github.com/microsoft/fluentui/pull/24962) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-avatar`
+ - fix: Make AvatarGroupPopover's focus indicator the same for all layouts. ([PR #25006](https://github.com/microsoft/fluentui/pull/25006) by esteban.230@hotmail.com)
+- `@fluentui/react-badge`
+ - fix: CounterBadge now always renders its children if provided ([PR #24916](https://github.com/microsoft/fluentui/pull/24916) by behowell@microsoft.com)
+- `@fluentui/react-checkbox`
+ - fix: Checkbox's label shouldn't have a pointer cursor when disabled ([PR #25018](https://github.com/microsoft/fluentui/pull/25018) by behowell@microsoft.com)
+ - fix: Making the hidden input only cover the indicator and not also the label. ([PR #24638](https://github.com/microsoft/fluentui/pull/24638) by makotom@microsoft.com)
+- `@fluentui/react-components`
+ - feat: exports DialogContent as unstable ([PR #24943](https://github.com/microsoft/fluentui/pull/24943) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-menu`
+ - fix: Menu triggers no longer take focus when they are mounted ([PR #25016](https://github.com/microsoft/fluentui/pull/25016) by behowell@microsoft.com)
+- `@fluentui/react-persona`
+ - docs: Add migration guide. ([PR #25022](https://github.com/microsoft/fluentui/pull/25022) by esteban.230@hotmail.com)
+- `@fluentui/react-popover`
+ - fix: update popover role to be note when it does not trap focus ([PR #24897](https://github.com/microsoft/fluentui/pull/24897) by sarah.higley@microsoft.com)
+- `@fluentui/react-radio`
+ - fix: Making the hidden input only cover the indicator and not also the label. ([PR #25025](https://github.com/microsoft/fluentui/pull/25025) by humberto_makoto@hotmail.com)
+- `@fluentui/react-switch`
+ - fix: Making the hidden input only cover the indicator and not also the label. ([PR #24638](https://github.com/microsoft/fluentui/pull/24638) by makotom@microsoft.com)
+ - fix: Switch's label shouldn't have a pointer cursor when disabled ([PR #25026](https://github.com/microsoft/fluentui/pull/25026) by behowell@microsoft.com)
+- `@fluentui/react-tabster`
+ - fix: focus outline selectors are data attributes ([PR #24994](https://github.com/microsoft/fluentui/pull/24994) by lingfangao@hotmail.com)
+- `@fluentui/react-textarea`
+ - chore: Deprecating filled with shadow appearance variant. ([PR #24900](https://github.com/microsoft/fluentui/pull/24900) by esteban.230@hotmail.com)
+
+### Changes
+
+- `@fluentui/react-dialog`
+ - feat: removes DialogSurface native dialog support ([PR #24979](https://github.com/microsoft/fluentui/pull/24979) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-field`
+ - fix: Remove SwitchField's labelPosition prop, as it has no effect ([PR #24876](https://github.com/microsoft/fluentui/pull/24876) by behowell@microsoft.com)
+- `@fluentui/react-table`
+ - feat: `noNativeElements` renders a flex layout ([PR #24913](https://github.com/microsoft/fluentui/pull/24913) by lingfangao@hotmail.com)
+ - feat: Use AvatarContext to override avatar size ([PR #24807](https://github.com/microsoft/fluentui/pull/24807) by lingfangao@hotmail.com)
+
+## [9.3.2](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.3.2)
+
+Fri, 23 Sep 2022 10:32:29 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.3.1..@fluentui/react-components_v9.3.2)
+
+### Patches
+
+- `@fluentui/react-menu`
+ - fix: Make Menu openOnHover prop work again ([PR #24899](https://github.com/microsoft/fluentui/pull/24899) by behowell@microsoft.com)
+
+### Changes
+
+- `@fluentui/react-dialog`
+ - feat: implements DialogContent as a swap of DialogBody ([PR #24855](https://github.com/microsoft/fluentui/pull/24855) by bernardo.sunderhus@gmail.com)
+
+## [9.3.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.3.1)
+
+Tue, 20 Sep 2022 20:55:42 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.3.0..@fluentui/react-components_v9.3.1)
+
+### Minor changes
+
+- `@fluentui/react-textarea`
+ - feat: Adding filled with shadow appearance. ([PR #24512](https://github.com/microsoft/fluentui/pull/24512) by esteban.230@hotmail.com)
+- `@fluentui/react-divider`
+ - fix: Divider - allow props to override default values ([PR #24840](https://github.com/microsoft/fluentui/pull/24840) by mgodbolt@microsoft.com)
+- `@fluentui/react-menu`
+ - feat: replace keydown handlers by useARIAButtonShorthand on MenuItem ([PR #24738](https://github.com/microsoft/fluentui/pull/24738) by bernardo.sunderhus@gmail.com)
+
+### Patches
+
+- `@fluentui/react-tooltip`
+ - bugfix: stops propagation on Escape key ([PR #24810](https://github.com/microsoft/fluentui/pull/24810) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-components`
+ - fix: export `tableCellActionsClassNames` from unstable ([PR #24830](https://github.com/microsoft/fluentui/pull/24830) by lingfangao@hotmail.com)
+
+### Changes
+
+- `@fluentui/react-table`
+ - feat: Adds `visible` prop to `TableCellActions` ([PR #24831](https://github.com/microsoft/fluentui/pull/24831) by lingfangao@hotmail.com)
+ - fix: `TableCellActions` displays correctly inside `TableHeaderCell` ([PR #24829](https://github.com/microsoft/fluentui/pull/24829) by lingfangao@hotmail.com)
+- `@fluentui/react-conformance-griffel`
+ - bump react-conformance ([PR #24870](https://github.com/microsoft/fluentui/pull/24870) by mgodbolt@microsoft.com)
+- `@fluentui/react-dialog`
+ - bugfix(react-dialog): Adds color style to DialogSurface ([PR #24832](https://github.com/microsoft/fluentui/pull/24832) by bernardo.sunderhus@gmail.com)
+
+## [9.3.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.3.0)
+
+Thu, 15 Sep 2022 09:48:53 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.2.0..@fluentui/react-components_v9.3.0)
+
+### Minor changes
+
+- `@fluentui/react-utilities`
+ - feat: add dialog properties to getNativeElementProps ([PR #24698](https://github.com/microsoft/fluentui/pull/24698) by bernardo.sunderhus@gmail.com)
+ - fix: Replace deprecated ReactNodeArray for React 17 support. ([PR #24356](https://github.com/microsoft/fluentui/pull/24356) by tristan.watanabe@gmail.com)
+ - feat(react-utilities): adds isResolvedShorthand guard method ([PR #24535](https://github.com/microsoft/fluentui/pull/24535) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-input`
+ - feat: Adding optional shadow to filled appearances. ([PR #24730](https://github.com/microsoft/fluentui/pull/24730) by esteban.230@hotmail.com)
+- `@fluentui/react-menu`
+ - chore(react-menu): Updates trigger to use useARIAButton ([PR #24177](https://github.com/microsoft/fluentui/pull/24177) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-popover`
+ - chore(react-popover): Updates trigger to use useARIAButton ([PR #24177](https://github.com/microsoft/fluentui/pull/24177) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-positioning`
+ - feat: Upgrade to Floating UI v1 ([PR #24254](https://github.com/microsoft/fluentui/pull/24254) by lingfangao@hotmail.com)
+- `@fluentui/react-text`
+ - feat: Add Body2 ([PR #24378](https://github.com/microsoft/fluentui/pull/24378) by miroslav.stastny@microsoft.com)
+- `@fluentui/react-theme`
+ - feat: Add fontWeightBold, add Body2, fix font weight for *Stronger typography ([PR #24378](https://github.com/microsoft/fluentui/pull/24378) by miroslav.stastny@microsoft.com)
+- `@fluentui/react-aria`
+ - feat: add helper types to assist DOM element handling ([PR #24722](https://github.com/microsoft/fluentui/pull/24722) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-avatar`
+ - feat: Adding functionality to AvatarGroupOverflow and updating AvatarGroup to use AvatarGroupOverflow. ([PR #24115](https://github.com/microsoft/fluentui/pull/24115) by esteban.230@hotmail.com)
+ - chore: Renaming AvatarGroupOverflow to AvatarGroupPopover. ([PR #24338](https://github.com/microsoft/fluentui/pull/24338) by esteban.230@hotmail.com)
+ - feat: Add pie layout implementation. ([PR #24241](https://github.com/microsoft/fluentui/pull/24241) by esteban.230@hotmail.com)
+- `@fluentui/react-components`
+ - feat: re-export GriffelRenderer type ([PR #24202](https://github.com/microsoft/fluentui/pull/24202) by olfedias@microsoft.com)
+
+### Patches
+
+- `@fluentui/react-tooltip`
+ - refactor: Replace useMergedEventCallbacks utility with mergeCallbacks ([PR #24152](https://github.com/microsoft/fluentui/pull/24152) by behowell@microsoft.com)
+ - fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted ([PR #24611](https://github.com/microsoft/fluentui/pull/24611) by miroslav.stastny@microsoft.com)
+ - fix: update color tokens ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-utilities`
+ - chore: fix no-context-default-value lint violations ([PR #24276](https://github.com/microsoft/fluentui/pull/24276) by lingfangao@hotmail.com)
+ - fix: add microdata properties to allowed html properties ([PR #24652](https://github.com/microsoft/fluentui/pull/24652) by yuanboxue@microsoft.com)
+ - refactor: Replace useMergedEventCallbacks utility with mergeCallbacks ([PR #24152](https://github.com/microsoft/fluentui/pull/24152) by behowell@microsoft.com)
+- `@fluentui/react-divider`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-image`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-input`
+ - fix: Remove box-shadow from filled appearances. ([PR #24491](https://github.com/microsoft/fluentui/pull/24491) by esteban.230@hotmail.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-label`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-link`
+ - fix: add type=button when rendered as a button ([PR #24327](https://github.com/microsoft/fluentui/pull/24327) by sarah.higley@microsoft.com)
+ - fix: Replacing bottom border styles with text decoration underline. ([PR #24734](https://github.com/microsoft/fluentui/pull/24734) by humberto_makoto@hotmail.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-menu`
+ - refactor: Replace useMergedEventCallbacks utility with mergeCallbacks ([PR #24152](https://github.com/microsoft/fluentui/pull/24152) by behowell@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - bugfix: stops propagation on Escape keydown ([PR #24750](https://github.com/microsoft/fluentui/pull/24750) by bernardo.sunderhus@gmail.com)
+ - chore: fix no-context-default-value lint violations ([PR #24276](https://github.com/microsoft/fluentui/pull/24276) by lingfangao@hotmail.com)
+- `@fluentui/react-popover`
+ - fix: Allow PopoverSurface to trap focus when it's focusable. ([PR #24134](https://github.com/microsoft/fluentui/pull/24134) by esteban.230@hotmail.com)
+ - bugfix: stops propagation on Escape keydown ([PR #24750](https://github.com/microsoft/fluentui/pull/24750) by bernardo.sunderhus@gmail.com)
+ - fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted ([PR #24611](https://github.com/microsoft/fluentui/pull/24611) by miroslav.stastny@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - refactor: Replace useMergedEventCallbacks utility with mergeCallbacks ([PR #24152](https://github.com/microsoft/fluentui/pull/24152) by behowell@microsoft.com)
+ - fix: update color tokens ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+ - chore: fix no-context-default-value lint violations ([PR #24276](https://github.com/microsoft/fluentui/pull/24276) by lingfangao@hotmail.com)
+- `@fluentui/react-portal`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-portal-compat`
+ - fix: Portal compat should apply `focus-visible` ponyfill ([PR #24712](https://github.com/microsoft/fluentui/pull/24712) by lingfangao@hotmail.com)
+- `@fluentui/react-portal-compat-context`
+ - chore: fix no-context-default-value lint violations ([PR #24276](https://github.com/microsoft/fluentui/pull/24276) by lingfangao@hotmail.com)
+- `@fluentui/react-positioning`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-provider`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-radio`
+ - refactor: Replace useMergedEventCallbacks utility with mergeCallbacks ([PR #24152](https://github.com/microsoft/fluentui/pull/24152) by behowell@microsoft.com)
+ - chore: fix no-context-default-value lint violations for cxe ([PR #24277](https://github.com/microsoft/fluentui/pull/24277) by lingfangao@hotmail.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-shared-contexts`
+ - chore: fix no-context-default-value lint violations ([PR #24276](https://github.com/microsoft/fluentui/pull/24276) by lingfangao@hotmail.com)
+- `@fluentui/react-slider`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-spinbutton`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - refactor: Replace useMergedEventCallbacks utility with mergeCallbacks ([PR #24152](https://github.com/microsoft/fluentui/pull/24152) by behowell@microsoft.com)
+- `@fluentui/react-spinner`
+ - fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted ([PR #24611](https://github.com/microsoft/fluentui/pull/24611) by miroslav.stastny@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - (patch): Add line-height styling to Spinner ([PR #24643](https://github.com/microsoft/fluentui/pull/24643) by ololubek@microsoft.com)
+ - fix: update color tokens ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+ - (chore): Remove appearance conditional from Spinner slot styling ([PR #24480](https://github.com/microsoft/fluentui/pull/24480) by ololubek@microsoft.com)
+- `@fluentui/react-switch`
+ - fix: update color tokens ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - refactor: Replace useMergedEventCallbacks utility with mergeCallbacks ([PR #24152](https://github.com/microsoft/fluentui/pull/24152) by behowell@microsoft.com)
+- `@fluentui/react-tabs`
+ - fix: add type=button to root slot ([PR #24327](https://github.com/microsoft/fluentui/pull/24327) by sarah.higley@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-tabster`
+ - fix: Remove provider classname from focus styles ([PR #24710](https://github.com/microsoft/fluentui/pull/24710) by lingfangao@hotmail.com)
+ - fix: Bumps tabster to 2.1.2 and removes deep import for KeyborgCallback ([PR #24376](https://github.com/microsoft/fluentui/pull/24376) by lingfangao@hotmail.com)
+ - chore: Exports `applyFocusVisible` as internal ([PR #24712](https://github.com/microsoft/fluentui/pull/24712) by lingfangao@hotmail.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-text`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-textarea`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - fix: Change filled appearances' normal state's token. ([PR #24701](https://github.com/microsoft/fluentui/pull/24701) by esteban.230@hotmail.com)
+ - fix: disabled textarea uses semantic contrast theme border color ([PR #24311](https://github.com/microsoft/fluentui/pull/24311) by sarah.higley@microsoft.com)
+- `@fluentui/react-theme`
+ - fix: update token values to fix failing color contrast ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+ - fix: update color neutral background inverted color in teams dark ([PR #24494](https://github.com/microsoft/fluentui/pull/24494) by seanmonahan@microsoft.com)
+ - fix: Update color tokens mapping ([PR #24608](https://github.com/microsoft/fluentui/pull/24608) by miroslav.stastny@microsoft.com)
+ - fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted ([PR #24611](https://github.com/microsoft/fluentui/pull/24611) by miroslav.stastny@microsoft.com)
+ - fix: Change colorBrandForeground2 mapping in teamsDark theme ([PR #24579](https://github.com/microsoft/fluentui/pull/24579) by miroslav.stastny@microsoft.com)
+ - fix: Swap Background1 and Foreground1 in HC color palette ([PR #24498](https://github.com/microsoft/fluentui/pull/24498) by miroslav.stastny@microsoft.com)
+- `@fluentui/react-accordion`
+ - chore: fix no-context-default-value lint violations for cxe ([PR #24277](https://github.com/microsoft/fluentui/pull/24277) by lingfangao@hotmail.com)
+ - fix(Refactor accordion expandIcon styling) ([PR #24597](https://github.com/microsoft/fluentui/pull/24597) by ololubek@microsoft.com)
+ - fix: add type=button to button slot ([PR #24327](https://github.com/microsoft/fluentui/pull/24327) by sarah.higley@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-aria`
+ - docs(react-aria): re-generate api.md ([PR #23369](https://github.com/microsoft/fluentui/pull/23369) by martinhochel@microsoft.com)
+ - chore(react-aria): improve internal typings ([PR #24742](https://github.com/microsoft/fluentui/pull/24742) by bernardo.sunderhus@gmail.com)
+ - feat: upgrade typings on useARIAButtonProps to be more specific ([PR #24177](https://github.com/microsoft/fluentui/pull/24177) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-avatar`
+ - chore: Change content to render as ul and list item to render as li. ([PR #24347](https://github.com/microsoft/fluentui/pull/24347) by esteban.230@hotmail.com)
+ - chore: Cleaning up use of AvatarGroup context. ([PR #24459](https://github.com/microsoft/fluentui/pull/24459) by esteban.230@hotmail.com)
+ - refactor: Replace useMergedEventCallbacks utility with mergeCallbacks ([PR #24152](https://github.com/microsoft/fluentui/pull/24152) by behowell@microsoft.com)
+ - fix: Making PopoverSurface focusable, moving Overflow aria-label to PopoverSurface, and moving content styles to PopoverSurface. ([PR #24417](https://github.com/microsoft/fluentui/pull/24417) by esteban.230@hotmail.com)
+ - fix: Set aria-hidden to AvatarGroupItem's label. ([PR #24359](https://github.com/microsoft/fluentui/pull/24359) by esteban.230@hotmail.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted ([PR #24611](https://github.com/microsoft/fluentui/pull/24611) by miroslav.stastny@microsoft.com)
+ - chore: Update tests and add e2e tests. ([PR #24348](https://github.com/microsoft/fluentui/pull/24348) by esteban.230@hotmail.com)
+ - fix: update color tokens ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+ - chore: fix no-context-default-value lint violations for cxe ([PR #24277](https://github.com/microsoft/fluentui/pull/24277) by lingfangao@hotmail.com)
+- `@fluentui/react-badge`
+ - fix: update color tokens ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+ - fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted ([PR #24611](https://github.com/microsoft/fluentui/pull/24611) by miroslav.stastny@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-button`
+ - fix: Adding 'aria-expanded=false' to collapsed MenuButtons. ([PR #24782](https://github.com/microsoft/fluentui/pull/24782) by humberto_makoto@hotmail.com)
+ - chore: Remove max-width style from Button components. ([PR #24647](https://github.com/microsoft/fluentui/pull/24647) by makotom@microsoft.com)
+ - chore: Cleaning up tokens in Button components so they better adhere to the design spec. ([PR #24732](https://github.com/microsoft/fluentui/pull/24732) by humberto_makoto@hotmail.com)
+ - fix: Wrapping long text in Button components. ([PR #24682](https://github.com/microsoft/fluentui/pull/24682) by humberto_makoto@hotmail.com)
+ - refactor: Replace useMergedEventCallbacks utility with mergeCallbacks ([PR #24152](https://github.com/microsoft/fluentui/pull/24152) by behowell@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-checkbox`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - fix: update color tokens ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+- `@fluentui/react-components`
+ - feat: Export `TableCellActions` and `TablePrimaryCell` as unstable ([PR #24232](https://github.com/microsoft/fluentui/pull/24232) by lingfangao@hotmail.com)
+ - fix: use caret for @fluentui/react-spinbutton ([PR #24206](https://github.com/microsoft/fluentui/pull/24206) by lingfangao@hotmail.com)
+ - chore: Stop exporting TablePrimaryCell and associated utilities and types ([PR #24762](https://github.com/microsoft/fluentui/pull/24762) by lingfangao@hotmail.com)
+ - feat: Adding missing AvatarGroup exports. ([PR #24770](https://github.com/microsoft/fluentui/pull/24770) by esteban.230@hotmail.com)
+ - feat: Remove TableCellPrimaryLayout, adds `appearance` prop to TableCellLayout for primary layout ([PR #24789](https://github.com/microsoft/fluentui/pull/24789) by lingfangao@hotmail.com)
+ - feat: Export table cell layout components from unstable ([PR #24773](https://github.com/microsoft/fluentui/pull/24773) by lingfangao@hotmail.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - feat: Export `TableSelectionCell` from unstable ([PR #24252](https://github.com/microsoft/fluentui/pull/24252) by lingfangao@hotmail.com)
+ - fix: export ToolbarButton ([PR #24366](https://github.com/microsoft/fluentui/pull/24366) by olfedias@microsoft.com)
+ - feat: Add *Field components to @fluentui/react-components/unstable ([PR #24235](https://github.com/microsoft/fluentui/pull/24235) by behowell@microsoft.com)
+ - Changed from upgrade to migrate terminology ([PR #24695](https://github.com/microsoft/fluentui/pull/24695) by gcox@microsoft.com)
+ - Move Icon Table to new page ([PR #24284](https://github.com/microsoft/fluentui/pull/24284) by ololubek@microsoft.com)
+
+### Changes
+
+- `@fluentui/react-dialog`
+ - chore(react-dialog): Updates trigger to use useARIAButtonProps ([PR #24177](https://github.com/microsoft/fluentui/pull/24177) by bernardo.sunderhus@gmail.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - chore(react-dialog): removes react-button max-width overrides ([PR #24674](https://github.com/microsoft/fluentui/pull/24674) by bernardo.sunderhus@gmail.com)
+ - feat: add scroll lock feature to Dialog ([PR #24375](https://github.com/microsoft/fluentui/pull/24375) by bernardo.sunderhus@gmail.com)
+ - feat(react-dialog): moves backdrop slot from Dialog to DialogSurface ([PR #24669](https://github.com/microsoft/fluentui/pull/24669) by bernardo.sunderhus@gmail.com)
+ - feat(react-dialog): adds proper style to make DialogBody responsive ([PR #24354](https://github.com/microsoft/fluentui/pull/24354) by bernardo.sunderhus@gmail.com)
+ - chore: renames overlay slot to backdrop ([PR #24220](https://github.com/microsoft/fluentui/pull/24220) by bernardo.sunderhus@gmail.com)
+ - bugfix: stops propagation on Escape key ([PR #24750](https://github.com/microsoft/fluentui/pull/24750) by bernardo.sunderhus@gmail.com)
+ - feat: Adds padding-right style to avoid jumping on scroll lock ([PR #24408](https://github.com/microsoft/fluentui/pull/24408) by bernardo.sunderhus@gmail.com)
+ - chore(react-dialog): removes document listener to Escape keydown ([PR #24668](https://github.com/microsoft/fluentui/pull/24668) by bernardo.sunderhus@gmail.com)
+ - feat(react-dialog): replace `closeButton` to a more generic `action` slot ([PR #24719](https://github.com/microsoft/fluentui/pull/24719) by bernardo.sunderhus@gmail.com)
+ - feat(react-dialog): 1st rule of ARIA for Dialog ([PR #24525](https://github.com/microsoft/fluentui/pull/24525) by bernardo.sunderhus@gmail.com)
+- `@fluentui/react-field`
+ - Initial release ([PR #24235](https://github.com/microsoft/fluentui/pull/24235) by behowell@microsoft.com)
+- `@fluentui/react-overflow`
+ - chore: fix no-context-default-value lint violations ([PR #24276](https://github.com/microsoft/fluentui/pull/24276) by lingfangao@hotmail.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-select`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-table`
+ - implement `useTable` state hook ([PR #24329](https://github.com/microsoft/fluentui/pull/24329) by lingfangao@hotmail.com)
+ - feat: Remove TableCellPrimaryLayout, adds `appearance` prop to TableCellLayout for primary layout ([PR #24789](https://github.com/microsoft/fluentui/pull/24789) by lingfangao@hotmail.com)
+ - BREAKING: TableCell layouts are handled by layout components ([PR #24762](https://github.com/microsoft/fluentui/pull/24762) by lingfangao@hotmail.com)
+ - feat: Implement table cell layout components ([PR #24773](https://github.com/microsoft/fluentui/pull/24773) by lingfangao@hotmail.com)
+ - feat: Remove inferred row state and add `rowEnhancer` option ([PR #24346](https://github.com/microsoft/fluentui/pull/24346) by lingfangao@hotmail.com)
+ - feat: Implement unstable navigation modes ([PR #24383](https://github.com/microsoft/fluentui/pull/24383) by lingfangao@hotmail.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - refactor(useTable): selection manager to avoid calling multiple hooks ([PR #24377](https://github.com/microsoft/fluentui/pull/24377) by lingfangao@hotmail.com)
+ - feat: Implement `TableSelectionCell` ([PR #24252](https://github.com/microsoft/fluentui/pull/24252) by lingfangao@hotmail.com)
+ - refactor: Stop using context selector for Table primitives ([PR #24806](https://github.com/microsoft/fluentui/pull/24806) by lingfangao@hotmail.com)
+ - feat: autocontrolled `useTable` hook ([PR #24688](https://github.com/microsoft/fluentui/pull/24688) by lingfangao@hotmail.com)
+ - feat: Implement `TableCellActions` and `TablePrimaryCell` ([PR #24232](https://github.com/microsoft/fluentui/pull/24232) by lingfangao@hotmail.com)
+- `@fluentui/react-theme-sass`
+ - feat: add new color tokens ([PR #24027](https://github.com/microsoft/fluentui/pull/24027) by seanmonahan@microsoft.com)
+ - feat: Add fontWeightBold ([PR #24378](https://github.com/microsoft/fluentui/pull/24378) by miroslav.stastny@microsoft.com)
+ - fix: Rename colorNeutralForegroundInvertedStatic token to colorNeutralForegroundStaticInverted ([PR #24611](https://github.com/microsoft/fluentui/pull/24611) by miroslav.stastny@microsoft.com)
+ - feat: add color neutral foreground inverted 2 token ([PR #24494](https://github.com/microsoft/fluentui/pull/24494) by seanmonahan@microsoft.com)
+- `@fluentui/react-toolbar`
+ - chore: fix no-context-default-value lint violations ([PR #24276](https://github.com/microsoft/fluentui/pull/24276) by lingfangao@hotmail.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-alert`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-card`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- `@fluentui/react-combobox`
+ - fix: typing moves active option in Dropdown ([PR #24437](https://github.com/microsoft/fluentui/pull/24437) by sarah.higley@microsoft.com)
+ - fix: Combobox and Dropdown hover/active border colors and padding styles ([PR #24362](https://github.com/microsoft/fluentui/pull/24362) by sarah.higley@microsoft.com)
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+ - fix: Combobox and Dropdown only show option focus outline when navigating by keyboard ([PR #24700](https://github.com/microsoft/fluentui/pull/24700) by sarah.higley@microsoft.com)
+ - fix: set popup Listbox width to trigger width ([PR #24733](https://github.com/microsoft/fluentui/pull/24733) by sarah.higley@microsoft.com)
+ - fix: open/close combobox on icon click ([PR #24147](https://github.com/microsoft/fluentui/pull/24147) by sarah.higley@microsoft.com)
+ - feat: Allow typing by default, add allowFreeform ([PR #23819](https://github.com/microsoft/fluentui/pull/23819) by sarah.higley@microsoft.com)
+ - feat: make listbox slot nullable ([PR #24392](https://github.com/microsoft/fluentui/pull/24392) by sarah.higley@microsoft.com)
+ - fix: react-combobox change onSelect to onOptionSelect to avoid conflicts with native onSelect ([PR #24550](https://github.com/microsoft/fluentui/pull/24550) by sarah.higley@microsoft.com)
+- `@fluentui/react-conformance-griffel`
+ - chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+
## [9.2.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.2.0)
Wed, 03 Aug 2022 16:03:34 GMT
diff --git a/packages/react-components/react-components/README.md b/packages/react-components/react-components/README.md
index 58489c72195570..d1e78b70d3f8e4 100644
--- a/packages/react-components/react-components/README.md
+++ b/packages/react-components/react-components/README.md
@@ -4,8 +4,6 @@
This is a suite package for converged components and related utilities. It is a result of a dedupe effort for `@fluentui/react` and `@fluentui/react-northstar`.
-The components are available for limited production use, please contact us if you intend to use them in your product. The APIs might change before final release.
-
### Usage
Add @fluentui/react-components to a project:
diff --git a/packages/react-components/react-components/bundle-size/ButtonProviderAndTheme.fixture.js b/packages/react-components/react-components/bundle-size/ButtonProviderAndTheme.fixture.js
new file mode 100644
index 00000000000000..a1a9e6095f925d
--- /dev/null
+++ b/packages/react-components/react-components/bundle-size/ButtonProviderAndTheme.fixture.js
@@ -0,0 +1,7 @@
+import { Button, FluentProvider, webLightTheme } from '@fluentui/react-components';
+
+console.log(Button, FluentProvider, webLightTheme);
+
+export default {
+ name: 'react-components: Button, FluentProvider & webLightTheme',
+};
diff --git a/packages/react-components/react-components/etc/react-components.api.md b/packages/react-components/react-components/etc/react-components.api.md
index 9b1728c01f3f61..d1a9fc58e1e1d5 100644
--- a/packages/react-components/react-components/etc/react-components.api.md
+++ b/packages/react-components/react-components/etc/react-components.api.md
@@ -96,6 +96,43 @@ import { createHighContrastTheme } from '@fluentui/react-theme';
import { createLightTheme } from '@fluentui/react-theme';
import { createTeamsDarkTheme } from '@fluentui/react-theme';
import { CurveTokens } from '@fluentui/react-theme';
+import { Dialog } from '@fluentui/react-dialog';
+import { DialogActions } from '@fluentui/react-dialog';
+import { dialogActionsClassNames } from '@fluentui/react-dialog';
+import { DialogActionsPosition } from '@fluentui/react-dialog';
+import { DialogActionsProps } from '@fluentui/react-dialog';
+import { DialogActionsSlots } from '@fluentui/react-dialog';
+import { DialogActionsState } from '@fluentui/react-dialog';
+import { DialogBody } from '@fluentui/react-dialog';
+import { dialogBodyClassNames } from '@fluentui/react-dialog';
+import { DialogBodyProps } from '@fluentui/react-dialog';
+import { DialogBodySlots } from '@fluentui/react-dialog';
+import { DialogBodyState } from '@fluentui/react-dialog';
+import { DialogContent } from '@fluentui/react-dialog';
+import { dialogContentClassNames } from '@fluentui/react-dialog';
+import { DialogContentProps } from '@fluentui/react-dialog';
+import { DialogContentSlots } from '@fluentui/react-dialog';
+import { DialogContentState } from '@fluentui/react-dialog';
+import { DialogOpenChangeData } from '@fluentui/react-dialog';
+import { DialogOpenChangeEvent } from '@fluentui/react-dialog';
+import { DialogProps } from '@fluentui/react-dialog';
+import { DialogSlots } from '@fluentui/react-dialog';
+import { DialogState } from '@fluentui/react-dialog';
+import { DialogSurface } from '@fluentui/react-dialog';
+import { dialogSurfaceClassNames } from '@fluentui/react-dialog';
+import { DialogSurfaceProps } from '@fluentui/react-dialog';
+import { DialogSurfaceSlots } from '@fluentui/react-dialog';
+import { DialogSurfaceState } from '@fluentui/react-dialog';
+import { DialogTitle } from '@fluentui/react-dialog';
+import { dialogTitleClassNames } from '@fluentui/react-dialog';
+import { DialogTitleProps } from '@fluentui/react-dialog';
+import { DialogTitleSlots } from '@fluentui/react-dialog';
+import { DialogTitleState } from '@fluentui/react-dialog';
+import { DialogTrigger } from '@fluentui/react-dialog';
+import { DialogTriggerAction } from '@fluentui/react-dialog';
+import { DialogTriggerChildProps } from '@fluentui/react-dialog';
+import { DialogTriggerProps } from '@fluentui/react-dialog';
+import { DialogTriggerState } from '@fluentui/react-dialog';
import { Display } from '@fluentui/react-text';
import { displayClassNames } from '@fluentui/react-text';
import { Divider } from '@fluentui/react-divider';
@@ -235,8 +272,12 @@ import { PopoverSurfaceProps } from '@fluentui/react-popover';
import { PopoverSurfaceSlots } from '@fluentui/react-popover';
import { PopoverSurfaceState } from '@fluentui/react-popover';
import { PopoverTrigger } from '@fluentui/react-popover';
+import { PopoverTriggerChildProps } from '@fluentui/react-popover';
import { PopoverTriggerProps } from '@fluentui/react-popover';
import { PopoverTriggerState } from '@fluentui/react-popover';
+import { Portal } from '@fluentui/react-portal';
+import { PortalProps } from '@fluentui/react-portal';
+import { PortalState } from '@fluentui/react-portal';
import { PositioningImperativeRef } from '@fluentui/react-positioning';
import { PositioningProps } from '@fluentui/react-positioning';
import { PositioningShorthand } from '@fluentui/react-positioning';
@@ -272,6 +313,13 @@ import { renderBadge_unstable } from '@fluentui/react-badge';
import { renderButton_unstable } from '@fluentui/react-button';
import { renderCheckbox_unstable } from '@fluentui/react-checkbox';
import { renderCompoundButton_unstable } from '@fluentui/react-button';
+import { renderDialog_unstable } from '@fluentui/react-dialog';
+import { renderDialogActions_unstable } from '@fluentui/react-dialog';
+import { renderDialogBody_unstable } from '@fluentui/react-dialog';
+import { renderDialogContent_unstable } from '@fluentui/react-dialog';
+import { renderDialogSurface_unstable } from '@fluentui/react-dialog';
+import { renderDialogTitle_unstable } from '@fluentui/react-dialog';
+import { renderDialogTrigger_unstable } from '@fluentui/react-dialog';
import { renderDivider_unstable } from '@fluentui/react-divider';
import { RendererProvider } from '@griffel/react';
import { renderFluentProvider_unstable } from '@fluentui/react-provider';
@@ -294,6 +342,7 @@ import { renderMenuTrigger_unstable } from '@fluentui/react-menu';
import { renderPopover_unstable } from '@fluentui/react-popover';
import { renderPopoverSurface_unstable } from '@fluentui/react-popover';
import { renderPopoverTrigger_unstable } from '@fluentui/react-popover';
+import { renderPortal_unstable } from '@fluentui/react-portal';
import { renderRadio_unstable } from '@fluentui/react-radio';
import { renderRadioGroup_unstable } from '@fluentui/react-radio';
import { renderSlider_unstable } from '@fluentui/react-slider';
@@ -439,6 +488,18 @@ import { useCompoundButton_unstable } from '@fluentui/react-button';
import { useCompoundButtonStyles_unstable } from '@fluentui/react-button';
import { useCounterBadge_unstable } from '@fluentui/react-badge';
import { useCounterBadgeStyles_unstable } from '@fluentui/react-badge';
+import { useDialog_unstable } from '@fluentui/react-dialog';
+import { useDialogActions_unstable } from '@fluentui/react-dialog';
+import { useDialogActionsStyles_unstable } from '@fluentui/react-dialog';
+import { useDialogBody_unstable } from '@fluentui/react-dialog';
+import { useDialogBodyStyles_unstable } from '@fluentui/react-dialog';
+import { useDialogContent_unstable } from '@fluentui/react-dialog';
+import { useDialogContentStyles_unstable } from '@fluentui/react-dialog';
+import { useDialogSurface_unstable } from '@fluentui/react-dialog';
+import { useDialogSurfaceStyles_unstable } from '@fluentui/react-dialog';
+import { useDialogTitle_unstable } from '@fluentui/react-dialog';
+import { useDialogTitleStyles_unstable } from '@fluentui/react-dialog';
+import { useDialogTrigger_unstable } from '@fluentui/react-dialog';
import { useDivider_unstable } from '@fluentui/react-divider';
import { useDividerStyles_unstable } from '@fluentui/react-divider';
import { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';
@@ -498,6 +559,7 @@ import { usePopoverContext_unstable } from '@fluentui/react-popover';
import { usePopoverSurface_unstable } from '@fluentui/react-popover';
import { usePopoverSurfaceStyles_unstable } from '@fluentui/react-popover';
import { usePopoverTrigger_unstable } from '@fluentui/react-popover';
+import { usePortal_unstable } from '@fluentui/react-portal';
import { usePresenceBadge_unstable } from '@fluentui/react-badge';
import { useRadio_unstable } from '@fluentui/react-radio';
import { useRadioGroup_unstable } from '@fluentui/react-radio';
@@ -719,6 +781,80 @@ export { createTeamsDarkTheme }
export { CurveTokens }
+export { Dialog }
+
+export { DialogActions }
+
+export { dialogActionsClassNames }
+
+export { DialogActionsPosition }
+
+export { DialogActionsProps }
+
+export { DialogActionsSlots }
+
+export { DialogActionsState }
+
+export { DialogBody }
+
+export { dialogBodyClassNames }
+
+export { DialogBodyProps }
+
+export { DialogBodySlots }
+
+export { DialogBodyState }
+
+export { DialogContent }
+
+export { dialogContentClassNames }
+
+export { DialogContentProps }
+
+export { DialogContentSlots }
+
+export { DialogContentState }
+
+export { DialogOpenChangeData }
+
+export { DialogOpenChangeEvent }
+
+export { DialogProps }
+
+export { DialogSlots }
+
+export { DialogState }
+
+export { DialogSurface }
+
+export { dialogSurfaceClassNames }
+
+export { DialogSurfaceProps }
+
+export { DialogSurfaceSlots }
+
+export { DialogSurfaceState }
+
+export { DialogTitle }
+
+export { dialogTitleClassNames }
+
+export { DialogTitleProps }
+
+export { DialogTitleSlots }
+
+export { DialogTitleState }
+
+export { DialogTrigger }
+
+export { DialogTriggerAction }
+
+export { DialogTriggerChildProps }
+
+export { DialogTriggerProps }
+
+export { DialogTriggerState }
+
export { Display }
export { displayClassNames }
@@ -997,10 +1133,18 @@ export { PopoverSurfaceState }
export { PopoverTrigger }
+export { PopoverTriggerChildProps }
+
export { PopoverTriggerProps }
export { PopoverTriggerState }
+export { Portal }
+
+export { PortalProps }
+
+export { PortalState }
+
export { PositioningImperativeRef }
export { PositioningProps }
@@ -1071,6 +1215,20 @@ export { renderCheckbox_unstable }
export { renderCompoundButton_unstable }
+export { renderDialog_unstable }
+
+export { renderDialogActions_unstable }
+
+export { renderDialogBody_unstable }
+
+export { renderDialogContent_unstable }
+
+export { renderDialogSurface_unstable }
+
+export { renderDialogTitle_unstable }
+
+export { renderDialogTrigger_unstable }
+
export { renderDivider_unstable }
export { RendererProvider }
@@ -1115,6 +1273,8 @@ export { renderPopoverSurface_unstable }
export { renderPopoverTrigger_unstable }
+export { renderPortal_unstable }
+
export { renderRadio_unstable }
export { renderRadioGroup_unstable }
@@ -1405,6 +1565,30 @@ export { useCounterBadge_unstable }
export { useCounterBadgeStyles_unstable }
+export { useDialog_unstable }
+
+export { useDialogActions_unstable }
+
+export { useDialogActionsStyles_unstable }
+
+export { useDialogBody_unstable }
+
+export { useDialogBodyStyles_unstable }
+
+export { useDialogContent_unstable }
+
+export { useDialogContentStyles_unstable }
+
+export { useDialogSurface_unstable }
+
+export { useDialogSurfaceStyles_unstable }
+
+export { useDialogTitle_unstable }
+
+export { useDialogTitleStyles_unstable }
+
+export { useDialogTrigger_unstable }
+
export { useDivider_unstable }
export { useDividerStyles_unstable }
@@ -1523,6 +1707,8 @@ export { usePopoverSurfaceStyles_unstable }
export { usePopoverTrigger_unstable }
+export { usePortal_unstable }
+
export { usePresenceBadge_unstable }
export { useRadio_unstable }
diff --git a/packages/react-components/react-components/etc/react-components.unstable.api.md b/packages/react-components/react-components/etc/react-components.unstable.api.md
index 1c8917e100aa74..554961004c46c3 100644
--- a/packages/react-components/react-components/etc/react-components.unstable.api.md
+++ b/packages/react-components/react-components/etc/react-components.unstable.api.md
@@ -16,7 +16,13 @@ import { avatarGroupItemClassNames } from '@fluentui/react-avatar';
import { AvatarGroupItemProps } from '@fluentui/react-avatar';
import { AvatarGroupItemSlots } from '@fluentui/react-avatar';
import { AvatarGroupItemState } from '@fluentui/react-avatar';
+import { AvatarGroupPopover } from '@fluentui/react-avatar';
+import { avatarGroupPopoverClassNames } from '@fluentui/react-avatar';
+import { AvatarGroupPopoverProps } from '@fluentui/react-avatar';
+import { AvatarGroupPopoverSlots } from '@fluentui/react-avatar';
+import { AvatarGroupPopoverState } from '@fluentui/react-avatar';
import { AvatarGroupProps } from '@fluentui/react-avatar';
+import { AvatarGroupProvider } from '@fluentui/react-avatar';
import { AvatarGroupSlots } from '@fluentui/react-avatar';
import { AvatarGroupState } from '@fluentui/react-avatar';
import { Card } from '@fluentui/react-card';
@@ -41,9 +47,17 @@ import { CardPreviewState } from '@fluentui/react-card';
import { CardProps } from '@fluentui/react-card';
import { CardSlots } from '@fluentui/react-card';
import { CardState } from '@fluentui/react-card';
+import { CheckboxField } from '@fluentui/react-field';
+import { checkboxFieldClassNames } from '@fluentui/react-field';
+import { CheckboxFieldProps } from '@fluentui/react-field';
+import { ColumnDefinition } from '@fluentui/react-table';
+import { ColumnId } from '@fluentui/react-table';
import { Combobox } from '@fluentui/react-combobox';
import { comboboxClassNames } from '@fluentui/react-combobox';
import { ComboboxContextValues } from '@fluentui/react-combobox';
+import { ComboboxField } from '@fluentui/react-field';
+import { comboboxFieldClassNames } from '@fluentui/react-field';
+import { ComboboxFieldProps } from '@fluentui/react-field';
import { ComboboxOpenChangeData } from '@fluentui/react-combobox';
import { ComboboxOpenEvents } from '@fluentui/react-combobox';
import { ComboboxProps } from '@fluentui/react-combobox';
@@ -52,39 +66,6 @@ import { ComboboxState } from '@fluentui/react-combobox';
import { DATA_OVERFLOW_ITEM } from '@fluentui/react-overflow';
import { DATA_OVERFLOW_MENU } from '@fluentui/react-overflow';
import { DATA_OVERFLOWING } from '@fluentui/react-overflow';
-import { Dialog } from '@fluentui/react-dialog';
-import { DialogActions } from '@fluentui/react-dialog';
-import { dialogActionsClassNames } from '@fluentui/react-dialog';
-import { DialogActionsPosition } from '@fluentui/react-dialog';
-import { DialogActionsProps } from '@fluentui/react-dialog';
-import { DialogActionsSlots } from '@fluentui/react-dialog';
-import { DialogActionsState } from '@fluentui/react-dialog';
-import { DialogBody } from '@fluentui/react-dialog';
-import { dialogBodyClassNames } from '@fluentui/react-dialog';
-import { DialogBodyProps } from '@fluentui/react-dialog';
-import { DialogBodySlots } from '@fluentui/react-dialog';
-import { DialogBodyState } from '@fluentui/react-dialog';
-import { dialogClassNames } from '@fluentui/react-dialog';
-import { DialogOpenChangeData } from '@fluentui/react-dialog';
-import { DialogOpenChangeEvent } from '@fluentui/react-dialog';
-import { DialogProps } from '@fluentui/react-dialog';
-import { DialogSlots } from '@fluentui/react-dialog';
-import { DialogState } from '@fluentui/react-dialog';
-import { DialogSurface } from '@fluentui/react-dialog';
-import { dialogSurfaceClassNames } from '@fluentui/react-dialog';
-import { DialogSurfaceProps } from '@fluentui/react-dialog';
-import { DialogSurfaceSlots } from '@fluentui/react-dialog';
-import { DialogSurfaceState } from '@fluentui/react-dialog';
-import { DialogTitle } from '@fluentui/react-dialog';
-import { dialogTitleClassNames } from '@fluentui/react-dialog';
-import { DialogTitleProps } from '@fluentui/react-dialog';
-import { DialogTitleSlots } from '@fluentui/react-dialog';
-import { DialogTitleState } from '@fluentui/react-dialog';
-import { DialogTrigger } from '@fluentui/react-dialog';
-import { DialogTriggerAction } from '@fluentui/react-dialog';
-import { DialogTriggerChildProps } from '@fluentui/react-dialog';
-import { DialogTriggerProps } from '@fluentui/react-dialog';
-import { DialogTriggerState } from '@fluentui/react-dialog';
import { Dropdown } from '@fluentui/react-combobox';
import { dropdownClassNames } from '@fluentui/react-combobox';
import { DropdownContextValues } from '@fluentui/react-combobox';
@@ -93,6 +74,14 @@ import { DropdownOpenEvents } from '@fluentui/react-combobox';
import { DropdownProps } from '@fluentui/react-combobox';
import { DropdownSlots } from '@fluentui/react-combobox';
import { DropdownState } from '@fluentui/react-combobox';
+import { FieldConfig } from '@fluentui/react-field';
+import { FieldProps } from '@fluentui/react-field';
+import { FieldSlots } from '@fluentui/react-field';
+import { FieldState } from '@fluentui/react-field';
+import { getFieldClassNames } from '@fluentui/react-field';
+import { InputField } from '@fluentui/react-field';
+import { inputFieldClassNames } from '@fluentui/react-field';
+import { InputFieldProps } from '@fluentui/react-field';
import { Listbox } from '@fluentui/react-combobox';
import { listboxClassNames } from '@fluentui/react-combobox';
import { ListboxContextValues } from '@fluentui/react-combobox';
@@ -113,41 +102,69 @@ import { Overflow } from '@fluentui/react-overflow';
import { OverflowItem } from '@fluentui/react-overflow';
import { OverflowItemProps } from '@fluentui/react-overflow';
import { OverflowProps } from '@fluentui/react-overflow';
+import { PartitionAvatarGroupItems } from '@fluentui/react-avatar';
+import { partitionAvatarGroupItems } from '@fluentui/react-avatar';
+import { PartitionAvatarGroupItemsOptions } from '@fluentui/react-avatar';
+import { Persona } from '@fluentui/react-persona';
+import { personaClassNames } from '@fluentui/react-persona';
+import { PersonaProps } from '@fluentui/react-persona';
+import { PersonaSlots } from '@fluentui/react-persona';
+import { PersonaState } from '@fluentui/react-persona';
+import { Progress } from '@fluentui/react-progress';
+import { progressClassNames } from '@fluentui/react-progress';
+import { ProgressProps } from '@fluentui/react-progress';
+import { ProgressSlots } from '@fluentui/react-progress';
+import { ProgressState } from '@fluentui/react-progress';
+import { RadioGroupField } from '@fluentui/react-field';
+import { radioGroupFieldClassNames } from '@fluentui/react-field';
+import { RadioGroupFieldProps } from '@fluentui/react-field';
import { renderAlert_unstable } from '@fluentui/react-alert';
import { renderAvatarGroup_unstable } from '@fluentui/react-avatar';
import { renderAvatarGroupItem_unstable } from '@fluentui/react-avatar';
+import { renderAvatarGroupPopover_unstable } from '@fluentui/react-avatar';
import { renderCard_unstable } from '@fluentui/react-card';
import { renderCardFooter_unstable } from '@fluentui/react-card';
import { renderCardHeader_unstable } from '@fluentui/react-card';
import { renderCardPreview_unstable } from '@fluentui/react-card';
import { renderCombobox_unstable } from '@fluentui/react-combobox';
-import { renderDialog_unstable } from '@fluentui/react-dialog';
-import { renderDialogActions_unstable } from '@fluentui/react-dialog';
-import { renderDialogBody_unstable } from '@fluentui/react-dialog';
-import { renderDialogSurface_unstable } from '@fluentui/react-dialog';
-import { renderDialogTitle_unstable } from '@fluentui/react-dialog';
-import { renderDialogTrigger_unstable } from '@fluentui/react-dialog';
import { renderDropdown_unstable } from '@fluentui/react-combobox';
+import { renderField_unstable } from '@fluentui/react-field';
import { renderListbox_unstable } from '@fluentui/react-combobox';
import { renderOption_unstable } from '@fluentui/react-combobox';
import { renderOptionGroup_unstable } from '@fluentui/react-combobox';
+import { renderPersona_unstable } from '@fluentui/react-persona';
+import { renderProgress_unstable } from '@fluentui/react-progress';
import { renderSelect_unstable } from '@fluentui/react-select';
import { renderTable_unstable } from '@fluentui/react-table';
import { renderTableBody_unstable } from '@fluentui/react-table';
import { renderTableCell_unstable } from '@fluentui/react-table';
import { renderTableCellActions_unstable } from '@fluentui/react-table';
+import { renderTableCellLayout_unstable } from '@fluentui/react-table';
import { renderTableHeader_unstable } from '@fluentui/react-table';
import { renderTableHeaderCell_unstable } from '@fluentui/react-table';
-import { renderTablePrimaryCell_unstable } from '@fluentui/react-table';
import { renderTableRow_unstable } from '@fluentui/react-table';
import { renderTableSelectionCell_unstable } from '@fluentui/react-table';
import { renderToolbar_unstable } from '@fluentui/react-toolbar';
+import { RowId } from '@fluentui/react-table';
+import { RowState } from '@fluentui/react-table';
import { Select } from '@fluentui/react-select';
import { selectClassNames } from '@fluentui/react-select';
+import { SelectField } from '@fluentui/react-field';
+import { selectFieldClassNames } from '@fluentui/react-field';
+import { SelectFieldProps } from '@fluentui/react-field';
import { SelectProps } from '@fluentui/react-select';
import { SelectSlots } from '@fluentui/react-select';
import { SelectState } from '@fluentui/react-select';
+import { SliderField } from '@fluentui/react-field';
+import { sliderFieldClassNames } from '@fluentui/react-field';
+import { SliderFieldProps } from '@fluentui/react-field';
import { SortDirection } from '@fluentui/react-table';
+import { SpinButtonField } from '@fluentui/react-field';
+import { spinButtonFieldClassNames } from '@fluentui/react-field';
+import { SpinButtonFieldProps } from '@fluentui/react-field';
+import { SwitchField } from '@fluentui/react-field';
+import { switchFieldClassNames } from '@fluentui/react-field';
+import { SwitchFieldProps } from '@fluentui/react-field';
import { Table } from '@fluentui/react-table';
import { TableBody } from '@fluentui/react-table';
import { tableBodyClassName } from '@fluentui/react-table';
@@ -157,11 +174,14 @@ import { TableBodySlots } from '@fluentui/react-table';
import { TableBodyState } from '@fluentui/react-table';
import { TableCell } from '@fluentui/react-table';
import { TableCellActions } from '@fluentui/react-table';
+import { tableCellActionsClassNames } from '@fluentui/react-table';
import { TableCellActionsProps } from '@fluentui/react-table';
import { TableCellActionsSlots } from '@fluentui/react-table';
import { TableCellActionsState } from '@fluentui/react-table';
import { tableCellClassName } from '@fluentui/react-table';
import { tableCellClassNames } from '@fluentui/react-table';
+import { TableCellLayout } from '@fluentui/react-table';
+import { tableCellLayoutClassNames } from '@fluentui/react-table';
import { TableCellProps } from '@fluentui/react-table';
import { TableCellSlots } from '@fluentui/react-table';
import { TableCellState } from '@fluentui/react-table';
@@ -182,10 +202,6 @@ import { tableHeaderClassNames } from '@fluentui/react-table';
import { TableHeaderProps } from '@fluentui/react-table';
import { TableHeaderSlots } from '@fluentui/react-table';
import { TableHeaderState } from '@fluentui/react-table';
-import { TablePrimaryCell } from '@fluentui/react-table';
-import { TablePrimaryCellProps } from '@fluentui/react-table';
-import { TablePrimaryCellSlots } from '@fluentui/react-table';
-import { TablePrimaryCellState } from '@fluentui/react-table';
import { TableProps } from '@fluentui/react-table';
import { TableRow } from '@fluentui/react-table';
import { tableRowClassName } from '@fluentui/react-table';
@@ -198,8 +214,14 @@ import { tableSelectionCellClassNames } from '@fluentui/react-table';
import { TableSelectionCellProps } from '@fluentui/react-table';
import { TableSelectionCellSlots } from '@fluentui/react-table';
import { TableSelectionCellState } from '@fluentui/react-table';
+import { TableSelectionState } from '@fluentui/react-table';
import { TableSlots } from '@fluentui/react-table';
+import { TableSortState } from '@fluentui/react-table';
import { TableState } from '@fluentui/react-table';
+import { TableStatePlugin } from '@fluentui/react-table';
+import { TextareaField } from '@fluentui/react-field';
+import { textareaFieldClassNames } from '@fluentui/react-field';
+import { TextareaFieldProps } from '@fluentui/react-field';
import { Toolbar } from '@fluentui/react-toolbar';
import { ToolbarButton } from '@fluentui/react-toolbar';
import { ToolbarButtonProps } from '@fluentui/react-toolbar';
@@ -219,8 +241,11 @@ import { ToolbarToggleButtonState } from '@fluentui/react-toolbar';
import { useAlert_unstable } from '@fluentui/react-alert';
import { useAlertStyles_unstable } from '@fluentui/react-alert';
import { useAvatarGroup_unstable } from '@fluentui/react-avatar';
+import { useAvatarGroupContext_unstable } from '@fluentui/react-avatar';
import { useAvatarGroupItem_unstable } from '@fluentui/react-avatar';
import { useAvatarGroupItemStyles_unstable } from '@fluentui/react-avatar';
+import { useAvatarGroupPopover_unstable } from '@fluentui/react-avatar';
+import { useAvatarGroupPopoverStyles_unstable } from '@fluentui/react-avatar';
import { useAvatarGroupStyles_unstable } from '@fluentui/react-avatar';
import { useCard_unstable } from '@fluentui/react-card';
import { useCardFooter_unstable } from '@fluentui/react-card';
@@ -232,19 +257,10 @@ import { useCardPreviewStyles_unstable } from '@fluentui/react-card';
import { useCardStyles_unstable } from '@fluentui/react-card';
import { useCombobox_unstable } from '@fluentui/react-combobox';
import { useComboboxStyles_unstable } from '@fluentui/react-combobox';
-import { useDialog_unstable } from '@fluentui/react-dialog';
-import { useDialogActions_unstable } from '@fluentui/react-dialog';
-import { useDialogActionsStyles_unstable } from '@fluentui/react-dialog';
-import { useDialogBody_unstable } from '@fluentui/react-dialog';
-import { useDialogBodyStyles_unstable } from '@fluentui/react-dialog';
-import { useDialogStyles_unstable } from '@fluentui/react-dialog';
-import { useDialogSurface_unstable } from '@fluentui/react-dialog';
-import { useDialogSurfaceStyles_unstable } from '@fluentui/react-dialog';
-import { useDialogTitle_unstable } from '@fluentui/react-dialog';
-import { useDialogTitleStyles_unstable } from '@fluentui/react-dialog';
-import { useDialogTrigger_unstable } from '@fluentui/react-dialog';
import { useDropdown_unstable } from '@fluentui/react-combobox';
import { useDropdownStyles_unstable } from '@fluentui/react-combobox';
+import { useField_unstable } from '@fluentui/react-field';
+import { useFieldStyles_unstable } from '@fluentui/react-field';
import { useIsOverflowGroupVisible } from '@fluentui/react-overflow';
import { useIsOverflowItemVisible } from '@fluentui/react-overflow';
import { useListbox_unstable } from '@fluentui/react-combobox';
@@ -254,22 +270,30 @@ import { useOptionGroup_unstable } from '@fluentui/react-combobox';
import { useOptionGroupStyles_unstable } from '@fluentui/react-combobox';
import { useOptionStyles_unstable } from '@fluentui/react-combobox';
import { useOverflowMenu } from '@fluentui/react-overflow';
+import { usePersona_unstable } from '@fluentui/react-persona';
+import { usePersonaStyles_unstable } from '@fluentui/react-persona';
+import { useProgress_unstable } from '@fluentui/react-progress';
+import { useProgressStyles_unstable } from '@fluentui/react-progress';
import { useSelect_unstable } from '@fluentui/react-select';
+import { useSelection } from '@fluentui/react-table';
import { useSelectStyles_unstable } from '@fluentui/react-select';
+import { useSort } from '@fluentui/react-table';
+import { useTable } from '@fluentui/react-table';
import { useTable_unstable } from '@fluentui/react-table';
import { useTableBody_unstable } from '@fluentui/react-table';
import { useTableBodyStyles_unstable } from '@fluentui/react-table';
import { useTableCell_unstable } from '@fluentui/react-table';
import { useTableCellActions_unstable } from '@fluentui/react-table';
import { useTableCellActionsStyles_unstable } from '@fluentui/react-table';
+import { useTableCellLayout_unstable } from '@fluentui/react-table';
+import { useTableCellLayoutStyles_unstable } from '@fluentui/react-table';
import { useTableCellStyles_unstable } from '@fluentui/react-table';
import { useTableContext } from '@fluentui/react-table';
import { useTableHeader_unstable } from '@fluentui/react-table';
import { useTableHeaderCell_unstable } from '@fluentui/react-table';
import { useTableHeaderCellStyles_unstable } from '@fluentui/react-table';
import { useTableHeaderStyles_unstable } from '@fluentui/react-table';
-import { useTablePrimaryCell_unstable } from '@fluentui/react-table';
-import { useTablePrimaryCellStyles_unstable } from '@fluentui/react-table';
+import { UseTableOptions } from '@fluentui/react-table';
import { useTableRow_unstable } from '@fluentui/react-table';
import { useTableRowStyles_unstable } from '@fluentui/react-table';
import { useTableSelectionCell_unstable } from '@fluentui/react-table';
@@ -303,8 +327,20 @@ export { AvatarGroupItemSlots }
export { AvatarGroupItemState }
+export { AvatarGroupPopover }
+
+export { avatarGroupPopoverClassNames }
+
+export { AvatarGroupPopoverProps }
+
+export { AvatarGroupPopoverSlots }
+
+export { AvatarGroupPopoverState }
+
export { AvatarGroupProps }
+export { AvatarGroupProvider }
+
export { AvatarGroupSlots }
export { AvatarGroupState }
@@ -353,12 +389,28 @@ export { CardSlots }
export { CardState }
+export { CheckboxField }
+
+export { checkboxFieldClassNames }
+
+export { CheckboxFieldProps }
+
+export { ColumnDefinition }
+
+export { ColumnId }
+
export { Combobox }
export { comboboxClassNames }
export { ComboboxContextValues }
+export { ComboboxField }
+
+export { comboboxFieldClassNames }
+
+export { ComboboxFieldProps }
+
export { ComboboxOpenChangeData }
export { ComboboxOpenEvents }
@@ -375,72 +427,6 @@ export { DATA_OVERFLOW_MENU }
export { DATA_OVERFLOWING }
-export { Dialog }
-
-export { DialogActions }
-
-export { dialogActionsClassNames }
-
-export { DialogActionsPosition }
-
-export { DialogActionsProps }
-
-export { DialogActionsSlots }
-
-export { DialogActionsState }
-
-export { DialogBody }
-
-export { dialogBodyClassNames }
-
-export { DialogBodyProps }
-
-export { DialogBodySlots }
-
-export { DialogBodyState }
-
-export { dialogClassNames }
-
-export { DialogOpenChangeData }
-
-export { DialogOpenChangeEvent }
-
-export { DialogProps }
-
-export { DialogSlots }
-
-export { DialogState }
-
-export { DialogSurface }
-
-export { dialogSurfaceClassNames }
-
-export { DialogSurfaceProps }
-
-export { DialogSurfaceSlots }
-
-export { DialogSurfaceState }
-
-export { DialogTitle }
-
-export { dialogTitleClassNames }
-
-export { DialogTitleProps }
-
-export { DialogTitleSlots }
-
-export { DialogTitleState }
-
-export { DialogTrigger }
-
-export { DialogTriggerAction }
-
-export { DialogTriggerChildProps }
-
-export { DialogTriggerProps }
-
-export { DialogTriggerState }
-
export { Dropdown }
export { dropdownClassNames }
@@ -457,6 +443,22 @@ export { DropdownSlots }
export { DropdownState }
+export { FieldConfig }
+
+export { FieldProps }
+
+export { FieldSlots }
+
+export { FieldState }
+
+export { getFieldClassNames }
+
+export { InputField }
+
+export { inputFieldClassNames }
+
+export { InputFieldProps }
+
export { Listbox }
export { listboxClassNames }
@@ -497,12 +499,46 @@ export { OverflowItemProps }
export { OverflowProps }
+export { PartitionAvatarGroupItems }
+
+export { partitionAvatarGroupItems }
+
+export { PartitionAvatarGroupItemsOptions }
+
+export { Persona }
+
+export { personaClassNames }
+
+export { PersonaProps }
+
+export { PersonaSlots }
+
+export { PersonaState }
+
+export { Progress }
+
+export { progressClassNames }
+
+export { ProgressProps }
+
+export { ProgressSlots }
+
+export { ProgressState }
+
+export { RadioGroupField }
+
+export { radioGroupFieldClassNames }
+
+export { RadioGroupFieldProps }
+
export { renderAlert_unstable }
export { renderAvatarGroup_unstable }
export { renderAvatarGroupItem_unstable }
+export { renderAvatarGroupPopover_unstable }
+
export { renderCard_unstable }
export { renderCardFooter_unstable }
@@ -513,26 +549,20 @@ export { renderCardPreview_unstable }
export { renderCombobox_unstable }
-export { renderDialog_unstable }
-
-export { renderDialogActions_unstable }
-
-export { renderDialogBody_unstable }
-
-export { renderDialogSurface_unstable }
-
-export { renderDialogTitle_unstable }
-
-export { renderDialogTrigger_unstable }
-
export { renderDropdown_unstable }
+export { renderField_unstable }
+
export { renderListbox_unstable }
export { renderOption_unstable }
export { renderOptionGroup_unstable }
+export { renderPersona_unstable }
+
+export { renderProgress_unstable }
+
export { renderSelect_unstable }
export { renderTable_unstable }
@@ -543,30 +573,58 @@ export { renderTableCell_unstable }
export { renderTableCellActions_unstable }
+export { renderTableCellLayout_unstable }
+
export { renderTableHeader_unstable }
export { renderTableHeaderCell_unstable }
-export { renderTablePrimaryCell_unstable }
-
export { renderTableRow_unstable }
export { renderTableSelectionCell_unstable }
export { renderToolbar_unstable }
+export { RowId }
+
+export { RowState }
+
export { Select }
export { selectClassNames }
+export { SelectField }
+
+export { selectFieldClassNames }
+
+export { SelectFieldProps }
+
export { SelectProps }
export { SelectSlots }
export { SelectState }
+export { SliderField }
+
+export { sliderFieldClassNames }
+
+export { SliderFieldProps }
+
export { SortDirection }
+export { SpinButtonField }
+
+export { spinButtonFieldClassNames }
+
+export { SpinButtonFieldProps }
+
+export { SwitchField }
+
+export { switchFieldClassNames }
+
+export { SwitchFieldProps }
+
export { Table }
export { TableBody }
@@ -585,6 +643,8 @@ export { TableCell }
export { TableCellActions }
+export { tableCellActionsClassNames }
+
export { TableCellActionsProps }
export { TableCellActionsSlots }
@@ -595,6 +655,10 @@ export { tableCellClassName }
export { tableCellClassNames }
+export { TableCellLayout }
+
+export { tableCellLayoutClassNames }
+
export { TableCellProps }
export { TableCellSlots }
@@ -635,14 +699,6 @@ export { TableHeaderSlots }
export { TableHeaderState }
-export { TablePrimaryCell }
-
-export { TablePrimaryCellProps }
-
-export { TablePrimaryCellSlots }
-
-export { TablePrimaryCellState }
-
export { TableProps }
export { TableRow }
@@ -667,10 +723,23 @@ export { TableSelectionCellSlots }
export { TableSelectionCellState }
+export { TableSelectionState }
+
export { TableSlots }
+export { TableSortState }
+
+export { TableState as HeadlessTableState }
export { TableState }
+export { TableStatePlugin }
+
+export { TextareaField }
+
+export { textareaFieldClassNames }
+
+export { TextareaFieldProps }
+
export { Toolbar }
export { ToolbarButton }
@@ -709,10 +778,16 @@ export { useAlertStyles_unstable }
export { useAvatarGroup_unstable }
+export { useAvatarGroupContext_unstable }
+
export { useAvatarGroupItem_unstable }
export { useAvatarGroupItemStyles_unstable }
+export { useAvatarGroupPopover_unstable }
+
+export { useAvatarGroupPopoverStyles_unstable }
+
export { useAvatarGroupStyles_unstable }
export { useCard_unstable }
@@ -735,32 +810,14 @@ export { useCombobox_unstable }
export { useComboboxStyles_unstable }
-export { useDialog_unstable }
-
-export { useDialogActions_unstable }
-
-export { useDialogActionsStyles_unstable }
-
-export { useDialogBody_unstable }
-
-export { useDialogBodyStyles_unstable }
-
-export { useDialogStyles_unstable }
-
-export { useDialogSurface_unstable }
-
-export { useDialogSurfaceStyles_unstable }
-
-export { useDialogTitle_unstable }
-
-export { useDialogTitleStyles_unstable }
-
-export { useDialogTrigger_unstable }
-
export { useDropdown_unstable }
export { useDropdownStyles_unstable }
+export { useField_unstable }
+
+export { useFieldStyles_unstable }
+
export { useIsOverflowGroupVisible }
export { useIsOverflowItemVisible }
@@ -779,10 +836,24 @@ export { useOptionStyles_unstable }
export { useOverflowMenu }
+export { usePersona_unstable }
+
+export { usePersonaStyles_unstable }
+
+export { useProgress_unstable }
+
+export { useProgressStyles_unstable }
+
export { useSelect_unstable }
+export { useSelection }
+
export { useSelectStyles_unstable }
+export { useSort }
+
+export { useTable }
+
export { useTable_unstable }
export { useTableBody_unstable }
@@ -795,6 +866,10 @@ export { useTableCellActions_unstable }
export { useTableCellActionsStyles_unstable }
+export { useTableCellLayout_unstable }
+
+export { useTableCellLayoutStyles_unstable }
+
export { useTableCellStyles_unstable }
export { useTableContext }
@@ -807,9 +882,7 @@ export { useTableHeaderCellStyles_unstable }
export { useTableHeaderStyles_unstable }
-export { useTablePrimaryCell_unstable }
-
-export { useTablePrimaryCellStyles_unstable }
+export { UseTableOptions }
export { useTableRow_unstable }
diff --git a/packages/react-components/react-components/package.json b/packages/react-components/react-components/package.json
index 51660f98cf3bbf..78156b081bb705 100644
--- a/packages/react-components/react-components/package.json
+++ b/packages/react-components/react-components/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/react-components",
- "version": "9.2.0",
+ "version": "9.6.1",
"description": "Suite package for converged React components",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -32,49 +32,53 @@
"react-hook-form": "^5.7.2"
},
"dependencies": {
- "@fluentui/react-accordion": "^9.0.4",
- "@fluentui/react-alert": "9.0.0-beta.8",
- "@fluentui/react-avatar": "^9.0.4",
- "@fluentui/react-badge": "^9.0.4",
- "@fluentui/react-button": "^9.1.0",
- "@fluentui/react-card": "9.0.0-beta.24",
- "@fluentui/react-checkbox": "^9.0.4",
- "@fluentui/react-combobox": "^9.0.0-beta.8",
- "@fluentui/react-dialog": "^9.0.0-beta.7",
- "@fluentui/react-divider": "^9.0.4",
- "@fluentui/react-image": "^9.0.4",
- "@fluentui/react-input": "^9.0.4",
- "@fluentui/react-label": "^9.0.4",
- "@fluentui/react-link": "^9.0.4",
- "@fluentui/react-menu": "^9.0.4",
- "@fluentui/react-overflow": "9.0.0-beta.9",
- "@fluentui/react-popover": "^9.0.4",
- "@fluentui/react-positioning": "^9.1.2",
- "@fluentui/react-provider": "^9.1.0",
- "@fluentui/react-radio": "^9.0.4",
- "@fluentui/react-select": "9.0.0-beta.8",
- "@fluentui/react-shared-contexts": "^9.0.0",
- "@fluentui/react-slider": "^9.0.3",
- "@fluentui/react-spinbutton": "^9.0.0",
- "@fluentui/react-spinner": "^9.0.4",
- "@fluentui/react-switch": "^9.0.4",
- "@fluentui/react-table": "9.0.0-alpha.1",
- "@fluentui/react-tabs": "^9.0.4",
- "@fluentui/react-tabster": "^9.1.0",
- "@fluentui/react-textarea": "^9.0.4",
- "@fluentui/react-theme": "^9.0.0",
- "@fluentui/react-toolbar": "9.0.0-beta.5",
- "@fluentui/react-tooltip": "^9.0.4",
- "@fluentui/react-utilities": "^9.0.2",
- "@fluentui/react-text": "^9.0.4",
- "@griffel/react": "^1.3.0",
+ "@fluentui/react-accordion": "^9.0.9",
+ "@fluentui/react-alert": "9.0.0-beta.15",
+ "@fluentui/react-avatar": "^9.2.4",
+ "@fluentui/react-badge": "^9.0.10",
+ "@fluentui/react-button": "^9.1.6",
+ "@fluentui/react-card": "9.0.0-beta.30",
+ "@fluentui/react-checkbox": "^9.0.10",
+ "@fluentui/react-combobox": "^9.0.0-beta.13",
+ "@fluentui/react-dialog": "^9.0.3",
+ "@fluentui/react-divider": "^9.1.2",
+ "@fluentui/react-field": "9.0.0-alpha.6",
+ "@fluentui/react-image": "^9.0.9",
+ "@fluentui/react-input": "^9.2.3",
+ "@fluentui/react-label": "^9.0.8",
+ "@fluentui/react-link": "^9.0.9",
+ "@fluentui/react-menu": "^9.3.1",
+ "@fluentui/react-overflow": "9.0.0-beta.12",
+ "@fluentui/react-persona": "9.1.0-beta.1",
+ "@fluentui/react-portal": "^9.0.8",
+ "@fluentui/react-popover": "^9.2.1",
+ "@fluentui/react-positioning": "^9.2.2",
+ "@fluentui/react-progress": "9.0.0-alpha.3",
+ "@fluentui/react-provider": "^9.1.5",
+ "@fluentui/react-radio": "^9.0.9",
+ "@fluentui/react-select": "9.0.0-beta.12",
+ "@fluentui/react-shared-contexts": "^9.0.2",
+ "@fluentui/react-slider": "^9.0.8",
+ "@fluentui/react-spinbutton": "^9.0.6",
+ "@fluentui/react-spinner": "^9.0.8",
+ "@fluentui/react-switch": "^9.0.9",
+ "@fluentui/react-table": "9.0.0-alpha.8",
+ "@fluentui/react-tabs": "^9.0.9",
+ "@fluentui/react-tabster": "^9.2.0",
+ "@fluentui/react-textarea": "^9.1.3",
+ "@fluentui/react-theme": "^9.1.1",
+ "@fluentui/react-toolbar": "9.0.0-beta.11",
+ "@fluentui/react-tooltip": "^9.0.9",
+ "@fluentui/react-utilities": "^9.1.2",
+ "@fluentui/react-text": "^9.1.4",
+ "@griffel/react": "^1.4.1",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0",
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0",
"scheduler": "^0.19.0 || ^0.20.0"
},
"beachball": {
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Accordion.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Accordion.stories.tsx
index 912310877d17d1..80ef90767eec44 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/Accordion.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Accordion.stories.tsx
@@ -8,68 +8,79 @@ import {
Button,
Input,
Label,
+ Radio,
+ RadioGroup,
+ Checkbox,
} from '@fluentui/react-components';
import { Scenario } from './utils';
-export const PersonalFormAccordionAccessibilityScenario: React.FunctionComponent = () => {
+export const PersonalFormAccordion = () => {
+ const [isSubmitted, setIsSubmitted] = React.useState(false);
+
+ React.useEffect(() => {
+ if (isSubmitted) {
+ document.getElementById('formSubmittedText')?.focus();
+ }
+ }, [isSubmitted]);
+
+ const onSubmit = (event: React.BaseSyntheticEvent) => {
+ event.preventDefault();
+ setIsSubmitted(true);
+ };
+
return (
Personal form
-
+ {!isSubmitted ? (
+
+ ) : (
+
+ The form would have been submitted.
+
+ )}
);
};
-
-export default {
- title: 'Accessibility Scenarios / Personal form accordion',
- id: 'accordion-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/AccordionFaq.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/AccordionFaq.stories.tsx
index 4c1852f5f442f1..5465b300647192 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/AccordionFaq.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/AccordionFaq.stories.tsx
@@ -4,7 +4,7 @@ import { Accordion, AccordionHeader, AccordionItem, AccordionPanel } from '@flue
import { Scenario } from './utils';
-export const FAQAccordionAccessibilityScenario: React.FunctionComponent = () => {
+export const FAQAccordion: React.FunctionComponent = () => {
return (
Frequently asked questions about Windows
@@ -53,8 +53,3 @@ export const FAQAccordionAccessibilityScenario: React.FunctionComponent = () =>
);
};
-
-export default {
- title: 'Accessibility Scenarios / FAQ accordion',
- id: 'accordion-faq-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Button.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Button.stories.tsx
index b352a423971106..e0edc38debd7f1 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/Button.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Button.stories.tsx
@@ -4,8 +4,7 @@ import { Button } from '@fluentui/react-components';
import { Scenario } from './utils';
-export const MessengerButtonsAccessibilityScenario: React.FunctionComponent = () => {
- const [sendButtonDisabled, setSendButtonDisabled] = React.useState(true);
+export const MessengerButtons: React.FunctionComponent = () => {
const [deleteButtonDisabled, setDeleteButtonDisabled] = React.useState(true);
const [increaseFontButtonDisabled, setIncreaseFontButtonDisabled] = React.useState(undefined);
const [decreaseFontButtonDisabled, setDecreaseFontButtonDisabled] = React.useState(true);
@@ -23,13 +22,16 @@ export const MessengerButtonsAccessibilityScenario: React.FunctionComponent = ()
const resetMessage = () => {
setMessage('');
- setSendButtonDisabled(true);
setDeleteButtonDisabled(true);
};
const onSendButtonClick = () => {
+ if (message.length > 0) {
+ setStatusText('Message has been sent.');
+ } else {
+ setStatusText('Please type a message.');
+ }
resetMessage();
- setStatusText('Message has been sent.');
};
const onDeleteButtonClick = () => {
resetMessage();
@@ -59,11 +61,9 @@ export const MessengerButtonsAccessibilityScenario: React.FunctionComponent = ()
const onMessageTextareaChange = (event: React.ChangeEvent) => {
const value = event.target.value;
if (value.length > 0) {
- setSendButtonDisabled(undefined);
setDeleteButtonDisabled(undefined);
setStatusText('');
} else {
- setSendButtonDisabled(true);
setDeleteButtonDisabled(true);
}
setMessage(value);
@@ -71,38 +71,28 @@ export const MessengerButtonsAccessibilityScenario: React.FunctionComponent = ()
return (
-
- Send
-
-
- Delete
-
Increase font size
Decrease font size
-
-
-
-
- {statusText}
-
+
+ Send
+
+ Delete
+
+
+ {statusText}
);
};
-
-export default {
- title: 'Accessibility Scenarios / Messenger buttons',
- id: 'button-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Checkbox.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Checkbox.stories.tsx
new file mode 100644
index 00000000000000..7bfcf4ef4bc2ca
--- /dev/null
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Checkbox.stories.tsx
@@ -0,0 +1,98 @@
+import * as React from 'react';
+
+import { Button, Checkbox, CheckboxOnChangeData, Label } from '@fluentui/react-components';
+
+import { Scenario } from './utils';
+
+export const QuestionnaireAboutFoodCheckboxes: React.FunctionComponent = () => {
+ const [isAppleSelected, setIsAppleSelected] = React.useState(false);
+ const [isBananaSelected, setIsBananaSelected] = React.useState(false);
+ const [isOrangeSelected, setIsOrangeSelected] = React.useState(false);
+ const [isSpecialDietSelected, setIsSpecialDietSelected] = React.useState(false);
+ const [isSubmitted, setIsSubmitted] = React.useState(false);
+
+ const getSpecialDietDisabled = () => {
+ return isSpecialDietSelected ? false : true;
+ };
+
+ React.useEffect(() => {
+ if (isSubmitted) {
+ document.getElementById('formSubmittedText')?.focus();
+ }
+ }, [isSubmitted]);
+
+ const onSubmit = (event: React.BaseSyntheticEvent) => {
+ event.preventDefault();
+ setIsSubmitted(true);
+ };
+
+ return (
+
+ Questionnaire about food
+ {!isSubmitted ? (
+
+ ) : (
+
+ The form would have been submitted.
+
+ )}
+
+ );
+};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Input.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Input.stories.tsx
index 93d83cda652773..41ab79a42ff1b8 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/Input.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Input.stories.tsx
@@ -1,6 +1,6 @@
import * as React from 'react';
-import { Button, Input, Label } from '@fluentui/react-components';
+import { Button, Checkbox, Input, Label } from '@fluentui/react-components';
import { Scenario } from './utils';
@@ -16,12 +16,34 @@ const regexes = {
hasLowercaseLetter: /^\S*[a-z]\S*$/,
hasUppercaseLetter: /^\S*[A-Z]\S*$/,
hasSpecialChar: /^\S*[^0-9a-zA-ZÀ-ÖØ-öø-ÿěščřžďťňůĚŠČŘŽĎŤŇŮ\s]\S*$/,
+ validDate: /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/,
+ // eslint-disable-next-line @fluentui/max-len
+ validEmail: /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,
+};
+
+const generateTicketNumber = (): string => {
+ let char;
+ let hash = 0;
+ const random = Math.random().toString();
+ for (let i = 0; i < random.length; i++) {
+ char = random.charCodeAt(i);
+ //eslint-disable-next-line no-bitwise
+ hash = (hash << 5) - hash + char;
+ //eslint-disable-next-line no-bitwise
+ hash |= 0; // Convert to 32bit integer
+ }
+ hash += 2147483647; // Convert to positive integer
+ return hash.toString().padStart(8, '0').substring(2);
};
+let isSubmitting = false;
+
interface FormInputs {
fullName: string;
nickname: string;
password: string;
+ birthDate: string;
+ email: string;
}
interface FormValidation {
@@ -46,9 +68,17 @@ const ValidationMessage: React.FC = ({ id, formValidatio
return () => formValidation.unsubscribe(id, alert);
}, [formValidation, alert, id]);
return (
-
- {children}
-
+ <>
+ {isAlerting ? (
+
+ {children}
+
+ ) : (
+
+ {children}
+
+ )}
+ >
);
};
@@ -56,29 +86,29 @@ const useFormValidation = (
handleSubmit: (callback: OnSubmit) => (e?: React.BaseSyntheticEvent) => Promise,
) => {
const pubSub = usePubSub();
- const isSubmitting = React.useRef(false);
+ const isHandlingSubmit = React.useRef(false);
const wrappedHandleSubmit = React.useCallback(
(callback: OnSubmit) => {
const handler = handleSubmit(callback);
return async (e: React.BaseSyntheticEvent) => {
- isSubmitting.current = true;
+ isHandlingSubmit.current = true;
const result = await handler(e);
- isSubmitting.current = false;
+ isHandlingSubmit.current = false;
return result;
};
},
- [isSubmitting, handleSubmit],
+ [isHandlingSubmit, handleSubmit],
);
const onFieldValidated = React.useCallback(
(field: string) => {
- if (!isSubmitting.current) {
+ if (!isHandlingSubmit.current) {
pubSub.publish(field, 'validate');
}
return true;
},
- [isSubmitting, pubSub],
+ [isHandlingSubmit, pubSub],
);
const notifyFormFieldError = React.useCallback(
@@ -98,8 +128,8 @@ const useFormValidation = (
};
};
-const RegistrationFormInputsAccessibility = () => {
- const { control, handleSubmit, errors, formState } = useForm({
+const TicketOrderFormInputsAccessibility = () => {
+ const { control, handleSubmit, errors, formState, unregister } = useForm({
validateCriteriaMode: 'all',
mode: 'onBlur',
reValidateMode: 'onBlur',
@@ -108,20 +138,26 @@ const RegistrationFormInputsAccessibility = () => {
const formValidation = useFormValidation(handleSubmit);
const [isPasswordVisible, setIsPasswordVisible] = React.useState(false);
+ const [isSendNewsletter, setIsSendNewsletter] = React.useState(false);
const [isSubmittedAndValid, setIsSubmittedAndValid] = React.useState(false);
React.useEffect(() => {
- // If the form is submitted and has errors, focus the first error fiel, otherwise do nothing
- if (!formState.isSubmitting || formState.isValid) {
+ if (formState.isSubmitting) {
+ isSubmitting = true;
+ }
+ }, [formState]);
+
+ React.useEffect(() => {
+ // If the form is submitting and has errors, focus the first error fiel, otherwise do nothing
+ if (!isSubmitting || !formState.isSubmitted || formState.isValid) {
return;
}
+ isSubmitting = false;
+
const firstErrorName = Object.keys(errors)[0] as keyof FormInputs;
const firstErrorField = document.getElementById(firstErrorName);
-
- setTimeout(() => formValidation.notifyFormFieldError(firstErrorName), 200);
-
if (firstErrorField) {
- firstErrorField.focus();
+ setTimeout(() => firstErrorField.focus(), 500);
}
}, [errors, formState, formValidation]);
@@ -142,173 +178,266 @@ const RegistrationFormInputsAccessibility = () => {
setIsPasswordVisible(!isPasswordVisible);
};
+ const onSendNewsletterChange = (event: React.ChangeEvent) => {
+ unregister('email');
+ setIsSendNewsletter(!isSendNewsletter);
+ };
+
return (
-
- Registration form
+
+ Ticket order form
{!isSubmittedAndValid ? (
-
+ }}
+ />
+ {errors.email?.types && (
+
+ {'required' in errors.email.types ? (
+ E-mail is required.
+ ) : (
+ <>
+ E-mail is invalid. It must:
+
+ {'validEmail' in errors.email.types && Be a valid e-mail address, like name@example.com. }
+
+ >
+ )}
+
+ )}
+
+ Order ticket
+
+ >
) : (
-
+
The form is valid and would have been submitted.
)}
@@ -316,13 +445,8 @@ const RegistrationFormInputsAccessibility = () => {
);
};
-export const RegistrationFormInputsAccessibilityScenario = () => (
+export const TicketOrderFormInputs = () => (
-
+
);
-
-export default {
- title: 'Accessibility Scenarios/ Registration form inputs',
- id: 'input-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Link.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Link.stories.tsx
index 90abf8533a38f7..a98ade2a6b0587 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/Link.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Link.stories.tsx
@@ -4,7 +4,7 @@ import { Link } from '@fluentui/react-components';
import { Scenario } from './utils';
-export const SiteNavigationAccessibilityScenario: React.FunctionComponent = () => {
+export const SiteNavigationLinks: React.FunctionComponent = () => {
return (
@@ -44,8 +44,3 @@ export const SiteNavigationAccessibilityScenario: React.FunctionComponent = () =
);
};
-
-export default {
- title: 'Accessibility Scenarios/ Site navigation links',
- id: 'link-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx b/packages/react-components/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx
index 0d751da9efcefe..e71f4feed04269 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx
@@ -1,7 +1,8 @@
import { Meta } from '@storybook/addon-docs';
import { FullscreenLink } from './utils';
+export const parentPath = 'concepts-developer-accessibility-stories';
-
+
# Accessibility Scenarios
@@ -9,66 +10,92 @@ Accessibility scenarios are used to validate accessibility of components and dem
## Component: Accordion
--
--
+-
+-
## Component: Button
--
+-
-## Component: Input
+## Component: Checkbox
-
+## Component: Input
+
+-
+
## Component: Link
--
+-
## Component: Menu
--
--
+-
+-
## Component: Popover
--
+-
-## Component: Slider
+## Component: RadioGroup
-
+## Component: Slider
+
+-
+
+## Component: Spinner
+
+-
+
## Component: SplitButton
+-
+
+## Component: Switch
+
+-
+
+## Component: TabList
+
+-
+-
-
-## Component: ToggleButton
+## Component: Textarea
-
+## Component: ToggleButton
+
+-
+
## Component: Tooltip
--
+-
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Menu.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Menu.stories.tsx
index d20ef6fbe25ba2..c7b74a0d8ab6a2 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/Menu.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Menu.stories.tsx
@@ -25,7 +25,7 @@ const StatusSubmenu: React.FunctionComponent = props => {
return (
-
+
Status
@@ -58,7 +58,7 @@ type OnCheckedValueChangeCallback = (
type ProfileMenuStatus = { status: Array<'online' | 'away' | 'offline'> };
-export const ProfileMenuAccessibilityScenario: React.FunctionComponent = () => {
+export const ProfileMenu: React.FunctionComponent = () => {
const [statusCheckedValues, setStatusCheckedValues] = React.useState({ status: ['online'] });
const onStatusChange = (
event: React.MouseEvent | React.KeyboardEvent,
@@ -70,7 +70,7 @@ export const ProfileMenuAccessibilityScenario: React.FunctionComponent = () => {
return (
-
+
Profile
@@ -100,8 +100,3 @@ export const ProfileMenuAccessibilityScenario: React.FunctionComponent = () => {
);
};
-
-export default {
- title: 'Accessibility Scenarios / Profile menu',
- id: 'menu-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/MenuSplitGroup.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/MenuSplitGroup.stories.tsx
index 45379655987341..40bbd964327d2e 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/MenuSplitGroup.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/MenuSplitGroup.stories.tsx
@@ -12,11 +12,11 @@ import {
import { Scenario } from './utils';
-export const MenuWithSplitItemAccessibilityScenario: React.FunctionComponent = () => {
+export const MenuWithSplitItem: React.FunctionComponent = () => {
return (
-
+
More actions
@@ -27,7 +27,7 @@ export const MenuWithSplitItemAccessibilityScenario: React.FunctionComponent = (
Open
-
+
@@ -46,8 +46,3 @@ export const MenuWithSplitItemAccessibilityScenario: React.FunctionComponent = (
);
};
-
-export default {
- title: 'Accessibility Scenarios / Menu with split item',
- id: 'menu-splitgroup-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Popover.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Popover.stories.tsx
index 8ad9be077468f2..28c83ce623f0fd 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/Popover.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Popover.stories.tsx
@@ -1,6 +1,6 @@
import * as React from 'react';
-import { Button, Popover, PopoverSurface, PopoverTrigger } from '@fluentui/react-components';
+import { Button, Input, Label, Popover, PopoverSurface, PopoverTrigger } from '@fluentui/react-components';
import { Scenario } from './utils';
@@ -13,8 +13,8 @@ const AddPeopleContent: React.FunctionComponent = (props:
return (
<>
- Enter name, email or tag
-
+ Enter name, email or tag
+
{
setPopoverOpened(false);
@@ -26,7 +26,7 @@ const AddPeopleContent: React.FunctionComponent = (props:
);
};
-export const AddPeoplePopoverAccessibilityScenario: React.FunctionComponent = () => {
+export const AddPeoplePopover: React.FunctionComponent = () => {
const [popoverOpened, setPopoverOpened] = React.useState(false);
return (
@@ -38,7 +38,7 @@ export const AddPeoplePopoverAccessibilityScenario: React.FunctionComponent = ()
}}
trapFocus
>
-
+
Add people
@@ -49,8 +49,3 @@ export const AddPeoplePopoverAccessibilityScenario: React.FunctionComponent = ()
);
};
-
-export default {
- title: 'Accessibility Scenarios / Add people popover',
- id: 'popover-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/RadioGroup.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/RadioGroup.stories.tsx
new file mode 100644
index 00000000000000..b9ead47e571413
--- /dev/null
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/RadioGroup.stories.tsx
@@ -0,0 +1,77 @@
+import * as React from 'react';
+
+import { Button, Label, RadioGroup, Radio, RadioGroupOnChangeData } from '@fluentui/react-components';
+
+import { Scenario } from './utils';
+
+export const QuestionnaireAboutTransportationRadios: React.FunctionComponent = () => {
+ const [isDrivingAllowed, setIsDrivingAllowed] = React.useState(true);
+ const [isMotor, setIsMotor] = React.useState(false);
+ const [preferredMeans, setPreferredMeans] = React.useState('bicycle');
+ const [isSubmitted, setIsSubmitted] = React.useState(false);
+
+ const onAgeChange = (event: React.BaseSyntheticEvent, data: RadioGroupOnChangeData) => {
+ if (data.value === 'ageClass1') {
+ setIsDrivingAllowed(false);
+ if (['car', 'motorbike'].includes(preferredMeans)) {
+ setPreferredMeans('bicycle');
+ }
+ } else {
+ setIsDrivingAllowed(true);
+ }
+ };
+
+ const onPreferredMeansChange = (event: React.BaseSyntheticEvent, data: RadioGroupOnChangeData) => {
+ setPreferredMeans(data.value);
+ setIsMotor(['car', 'motorbike'].includes(data.value));
+ };
+
+ React.useEffect(() => {
+ if (isSubmitted) {
+ document.getElementById('formSubmittedText')?.focus();
+ }
+ }, [isSubmitted]);
+
+ const onSubmit = (event: React.BaseSyntheticEvent) => {
+ event.preventDefault();
+ setIsSubmitted(true);
+ };
+
+ return (
+
+ Questionnaire about transportation
+ {!isSubmitted ? (
+
+ ) : (
+
+ The form would have been submitted.
+
+ )}
+
+ );
+};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Slider.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Slider.stories.tsx
index ea61ec503a6792..efc2883d912499 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/Slider.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Slider.stories.tsx
@@ -4,7 +4,7 @@ import { Label, Slider } from '@fluentui/react-components';
import { Scenario } from './utils';
-export const SoundControlSlidersAccessibilityScenario: React.FunctionComponent = () => {
+export const SoundControlSliders: React.FunctionComponent = () => {
return (
Sound control panel
@@ -20,8 +20,3 @@ export const SoundControlSlidersAccessibilityScenario: React.FunctionComponent =
);
};
-
-export default {
- title: 'Accessibility Scenarios/ Sound control sliders',
- id: 'slider-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Spinner.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Spinner.stories.tsx
new file mode 100644
index 00000000000000..e6bf8c3e76ed10
--- /dev/null
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Spinner.stories.tsx
@@ -0,0 +1,13 @@
+import * as React from 'react';
+
+import { Spinner } from '@fluentui/react-components';
+
+import { Scenario } from './utils';
+
+export const PostsLoadingSpinner: React.FunctionComponent = () => {
+ return (
+
+
+
+ );
+};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/SplitButton.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/SplitButton.stories.tsx
index 58a1f8f0b13f2c..49fd3a1de9af66 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/SplitButton.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/SplitButton.stories.tsx
@@ -5,12 +5,11 @@ import type { MenuButtonProps } from '@fluentui/react-components';
import { Scenario } from './utils';
-export const EventReminderAccessibilityScenario: React.FunctionComponent = () => {
+export const EventReminderSplitButton: React.FunctionComponent = () => {
const [statusText, setStatusText] = React.useState(undefined);
- const statusRef = React.useRef(null);
const focusStatus = () => {
- statusRef.current!.focus();
+ document.getElementById('statusText')?.focus();
};
const onDismissButtonClick = () => {
@@ -31,12 +30,13 @@ export const EventReminderAccessibilityScenario: React.FunctionComponent = () =>
return (
+ Event reminder
{!statusText && (
<>
Your meeting starts in 10 minutes.
Dismiss
-
+
{(menuButtonProps: MenuButtonProps) => {
const extendedMenuButtonProps = {
...menuButtonProps,
@@ -85,14 +85,9 @@ export const EventReminderAccessibilityScenario: React.FunctionComponent = () =>
>
)}
-
+
{statusText &&
{statusText}
}
);
};
-
-export default {
- title: 'Accessibility Scenarios/ Event reminder split button',
- id: 'split-button-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Switch.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Switch.stories.tsx
new file mode 100644
index 00000000000000..18e3bed85c0163
--- /dev/null
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Switch.stories.tsx
@@ -0,0 +1,38 @@
+import * as React from 'react';
+
+import { Switch } from '@fluentui/react-components';
+
+import { Scenario } from './utils';
+
+export const DeviceControlsSwitches: React.FunctionComponent = () => {
+ const [hotspotSwitchDisabled, setHotSpotSwitchDisabled] = React.useState
(true);
+ const [wiFiSwitchChecked, setWiFiSwitchChecked] = React.useState(false);
+ const [hotspotSwitchChecked, setHotspotSwitchChecked] = React.useState(false);
+
+ const onWiFiSwitchClick = (event: React.MouseEvent) => {
+ setHotSpotSwitchDisabled(hotspotSwitchDisabled ? undefined : true);
+ if (wiFiSwitchChecked) {
+ setHotspotSwitchChecked(false);
+ }
+ setWiFiSwitchChecked(!wiFiSwitchChecked);
+ };
+
+ const onHotspotSwitchClick = () => {
+ setHotspotSwitchChecked(!hotspotSwitchChecked);
+ };
+
+ return (
+
+ Device controls
+ This is a basic control panel for your device
+
+
+
+
+ );
+};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/TabListHorizontal.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/TabListHorizontal.stories.tsx
new file mode 100644
index 00000000000000..450e5aa48f8e34
--- /dev/null
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/TabListHorizontal.stories.tsx
@@ -0,0 +1,99 @@
+import * as React from 'react';
+
+import {
+ Label,
+ Checkbox,
+ RadioGroup,
+ Radio,
+ TabList,
+ Tab,
+ TabValue,
+ Textarea,
+ SelectTabEvent,
+ SelectTabData,
+} from '@fluentui/react-components';
+
+import { MusicNote1Filled, InfoRegular } from '@fluentui/react-icons';
+
+import { Scenario } from './utils';
+
+export const MailSettingsHorizontalTabList: React.FunctionComponent = () => {
+ const [selectedTabValue, setSelectedTabValue] = React.useState('general');
+
+ const onTabSelect = (event: SelectTabEvent, data: SelectTabData) => {
+ setSelectedTabValue(data.value);
+ };
+
+ const GeneralPanel = React.memo(() => (
+
+
+
+
+
+
+
+
+
+
Out of office message:
+
+
+ ));
+
+ const AppearancePanel = React.memo(() => (
+
+ Select theme:
+
+
+
+
+
+ Font size:
+
+
+
+
+
+
+
+ ));
+
+ const SoundsPanel = React.memo(() => (
+
+
+
+ ));
+
+ const AboutPanel = React.memo(() => (
+
+
Mail
+
Version: 1.0.0.
+
Copyright 2022. All rights reserved.
+
+ ));
+
+ return (
+
+ Settings
+
+
+ General
+
+
+ Appearance
+
+ } aria-label="Sounds" />
+
+ Advanced
+
+ } value="about">
+ About
+
+
+
+ {selectedTabValue === 'general' && }
+ {selectedTabValue === 'appearance' && }
+ {selectedTabValue === 'sounds' && }
+ {selectedTabValue === 'about' && }
+
+ );
+};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/TabListOverflow.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/TabListOverflow.stories.tsx
new file mode 100644
index 00000000000000..abaff84e9b0235
--- /dev/null
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/TabListOverflow.stories.tsx
@@ -0,0 +1,223 @@
+import * as React from 'react';
+
+import { makeStyles, mergeClasses, shorthands } from '@fluentui/react-components';
+
+import {
+ tokens,
+ Button,
+ Label,
+ Checkbox,
+ RadioGroup,
+ Radio,
+ TabList,
+ Tab,
+ TabValue,
+ Textarea,
+ Menu,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+} from '@fluentui/react-components';
+import { Overflow, OverflowItem, useIsOverflowItemVisible, useOverflowMenu } from '@fluentui/react-overflow';
+
+import { MusicNote1Filled, InfoRegular, MoreHorizontalRegular } from '@fluentui/react-icons';
+
+import { Scenario } from './utils';
+
+type SettingsTab = {
+ id: string;
+ name: string | undefined;
+ icon: React.ReactElement | undefined;
+ disabled: boolean;
+};
+
+const tabs: SettingsTab[] = [
+ {
+ id: 'general',
+ name: 'General',
+ icon: undefined,
+ disabled: false,
+ },
+ {
+ id: 'appearance',
+ name: 'Appearance',
+ icon: undefined,
+ disabled: false,
+ },
+ {
+ id: 'sounds',
+ name: 'Sounds',
+ icon: ,
+ disabled: false,
+ },
+ {
+ id: 'advanced',
+ name: 'Advanced',
+ icon: undefined,
+ disabled: true,
+ },
+ {
+ id: 'about',
+ name: 'About',
+ icon: ,
+ disabled: false,
+ },
+];
+
+type OverflowMenuItemProps = {
+ tab: SettingsTab;
+ onClick: React.MouseEventHandler;
+};
+
+const OverflowMenuItem = (props: OverflowMenuItemProps) => {
+ const { tab, onClick } = props;
+ const isVisible = useIsOverflowItemVisible(tab.id);
+
+ if (isVisible) {
+ return null;
+ }
+
+ return (
+
+ {tab.name}
+
+ );
+};
+
+type OverflowMenuProps = {
+ onTabSelect?: (tabId: string) => void;
+};
+
+const OverflowMenu = (props: OverflowMenuProps) => {
+ const { onTabSelect } = props;
+ const { ref, isOverflowing, overflowCount } = useOverflowMenu();
+
+ const onItemClick = (tabId: string) => {
+ onTabSelect?.(tabId);
+ };
+
+ if (!isOverflowing) {
+ return null;
+ }
+
+ return (
+
+
+ }
+ role="tab"
+ aria-label={`${overflowCount} more tabs`}
+ aria-selected="false"
+ />
+
+
+
+ {tabs.map(tab => (
+ onItemClick(tab.id)} />
+ ))}
+
+
+
+ );
+};
+
+const useSettingsStyles = makeStyles({
+ settings: {
+ backgroundColor: tokens.colorNeutralBackground2,
+ ...shorthands.overflow('hidden'),
+ ...shorthands.padding('5px'),
+ zIndex: 0, //stop the browser resize handle from piercing the overflow menu
+ },
+ horizontal: {
+ height: 'fit-content',
+ minWidth: '150px',
+ resize: 'horizontal',
+ width: '300px',
+ },
+});
+
+export const MailSettingsOverflowTabList: React.FunctionComponent = () => {
+ const styles = useSettingsStyles();
+
+ const [selectedTabValue, setSelectedTabValue] = React.useState('general');
+
+ const onTabSelect = (tabId: string) => {
+ setSelectedTabValue(tabId);
+ };
+
+ const GeneralPanel = React.memo(() => (
+
+
+
+
+
+
+
+
+
+
Out of office message:
+
+
+ ));
+
+ const AppearancePanel = React.memo(() => (
+
+ Select theme:
+
+
+
+
+
+ Font size:
+
+
+
+
+
+
+
+ ));
+
+ const SoundsPanel = React.memo(() => (
+
+
+
+ ));
+
+ const AboutPanel = React.memo(() => (
+
+
Mail
+
Version: 1.0.0.
+
Copyright 2022. All rights reserved.
+
+ ));
+
+ return (
+
+ Settings
+
+
+ onTabSelect(data.value as string)}>
+ {tabs.map(tab => {
+ return (
+
+ {tab.icon}} disabled={tab.disabled}>
+ {tab.name}
+
+
+ );
+ })}
+
+
+
+
+
+ {selectedTabValue === 'general' && }
+ {selectedTabValue === 'appearance' && }
+ {selectedTabValue === 'sounds' && }
+ {selectedTabValue === 'about' && }
+
+ );
+};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/TabListVertical.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/TabListVertical.stories.tsx
new file mode 100644
index 00000000000000..f2602f9352bde5
--- /dev/null
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/TabListVertical.stories.tsx
@@ -0,0 +1,99 @@
+import * as React from 'react';
+
+import {
+ Label,
+ Checkbox,
+ RadioGroup,
+ Radio,
+ Textarea,
+ TabList,
+ Tab,
+ TabValue,
+ SelectTabEvent,
+ SelectTabData,
+} from '@fluentui/react-components';
+
+import { MusicNote1Filled, InfoRegular } from '@fluentui/react-icons';
+
+import { Scenario } from './utils';
+
+export const MailSettingsVerticalTabList: React.FunctionComponent = () => {
+ const [selectedTabValue, setSelectedTabValue] = React.useState('general');
+
+ const onTabSelect = (event: SelectTabEvent, data: SelectTabData) => {
+ setSelectedTabValue(data.value);
+ };
+
+ const GeneralPanel = React.memo(() => (
+
+
+
+
+
+
+
+
+
+
Out of office message:
+
+
+ ));
+
+ const AppearancePanel = React.memo(() => (
+
+ Select theme:
+
+
+
+
+
+ Font size:
+
+
+
+
+
+
+
+ ));
+
+ const SoundsPanel = React.memo(() => (
+
+
+
+ ));
+
+ const AboutPanel = React.memo(() => (
+
+
Mail
+
Version: 1.0.0.
+
Copyright 2022. All rights reserved.
+
+ ));
+
+ return (
+
+ Settings
+
+
+ General
+
+
+ Appearance
+
+ } aria-label="Sounds" />
+
+ Advanced
+
+ } value="about">
+ About
+
+
+
+ {selectedTabValue === 'general' && }
+ {selectedTabValue === 'appearance' && }
+ {selectedTabValue === 'sounds' && }
+ {selectedTabValue === 'about' && }
+
+ );
+};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Textarea.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Textarea.stories.tsx
new file mode 100644
index 00000000000000..49a4779024aa46
--- /dev/null
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Textarea.stories.tsx
@@ -0,0 +1,375 @@
+import * as React from 'react';
+
+import { Button, Textarea, Checkbox, Label } from '@fluentui/react-components';
+
+import { Scenario } from './utils';
+
+import { useForm, Controller, OnSubmit } from 'react-hook-form';
+import { usePubSub, PubSubProvider, Handler } from '@cactuslab/usepubsub';
+
+const generateCustomerId = (): string => {
+ let char;
+ let hash = 0;
+ const random = Math.random().toString();
+ for (let i = 0; i < random.length; i++) {
+ char = random.charCodeAt(i);
+ //eslint-disable-next-line no-bitwise
+ hash = (hash << 5) - hash + char;
+ //eslint-disable-next-line no-bitwise
+ hash |= 0; // Convert to 32bit integer
+ }
+ hash += 2147483647; // Convert to positive integer
+ return hash.toString().padStart(10, '0').substring(2);
+};
+
+let isSubmitting = false;
+
+interface FormTextareas {
+ knowledge: string;
+ effort: string;
+ problemNotSolved: string;
+ otherComments: string;
+ satisfaction: string;
+}
+
+interface FormValidation {
+ subscribe: (channel: string, handler: Handler) => () => void;
+ unsubscribe: (channel: string, handler: Handler) => void;
+}
+
+interface ValidationMessageProps {
+ id: string;
+ formValidation: FormValidation;
+}
+const ValidationMessage: React.FC = ({ id, formValidation, children }) => {
+ const [isAlerting, setIsAlerting] = React.useState(true);
+
+ const alert = React.useCallback(() => {
+ setIsAlerting(false);
+ setTimeout(() => setIsAlerting(true), 200);
+ }, [setIsAlerting]);
+
+ React.useEffect(() => {
+ formValidation.subscribe(id, alert);
+ return () => formValidation.unsubscribe(id, alert);
+ }, [formValidation, alert, id]);
+ return (
+ <>
+ {isAlerting ? (
+
+ {children}
+
+ ) : (
+
+ {children}
+
+ )}
+ >
+ );
+};
+
+const useFormValidation = (
+ handleSubmit: (callback: OnSubmit) => (e?: React.BaseSyntheticEvent) => Promise,
+) => {
+ const pubSub = usePubSub();
+ const isHandlingSubmit = React.useRef(false);
+
+ const wrappedHandleSubmit = React.useCallback(
+ (callback: OnSubmit) => {
+ const handler = handleSubmit(callback);
+ return async (e: React.BaseSyntheticEvent) => {
+ isHandlingSubmit.current = true;
+ const result = await handler(e);
+ isHandlingSubmit.current = false;
+ return result;
+ };
+ },
+ [isHandlingSubmit, handleSubmit],
+ );
+
+ const onFieldValidated = React.useCallback(
+ (field: string) => {
+ if (!isHandlingSubmit.current) {
+ pubSub.publish(field, 'validate');
+ }
+ return true;
+ },
+ [isHandlingSubmit, pubSub],
+ );
+
+ const notifyFormFieldError = React.useCallback(
+ (field: string) => {
+ pubSub.publish(field, 'validate');
+ return true;
+ },
+ [pubSub],
+ );
+
+ return {
+ subscribe: pubSub.subscribe,
+ unsubscribe: pubSub.unsubscribe,
+ onFieldValidated,
+ handleSubmit: wrappedHandleSubmit,
+ notifyFormFieldError,
+ };
+};
+
+const QuestionnaireAboutCustomerExperienceAccessibility = () => {
+ const { control, handleSubmit, errors, formState, unregister } = useForm({
+ validateCriteriaMode: 'all',
+ mode: 'onBlur',
+ reValidateMode: 'onBlur',
+ });
+
+ const formValidation = useFormValidation(handleSubmit);
+
+ const [isProblemNotSolved, setIsProblemNotSolved] = React.useState(false);
+ const [isSubmittedAndValid, setIsSubmittedAndValid] = React.useState(false);
+
+ React.useEffect(() => {
+ if (formState.isSubmitting) {
+ isSubmitting = true;
+ }
+ }, [formState]);
+
+ React.useEffect(() => {
+ // If the form is submitting and has errors, focus the first error fiel, otherwise do nothing
+ if (!isSubmitting || !formState.isSubmitted || formState.isValid) {
+ return;
+ }
+ isSubmitting = false;
+
+ const firstErrorName = Object.keys(errors)[0] as keyof FormTextareas;
+ const firstErrorField = document.getElementById(firstErrorName);
+
+ if (firstErrorField) {
+ setTimeout(() => firstErrorField.focus(), 500);
+ }
+ }, [errors, formState, formValidation]);
+
+ React.useEffect(() => {
+ if (isSubmittedAndValid) {
+ document.getElementById('validMessage')?.focus();
+ }
+ }, [isSubmittedAndValid]);
+
+ const onSubmit = (data: FormTextareas, event?: React.BaseSyntheticEvent) => {
+ event?.preventDefault();
+ if (formState.isValid) {
+ setIsSubmittedAndValid(true);
+ }
+ };
+
+ const onProblemNotSolvedChange = (event: React.ChangeEvent) => {
+ unregister('problemNotSolved');
+ setIsProblemNotSolved(!isProblemNotSolved);
+ };
+
+ return (
+
+ Questionnaire about telepohne customer experience
+ {!isSubmittedAndValid ? (
+ <>
+
+ Please answer the questions below regarding your last experience as a customer of our telephone banking
+ services.
+
+
+ >
+ ) : (
+
+ The form is valid and would have been submitted.
+
+ )}
+
+ );
+};
+
+export const QuestionnaireAboutCustomerExperienceTextareas: React.FunctionComponent = () => (
+
+
+
+);
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/ToggleButton.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/ToggleButton.stories.tsx
index e8ad7f75bc90d0..6a3fead7f6f70c 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/ToggleButton.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/ToggleButton.stories.tsx
@@ -4,7 +4,7 @@ import { ToggleButton } from '@fluentui/react-components';
import { Scenario } from './utils';
-export const DeviceControlsToggleButtonsAccessibilityScenario: React.FunctionComponent = () => {
+export const DeviceControlsToggleButtons: React.FunctionComponent = () => {
const [hotspotButtonDisabled, setHotspotButtonDisabled] = React.useState(true);
const [wiFiButtonPressed, setWiFiButtonPressed] = React.useState(false);
const [hotspotButtonPressed, setHotspotButtonPressed] = React.useState(false);
@@ -37,8 +37,3 @@ export const DeviceControlsToggleButtonsAccessibilityScenario: React.FunctionCom
);
};
-
-export default {
- title: 'Accessibility Scenarios/ Device controls toggle buttons',
- id: 'toggle-button-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/Tooltip.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/Tooltip.stories.tsx
index e851ae75256d6f..5c9dfe0b85de0d 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/Tooltip.stories.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/Tooltip.stories.tsx
@@ -6,9 +6,10 @@ import { TextItalic24Regular, TextUnderline24Regular, TextBold24Regular } from '
import { Scenario } from './utils';
-export const ButtonsWithTooltipAccessibilityScenario: React.FunctionComponent = () => {
+export const ButtonsWithTooltip: React.FunctionComponent = () => {
return (
+ Tooltip variants
Tooltips for text formatting icon-only buttons
} />
@@ -29,8 +30,3 @@ export const ButtonsWithTooltipAccessibilityScenario: React.FunctionComponent =
);
};
-
-export default {
- title: 'Accessibility Scenarios/ Buttons with tooltip',
- id: 'tooltip-accessibility-scenario',
-};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/index.stories.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/index.stories.tsx
new file mode 100644
index 00000000000000..8f50cd7590c4b2
--- /dev/null
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/index.stories.tsx
@@ -0,0 +1,24 @@
+export { PersonalFormAccordion } from './Accordion.stories';
+export { FAQAccordion } from './AccordionFaq.stories';
+export { MessengerButtons } from './Button.stories';
+export { QuestionnaireAboutFoodCheckboxes } from './Checkbox.stories';
+export { TicketOrderFormInputs } from './Input.stories';
+export { SiteNavigationLinks } from './Link.stories';
+export { ProfileMenu } from './Menu.stories';
+export { MenuWithSplitItem } from './MenuSplitGroup.stories';
+export { AddPeoplePopover } from './Popover.stories';
+export { QuestionnaireAboutTransportationRadios } from './RadioGroup.stories';
+export { SoundControlSliders } from './Slider.stories';
+export { PostsLoadingSpinner } from './Spinner.stories';
+export { EventReminderSplitButton } from './SplitButton.stories';
+export { DeviceControlsSwitches } from './Switch.stories';
+export { MailSettingsHorizontalTabList } from './TabListHorizontal.stories';
+export { MailSettingsOverflowTabList } from './TabListOverflow.stories';
+export { MailSettingsVerticalTabList } from './TabListVertical.stories';
+export { QuestionnaireAboutCustomerExperienceTextareas } from './Textarea.stories';
+export { DeviceControlsToggleButtons } from './ToggleButton.stories';
+export { ButtonsWithTooltip } from './Tooltip.stories';
+
+export default {
+ title: 'Concepts/Developer/Accessibility/Stories',
+};
diff --git a/packages/react-components/react-components/src/AccessibilityScenarios/utils.tsx b/packages/react-components/react-components/src/AccessibilityScenarios/utils.tsx
index ab1a1d301c5a9a..06438c6e95fc41 100644
--- a/packages/react-components/react-components/src/AccessibilityScenarios/utils.tsx
+++ b/packages/react-components/react-components/src/AccessibilityScenarios/utils.tsx
@@ -18,7 +18,10 @@ export const FullscreenLink = (props: FullscreenLinkProps) => (
);
export const ScenariosListLink: React.FC = props => (
-
+
{props.children}
);
diff --git a/packages/react-components/react-components/src/Concepts/Accessibility/AccessibleComponents.stories.mdx b/packages/react-components/react-components/src/Concepts/Accessibility/AccessibleComponents.stories.mdx
index f699574ab6c42f..2e9309cdf6f866 100644
--- a/packages/react-components/react-components/src/Concepts/Accessibility/AccessibleComponents.stories.mdx
+++ b/packages/react-components/react-components/src/Concepts/Accessibility/AccessibleComponents.stories.mdx
@@ -1,7 +1,7 @@
import { Meta } from '@storybook/addon-docs';
import { ScenariosListLink } from '../../AccessibilityScenarios/utils';
-
+
## Components accessibility
diff --git a/packages/react-components/react-components/src/Concepts/Icons/Icon.stories.mdx b/packages/react-components/react-components/src/Concepts/Icons/Icon.stories.mdx
index 65626d90d08b5b..25d1da8bc3622c 100644
--- a/packages/react-components/react-components/src/Concepts/Icons/Icon.stories.mdx
+++ b/packages/react-components/react-components/src/Concepts/Icons/Icon.stories.mdx
@@ -25,7 +25,63 @@ You can import the sized icons in a similar way:
import { AccessTime24Filled } from '@fluentui/react-icons';
```
+### List of available props
+
Each icon also accepts `className` and `primaryFill` props for styling.
+You can also use the `bundleIcon` method to bundle a `filled` and unfilled version of an icon and this will combine them into one icon.
+
+| - Name - | Description | Default |
+| ----------- | ---------------------------------------------------------------------------------------------------------------------- | -------------- |
+| className | Used to style the icon | - |
+| filled | Used to determine whether the filled or unfilled version of an icon is the default when `bundleIcon` is used `boolean` | - |
+| primaryFill | Used to change the primary fill of the icon | `currentColor` |
+| title | Specifies the title attribute for the svg | - |
+
+### Example
+
+In this example, the `bundleIcon` method is used to combine the `regular` and `filled` versions of the `AccessTime` icons
+and toggle between them on hover.
+
+```tsx
+import * as React from 'react';
+import {
+ AccessTimeFilled,
+ AccessTimeRegular,
+ bundleIcon,
+ iconFilledClassName,
+ iconRegularClassName,
+} from '@fluentui/react-icons';
+import { makeStyles } from '@fluentui/react-components';
+
+const iconStyleProps: FluentIconsProps = {
+ primaryFill: 'purple',
+ className: 'iconClass',
+};
+
+const useIconStyles = makeStyles({
+ icon: {
+ ':hover': {
+ [`& .${iconFilledClassName}`]: {
+ display: 'none',
+ },
+ [`& .${iconRegularClassName}`]: {
+ display: 'inline',
+ },
+ },
+ },
+});
+
+const AccessTime = bundleIcon(AccessTimeFilled, AccessTimeRegular);
+function App() {
+ const styles = useIconStyles();
+
+ return (
+
+ )
+);
+```
### Fluent icons as fonts
diff --git a/packages/react-components/react-components/src/Concepts/Positioning/PositioningAnchorToTarget.stories.tsx b/packages/react-components/react-components/src/Concepts/Positioning/PositioningAnchorToTarget.stories.tsx
index 0b73a231dae28e..f76b2a56059c7e 100644
--- a/packages/react-components/react-components/src/Concepts/Positioning/PositioningAnchorToTarget.stories.tsx
+++ b/packages/react-components/react-components/src/Concepts/Positioning/PositioningAnchorToTarget.stories.tsx
@@ -6,7 +6,7 @@ export const AnchorToTarget = () => {
return (
-
+
Click me
diff --git a/packages/react-components/react-components/src/Concepts/Positioning/PositioningCoverTarget.stories.tsx b/packages/react-components/react-components/src/Concepts/Positioning/PositioningCoverTarget.stories.tsx
index 3a0eaa9e64c602..f9e19353691565 100644
--- a/packages/react-components/react-components/src/Concepts/Positioning/PositioningCoverTarget.stories.tsx
+++ b/packages/react-components/react-components/src/Concepts/Positioning/PositioningCoverTarget.stories.tsx
@@ -244,7 +244,7 @@ const PositionedComponent = (props: {
return (
-
+
{targetContent}
↑
diff --git a/packages/react-components/react-components/src/Concepts/Positioning/PositioningDefault.stories.tsx b/packages/react-components/react-components/src/Concepts/Positioning/PositioningDefault.stories.tsx
index 238c9af1d15932..226cf8eb666f1e 100644
--- a/packages/react-components/react-components/src/Concepts/Positioning/PositioningDefault.stories.tsx
+++ b/packages/react-components/react-components/src/Concepts/Positioning/PositioningDefault.stories.tsx
@@ -4,7 +4,7 @@ import { Button, Popover, PopoverSurface, PopoverTrigger, PositioningProps } fro
export const Default = (props: PositioningProps) => {
return (
-
+
Click me
diff --git a/packages/react-components/react-components/src/Concepts/Positioning/PositioningFlipBoundary.stories.tsx b/packages/react-components/react-components/src/Concepts/Positioning/PositioningFlipBoundary.stories.tsx
index 1d5ae79123f277..ea11c0ddbb9723 100644
--- a/packages/react-components/react-components/src/Concepts/Positioning/PositioningFlipBoundary.stories.tsx
+++ b/packages/react-components/react-components/src/Concepts/Positioning/PositioningFlipBoundary.stories.tsx
@@ -35,14 +35,14 @@ export const FlipBoundary = () => {
setOpen(data.checked as boolean)} />
-
+
Position: above
Stays within the flip boundary
-
+
Position: below
Overflows the flip boundary
diff --git a/packages/react-components/react-components/src/Concepts/Positioning/PositioningImperativePositionUpdate.stories.tsx b/packages/react-components/react-components/src/Concepts/Positioning/PositioningImperativePositionUpdate.stories.tsx
index 1472bc83a726ad..7e2c255967bc64 100644
--- a/packages/react-components/react-components/src/Concepts/Positioning/PositioningImperativePositionUpdate.stories.tsx
+++ b/packages/react-components/react-components/src/Concepts/Positioning/PositioningImperativePositionUpdate.stories.tsx
@@ -28,7 +28,7 @@ export const ImperativePositionUpdate = () => {
return (
-
+
Click me
diff --git a/packages/react-components/react-components/src/Concepts/Positioning/PositioningOffsetFunction.stories.tsx b/packages/react-components/react-components/src/Concepts/Positioning/PositioningOffsetFunction.stories.tsx
index 7b87f6575a9aeb..46ba43d40d21d4 100644
--- a/packages/react-components/react-components/src/Concepts/Positioning/PositioningOffsetFunction.stories.tsx
+++ b/packages/react-components/react-components/src/Concepts/Positioning/PositioningOffsetFunction.stories.tsx
@@ -9,7 +9,7 @@ export const OffsetFunction = () => {
return (
-
+
Click me
diff --git a/packages/react-components/react-components/src/Concepts/Positioning/PositioningOffsetValue.stories.tsx b/packages/react-components/react-components/src/Concepts/Positioning/PositioningOffsetValue.stories.tsx
index 6e388d93101a0d..99decd43801987 100644
--- a/packages/react-components/react-components/src/Concepts/Positioning/PositioningOffsetValue.stories.tsx
+++ b/packages/react-components/react-components/src/Concepts/Positioning/PositioningOffsetValue.stories.tsx
@@ -17,14 +17,14 @@ export const OffsetValue = () => {
-
+
Click me
Container
({ crossAxis: crossAxis, mainAxis: mainAxis }) }}>
-
+
Click me
diff --git a/packages/react-components/react-components/src/Concepts/Positioning/PositioningOverflowBoundary.stories.tsx b/packages/react-components/react-components/src/Concepts/Positioning/PositioningOverflowBoundary.stories.tsx
index ccab3384f2fa30..416ca7f574f2b9 100644
--- a/packages/react-components/react-components/src/Concepts/Positioning/PositioningOverflowBoundary.stories.tsx
+++ b/packages/react-components/react-components/src/Concepts/Positioning/PositioningOverflowBoundary.stories.tsx
@@ -36,14 +36,14 @@ export const OverflowBoundary = () => {
setOpen(data.checked as boolean)} />
-
+
Align: end
Stays within the overflow boundary
-
+
Align: end
Overflows the overflow boundary
diff --git a/packages/react-components/react-components/src/Concepts/Positioning/PositioningShorthandPositions.stories.tsx b/packages/react-components/react-components/src/Concepts/Positioning/PositioningShorthandPositions.stories.tsx
index 1d35136b3a242e..2958580ae3bc64 100644
--- a/packages/react-components/react-components/src/Concepts/Positioning/PositioningShorthandPositions.stories.tsx
+++ b/packages/react-components/react-components/src/Concepts/Positioning/PositioningShorthandPositions.stories.tsx
@@ -210,7 +210,7 @@ const PositionedComponent = (props: {
const styles = useExampleStyles();
return (
-
+
{targetContent}
↑
diff --git a/packages/react-components/react-components/src/Migrations/Flex.Flex.stories.mdx b/packages/react-components/react-components/src/Migrations/Flex.Flex.stories.mdx
index 04d108983ebf5b..20e0da1e7315e3 100644
--- a/packages/react-components/react-components/src/Migrations/Flex.Flex.stories.mdx
+++ b/packages/react-components/react-components/src/Migrations/Flex.Flex.stories.mdx
@@ -1,7 +1,7 @@
import { Meta } from '@storybook/addon-docs';
import { CodeComparison, CodeExample } from './utils.stories';
-
+
# @fluentui/react-northstar - Flex
diff --git a/packages/react-components/react-components/src/Migrations/Flex.FlexItem.stories.mdx b/packages/react-components/react-components/src/Migrations/Flex.FlexItem.stories.mdx
index 42e9296849e71b..5ec20891d26945 100644
--- a/packages/react-components/react-components/src/Migrations/Flex.FlexItem.stories.mdx
+++ b/packages/react-components/react-components/src/Migrations/Flex.FlexItem.stories.mdx
@@ -1,7 +1,7 @@
import { Meta } from '@storybook/addon-docs';
import { CodeComparison, CodeExample } from './utils.stories';
-
+
# @fluentui/react-northstar - Flex.Item
diff --git a/packages/react-components/react-components/src/Migrations/Flex.Overview.stories.mdx b/packages/react-components/react-components/src/Migrations/Flex.Overview.stories.mdx
index 8f4f58d26231ae..f6863a0feef9ff 100644
--- a/packages/react-components/react-components/src/Migrations/Flex.Overview.stories.mdx
+++ b/packages/react-components/react-components/src/Migrations/Flex.Overview.stories.mdx
@@ -1,6 +1,6 @@
import { Meta } from '@storybook/addon-docs';
-
+
# Flex
diff --git a/packages/react-components/react-components/src/Migrations/Flex.Stack.stories.mdx b/packages/react-components/react-components/src/Migrations/Flex.Stack.stories.mdx
index 5624c1571c3a12..86bec0399d5b78 100644
--- a/packages/react-components/react-components/src/Migrations/Flex.Stack.stories.mdx
+++ b/packages/react-components/react-components/src/Migrations/Flex.Stack.stories.mdx
@@ -1,7 +1,7 @@
import { Meta } from '@storybook/addon-docs';
import { CodeComparison, CodeExample } from './utils.stories';
-
+
# @fluentui/react - Stack
diff --git a/packages/react-components/react-components/src/Migrations/Flex.StackItem.stories.mdx b/packages/react-components/react-components/src/Migrations/Flex.StackItem.stories.mdx
index eca4ebfe846355..bb6e2663fe10b3 100644
--- a/packages/react-components/react-components/src/Migrations/Flex.StackItem.stories.mdx
+++ b/packages/react-components/react-components/src/Migrations/Flex.StackItem.stories.mdx
@@ -1,7 +1,7 @@
import { Meta } from '@storybook/addon-docs';
import { CodeComparison, CodeExample } from './utils.stories';
-
+
# @fluentui/react - Stack.Item
diff --git a/packages/react-components/react-components/src/index.ts b/packages/react-components/react-components/src/index.ts
index b6119bea1b5a40..d0a6c3c32f7fcb 100644
--- a/packages/react-components/react-components/src/index.ts
+++ b/packages/react-components/react-components/src/index.ts
@@ -469,9 +469,12 @@ export type {
PopoverSurfaceProps,
PopoverSurfaceSlots,
PopoverSurfaceState,
+ PopoverTriggerChildProps,
PopoverTriggerProps,
PopoverTriggerState,
} from '@fluentui/react-popover';
+export { Portal, usePortal_unstable, renderPortal_unstable } from '@fluentui/react-portal';
+export type { PortalProps, PortalState } from '@fluentui/react-portal';
export {
Slider,
sliderClassNames,
@@ -585,3 +588,65 @@ export type {
PositioningImperativeRef,
PositioningVirtualElement,
} from '@fluentui/react-positioning';
+
+export {
+ Dialog,
+ useDialog_unstable,
+ renderDialog_unstable,
+ DialogTitle,
+ dialogTitleClassNames,
+ useDialogTitle_unstable,
+ useDialogTitleStyles_unstable,
+ renderDialogTitle_unstable,
+ DialogTrigger,
+ useDialogTrigger_unstable,
+ renderDialogTrigger_unstable,
+ DialogBody,
+ dialogBodyClassNames,
+ useDialogBody_unstable,
+ useDialogBodyStyles_unstable,
+ renderDialogBody_unstable,
+ DialogActions,
+ dialogActionsClassNames,
+ useDialogActions_unstable,
+ useDialogActionsStyles_unstable,
+ renderDialogActions_unstable,
+ DialogSurface,
+ dialogSurfaceClassNames,
+ useDialogSurface_unstable,
+ useDialogSurfaceStyles_unstable,
+ renderDialogSurface_unstable,
+ DialogContent,
+ dialogContentClassNames,
+ useDialogContentStyles_unstable,
+ useDialogContent_unstable,
+ renderDialogContent_unstable,
+} from '@fluentui/react-dialog';
+
+export type {
+ DialogProps,
+ DialogOpenChangeData,
+ DialogOpenChangeEvent,
+ DialogSlots,
+ DialogState,
+ DialogTriggerProps,
+ DialogTriggerChildProps,
+ DialogTriggerState,
+ DialogTriggerAction,
+ DialogActionsProps,
+ DialogActionsSlots,
+ DialogActionsState,
+ DialogActionsPosition,
+ DialogBodyProps,
+ DialogBodySlots,
+ DialogBodyState,
+ DialogTitleProps,
+ DialogTitleSlots,
+ DialogTitleState,
+ DialogSurfaceProps,
+ DialogSurfaceSlots,
+ DialogSurfaceState,
+ DialogContentProps,
+ DialogContentSlots,
+ DialogContentState,
+} from '@fluentui/react-dialog';
diff --git a/packages/react-components/react-components/src/unstable/index.ts b/packages/react-components/react-components/src/unstable/index.ts
index f28444a5ab7d04..da3b89540619cc 100644
--- a/packages/react-components/react-components/src/unstable/index.ts
+++ b/packages/react-components/react-components/src/unstable/index.ts
@@ -11,14 +11,22 @@ export type { AlertProps, AlertSlots, AlertState } from '@fluentui/react-alert';
export {
AvatarGroup,
AvatarGroupItem,
+ AvatarGroupPopover,
+ AvatarGroupProvider,
avatarGroupClassNames,
avatarGroupItemClassNames,
+ avatarGroupPopoverClassNames,
+ partitionAvatarGroupItems,
renderAvatarGroup_unstable,
renderAvatarGroupItem_unstable,
+ renderAvatarGroupPopover_unstable,
useAvatarGroup_unstable,
+ useAvatarGroupContext_unstable,
useAvatarGroupItem_unstable,
- useAvatarGroupStyles_unstable,
useAvatarGroupItemStyles_unstable,
+ useAvatarGroupPopover_unstable,
+ useAvatarGroupPopoverStyles_unstable,
+ useAvatarGroupStyles_unstable,
} from '@fluentui/react-avatar';
export type {
AvatarGroupProps,
@@ -27,6 +35,11 @@ export type {
AvatarGroupItemProps,
AvatarGroupItemSlots,
AvatarGroupItemState,
+ AvatarGroupPopoverProps,
+ AvatarGroupPopoverSlots,
+ AvatarGroupPopoverState,
+ PartitionAvatarGroupItems,
+ PartitionAvatarGroupItemsOptions,
} from '@fluentui/react-avatar';
export {
Card,
@@ -165,62 +178,6 @@ export {
export type { OverflowProps, OverflowItemProps } from '@fluentui/react-overflow';
-export {
- Dialog,
- dialogClassNames,
- useDialog_unstable,
- useDialogStyles_unstable,
- renderDialog_unstable,
- DialogTitle,
- dialogTitleClassNames,
- useDialogTitle_unstable,
- useDialogTitleStyles_unstable,
- renderDialogTitle_unstable,
- DialogTrigger,
- useDialogTrigger_unstable,
- renderDialogTrigger_unstable,
- DialogBody,
- dialogBodyClassNames,
- useDialogBody_unstable,
- useDialogBodyStyles_unstable,
- renderDialogBody_unstable,
- DialogActions,
- dialogActionsClassNames,
- useDialogActions_unstable,
- useDialogActionsStyles_unstable,
- renderDialogActions_unstable,
- DialogSurface,
- dialogSurfaceClassNames,
- useDialogSurface_unstable,
- useDialogSurfaceStyles_unstable,
- renderDialogSurface_unstable,
-} from '@fluentui/react-dialog';
-
-export type {
- DialogProps,
- DialogOpenChangeData,
- DialogOpenChangeEvent,
- DialogSlots,
- DialogState,
- DialogTriggerProps,
- DialogTriggerChildProps,
- DialogTriggerState,
- DialogTriggerAction,
- DialogActionsProps,
- DialogActionsSlots,
- DialogActionsState,
- DialogActionsPosition,
- DialogBodyProps,
- DialogBodySlots,
- DialogBodyState,
- DialogTitleProps,
- DialogTitleSlots,
- DialogTitleState,
- DialogSurfaceProps,
- DialogSurfaceSlots,
- DialogSurfaceState,
-} from '@fluentui/react-dialog';
-
export {
TableCell,
tableCellClassNames,
@@ -265,15 +222,21 @@ export {
useTableSelectionCell_unstable,
renderTableSelectionCell_unstable,
tableSelectionCellClassNames,
- TablePrimaryCell,
- useTablePrimaryCellStyles_unstable,
- useTablePrimaryCell_unstable,
- renderTablePrimaryCell_unstable,
TableCellActions,
useTableCellActionsStyles_unstable,
useTableCellActions_unstable,
renderTableCellActions_unstable,
+ tableCellActionsClassNames,
+ TableCellLayout,
+ useTableCellLayout_unstable,
+ useTableCellLayoutStyles_unstable,
+ renderTableCellLayout_unstable,
+ tableCellLayoutClassNames,
+ useTable,
+ useSelection,
+ useSort,
} from '@fluentui/react-table';
+
export type {
SortDirection,
TableHeaderCellProps,
@@ -302,7 +265,71 @@ export type {
TableCellActionsProps,
TableCellActionsState,
TableCellActionsSlots,
- TablePrimaryCellProps,
- TablePrimaryCellSlots,
- TablePrimaryCellState,
+ UseTableOptions,
+ TableState as HeadlessTableState,
+ TableSelectionState,
+ TableSortState,
+ TableStatePlugin,
+ RowState,
+ RowId,
+ ColumnDefinition,
+ ColumnId,
} from '@fluentui/react-table';
+
+export {
+ CheckboxField,
+ checkboxFieldClassNames,
+ ComboboxField,
+ comboboxFieldClassNames,
+ getFieldClassNames,
+ InputField,
+ inputFieldClassNames,
+ RadioGroupField,
+ radioGroupFieldClassNames,
+ renderField_unstable,
+ SelectField,
+ selectFieldClassNames,
+ SliderField,
+ sliderFieldClassNames,
+ SpinButtonField,
+ spinButtonFieldClassNames,
+ SwitchField,
+ switchFieldClassNames,
+ TextareaField,
+ textareaFieldClassNames,
+ useFieldStyles_unstable,
+ useField_unstable,
+} from '@fluentui/react-field';
+export type {
+ CheckboxFieldProps,
+ ComboboxFieldProps,
+ FieldConfig,
+ FieldProps,
+ FieldSlots,
+ FieldState,
+ InputFieldProps,
+ RadioGroupFieldProps,
+ SelectFieldProps,
+ SliderFieldProps,
+ SpinButtonFieldProps,
+ SwitchFieldProps,
+ TextareaFieldProps,
+} from '@fluentui/react-field';
+
+export {
+ Persona,
+ personaClassNames,
+ renderPersona_unstable,
+ usePersonaStyles_unstable,
+ usePersona_unstable,
+} from '@fluentui/react-persona';
+export type { PersonaProps, PersonaState, PersonaSlots } from '@fluentui/react-persona';
+
+export {
+ Progress,
+ progressClassNames,
+ renderProgress_unstable,
+ useProgressStyles_unstable,
+ useProgress_unstable,
+} from '@fluentui/react-progress';
+export type { ProgressProps, ProgressState, ProgressSlots } from '@fluentui/react-progress';
diff --git a/packages/react-components/react-components/src/unstable/package.json__tmpl__ b/packages/react-components/react-components/src/unstable/package.json__tmpl__
index f7038deddcf712..6a148f872a8cb9 100644
--- a/packages/react-components/react-components/src/unstable/package.json__tmpl__
+++ b/packages/react-components/react-components/src/unstable/package.json__tmpl__
@@ -2,7 +2,7 @@
"description": "Separate entrypoint for unstable Fluent UI components",
"main": "../lib-commonjs/unstable/index.js",
"module": "../lib/unstable/index.js",
- "typings": "../dist/unstable.d.ts",
+ "typings": "./../dist/unstable.d.ts",
"sideEffects": false,
"license": "MIT",
"exports": {
diff --git a/packages/react-components/react-conformance-griffel/.npmignore b/packages/react-components/react-conformance-griffel/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/react-conformance-griffel/.npmignore
+++ b/packages/react-components/react-conformance-griffel/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/react-conformance-griffel/CHANGELOG.json b/packages/react-components/react-conformance-griffel/CHANGELOG.json
index 5837fa11ac14ee..04368e1a062790 100644
--- a/packages/react-components/react-conformance-griffel/CHANGELOG.json
+++ b/packages/react-components/react-conformance-griffel/CHANGELOG.json
@@ -1,6 +1,101 @@
{
"name": "@fluentui/react-conformance-griffel",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 22:09:51 GMT",
+ "tag": "@fluentui/react-conformance-griffel_v9.0.0-beta.16",
+ "version": "9.0.0-beta.16",
+ "comments": {
+ "none": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "2435ea50f924fa6467a07829f3d4715e545d93c0",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:31 GMT",
+ "tag": "@fluentui/react-conformance-griffel_v9.0.0-beta.16",
+ "version": "9.0.0-beta.16",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "772f9e3ebde2d5b8157a3204c1a4e007e56f5508",
+ "comment": "chore: Bump react peer dependency to react 18."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:47 GMT",
+ "tag": "@fluentui/react-conformance-griffel_v9.0.0-beta.15",
+ "version": "9.0.0-beta.15",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 20:55:43 GMT",
+ "tag": "@fluentui/react-conformance-griffel_v9.0.0-beta.14",
+ "version": "9.0.0-beta.14",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "9617a5a46ef4c5e310a066a5374ff2ed61db3c66",
+ "comment": "bump react-conformance"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:50:07 GMT",
+ "tag": "@fluentui/react-conformance-griffel_v9.0.0-beta.13",
+ "version": "9.0.0-beta.13",
+ "comments": {
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ }
+ ],
+ "prerelease": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-conformance-griffel",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-conformance-griffel",
+ "comment": "Bump @fluentui/react-conformance to v0.15.3",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:45 GMT",
"tag": "@fluentui/react-conformance-griffel_v9.0.0-beta.12",
diff --git a/packages/react-components/react-conformance-griffel/CHANGELOG.md b/packages/react-components/react-conformance-griffel/CHANGELOG.md
index a71f40e0adeb46..47bda17e36c110 100644
--- a/packages/react-components/react-conformance-griffel/CHANGELOG.md
+++ b/packages/react-components/react-conformance-griffel/CHANGELOG.md
@@ -1,9 +1,47 @@
# Change Log - @fluentui/react-conformance-griffel
-This log was last generated on Wed, 03 Aug 2022 16:03:45 GMT and should not be manually modified.
+This log was last generated on Thu, 20 Oct 2022 08:39:31 GMT and should not be manually modified.
+## [9.0.0-beta.16](https://github.com/microsoft/fluentui/tree/@fluentui/react-conformance-griffel_v9.0.0-beta.16)
+
+Thu, 20 Oct 2022 08:39:31 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-conformance-griffel_v9.0.0-beta.15..@fluentui/react-conformance-griffel_v9.0.0-beta.16)
+
+### Changes
+
+- chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- chore: Bump react peer dependency to react 18. ([PR #25278](https://github.com/microsoft/fluentui/pull/25278) by mgodbolt@microsoft.com)
+
+## [9.0.0-beta.15](https://github.com/microsoft/fluentui/tree/@fluentui/react-conformance-griffel_v9.0.0-beta.15)
+
+Thu, 13 Oct 2022 11:02:47 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-conformance-griffel_v9.0.0-beta.14..@fluentui/react-conformance-griffel_v9.0.0-beta.15)
+
+### Changes
+
+- chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+
+## [9.0.0-beta.14](https://github.com/microsoft/fluentui/tree/@fluentui/react-conformance-griffel_v9.0.0-beta.14)
+
+Tue, 20 Sep 2022 20:55:43 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-conformance-griffel_v9.0.0-beta.13..@fluentui/react-conformance-griffel_v9.0.0-beta.14)
+
+### Changes
+
+- bump react-conformance ([PR #24870](https://github.com/microsoft/fluentui/pull/24870) by mgodbolt@microsoft.com)
+
+## [9.0.0-beta.13](https://github.com/microsoft/fluentui/tree/@fluentui/react-conformance-griffel_v9.0.0-beta.13)
+
+Thu, 15 Sep 2022 09:50:07 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-conformance-griffel_v9.0.0-beta.12..@fluentui/react-conformance-griffel_v9.0.0-beta.13)
+
+### Changes
+
+- chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- Bump @fluentui/react-conformance to v0.15.3 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.0.0-beta.12](https://github.com/microsoft/fluentui/tree/@fluentui/react-conformance-griffel_v9.0.0-beta.12)
Wed, 03 Aug 2022 16:03:45 GMT
diff --git a/packages/react-components/react-conformance-griffel/package.json b/packages/react-components/react-conformance-griffel/package.json
index d5136d8a779583..18ec08ae692251 100644
--- a/packages/react-components/react-conformance-griffel/package.json
+++ b/packages/react-components/react-conformance-griffel/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/react-conformance-griffel",
- "version": "9.0.0-beta.12",
+ "version": "9.0.0-beta.16",
"description": "A set of conformance tests for Griffel CSS-in-JS",
"main": "lib-commonjs/index.js",
"typings": "dist/index.d.ts",
@@ -26,13 +26,13 @@
"@fluentui/react-conformance": "*"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
"typescript": "^4.3.0",
- "@fluentui/react-conformance": "^0.14.0"
+ "@fluentui/react-conformance": "^0.15.4"
},
"dependencies": {
- "@griffel/react": "^1.3.0",
+ "@griffel/react": "^1.4.1",
"tslib": "^2.1.0"
},
"beachball": {
diff --git a/packages/react-components/react-conformance-griffel/tsconfig.spec.json b/packages/react-components/react-conformance-griffel/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/react-conformance-griffel/tsconfig.spec.json
+++ b/packages/react-components/react-conformance-griffel/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/react-context-selector/.npmignore b/packages/react-components/react-context-selector/.npmignore
index 52d2a7273a151d..f7ce568a6dbf7c 100644
--- a/packages/react-components/react-context-selector/.npmignore
+++ b/packages/react-components/react-context-selector/.npmignore
@@ -3,10 +3,11 @@
bundle-size/
config/
coverage/
-e2e/
+docs/
etc/
node_modules/
src/
+stories/
dist/types/
temp/
__fixtures__
@@ -16,7 +17,7 @@ __tests__
*.api.json
*.log
*.spec.*
-*.stories.*
+*.cy.*
*.test.*
*.yml
diff --git a/packages/react-components/react-context-selector/CHANGELOG.json b/packages/react-components/react-context-selector/CHANGELOG.json
index e5a20657263a71..6493777a5641a5 100644
--- a/packages/react-components/react-context-selector/CHANGELOG.json
+++ b/packages/react-components/react-context-selector/CHANGELOG.json
@@ -1,6 +1,86 @@
{
"name": "@fluentui/react-context-selector",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 22:09:51 GMT",
+ "tag": "@fluentui/react-context-selector_v9.0.5",
+ "version": "9.0.5",
+ "comments": {
+ "none": [
+ {
+ "author": "tristan.watanabe@gmail.com",
+ "package": "@fluentui/react-context-selector",
+ "commit": "2435ea50f924fa6467a07829f3d4715e545d93c0",
+ "comment": "chore: Migrate to new package structure."
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:32 GMT",
+ "tag": "@fluentui/react-context-selector_v9.0.5",
+ "version": "9.0.5",
+ "comments": {
+ "patch": [
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-context-selector",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-context-selector",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:03:06 GMT",
+ "tag": "@fluentui/react-context-selector_v9.0.4",
+ "version": "9.0.4",
+ "comments": {
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-context-selector",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:50:08 GMT",
+ "tag": "@fluentui/react-context-selector_v9.0.3",
+ "version": "9.0.3",
+ "comments": {
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-context-selector",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-context-selector",
+ "commit": "16aa65dcae8f75c6a221225fd0eb43800650ac66",
+ "comment": "docs(react-context-selector): re-generate api.md"
+ }
+ ],
+ "patch": [
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-context-selector",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:46 GMT",
"tag": "@fluentui/react-context-selector_v9.0.2",
diff --git a/packages/react-components/react-context-selector/CHANGELOG.md b/packages/react-components/react-context-selector/CHANGELOG.md
index c7ad6d2d82fd72..16e04286ad748b 100644
--- a/packages/react-components/react-context-selector/CHANGELOG.md
+++ b/packages/react-components/react-context-selector/CHANGELOG.md
@@ -1,9 +1,37 @@
# Change Log - @fluentui/react-context-selector
-This log was last generated on Thu, 14 Jul 2022 21:21:11 GMT and should not be manually modified.
+This log was last generated on Thu, 20 Oct 2022 08:39:32 GMT and should not be manually modified.
+## [9.0.5](https://github.com/microsoft/fluentui/tree/@fluentui/react-context-selector_v9.0.5)
+
+Thu, 20 Oct 2022 08:39:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-context-selector_v9.0.4..@fluentui/react-context-selector_v9.0.5)
+
+### Patches
+
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.0.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-context-selector_v9.0.4)
+
+Thu, 13 Oct 2022 11:03:06 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-context-selector_v9.0.3..@fluentui/react-context-selector_v9.0.4)
+
+### Patches
+
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+## [9.0.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-context-selector_v9.0.3)
+
+Thu, 15 Sep 2022 09:50:08 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-context-selector_v9.0.2..@fluentui/react-context-selector_v9.0.3)
+
+### Patches
+
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.0.2](https://github.com/microsoft/fluentui/tree/@fluentui/react-context-selector_v9.0.2)
Thu, 14 Jul 2022 21:21:11 GMT
diff --git a/packages/react-components/react-context-selector/package.json b/packages/react-components/react-context-selector/package.json
index 6941e08f5776d0..28ea57ceb48428 100644
--- a/packages/react-components/react-context-selector/package.json
+++ b/packages/react-components/react-context-selector/package.json
@@ -1,6 +1,6 @@
{
"name": "@fluentui/react-context-selector",
- "version": "9.0.2",
+ "version": "9.0.5",
"description": "React useContextSelector hook in userland",
"main": "lib-commonjs/index.js",
"module": "lib/index.js",
@@ -27,14 +27,14 @@
"@fluentui/scripts": "^1.0.0"
},
"dependencies": {
- "@fluentui/react-utilities": "^9.0.2",
+ "@fluentui/react-utilities": "^9.1.2",
"tslib": "^2.1.0"
},
"peerDependencies": {
- "@types/react": ">=16.8.0 <18.0.0",
- "@types/react-dom": ">=16.8.0 <18.0.0",
- "react": ">=16.8.0 <18.0.0",
- "react-dom": ">=16.8.0 <18.0.0",
+ "@types/react": ">=16.8.0 <19.0.0",
+ "@types/react-dom": ">=16.8.0 <19.0.0",
+ "react": ">=16.8.0 <19.0.0",
+ "react-dom": ">=16.8.0 <19.0.0",
"scheduler": "^0.19.0 || ^0.20.0"
},
"beachball": {
diff --git a/packages/react-components/react-context-selector/tsconfig.spec.json b/packages/react-components/react-context-selector/tsconfig.spec.json
index 469fcba4d7ba75..911456fe4b4d91 100644
--- a/packages/react-components/react-context-selector/tsconfig.spec.json
+++ b/packages/react-components/react-context-selector/tsconfig.spec.json
@@ -5,5 +5,13 @@
"outDir": "dist",
"types": ["jest", "node"]
},
- "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"]
+ "include": [
+ "**/*.spec.ts",
+ "**/*.spec.tsx",
+ "**/*.test.ts",
+ "**/*.test.tsx",
+ "**/*.d.ts",
+ "./src/testing/**/*.ts",
+ "./src/testing/**/*.tsx"
+ ]
}
diff --git a/packages/react-components/react-dialog/CHANGELOG.json b/packages/react-components/react-dialog/CHANGELOG.json
index 738beacadc26d1..aee1c6f8cf36c1 100644
--- a/packages/react-components/react-dialog/CHANGELOG.json
+++ b/packages/react-components/react-dialog/CHANGELOG.json
@@ -1,6 +1,442 @@
{
"name": "@fluentui/react-dialog",
"entries": [
+ {
+ "date": "Tue, 25 Oct 2022 00:35:31 GMT",
+ "tag": "@fluentui/react-dialog_v9.0.3",
+ "version": "9.0.3",
+ "comments": {
+ "none": [
+ {
+ "author": "miroslav.stastny@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "6ced976a8d0e6a0e2e207da8fe0eb810e2bd19bc",
+ "comment": "Update package readme"
+ }
+ ],
+ "patch": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc",
+ "comment": "bugfix: adds cursor pointer style to dialog close button"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 20 Oct 2022 08:39:32 GMT",
+ "tag": "@fluentui/react-dialog_v9.0.2",
+ "version": "9.0.2",
+ "comments": {
+ "patch": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "083a2c4c3bf07a279bbf01c1d8fad582857beda1",
+ "comment": "chore: updates disallowed change types"
+ },
+ {
+ "author": "mgodbolt@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "17096b3137d9d3e7c7443ddc3ce0738b2910a334",
+ "comment": "chore: Bump peer deps to support React 18"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "06865dada128321804646582f564ee86d835d174",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-utilities to v9.1.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.5",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-shared-contexts to v9.0.2",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-aria to v9.2.3",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-tabster to v9.2.0",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-theme to v9.1.1",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-portal to v9.0.8",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16",
+ "commit": "5ea1372675d910d76cf1b9cbd74d05b7c4e8fcbc"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 12:56:29 GMT",
+ "tag": "@fluentui/react-dialog_v9.0.1-0",
+ "version": "9.0.1-0",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "e563f3daaea9b7cc62f50bc15edd44edf5045107",
+ "comment": "feat: adds disableButtonEnhancement property on DialogTrigger"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 13 Oct 2022 11:02:48 GMT",
+ "tag": "@fluentui/react-dialog_v9.0.0",
+ "version": "9.0.0",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "1a527d440e0497ef8046b3ce240492241e7a04ac",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "12222c2cfb1851ac6fbf57d17a1573432e842ec7",
+ "comment": "feat: focus on surface if no focusable element is available"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "17c5fe742918bbc41ed22f492a289f53bffc5008",
+ "comment": "chore: improves DialogTrigger types"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "443c503b94e602e55857e4e311413c6257d60766",
+ "comment": "chore: cleanups in types"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "b48083b3009bc75f28c328de0024eb400b989145",
+ "comment": "fix: aria-* properties should be reassignable"
+ }
+ ],
+ "patch": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a",
+ "comment": "feat: react-dialog stable release"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-utilities to v9.1.1",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.4",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-aria to v9.2.2",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-tabster to v9.1.3",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-portal to v9.0.7",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15",
+ "commit": "cd05c21e62ff37812d614330eb70f97fd978c97a"
+ }
+ ],
+ "none": [
+ {
+ "author": "email not defined",
+ "package": "@fluentui/react-dialog",
+ "commit": "42acccd4445b42c806f957de00e5f2567589279f",
+ "comment": "chore: updates stories and tests"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Mon, 03 Oct 2022 22:24:36 GMT",
+ "tag": "@fluentui/react-dialog_v9.0.0-beta.11",
+ "version": "9.0.0-beta.11",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "da8a1d4d97efdb6d95818b605136415d9428e811",
+ "comment": "feat: removes DialogSurface native dialog support "
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-aria to v9.2.1",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-tabster to v9.1.2",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-portal to v9.0.6",
+ "commit": "67a8c98b8d53cd2fa14d668cf639b867b68ad18a"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Fri, 23 Sep 2022 10:32:29 GMT",
+ "tag": "@fluentui/react-dialog_v9.0.0-beta.10",
+ "version": "9.0.0-beta.10",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "4dd18085b968e10d512c179705d31148e28148b4",
+ "comment": "feat: implements DialogContent as a swap of DialogBody"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Tue, 20 Sep 2022 20:55:44 GMT",
+ "tag": "@fluentui/react-dialog_v9.0.0-beta.9",
+ "version": "9.0.0-beta.9",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "79d1b0e32631bf916a52834e3731de464aa4898c",
+ "comment": "bugfix(react-dialog): Adds color style to DialogSurface"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14",
+ "commit": "4ceba844c804a2f49b0465389100e7a3dabf116e"
+ }
+ ],
+ "none": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "81de40f0df0dfa8bac4e4fb522bf830d9fe8e066",
+ "comment": "Includes Tooltip Escape scenarios on e2e tests"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "cf5f5e14c86cc35ee8bfff6c6be130a36fb6d16d",
+ "comment": "chore: scaffold DialogContent component"
+ }
+ ]
+ }
+ },
+ {
+ "date": "Thu, 15 Sep 2022 09:48:59 GMT",
+ "tag": "@fluentui/react-dialog_v9.0.0-beta.8",
+ "version": "9.0.0-beta.8",
+ "comments": {
+ "prerelease": [
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "0547583ebcebe746110e5ef8d0599b0972b1f4c6",
+ "comment": "chore(react-dialog): Updates trigger to use useARIAButtonProps"
+ },
+ {
+ "author": "olfedias@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "e610024474cfe5d45f61501a8b6a21daf4c794a2",
+ "comment": "chore: Update Griffel to latest version"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "827dffa4e4a164682c29b157b572ceb63c5dd6a9",
+ "comment": "chore(react-dialog): removes react-button max-width overrides"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "7b46e969e352bd636f7094ac5e29177fb7e8bff2",
+ "comment": "feat: add scroll lock feature to Dialog"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "b02e8f3ab48daf6b9db7f7efebbf026c6cbed740",
+ "comment": "feat(react-dialog): moves backdrop slot from Dialog to DialogSurface"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "9c10bc432b8fc8df6d51975c580a19603a10fd1e",
+ "comment": "feat(react-dialog): adds proper style to make DialogBody responsive"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "c9a58334a7abebf949f59d2c0a4bb1271074d808",
+ "comment": "chore: renames overlay slot to backdrop"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "6c6fe4c8246abec30d9cd3ba2079d379c4d7acb8",
+ "comment": "bugfix: stops propagation on Escape key"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "2630091d8093879d26c38dc6a4c585e886cff057",
+ "comment": "feat: Adds padding-right style to avoid jumping on scroll lock"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "94ab82dd00db0bf177908e7ccc60125efaa4e22d",
+ "comment": "chore(react-dialog): removes document listener to Escape keydown"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "0865ee92c7cab7273aafd21b1b3dff9418c0d479",
+ "comment": "feat(react-dialog): replace `closeButton` to a more generic `action` slot"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "fd88d8b10fe32eb635c949aa28653c3376f64c3d",
+ "comment": "feat(react-dialog): 1st rule of ARIA for Dialog"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-utilities to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-context-selector to v9.0.3",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-shared-contexts to v9.0.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-aria to v9.2.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-tabster to v9.1.1",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-theme to v9.1.0",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-portal to v9.0.5",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ },
+ {
+ "author": "beachball",
+ "package": "@fluentui/react-dialog",
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13",
+ "commit": "a33448fe4a0f4117686c378f80b893d1406d95a8"
+ }
+ ],
+ "none": [
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "e6cf183695d6d67a24e038c49a876224e5ed35e5",
+ "comment": "chore: update package scaffold"
+ },
+ {
+ "author": "bernardo.sunderhus@gmail.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "5cd0e8dbc07b0a71ab0a48813cdcbbbd37a222e1",
+ "comment": "chore: remove localShorthands in favor of griffel shorthands"
+ },
+ {
+ "author": "martinhochel@microsoft.com",
+ "package": "@fluentui/react-dialog",
+ "commit": "ba9444d594f3a960cc590eae5237c08bf7c5a07f",
+ "comment": "chore: consume cypress.config from it's package boundary"
+ }
+ ]
+ }
+ },
{
"date": "Wed, 03 Aug 2022 16:03:47 GMT",
"tag": "@fluentui/react-dialog_v9.0.0-beta.7",
diff --git a/packages/react-components/react-dialog/CHANGELOG.md b/packages/react-components/react-dialog/CHANGELOG.md
index aadead4536524b..aba69b6897215c 100644
--- a/packages/react-components/react-dialog/CHANGELOG.md
+++ b/packages/react-components/react-dialog/CHANGELOG.md
@@ -1,9 +1,128 @@
# Change Log - @fluentui/react-dialog
-This log was last generated on Wed, 03 Aug 2022 16:03:47 GMT and should not be manually modified.
+This log was last generated on Tue, 25 Oct 2022 00:35:31 GMT and should not be manually modified.
+## [9.0.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-dialog_v9.0.3)
+
+Tue, 25 Oct 2022 00:35:31 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-dialog_v9.0.2..@fluentui/react-dialog_v9.0.3)
+
+### Patches
+
+- bugfix: adds cursor pointer style to dialog close button ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by bernardo.sunderhus@gmail.com)
+
+## [9.0.2](https://github.com/microsoft/fluentui/tree/@fluentui/react-dialog_v9.0.2)
+
+Thu, 20 Oct 2022 08:39:32 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-dialog_v9.0.1-0..@fluentui/react-dialog_v9.0.2)
+
+### Patches
+
+- chore: updates disallowed change types ([PR #25214](https://github.com/microsoft/fluentui/pull/25214) by bernardo.sunderhus@gmail.com)
+- chore: Bump peer deps to support React 18 ([PR #24972](https://github.com/microsoft/fluentui/pull/24972) by mgodbolt@microsoft.com)
+- chore: Update Griffel to latest version ([PR #25212](https://github.com/microsoft/fluentui/pull/25212) by olfedias@microsoft.com)
+- Bump @fluentui/react-utilities to v9.1.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-context-selector to v9.0.5 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-shared-contexts to v9.0.2 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-aria to v9.2.3 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-tabster to v9.2.0 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-theme to v9.1.1 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-portal to v9.0.8 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.16 ([PR #25265](https://github.com/microsoft/fluentui/pull/25265) by beachball)
+
+## [9.0.1-0](https://github.com/microsoft/fluentui/tree/@fluentui/react-dialog_v9.0.1-0)
+
+Thu, 13 Oct 2022 12:56:29 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-dialog_v9.0.0..@fluentui/react-dialog_v9.0.1-0)
+
+### Changes
+
+- feat: adds disableButtonEnhancement property on DialogTrigger ([PR #25112](https://github.com/microsoft/fluentui/pull/25112) by bernardo.sunderhus@gmail.com)
+
+## [9.0.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-dialog_v9.0.0)
+
+Thu, 13 Oct 2022 11:02:48 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-dialog_v9.0.0-beta.11..@fluentui/react-dialog_v9.0.0)
+
+### Patches
+
+- feat: react-dialog stable release ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by bernardo.sunderhus@gmail.com)
+- Bump @fluentui/react-utilities to v9.1.1 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-context-selector to v9.0.4 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-aria to v9.2.2 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-tabster to v9.1.3 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-portal to v9.0.7 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.15 ([PR #25181](https://github.com/microsoft/fluentui/pull/25181) by beachball)
+
+### Changes
+
+- chore: Update Griffel to latest version ([PR #25075](https://github.com/microsoft/fluentui/pull/25075) by olfedias@microsoft.com)
+- feat: focus on surface if no focusable element is available ([PR #25173](https://github.com/microsoft/fluentui/pull/25173) by bernardo.sunderhus@gmail.com)
+- chore: improves DialogTrigger types ([PR #25044](https://github.com/microsoft/fluentui/pull/25044) by bernardo.sunderhus@gmail.com)
+- chore: cleanups in types ([PR #25070](https://github.com/microsoft/fluentui/pull/25070) by bernardo.sunderhus@gmail.com)
+- fix: aria-* properties should be reassignable ([PR #25092](https://github.com/microsoft/fluentui/pull/25092) by bernardo.sunderhus@gmail.com)
+
+## [9.0.0-beta.11](https://github.com/microsoft/fluentui/tree/@fluentui/react-dialog_v9.0.0-beta.11)
+
+Mon, 03 Oct 2022 22:24:36 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-dialog_v9.0.0-beta.10..@fluentui/react-dialog_v9.0.0-beta.11)
+
+### Changes
+
+- feat: removes DialogSurface native dialog support ([PR #24979](https://github.com/microsoft/fluentui/pull/24979) by bernardo.sunderhus@gmail.com)
+- Bump @fluentui/react-aria to v9.2.1 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+- Bump @fluentui/react-tabster to v9.1.2 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+- Bump @fluentui/react-portal to v9.0.6 ([PR #25055](https://github.com/microsoft/fluentui/pull/25055) by beachball)
+
+## [9.0.0-beta.10](https://github.com/microsoft/fluentui/tree/@fluentui/react-dialog_v9.0.0-beta.10)
+
+Fri, 23 Sep 2022 10:32:29 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-dialog_v9.0.0-beta.9..@fluentui/react-dialog_v9.0.0-beta.10)
+
+### Changes
+
+- feat: implements DialogContent as a swap of DialogBody ([PR #24855](https://github.com/microsoft/fluentui/pull/24855) by bernardo.sunderhus@gmail.com)
+
+## [9.0.0-beta.9](https://github.com/microsoft/fluentui/tree/@fluentui/react-dialog_v9.0.0-beta.9)
+
+Tue, 20 Sep 2022 20:55:44 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-dialog_v9.0.0-beta.8..@fluentui/react-dialog_v9.0.0-beta.9)
+
+### Changes
+
+- bugfix(react-dialog): Adds color style to DialogSurface ([PR #24832](https://github.com/microsoft/fluentui/pull/24832) by bernardo.sunderhus@gmail.com)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.14 ([PR #24869](https://github.com/microsoft/fluentui/pull/24869) by beachball)
+
+## [9.0.0-beta.8](https://github.com/microsoft/fluentui/tree/@fluentui/react-dialog_v9.0.0-beta.8)
+
+Thu, 15 Sep 2022 09:48:59 GMT
+[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-dialog_v9.0.0-beta.7..@fluentui/react-dialog_v9.0.0-beta.8)
+
+### Changes
+
+- chore(react-dialog): Updates trigger to use useARIAButtonProps ([PR #24177](https://github.com/microsoft/fluentui/pull/24177) by bernardo.sunderhus@gmail.com)
+- chore: Update Griffel to latest version ([PR #24221](https://github.com/microsoft/fluentui/pull/24221) by olfedias@microsoft.com)
+- chore(react-dialog): removes react-button max-width overrides ([PR #24674](https://github.com/microsoft/fluentui/pull/24674) by bernardo.sunderhus@gmail.com)
+- feat: add scroll lock feature to Dialog ([PR #24375](https://github.com/microsoft/fluentui/pull/24375) by bernardo.sunderhus@gmail.com)
+- feat(react-dialog): moves backdrop slot from Dialog to DialogSurface ([PR #24669](https://github.com/microsoft/fluentui/pull/24669) by bernardo.sunderhus@gmail.com)
+- feat(react-dialog): adds proper style to make DialogBody responsive ([PR #24354](https://github.com/microsoft/fluentui/pull/24354) by bernardo.sunderhus@gmail.com)
+- chore: renames overlay slot to backdrop ([PR #24220](https://github.com/microsoft/fluentui/pull/24220) by bernardo.sunderhus@gmail.com)
+- bugfix: stops propagation on Escape key ([PR #24750](https://github.com/microsoft/fluentui/pull/24750) by bernardo.sunderhus@gmail.com)
+- feat: Adds padding-right style to avoid jumping on scroll lock ([PR #24408](https://github.com/microsoft/fluentui/pull/24408) by bernardo.sunderhus@gmail.com)
+- chore(react-dialog): removes document listener to Escape keydown ([PR #24668](https://github.com/microsoft/fluentui/pull/24668) by bernardo.sunderhus@gmail.com)
+- feat(react-dialog): replace `closeButton` to a more generic `action` slot ([PR #24719](https://github.com/microsoft/fluentui/pull/24719) by bernardo.sunderhus@gmail.com)
+- feat(react-dialog): 1st rule of ARIA for Dialog ([PR #24525](https://github.com/microsoft/fluentui/pull/24525) by bernardo.sunderhus@gmail.com)
+- Bump @fluentui/react-utilities to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-context-selector to v9.0.3 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-shared-contexts to v9.0.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-aria to v9.2.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-tabster to v9.1.1 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-theme to v9.1.0 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-portal to v9.0.5 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+- Bump @fluentui/react-conformance-griffel to v9.0.0-beta.13 ([PR #24808](https://github.com/microsoft/fluentui/pull/24808) by beachball)
+
## [9.0.0-beta.7](https://github.com/microsoft/fluentui/tree/@fluentui/react-dialog_v9.0.0-beta.7)
Wed, 03 Aug 2022 16:03:47 GMT
diff --git a/packages/react-components/react-dialog/README.md b/packages/react-components/react-dialog/README.md
index 5e8c4846fb1b15..513963bd8cc7b9 100644
--- a/packages/react-components/react-dialog/README.md
+++ b/packages/react-components/react-dialog/README.md
@@ -1,5 +1,45 @@
# @fluentui/react-dialog
-**React Dialog components for [Fluent UI React](https://developer.microsoft.com/en-us/fluentui)**
+**React Dialog components for [Fluent UI React](https://react.fluentui.dev)**
-These are not production-ready components and **should never be used in product**. This space is useful for testing new components whose APIs might change before final release.
+To import React Dialog components:
+
+```jsx
+import * as React from 'react';
+import {
+ Button,
+ Dialog,
+ DialogTrigger,
+ DialogSurface,
+ DialogTitle,
+ DialogBody,
+ DialogActions,
+ DialogContent,
+} from '@fluentui/react-components';
+
+export const DialogExample = () => {
+ return (
+
+
+ Open dialog
+
+
+
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+ Close
+
+ Do Something
+
+
+
+
+ );
+};
+```
diff --git a/packages/react-components/react-dialog/Spec.md b/packages/react-components/react-dialog/Spec.md
index a3479d78092e98..033c44a88b68bb 100644
--- a/packages/react-components/react-dialog/Spec.md
+++ b/packages/react-components/react-dialog/Spec.md
@@ -83,19 +83,7 @@ Sample usages will be give in the following section of this document [Sample cod
The root level component serves as an interface for interaction with all possible behaviors exposed. It provides context down the hierarchy to `children` compound components to allow functionality. This component expects to receive as children either a `DialogSurface` or a `DialogTrigger` and a `DialogSurface` (or some component that will eventually render one of those compound components) in this specific order
```tsx
-type DialogSlots = {
- /**
- * Dimmed background of dialog.
- * The default backdrop is rendered as a `` with styling.
- * This slot expects a `
` element which will replace the default backdrop.
- * The backdrop should have `aria-hidden="true"`.
- */
- backdrop?: Slot<'div'>;
- /**
- * The root element of the Dialog right after Portal.
- */
- root: Slot<'div'>;
-};
+type DialogSlots = {};
type DialogProps = ComponentProps
& {
/**
@@ -167,19 +155,26 @@ export type DialogTriggerProps = {
The `DialogSurface` component represents the visual part of a `Dialog` as a whole, it contains everything that should be visible.
```tsx
-type DialogTitleSlots = {
+type DialogSurfaceSlots = {
/**
- * By default this is a div.
+ * Dimmed background of dialog.
+ * The default backdrop is rendered as a `` with styling.
+ * This slot expects a `
` element which will replace the default backdrop.
+ * The backdrop should have `aria-hidden="true"`.
+ *
+ * By default if `DialogSurface` is `
` element the backdrop is ignored,
+ * since native `` element supports [::backdrop](https://developer.mozilla.org/en-US/docs/Web/CSS/::backdrop)
*/
- root: Slot<'div', 'main'>;
+ backdrop?: Slot<'div'>;
+ root: NonNullable>;
};
-type DialogTitleProps = ComponentProps;
+type DialogTitleProps = ComponentProps;
```
### DialogTitle
-The DialogTitle component will expect to have a dialog title/header and will show the close (X icon) button if specified so. Apart from styling and presenting `closeButton`, this component does not have other behavior.
+The `DialogTitle` component expects to have a title/header and when `Dialog` is `non-modal` a close (X icon) button is provided through `action` slot by default.
```tsx
type DialogTitleSlots = {
@@ -187,7 +182,10 @@ type DialogTitleSlots = {
* By default this is a div, but can be a heading.
*/
root: Slot<'div', 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'>;
- closeButton?: Slot<'button'>;
+ /**
+ * By default a Dialog with modalType='non-modal' will have a close button action
+ */
+ action?: Slot<'div'>;
};
type DialogTitleProps = ComponentProps;
@@ -281,7 +279,7 @@ const dialog =
>
Title
-
+
This is going to be inside the dialog
@@ -343,7 +341,7 @@ const CustomDialog = () => {
>
Title
-
+
This is going to be inside the dialog
@@ -402,6 +400,27 @@ function AsyncConfirmDialog() {
}
```
+### Opting out of native `
`
+
+```tsx
+const dialog =
+
+ Open Dialog
+
+
+ This is as basic as it gets.
+
+
+```
+
+```html
+
+Open Dialog
+
+
+This is as basic as it gets
+```
+
## Migration
_TBA: Link to migration guide doc_
diff --git a/packages/react-components/react-dialog/config/api-extractor.json b/packages/react-components/react-dialog/config/api-extractor.json
index eee94ff6de902d..637d9797ae3e6e 100644
--- a/packages/react-components/react-dialog/config/api-extractor.json
+++ b/packages/react-components/react-dialog/config/api-extractor.json
@@ -1,5 +1,9 @@
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
"extends": "@fluentui/scripts/api-extractor/api-extractor.common.v-next.json",
- "mainEntryPointFilePath": "/dist/types/index.d.ts"
+ "dtsRollup": {
+ "enabled": true,
+ "untrimmedFilePath": "",
+ "publicTrimmedFilePath": "/dist/index.d.ts"
+ }
}
diff --git a/packages/react-components/react-dialog/config/api-extractor.local.json b/packages/react-components/react-dialog/config/api-extractor.local.json
deleted file mode 100644
index 69e764bce3a592..00000000000000
--- a/packages/react-components/react-dialog/config/api-extractor.local.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
- "extends": "./api-extractor.json",
- "mainEntryPointFilePath": "/dist/types/packages/react-components//src/index.d.ts"
-}
diff --git a/packages/react-components/react-dialog/e2e/Dialog.e2e.tsx b/packages/react-components/react-dialog/e2e/Dialog.e2e.tsx
index c40627a63d36e2..25fd99b5fab4c9 100644
--- a/packages/react-components/react-dialog/e2e/Dialog.e2e.tsx
+++ b/packages/react-components/react-dialog/e2e/Dialog.e2e.tsx
@@ -4,9 +4,33 @@ import { mount as mountBase } from '@cypress/react';
import { FluentProvider } from '@fluentui/react-provider';
import { teamsLightTheme } from '@fluentui/react-theme';
-import { Dialog, DialogActions, DialogBody, DialogSurface, DialogTitle, DialogTrigger } from '@fluentui/react-dialog';
-import { Button } from '@fluentui/react-components';
-import { dialogSurfaceSelector, dialogTriggerCloseSelector, dialogTriggerOpenSelector } from './selectors';
+import {
+ Dialog,
+ DialogActions,
+ DialogBody,
+ DialogContent,
+ DialogSurface,
+ DialogTitle,
+ DialogTrigger,
+} from '@fluentui/react-dialog';
+import {
+ Button,
+ Menu,
+ MenuItem,
+ MenuList,
+ MenuPopover,
+ MenuTrigger,
+ Popover,
+ PopoverSurface,
+ PopoverTrigger,
+ Tooltip,
+} from '@fluentui/react-components';
+import {
+ dialogSurfaceSelector,
+ dialogTriggerCloseId,
+ dialogTriggerCloseSelector,
+ dialogTriggerOpenSelector,
+} from './selectors';
const mount = (element: JSX.Element) => mountBase({element} );
@@ -14,22 +38,24 @@ describe('Dialog', () => {
it('should be closed by default', () => {
mount(
-
+
Open dialog
- Dialog title
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
- est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
- cumque eaque?
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+ Close
+
+ Do Something
+
-
-
- Close
-
- Do Something
-
,
);
@@ -39,133 +65,238 @@ describe('Dialog', () => {
it('should open when trigger is clicked', () => {
mount(
-
+
Open dialog
- Dialog title
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
- est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
- cumque eaque?
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+ Close
+
+ Do Something
+
-
-
- Close
-
- Do Something
-
,
);
- cy.get(dialogTriggerOpenSelector).click();
+ cy.get(dialogTriggerOpenSelector).realClick();
cy.get(dialogSurfaceSelector).should('exist');
});
it('should focus on first focusabled element when opened', () => {
mount(
-
+
Open dialog
- Dialog title
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
- est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
- cumque eaque?
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+
+ Close
+
+
+ Do Something
+
-
-
-
- Close
-
-
- Do Something
-
,
);
- cy.get(dialogTriggerOpenSelector).click();
+ cy.get(dialogTriggerOpenSelector).realClick();
cy.get(dialogTriggerCloseSelector).should('be.focused');
});
- it('should focus on body if no focusabled element in dialog', () => {
+ it('should focus on dialog surface if no focusable element in dialog', () => {
mount(
-
+
Open dialog
- Dialog title
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
- est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
- cumque eaque?
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
,
);
- cy.get(dialogTriggerOpenSelector).click();
- cy.focused().should('not.exist');
+ cy.get(dialogTriggerOpenSelector).realClick();
+ cy.get(dialogSurfaceSelector).should('be.focused');
});
it('should focus back on trigger when dialog closed', () => {
mount(
-
+
Open dialog
- Dialog title
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
- est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
- cumque eaque?
+ Dialog title
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
+ est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
+ cumque eaque?
+
+
+
+
+ Close
+
+
+ Do Something
+
-
-
-
- Close
-
-
- Do Something
-
,
);
- cy.get(dialogTriggerOpenSelector).click();
- cy.get(dialogTriggerCloseSelector).click();
+ cy.get(dialogTriggerOpenSelector).realClick();
+ cy.get(dialogTriggerCloseSelector).realClick();
cy.get(dialogTriggerOpenSelector).should('be.focused');
});
- describe('modalType = modal', () => {
- it('should close with escape keydown', () => {
- mount(
-
-
+ it('should allow change of focus on open', () => {
+ const CustomFocusedElementOnOpen = () => {
+ const buttonRef = React.useRef(null);
+ const [open, setOpen] = React.useState(false);
+ React.useEffect(() => {
+ if (open && buttonRef.current) {
+ buttonRef.current.focus();
+ }
+ }, [open]);
+ return (
+ setOpen(data.open)}>
+
Open dialog
- Dialog title
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam exercitationem cumque repellendus eaque
- est dolor eius expedita nulla ullam? Tenetur reprehenderit aut voluptatum impedit voluptates in natus iure
- cumque eaque?
+ Dialog title
+ This dialog focus on the second button instead of the first
+
+ Third Action
+
+
+
+
+ Close
+
+
+ Do Something
+
+
+
+ );
+ };
+ mount( );
+ cy.get(dialogTriggerOpenSelector).realClick();
+ cy.get(dialogTriggerCloseSelector).should('be.focused');
+ });
+ it('should not close with Escape keydown while focusing other elements that control Escape', () => {
+ mount(
+
+
+ Open dialog
+
+
+
+ Dialog title
+
+
+
+
+
+
+
+
+