From 8942eadb06b34cf633e65fbf290b351a5378152b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Mendes?= Date: Thu, 13 Aug 2026 20:48:17 +0100 Subject: [PATCH] commit chnages new control DetailsList --- config/jest.config.json | 2 +- .../documentation/docs/assets/DetailsList.png | Bin 0 -> 435089 bytes .../docs/controls/DetailsList.md | 433 +++++ docs/documentation/mkdocs.yml | 1 + package-lock.json | 1686 +++++++---------- package.json | 2 +- src/DetailsList.ts | 26 + src/controls/DetailsList/DetailsList.test.tsx | 71 + src/controls/DetailsList/DetailsList.tsx | 617 ++++++ src/controls/DetailsList/DetailsList.types.ts | 270 +++ src/controls/DetailsList/DetailsList.utils.ts | 189 ++ .../DetailsList/DetailsListContent.tsx | 12 + .../DetailsList/DetailsListGroupHeader.tsx | 97 + .../DetailsList/DetailsListHeader.tsx | 252 +++ src/controls/DetailsList/DetailsListRow.tsx | 343 ++++ .../DetailsList/DetailsListShimmerRows.tsx | 92 + src/controls/DetailsList/index.ts | 2 + .../DetailsList/useDetailsListColumns.ts | 222 +++ .../DetailsList/useDetailsListGroups.ts | 45 + .../DetailsList/useDetailsListSelection.ts | 193 ++ .../DetailsList/useDetailsListStyles.ts | 374 ++++ .../DetailsList/useDetailsListViewport.ts | 131 ++ src/index.ts | 1 + src/loc/bg-bg.ts | 9 + src/loc/ca-es.ts | 9 + src/loc/cs-cz.ts | 9 + src/loc/da-dk.ts | 9 + src/loc/de-de.ts | 9 + src/loc/el-gr.ts | 9 + src/loc/en-us.ts | 9 + src/loc/es-es.ts | 9 + src/loc/et-ee.ts | 9 + src/loc/eu-es.ts | 9 + src/loc/fi-fi.ts | 9 + src/loc/fr-ca.ts | 9 + src/loc/fr-fr.ts | 9 + src/loc/it-it.ts | 9 + src/loc/ja-jp.ts | 9 + src/loc/lt-lt.ts | 9 + src/loc/lv-lv.ts | 9 + src/loc/mystrings.d.ts | 9 + src/loc/nb-no.ts | 9 + src/loc/nl-nl.ts | 9 + src/loc/pl-pl.ts | 9 + src/loc/pt-br.ts | 10 +- src/loc/pt-pt.ts | 9 + src/loc/ro-ro.ts | 9 + src/loc/ru-ru.ts | 9 + src/loc/sk-sk.ts | 9 + src/loc/sr-latn-rs.ts | 9 + src/loc/sv-se.ts | 9 + src/loc/tr-tr.ts | 9 + src/loc/vi-vn.ts | 9 + src/loc/zh-cn.ts | 9 + src/loc/zh-tw.ts | 9 + .../ControlsTestWebPart.manifest.json | 1 + .../controlsTest/IControlsTestWebPartProps.ts | 2 +- .../controlsTest/components/ControlsTest.tsx | 45 + .../components/TestDetailsListControl.tsx | 613 ++++++ .../propertyPane/controls/ControlToggles.tsx | 2 +- tests/__mocks__/ControlStrings.js | 21 + 61 files changed, 5047 insertions(+), 987 deletions(-) create mode 100644 docs/documentation/docs/assets/DetailsList.png create mode 100644 docs/documentation/docs/controls/DetailsList.md create mode 100644 src/DetailsList.ts create mode 100644 src/controls/DetailsList/DetailsList.test.tsx create mode 100644 src/controls/DetailsList/DetailsList.tsx create mode 100644 src/controls/DetailsList/DetailsList.types.ts create mode 100644 src/controls/DetailsList/DetailsList.utils.ts create mode 100644 src/controls/DetailsList/DetailsListContent.tsx create mode 100644 src/controls/DetailsList/DetailsListGroupHeader.tsx create mode 100644 src/controls/DetailsList/DetailsListHeader.tsx create mode 100644 src/controls/DetailsList/DetailsListRow.tsx create mode 100644 src/controls/DetailsList/DetailsListShimmerRows.tsx create mode 100644 src/controls/DetailsList/index.ts create mode 100644 src/controls/DetailsList/useDetailsListColumns.ts create mode 100644 src/controls/DetailsList/useDetailsListGroups.ts create mode 100644 src/controls/DetailsList/useDetailsListSelection.ts create mode 100644 src/controls/DetailsList/useDetailsListStyles.ts create mode 100644 src/controls/DetailsList/useDetailsListViewport.ts create mode 100644 src/webparts/controlsTest/components/TestDetailsListControl.tsx create mode 100644 tests/__mocks__/ControlStrings.js diff --git a/config/jest.config.json b/config/jest.config.json index d4e1e7136..c11f11824 100644 --- a/config/jest.config.json +++ b/config/jest.config.json @@ -18,7 +18,7 @@ "src/common/telemetry/(.*)$": "identity-obj-proxy", "@pnp/sp": "identity-obj-proxy", "'@pnp/sp/fields": "identity-obj-proxy", - "ControlStrings": "identity-obj-proxy", + "ControlStrings": "/tests/__mocks__/ControlStrings.js", "\\.(css|scss)$": "identity-obj-proxy" } } diff --git a/docs/documentation/docs/assets/DetailsList.png b/docs/documentation/docs/assets/DetailsList.png new file mode 100644 index 0000000000000000000000000000000000000000..6398f7978d18a83905143593dd1387e49b1090c9 GIT binary patch literal 435089 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

jrx!(W>GdT>~n7ua*#US}k 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

S+bORYl)a&L#Jujel*#4G$3x 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 z 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�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 t@x&3P@~~v1[] = [ + { + key: "name", + name: "Project", + fieldName: "name", + minWidth: 180, + isRowHeader: true, + }, + { + key: "owner", + name: "Owner", + fieldName: "owner", + minWidth: 140, + }, + { + key: "status", + name: "Status", + fieldName: "status", + minWidth: 100, + }, +]; +``` + +- Use the `DetailsList` control in your component as follows: + +```TypeScript +const [selectedProjects, setSelectedProjects] = React.useState([]); + + project.id} + selectionMode={DetailsListSelectionMode.multiple} + onSelectionChanged={({ selectedItems }) => setSelectedProjects(selectedItems)} + ariaLabelForGrid="Projects" +/> +``` + +The control uses Fluent UI 9 components internally. Render it inside a Fluent UI +9 `FluentProvider` when the surrounding application provides a custom Fluent UI +9 theme. + +## Selection + +The `selectionMode` property controls whether rows can be selected. Use +`selectedKeys` for a controlled selection or `defaultSelectedKeys` for an +initial selection. + +```TypeScript +const [selectedKeys, setSelectedKeys] = React.useState>(new Set()); + + project.id} + selectionMode={DetailsListSelectionMode.multiple} + selectedKeys={selectedKeys} + onSelectionChanged={({ selectedKeys: nextKeys }) => { + setSelectedKeys(new Set(Array.from(nextKeys).map((key) => Number(key)))); + }} +/> +``` + +`CheckboxVisibility` can be used to show checkboxes always, on hover, or never. +The `disabledItemKeys` property prevents specific rows from being selected. + +## Grouping + +Groups use indexes into the flattened `items` array. `startIndex` identifies the +first item in a group and `count` identifies how many items it contains. + +```TypeScript +import { + DetailsList, + DetailsListSelectionMode, + IDetailsListGroup, +} from "@pnp/spfx-controls-react/lib/DetailsList"; + +const groupedProjects: IProject[] = [ + { id: 1, name: "Intranet refresh", owner: "Maya Patel", status: "Active" }, + { id: 2, name: "Launch checklist", owner: "Alex Kim", status: "Active" }, + { id: 3, name: "Legacy migration", owner: "João Mendes", status: "Archived" }, +]; + +const groups: IDetailsListGroup[] = [ + { key: "active", name: "Active", startIndex: 0, count: 2 }, + { key: "archived", name: "Archived", startIndex: 2, count: 1, isCollapsed: true }, +]; + + { + console.log(`${group.name} collapsed: ${isCollapsed}`); + }} + selectionMode={DetailsListSelectionMode.none} +/> +``` + +Use `onRenderGroupHeader` when a solution needs a custom group header. The +default group header provides the expand and collapse interaction and aligns the +group label with the leading edge of the list. + +## Sorting, resizing, and custom cells + +Sorting is controlled by the consuming component. Update the items and the +column sort state in `onColumnClick`: + +```TypeScript +import { ColumnActionsMode } from "@pnp/spfx-controls-react/lib/DetailsList"; + +const [projectItems, setProjectItems] = React.useState(projects); + +const sortableColumns: IColumn[] = columns.map((column) => ({ + ...column, + isResizable: true, + columnActionsMode: ColumnActionsMode.clickable, + onColumnClick: (_event, clickedColumn) => { + const fieldName = clickedColumn.fieldName; + if (fieldName !== "name" && fieldName !== "owner" && fieldName !== "status") { + return; + } + setProjectItems((currentProjects) => [...currentProjects].sort((left, right) => + left[fieldName].localeCompare(right[fieldName]), + )); + }, +})); + + { + console.log(`Column ${columnIndex} (${column.name}) resized to ${width}`); + }} +/> +``` + +Set `isResizable` on a column to enable its resize handle. Users can resize with +the pointer, use the keyboard arrow keys, or double-click the handle to +auto-fit the column. Use `minWidth` and `maxWidth` to constrain the result. + +Use `onRender` on an individual `IColumn` or `onRenderItemColumn` on the control +to render icons, badges, links, and row actions: + +```TypeScript +import { CheckmarkCircle20Filled } from "@fluentui/react-icons"; + +const columnsWithIcons: IColumn[] = [ + { + key: "status", + name: "Status", + fieldName: "status", + minWidth: 120, + onRender: (project) => ( +

+ ), + }, +]; +``` + +## Column drag and drop + +Pass `columnReorderOptions` to allow users to drag column headers into a new +order. Frozen columns remain at the beginning or end of the list. + +```TypeScript +import { + ColumnDragEndLocation, + IColumnReorderOptions, +} from "@pnp/spfx-controls-react/lib/DetailsList"; + +const columnReorderOptions: IColumnReorderOptions = { + frozenColumnCountFromStart: 1, + frozenColumnCountFromEnd: 1, + onColumnDrop: ({ draggedColumn, targetColumn }) => { + console.log(`Moved ${draggedColumn.name} before ${targetColumn.name}`); + }, + onDragEnd: (location) => { + if (location === ColumnDragEndLocation.header) { + console.log("Column order updated"); + } + }, +}; + + +``` + +## Row drag and drop + +Use `dragDropEvents` to implement scenarios such as prioritizing a work queue, +reordering a playlist, or moving files between an ordered list. + +```TypeScript +import { IDetailsListRowDragDropEvents } from "@pnp/spfx-controls-react/lib/DetailsList"; + +const dragDropEvents: IDetailsListRowDragDropEvents = { + canDrag: (project) => project.status === "Active", + canDrop: (draggedProject, targetProject) => draggedProject.id !== targetProject.id, + onDragStart: (project) => console.log(`Dragging ${project.name}`), + onDrop: (draggedProject, targetProject, targetIndex) => { + console.log(`Move ${draggedProject.name} before row ${targetIndex}`); + console.log(`Target row: ${targetProject.name}`); + }, +}; + + +``` + +## Infinite scrolling and loading states + +Set `enableInfiniteScroll` and provide `onLoadMore` for a list backed by a +paged API. `hasNextPage` prevents another request after the final page. + +```TypeScript + { + const nextPage = await loadNextProjectPage(); + setProjects((currentProjects) => [...currentProjects, ...nextPage.items]); + setHasNextPage(nextPage.hasNextPage); + }} + hasNextPage={hasNextPage} + isLoadingMore={isLoadingMore} + loadingMoreMessage="Loading more projects..." +/> +``` + +For an initial load, use `isLoading` and `loadingMessage`. The control also +supports shimmer placeholders through `enableShimmer`, `shimmerLines`, +`ariaLabelForShimmer`, and `onRenderCustomPlaceholder`. Use `emptyState` when +there are no items to display. + +## Virtualization + +Virtualization is useful for large lists. Set a fixed `height`, enable +`enableVirtualization`, and adjust `overscanCount` when the application needs +more rows rendered just outside the viewport. + +```TypeScript + itemCount > 50} +/> +``` + +## Implementation + +The `DetailsList` control can be configured with the following properties: + +| Property | Type | Required | Description | +| ---- | ---- | ---- | ---- | +| items | readonly T[] | yes | Items to render in the list. | +| columns | readonly IColumn<T>[] | yes | Columns to render and their rendering, sorting, grouping, and resizing configuration. | +| getKey | (item: T, index: number) => React.Key | no | Returns the stable key for a row. The index is used when this is not provided. | +| setKey | string | no | Key used to identify the list instance. | +| height | number | no | Height of the scrollable viewport. Required for practical virtualization and infinite scrolling. | +| compact | boolean | no | Renders rows with a compact layout. | +| layoutMode | DetailsListLayoutMode | no | Uses `fixedColumns` or `justified` column layout. | +| constrainMode | ConstrainMode | no | Uses `unconstrained` or `horizontalConstrained` horizontal layout. | +| isHeaderVisible | boolean | no | Controls whether the column header is rendered. | +| selectionMode | DetailsListSelectionMode | no | Uses `none`, `single`, or `multiple` row selection. | +| checkboxVisibility | CheckboxVisibility | no | Uses `onHover`, `always`, or `hidden` selection checkboxes. | +| selectedKeys | ReadonlySet<React.Key> or readonly React.Key[] | no | Controlled selected row keys. | +| defaultSelectedKeys | readonly React.Key[] | no | Initial selected row keys for an uncontrolled list. | +| disabledItemKeys | ReadonlySet<React.Key> or readonly React.Key[] | no | Row keys that cannot be selected or invoked. | +| onSelectionChanged | (change: IDetailsListSelectionChange<T>) => void | no | Called after the selected rows change. | +| onActiveItemChanged | (item: T, index: number, event: React.FocusEvent<HTMLElement>) => void | no | Called when the active row changes. | +| onItemInvoked | (item: T, index: number, event: React.SyntheticEvent) => void | no | Called when a row is invoked. | +| onItemContextMenu | (item: T, index: number, event: React.MouseEvent<HTMLElement>) => void or boolean | no | Handles a row context menu. Return `true` when the event is handled. | +| onColumnHeaderClick | (event: React.MouseEvent<HTMLElement>, column: IColumn<T>) => void | no | Handles a column header click, commonly used for sorting. | +| onColumnHeaderContextMenu | (column: IColumn<T>, event: React.MouseEvent<HTMLElement>) => void | no | Handles a column header context menu. | +| onColumnResize | (column: IColumn<T>, width: number, columnIndex: number) => void | no | Called after a column is resized. | +| columnReorderOptions | IColumnReorderOptions<T> | no | Enables column drag and drop and optionally freezes columns at either edge. | +| dragDropEvents | IDetailsListRowDragDropEvents<T> | no | Enables row drag and drop callbacks. | +| groups | readonly IDetailsListGroup<T>[] | no | Group definitions for the flattened items array. | +| onToggleGroup | (group: IDetailsListGroup<T>, isCollapsed: boolean) => void | no | Called when a group is expanded or collapsed. | +| enableVirtualization | boolean | no | Enables viewport-based row rendering. | +| rowHeight | number | no | Row height used by virtualization. | +| groupHeaderHeight | number | no | Group header height used by virtualization. | +| overscanCount | number | no | Number of extra rows rendered outside the viewport. | +| onShouldVirtualize | (itemCount: number) => boolean | no | Determines whether virtualization is used for the current item count. | +| enableInfiniteScroll | boolean | no | Enables loading more rows near the end of the viewport. | +| infiniteScrollThreshold | number | no | Distance from the end of the viewport that triggers `onLoadMore`. | +| onLoadMore | () => void or Promise<void> | no | Loads the next page of items. | +| hasNextPage | boolean | no | Indicates whether another page is available. | +| isLoadingMore | boolean | no | Displays the loading-more state while the next page is being loaded. | +| isLoading | boolean | no | Displays the initial loading state. | +| enableShimmer | boolean | no | Renders shimmer rows while loading. | +| shimmerLines | number | no | Number of shimmer rows. | +| loadingMessage | React.ReactNode | no | Content shown during the initial loading state. | +| loadingMoreMessage | React.ReactNode | no | Content shown while loading another page. | +| emptyState | React.ReactNode | no | Content shown when there are no items. | +| ariaLabelForGrid | string | no | Accessible label for the list grid. | +| getRowAriaLabel | (item: T) => string | no | Returns the accessible label for a row. | +| styles | IDetailsListStyles | no | Inline style object for the root, viewport, grid, header, rows, cells, and group headers. | + +## `IColumn` properties + +| Property | Type | Required | Description | +| ---- | ---- | ---- | ---- | +| key | string | yes | Unique column key. | +| name | string | yes | Display name for the column header. | +| fieldName | keyof T & string | no | Item property rendered by the default cell renderer. | +| minWidth | number | yes | Minimum column width. | +| maxWidth | number | no | Maximum column width. | +| isResizable | boolean | no | Enables pointer, keyboard, and double-click resizing. | +| isRowHeader | boolean | no | Marks the column as the row header for accessibility. | +| isSorted | boolean | no | Displays the sorted state. Sorting is handled by the consuming component. | +| isSortedDescending | boolean | no | Indicates descending sort direction. | +| isGrouped | boolean | no | Marks the column as the grouping column. | +| columnActionsMode | ColumnActionsMode | no | Uses `disabled`, `clickable`, or `hasDropdown`. | +| onRender | (item: T, index: number, column: IColumn<T>) => React.ReactNode | no | Renders an individual cell. | +| onRenderHeader | (column: IColumn<T>) => React.ReactNode | no | Renders a custom column header. | +| onColumnClick | (event, column) => void | no | Handles a column header click. | +| onColumnResize | (width: number) => void | no | Handles a resize for this column. | + +## `IColumnReorderOptions` properties + +| Property | Type | Required | Description | +| ---- | ---- | ---- | ---- | +| frozenColumnCountFromStart | number | no | Number of columns that remain at the beginning of the list. | +| frozenColumnCountFromEnd | number | no | Number of columns that remain at the end of the list. | +| onColumnDragStart | (dragStarted: boolean) => void | no | Called when column dragging starts or ends. | +| onColumnDrop | (details: IDetailsListColumnDragDropDetails<T>) => void | no | Called after a column is dropped. | +| onDragEnd | (location: ColumnDragEndLocation) => void | no | Called when column dragging ends. | + +## Enums + +### `DetailsListSelectionMode` + +| Name | Value | +| ---- | ---- | +| none | 0 | +| single | 1 | +| multiple | 2 | + +### `CheckboxVisibility` + +| Name | Value | +| ---- | ---- | +| onHover | 0 | +| always | 1 | +| hidden | 2 | + +### `DetailsListLayoutMode` + +| Name | Value | +| ---- | ---- | +| fixedColumns | 0 | +| justified | 1 | + +### `ConstrainMode` + +| Name | Value | +| ---- | ---- | +| unconstrained | 0 | +| horizontalConstrained | 1 | + +### `ColumnActionsMode` + +| Name | Value | +| ---- | ---- | +| disabled | 0 | +| clickable | 1 | +| hasDropdown | 2 | + +### `ColumnDragEndLocation` + +| Name | Value | +| ---- | ---- | +| outside | 0 | +| surface | 1 | +| header | 2 | + +![](https://telemetry.sharepointpnp.com/sp-dev-fx-controls-react/wiki/controls/DetailsList) diff --git a/docs/documentation/mkdocs.yml b/docs/documentation/mkdocs.yml index f5eb3b0a3..9457e3301 100644 --- a/docs/documentation/mkdocs.yml +++ b/docs/documentation/mkdocs.yml @@ -30,6 +30,7 @@ nav: - ContentTypePicker: 'controls/ContentTypePicker.md' - Dashboard: 'controls/Dashboard.md' - DateTimePicker: 'controls/DateTimePicker.md' + - DetailsList: 'controls/DetailsList.md' - DragDropFiles: 'controls/DragDropFiles.md' - DynamicForm: 'controls/DynamicForm.md' - EnhancedThemeProvider: 'controls/EnhancedThemeProvider.md' diff --git a/package-lock.json b/package-lock.json index 67b6172c1..4825574a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1610,12 +1610,12 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", - "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", + "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.11" + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/devtools": { @@ -1628,19 +1628,19 @@ } }, "node_modules/@floating-ui/dom": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", - "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz", + "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.5", - "@floating-ui/utils": "^0.2.11" + "@floating-ui/core": "^1.8.0", + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/utils": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", - "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", + "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==", "license": "MIT" }, "node_modules/@fluentui/accessibility": { @@ -1777,9 +1777,9 @@ } }, "node_modules/@fluentui/keyboard-keys": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.8.tgz", - "integrity": "sha512-iUSJUUHAyTosnXK8O2Ilbfxma+ZyZPMua5vB028Ys96z80v+LFwntoehlFsdH3rMuPsA8GaC1RE7LMezwPBPdw==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.9.tgz", + "integrity": "sha512-DjX4z+dDCB49rsmyDuOwtD28Zbe9CUf86JKi8aUEvO5/TetsiuGPokgJiFIR0S9SGeFbquj5CUmAslk1RpgMzw==", "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" @@ -1796,9 +1796,9 @@ } }, "node_modules/@fluentui/priority-overflow": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.3.0.tgz", - "integrity": "sha512-yaBC0R4e+4ZlCWDulB5S+xBrlnLwfzdg68GaarCqQO8OHjLg7Ah05xTj7PsAYcoHeEg/9vYeBwGXBpRO8+Tjqw==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.4.2.tgz", + "integrity": "sha512-xjjOolrrFWXny0RQFazheFnQ6O5qEm2cmHrsl8sUveRyARGmlzZQFxSQ4NAvtpnhx/GHXcqCKfINH+9ciyJX0w==", "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" @@ -1833,21 +1833,21 @@ } }, "node_modules/@fluentui/react-accordion": { - "version": "9.9.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.9.2.tgz", - "integrity": "sha512-Mmi5nVKfQrBiBiD1JPVtCmIMrR1CpCy8hsWZLwv/pHt+uHHyW9HyrPXwiOitj3ookA5ec1kXyl34BN8RUi7DGQ==", + "version": "9.12.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.12.2.tgz", + "integrity": "sha512-j4uWILIw3jnVduQVxttQUZV26eHfkqlzsOavrdf7cjTtfJItmiicqvP520jZgfFLR3FsQhLQmcJvzxXbB9GQuw==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-context-selector": "^9.2.19", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.13.0", - "@fluentui/react-motion-components-preview": "^0.15.2", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-motion": "^9.16.2", + "@fluentui/react-motion-components-preview": "^0.15.7", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -1859,18 +1859,18 @@ } }, "node_modules/@fluentui/react-alert": { - "version": "9.0.0-beta.136", - "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.136.tgz", - "integrity": "sha512-tXxU+fTjWtpv4V6qn21Vuhy1FS6VveRYy747241R1Ta4lqvxHfZ+Z8fowRZaXNdcso0ZM+QUzpcaz8kAELUm2g==", + "version": "9.0.1-0", + "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.1-0.tgz", + "integrity": "sha512-pzV5sFD6JX38PegV+rmV2i0psTO1yCTODYewg0PPEz/g/hpLsbUCpLoPn0Ga3Nqc/szMcWbY4b/2c7cAkO79fg==", "license": "MIT", "dependencies": { - "@fluentui/react-avatar": "^9.10.3", - "@fluentui/react-button": "^9.9.0", + "@fluentui/react-avatar": "^9.11.5", + "@fluentui/react-button": "^9.11.0", "@fluentui/react-icons": "^2.0.239", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -1882,16 +1882,16 @@ } }, "node_modules/@fluentui/react-aria": { - "version": "9.17.10", - "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.17.10.tgz", - "integrity": "sha512-KqS2XcdN84XsgVG4fAESyOBfixN7zbObWfQVLNZ2gZrp2b1hPGVYfQ6J4WOO0vXMKYp0rre/QMOgDm6/srL0XQ==", + "version": "9.17.14", + "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.17.14.tgz", + "integrity": "sha512-/oBdrvWcIpziaVj5b5e8lDR2DLzVztvQQXuJqscM7ztYxhLYK2wZG0rAVxlAv+Bhyvx1Zqf/YtPCv/6mItx3zw==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-utilities": "^9.26.6", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -1902,21 +1902,21 @@ } }, "node_modules/@fluentui/react-avatar": { - "version": "9.10.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.10.3.tgz", - "integrity": "sha512-f8oW58Z+9nehDk/7PInN1paw1jptN2+TiBKcRagU6evHlmnfsV9+GKnS/vInEG3QPQAVPSdYVub03EkF/w90SA==", + "version": "9.11.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.11.5.tgz", + "integrity": "sha512-frrqEbOKTGyff3aW5kaal7TNa+Slguwc6nVj+CvxV4AidEmf0r1Vk0QnIj/ioNT1UoG1/PNzaLfz3uu8ce6aSg==", "license": "MIT", "dependencies": { - "@fluentui/react-badge": "^9.5.0", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-badge": "^9.5.5", + "@fluentui/react-context-selector": "^9.2.19", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-popover": "^9.14.0", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-tooltip": "^9.9.3", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-popover": "^9.14.6", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-tooltip": "^9.10.5", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -1928,16 +1928,16 @@ } }, "node_modules/@fluentui/react-badge": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.5.0.tgz", - "integrity": "sha512-38vaGn7DjS2BqIzjon2U6Xmh+39e2khBwOfsmYx36Z3jqGHbuPwAjQ/kiquTIvtlRRSufwmNtj6C8/J1gN8jmw==", + "version": "9.5.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.5.5.tgz", + "integrity": "sha512-1BtuzPTsIgV6edHwV9oVKnZRhOIP/3RZTMDd3gSHt3nmXV/R8CcpOxxFhDuG+4AtKC26cvk6DV3hy5BKhw9bPg==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -1975,20 +1975,20 @@ } }, "node_modules/@fluentui/react-breadcrumb": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.4.0.tgz", - "integrity": "sha512-QpCjYlM3JTMnNwh/sDehDbuAVjTcgSfjkPdSmFaPk2lPHpER32CBcJVhheP9en2U5NbW1e+Gtvq8y06RN8FCWw==", + "version": "9.4.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.4.5.tgz", + "integrity": "sha512-WUfOJSsiWLuNT7QCTGGWGi7bx5gRjspEE0B14eQIj5bfYhu5svfjfbf4Cgxi0Q3VYootiCciPHgom8/pFi0ItQ==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-button": "^9.9.0", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-button": "^9.11.0", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-link": "^9.8.0", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-link": "^9.8.4", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2000,19 +2000,19 @@ } }, "node_modules/@fluentui/react-button": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.9.0.tgz", - "integrity": "sha512-aH3aSjKyxIiNb9jJOUaaIq47w7jP5ESFSRzvMjcWOETvlWo4QgNqEOOsYqpcltM1OrQZ0sTy/isxppRcyMDlcQ==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.11.0.tgz", + "integrity": "sha512-81zsqSvJSZx1SEG0kztcmEZb2kS8YUX0uPYsPp2bZCPEJB9YIBQn9kPrdt0M0YeAkoPKXQXG5gudSun9M80maA==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-aria": "^9.17.14", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2049,18 +2049,18 @@ } }, "node_modules/@fluentui/react-card": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.6.0.tgz", - "integrity": "sha512-vgBvhtSzQDa01aOP9zdhJXFLsZAiDVslRfX3HmlIo1pAMt8w+PBq+ypDp1wxM7HPFpj9+RYcERRKtf4MSNP9Nw==", - "license": "MIT", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-text": "^9.6.15", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "version": "9.7.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.7.2.tgz", + "integrity": "sha512-FsSmSYguIorjDPKcIfaXKIYRo+ZgQfu7toyKLRZsxtUiPa2i+C0bBTDwYVd0lLTo9oJN5dIiPshy9JBvw94BZw==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-text": "^9.6.19", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2072,21 +2072,21 @@ } }, "node_modules/@fluentui/react-carousel": { - "version": "9.9.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.9.5.tgz", - "integrity": "sha512-YitJHBj+9bbJMB6E6mdqV0tLSFMkxXUdqa0xMY6QKjGXoFkG8GYLI8FZwIfpbqmQfZ2oP7cdUvibGQ4Qyh3LHQ==", + "version": "9.9.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.9.12.tgz", + "integrity": "sha512-N8QUMzrKP/n+e+xJl9UO6tJhpMl5+S0/KZzUWYL7UxYwZ+cPJ1IdC45JOxI+iOwnFDXPpt+aAjU3WkPFo2PyLQ==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-button": "^9.11.0", + "@fluentui/react-context-selector": "^9.2.19", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-tooltip": "^9.9.3", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-tooltip": "^9.10.5", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "embla-carousel": "^8.5.1", @@ -2101,19 +2101,19 @@ } }, "node_modules/@fluentui/react-checkbox": { - "version": "9.5.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.5.17.tgz", - "integrity": "sha512-40uRrCnWBMiWyVF2ZN9Ep2nnl/onYrSaa8fNnLBn6Tunhuk9flCxWZygkO5h9Da2QP6DasyGG8WZld1nrR9GUg==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.6.4.tgz", + "integrity": "sha512-3OQaUJPXsMbi4ODVLl4zmRn4XqQBlfJS93cSnSYAAYHsA162D1UlsqwfZoTbnuUEJS+st9cWgbEcuZTYYQxm0Q==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.16", + "@fluentui/react-field": "^9.5.4", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.3.15", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-label": "^9.4.4", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2125,18 +2125,17 @@ } }, "node_modules/@fluentui/react-color-picker": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-color-picker/-/react-color-picker-9.2.15.tgz", - "integrity": "sha512-RMmawl7g4gUYLuTQG2QwCcR9fGC+vDD+snsBlXtObpj/cKpeDmYif46g88pYv86jeIXY1zsjINmLpELmz+uFmw==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-color-picker/-/react-color-picker-9.3.0.tgz", + "integrity": "sha512-2pNHOcDe0aci5hyqsnA+0YvJ1CMfHKt1+a4UUrgssb6i5S1l1rcwnljonAQ4sCve4bMx6FVqNybx9tJ+g7CNXg==", "license": "MIT", "dependencies": { - "@ctrl/tinycolor": "^3.3.4", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-context-selector": "^9.2.19", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2148,23 +2147,23 @@ } }, "node_modules/@fluentui/react-combobox": { - "version": "9.16.18", - "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.16.18.tgz", - "integrity": "sha512-nmyleswOSS9O/3gn8AWQ9Uuyis0WTHO1zZnDVapFUdgd2+hAcUSjJXPQv6NGftuUB5bgS2qAx9prRJg17ZrZvA==", + "version": "9.17.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.17.5.tgz", + "integrity": "sha512-roH1DwhPslUxvtOnI9lnnIn+YtEqnmd5SIBgqDB1pQVqcznDZsbGSNXk/8IoVntM5LsMOa0YKKOd8N+8+/7aQg==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-field": "^9.4.16", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-context-selector": "^9.2.19", + "@fluentui/react-field": "^9.5.4", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-portal": "^9.8.15", + "@fluentui/react-positioning": "^9.23.1", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2217,71 +2216,71 @@ } }, "node_modules/@fluentui/react-components": { - "version": "9.73.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.73.5.tgz", - "integrity": "sha512-vq7xsdImOXaSAT6jBqPWRPiDDZFs44Lc8IshxO/IjzbstqLNz6T6I65BBueyhX7lHFQnCq6JpAah+HXVRqpkpQ==", - "license": "MIT", - "dependencies": { - "@fluentui/react-accordion": "^9.9.2", - "@fluentui/react-alert": "9.0.0-beta.136", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-avatar": "^9.10.3", - "@fluentui/react-badge": "^9.5.0", - "@fluentui/react-breadcrumb": "^9.4.0", - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-card": "^9.6.0", - "@fluentui/react-carousel": "^9.9.5", - "@fluentui/react-checkbox": "^9.5.17", - "@fluentui/react-color-picker": "^9.2.15", - "@fluentui/react-combobox": "^9.16.18", - "@fluentui/react-dialog": "^9.17.2", - "@fluentui/react-divider": "^9.7.0", - "@fluentui/react-drawer": "^9.11.5", - "@fluentui/react-field": "^9.4.16", - "@fluentui/react-image": "^9.4.0", - "@fluentui/react-infobutton": "9.0.0-beta.112", - "@fluentui/react-infolabel": "^9.4.17", - "@fluentui/react-input": "^9.8.0", - "@fluentui/react-label": "^9.3.15", - "@fluentui/react-link": "^9.8.0", - "@fluentui/react-list": "^9.6.12", - "@fluentui/react-menu": "^9.23.0", - "@fluentui/react-message-bar": "^9.6.22", - "@fluentui/react-motion": "^9.13.0", - "@fluentui/react-nav": "^9.3.21", - "@fluentui/react-overflow": "^9.7.1", - "@fluentui/react-persona": "^9.7.0", - "@fluentui/react-popover": "^9.14.0", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", - "@fluentui/react-progress": "^9.4.16", - "@fluentui/react-provider": "^9.22.15", - "@fluentui/react-radio": "^9.5.16", - "@fluentui/react-rating": "^9.4.0", - "@fluentui/react-search": "^9.4.0", - "@fluentui/react-select": "^9.4.16", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-skeleton": "^9.7.0", - "@fluentui/react-slider": "^9.6.0", - "@fluentui/react-spinbutton": "^9.5.16", - "@fluentui/react-spinner": "^9.8.0", - "@fluentui/react-swatch-picker": "^9.5.0", - "@fluentui/react-switch": "^9.7.0", - "@fluentui/react-table": "^9.19.12", - "@fluentui/react-tabs": "^9.11.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-tag-picker": "^9.8.3", - "@fluentui/react-tags": "^9.7.18", - "@fluentui/react-teaching-popover": "^9.6.19", - "@fluentui/react-text": "^9.6.15", - "@fluentui/react-textarea": "^9.7.0", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-toast": "^9.7.15", - "@fluentui/react-toolbar": "^9.7.5", - "@fluentui/react-tooltip": "^9.9.3", - "@fluentui/react-tree": "^9.15.14", - "@fluentui/react-utilities": "^9.26.2", - "@fluentui/react-virtualizer": "9.0.0-alpha.111", + "version": "9.74.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.74.6.tgz", + "integrity": "sha512-JfAbId8J0W+dMh2KFxZbpX2ag7ZbpchIQam8Twc15k0qis+OkrCCxts+DF1xVb403PTFz/5n2YFxGWmEajUlDA==", + "license": "MIT", + "dependencies": { + "@fluentui/react-accordion": "^9.12.2", + "@fluentui/react-alert": "9.0.1-0", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-avatar": "^9.11.5", + "@fluentui/react-badge": "^9.5.5", + "@fluentui/react-breadcrumb": "^9.4.5", + "@fluentui/react-button": "^9.11.0", + "@fluentui/react-card": "^9.7.2", + "@fluentui/react-carousel": "^9.9.12", + "@fluentui/react-checkbox": "^9.6.4", + "@fluentui/react-color-picker": "^9.3.0", + "@fluentui/react-combobox": "^9.17.5", + "@fluentui/react-dialog": "^9.18.3", + "@fluentui/react-divider": "^9.7.4", + "@fluentui/react-drawer": "^9.13.2", + "@fluentui/react-field": "^9.5.4", + "@fluentui/react-image": "^9.4.4", + "@fluentui/react-infobutton": "9.0.0-beta.119", + "@fluentui/react-infolabel": "^9.4.24", + "@fluentui/react-input": "^9.8.6", + "@fluentui/react-label": "^9.4.4", + "@fluentui/react-link": "^9.8.4", + "@fluentui/react-list": "^9.6.17", + "@fluentui/react-menu": "^9.25.3", + "@fluentui/react-message-bar": "^9.7.5", + "@fluentui/react-motion": "^9.16.2", + "@fluentui/react-nav": "^9.4.4", + "@fluentui/react-overflow": "^9.9.2", + "@fluentui/react-persona": "^9.7.7", + "@fluentui/react-popover": "^9.14.6", + "@fluentui/react-portal": "^9.8.15", + "@fluentui/react-positioning": "^9.23.1", + "@fluentui/react-progress": "^9.5.4", + "@fluentui/react-provider": "^9.22.20", + "@fluentui/react-radio": "^9.6.5", + "@fluentui/react-rating": "^9.4.4", + "@fluentui/react-search": "^9.4.6", + "@fluentui/react-select": "^9.5.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-skeleton": "^9.7.5", + "@fluentui/react-slider": "^9.6.5", + "@fluentui/react-spinbutton": "^9.6.5", + "@fluentui/react-spinner": "^9.8.5", + "@fluentui/react-swatch-picker": "^9.6.0", + "@fluentui/react-switch": "^9.7.5", + "@fluentui/react-table": "^9.19.19", + "@fluentui/react-tabs": "^9.12.4", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-tag-picker": "^9.10.2", + "@fluentui/react-tags": "^9.9.4", + "@fluentui/react-teaching-popover": "^9.7.4", + "@fluentui/react-text": "^9.6.19", + "@fluentui/react-textarea": "^9.7.6", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-toast": "^9.8.2", + "@fluentui/react-toolbar": "^9.8.4", + "@fluentui/react-tooltip": "^9.10.5", + "@fluentui/react-tree": "^9.16.5", + "@fluentui/react-utilities": "^9.26.6", + "@fluentui/react-virtualizer": "9.0.0-alpha.115", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2316,12 +2315,12 @@ "license": "0BSD" }, "node_modules/@fluentui/react-context-selector": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.2.15.tgz", - "integrity": "sha512-QymBntFLJNZ9VfTOaBn2ApUSSSC5UuDW8ZcgPJPA+06XEFH+U9Zny2d9QAg1xYNYwIGWahWGQ+7ATOuLxtB8Jw==", + "version": "9.2.19", + "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.2.19.tgz", + "integrity": "sha512-NfBKjtaWxXGFI4ZC75aPeQRTKPJOSQDwpdsiX6L4miewLnEwBKtK7+8Tbj2eTLh6fKY0aRwBfHwGqydF2kXVzQ==", "license": "MIT", "dependencies": { - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.6", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -2333,23 +2332,23 @@ } }, "node_modules/@fluentui/react-dialog": { - "version": "9.17.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.17.2.tgz", - "integrity": "sha512-mZdKylSvh2fRf0e3wMX3ZNccb9DahsOE7A5Y9LG97ghYvndMBVG2YwScIzUFVvLS206ari6HMOl0lC5JRB1bKA==", + "version": "9.18.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.18.3.tgz", + "integrity": "sha512-fI87iSHyncgeGKxiXquGDORm2vRAjygZOQkjVehEPsyX1RFlEDZxjqvW82NX41f4wv4ie6/qLclOOSkHzCTG3w==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-context-selector": "^9.2.19", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.13.0", - "@fluentui/react-motion-components-preview": "^0.15.2", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-motion": "^9.16.2", + "@fluentui/react-motion-components-preview": "^0.15.7", + "@fluentui/react-portal": "^9.8.15", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2361,15 +2360,15 @@ } }, "node_modules/@fluentui/react-divider": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.7.0.tgz", - "integrity": "sha512-U8Nhrghjeh+XCGM4B7aHYosd6fXaxHC3MpZi7DB0xQ20ljn5cSTpBt4Yvl+tB9ld2+/eM8wekx1GVKyI4yWa3g==", + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.7.4.tgz", + "integrity": "sha512-Ue7mwFIVSpyiATZPl5g0H/08Gaj6M0OzA9SVGVVpYK90zIYvP1Da23tlUpr80OkFTDCjSNUP1NSYtBGG27AH3g==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2381,20 +2380,20 @@ } }, "node_modules/@fluentui/react-drawer": { - "version": "9.11.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.11.5.tgz", - "integrity": "sha512-eoZY+jKZwbJo1PUsb7Ico7u/8aObHL4BhPP6hd+HHNzB7seTpN7rLd0DpASLZsxJUy5yvch4QF2TrjOu6V8kRA==", - "license": "MIT", - "dependencies": { - "@fluentui/react-dialog": "^9.17.2", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.13.0", - "@fluentui/react-motion-components-preview": "^0.15.2", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "version": "9.13.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.13.2.tgz", + "integrity": "sha512-VM50S0Lr7PmA1DP770q+tZxCY9GmnAbQoKrlQWNJbhy74759dXbV2PVT0JnIWRkCqvNP0S2RDN4Z6SRJArIzQw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-dialog": "^9.18.3", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-motion": "^9.16.2", + "@fluentui/react-motion-components-preview": "^0.15.7", + "@fluentui/react-portal": "^9.8.15", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2406,18 +2405,18 @@ } }, "node_modules/@fluentui/react-field": { - "version": "9.4.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.4.16.tgz", - "integrity": "sha512-2mfuYGldeqr9Llt8QSfwdj1hQofScvNQ/1Rns9TE4QUP6cdqs3cPX2+FZNJzpgO9vq5bk0hJpKqo7lvXZdyEzw==", + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.5.4.tgz", + "integrity": "sha512-RoVtH7/GK/45V45NPvCuVVG3K3/FeBXF+Jkk2Gw12XKqfKru2eI8MIhDofKsSH5l6ZkLclZ0ElmQvrYrJSvqJQ==", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-context-selector": "^9.2.19", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.3.15", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-label": "^9.4.4", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2518,15 +2517,15 @@ } }, "node_modules/@fluentui/react-image": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.4.0.tgz", - "integrity": "sha512-BpcBlmkukm7YYf6PTCbAIMkeCXc8+7aq2eMADsxF5gFD8j3d5lBY3cKByOWRM1NvXcMXmqXr/hQP+ovqNAHzEA==", + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.4.4.tgz", + "integrity": "sha512-vjBHrUTuuDVp/IvIiz4bB0iqebU00EJHGJZpF5NlMd+TL7bcMhLU29MrbxQdvlNch78C+XCqoexbjHYoAUET9w==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2538,18 +2537,18 @@ } }, "node_modules/@fluentui/react-infobutton": { - "version": "9.0.0-beta.112", - "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.112.tgz", - "integrity": "sha512-Fhqoc6b1MQtHW+Mm5sBhfa5ZrRdOV4azuUa5WyBvwD4Ozq/z2pBOC/wi/A/WCjKMnGoMlQ2CggoLaMhQmenzAQ==", + "version": "9.0.0-beta.119", + "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.119.tgz", + "integrity": "sha512-6BsHqXEOxqWmSo3yqLynEht1uQTJO5snD+GbuyGJgnNWW2BuJ9Fzq/ZxaJNgY6t6c7T7W9JqRMPerXi0YsnNqQ==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.237", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.3.15", - "@fluentui/react-popover": "^9.14.0", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-label": "^9.4.4", + "@fluentui/react-popover": "^9.14.6", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2561,19 +2560,19 @@ } }, "node_modules/@fluentui/react-infolabel": { - "version": "9.4.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.4.17.tgz", - "integrity": "sha512-zLw52jn2wAuEKWFzaNj3aKhuB4BAEI8LqblryCg0LKPKHcv/z9d9RllCqcVz+ngdK1tQGtCIPH/wxNlZXx/I3Q==", + "version": "9.4.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.4.24.tgz", + "integrity": "sha512-AfApeHDRMxWMT1JsxJpDW+5Q2JfDX3HUxMhaj4q1Zz9204rqPN8r4VB3+fTqEC8SNghqiiDhIfI1bNeQ4baPwg==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.3.15", - "@fluentui/react-popover": "^9.14.0", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-label": "^9.4.4", + "@fluentui/react-popover": "^9.14.6", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2585,16 +2584,16 @@ } }, "node_modules/@fluentui/react-input": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.8.0.tgz", - "integrity": "sha512-y/CUMEo2pgFLHUDnKTfXV1hwZ5j0GUD5exTyBKoeNgfAwY1UelWIvKc7fgelhV5GYEQJL7ycm8eNq71CqLA74A==", + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.8.6.tgz", + "integrity": "sha512-4EAMOTN5DCXB5DFKLwsFkCbMMelqOfl+jnB4kbH9Nu6nLwhJj89EYYGzzs2V3bctmJN9mtd7xkGITAZLYhUpTQ==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.16", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-field": "^9.5.4", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2606,12 +2605,12 @@ } }, "node_modules/@fluentui/react-jsx-runtime": { - "version": "9.4.4", - "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.4.4.tgz", - "integrity": "sha512-npqPWSJ2qciCRB4B/cyWyrTbf8V8Z2Kfr9HnZqrUBDgEvq72rRGb+gml6naxGNzhaT4NBLQLZmdPZqt+1wZ4ig==", + "version": "9.4.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.4.5.tgz", + "integrity": "sha512-T791vRKj9l3WhJd6oWZ30J9xA8Pyv32VfB55PlywSqH8PchO+EzteG6q2yZ+6j919WRRMy45ElYebe1DulnGOA==", "license": "MIT", "dependencies": { - "@fluentui/react-utilities": "^9.26.5", + "@fluentui/react-utilities": "^9.26.6", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -2620,15 +2619,15 @@ } }, "node_modules/@fluentui/react-label": { - "version": "9.3.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.3.15.tgz", - "integrity": "sha512-ycmaQwC4tavA8WeDfgcay1Ywu/4goHq1NOeVxkyzWTPGA7rs+tdCgdZBQZLAsBK2XFaZiHs7l+KG9r1oIRKolA==", + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.4.4.tgz", + "integrity": "sha512-Xsi+K+c0SawFQFr72zpmzTHFhSqBpI8Lo6uqrfnVHtoF6lQyL11LyAIk0JtoLq82Pikqy4vvRta14fvwy0UM2g==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2640,17 +2639,17 @@ } }, "node_modules/@fluentui/react-link": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.8.0.tgz", - "integrity": "sha512-TH5LS4iuQ4jYzlR84A4n7lQTKaJuiuuGFHMIxoEqtKeMoL9F5AiabuBs6m7Q7clSdTrrcRMNzXLuEFarQrzGTQ==", + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.8.4.tgz", + "integrity": "sha512-wwyA/wRJOozyT2C0RK6maGKZM6xFgfoNt196WN5g+WApbNlgDEgqOLUScj14o+MNOe8H/bnfuNN1U6KEGtD09A==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2662,19 +2661,19 @@ } }, "node_modules/@fluentui/react-list": { - "version": "9.6.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-list/-/react-list-9.6.12.tgz", - "integrity": "sha512-vFeqP4r3rjqtd/p9p7woma/j2U3UlcirfqGje26ppBMzDs/0MWQiUmjTkQTMLnPeh72knnqwsF43dRSKSdTSng==", - "license": "MIT", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-checkbox": "^9.5.17", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "version": "9.6.17", + "resolved": "https://registry.npmjs.org/@fluentui/react-list/-/react-list-9.6.17.tgz", + "integrity": "sha512-KytdJlezG06DByb9uLfdnXtlaM1VxEpMXeaINfgjxwlHa/uohJVpwN3il+NSchYfTh/kle6telVRWG515Klhhg==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-checkbox": "^9.6.4", + "@fluentui/react-context-selector": "^9.2.19", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2686,24 +2685,24 @@ } }, "node_modules/@fluentui/react-menu": { - "version": "9.23.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.23.0.tgz", - "integrity": "sha512-KM08C5GQ+wcsZ6dcmjrMonsW1RRcuhygR7GBT6rnWxxx6qzKv6RCumckzL5NfSgvyJw4wWKs857k5sUczs+7VQ==", + "version": "9.25.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.25.3.tgz", + "integrity": "sha512-TLOIxNwrZG0vqLoQRQPPOcVJm+q8X6CiFBLHmEeomFgV1BWcxKkjo4Qohcqd2UEiBzGbSNc9vP1UZAC2wNc+5w==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-context-selector": "^9.2.19", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.13.0", - "@fluentui/react-motion-components-preview": "^0.15.2", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-motion": "^9.16.2", + "@fluentui/react-motion-components-preview": "^0.15.7", + "@fluentui/react-portal": "^9.8.15", + "@fluentui/react-positioning": "^9.23.1", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2715,20 +2714,20 @@ } }, "node_modules/@fluentui/react-message-bar": { - "version": "9.6.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.6.22.tgz", - "integrity": "sha512-9FvKlJwBvfcvwjOf/hsiXUjcIFOvPmJ0woFH4y6rwXGCY/TL3dztcLHbPZ6oVPN4GK+5VwRt1eRRVifrpQRGZw==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.7.5.tgz", + "integrity": "sha512-Q5VM6EkW3D0P7+/XCUO/4IBZW8tRLcsd9/yqLRk4ec9egxVrZZ6l5Z+SUK/MCEyoHXKP7GcErjcDGR1jm6JzxQ==", "license": "MIT", "dependencies": { - "@fluentui/react-button": "^9.9.0", + "@fluentui/react-button": "^9.11.0", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-link": "^9.8.0", - "@fluentui/react-motion": "^9.13.0", - "@fluentui/react-motion-components-preview": "^0.15.2", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-link": "^9.8.4", + "@fluentui/react-motion": "^9.16.2", + "@fluentui/react-motion-components-preview": "^0.15.7", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2800,13 +2799,13 @@ } }, "node_modules/@fluentui/react-motion": { - "version": "9.16.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.16.1.tgz", - "integrity": "sha512-sbrNuauwI5uw20XOAqPjXBfgBqPreHc5AxU7bJ6yoLUHL2gDKo7KGAIvLEd216GX37mgPkb3dx9rarIVGx3uvA==", + "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.16.2.tgz", + "integrity": "sha512-fraG2s/UlduW5JYbvP619S2755DlG7kiPKd/rlXEebgPRTSVgkuSWW5suvYVqO64/PJpZrnJD23sweAeqol6PA==", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-utilities": "^9.26.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-utilities": "^9.26.6", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -2817,9 +2816,9 @@ } }, "node_modules/@fluentui/react-motion-components-preview": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.15.6.tgz", - "integrity": "sha512-9aNzHAHNdfbH/8/mYGy5YVrUOGnpiru3YrqQ7KhCRWXvlce7yV3WF5CzN1g/uNh3MFmKGwQeW4ui6xJOfEaI4Q==", + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.15.7.tgz", + "integrity": "sha512-YeG5cPkmODOGfmVktpPCFCe/0mKj3CCrquHOREcf+gug2aXLp/0jFy8LY4LUhYeJw7wVzVr9XzBxuzo5dE4XIg==", "license": "MIT", "dependencies": { "@fluentui/react-motion": "*", @@ -2834,25 +2833,25 @@ } }, "node_modules/@fluentui/react-nav": { - "version": "9.3.21", - "resolved": "https://registry.npmjs.org/@fluentui/react-nav/-/react-nav-9.3.21.tgz", - "integrity": "sha512-HsynotAKugl+mESwrON1rrahODNvbU8lsKNzwge/OQuf9yE0TdkpgpZPgYNzLgIabj1B4mtP3rUvHTRNy78GOQ==", + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-nav/-/react-nav-9.4.4.tgz", + "integrity": "sha512-JIIC/QuWE+ySEEW6jF414Vh/wMNbO210wU+qC2U5+r6KiPFBvgkog5Pqr5qRY62XHlmJz2Zl+pDXBwoX9RSe4Q==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-divider": "^9.7.0", - "@fluentui/react-drawer": "^9.11.5", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-button": "^9.11.0", + "@fluentui/react-context-selector": "^9.2.19", + "@fluentui/react-divider": "^9.7.4", + "@fluentui/react-drawer": "^9.13.2", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.13.0", - "@fluentui/react-motion-components-preview": "^0.15.2", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-tooltip": "^9.9.3", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-motion": "^9.16.2", + "@fluentui/react-motion-components-preview": "^0.15.7", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-tooltip": "^9.10.5", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2944,15 +2943,15 @@ } }, "node_modules/@fluentui/react-overflow": { - "version": "9.7.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.7.1.tgz", - "integrity": "sha512-Ml1GlcLrAUv31d9WN15WGOZv32gzDtZD5Mp1MOQ3ichDfTtxrswIch7MDzZ8hLMGf/7Y2IzBpV8iFR1XdSrGBA==", + "version": "9.9.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.9.2.tgz", + "integrity": "sha512-11NL9YtysCKQrgcPkty4271MQ6cVsBANEU09qHtDkNpN2bODddwzrvK5ggCBaK7n7cTVlpJWYZzQZV+YxZ5EQQ==", "license": "MIT", "dependencies": { - "@fluentui/priority-overflow": "^9.3.0", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/priority-overflow": "^9.4.2", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2964,17 +2963,17 @@ } }, "node_modules/@fluentui/react-persona": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.7.0.tgz", - "integrity": "sha512-RBxY9nKL1TwuDzK8mAe29A7RigUbqiAUrJ0R14fom5cDWo+e4qLwTxgUy/8MVe6+joWLjfLeuVWbgvIEYNoEbg==", + "version": "9.7.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.7.7.tgz", + "integrity": "sha512-+xrJIClBzH6ua0yWRum0+9McEuZ/lCcOpdC9cmltcBag0Gb3/rjmf5Dr2w4tLPTIGzbLuDE00Yoexy6jJLWm2A==", "license": "MIT", "dependencies": { - "@fluentui/react-avatar": "^9.10.3", - "@fluentui/react-badge": "^9.5.0", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-avatar": "^9.11.5", + "@fluentui/react-badge": "^9.5.5", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2986,23 +2985,23 @@ } }, "node_modules/@fluentui/react-popover": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.14.0.tgz", - "integrity": "sha512-XrZlSfSYhA12j5bna4Sq8N/If2vul7gl8woVrN8U3iQUjdaHB6OAMZ/WMNUdMm35Z+4e4rHClAZxU2dUsbHrmw==", - "license": "MIT", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.13.0", - "@fluentui/react-motion-components-preview": "^0.15.2", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "version": "9.14.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.14.6.tgz", + "integrity": "sha512-BMDS4acfZbg/44za41s38PzRplqid5ardTA2Xcjq77YPwhoaLRVAPztU1/9/ivss3tuPDn1+20knyv+bBhInzw==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-context-selector": "^9.2.19", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-motion": "^9.16.2", + "@fluentui/react-motion-components-preview": "^0.15.7", + "@fluentui/react-portal": "^9.8.15", + "@fluentui/react-positioning": "^9.23.1", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3014,14 +3013,14 @@ } }, "node_modules/@fluentui/react-portal": { - "version": "9.8.11", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.8.11.tgz", - "integrity": "sha512-2eg4MdW7e2UGRYWPg05GCytAjWYNd55YOP9+iUDINoQwwto9oeFTtZRyn08HYw37cSNqoH24qGz/VBctzTkqDA==", + "version": "9.8.15", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.8.15.tgz", + "integrity": "sha512-1lXeUn+K31DwpJGQNKIRs6wz1iZOQWsH0gfLF6qy69m1EdR16SqfjprLZ3jI97xJDVatHIuYAvO/5EmmVv60/g==", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3046,16 +3045,16 @@ } }, "node_modules/@fluentui/react-positioning": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.22.0.tgz", - "integrity": "sha512-i3DLC4jd4MoYSZMYLKQNUTpkjKAJ0snIcihvkrjt2jpvv34CifKJhqVtjFQ470pRW4XNx/pBBX07vdXpA3poxA==", + "version": "9.23.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.23.1.tgz", + "integrity": "sha512-QtnF1gOc0pQx5ks0DADpl5Jxh8mh4R82ddtaYu9XdyqBIfRz/SdYOPD6eB99qc7ynZnywuHsNH144W77jO+vdQ==", "license": "MIT", "dependencies": { "@floating-ui/devtools": "^0.2.3", "@floating-ui/dom": "^1.6.12", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "use-sync-external-store": "^1.2.0" @@ -3068,16 +3067,17 @@ } }, "node_modules/@fluentui/react-progress": { - "version": "9.4.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.4.16.tgz", - "integrity": "sha512-IWVuD1hQoyIBK+RIGOCTc3HUPkdtOQghJPZ5uGwRrUlxGgpUV1h7rdAApiuQTWitrFfN6bP4PrsJmHT2DM2OFw==", + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.5.4.tgz", + "integrity": "sha512-SLVw/NCrW3pglcF2J7Cu9hc5CAnDq6yyeDuRd4FTxUtMnOpqH+k3AkkLAZDmELKlHe2ZJs5E7jHwFb5kPYcV7A==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.16", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-field": "^9.5.4", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-motion": "^9.16.2", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3100,17 +3100,17 @@ } }, "node_modules/@fluentui/react-provider": { - "version": "9.22.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.22.15.tgz", - "integrity": "sha512-a+ImgL9DOlylDM4UYPnxQTA3yXxbVj+O0iNEyTZ6fMzdMsHzpALU4GAq6tOyW4L7RaQtRBmNpVfwTCEKpqaTJQ==", + "version": "9.22.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.22.20.tgz", + "integrity": "sha512-Cu97d65ry3t+nbGWxBmkfbmQo3IPyFjxxskQWUkd4yQcC2OB5VKbuaO28gHP8EgZglxkQmoEMf/0sWCo5HI0rQ==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/core": "^1.16.0", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" @@ -3123,18 +3123,18 @@ } }, "node_modules/@fluentui/react-radio": { - "version": "9.5.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.5.16.tgz", - "integrity": "sha512-xHRqm+MTkIf6JLEz/dMLlHSL9X+ysXAkig+VOV5QTPZwDIr3SqfJVvBmLNUVmtzf+cmWsRKrrIbVGpFGo/CvxA==", - "license": "MIT", - "dependencies": { - "@fluentui/react-field": "^9.4.16", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.3.15", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.6.5.tgz", + "integrity": "sha512-xcyyGvklsmvcSYa95jPVKreJRwfOWVXFmPzWQ4OTSqDKe3zVRvPmkqiBVMwHAORsjkchMUQ6Gdvh0BG0hh6DLw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.5.4", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-label": "^9.4.4", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3146,17 +3146,17 @@ } }, "node_modules/@fluentui/react-rating": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.4.0.tgz", - "integrity": "sha512-qVesFNgQ7uuX8z9d8xqxIXn5ax06xffgBr/eAuZfqVYZG5aRrPHHRoiWf0HDrYD4Lb/HRBLPtbNihNxhXj/LEA==", + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.4.4.tgz", + "integrity": "sha512-GhM49vZ5018vE/FBDs8LXZVmK1SVdG/KNbJ0jDvQSUp4acgonnSxe9dPej2l8l6l3TZ2aEGmeUKwYhxQC3DcJg==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3168,17 +3168,17 @@ } }, "node_modules/@fluentui/react-search": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.4.0.tgz", - "integrity": "sha512-/uBJv2IK7gN7Mt+diByV+0COvKnkluvJ2gCnYQfeOpGjPS97IIeGUIa2xpfSq+eB7Ri++1OWlK61jRjlItDmsw==", + "version": "9.4.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.4.6.tgz", + "integrity": "sha512-cKe1nPhl08ity4wEktUdX2UGWlcVkwSjVckmCHoyVKKP1w/9jlL9KqzkEHaOUpo0NUr8vHWyOLjZSG5mcJox+g==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-input": "^9.8.0", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-input": "^9.8.6", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3190,17 +3190,17 @@ } }, "node_modules/@fluentui/react-select": { - "version": "9.4.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.4.16.tgz", - "integrity": "sha512-YsHMZsiKxH8suBtNTBXhtsvjM0u9UUXH641cEumgtjUz7SzeKNc/cWToLVyNz7GIoANL49rvubkByTeAQVCo2g==", + "version": "9.5.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.5.5.tgz", + "integrity": "sha512-cUu9gTlrlXdnVJ0GhzjTXfpMckyiFgNc1eY4HmcWbAIN6si250CsPkrdyvuqCwklWR9A/JHH3RD8RU+GUFmn7g==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.16", + "@fluentui/react-field": "^9.5.4", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3212,12 +3212,12 @@ } }, "node_modules/@fluentui/react-shared-contexts": { - "version": "9.26.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.26.2.tgz", - "integrity": "sha512-upKXkwlIp5oIhELr4clAZXQkuCd4GDXM6GZEz8BOmRO+PnxyqmycCXvxDxsmi6XN+0vkGM4joiIgkB14o/FctQ==", + "version": "9.26.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.26.3.tgz", + "integrity": "sha512-+FvkVJqX9yuZaZ//FWtNA4O0V33UA8Q82/5shp2fCox6HItENn87E5QecUobsodeYJ6xCAbTHccMh+LRiZhHJA==", "license": "MIT", "dependencies": { - "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-theme": "^9.2.2", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -3226,16 +3226,16 @@ } }, "node_modules/@fluentui/react-skeleton": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.7.0.tgz", - "integrity": "sha512-dSmB0jiz/swu/zquCbHx4nS0HKLJ09N6m9+3HNXY/t24JtK4gFNcl0jQssjIsgupeA8xWsjP7+b+VxUeWq1h9Q==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.7.5.tgz", + "integrity": "sha512-CpjtweojZjeDzOYdOgMneKfKrLosxR5xe1Fw3sySws8fZP0bqF7u6MKaJYUhRL6sFt4XK1e2gBFzJLe5IbAgRA==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.16", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-field": "^9.5.4", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3247,17 +3247,17 @@ } }, "node_modules/@fluentui/react-slider": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.6.0.tgz", - "integrity": "sha512-AlSU3GVVgcuiHL0b5xcSy8KDPZbN7yuFZMjKRe1yInK9mGfc6LuUB73EQoSIdJxRw74lMAC+am/+xCtjONlc9w==", + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.6.5.tgz", + "integrity": "sha512-GTDrlMaacPsXzrHPmmb+HdwOlJ6DSk9svFYHq/uDlneHPqGaBHH5RkkpRi3iqAQySd9YjqXVhUk9yOAgbci4OQ==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.16", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-field": "^9.5.4", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3269,18 +3269,18 @@ } }, "node_modules/@fluentui/react-spinbutton": { - "version": "9.5.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.5.16.tgz", - "integrity": "sha512-V4U9PSJM26BXrFqJ9K/VYYQeusBf8ldx5KOlZZ7hRamPsKTS5hyytWrF39lTLqCRlGckXPCLNzJpb1DLB+ID1g==", + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.6.5.tgz", + "integrity": "sha512-ooGgs1QJM2inLGlO0LDLAtOTw/erG78ZfPNhbeKTkOAcNYnoOykw9WQ3rTqYRuNmFfhIRyusjcDky5aiYYCqJg==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-field": "^9.4.16", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-field": "^9.5.4", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3292,16 +3292,16 @@ } }, "node_modules/@fluentui/react-spinner": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.8.0.tgz", - "integrity": "sha512-E1jMQueIvEEHdON6itZb3KxP67ACv+IKU/APNvQPftZVEpAZWn265T1EIe3OXAnAFHbXI3MjFcVxV9tu8+6yeg==", + "version": "9.8.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.8.5.tgz", + "integrity": "sha512-75LFy1x95R6UB50uaxNCgrlQJ72PodO15vrCawcWkVF4DkR+RynpZLoQNIPAABpbNM6ZD+Cdq9fnvYF+d1U1ww==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.3.15", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-label": "^9.4.4", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3333,19 +3333,19 @@ "license": "0BSD" }, "node_modules/@fluentui/react-swatch-picker": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.5.0.tgz", - "integrity": "sha512-sl7MifqQGR4QGDhhgBIYc25YgPuFQW7+BOfNRMO5DYPq33lX5xHNcczhXywcBESAVHrjM0MC1lsE7glv6gU8RA==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.6.0.tgz", + "integrity": "sha512-5s8P3MQyTOsCNoGiKMUvVufJXJ+0Hb0KDWL79CvGsJGpwnN9uhKHuVft3MkfUl+SOExacv+OqqzzMFk+wB4HTg==", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-field": "^9.4.16", + "@fluentui/react-context-selector": "^9.2.19", + "@fluentui/react-field": "^9.5.4", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3357,19 +3357,19 @@ } }, "node_modules/@fluentui/react-switch": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.7.0.tgz", - "integrity": "sha512-fSgbLWmB+O7BREZsT9QvXsqRB39+DXMNkJwsVyRnzZ9XboUHTeN7fVGEuvWQdj8HTjtYE2YYfGUXFo3fST88xA==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.7.5.tgz", + "integrity": "sha512-YTHlC8FA47A/0zspQq2K31FQ9lPhe0bO3Y30FRpaubmia1I+XqbmenyGNRxMhz7CYYVU7kbMb6o458eDrfutxQ==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.16", + "@fluentui/react-field": "^9.5.4", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.3.15", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-label": "^9.4.4", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3381,23 +3381,23 @@ } }, "node_modules/@fluentui/react-table": { - "version": "9.19.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.19.12.tgz", - "integrity": "sha512-4SgGOAAL9P1gi9A6286SHGde6JJnT1uiT/st7wHJOMhbo8QE6+Cfn5MgH9LnvMbW+RxZ8m0NV8sMPi9QorAMZg==", + "version": "9.19.19", + "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.19.19.tgz", + "integrity": "sha512-w2T+EsBATODdu9zbzXL3dho2ZTVvW5ep57yXFT9r+6X2gz+cNUejVGCChWaSxL+/1y3KTt1dyE0JCquRfEST3g==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-avatar": "^9.10.3", - "@fluentui/react-checkbox": "^9.5.17", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-avatar": "^9.11.5", + "@fluentui/react-checkbox": "^9.6.4", + "@fluentui/react-context-selector": "^9.2.19", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-radio": "^9.5.16", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-radio": "^9.6.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3409,17 +3409,17 @@ } }, "node_modules/@fluentui/react-tabs": { - "version": "9.11.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.11.2.tgz", - "integrity": "sha512-zmWzySlPM9EwHJNW0/JhyxBCqBvmfZIj1OZLdRDpbPDsKjhO0aGZV6WjLHFYJmq58kbN0wHKUbxc7LfafHHUwA==", + "version": "9.12.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.12.4.tgz", + "integrity": "sha512-YsaqjDFXcC8nvEAW3QpwdD1xIpzzyLFdftqXDA8ULmb2gmeRNWqPClCHftLa0QEIyLAIhX5pXDejHLDPFnQ2mg==", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-context-selector": "^9.2.19", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3431,14 +3431,14 @@ } }, "node_modules/@fluentui/react-tabster": { - "version": "9.26.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.26.16.tgz", - "integrity": "sha512-napGx7dGdLoKoUpKlzc2Til43UMUTtr9J1GWrOFvCT6aZLTox5GjtoxQM/IPhcZ09jJOOUMbVF8ScA5u3/uyTA==", + "version": "9.26.17", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.26.17.tgz", + "integrity": "sha512-kr6el429OvaMD1sSIOt9qyoQTbbgz2zLar81qM9OTi2lj9vhclHSgwaHT7x5yTV0a2LfYQ02emEJeG5NHVAn2w==", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "keyborg": "^2.14.1", @@ -3451,26 +3451,42 @@ "react-dom": ">=16.14.0 <20.0.0" } }, + "node_modules/@fluentui/react-tabster/node_modules/tabster": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/tabster/-/tabster-8.8.0.tgz", + "integrity": "sha512-eGFXgtvKOQP5BywDI9Ngs+Atm6TRj45epAAqWKyVoi+HmOmdamEB//1H/FttLdNly/+Cz+GJ4RN8TnXTw0KwfA==", + "license": "MIT", + "dependencies": { + "keyborg": "^2.14.0", + "tslib": "^2.8.1" + } + }, + "node_modules/@fluentui/react-tabster/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/@fluentui/react-tag-picker": { - "version": "9.8.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.8.3.tgz", - "integrity": "sha512-dM+Cl+Y1FDYBbpa5MNWzxGLCrcAlz0B2n90Fjt2LKeA4S5+zWH3/vzH3U9M0YxJCKe7S/5XlAtgO6VwDYu3CRw==", + "version": "9.10.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.10.2.tgz", + "integrity": "sha512-9T+XWOgBBcPwV4vTOyrawVNxnYvIZbngQ1lpcEwec0Ap51pRIr7DxG0Z459S2HB4qZbF2JJ+xX2z4Snx9Y9QUQ==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-combobox": "^9.16.18", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-field": "^9.4.16", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-combobox": "^9.17.5", + "@fluentui/react-context-selector": "^9.2.19", + "@fluentui/react-field": "^9.5.4", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-tags": "^9.7.18", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-portal": "^9.8.15", + "@fluentui/react-positioning": "^9.23.1", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-tags": "^9.9.4", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3482,20 +3498,20 @@ } }, "node_modules/@fluentui/react-tags": { - "version": "9.7.18", - "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.7.18.tgz", - "integrity": "sha512-8SIdeU3jjkvbIlwno/VuAk5zoMuk1qBfLgSIrFXG/PJWI7hjWL5S6gT/5AqAZYQMzftHZkm6hRnLJhWpgHqllA==", + "version": "9.9.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.9.4.tgz", + "integrity": "sha512-vwE56xx1sWdem1PejayTquRg7a+Uef/o10tf8fJ2z2w+y4jS98DcXVlH4BG57ZPWef1DGVuCFh1xUPldYLt8Zg==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-avatar": "^9.10.3", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-avatar": "^9.11.5", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3507,21 +3523,21 @@ } }, "node_modules/@fluentui/react-teaching-popover": { - "version": "9.6.19", - "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.6.19.tgz", - "integrity": "sha512-rSidcDbgnJaZPA7RW6uJqQqEga/2ON5PuuLauZFLGxZyuAAZv+8dwUBsxHYwneVpbFIITF3GX4f1sdH5Ei+lqQ==", + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.7.4.tgz", + "integrity": "sha512-XPnHrNlb6/wj1Gl0hLL306ANtlgDLxfXdjApdGS2aSNp136C1I3pJvRmHxW9byEaY26Wbn4Gb+cC1NI2Fb9lEQ==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-button": "^9.11.0", + "@fluentui/react-context-selector": "^9.2.19", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-popover": "^9.14.0", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-popover": "^9.14.6", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "use-sync-external-store": "^1.2.0" @@ -3534,15 +3550,15 @@ } }, "node_modules/@fluentui/react-text": { - "version": "9.6.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.6.15.tgz", - "integrity": "sha512-YB1azhq8MGfnYTGlEAX1mzcFZ6CvqkkaxaCogU4TM9BtPgQ1YUAxE01RMenl8VVi8W9hNbJKkuc8R8GzYwzT4Q==", + "version": "9.6.19", + "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.6.19.tgz", + "integrity": "sha512-mgGdeRfDHOWJHUeywwebJAVOqZeQLUK09YMbJsETskELsDH1JOVHOGPBrBs+OKnoVNh43hYwqpDqScFT5z+nrg==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3554,16 +3570,16 @@ } }, "node_modules/@fluentui/react-textarea": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.7.0.tgz", - "integrity": "sha512-AaBcoTHQv1dZ36w0Uoy8bnnkO0Ag7T0+6ZbjkiSGu50245WvK+MJawuCW91UuZvEUR7MPaAK/TDXWlHYWlMqRA==", + "version": "9.7.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.7.6.tgz", + "integrity": "sha512-7evgM3j9uUaXUHDhsCygrL0xsWwG+AUs3w6gQgBb8YNzXZa4q2sQJaxv2IRyDxNIoIp6pBZDI4F9nZlNlLtrdg==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.16", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-field": "^9.5.4", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3575,12 +3591,12 @@ } }, "node_modules/@fluentui/react-theme": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.2.1.tgz", - "integrity": "sha512-lJxfz7LmmglFz+c9C41qmMqaRRZZUPtPPl9DWQ79vH+JwZd4dkN7eA78OTRwcGCOTPEKoLTX72R+EFaWEDlX+w==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.2.2.tgz", + "integrity": "sha512-yUQMQkMLGvo6+Q/RITxpLh00STvI299gnk1IV/QHc2DW5EKiCcmIp9xma7+lJzfLACfDkwJDy5hZSl+7MIYf9w==", "license": "MIT", "dependencies": { - "@fluentui/tokens": "1.0.0-alpha.23", + "@fluentui/tokens": "1.0.0-alpha.24", "@swc/helpers": "^0.5.1" } }, @@ -3647,22 +3663,22 @@ "license": "0BSD" }, "node_modules/@fluentui/react-toast": { - "version": "9.7.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.7.15.tgz", - "integrity": "sha512-iuk4rf/WumpGrNIpRVLNamlPBY0rT9BhI4qTnVmzXqz5pY+8GmAq/TKUPER9/withtQW8V9srj91FWblxzpHRg==", + "version": "9.8.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.8.2.tgz", + "integrity": "sha512-Zm6J35ZBQ6si/tnWdEZnrhtoqkCUBjr+2z5uNJAZUP8RQSyZA78JwgkRXn7GxJ7VHeNQVUQN4SjuRCFmD6oJ4w==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-aria": "^9.17.14", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.13.0", - "@fluentui/react-motion-components-preview": "^0.15.2", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-motion": "^9.16.2", + "@fluentui/react-motion-components-preview": "^0.15.7", + "@fluentui/react-portal": "^9.8.15", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3674,20 +3690,20 @@ } }, "node_modules/@fluentui/react-toolbar": { - "version": "9.7.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.7.5.tgz", - "integrity": "sha512-mafkxOQAdmUyDqaWC0FLMxYOCx2dEYafDK+3V3IQALuCuZ90nrW3lH9Uh6/GdkcXQ21ykiOmkGoxtQ3xNt6YeQ==", - "license": "MIT", - "dependencies": { - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-divider": "^9.7.0", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-radio": "^9.5.16", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.8.4.tgz", + "integrity": "sha512-fFLTzT6lV4u58xkLy6mdWFTxdQAPYk8wDAKplHHKtCfV1hilFH2IPIcRakyN2aLS3c3hS87QDWtEBO6nfXum+g==", + "license": "MIT", + "dependencies": { + "@fluentui/react-button": "^9.11.0", + "@fluentui/react-context-selector": "^9.2.19", + "@fluentui/react-divider": "^9.7.4", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-radio": "^9.6.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3699,19 +3715,19 @@ } }, "node_modules/@fluentui/react-tooltip": { - "version": "9.9.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.9.3.tgz", - "integrity": "sha512-a351JFoaBAOn0SnQ76tzuNv2ieHzAS+VO8Ncy4m9/emrIs5lvBBfKX8fvA4/efVxY+683XEQdoL1LuApuJuTWw==", - "license": "MIT", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "version": "9.10.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.10.5.tgz", + "integrity": "sha512-GiQiu2NeD9GTJHOCqjARMR4eQIN2815a73ZBvXOxyB0H1Z4I/IpiHdsoHMiBIGv6OhKWASO4KYh0RPuJ1TiRSg==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-portal": "^9.8.15", + "@fluentui/react-positioning": "^9.23.1", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3723,26 +3739,26 @@ } }, "node_modules/@fluentui/react-tree": { - "version": "9.15.14", - "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.15.14.tgz", - "integrity": "sha512-gjLlvjFD64SREUeKaSocueUnntSofplU4EMZToaYqGixlzAouHzTFEZeiohuuYjVWhOn/WBBZsOEdr7bPva+kQ==", + "version": "9.16.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.16.5.tgz", + "integrity": "sha512-KTlUEjfcYHq02Hd63KXvqIBxBbXT1uheuu5Bzr202FlY7lsIEveF6EJU9h09GLJQkFYro/SYy/V3qxapM3nDHg==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-avatar": "^9.10.3", - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-checkbox": "^9.5.17", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-aria": "^9.17.14", + "@fluentui/react-avatar": "^9.11.5", + "@fluentui/react-button": "^9.11.0", + "@fluentui/react-checkbox": "^9.6.4", + "@fluentui/react-context-selector": "^9.2.19", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.13.0", - "@fluentui/react-motion-components-preview": "^0.15.2", - "@fluentui/react-radio": "^9.5.16", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-motion": "^9.16.2", + "@fluentui/react-motion-components-preview": "^0.15.7", + "@fluentui/react-radio": "^9.6.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-tabster": "^9.26.17", + "@fluentui/react-theme": "^9.2.2", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3754,13 +3770,13 @@ } }, "node_modules/@fluentui/react-utilities": { - "version": "9.26.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.26.5.tgz", - "integrity": "sha512-lLWhnfMVEu+cWx3o9uTA5sDwo4U9PnpDJGVtheZ1bOCdh1YiQsJxeFM7n6nLE72UK2w+ATkGZQPYZA4QW1JLPQ==", + "version": "9.26.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.26.6.tgz", + "integrity": "sha512-a14Iihg2MmRSq1fxqr/4ffMl8VO0gYWRHAYKENz2PoL+oWnCtkMz4PDglIY8rVa7RADwXYI65XOjui0BjIFMvQ==", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/keyboard-keys": "^9.0.9", + "@fluentui/react-shared-contexts": "^9.26.3", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -3769,14 +3785,14 @@ } }, "node_modules/@fluentui/react-virtualizer": { - "version": "9.0.0-alpha.111", - "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.111.tgz", - "integrity": "sha512-yku++0779Ve1RNz6y/HWjlXKd2x1wCSbWMydT2IdCICBVwolXjPYMpkqqZUSjbJ0N9gl6BfsCBpU9Dfe2bR8Zg==", + "version": "9.0.0-alpha.115", + "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.115.tgz", + "integrity": "sha512-8ZOFmt5eSkiH9jWYvfmMkef+2jGvWrDeXjUptZeesgn4VRXwQu4SUKPLWqZ+ETcYXX/0leGEDl6KItdp/XxbmA==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-jsx-runtime": "^9.4.5", + "@fluentui/react-shared-contexts": "^9.26.3", + "@fluentui/react-utilities": "^9.26.6", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3892,9 +3908,9 @@ } }, "node_modules/@fluentui/tokens": { - "version": "1.0.0-alpha.23", - "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.23.tgz", - "integrity": "sha512-uxrzF9Z+J10naP0pGS7zPmzSkspSS+3OJDmYIK3o1nkntQrgBXq3dBob4xSlTDm5aOQ0kw6EvB9wQgtlyy4eKQ==", + "version": "1.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.24.tgz", + "integrity": "sha512-YrjGQfnxBR+9o8wXyTflON3Ohsv7OrZWYLVRU+7RaiFO1gcu36iDm3WjudlVmYuWRLDO0Gmxotm6RQNhbZuEQQ==", "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" @@ -8331,80 +8347,6 @@ "webpack": "5.105.4" } }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/@jest/environment": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", - "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/fake-timers": "30.4.1", - "@jest/types": "30.4.1", - "@types/node": "*", - "jest-mock": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/@jest/fake-timers": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", - "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "30.4.1", - "@sinonjs/fake-timers": "^15.4.0", - "@types/node": "*", - "jest-message-util": "30.4.1", - "jest-mock": "30.4.1", - "jest-util": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/@jest/schemas": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", - "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/@jest/types": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", - "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/pattern": "30.4.0", - "@jest/schemas": "30.4.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@microsoft/spfx-web-build-rig/node_modules/@rushstack/heft-config-file": { "version": "0.20.10", "resolved": "https://registry.npmjs.org/@rushstack/heft-config-file/-/heft-config-file-0.20.10.tgz", @@ -8512,27 +8454,6 @@ } } }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/@sinclair/typebox": { - "version": "0.34.49", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz", - "integrity": "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/@sinonjs/fake-timers": { - "version": "15.4.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", - "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, "node_modules/@microsoft/spfx-web-build-rig/node_modules/ajv": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", @@ -8565,156 +8486,6 @@ } } }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/ci-info": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/jest-environment-node": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.4.1.tgz", - "integrity": "sha512-4FZYVOk85hz2AyT6BbarKy9u37g6DbrDyCdFhsnDdXqyrueYQvB+0zO4f/kqLCRD0BsPRXPMNJeQwihKZV8naw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/environment": "30.4.1", - "@jest/fake-timers": "30.4.1", - "@jest/types": "30.4.1", - "@types/node": "*", - "jest-mock": "30.4.1", - "jest-util": "30.4.1", - "jest-validate": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/jest-message-util": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", - "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.4.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-util": "30.4.1", - "picomatch": "^4.0.3", - "pretty-format": "30.4.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/jest-mock": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", - "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "30.4.1", - "@types/node": "*", - "jest-util": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/jest-util": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", - "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "30.4.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.3" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/jest-validate": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.4.1.tgz", - "integrity": "sha512-PDWi4SOwLnwqNDfHZjOcsEFyZ4fc/2W2gVL3DEoyqnB6jCQMLRtfBong8s6omIw3lI0HWOus12xfnFmQtjW3fw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.4.1", - "camelcase": "^6.3.0", - "chalk": "^4.1.2", - "leven": "^3.1.0", - "pretty-format": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@microsoft/spfx-web-build-rig/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -8722,39 +8493,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@microsoft/spfx-web-build-rig/node_modules/pretty-format": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", - "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/schemas": "30.4.1", - "ansi-styles": "^5.2.0", - "react-is-18": "npm:react-is@^18.3.1", - "react-is-19": "npm:react-is@^19.2.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@microsoft/spfx-web-build-rig/node_modules/resolve": { "version": "1.22.12", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", @@ -40105,22 +39843,6 @@ "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==", "license": "MIT" }, - "node_modules/tabster": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/tabster/-/tabster-8.8.0.tgz", - "integrity": "sha512-eGFXgtvKOQP5BywDI9Ngs+Atm6TRj45epAAqWKyVoi+HmOmdamEB//1H/FttLdNly/+Cz+GJ4RN8TnXTw0KwfA==", - "license": "MIT", - "dependencies": { - "keyborg": "^2.14.0", - "tslib": "^2.8.1" - } - }, - "node_modules/tabster/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", diff --git a/package.json b/package.json index 6b4765222..5849cafe3 100644 --- a/package.json +++ b/package.json @@ -192,7 +192,7 @@ "src/common/telemetry/(.*)$": "identity-obj-proxy", "@pnp/sp": "identity-obj-proxy", "'@pnp/sp/fields": "identity-obj-proxy", - "ControlStrings": "identity-obj-proxy", + "ControlStrings": "/tests/__mocks__/ControlStrings.js", "\\.(css|scss)$": "identity-obj-proxy" } } diff --git a/src/DetailsList.ts b/src/DetailsList.ts new file mode 100644 index 000000000..e1bb548ec --- /dev/null +++ b/src/DetailsList.ts @@ -0,0 +1,26 @@ +export { + DetailsList, + CheckboxVisibility, + ColumnActionsMode, + ColumnDragEndLocation, + ConstrainMode, + DetailsListLayoutMode, + DetailsListSelectionMode, +} from './controls/DetailsList'; +export type { + DetailsListKey, + DetailsListScrollToMode, + IColumn, + IColumnReorderOptions, + IDetailsGroupHeaderProps, + IDetailsHeaderProps, + IDetailsList, + IDetailsListFieldProps, + IDetailsListGroup, + IDetailsListProps, + IDetailsListRowDragDropEvents, + IDetailsListSelectionChange, + IDetailsListShimmerRowProps, + IDetailsRowProps, + IDetailsListStyles, +} from './controls/DetailsList'; diff --git a/src/controls/DetailsList/DetailsList.test.tsx b/src/controls/DetailsList/DetailsList.test.tsx new file mode 100644 index 000000000..f70848783 --- /dev/null +++ b/src/controls/DetailsList/DetailsList.test.tsx @@ -0,0 +1,71 @@ +import * as React from 'react'; +import { mount, ReactWrapper } from 'enzyme'; + +import { + CheckboxVisibility, + DetailsList, + DetailsListSelectionMode, + IColumn, + IDetailsListGroup, +} from '../../DetailsList'; + +interface ITestItem { + id: string; + name: string; +} + +const columns: IColumn[] = [ + { key: 'name', name: 'Name', fieldName: 'name', minWidth: 120 }, +]; + +const items: ITestItem[] = [ + { id: 'one', name: 'One' }, + { id: 'two', name: 'Two' }, +]; + +const groups: IDetailsListGroup[] = [ + { key: 'planning', name: 'Planning', startIndex: 0, count: items.length }, +]; + +describe('DetailsList', () => { + let detailsList: ReactWrapper | undefined; + + afterEach(() => { + detailsList?.unmount(); + detailsList = undefined; + }); + + it('renders with Fluent UI 9 controls on the React 17 runtime', () => { + detailsList = mount( + item.id} + selectionMode={DetailsListSelectionMode.multiple} + checkboxVisibility={CheckboxVisibility.always} + />, + ); + + expect(detailsList.find('[role="grid"]').exists()).toBe(true); + expect(detailsList.find('[role="row"]').length).toBe(3); + expect(detailsList.find('input[type="checkbox"]').length).toBe(3); + expect(detailsList.text()).toContain('One'); + expect(detailsList.text()).toContain('Two'); + }); + + it('aligns group headers with the leading edge', () => { + detailsList = mount( + item.id} + />, + ); + + expect(detailsList.find('button[role="gridcell"]').first().prop('style')).toMatchObject({ + justifyContent: 'flex-start', + textAlign: 'left', + }); + }); +}); diff --git a/src/controls/DetailsList/DetailsList.tsx b/src/controls/DetailsList/DetailsList.tsx new file mode 100644 index 000000000..40c8c0276 --- /dev/null +++ b/src/controls/DetailsList/DetailsList.tsx @@ -0,0 +1,617 @@ +import * as React from 'react'; +import { IdPrefixProvider, Spinner, Text, mergeClasses } from '@fluentui/react-components'; +import type { + DetailsListKey, + DetailsListScrollToMode, + IDetailsList, + IDetailsListProps, +} from './DetailsList.types'; +import { + CheckboxVisibility, + DetailsListLayoutMode, + SelectionMode, +} from './DetailsList.types'; +import { + buildDetailsListEntries, + calculateEntryOffsets, + findEntryIndexAtOffset, +} from './DetailsList.utils'; +import { + DETAILS_LIST_COMPACT_ROW_HEIGHT, + DETAILS_LIST_DEFAULT_HEIGHT, + DETAILS_LIST_DEFAULT_ROW_HEIGHT, + DETAILS_LIST_SELECTION_COLUMN_WIDTH, + useDetailsListStyles, +} from './useDetailsListStyles'; +import { renderDetailsListContent } from './DetailsListContent'; +import { DetailsListGroupHeader } from './DetailsListGroupHeader'; +import { DetailsListHeader } from './DetailsListHeader'; +import { DetailsListRow } from './DetailsListRow'; +import { DetailsListShimmerRows } from './DetailsListShimmerRows'; +import { useDetailsListColumns } from './useDetailsListColumns'; +import { useDetailsListGroups } from './useDetailsListGroups'; +import { useDetailsListSelection } from './useDetailsListSelection'; +import { useDetailsListViewport } from './useDetailsListViewport'; +import * as strings from 'ControlStrings'; + +const DEFAULT_GROUP_HEADER_HEIGHT = 36; +const DEFAULT_OVERSCAN_COUNT = 5; +const DEFAULT_INFINITE_SCROLL_THRESHOLD = 160; +const DEFAULT_SHIMMER_LINES = 10; + +// SPFx 1.23 hosts React 17, which does not expose React.useId. Keep the +// generated id stable for the lifetime of the component without requiring a +// runtime shim or a second React dependency. +let nextDetailsListId = 0; + +const useDetailsListId = (): string => { + const idRef = React.useRef(); + if (idRef.current === undefined) { + nextDetailsListId += 1; + idRef.current = `details-list-${nextDetailsListId}`; + } + return idRef.current; +}; + +function DetailsListInner( + props: IDetailsListProps, + forwardedRef: React.ForwardedRef>, +): React.ReactElement { + const { + items, + columns, + getKey, + setKey, + componentRef, + className, + styles: styleOverrides, + height, + compact = false, + layoutMode = DetailsListLayoutMode.justified, + isHeaderVisible = true, + selectionMode = SelectionMode.multiple, + checkboxVisibility = CheckboxVisibility.onHover, + selectedKeys, + defaultSelectedKeys = [], + selectionPreservedOnEmptyClick = false, + isSelectedOnFocus = false, + disabledItemKeys, + onSelectionChanged, + onActiveItemChanged, + onItemInvoked, + onItemContextMenu, + onColumnHeaderClick, + onColumnHeaderContextMenu, + onColumnResize, + columnReorderOptions, + dragDropEvents, + onRenderItemColumn, + onRenderField, + onRenderRow, + onRenderDetailsHeader, + onRenderDetailsFooter, + groups, + onToggleGroup, + onRenderGroupHeader, + enableVirtualization, + rowHeight, + groupHeaderHeight = DEFAULT_GROUP_HEADER_HEIGHT, + overscanCount = DEFAULT_OVERSCAN_COUNT, + initialFocusedIndex = 0, + onShouldVirtualize, + enableInfiniteScroll = false, + infiniteScrollThreshold = DEFAULT_INFINITE_SCROLL_THRESHOLD, + onLoadMore, + hasNextPage = false, + isLoadingMore = false, + isLoading = false, + enableShimmer = false, + shimmerLines = DEFAULT_SHIMMER_LINES, + ariaLabelForShimmer, + onRenderCustomPlaceholder, + loadingMessage, + loadingMoreMessage, + emptyState, + ariaLabelForGrid, + ariaLabelForListHeader, + ariaLabelForSelectAllCheckbox, + ariaLabelForSelectionColumn, + getRowAriaLabel, + getRowAriaDescribedBy, + } = props; + + const resolvedAriaLabelForGrid = ariaLabelForGrid ?? strings.DetailsListAriaLabel; + const resolvedAriaLabelForListHeader = ariaLabelForListHeader ?? strings.DetailsListHeaderAriaLabel; + const resolvedAriaLabelForSelectAllCheckbox = ariaLabelForSelectAllCheckbox ?? strings.DetailsListSelectAllRowsAriaLabel; + const resolvedAriaLabelForSelectionColumn = ariaLabelForSelectionColumn ?? strings.DetailsListSelectionAriaLabel; + + const classes = useDetailsListStyles(); + const selectionControlName = useDetailsListId(); + const headerViewportRef = React.useRef(null); + const draggedItemRef = React.useRef<{ item: T; index: number }>(); + const initialFocusAppliedRef = React.useRef(false); + + const [, forceRender] = React.useReducer((version: number) => version + 1, 0); + const [activeItemIndex, setActiveItemIndex] = React.useState(initialFocusedIndex ?? 0); + const [dropTargetKey, setDropTargetKey] = React.useState(); + + const { + viewportRef, + viewportWidth, + viewportHeight, + scrollTop, + setScrollTop, + isLoadingMoreInternally, + handleScroll, + handleScrollIntent, + } = useDetailsListViewport({ + itemCount: items.length, + enableInfiniteScroll, + infiniteScrollThreshold, + onLoadMore, + hasNextPage, + isLoadingMore, + }); + + const effectiveRowHeight = rowHeight ?? (compact ? DETAILS_LIST_COMPACT_ROW_HEIGHT : DETAILS_LIST_DEFAULT_ROW_HEIGHT); + const shouldVirtualize = + onShouldVirtualize?.(items.length) ?? enableVirtualization ?? items.length > 100; + const effectiveHeight = + height ?? (shouldVirtualize || enableInfiniteScroll ? DETAILS_LIST_DEFAULT_HEIGHT : undefined); + const showSelectionColumn = + selectionMode !== SelectionMode.none && checkboxVisibility !== CheckboxVisibility.hidden; + const selectionColumnWidth = showSelectionColumn ? DETAILS_LIST_SELECTION_COLUMN_WIDTH : 0; + const { + getItemKey, + selectedKeySet, + disabledKeySet, + selectedItems, + isAllSelected, + isPartiallySelected, + commitSelection, + selectItem, + toggleSelectAll, + } = useDetailsListSelection({ + items, + getKey, + setKey, + selectionMode, + selectedKeys, + defaultSelectedKeys, + disabledItemKeys, + onSelectionChanged, + }); + + const { + orderedColumns, + columnWidths, + contentWidth, + gridWidth, + gridTemplateColumns, + draggedColumnIndexRef, + columnDropLocationRef, + resizeColumn, + beginColumnResize, + autoFitColumn, + isColumnDraggable, + handleColumnDrop, + moveColumn, + } = useDetailsListColumns({ + columns, + viewportWidth, + selectionColumnWidth, + layoutMode, + viewportRef, + onColumnResize, + columnReorderOptions, + }); + + const { isGroupCollapsed, toggleGroup } = useDetailsListGroups({ onToggleGroup }); + + const entries = React.useMemo( + () => + buildDetailsListEntries( + items, + groups, + effectiveRowHeight, + groupHeaderHeight, + getItemKey, + isGroupCollapsed, + ), + [effectiveRowHeight, getItemKey, groupHeaderHeight, groups, isGroupCollapsed, items], + ); + const entryOffsets = React.useMemo(() => calculateEntryOffsets(entries), [entries]); + const totalBodyHeight = entryOffsets[entryOffsets.length - 1] ?? 0; + const firstVisibleEntry = findEntryIndexAtOffset(entryOffsets, scrollTop); + const lastVisibleEntry = findEntryIndexAtOffset( + entryOffsets, + scrollTop + Math.max(viewportHeight, effectiveRowHeight), + ); + const renderStartIndex = shouldVirtualize + ? Math.max(0, firstVisibleEntry - overscanCount) + : 0; + const renderEndIndex = shouldVirtualize + ? Math.min(entries.length, lastVisibleEntry + overscanCount + 1) + : entries.length; + const renderedEntries = entries.slice(renderStartIndex, renderEndIndex); + const visibleItemIndexes = React.useMemo( + () => entries.filter((entry) => entry.type === 'item').map((entry) => entry.itemIndex), + [entries], + ); + + const scrollToIndex = React.useCallback( + (itemIndex: number, mode: DetailsListScrollToMode = 'auto'): void => { + const viewport = viewportRef.current; + const entryIndex = entries.findIndex( + (entry) => entry.type === 'item' && entry.itemIndex === itemIndex, + ); + if (!viewport || entryIndex < 0) { + return; + } + + const entryTop = entryOffsets[entryIndex]; + const entryBottom = entryOffsets[entryIndex + 1]; + const visibleTop = viewport.scrollTop; + const visibleBottom = viewport.scrollTop + viewport.clientHeight; + + if (mode === 'top') { + viewport.scrollTop = entryTop; + } else if (mode === 'bottom') { + viewport.scrollTop = entryBottom - viewport.clientHeight; + } else if (mode === 'center') { + viewport.scrollTop = entryTop - (viewport.clientHeight - effectiveRowHeight) / 2; + } else if (entryTop < visibleTop) { + viewport.scrollTop = entryTop; + } else if (entryBottom > visibleBottom) { + viewport.scrollTop = entryBottom - viewport.clientHeight; + } + setScrollTop(viewport.scrollTop); + }, + [effectiveRowHeight, entries, entryOffsets], + ); + + const focusIndex = React.useCallback( + (itemIndex: number, mode: DetailsListScrollToMode = 'auto'): void => { + setActiveItemIndex(itemIndex); + scrollToIndex(itemIndex, mode); + window.requestAnimationFrame(() => { + viewportRef.current + ?.querySelector(`[data-details-row-index="${itemIndex}"]`) + ?.focus(); + }); + }, + [scrollToIndex], + ); + + React.useEffect(() => { + if ( + initialFocusedIndex !== undefined && + !initialFocusAppliedRef.current && + items[initialFocusedIndex] !== undefined + ) { + initialFocusAppliedRef.current = true; + focusIndex(initialFocusedIndex); + } + }, [focusIndex, initialFocusedIndex, items]); + + const imperativeHandle = React.useMemo>( + () => ({ + forceUpdate: forceRender, + focusIndex, + scrollToIndex, + getStartItemIndexInView: () => { + for (let entryIndex = firstVisibleEntry; entryIndex < entries.length; entryIndex += 1) { + const entry = entries[entryIndex]; + if (entry.type === 'item') { + return entry.itemIndex; + } + } + return 0; + }, + updateColumn: (column, options) => { + const currentIndex = orderedColumns.findIndex((candidate) => candidate.key === column.key); + if (options.width !== undefined && currentIndex >= 0) { + resizeColumn(column, currentIndex, options.width); + } + if (options.newColumnIndex !== undefined && currentIndex >= 0) { + moveColumn(column, options.newColumnIndex); + } + }, + getSelectedItems: () => selectedItems, + setSelectedKeys: (keys) => commitSelection(new Set(keys)), + }), + [ + commitSelection, + entries, + firstVisibleEntry, + focusIndex, + orderedColumns, + moveColumn, + resizeColumn, + scrollToIndex, + selectedItems, + ], + ); + + React.useImperativeHandle(forwardedRef, () => imperativeHandle, [imperativeHandle]); + React.useImperativeHandle(componentRef, () => imperativeHandle, [imperativeHandle]); + + const focusAdjacentItem = React.useCallback( + (itemIndex: number, offset: number): void => { + const visibleIndex = visibleItemIndexes.indexOf(itemIndex); + const targetVisibleIndex = Math.max( + 0, + Math.min(visibleItemIndexes.length - 1, visibleIndex + offset), + ); + const targetItemIndex = visibleItemIndexes[targetVisibleIndex]; + if (targetItemIndex !== undefined) { + focusIndex(targetItemIndex); + } + }, + [focusIndex, visibleItemIndexes], + ); + + const handleRowKeyDown = React.useCallback( + (event: React.KeyboardEvent, item: T, itemIndex: number): void => { + const pageSize = Math.max(1, Math.floor(viewportHeight / effectiveRowHeight)); + if (event.key === 'ArrowDown') { + event.preventDefault(); + focusAdjacentItem(itemIndex, 1); + } else if (event.key === 'ArrowUp') { + event.preventDefault(); + focusAdjacentItem(itemIndex, -1); + } else if (event.key === 'PageDown') { + event.preventDefault(); + focusAdjacentItem(itemIndex, pageSize); + } else if (event.key === 'PageUp') { + event.preventDefault(); + focusAdjacentItem(itemIndex, -pageSize); + } else if (event.key === 'Home') { + event.preventDefault(); + const firstIndex = visibleItemIndexes[0]; + if (firstIndex !== undefined) { + focusIndex(firstIndex, 'top'); + } + } else if (event.key === 'End') { + event.preventDefault(); + const lastIndex = visibleItemIndexes[visibleItemIndexes.length - 1]; + if (lastIndex !== undefined) { + focusIndex(lastIndex, 'bottom'); + } + } else if (event.key === ' ') { + event.preventDefault(); + selectItem(item, itemIndex, event, true); + } else if (event.key === 'Enter') { + event.preventDefault(); + onItemInvoked?.(item, itemIndex, event); + } + }, + [ + effectiveRowHeight, + focusAdjacentItem, + focusIndex, + onItemInvoked, + selectItem, + viewportHeight, + visibleItemIndexes, + ], + ); + + const showLoadingMore = isLoadingMore || isLoadingMoreInternally; + + return ( + +
+
+ {isHeaderVisible && ( +
+
+ +
+
+ )} +
{ + handleScroll(event); + if (headerViewportRef.current) { + headerViewportRef.current.scrollLeft = event.currentTarget.scrollLeft; + } + }} + onWheel={(event) => { + if (event.deltaY > 0) { + handleScrollIntent(event.currentTarget); + } + }} + onTouchMove={(event) => handleScrollIntent(event.currentTarget)} + > +
{ + if ( + !selectionPreservedOnEmptyClick && + event.target === event.currentTarget && + selectionMode !== SelectionMode.none + ) { + commitSelection(new Set()); + } + }} + > +
0 && !isLoading && !enableShimmer + ? totalBodyHeight + : undefined, + }} + > + {enableShimmer ? ( + + ) : isLoading && items.length === 0 ? ( +
+ + {loadingMessage !== undefined ? ( + renderDetailsListContent(loadingMessage) + ) : ( + {strings.DetailsListLoading} + )} +
+ ) : entries.length === 0 ? ( +
+ {emptyState !== undefined ? ( + renderDetailsListContent(emptyState) + ) : ( + {strings.DetailsListNoItems} + )} +
+ ) : ( + renderedEntries.map((entry, renderedIndex) => { + const entryIndex = renderStartIndex + renderedIndex; + return ( + + {entry.type === 'group' + ? ( + toggleGroup(entry.group)} + isHeaderVisible={isHeaderVisible} + shouldVirtualize={shouldVirtualize} + entryTop={entryOffsets[entryIndex]} + groupHeaderHeight={groupHeaderHeight} + gridTemplateColumns={gridTemplateColumns} + classes={classes} + style={styleOverrides?.groupHeader} + onRenderGroupHeader={onRenderGroupHeader} + /> + ) + : ( + + )} + + ); + }) + )} +
+ {showLoadingMore && !enableShimmer && ( +
+ + {loadingMoreMessage !== undefined ? ( + renderDetailsListContent(loadingMoreMessage) + ) : ( + {strings.DetailsListLoadingMore} + )} +
+ )} + {onRenderDetailsFooter ? renderDetailsListContent(onRenderDetailsFooter(items)) : null} +
+
+
+
+ + ); +} + +export const DetailsList = React.forwardRef(DetailsListInner) as ( + props: IDetailsListProps & React.RefAttributes>, +) => React.ReactElement; + +(DetailsList as React.FC).displayName = 'DetailsList'; diff --git a/src/controls/DetailsList/DetailsList.types.ts b/src/controls/DetailsList/DetailsList.types.ts new file mode 100644 index 000000000..dde0a4034 --- /dev/null +++ b/src/controls/DetailsList/DetailsList.types.ts @@ -0,0 +1,270 @@ +import type * as React from 'react'; + +export type DetailsListKey = React.Key; + +export enum SelectionMode { + none = 0, + single = 1, + multiple = 2, +} + +/** Public alias that avoids ambiguity with the legacy Fluent UI 8 ListView export. */ +export { SelectionMode as DetailsListSelectionMode }; + +export enum CheckboxVisibility { + onHover = 0, + always = 1, + hidden = 2, +} + +export enum DetailsListLayoutMode { + fixedColumns = 0, + justified = 1, +} + +export enum ConstrainMode { + unconstrained = 0, + horizontalConstrained = 1, +} + +export enum ColumnActionsMode { + disabled = 0, + clickable = 1, + hasDropdown = 2, +} + +export enum ColumnDragEndLocation { + outside = 0, + surface = 1, + header = 2, +} + +export type DetailsListScrollToMode = 'auto' | 'top' | 'bottom' | 'center'; + +export interface IDetailsListColumnDragDropDetails { + draggedColumn: IColumn; + draggedIndex: number; + targetColumn: IColumn; + targetIndex: number; +} + +export interface IColumnReorderOptions { + frozenColumnCountFromStart?: number; + frozenColumnCountFromEnd?: number; + onColumnDragStart?: (dragStarted: boolean) => void; + onColumnDrop?: (details: IDetailsListColumnDragDropDetails) => void; + onDragEnd?: (location: ColumnDragEndLocation) => void; +} + +export interface IColumn { + key: string; + name: string; + fieldName?: keyof T & string; + minWidth: number; + maxWidth?: number; + currentWidth?: number; + flexGrow?: number; + targetWidthProportion?: number; + ariaLabel?: string; + className?: string; + headerClassName?: string; + isRowHeader?: boolean; + isResizable?: boolean; + isMultiline?: boolean; + isPadded?: boolean; + isSorted?: boolean; + isSortedDescending?: boolean; + isFiltered?: boolean; + isGrouped?: boolean; + isIconOnly?: boolean; + isCollapsible?: boolean; + showSortIconWhenUnsorted?: boolean; + columnActionsMode?: ColumnActionsMode; + icon?: React.ReactNode; + data?: unknown; + sortAscendingAriaLabel?: string; + sortDescendingAriaLabel?: string; + sortableAriaLabel?: string; + filterAriaLabel?: string; + groupAriaLabel?: string; + onRender?: (item: T, index: number, column: IColumn) => React.ReactNode; + onRenderHeader?: (column: IColumn) => React.ReactNode; + onColumnClick?: (event: React.MouseEvent, column: IColumn) => void; + onColumnContextMenu?: (column: IColumn, event: React.MouseEvent) => void; + onColumnKeyDown?: (event: React.KeyboardEvent, column: IColumn) => void; + onColumnResize?: (width: number) => void; +} + +export interface IDetailsListSelectionChange { + selectedItems: readonly T[]; + selectedKeys: ReadonlySet; +} + +export interface IDetailsListFieldProps { + item: T; + itemIndex: number; + isSelected: boolean; + column: IColumn; + children: React.ReactNode; +} + +export interface IDetailsRowProps { + item: T; + itemIndex: number; + itemKey: DetailsListKey; + columns: readonly IColumn[]; + isSelected: boolean; + compact: boolean; + disabled: boolean; + onToggleSelection: (event: React.SyntheticEvent) => void; + onInvoke: (event: React.SyntheticEvent) => void; +} + +export interface IDetailsHeaderProps { + columns: readonly IColumn[]; + selectionMode: SelectionMode; + checkboxVisibility: CheckboxVisibility; + isAllSelected: boolean; + isPartiallySelected: boolean; + onToggleSelectAll: (event: React.SyntheticEvent) => void; +} + +export interface IDetailsListGroup { + key: string; + name: string; + startIndex: number; + count: number; + level?: number; + isCollapsed?: boolean; + children?: readonly IDetailsListGroup[]; + data?: unknown; +} + +export interface IDetailsGroupHeaderProps { + group: IDetailsListGroup; + isCollapsed: boolean; + onToggle: () => void; +} + +export interface IDetailsListShimmerRowProps { + columns: readonly IColumn[]; + rowIndex: number; + compact: boolean; + selectionMode: SelectionMode; + checkboxVisibility: CheckboxVisibility; +} + +export interface IDetailsListRowDragDropEvents { + canDrag?: (item: T, index: number) => boolean; + canDrop?: (draggedItem: T, targetItem: T, targetIndex: number) => boolean; + onDragStart?: (item: T, index: number, event: React.DragEvent) => void; + onDragEnter?: (item: T, index: number, event: React.DragEvent) => void; + onDragLeave?: (item: T, index: number, event: React.DragEvent) => void; + onDrop?: ( + draggedItem: T, + targetItem: T, + targetIndex: number, + event: React.DragEvent, + ) => void; + onDragEnd?: (item: T, index: number, event: React.DragEvent) => void; +} + +export interface IDetailsListStyles { + root?: React.CSSProperties; + viewport?: React.CSSProperties; + grid?: React.CSSProperties; + header?: React.CSSProperties; + row?: React.CSSProperties; + cell?: React.CSSProperties; + groupHeader?: React.CSSProperties; +} + +export interface IDetailsListProps { + items: readonly T[]; + columns: readonly IColumn[]; + getKey?: (item: T, index: number) => DetailsListKey; + setKey?: string; + componentRef?: React.Ref>; + className?: string; + styles?: IDetailsListStyles; + height?: number; + compact?: boolean; + layoutMode?: DetailsListLayoutMode; + constrainMode?: ConstrainMode; + isHeaderVisible?: boolean; + selectionMode?: SelectionMode; + checkboxVisibility?: CheckboxVisibility; + selectedKeys?: ReadonlySet | readonly DetailsListKey[]; + defaultSelectedKeys?: readonly DetailsListKey[]; + selectionPreservedOnEmptyClick?: boolean; + isSelectedOnFocus?: boolean; + disabledItemKeys?: ReadonlySet | readonly DetailsListKey[]; + onSelectionChanged?: (change: IDetailsListSelectionChange) => void; + onActiveItemChanged?: (item: T, index: number, event: React.FocusEvent) => void; + onItemInvoked?: (item: T, index: number, event: React.SyntheticEvent) => void; + onItemContextMenu?: (item: T, index: number, event: React.MouseEvent) => void | boolean; + onColumnHeaderClick?: (event: React.MouseEvent, column: IColumn) => void; + onColumnHeaderContextMenu?: (column: IColumn, event: React.MouseEvent) => void; + onColumnResize?: (column: IColumn, width: number, columnIndex: number) => void; + columnReorderOptions?: IColumnReorderOptions; + dragDropEvents?: IDetailsListRowDragDropEvents; + onRenderItemColumn?: (item: T, index: number, column: IColumn) => React.ReactNode; + onRenderField?: ( + props: IDetailsListFieldProps, + defaultRender: (props: IDetailsListFieldProps) => React.ReactElement, + ) => React.ReactNode; + onRenderRow?: ( + props: IDetailsRowProps, + defaultRender: (props: IDetailsRowProps) => React.ReactElement, + ) => React.ReactNode; + onRenderDetailsHeader?: ( + props: IDetailsHeaderProps, + defaultRender: (props: IDetailsHeaderProps) => React.ReactElement, + ) => React.ReactNode; + onRenderDetailsFooter?: (items: readonly T[]) => React.ReactNode; + groups?: readonly IDetailsListGroup[]; + onToggleGroup?: (group: IDetailsListGroup, isCollapsed: boolean) => void; + onRenderGroupHeader?: ( + props: IDetailsGroupHeaderProps, + defaultRender: (props: IDetailsGroupHeaderProps) => React.ReactElement, + ) => React.ReactNode; + enableVirtualization?: boolean; + rowHeight?: number; + groupHeaderHeight?: number; + overscanCount?: number; + initialFocusedIndex?: number; + onShouldVirtualize?: (itemCount: number) => boolean; + enableInfiniteScroll?: boolean; + infiniteScrollThreshold?: number; + onLoadMore?: () => void | Promise; + hasNextPage?: boolean; + isLoadingMore?: boolean; + isLoading?: boolean; + enableShimmer?: boolean; + shimmerLines?: number; + ariaLabelForShimmer?: string; + onRenderCustomPlaceholder?: ( + rowProps: IDetailsListShimmerRowProps, + index?: number, + defaultRender?: (props: IDetailsListShimmerRowProps) => React.ReactNode, + ) => React.ReactNode; + loadingMessage?: React.ReactNode; + loadingMoreMessage?: React.ReactNode; + emptyState?: React.ReactNode; + ariaLabelForGrid?: string; + ariaLabelForListHeader?: string; + ariaLabelForSelectAllCheckbox?: string; + ariaLabelForSelectionColumn?: string; + getRowAriaLabel?: (item: T) => string; + getRowAriaDescribedBy?: (item: T) => string | undefined; +} + +export interface IDetailsList { + forceUpdate: () => void; + focusIndex: (index: number, scrollToMode?: DetailsListScrollToMode) => void; + scrollToIndex: (index: number, scrollToMode?: DetailsListScrollToMode) => void; + getStartItemIndexInView: () => number; + updateColumn: (column: IColumn, options: { width?: number; newColumnIndex?: number }) => void; + getSelectedItems: () => readonly T[]; + setSelectedKeys: (keys: readonly DetailsListKey[]) => void; +} diff --git a/src/controls/DetailsList/DetailsList.utils.ts b/src/controls/DetailsList/DetailsList.utils.ts new file mode 100644 index 000000000..567bea583 --- /dev/null +++ b/src/controls/DetailsList/DetailsList.utils.ts @@ -0,0 +1,189 @@ +import type { + DetailsListKey, + IColumn, + IDetailsListGroup, +} from './DetailsList.types'; + +export interface IDetailsListItemEntry { + type: 'item'; + key: DetailsListKey; + item: T; + itemIndex: number; + height: number; +} + +export interface IDetailsListGroupEntry { + type: 'group'; + key: string; + group: IDetailsListGroup; + height: number; +} + +export type DetailsListEntry = + | IDetailsListItemEntry + | IDetailsListGroupEntry; + +export const clampColumnWidth = ( + column: IColumn, + width: number, +): number => + Math.max( + column.minWidth, + Math.min(width, column.maxWidth ?? Number.POSITIVE_INFINITY), + ); + +export const calculateColumnWidths = ( + columns: readonly IColumn[], + widthOverrides: Readonly>, + availableWidth: number, + justifyColumns: boolean, +): Readonly> => { + const widths = columns.map((column) => + clampColumnWidth( + column, + widthOverrides[column.key] ?? column.currentWidth ?? column.minWidth, + ), + ); + + let remainingWidth = justifyColumns + ? Math.max( + 0, + availableWidth - widths.reduce((total, width) => total + width, 0), + ) + : 0; + let activeIndexes = columns + .map((column, index) => ({ column, index })) + .filter( + ({ column, index }) => + !Object.prototype.hasOwnProperty.call(widthOverrides, column.key) && + widths[index] < (column.maxWidth ?? Number.POSITIVE_INFINITY), + ) + .map(({ index }) => index); + + while (remainingWidth > 0.5 && activeIndexes.length > 0) { + const totalWeight = activeIndexes.reduce( + (total, index) => + total + + (columns[index].flexGrow ?? columns[index].targetWidthProportion ?? 1), + 0, + ); + let distributedWidth = 0; + + activeIndexes.forEach((index) => { + const column = columns[index]; + const weight = column.flexGrow ?? column.targetWidthProportion ?? 1; + const share = remainingWidth * (weight / totalWeight); + const nextWidth = clampColumnWidth(column, widths[index] + share); + distributedWidth += nextWidth - widths[index]; + widths[index] = nextWidth; + }); + + if (distributedWidth <= 0.5) { + break; + } + + remainingWidth -= distributedWidth; + activeIndexes = activeIndexes.filter( + (index) => + widths[index] < (columns[index].maxWidth ?? Number.POSITIVE_INFINITY), + ); + } + + return Object.fromEntries( + columns.map((column, index) => [column.key, widths[index]]), + ); +}; + +export const buildDetailsListEntries = ( + items: readonly T[], + groups: readonly IDetailsListGroup[] | undefined, + rowHeight: number, + groupHeaderHeight: number, + getKey: (item: T, index: number) => DetailsListKey, + isGroupCollapsed: (group: IDetailsListGroup) => boolean, +): readonly DetailsListEntry[] => { + if (!groups?.length) { + return items.map((item, itemIndex) => ({ + type: 'item', + key: getKey(item, itemIndex), + item, + itemIndex, + height: rowHeight, + })); + } + + const entries: DetailsListEntry[] = []; + + const appendGroup = (group: IDetailsListGroup): void => { + entries.push({ + type: 'group', + key: group.key, + group, + height: groupHeaderHeight, + }); + + if (isGroupCollapsed(group)) { + return; + } + + if (group.children?.length) { + group.children.forEach(appendGroup); + return; + } + + const lastIndex = Math.min(items.length, group.startIndex + group.count); + for ( + let itemIndex = group.startIndex; + itemIndex < lastIndex; + itemIndex += 1 + ) { + const item = items[itemIndex]; + entries.push({ + type: 'item', + key: getKey(item, itemIndex), + item, + itemIndex, + height: rowHeight, + }); + } + }; + + groups.forEach(appendGroup); + return entries; +}; + +export const calculateEntryOffsets = ( + entries: readonly DetailsListEntry[], +): readonly number[] => { + const offsets: number[] = [0]; + entries.forEach((entry) => + offsets.push(offsets[offsets.length - 1] + entry.height), + ); + return offsets; +}; + +export const findEntryIndexAtOffset = ( + offsets: readonly number[], + offset: number, +): number => { + if (offsets.length <= 1) { + return 0; + } + + let low = 0; + let high = offsets.length - 2; + + while (low <= high) { + const middle = Math.floor((low + high) / 2); + if (offsets[middle] <= offset && offset < offsets[middle + 1]) { + return middle; + } + if (offset < offsets[middle]) { + high = middle - 1; + } else { + low = middle + 1; + } + } + + return Math.max(0, Math.min(low, offsets.length - 2)); +}; diff --git a/src/controls/DetailsList/DetailsListContent.tsx b/src/controls/DetailsList/DetailsListContent.tsx new file mode 100644 index 000000000..f1fd099e5 --- /dev/null +++ b/src/controls/DetailsList/DetailsListContent.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { Text } from '@fluentui/react-components'; + +export const renderDetailsListContent = ( + content: React.ReactNode, + className?: string, +): React.ReactNode => { + if (typeof content === 'string' || typeof content === 'number') { + return {content}; + } + return content; +}; diff --git a/src/controls/DetailsList/DetailsListGroupHeader.tsx b/src/controls/DetailsList/DetailsListGroupHeader.tsx new file mode 100644 index 000000000..802b897ec --- /dev/null +++ b/src/controls/DetailsList/DetailsListGroupHeader.tsx @@ -0,0 +1,97 @@ +import * as React from 'react'; +import { Button, Text } from '@fluentui/react-components'; +import { ChevronDown16Regular, ChevronRight16Regular } from '@fluentui/react-icons'; + +import type { IDetailsGroupHeaderProps, IDetailsListProps } from './DetailsList.types'; +import type { IDetailsListGroupEntry } from './DetailsList.utils'; +import type { useDetailsListStyles } from './useDetailsListStyles'; + +interface DetailsListGroupHeaderProps { + entry: IDetailsListGroupEntry; + entryIndex: number; + isCollapsed: boolean; + onToggle: () => void; + isHeaderVisible: boolean; + shouldVirtualize: boolean; + entryTop: number; + groupHeaderHeight: number; + gridTemplateColumns: string; + classes: ReturnType; + style: React.CSSProperties | undefined; + onRenderGroupHeader: IDetailsListProps['onRenderGroupHeader']; +} + +export const DetailsListGroupHeader = ({ + entry, + entryIndex, + isCollapsed, + onToggle, + isHeaderVisible, + shouldVirtualize, + entryTop, + groupHeaderHeight, + gridTemplateColumns, + classes, + style, + onRenderGroupHeader, +}: DetailsListGroupHeaderProps): React.ReactElement => { + const groupProps: IDetailsGroupHeaderProps = { + group: entry.group, + isCollapsed, + onToggle, + }; + const defaultRender = (renderProps: IDetailsGroupHeaderProps): React.ReactElement => ( +
+ +
+ ); + + return ( + <> + {onRenderGroupHeader + ? onRenderGroupHeader(groupProps, defaultRender) + : defaultRender(groupProps)} + + ); +}; diff --git a/src/controls/DetailsList/DetailsListHeader.tsx b/src/controls/DetailsList/DetailsListHeader.tsx new file mode 100644 index 000000000..974e40d4d --- /dev/null +++ b/src/controls/DetailsList/DetailsListHeader.tsx @@ -0,0 +1,252 @@ +import * as React from 'react'; +import * as strings from 'ControlStrings'; +import { Button, Checkbox, mergeClasses } from '@fluentui/react-components'; +import { + ArrowSortDown16Regular, + ArrowSortUp16Regular, + ChevronDown16Regular, + Filter16Regular, + ReOrderDotsVertical16Regular, +} from '@fluentui/react-icons'; + +import type { + IColumn, + IColumnReorderOptions, + IDetailsHeaderProps, + IDetailsListProps, +} from './DetailsList.types'; +import { + CheckboxVisibility, + ColumnActionsMode, + ColumnDragEndLocation, + SelectionMode, +} from './DetailsList.types'; +import { renderDetailsListContent } from './DetailsListContent'; +import type { useDetailsListStyles } from './useDetailsListStyles'; + +const COLUMN_RESIZE_KEYBOARD_STEP = 10; + +interface DetailsListHeaderProps { + columns: readonly IColumn[]; + selectionMode: SelectionMode; + checkboxVisibility: CheckboxVisibility; + isAllSelected: boolean; + isPartiallySelected: boolean; + onToggleSelectAll: (event: React.SyntheticEvent) => void; + showSelectionColumn: boolean; + ariaLabelForSelectionColumn: string; + ariaLabelForSelectAllCheckbox: string; + gridTemplateColumns: string; + style: React.CSSProperties | undefined; + classes: ReturnType; + columnWidths: Readonly>; + columnReorderOptions: IColumnReorderOptions | undefined; + draggedColumnIndexRef: React.MutableRefObject; + columnDropLocationRef: React.MutableRefObject; + isColumnDraggable: (columnIndex: number) => boolean; + handleColumnDrop: (targetIndex: number) => void; + resizeColumn: (column: IColumn, columnIndex: number, width: number) => void; + autoFitColumn: (column: IColumn, columnIndex: number) => void; + beginColumnResize: ( + event: React.PointerEvent, + column: IColumn, + columnIndex: number, + ) => void; + onColumnHeaderClick: IDetailsListProps['onColumnHeaderClick']; + onColumnHeaderContextMenu: IDetailsListProps['onColumnHeaderContextMenu']; + onRenderDetailsHeader: IDetailsListProps['onRenderDetailsHeader']; +} + +export const DetailsListHeader = ({ + columns, + selectionMode, + checkboxVisibility, + isAllSelected, + isPartiallySelected, + onToggleSelectAll, + showSelectionColumn, + ariaLabelForSelectionColumn, + ariaLabelForSelectAllCheckbox, + gridTemplateColumns, + style, + classes, + columnWidths, + columnReorderOptions, + draggedColumnIndexRef, + columnDropLocationRef, + isColumnDraggable, + handleColumnDrop, + resizeColumn, + autoFitColumn, + beginColumnResize, + onColumnHeaderClick, + onColumnHeaderContextMenu, + onRenderDetailsHeader, +}: DetailsListHeaderProps): React.ReactElement => { + const headerProps: IDetailsHeaderProps = { + columns, + selectionMode, + checkboxVisibility, + isAllSelected, + isPartiallySelected, + onToggleSelectAll, + }; + + const defaultRender = (renderProps: IDetailsHeaderProps): React.ReactElement => ( +
+ {showSelectionColumn && ( +
+ {renderProps.selectionMode === SelectionMode.multiple && ( + renderProps.onToggleSelectAll(event)} + /> + )} +
+ )} + {renderProps.columns.map((column, columnIndex) => { + const isActionable = column.columnActionsMode !== ColumnActionsMode.disabled; + const isDraggable = isColumnDraggable(columnIndex); + const ariaSort = column.isSorted + ? column.isSortedDescending + ? 'descending' + : 'ascending' + : 'none'; + const headerContent = column.onRenderHeader + ? column.onRenderHeader(column) + : column.name; + + return ( +
{ + column.onColumnContextMenu?.(column, event); + onColumnHeaderContextMenu?.(column, event); + }} + onDragStart={(event) => { + draggedColumnIndexRef.current = columnIndex; + columnDropLocationRef.current = ColumnDragEndLocation.outside; + event.dataTransfer.effectAllowed = 'move'; + event.dataTransfer.setData('text/plain', column.key); + columnReorderOptions?.onColumnDragStart?.(true); + }} + onDragOver={(event) => { + if (draggedColumnIndexRef.current !== undefined && isColumnDraggable(columnIndex)) { + event.preventDefault(); + event.dataTransfer.dropEffect = 'move'; + } + }} + onDrop={(event) => { + event.preventDefault(); + handleColumnDrop(columnIndex); + }} + onDragEnd={() => { + columnReorderOptions?.onColumnDragStart?.(false); + columnReorderOptions?.onDragEnd?.(columnDropLocationRef.current); + draggedColumnIndexRef.current = undefined; + columnDropLocationRef.current = ColumnDragEndLocation.outside; + }} + > + + {column.isResizable && ( +
+ ); + })} +
+ ); + + return ( + <> + {onRenderDetailsHeader + ? onRenderDetailsHeader(headerProps, defaultRender) + : defaultRender(headerProps)} + + ); +}; diff --git a/src/controls/DetailsList/DetailsListRow.tsx b/src/controls/DetailsList/DetailsListRow.tsx new file mode 100644 index 000000000..df0605acb --- /dev/null +++ b/src/controls/DetailsList/DetailsListRow.tsx @@ -0,0 +1,343 @@ +import * as React from 'react'; +import * as strings from 'ControlStrings'; +import { Checkbox, mergeClasses, Radio } from '@fluentui/react-components'; + +import type { + DetailsListKey, + IColumn, + IDetailsListFieldProps, + IDetailsListProps, + IDetailsRowProps, +} from './DetailsList.types'; +import { CheckboxVisibility, SelectionMode } from './DetailsList.types'; +import type { IDetailsListItemEntry } from './DetailsList.utils'; +import { renderDetailsListContent } from './DetailsListContent'; +import type { useDetailsListStyles } from './useDetailsListStyles'; + +interface DetailsListCellProps { + item: T; + itemIndex: number; + column: IColumn; + isSelected: boolean; + ariaColumnIndex: number; + classes: ReturnType; + style: React.CSSProperties | undefined; + onRenderItemColumn: IDetailsListProps['onRenderItemColumn']; + onRenderField: IDetailsListProps['onRenderField']; +} + +interface DetailsListRowProps { + entry: IDetailsListItemEntry; + entryIndex: number; + columns: readonly IColumn[]; + selectedKeySet: ReadonlySet; + disabledKeySet: ReadonlySet; + compact: boolean; + activeItemIndex: number; + setActiveItemIndex: React.Dispatch>; + dropTargetKey: DetailsListKey | undefined; + setDropTargetKey: React.Dispatch>; + draggedItemRef: React.MutableRefObject<{ item: T; index: number } | undefined>; + effectiveRowHeight: number; + entryTop: number; + gridTemplateColumns: string; + isHeaderVisible: boolean; + shouldVirtualize: boolean; + showSelectionColumn: boolean; + selectionMode: SelectionMode; + selectionControlName: string; + checkboxVisibility: CheckboxVisibility; + ariaLabelForSelectionColumn: string; + isSelectedOnFocus: boolean; + classes: ReturnType; + rowStyle: React.CSSProperties | undefined; + cellStyle: React.CSSProperties | undefined; + selectItem: ( + item: T, + itemIndex: number, + event: React.SyntheticEvent, + preserveExistingSelection: boolean, + ) => void; + handleRowKeyDown: (event: React.KeyboardEvent, item: T, itemIndex: number) => void; + onActiveItemChanged: IDetailsListProps['onActiveItemChanged']; + onItemInvoked: IDetailsListProps['onItemInvoked']; + onItemContextMenu: IDetailsListProps['onItemContextMenu']; + dragDropEvents: IDetailsListProps['dragDropEvents']; + getRowAriaLabel: IDetailsListProps['getRowAriaLabel']; + getRowAriaDescribedBy: IDetailsListProps['getRowAriaDescribedBy']; + onRenderItemColumn: IDetailsListProps['onRenderItemColumn']; + onRenderField: IDetailsListProps['onRenderField']; + onRenderRow: IDetailsListProps['onRenderRow']; +} + +const isInteractiveTarget = (target: EventTarget | null): boolean => + target instanceof Element && + Boolean( + target.closest( + 'a, button, input, select, textarea, [role="button"], [data-selection-disabled]', + ), + ); + +const DetailsListCell = ({ + item, + itemIndex, + column, + isSelected, + ariaColumnIndex, + classes, + style, + onRenderItemColumn, + onRenderField, +}: DetailsListCellProps): React.ReactElement => { + const rawContent = column.onRender + ? column.onRender(item, itemIndex, column) + : onRenderItemColumn + ? onRenderItemColumn(item, itemIndex, column) + : column.fieldName + ? String(item[column.fieldName] ?? '') + : ''; + const fieldProps: IDetailsListFieldProps = { + item, + itemIndex, + isSelected, + column, + children: rawContent, + }; + const defaultRender = (renderProps: IDetailsListFieldProps): React.ReactElement => ( +
+ {renderDetailsListContent(renderProps.children, classes.cellText)} +
+ ); + + return <>{onRenderField ? onRenderField(fieldProps, defaultRender) : defaultRender(fieldProps)}; +}; + +export const DetailsListRow = ({ + entry, + entryIndex, + columns, + selectedKeySet, + disabledKeySet, + compact, + activeItemIndex, + setActiveItemIndex, + dropTargetKey, + setDropTargetKey, + draggedItemRef, + effectiveRowHeight, + entryTop, + gridTemplateColumns, + isHeaderVisible, + shouldVirtualize, + showSelectionColumn, + selectionMode, + selectionControlName, + checkboxVisibility, + ariaLabelForSelectionColumn, + isSelectedOnFocus, + classes, + rowStyle, + cellStyle, + selectItem, + handleRowKeyDown, + onActiveItemChanged, + onItemInvoked, + onItemContextMenu, + dragDropEvents, + getRowAriaLabel, + getRowAriaDescribedBy, + onRenderItemColumn, + onRenderField, + onRenderRow, +}: DetailsListRowProps): React.ReactElement => { + const { item, itemIndex, key: itemKey } = entry; + const isSelected = selectedKeySet.has(itemKey); + const isDisabled = disabledKeySet.has(itemKey); + const rowProps: IDetailsRowProps = { + item, + itemIndex, + itemKey, + columns, + isSelected, + compact, + disabled: isDisabled, + onToggleSelection: (event) => selectItem(item, itemIndex, event, true), + onInvoke: (event) => onItemInvoked?.(item, itemIndex, event), + }; + + const defaultRender = (renderProps: IDetailsRowProps): React.ReactElement => ( +
{ + if (!isInteractiveTarget(event.target)) { + selectItem(renderProps.item, renderProps.itemIndex, event, false); + } + }} + onDoubleClick={(event) => onItemInvoked?.(renderProps.item, renderProps.itemIndex, event)} + onContextMenu={(event) => { + if (onItemContextMenu?.(renderProps.item, renderProps.itemIndex, event) !== true) { + event.preventDefault(); + } + }} + onFocus={(event) => { + setActiveItemIndex(renderProps.itemIndex); + onActiveItemChanged?.(renderProps.item, renderProps.itemIndex, event); + if (isSelectedOnFocus && !renderProps.isSelected) { + selectItem(renderProps.item, renderProps.itemIndex, event, false); + } + }} + onKeyDown={(event) => handleRowKeyDown(event, renderProps.item, renderProps.itemIndex)} + onDragStart={(event) => { + draggedItemRef.current = { item: renderProps.item, index: renderProps.itemIndex }; + event.dataTransfer.effectAllowed = 'move'; + event.dataTransfer.setData('text/plain', String(renderProps.itemKey)); + dragDropEvents?.onDragStart?.(renderProps.item, renderProps.itemIndex, event); + }} + onDragEnter={(event) => { + const draggedItem = draggedItemRef.current; + if ( + draggedItem && + (dragDropEvents?.canDrop?.( + draggedItem.item, + renderProps.item, + renderProps.itemIndex, + ) ?? true) + ) { + setDropTargetKey(renderProps.itemKey); + dragDropEvents?.onDragEnter?.(renderProps.item, renderProps.itemIndex, event); + } + }} + onDragOver={(event) => { + if (dropTargetKey === renderProps.itemKey) { + event.preventDefault(); + event.dataTransfer.dropEffect = 'move'; + } + }} + onDragLeave={(event) => { + if (!event.currentTarget.contains(event.relatedTarget as Node | null)) { + setDropTargetKey(undefined); + dragDropEvents?.onDragLeave?.(renderProps.item, renderProps.itemIndex, event); + } + }} + onDrop={(event) => { + event.preventDefault(); + const draggedItem = draggedItemRef.current; + if (draggedItem) { + dragDropEvents?.onDrop?.( + draggedItem.item, + renderProps.item, + renderProps.itemIndex, + event, + ); + } + setDropTargetKey(undefined); + }} + onDragEnd={(event) => { + dragDropEvents?.onDragEnd?.(renderProps.item, renderProps.itemIndex, event); + draggedItemRef.current = undefined; + setDropTargetKey(undefined); + }} + > + {showSelectionColumn && ( +
+ {selectionMode === SelectionMode.single ? ( + { + event.stopPropagation(); + renderProps.onToggleSelection(event); + }} + /> + ) : ( + { + event.stopPropagation(); + renderProps.onToggleSelection(event); + }} + /> + )} +
+ )} + {renderProps.columns.map((column, columnIndex) => ( + + ))} +
+ ); + + return <>{onRenderRow ? onRenderRow(rowProps, defaultRender) : defaultRender(rowProps)}; +}; diff --git a/src/controls/DetailsList/DetailsListShimmerRows.tsx b/src/controls/DetailsList/DetailsListShimmerRows.tsx new file mode 100644 index 000000000..6d695a485 --- /dev/null +++ b/src/controls/DetailsList/DetailsListShimmerRows.tsx @@ -0,0 +1,92 @@ +import * as React from 'react'; +import { Skeleton, SkeletonItem } from '@fluentui/react-components'; + +import type { + IDetailsListShimmerRowProps, + IDetailsListProps, +} from './DetailsList.types'; +import type { useDetailsListStyles } from './useDetailsListStyles'; + +interface DetailsListShimmerRowsProps { + columns: IDetailsListShimmerRowProps['columns']; + rowCount: number; + rowHeight: number; + compact: boolean; + selectionMode: IDetailsListShimmerRowProps['selectionMode']; + checkboxVisibility: IDetailsListShimmerRowProps['checkboxVisibility']; + showSelectionColumn: boolean; + gridTemplateColumns: string; + classes: ReturnType; + onRenderCustomPlaceholder: IDetailsListProps['onRenderCustomPlaceholder']; +} + +const SHIMMER_LINE_WIDTHS = ['72%', '88%', '64%', '80%'] as const; + +export const DetailsListShimmerRows = ({ + columns, + rowCount, + rowHeight, + compact, + selectionMode, + checkboxVisibility, + showSelectionColumn, + gridTemplateColumns, + classes, + onRenderCustomPlaceholder, +}: DetailsListShimmerRowsProps): React.ReactElement => ( + <> + {Array.from({ length: rowCount }, (_, rowIndex) => { + const shimmerRowProps: IDetailsListShimmerRowProps = { + columns, + rowIndex, + compact, + selectionMode, + checkboxVisibility, + }; + const defaultRender = ( + renderProps: IDetailsListShimmerRowProps, + ): React.ReactElement => ( +
+ {showSelectionColumn && ( +
+ + + +
+ )} + {renderProps.columns.map((column, columnIndex) => ( +
+ + + +
+ ))} +
+ ); + + return ( + + {onRenderCustomPlaceholder + ? onRenderCustomPlaceholder(shimmerRowProps, rowIndex, defaultRender) + : defaultRender(shimmerRowProps)} + + ); + })} + +); \ No newline at end of file diff --git a/src/controls/DetailsList/index.ts b/src/controls/DetailsList/index.ts new file mode 100644 index 000000000..f9c52d5fb --- /dev/null +++ b/src/controls/DetailsList/index.ts @@ -0,0 +1,2 @@ +export { DetailsList } from './DetailsList'; +export * from './DetailsList.types'; diff --git a/src/controls/DetailsList/useDetailsListColumns.ts b/src/controls/DetailsList/useDetailsListColumns.ts new file mode 100644 index 000000000..9b3178b64 --- /dev/null +++ b/src/controls/DetailsList/useDetailsListColumns.ts @@ -0,0 +1,222 @@ +import * as React from 'react'; + +import type { IColumn, IColumnReorderOptions, IDetailsListProps } from './DetailsList.types'; +import { ColumnDragEndLocation, DetailsListLayoutMode } from './DetailsList.types'; +import { calculateColumnWidths, clampColumnWidth } from './DetailsList.utils'; +import { DETAILS_LIST_SELECTION_COLUMN_WIDTH } from './useDetailsListStyles'; + +interface UseDetailsListColumnsOptions { + columns: readonly IColumn[]; + viewportWidth: number; + selectionColumnWidth: number; + layoutMode: DetailsListLayoutMode; + viewportRef: React.RefObject; + onColumnResize: IDetailsListProps['onColumnResize']; + columnReorderOptions: IColumnReorderOptions | undefined; +} + +interface UseDetailsListColumnsResult { + orderedColumns: readonly IColumn[]; + columnWidths: Readonly>; + contentWidth: number; + gridWidth: number; + gridTemplateColumns: string; + draggedColumnIndexRef: React.MutableRefObject; + columnDropLocationRef: React.MutableRefObject; + resizeColumn: (column: IColumn, columnIndex: number, width: number) => void; + beginColumnResize: ( + event: React.PointerEvent, + column: IColumn, + columnIndex: number, + ) => void; + autoFitColumn: (column: IColumn, columnIndex: number) => void; + isColumnDraggable: (columnIndex: number) => boolean; + handleColumnDrop: (targetIndex: number) => void; + moveColumn: (column: IColumn, targetIndex: number) => void; +} + +const areArraysEqual = (left: readonly string[], right: readonly string[]): boolean => + left.length === right.length && left.every((value, index) => value === right[index]); + +export const useDetailsListColumns = ({ + columns, + viewportWidth, + selectionColumnWidth, + layoutMode, + viewportRef, + onColumnResize, + columnReorderOptions, +}: UseDetailsListColumnsOptions): UseDetailsListColumnsResult => { + const resizeCleanupRef = React.useRef<(() => void) | undefined>(); + const draggedColumnIndexRef = React.useRef(); + const columnDropLocationRef = React.useRef(ColumnDragEndLocation.outside); + const [columnOrder, setColumnOrder] = React.useState(() => + columns.map((column) => column.key), + ); + const [columnWidthOverrides, setColumnWidthOverrides] = React.useState>({}); + + React.useEffect(() => { + const nextOrder = columns.map((column) => column.key); + setColumnOrder((currentOrder) => { + const retainedKeys = currentOrder.filter((key) => nextOrder.includes(key)); + const addedKeys = nextOrder.filter((key) => !retainedKeys.includes(key)); + const mergedOrder = [...retainedKeys, ...addedKeys]; + return areArraysEqual(currentOrder, mergedOrder) ? currentOrder : mergedOrder; + }); + }, [columns]); + + React.useEffect(() => () => resizeCleanupRef.current?.(), []); + + const orderedColumns = React.useMemo(() => { + const columnByKey = new Map(columns.map((column) => [column.key, column])); + return columnOrder + .map((key) => columnByKey.get(key)) + .filter((column): column is IColumn => Boolean(column)); + }, [columnOrder, columns]); + + const columnWidths = React.useMemo( + () => + calculateColumnWidths( + orderedColumns, + columnWidthOverrides, + Math.max(0, viewportWidth - selectionColumnWidth), + layoutMode === DetailsListLayoutMode.justified, + ), + [columnWidthOverrides, layoutMode, orderedColumns, selectionColumnWidth, viewportWidth], + ); + + const contentWidth = React.useMemo( + () => + selectionColumnWidth + + orderedColumns.reduce((total, column) => total + columnWidths[column.key], 0), + [columnWidths, orderedColumns, selectionColumnWidth], + ); + const gridWidth = Math.max(contentWidth, viewportWidth); + const gridTemplateColumns = [ + ...(selectionColumnWidth > 0 ? [`${DETAILS_LIST_SELECTION_COLUMN_WIDTH}px`] : []), + ...orderedColumns.map((column) => `${columnWidths[column.key]}px`), + ].join(' '); + + const resizeColumn = React.useCallback( + (column: IColumn, columnIndex: number, width: number): void => { + const nextWidth = clampColumnWidth(column, width); + setColumnWidthOverrides((currentWidths) => ({ + ...currentWidths, + [column.key]: nextWidth, + })); + column.onColumnResize?.(nextWidth); + onColumnResize?.(column, nextWidth, columnIndex); + }, + [onColumnResize], + ); + + const beginColumnResize = React.useCallback( + (event: React.PointerEvent, column: IColumn, columnIndex: number): void => { + event.preventDefault(); + event.stopPropagation(); + resizeCleanupRef.current?.(); + const originX = event.clientX; + const originWidth = columnWidths[column.key]; + + const handlePointerMove = (pointerEvent: PointerEvent): void => { + resizeColumn(column, columnIndex, originWidth + pointerEvent.clientX - originX); + }; + const handlePointerUp = (): void => { + window.removeEventListener('pointermove', handlePointerMove); + window.removeEventListener('pointerup', handlePointerUp); + window.removeEventListener('pointercancel', handlePointerUp); + resizeCleanupRef.current = undefined; + }; + + window.addEventListener('pointermove', handlePointerMove); + window.addEventListener('pointerup', handlePointerUp); + window.addEventListener('pointercancel', handlePointerUp); + resizeCleanupRef.current = handlePointerUp; + }, + [columnWidths, resizeColumn], + ); + + const autoFitColumn = React.useCallback( + (column: IColumn, columnIndex: number): void => { + const cells = viewportRef.current?.querySelectorAll('[data-details-column-key]'); + let measuredWidth = column.minWidth; + cells?.forEach((cell) => { + if (cell.dataset.detailsColumnKey === column.key) { + measuredWidth = Math.max(measuredWidth, cell.scrollWidth); + } + }); + resizeColumn(column, columnIndex, measuredWidth); + }, + [resizeColumn, viewportRef], + ); + + const isColumnDraggable = React.useCallback( + (columnIndex: number): boolean => { + if (!columnReorderOptions) { + return false; + } + const frozenFromStart = columnReorderOptions.frozenColumnCountFromStart ?? 0; + const frozenFromEnd = columnReorderOptions.frozenColumnCountFromEnd ?? 0; + return columnIndex >= frozenFromStart && columnIndex < orderedColumns.length - frozenFromEnd; + }, + [columnReorderOptions, orderedColumns.length], + ); + + const handleColumnDrop = React.useCallback( + (targetIndex: number): void => { + const draggedIndex = draggedColumnIndexRef.current; + if (draggedIndex === undefined || draggedIndex === targetIndex || !isColumnDraggable(targetIndex)) { + return; + } + const draggedColumn = orderedColumns[draggedIndex]; + const targetColumn = orderedColumns[targetIndex]; + setColumnOrder((currentOrder) => { + const nextOrder = [...currentOrder]; + const [draggedKey] = nextOrder.splice(draggedIndex, 1); + nextOrder.splice(targetIndex, 0, draggedKey); + return nextOrder; + }); + columnDropLocationRef.current = ColumnDragEndLocation.header; + columnReorderOptions?.onColumnDrop?.({ + draggedColumn, + draggedIndex, + targetColumn, + targetIndex, + }); + }, + [columnReorderOptions, isColumnDraggable, orderedColumns], + ); + + const moveColumn = React.useCallback( + (column: IColumn, targetIndex: number): void => { + const currentIndex = orderedColumns.findIndex((candidate) => candidate.key === column.key); + if (currentIndex < 0) { + return; + } + const boundedTargetIndex = Math.max(0, Math.min(targetIndex, orderedColumns.length - 1)); + setColumnOrder((currentOrder) => { + const nextOrder = [...currentOrder]; + const [columnKey] = nextOrder.splice(currentIndex, 1); + nextOrder.splice(boundedTargetIndex, 0, columnKey); + return nextOrder; + }); + }, + [orderedColumns], + ); + + return { + orderedColumns, + columnWidths, + contentWidth, + gridWidth, + gridTemplateColumns, + draggedColumnIndexRef, + columnDropLocationRef, + resizeColumn, + beginColumnResize, + autoFitColumn, + isColumnDraggable, + handleColumnDrop, + moveColumn, + }; +}; diff --git a/src/controls/DetailsList/useDetailsListGroups.ts b/src/controls/DetailsList/useDetailsListGroups.ts new file mode 100644 index 000000000..c8482f047 --- /dev/null +++ b/src/controls/DetailsList/useDetailsListGroups.ts @@ -0,0 +1,45 @@ +import * as React from 'react'; + +import type { IDetailsListGroup, IDetailsListProps } from './DetailsList.types'; + +interface UseDetailsListGroupsOptions { + onToggleGroup: IDetailsListProps['onToggleGroup']; +} + +interface UseDetailsListGroupsResult { + isGroupCollapsed: (group: IDetailsListGroup) => boolean; + toggleGroup: (group: IDetailsListGroup) => void; +} + +export const useDetailsListGroups = ({ + onToggleGroup, +}: UseDetailsListGroupsOptions): UseDetailsListGroupsResult => { + const [collapsedGroupKeys, setCollapsedGroupKeys] = React.useState>(new Set()); + + const isGroupCollapsed = React.useCallback( + (group: IDetailsListGroup): boolean => + group.isCollapsed ?? collapsedGroupKeys.has(group.key), + [collapsedGroupKeys], + ); + + const toggleGroup = React.useCallback( + (group: IDetailsListGroup): void => { + const nextCollapsed = !isGroupCollapsed(group); + if (group.isCollapsed === undefined) { + setCollapsedGroupKeys((currentKeys) => { + const nextKeys = new Set(currentKeys); + if (nextCollapsed) { + nextKeys.add(group.key); + } else { + nextKeys.delete(group.key); + } + return nextKeys; + }); + } + onToggleGroup?.(group, nextCollapsed); + }, + [isGroupCollapsed, onToggleGroup], + ); + + return { isGroupCollapsed, toggleGroup }; +}; \ No newline at end of file diff --git a/src/controls/DetailsList/useDetailsListSelection.ts b/src/controls/DetailsList/useDetailsListSelection.ts new file mode 100644 index 000000000..221c3f281 --- /dev/null +++ b/src/controls/DetailsList/useDetailsListSelection.ts @@ -0,0 +1,193 @@ +import * as React from 'react'; + +import type { + DetailsListKey, + IDetailsListProps, + IDetailsListSelectionChange, +} from './DetailsList.types'; +import { SelectionMode } from './DetailsList.types'; + +interface UseDetailsListSelectionOptions { + items: readonly T[]; + getKey: IDetailsListProps['getKey']; + setKey: IDetailsListProps['setKey']; + selectionMode: SelectionMode; + selectedKeys: IDetailsListProps['selectedKeys']; + defaultSelectedKeys: readonly DetailsListKey[]; + disabledItemKeys: IDetailsListProps['disabledItemKeys']; + onSelectionChanged: ((change: IDetailsListSelectionChange) => void) | undefined; +} + +interface UseDetailsListSelectionResult { + getItemKey: (item: T, index: number) => DetailsListKey; + selectedKeySet: ReadonlySet; + disabledKeySet: ReadonlySet; + selectedItems: readonly T[]; + isAllSelected: boolean; + isPartiallySelected: boolean; + commitSelection: (nextKeys: Set) => void; + selectItem: ( + item: T, + itemIndex: number, + event: React.SyntheticEvent, + preserveExistingSelection: boolean, + ) => void; + toggleSelectAll: (event: React.SyntheticEvent) => void; +} + +const toKeySet = ( + keys: ReadonlySet | readonly DetailsListKey[] | undefined, +): Set => new Set(keys ?? []); + +export const useDetailsListSelection = ({ + items, + getKey, + setKey, + selectionMode, + selectedKeys, + defaultSelectedKeys, + disabledItemKeys, + onSelectionChanged, +}: UseDetailsListSelectionOptions): UseDetailsListSelectionResult => { + const lastSelectedIndexRef = React.useRef(); + const previousSetKeyRef = React.useRef(setKey); + const [internalSelectedKeys, setInternalSelectedKeys] = React.useState>(() => + toKeySet(defaultSelectedKeys), + ); + const isSelectionControlled = selectedKeys !== undefined; + const selectedKeySet = React.useMemo( + () => (isSelectionControlled ? toKeySet(selectedKeys) : internalSelectedKeys), + [internalSelectedKeys, isSelectionControlled, selectedKeys], + ); + const disabledKeySet = React.useMemo(() => toKeySet(disabledItemKeys), [disabledItemKeys]); + + const getItemKey = React.useCallback( + (item: T, index: number): DetailsListKey => getKey?.(item, index) ?? index, + [getKey], + ); + + React.useEffect(() => { + if (previousSetKeyRef.current !== setKey) { + previousSetKeyRef.current = setKey; + if (!isSelectionControlled) { + setInternalSelectedKeys(toKeySet(defaultSelectedKeys)); + } + } + }, [defaultSelectedKeys, isSelectionControlled, setKey]); + + const selectedItems = React.useMemo( + () => items.filter((item, index) => selectedKeySet.has(getItemKey(item, index))), + [getItemKey, items, selectedKeySet], + ); + const enabledItemKeys = React.useMemo( + () => + items + .map((item, index) => getItemKey(item, index)) + .filter((itemKey) => !disabledKeySet.has(itemKey)), + [disabledKeySet, getItemKey, items], + ); + const isAllSelected = + enabledItemKeys.length > 0 && enabledItemKeys.every((itemKey) => selectedKeySet.has(itemKey)); + const isPartiallySelected = + !isAllSelected && enabledItemKeys.some((itemKey) => selectedKeySet.has(itemKey)); + + const commitSelection = React.useCallback( + (nextKeys: Set): void => { + if (!isSelectionControlled) { + setInternalSelectedKeys(new Set(nextKeys)); + } + const nextItems = items.filter((item, index) => nextKeys.has(getItemKey(item, index))); + onSelectionChanged?.({ selectedItems: nextItems, selectedKeys: new Set(nextKeys) }); + }, + [getItemKey, isSelectionControlled, items, onSelectionChanged], + ); + + const selectItem = React.useCallback( + ( + item: T, + itemIndex: number, + event: React.SyntheticEvent, + preserveExistingSelection: boolean, + ): void => { + if (selectionMode === SelectionMode.none) { + return; + } + + const itemKey = getItemKey(item, itemIndex); + if (disabledKeySet.has(itemKey)) { + return; + } + + const nextKeys = new Set(selectedKeySet); + const nativeEvent = event.nativeEvent; + const shiftKey = 'shiftKey' in nativeEvent && Boolean(nativeEvent.shiftKey); + const modifierKey = + ('metaKey' in nativeEvent && Boolean(nativeEvent.metaKey)) || + ('ctrlKey' in nativeEvent && Boolean(nativeEvent.ctrlKey)); + + if (selectionMode === SelectionMode.single) { + nextKeys.clear(); + if (!selectedKeySet.has(itemKey) || !preserveExistingSelection) { + nextKeys.add(itemKey); + } + } else if (shiftKey && lastSelectedIndexRef.current !== undefined) { + if (!modifierKey) { + nextKeys.clear(); + } + const rangeStart = Math.min(lastSelectedIndexRef.current, itemIndex); + const rangeEnd = Math.max(lastSelectedIndexRef.current, itemIndex); + for (let index = rangeStart; index <= rangeEnd; index += 1) { + const rangeItem = items[index]; + if (rangeItem !== undefined) { + const rangeKey = getItemKey(rangeItem, index); + if (!disabledKeySet.has(rangeKey)) { + nextKeys.add(rangeKey); + } + } + } + } else if (preserveExistingSelection || modifierKey) { + if (nextKeys.has(itemKey)) { + nextKeys.delete(itemKey); + } else { + nextKeys.add(itemKey); + } + } else { + nextKeys.clear(); + nextKeys.add(itemKey); + } + + lastSelectedIndexRef.current = itemIndex; + commitSelection(nextKeys); + }, + [commitSelection, disabledKeySet, getItemKey, items, selectedKeySet, selectionMode], + ); + + const toggleSelectAll = React.useCallback( + (event: React.SyntheticEvent): void => { + event.stopPropagation(); + if (selectionMode !== SelectionMode.multiple) { + return; + } + const nextKeys = new Set(selectedKeySet); + if (isAllSelected) { + enabledItemKeys.forEach((itemKey) => nextKeys.delete(itemKey)); + } else { + enabledItemKeys.forEach((itemKey) => nextKeys.add(itemKey)); + } + commitSelection(nextKeys); + }, + [commitSelection, enabledItemKeys, isAllSelected, selectedKeySet, selectionMode], + ); + + return { + getItemKey, + selectedKeySet, + disabledKeySet, + selectedItems, + isAllSelected, + isPartiallySelected, + commitSelection, + selectItem, + toggleSelectAll, + }; +}; diff --git a/src/controls/DetailsList/useDetailsListStyles.ts b/src/controls/DetailsList/useDetailsListStyles.ts new file mode 100644 index 000000000..3ff00cfb8 --- /dev/null +++ b/src/controls/DetailsList/useDetailsListStyles.ts @@ -0,0 +1,374 @@ +import { css } from '@emotion/css'; +import { tokens } from '@fluentui/react-components'; + +export const DETAILS_LIST_HEADER_HEIGHT = 42; +export const DETAILS_LIST_HEADER_TOP_SPACING = 16; +export const DETAILS_LIST_SELECTION_COLUMN_WIDTH = 48; +export const DETAILS_LIST_DEFAULT_ROW_HEIGHT = 42; +export const DETAILS_LIST_COMPACT_ROW_HEIGHT = 32; +export const DETAILS_LIST_DEFAULT_HEIGHT = 600; + +const DETAILS_LIST_SCROLLBAR_SIZE = '3px'; + +interface IDetailsListClassNames { + root: string; + viewport: string; + grid: string; + headerViewport: string; + headerWrapper: string; + headerRow: string; + headerCell: string; + headerButton: string; + headerLabel: string; + headerIcon: string; + resizeHandle: string; + row: string; + selectedRow: string; + disabledRow: string; + dropTargetRow: string; + cell: string; + paddedCell: string; + multilineCell: string; + rowHeaderCell: string; + cellText: string; + selectionCell: string; + selectionCellOnHover: string; + groupHeader: string; + groupButton: string; + groupIndent: string; + body: string; + shimmerRow: string; + shimmerCell: string; + virtualEntry: string; + stateContainer: string; + loadingMore: string; +} + +export const useDetailsListStyles = (): IDetailsListClassNames => { + const selectionCell = css({ + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + boxSizing: 'border-box', + minWidth: 0, + overflow: 'hidden', + }); + + const row = css({ + position: 'relative', + display: 'grid', + alignItems: 'stretch', + minWidth: '100%', + boxSizing: 'border-box', + color: tokens.colorNeutralForeground2, + backgroundColor: tokens.colorNeutralBackground1, + borderBottom: `1px solid ${tokens.colorNeutralStroke2}`, + cursor: 'default', + outline: 'none', + '&:hover': { + color: tokens.colorNeutralForeground1, + backgroundColor: tokens.colorNeutralBackground1Hover, + }, + '&:focus-visible': { + outline: `2px solid ${tokens.colorBrandStroke1}`, + outlineOffset: '-2px', + zIndex: 1, + }, + [`&:hover .${selectionCell}, &:focus-within .${selectionCell}`]: { + opacity: 1, + }, + }); + + return { + root: css({ + position: 'relative', + width: '100%', + minWidth: 0, + color: tokens.colorNeutralForeground2, + backgroundColor: tokens.colorNeutralBackground1, + fontFamily: tokens.fontFamilyBase, + fontSize: tokens.fontSizeBase200, + lineHeight: tokens.lineHeightBase200, + }), + viewport: css({ + position: 'relative', + flex: '1 1 auto', + width: '100%', + minWidth: 0, + minHeight: 0, + overflow: 'auto', + overscrollBehavior: 'contain', + WebkitOverflowScrolling: 'touch', + scrollbarWidth: 'thin', + scrollbarColor: `${tokens.colorBrandBackground} ${tokens.colorNeutralBackground3}`, + '&::-webkit-scrollbar': { + width: DETAILS_LIST_SCROLLBAR_SIZE, + height: DETAILS_LIST_SCROLLBAR_SIZE, + }, + '&::-webkit-scrollbar-track': { + background: tokens.colorNeutralBackground3, + borderRadius: tokens.borderRadiusMedium, + }, + '&::-webkit-scrollbar-thumb': { + background: tokens.colorBrandBackground, + borderRadius: tokens.borderRadiusMedium, + }, + '&::-webkit-scrollbar-thumb:hover': { + background: tokens.colorBrandBackgroundHover, + }, + }), + grid: css({ + position: 'relative', + display: 'flex', + flexDirection: 'column', + width: '100%', + minWidth: 0, + outline: 'none', + }), + headerViewport: css({ + flex: '0 0 auto', + width: '100%', + minWidth: 0, + overflow: 'hidden', + }), + headerWrapper: css({ + position: 'relative', + minWidth: '100%', + boxSizing: 'border-box', + paddingTop: tokens.spacingVerticalL, + backgroundColor: tokens.colorNeutralBackground1, + borderBottom: `1px solid ${tokens.colorNeutralStroke1}`, + }), + headerRow: css({ + display: 'grid', + alignItems: 'stretch', + minWidth: '100%', + height: DETAILS_LIST_HEADER_HEIGHT, + boxSizing: 'border-box', + }), + headerCell: css({ + position: 'relative', + display: 'flex', + minWidth: 0, + height: DETAILS_LIST_HEADER_HEIGHT, + boxSizing: 'border-box', + overflow: 'visible', + backgroundColor: tokens.colorNeutralBackground1, + }), + headerButton: css({ + display: 'flex', + alignItems: 'center', + justifyContent: 'flex-start', + gap: tokens.spacingHorizontalXS, + width: '100%', + minWidth: 0, + height: '100%', + boxSizing: 'border-box', + padding: `0 ${tokens.spacingHorizontalS} 0 ${tokens.spacingHorizontalM}`, + color: 'inherit', + backgroundColor: 'transparent', + border: 0, + borderRadius: 0, + font: 'inherit', + textAlign: 'left', + cursor: 'pointer', + outline: 'none', + '&:hover': { + backgroundColor: tokens.colorNeutralBackground1Hover, + }, + '&:active': { + backgroundColor: tokens.colorNeutralBackground1Pressed, + }, + '&:focus-visible': { + outline: `2px solid ${tokens.colorBrandStroke1}`, + outlineOffset: '-2px', + }, + '&:disabled': { + cursor: 'default', + }, + }), + headerLabel: css({ + minWidth: 0, + flexGrow: 1, + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + }), + headerIcon: css({ + flexShrink: 0, + color: tokens.colorNeutralForeground3, + }), + resizeHandle: css({ + position: 'absolute', + top: 0, + right: -8, + bottom: 0, + zIndex: 2, + width: 16, + padding: 0, + backgroundColor: 'transparent', + border: 0, + // Fluent UI 9 Button applies a pointer cursor to its root. The resize + // handle must keep the native horizontal-resize affordance instead. + cursor: 'col-resize !important', + touchAction: 'none', + outline: 'none', + '&:hover, &:active, &:focus-visible': { + cursor: 'col-resize !important', + }, + '&::after': { + position: 'absolute', + top: 0, + bottom: 0, + left: '50%', + width: 1, + content: '""', + backgroundColor: tokens.colorNeutralStroke1, + opacity: 0, + }, + '&:hover::after, &:focus-visible::after': { + opacity: 1, + }, + '&:focus-visible': { + outline: `2px solid ${tokens.colorBrandStroke1}`, + outlineOffset: '-2px', + }, + }), + row, + selectedRow: css({ + color: tokens.colorNeutralForeground1, + backgroundColor: tokens.colorSubtleBackgroundSelected, + '&:hover': { + backgroundColor: tokens.colorNeutralBackground3, + }, + }), + disabledRow: css({ + color: tokens.colorNeutralForegroundDisabled, + pointerEvents: 'none', + }), + dropTargetRow: css({ + outline: `2px solid ${tokens.colorBrandStroke1}`, + outlineOffset: '-2px', + }), + cell: css({ + display: 'flex', + alignItems: 'center', + minWidth: 0, + boxSizing: 'border-box', + overflow: 'hidden', + padding: `0 ${tokens.spacingHorizontalS} 0 ${tokens.spacingHorizontalM}`, + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + }), + paddedCell: css({ + paddingRight: tokens.spacingHorizontalXXL, + }), + multilineCell: css({ + alignItems: 'flex-start', + paddingTop: tokens.spacingVerticalS, + paddingBottom: tokens.spacingVerticalS, + whiteSpace: 'normal', + wordBreak: 'break-word', + textOverflow: 'clip', + }), + rowHeaderCell: css({ + color: tokens.colorNeutralForeground1, + fontSize: tokens.fontSizeBase300, + }), + cellText: css({ + display: 'block', + minWidth: 0, + maxWidth: '100%', + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'inherit', + }), + selectionCell, + selectionCellOnHover: css({ + opacity: 0, + }), + groupHeader: css({ + display: 'grid', + alignItems: 'stretch', + minWidth: '100%', + boxSizing: 'border-box', + backgroundColor: tokens.colorNeutralBackground2, + borderBottom: `1px solid ${tokens.colorNeutralStroke2}`, + }), + groupButton: css({ + display: 'flex', + alignItems: 'center', + justifyContent: 'flex-start', + gap: tokens.spacingHorizontalS, + minWidth: 0, + width: '100%', + padding: `0 ${tokens.spacingHorizontalM}`, + color: tokens.colorNeutralForeground1, + backgroundColor: 'transparent', + border: 0, + borderRadius: 0, + font: 'inherit', + textAlign: 'left', + cursor: 'pointer', + outline: 'none', + '&:hover': { + backgroundColor: tokens.colorNeutralBackground2Hover, + }, + '&:focus-visible': { + outline: `2px solid ${tokens.colorBrandStroke1}`, + outlineOffset: '-2px', + }, + }), + groupIndent: css({ + flex: `0 0 ${tokens.spacingHorizontalXXL}`, + width: tokens.spacingHorizontalXXL, + }), + body: css({ + position: 'relative', + minWidth: '100%', + overflowAnchor: 'none', + }), + shimmerRow: css({ + display: 'grid', + alignItems: 'stretch', + minWidth: '100%', + boxSizing: 'border-box', + backgroundColor: tokens.colorNeutralBackground1, + borderBottom: `1px solid ${tokens.colorNeutralStroke2}`, + pointerEvents: 'none', + }), + shimmerCell: css({ + display: 'flex', + alignItems: 'center', + minWidth: 0, + boxSizing: 'border-box', + overflow: 'hidden', + padding: `0 ${tokens.spacingHorizontalS} 0 ${tokens.spacingHorizontalM}`, + }), + virtualEntry: css({ + position: 'absolute', + right: 0, + left: 0, + }), + stateContainer: css({ + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + gap: tokens.spacingHorizontalS, + minHeight: 160, + padding: tokens.spacingVerticalXXL, + boxSizing: 'border-box', + }), + loadingMore: css({ + position: 'sticky', + left: 0, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + gap: tokens.spacingHorizontalS, + minHeight: DETAILS_LIST_COMPACT_ROW_HEIGHT, + color: tokens.colorNeutralForeground2, + backgroundColor: tokens.colorNeutralBackground1, + }), + }; +}; diff --git a/src/controls/DetailsList/useDetailsListViewport.ts b/src/controls/DetailsList/useDetailsListViewport.ts new file mode 100644 index 000000000..96ddd2461 --- /dev/null +++ b/src/controls/DetailsList/useDetailsListViewport.ts @@ -0,0 +1,131 @@ +/* eslint-disable no-void */ +import * as React from 'react'; +import { ResizeObserver } from '@juggle/resize-observer'; + +import type { IDetailsListProps } from './DetailsList.types'; + +interface UseDetailsListViewportOptions { + itemCount: number; + enableInfiniteScroll: boolean; + infiniteScrollThreshold: number; + onLoadMore: IDetailsListProps['onLoadMore']; + hasNextPage: boolean; + isLoadingMore: boolean; +} + +interface UseDetailsListViewportResult { + viewportRef: React.RefObject; + viewportWidth: number; + viewportHeight: number; + scrollTop: number; + setScrollTop: React.Dispatch>; + isLoadingMoreInternally: boolean; + handleScroll: (event: React.UIEvent) => void; + handleScrollIntent: (viewport: HTMLDivElement) => void; +} + +export const useDetailsListViewport = ({ + itemCount, + enableInfiniteScroll, + infiniteScrollThreshold, + onLoadMore, + hasNextPage, + isLoadingMore, +}: UseDetailsListViewportOptions): UseDetailsListViewportResult => { + const viewportRef = React.useRef(null); + const loadTriggeredForLengthRef = React.useRef(-1); + const infiniteScrollArmedRef = React.useRef(true); + const [viewportWidth, setViewportWidth] = React.useState(0); + const [viewportHeight, setViewportHeight] = React.useState(0); + const [scrollTop, setScrollTop] = React.useState(0); + const [isLoadingMoreInternally, setIsLoadingMoreInternally] = React.useState(false); + + React.useEffect(() => { + const viewport = viewportRef.current; + if (!viewport) { + return undefined; + } + + const updateViewportSize = (): void => { + setViewportWidth(viewport.clientWidth); + setViewportHeight(viewport.clientHeight); + }; + const resizeObserver = new ResizeObserver(updateViewportSize); + resizeObserver.observe(viewport); + updateViewportSize(); + + return () => resizeObserver.disconnect(); + }, []); + + React.useEffect(() => { + if (itemCount !== loadTriggeredForLengthRef.current) { + setIsLoadingMoreInternally(false); + } + }, [itemCount]); + + const triggerLoadMore = React.useCallback((): void => { + if ( + !enableInfiniteScroll || + !hasNextPage || + !onLoadMore || + isLoadingMore || + isLoadingMoreInternally || + loadTriggeredForLengthRef.current === itemCount + ) { + return; + } + + loadTriggeredForLengthRef.current = itemCount; + infiniteScrollArmedRef.current = false; + setIsLoadingMoreInternally(true); + void Promise.resolve(onLoadMore()) + .catch(() => { + loadTriggeredForLengthRef.current = -1; + }) + .finally(() => setIsLoadingMoreInternally(false)); + }, [ + enableInfiniteScroll, + hasNextPage, + isLoadingMore, + isLoadingMoreInternally, + itemCount, + onLoadMore, + ]); + + const handleScroll = React.useCallback( + (event: React.UIEvent): void => { + const viewport = event.currentTarget; + setScrollTop(viewport.scrollTop); + const remainingScroll = viewport.scrollHeight - viewport.clientHeight - viewport.scrollTop; + if (remainingScroll <= infiniteScrollThreshold && infiniteScrollArmedRef.current) { + triggerLoadMore(); + } + }, + [infiniteScrollThreshold, triggerLoadMore], + ); + + const handleScrollIntent = React.useCallback( + (viewport: HTMLDivElement): void => { + if (isLoadingMore || isLoadingMoreInternally) { + return; + } + infiniteScrollArmedRef.current = true; + const remainingScroll = viewport.scrollHeight - viewport.clientHeight - viewport.scrollTop; + if (remainingScroll <= infiniteScrollThreshold) { + triggerLoadMore(); + } + }, + [infiniteScrollThreshold, isLoadingMore, isLoadingMoreInternally, triggerLoadMore], + ); + + return { + viewportRef, + viewportWidth, + viewportHeight, + scrollTop, + setScrollTop, + isLoadingMoreInternally, + handleScroll, + handleScrollIntent, + }; +}; diff --git a/src/index.ts b/src/index.ts index 3f6827b15..148032d21 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,6 @@ export * from './FileTypeIcon'; export * from './ListView'; +export * from './DetailsList'; export * from './Placeholder'; export * from './SiteBreadcrumb'; export * from './TaxonomyPicker'; diff --git a/src/loc/bg-bg.ts b/src/loc/bg-bg.ts index b7290dac9..58a470256 100644 --- a/src/loc/bg-bg.ts +++ b/src/loc/bg-bg.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Търсене", "mapsTitlePrefix": "Карта на", "ListViewFilterLabel": "Филтриране на списъка", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Нормален текст", "HeaderH2": "Функция 2", "HeaderH3": "Функция 3", diff --git a/src/loc/ca-es.ts b/src/loc/ca-es.ts index fb01d1b7c..d699314aa 100644 --- a/src/loc/ca-es.ts +++ b/src/loc/ca-es.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Cerca", "mapsTitlePrefix": "Mapa de", "ListViewFilterLabel": "Filtrar la llista", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Text normal", "HeaderH2": "Encapçalament 2", "HeaderH3": "Encapçalament 3", diff --git a/src/loc/cs-cz.ts b/src/loc/cs-cz.ts index 330059b49..1856eb864 100644 --- a/src/loc/cs-cz.ts +++ b/src/loc/cs-cz.ts @@ -94,6 +94,15 @@ define([], () => { mapsTitlePrefix: "Mapa:", ListViewFilterLabel: "Filtrovat seznam", + DetailsListAriaLabel: "Details list", + DetailsListHeaderAriaLabel: "List header", + DetailsListSelectAllRowsAriaLabel: "Select all rows", + DetailsListSelectionAriaLabel: "Selection", + DetailsListSelectRowAriaLabel: "Select row {0}", + DetailsListResizeColumnAriaLabel: "Resize {0} column", + DetailsListLoading: "Loading", + DetailsListLoadingMore: "Loading more items", + DetailsListNoItems: "No items to display", HeaderNormalText: "Normální text", HeaderH2: "Nadpis 2", diff --git a/src/loc/da-dk.ts b/src/loc/da-dk.ts index 03631d955..36531b104 100644 --- a/src/loc/da-dk.ts +++ b/src/loc/da-dk.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Søg", "mapsTitlePrefix": "Kort over", "ListViewFilterLabel": "Filtrere listen", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Normal tekst", "HeaderH2": "Overskrift 2", "HeaderH3": "Overskrift 3", diff --git a/src/loc/de-de.ts b/src/loc/de-de.ts index ecf48939e..1a730ee6a 100644 --- a/src/loc/de-de.ts +++ b/src/loc/de-de.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Suche", "mapsTitlePrefix": "Karte von", "ListViewFilterLabel": "Filter", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Standardtext", "HeaderH2": "Überschrift 2", "HeaderH3": "Überschrift 3", diff --git a/src/loc/el-gr.ts b/src/loc/el-gr.ts index d1d61eb36..e9003dc69 100644 --- a/src/loc/el-gr.ts +++ b/src/loc/el-gr.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Αναζήτηση", "mapsTitlePrefix": "Χάρτης", "ListViewFilterLabel": "Φιλτράρισμα της λίστας", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Κανονικό κείμενο", "HeaderH2": "Τομέας 2", "HeaderH3": "Τομέας 3", diff --git a/src/loc/en-us.ts b/src/loc/en-us.ts index 52ba0cd0f..2e7dda64d 100644 --- a/src/loc/en-us.ts +++ b/src/loc/en-us.ts @@ -89,6 +89,15 @@ define([], () => { mapsTitlePrefix: "Map of", ListViewFilterLabel: "Filter the list", + DetailsListAriaLabel: "Details list", + DetailsListHeaderAriaLabel: "List header", + DetailsListSelectAllRowsAriaLabel: "Select all rows", + DetailsListSelectionAriaLabel: "Selection", + DetailsListSelectRowAriaLabel: "Select row {0}", + DetailsListResizeColumnAriaLabel: "Resize {0} column", + DetailsListLoading: "Loading", + DetailsListLoadingMore: "Loading more items", + DetailsListNoItems: "No items to display", HeaderNormalText: "Normal text", HeaderH2: "Heading 2", diff --git a/src/loc/es-es.ts b/src/loc/es-es.ts index 1a918dca7..207c6435a 100644 --- a/src/loc/es-es.ts +++ b/src/loc/es-es.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Búsqueda", "mapsTitlePrefix": "Mapa de", "ListViewFilterLabel": "Filtrar la lista", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Texto normal", "HeaderH2": "Rumbo 2", "HeaderH3": "Rumbo 3", diff --git a/src/loc/et-ee.ts b/src/loc/et-ee.ts index 83553049a..2a4b72f5c 100644 --- a/src/loc/et-ee.ts +++ b/src/loc/et-ee.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Otsing", "mapsTitlePrefix": "Kaardi kaart", "ListViewFilterLabel": "Filtreeri loendit", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Tavaline tekst", "HeaderH2": "1. rubriik", "HeaderH3": "2. rubriik", diff --git a/src/loc/eu-es.ts b/src/loc/eu-es.ts index 86f760733..4475530e2 100644 --- a/src/loc/eu-es.ts +++ b/src/loc/eu-es.ts @@ -82,6 +82,15 @@ define([], () => { mapsTitlePrefix: 'Map of', ListViewFilterLabel: "Filter the list", + DetailsListAriaLabel: "Details list", + DetailsListHeaderAriaLabel: "List header", + DetailsListSelectAllRowsAriaLabel: "Select all rows", + DetailsListSelectionAriaLabel: "Selection", + DetailsListSelectRowAriaLabel: "Select row {0}", + DetailsListResizeColumnAriaLabel: "Resize {0} column", + DetailsListLoading: "Loading", + DetailsListLoadingMore: "Loading more items", + DetailsListNoItems: "No items to display", HeaderNormalText: "Normal text", HeaderH2: "Heading 2", diff --git a/src/loc/fi-fi.ts b/src/loc/fi-fi.ts index b6b79fcaf..3ce99afdb 100644 --- a/src/loc/fi-fi.ts +++ b/src/loc/fi-fi.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Etsi", "mapsTitlePrefix": "Kartta", "ListViewFilterLabel": "Suodata luettelo", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Normaali teksti", "HeaderH2": "Otsake 2", "HeaderH3": "Otsake 3", diff --git a/src/loc/fr-ca.ts b/src/loc/fr-ca.ts index eb089c267..b1e87057b 100644 --- a/src/loc/fr-ca.ts +++ b/src/loc/fr-ca.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Rechercher", "mapsTitlePrefix": "Carte de", "ListViewFilterLabel": "Filtrer", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Texte normal", "HeaderH2": "Titre 2", "HeaderH3": "Titre 3", diff --git a/src/loc/fr-fr.ts b/src/loc/fr-fr.ts index 7235df017..06abddcea 100644 --- a/src/loc/fr-fr.ts +++ b/src/loc/fr-fr.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Rechercher", "mapsTitlePrefix": "Carte de", "ListViewFilterLabel": "Filtrer", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Texte normal", "HeaderH2": "Titre 2", "HeaderH3": "Titre 3", diff --git a/src/loc/it-it.ts b/src/loc/it-it.ts index 8604aec9e..0d916ae76 100644 --- a/src/loc/it-it.ts +++ b/src/loc/it-it.ts @@ -108,6 +108,15 @@ define([], () => { "mapsSearchButtonText": "Ricerca", "mapsTitlePrefix": "Mappa di", "ListViewFilterLabel": "Filtrare l'elenco", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Testo normale", "HeaderH2": "Titolo 2", "HeaderH3": "Titolo 3", diff --git a/src/loc/ja-jp.ts b/src/loc/ja-jp.ts index ae0514d8a..25aa37301 100644 --- a/src/loc/ja-jp.ts +++ b/src/loc/ja-jp.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "検索", "mapsTitlePrefix": "地図", "ListViewFilterLabel": "リストをフィルター処理する", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "標準テキスト", "HeaderH2": "見出し 2", "HeaderH3": "見出し 3", diff --git a/src/loc/lt-lt.ts b/src/loc/lt-lt.ts index 49b602ba5..04521858f 100644 --- a/src/loc/lt-lt.ts +++ b/src/loc/lt-lt.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Paieška", "mapsTitlePrefix": "Žemėlapis", "ListViewFilterLabel": "Filtruoti", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Paprastas tekstas", "HeaderH2": "1 antraštė", "HeaderH3": "2 antraštė", diff --git a/src/loc/lv-lv.ts b/src/loc/lv-lv.ts index 89d3cc4e8..fe835e7db 100644 --- a/src/loc/lv-lv.ts +++ b/src/loc/lv-lv.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Meklēšanas", "mapsTitlePrefix": "Karti par", "ListViewFilterLabel": "Filtrētu sarakstu", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Parastu tekstu", "HeaderH2": "1. izdevumu kategorija", "HeaderH3": "2. izdevumu kategorija", diff --git a/src/loc/mystrings.d.ts b/src/loc/mystrings.d.ts index dc3dba7f9..321310290 100644 --- a/src/loc/mystrings.d.ts +++ b/src/loc/mystrings.d.ts @@ -98,6 +98,15 @@ KPIPercentOfTotal: string; PeoplePickerGroupNotFound: string; ListViewFilterLabel: string; + DetailsListAriaLabel: string; + DetailsListHeaderAriaLabel: string; + DetailsListSelectAllRowsAriaLabel: string; + DetailsListSelectionAriaLabel: string; + DetailsListSelectRowAriaLabel: string; + DetailsListResizeColumnAriaLabel: string; + DetailsListLoading: string; + DetailsListLoadingMore: string; + DetailsListNoItems: string; PeoplePickerSearchText: string; peoplePickerComponentTooltipMessage: string; diff --git a/src/loc/nb-no.ts b/src/loc/nb-no.ts index 3e9f95ec8..fc89c5498 100644 --- a/src/loc/nb-no.ts +++ b/src/loc/nb-no.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Søk", "mapsTitlePrefix": "Kart over", "ListViewFilterLabel": "Filtrer listen", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Vanlig tekst", "HeaderH2": "Overskrift 2", "HeaderH3": "Overskrift 3", diff --git a/src/loc/nl-nl.ts b/src/loc/nl-nl.ts index 2433e8ee9..8d96927f0 100644 --- a/src/loc/nl-nl.ts +++ b/src/loc/nl-nl.ts @@ -108,6 +108,15 @@ define([], () => { "mapsSearchButtonText": "Zoeken", "mapsTitlePrefix": "Kaart van", "ListViewFilterLabel": "Filter de lijst", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Normale tekst", "HeaderH2": "Rubriek 2", "HeaderH3": "Rubriek 3", diff --git a/src/loc/pl-pl.ts b/src/loc/pl-pl.ts index ea0367e14..3e8f94e5c 100644 --- a/src/loc/pl-pl.ts +++ b/src/loc/pl-pl.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Szukaj", "mapsTitlePrefix": "Mapa", "ListViewFilterLabel": "Filtrowanie listy", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Zwykły tekst", "HeaderH2": "Dział 2", "HeaderH3": "Dział 3", diff --git a/src/loc/pt-br.ts b/src/loc/pt-br.ts index 951a9f65d..21fa91202 100644 --- a/src/loc/pt-br.ts +++ b/src/loc/pt-br.ts @@ -77,6 +77,15 @@ define([], () => { mapsSearchButtonText: 'Procurar', mapsTitlePrefix: 'Mapa de', ListViewFilterLabel: "Filtre a lista", + DetailsListAriaLabel: "Details list", + DetailsListHeaderAriaLabel: "List header", + DetailsListSelectAllRowsAriaLabel: "Select all rows", + DetailsListSelectionAriaLabel: "Selection", + DetailsListSelectRowAriaLabel: "Select row {0}", + DetailsListResizeColumnAriaLabel: "Resize {0} column", + DetailsListLoading: "Loading", + DetailsListLoadingMore: "Loading more items", + DetailsListNoItems: "No items to display", HeaderNormalText: "Texto normal", HeaderH2: "Cabeçalho 2", HeaderH3: "Título 3", @@ -443,4 +452,3 @@ worldMapZoomIn: "Zoom in", "UploadFilesUploadButtonLabel": "Upload", }; }); - diff --git a/src/loc/pt-pt.ts b/src/loc/pt-pt.ts index 96a37baa1..6700e0ec9 100644 --- a/src/loc/pt-pt.ts +++ b/src/loc/pt-pt.ts @@ -112,6 +112,15 @@ define([], () => { "mapsSearchButtonText": "Procurar", "mapsTitlePrefix": "Mapa de", "ListViewFilterLabel": "Filtrar a lista", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Texto normal", "HeaderH2": "Cabeçalho 2", "HeaderH3": "Título 3", diff --git a/src/loc/ro-ro.ts b/src/loc/ro-ro.ts index 424ed4374..c17791024 100644 --- a/src/loc/ro-ro.ts +++ b/src/loc/ro-ro.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Căutaţi", "mapsTitlePrefix": "Harta", "ListViewFilterLabel": "Filtrați lista", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Text normal", "HeaderH2": "Titlul 2", "HeaderH3": "Titlu 3", diff --git a/src/loc/ru-ru.ts b/src/loc/ru-ru.ts index 3a2be3896..2580f4979 100644 --- a/src/loc/ru-ru.ts +++ b/src/loc/ru-ru.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Поиск", "mapsTitlePrefix": "Карта", "ListViewFilterLabel": "Фильтр", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Обычный", "HeaderH2": "Заголовок 2", "HeaderH3": "Заголовок 3", diff --git a/src/loc/sk-sk.ts b/src/loc/sk-sk.ts index 6abec4431..a1410cdc7 100644 --- a/src/loc/sk-sk.ts +++ b/src/loc/sk-sk.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Hľadať", "mapsTitlePrefix": "Mapa mesta", "ListViewFilterLabel": "Filtrovanie zoznamu", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Normálny text", "HeaderH2": "Nadpis 2", "HeaderH3": "Nadpis 3", diff --git a/src/loc/sr-latn-rs.ts b/src/loc/sr-latn-rs.ts index 61a6e5cee..ba077ffe1 100644 --- a/src/loc/sr-latn-rs.ts +++ b/src/loc/sr-latn-rs.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Pretrage", "mapsTitlePrefix": "Karta", "ListViewFilterLabel": "Filtrirajte listu", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Normalan tekst", "HeaderH2": "Naslov 2", "HeaderH3": "Naslov 3", diff --git a/src/loc/sv-se.ts b/src/loc/sv-se.ts index 90f41a517..4d0ecb755 100644 --- a/src/loc/sv-se.ts +++ b/src/loc/sv-se.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Sök", "mapsTitlePrefix": "Karta över", "ListViewFilterLabel": "Filtrera listan", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Normal", "HeaderH2": "Rubrik 2", "HeaderH3": "Rubrik 3", diff --git a/src/loc/tr-tr.ts b/src/loc/tr-tr.ts index 5a488b9fb..1ed2f5e75 100644 --- a/src/loc/tr-tr.ts +++ b/src/loc/tr-tr.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Arama", "mapsTitlePrefix": "Harita", "ListViewFilterLabel": "Listeye filtre uygulayın", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Normal metin", "HeaderH2": "Başlık 2", "HeaderH3": "Başlık 3", diff --git a/src/loc/vi-vn.ts b/src/loc/vi-vn.ts index 7cd00393e..a6d05f541 100644 --- a/src/loc/vi-vn.ts +++ b/src/loc/vi-vn.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "Tìm", "mapsTitlePrefix": "Bản đồ", "ListViewFilterLabel": "Lọc danh sách", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "Văn bản bình thường", "HeaderH2": "Nhóm 2", "HeaderH3": "Nhóm 3", diff --git a/src/loc/zh-cn.ts b/src/loc/zh-cn.ts index 60cb860ef..a55f2e9d4 100644 --- a/src/loc/zh-cn.ts +++ b/src/loc/zh-cn.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "搜索", "mapsTitlePrefix": "地图", "ListViewFilterLabel": "筛选列表", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "普通文本", "HeaderH2": "标题 2", "HeaderH3": "标题 3", diff --git a/src/loc/zh-tw.ts b/src/loc/zh-tw.ts index 5f59bf406..67567a3cc 100644 --- a/src/loc/zh-tw.ts +++ b/src/loc/zh-tw.ts @@ -110,6 +110,15 @@ define([], () => { "mapsSearchButtonText": "搜尋", "mapsTitlePrefix": "地圖", "ListViewFilterLabel": "篩選列表", + "DetailsListAriaLabel": "Details list", + "DetailsListHeaderAriaLabel": "List header", + "DetailsListSelectAllRowsAriaLabel": "Select all rows", + "DetailsListSelectionAriaLabel": "Selection", + "DetailsListSelectRowAriaLabel": "Select row {0}", + "DetailsListResizeColumnAriaLabel": "Resize {0} column", + "DetailsListLoading": "Loading", + "DetailsListLoadingMore": "Loading more items", + "DetailsListNoItems": "No items to display", "HeaderNormalText": "普通文字", "HeaderH2": "標題 2", "HeaderH3": "標題 3", diff --git a/src/webparts/controlsTest/ControlsTestWebPart.manifest.json b/src/webparts/controlsTest/ControlsTestWebPart.manifest.json index 2491779a5..4a342bb28 100644 --- a/src/webparts/controlsTest/ControlsTestWebPart.manifest.json +++ b/src/webparts/controlsTest/ControlsTestWebPart.manifest.json @@ -64,6 +64,7 @@ "ListItemPicker": false, "ListPicker": false, "ListView": false, + "DetailsList": false, "LivePersona": false, "LocationPicker": false, "Map": false, diff --git a/src/webparts/controlsTest/IControlsTestWebPartProps.ts b/src/webparts/controlsTest/IControlsTestWebPartProps.ts index 22d9e51ed..d365d8313 100644 --- a/src/webparts/controlsTest/IControlsTestWebPartProps.ts +++ b/src/webparts/controlsTest/IControlsTestWebPartProps.ts @@ -8,7 +8,7 @@ export type ValidControls = "all" | "GroupPicker" | "GridLayout" | "HoverReactionsBar" | "IconPicker" | "IFrameDialog" | "IFramePanel" | "ImagePicker" | "ListItemAttachments" | "ListItemComments" | - "ListItemPicker" | "ListPicker" | "ListToolbar" | "ListView" | "LivePersona" | + "ListItemPicker" | "ListPicker" | "ListToolbar" | "ListView" | "DetailsList" | "LivePersona" | "LocationPicker" | "Map" | "ModernAudio" | "ModernTaxonomyPicker" | "MonacoEditor" | "Pagination" | "PeoplePicker" | "Placeholder" | "Progress" | "ProgressStepsIndicator" | "RichText" | diff --git a/src/webparts/controlsTest/components/ControlsTest.tsx b/src/webparts/controlsTest/components/ControlsTest.tsx index 2b37294c9..343206d83 100644 --- a/src/webparts/controlsTest/components/ControlsTest.tsx +++ b/src/webparts/controlsTest/components/ControlsTest.tsx @@ -249,6 +249,44 @@ const ListToolbar = React.lazy(() => import('../../../controls/ListToolbar').the const ListView = React.lazy(() => import('../../../ListView').then(module => ({ default: module.ListView }))); +interface IDetailsListShowcaseErrorBoundaryProps { + children?: React.ReactNode; +} + +interface IDetailsListShowcaseErrorBoundaryState { + error?: Error; +} + +class DetailsListShowcaseErrorBoundary extends React.Component< + IDetailsListShowcaseErrorBoundaryProps, + IDetailsListShowcaseErrorBoundaryState +> { + public state: IDetailsListShowcaseErrorBoundaryState = {}; + + public componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void { + // Keep the host page alive while preserving the original diagnostic. + console.error('DetailsList showcase failed to render.', error, errorInfo); + this.setState({ error }); + } + + public render(): React.ReactNode { + if (this.state.error) { + return ( +
+ DetailsList showcase could not be rendered. Check the browser console for details. +
+ ); + } + + return this.props.children; + } +} + +const DetailsList = React.lazy(() => + import(/* webpackChunkName: 'details-list-showcase' */ './TestDetailsListControl') + .then(module => ({ default: module.TestDetailsListControl })) +); + const Map = React.lazy(() => import('../../../Map').then(module => ({ default: module.Map }))); const ModernAudio = React.lazy(() => import('../../../ModernAudio').then(module => ({ default: module.ModernAudio }))); @@ -1699,6 +1737,13 @@ export default class ControlsTest extends React.Component } + {controlVisibility.DetailsList && +
+ + + +
+ } {controlVisibility.ChartControl &&
; + +const BASE_SHOWCASE_ITEMS: readonly IBaseDetailsListShowcaseItem[] = [ + { id: 'project-01', name: 'Project charter', category: 'Planning', status: 'Complete', updatedAt: '2026-07-28T09:00:00Z' }, + { id: 'project-02', name: 'Risk register', category: 'Planning', status: 'In progress', updatedAt: '2026-07-30T14:30:00Z' }, + { id: 'project-03', name: 'Design system', category: 'Design', status: 'In review', updatedAt: '2026-08-01T10:15:00Z' }, + { id: 'project-04', name: 'Accessibility audit', category: 'Design', status: 'Complete', updatedAt: '2026-08-02T16:00:00Z' }, + { id: 'project-05', name: 'API contract', category: 'Engineering', status: 'In progress', updatedAt: '2026-08-03T11:45:00Z' }, + { id: 'project-06', name: 'Integration tests', category: 'Engineering', status: 'Not started', updatedAt: '2026-08-04T08:20:00Z' }, + { id: 'project-07', name: 'Release notes', category: 'Launch', status: 'Not started', updatedAt: '2026-08-05T13:10:00Z' }, + { id: 'project-08', name: 'Support handover', category: 'Launch', status: 'In progress', updatedAt: '2026-08-06T15:25:00Z' }, + { id: 'project-09', name: 'User interviews', category: 'Research', status: 'Complete', updatedAt: '2026-08-07T09:40:00Z' }, + { id: 'project-10', name: 'Usage analytics', category: 'Research', status: 'In review', updatedAt: '2026-08-08T12:05:00Z' }, + { id: 'project-11', name: 'Roadmap update', category: 'Planning', status: 'In progress', updatedAt: '2026-08-09T10:00:00Z' }, + { id: 'project-12', name: 'Wireframe refresh', category: 'Design', status: 'Complete', updatedAt: '2026-08-09T16:35:00Z' }, + { id: 'project-13', name: 'Performance budget', category: 'Engineering', status: 'In review', updatedAt: '2026-08-10T09:50:00Z' }, + { id: 'project-14', name: 'Deployment checklist', category: 'Launch', status: 'Not started', updatedAt: '2026-08-10T14:15:00Z' }, + { id: 'project-15', name: 'Feedback synthesis', category: 'Research', status: 'Complete', updatedAt: '2026-08-11T11:30:00Z' }, + { id: 'project-16', name: 'Sprint summary', category: 'Planning', status: 'Complete', updatedAt: '2026-08-11T17:20:00Z' }, + { id: 'project-17', name: 'Component inventory', category: 'Design', status: 'In progress', updatedAt: '2026-08-12T08:45:00Z' }, + { id: 'project-18', name: 'Error handling', category: 'Engineering', status: 'In review', updatedAt: '2026-08-12T12:40:00Z' }, + { id: 'project-19', name: 'Demo script', category: 'Launch', status: 'Complete', updatedAt: '2026-08-12T15:05:00Z' }, + { id: 'project-20', name: 'Satisfaction survey', category: 'Research', status: 'Not started', updatedAt: '2026-08-12T16:55:00Z' }, + { id: 'project-21', name: 'Dependency review', category: 'Engineering', status: 'Complete', updatedAt: '2026-08-13T08:10:00Z' }, + { id: 'project-22', name: 'Launch announcement', category: 'Launch', status: 'In progress', updatedAt: '2026-08-13T09:25:00Z' }, + { id: 'project-23', name: 'Research archive', category: 'Research', status: 'Complete', updatedAt: '2026-08-13T10:45:00Z' }, + { id: 'project-24', name: 'Quarterly goals', category: 'Planning', status: 'In review', updatedAt: '2026-08-13T11:15:00Z' }, +]; + +const SHOWCASE_OWNERS: readonly string[] = ['Maya Patel', 'João Mendes', 'Alex Kim', 'Sofia Rossi', 'Daniel Chen']; +const SHOWCASE_PRIORITIES: readonly WorkItemPriority[] = ['High', 'Medium', 'Low', 'Medium', 'High']; + +const SHOWCASE_ITEMS: readonly IDetailsListShowcaseItem[] = BASE_SHOWCASE_ITEMS.map((item, index) => ({ + ...item, + owner: SHOWCASE_OWNERS[index % SHOWCASE_OWNERS.length], + priority: SHOWCASE_PRIORITIES[index % SHOWCASE_PRIORITIES.length], + dueDate: new Date(Date.UTC(2026, 7, 14 + index)).toISOString(), +})); + +const getSortValue = (item: IDetailsListShowcaseItem, key: SortKey): string => { + return item[key]; +}; + +const getStatusIcon = (status: WorkItemStatus): React.ReactElement => { + switch (status) { + case 'Complete': + return ; + case 'In progress': + return ; + case 'In review': + return ; + default: + return ; + } +}; + +const wait = (duration: number): Promise => { + return new Promise((resolve) => { + window.setTimeout(resolve, duration); + }); +}; + +export const TestDetailsListControl: React.FunctionComponent = () => { + const styles = useShowcaseStyles(); + const [items, setItems] = React.useState(() => ( + SHOWCASE_ITEMS.slice(0, INITIAL_ITEM_COUNT) + )); + const [sortState, setSortState] = React.useState(); + const [collapsedGroups, setCollapsedGroups] = React.useState>(() => new Set()); + const [selectedItems, setSelectedItems] = React.useState([]); + const [isLoadingMore, setIsLoadingMore] = React.useState(false); + const [contextMenuTarget, setContextMenuTarget] = React.useState(); + const [contextMenuItem, setContextMenuItem] = React.useState(); + const [statusMessage, setStatusMessage] = React.useState('Select a work item, use its action buttons, or open the row context menu.'); + + const hasNextPage = React.useMemo(() => { + const loadedIds = new Set(items.map((item) => item.id)); + return SHOWCASE_ITEMS.some((item) => !loadedIds.has(item.id)); + }, [items]); + + const selectedKeys = React.useMemo(() => { + return new Set(selectedItems.map((item) => item.id)); + }, [selectedItems]); + + const sortedItems = React.useMemo(() => { + const nextItems = [...items]; + + if (!sortState) { + return nextItems; + } + + const direction = sortState.descending ? -1 : 1; + return nextItems.sort((left, right) => { + const result = getSortValue(left, sortState.key).localeCompare(getSortValue(right, sortState.key)); + return result === 0 ? left.id.localeCompare(right.id) : direction * result; + }); + }, [items, sortState]); + + const groupedData = React.useMemo(() => { + const itemsByCategory = new Map(); + + sortedItems.forEach((item) => { + const categoryItems = itemsByCategory.get(item.category) || []; + categoryItems.push(item); + itemsByCategory.set(item.category, categoryItems); + }); + + const groupedItems: IDetailsListShowcaseItem[] = []; + const groups: IDetailsListGroup[] = []; + + itemsByCategory.forEach((categoryItems, category) => { + const startIndex = groupedItems.length; + groupedItems.push(...categoryItems); + groups.push({ + key: category, + name: category, + startIndex, + count: categoryItems.length, + isCollapsed: collapsedGroups.has(category), + }); + }); + + return { items: groupedItems, groups }; + }, [collapsedGroups, sortedItems]); + + const handleColumnHeaderClick = React.useCallback( + (_event: React.MouseEvent, column: IColumn): void => { + if (SORT_KEYS.indexOf(column.key as SortKey) < 0) { + return; + } + + const key = column.key as SortKey; + const descending = sortState && sortState.key === key ? !sortState.descending : false; + setSortState({ key, descending }); + setStatusMessage(`Sorted by ${column.name} (${descending ? 'descending' : 'ascending'}).`); + }, + [sortState] + ); + + const handleSelectionChanged = React.useCallback( + (change: IDetailsListSelectionChange): void => { + setSelectedItems(change.selectedItems); + setStatusMessage(`${change.selectedItems.length} row(s) selected.`); + }, + [] + ); + + const handleToggleGroup = React.useCallback( + (group: IDetailsListGroup, isCollapsed: boolean): void => { + setCollapsedGroups((currentGroups) => { + const nextGroups = new Set(currentGroups); + if (isCollapsed) { + nextGroups.add(group.key); + } else { + nextGroups.delete(group.key); + } + return nextGroups; + }); + }, + [] + ); + + const handleLoadMore = React.useCallback(async (): Promise => { + if (isLoadingMore || !hasNextPage) { + return; + } + + setIsLoadingMore(true); + setStatusMessage('Loading more rows...'); + await wait(LOAD_DELAY_MS); + + setItems((currentItems) => { + const loadedIds = new Set(currentItems.map((item) => item.id)); + const nextItems = SHOWCASE_ITEMS + .filter((item) => !loadedIds.has(item.id)) + .slice(0, LOAD_PAGE_SIZE); + return [...currentItems, ...nextItems]; + }); + setIsLoadingMore(false); + setStatusMessage('More rows loaded. Scroll again to continue.'); + }, [hasNextPage, isLoadingMore]); + + const handleDrop = React.useCallback( + ( + draggedItem: IDetailsListShowcaseItem, + targetItem: IDetailsListShowcaseItem, + _targetIndex: number, + _event: React.DragEvent + ): void => { + if (draggedItem.id === targetItem.id) { + return; + } + + setItems((currentItems) => { + const sourceIndex = currentItems.findIndex((item) => item.id === draggedItem.id); + const targetIndex = currentItems.findIndex((item) => item.id === targetItem.id); + if (sourceIndex < 0 || targetIndex < 0) { + return currentItems; + } + + const nextItems = [...currentItems]; + const [movedItem] = nextItems.splice(sourceIndex, 1); + const insertionIndex = targetIndex > sourceIndex ? targetIndex - 1 : targetIndex; + nextItems.splice(insertionIndex, 0, movedItem); + return nextItems; + }); + setSortState(undefined); + setStatusMessage(`Moved ${draggedItem.name} before ${targetItem.name}.`); + }, + [] + ); + + const dragDropEvents = React.useMemo>(() => ({ + canDrag: () => true, + canDrop: (draggedItem, targetItem) => draggedItem.id !== targetItem.id, + onDragStart: (item) => setStatusMessage(`Dragging ${item.name}...`), + onDrop: handleDrop, + }), [handleDrop]); + + const handleComplete = React.useCallback((item: IDetailsListShowcaseItem): void => { + setItems((currentItems) => currentItems.map((currentItem) => ( + currentItem.id === item.id + ? { ...currentItem, status: 'Complete', updatedAt: new Date().toISOString() } + : currentItem + ))); + setStatusMessage(`Marked ${item.name} as complete.`); + }, []); + + const dismissContextMenu = React.useCallback((): void => { + setContextMenuTarget(undefined); + setContextMenuItem(undefined); + }, []); + + const openContextMenu = React.useCallback((item: IDetailsListShowcaseItem, target: HTMLElement): void => { + setContextMenuItem(item); + setContextMenuTarget(target); + }, []); + + const handleContextMenu = React.useCallback( + (item: IDetailsListShowcaseItem, _index: number, event: React.MouseEvent): boolean => { + event.preventDefault(); + openContextMenu(item, event.currentTarget); + return true; + }, + [openContextMenu] + ); + + const handleContextMenuAction = React.useCallback((action: ContextMenuAction): void => { + if (!contextMenuItem) { + return; + } + + if (action === 'complete') { + handleComplete(contextMenuItem); + } else if (action === 'delete') { + setItems((currentItems) => currentItems.filter((item) => item.id !== contextMenuItem.id)); + setSelectedItems((currentItems) => currentItems.filter((item) => item.id !== contextMenuItem.id)); + setStatusMessage(`Deleted ${contextMenuItem.name}.`); + } else { + const duplicatedItem: IDetailsListShowcaseItem = { + ...contextMenuItem, + id: `${contextMenuItem.id}-copy-${Date.now()}`, + name: `${contextMenuItem.name} (copy)`, + }; + setItems((currentItems) => [...currentItems, duplicatedItem]); + setStatusMessage(`Duplicated ${contextMenuItem.name}.`); + } + + dismissContextMenu(); + }, [contextMenuItem, dismissContextMenu, handleComplete]); + + const columnReorderOptions = React.useMemo>(() => ({ + frozenColumnCountFromStart: 1, + frozenColumnCountFromEnd: 1, + onColumnDragStart: (dragStarted) => { + setStatusMessage(dragStarted ? 'Dragging a column. Drop it where it belongs.' : 'Column drag ended.'); + }, + onColumnDrop: ({ draggedColumn, targetColumn }) => { + setStatusMessage(`Moved ${draggedColumn.name} before ${targetColumn.name}.`); + }, + onDragEnd: (location) => { + if (location === ColumnDragEndLocation.header) { + setStatusMessage('Column order updated.'); + } + }, + }), []); + + const handleColumnResize = React.useCallback((column: IColumn, width: number): void => { + setStatusMessage(`Resized ${column.name} to ${Math.round(width)} pixels.`); + }, []); + + const renderRowActions = React.useCallback((item: IDetailsListShowcaseItem): React.ReactNode => ( +
+
+ ), [handleComplete, openContextMenu, styles.actions]); + + const columns = React.useMemo[]>(() => { + const getSortProps = (key: SortKey): Pick, 'isSorted' | 'isSortedDescending'> => ({ + isSorted: sortState && sortState.key === key, + isSortedDescending: sortState && sortState.key === key && sortState.descending, + }); + + return [ + { + key: 'name', + name: 'Work item', + fieldName: 'name', + minWidth: 210, + isResizable: true, + isRowHeader: true, + columnActionsMode: ColumnActionsMode.clickable, + ...getSortProps('name'), + onColumnClick: handleColumnHeaderClick, + onRender: (item) => ( +
+ + + {item.name} +
+ ), + }, + { + key: 'category', + name: 'Category', + fieldName: 'category', + minWidth: 120, + isResizable: true, + isGrouped: true, + columnActionsMode: ColumnActionsMode.clickable, + ...getSortProps('category'), + onColumnClick: handleColumnHeaderClick, + }, + { + key: 'owner', + name: 'Owner', + fieldName: 'owner', + minWidth: 135, + isResizable: true, + columnActionsMode: ColumnActionsMode.clickable, + ...getSortProps('owner'), + onColumnClick: handleColumnHeaderClick, + onRender: (item) => ( +
+ + {item.owner} +
+ ), + }, + { + key: 'priority', + name: 'Priority', + fieldName: 'priority', + minWidth: 90, + isResizable: true, + columnActionsMode: ColumnActionsMode.clickable, + ...getSortProps('priority'), + onColumnClick: handleColumnHeaderClick, + }, + { + key: 'status', + name: 'Status', + fieldName: 'status', + minWidth: 125, + isResizable: true, + columnActionsMode: ColumnActionsMode.clickable, + ...getSortProps('status'), + onColumnClick: handleColumnHeaderClick, + onRender: (item) => ( +
+ {getStatusIcon(item.status)} + {item.status} +
+ ), + }, + { + key: 'dueDate', + name: 'Due', + fieldName: 'dueDate', + minWidth: 105, + isResizable: true, + columnActionsMode: ColumnActionsMode.clickable, + ...getSortProps('dueDate'), + onColumnClick: handleColumnHeaderClick, + onRender: (item) => ( +
+ + {new Date(item.dueDate).toLocaleDateString(undefined, { month: 'short', day: 'numeric' })} +
+ ), + }, + { + key: 'updatedAt', + name: 'Updated', + fieldName: 'updatedAt', + minWidth: 110, + isResizable: true, + columnActionsMode: ColumnActionsMode.clickable, + ...getSortProps('updatedAt'), + onColumnClick: handleColumnHeaderClick, + onRender: (item) => new Date(item.updatedAt).toLocaleDateString(), + }, + { + key: 'actions', + name: 'Actions', + minWidth: 88, + maxWidth: 88, + isIconOnly: true, + ariaLabel: 'Work item actions', + columnActionsMode: ColumnActionsMode.disabled, + onRender: renderRowActions, + }, + ]; + }, [handleColumnHeaderClick, renderRowActions, sortState, styles]); + + return ( + + +
+ DetailsList samples + + Project delivery queue: sort or resize a column, collapse a category, scroll to load more work, drag rows to reprioritise them, drag column headers to personalise the view, or use row actions and the context menu. + + item.id} + setKey="DetailsListShowcase" + height={DETAILS_LIST_HEIGHT} + compact={true} + layoutMode={DetailsListLayoutMode.justified} + constrainMode={ConstrainMode.horizontalConstrained} + selectionMode={DetailsListSelectionMode.multiple} + checkboxVisibility={CheckboxVisibility.always} + selectedKeys={selectedKeys} + onSelectionChanged={handleSelectionChanged} + onToggleGroup={handleToggleGroup} + onItemContextMenu={handleContextMenu} + dragDropEvents={dragDropEvents} + enableVirtualization={true} + overscanCount={4} + enableInfiniteScroll={true} + infiniteScrollThreshold={160} + onLoadMore={handleLoadMore} + hasNextPage={hasNextPage} + isLoadingMore={isLoadingMore} + rowHeight={40} + groupHeaderHeight={32} + ariaLabelForGrid={strings.DetailsListAriaLabel} + loadingMoreMessage={{strings.DetailsListLoadingMore}} + emptyState={{strings.DetailsListNoItems}} + /> + {statusMessage} + {contextMenuTarget && contextMenuItem && ( + { + if (!data.open) { + dismissContextMenu(); + } + }} + > + + + } onClick={() => handleContextMenuAction('complete')}> + Mark complete + + } onClick={() => handleContextMenuAction('duplicate')}> + Duplicate row + + } onClick={() => handleContextMenuAction('delete')}> + Delete row + + + + + )} +
+
+
+ ); +}; + +TestDetailsListControl.displayName = 'TestDetailsListControl'; diff --git a/src/webparts/controlsTest/propertyPane/controls/ControlToggles.tsx b/src/webparts/controlsTest/propertyPane/controls/ControlToggles.tsx index e600c65bc..ea79f7bc7 100644 --- a/src/webparts/controlsTest/propertyPane/controls/ControlToggles.tsx +++ b/src/webparts/controlsTest/propertyPane/controls/ControlToggles.tsx @@ -60,7 +60,7 @@ export class ControlToggles extends React.Component