@mortenbrudvik/waveui 0.13.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +302 -49
  2. package/dist/components/data-display/Avatar.context.cjs.map +1 -1
  3. package/dist/components/data-display/Avatar.context.mjs.map +1 -1
  4. package/dist/components/data-display/List.cjs +1 -1
  5. package/dist/components/data-display/List.cjs.map +1 -1
  6. package/dist/components/data-display/List.mjs +245 -195
  7. package/dist/components/data-display/List.mjs.map +1 -1
  8. package/dist/components/data-display/List.registry.cjs.map +1 -1
  9. package/dist/components/data-display/List.registry.mjs.map +1 -1
  10. package/dist/components/layout/Overflow.cjs +1 -1
  11. package/dist/components/layout/Overflow.cjs.map +1 -1
  12. package/dist/components/layout/Overflow.mjs +240 -192
  13. package/dist/components/layout/Overflow.mjs.map +1 -1
  14. package/dist/components/layout/Overflow.store.cjs +2 -0
  15. package/dist/components/layout/Overflow.store.cjs.map +1 -0
  16. package/dist/components/layout/Overflow.store.mjs +209 -0
  17. package/dist/components/layout/Overflow.store.mjs.map +1 -0
  18. package/dist/components/navigation/Breadcrumb.cjs +1 -1
  19. package/dist/components/navigation/Breadcrumb.cjs.map +1 -1
  20. package/dist/components/navigation/Breadcrumb.mjs +239 -84
  21. package/dist/components/navigation/Breadcrumb.mjs.map +1 -1
  22. package/dist/components/overlays/Dialog.slots.cjs +1 -1
  23. package/dist/components/overlays/Dialog.slots.cjs.map +1 -1
  24. package/dist/components/overlays/Dialog.slots.mjs +19 -15
  25. package/dist/components/overlays/Dialog.slots.mjs.map +1 -1
  26. package/dist/components/overlays/TeachingPopover.cjs +1 -1
  27. package/dist/components/overlays/TeachingPopover.cjs.map +1 -1
  28. package/dist/components/overlays/TeachingPopover.context.cjs +2 -0
  29. package/dist/components/overlays/TeachingPopover.context.cjs.map +1 -0
  30. package/dist/components/overlays/TeachingPopover.context.mjs +51 -0
  31. package/dist/components/overlays/TeachingPopover.context.mjs.map +1 -0
  32. package/dist/components/overlays/TeachingPopover.mjs +15 -185
  33. package/dist/components/overlays/TeachingPopover.mjs.map +1 -1
  34. package/dist/components/overlays/TeachingPopover.parts.cjs +2 -0
  35. package/dist/components/overlays/TeachingPopover.parts.cjs.map +1 -0
  36. package/dist/components/overlays/TeachingPopover.parts.mjs +405 -0
  37. package/dist/components/overlays/TeachingPopover.parts.mjs.map +1 -0
  38. package/dist/components/overlays/TeachingPopover.root.cjs +2 -0
  39. package/dist/components/overlays/TeachingPopover.root.cjs.map +1 -0
  40. package/dist/components/overlays/TeachingPopover.root.mjs +158 -0
  41. package/dist/components/overlays/TeachingPopover.root.mjs.map +1 -0
  42. package/dist/components/overlays/TeachingPopover.stack.cjs +2 -0
  43. package/dist/components/overlays/TeachingPopover.stack.cjs.map +1 -0
  44. package/dist/components/overlays/TeachingPopover.stack.mjs +86 -0
  45. package/dist/components/overlays/TeachingPopover.stack.mjs.map +1 -0
  46. package/dist/components/table/DataGrid.cjs +1 -1
  47. package/dist/components/table/DataGrid.cjs.map +1 -1
  48. package/dist/components/table/DataGrid.mjs +540 -311
  49. package/dist/components/table/DataGrid.mjs.map +1 -1
  50. package/dist/components/table/Table.cjs +1 -1
  51. package/dist/components/table/Table.cjs.map +1 -1
  52. package/dist/components/table/Table.mjs +183 -60
  53. package/dist/components/table/Table.mjs.map +1 -1
  54. package/dist/components/table/Table.shared.cjs +2 -0
  55. package/dist/components/table/Table.shared.cjs.map +1 -0
  56. package/dist/components/table/Table.shared.mjs +65 -0
  57. package/dist/components/table/Table.shared.mjs.map +1 -0
  58. package/dist/index.cjs +1 -1
  59. package/dist/index.d.cts +1755 -162
  60. package/dist/index.d.ts +1755 -162
  61. package/dist/index.mjs +135 -132
  62. package/dist/lib/breadcrumb.cjs +2 -0
  63. package/dist/lib/breadcrumb.cjs.map +1 -0
  64. package/dist/lib/breadcrumb.mjs +26 -0
  65. package/dist/lib/breadcrumb.mjs.map +1 -0
  66. package/dist/lib/classNames.cjs +1 -1
  67. package/dist/lib/classNames.cjs.map +1 -1
  68. package/dist/lib/classNames.mjs +66 -38
  69. package/dist/lib/classNames.mjs.map +1 -1
  70. package/dist/lib/events.cjs +1 -1
  71. package/dist/lib/events.cjs.map +1 -1
  72. package/dist/lib/events.mjs +35 -8
  73. package/dist/lib/events.mjs.map +1 -1
  74. package/dist/lib/icons.cjs +1 -1
  75. package/dist/lib/icons.cjs.map +1 -1
  76. package/dist/lib/icons.mjs +34 -20
  77. package/dist/lib/icons.mjs.map +1 -1
  78. package/dist/lib/table.cjs +2 -0
  79. package/dist/lib/table.cjs.map +1 -0
  80. package/dist/lib/table.mjs +16 -0
  81. package/dist/lib/table.mjs.map +1 -0
  82. package/dist/styles.css +1 -1
  83. package/package.json +1 -1
package/dist/index.d.cts CHANGED
@@ -691,7 +691,12 @@ export declare interface BadgeProps extends React_2.HTMLAttributes<HTMLSpanEleme
691
691
  * A breadcrumb trail: a `<nav aria-label="Breadcrumb">` landmark with an ordered list. Each child
692
692
  * is placed in its own list item (Fragments are opened, so each of their items gets one too); from
693
693
  * the second one on, the item begins with a decorative separator chevron that is mirrored in
694
- * right-to-left layouts.
694
+ * right-to-left layouts (`divider` replaces or hides it).
695
+ *
696
+ * `maxDisplayedItems` collapses the middle of a long trail into a "…" menu button, and
697
+ * `overflow="auto"` collapses it to the room it has instead (a "…" menu button stands in for the
698
+ * hidden middle items); `size` sets the text step and `focusMode="arrow"` makes the trail one Tab
699
+ * stop with arrow-key navigation.
695
700
  *
696
701
  * `Breadcrumb.Item` is also exported as `BreadcrumbItem`: React Server Components import the flat
697
702
  * name, because dotted access needs a client file.
@@ -703,21 +708,26 @@ export declare interface BadgeProps extends React_2.HTMLAttributes<HTMLSpanEleme
703
708
  * </Breadcrumb>
704
709
  */
705
710
  export declare const Breadcrumb: {
706
- ({ children, className, ref, ...rest }: BreadcrumbProps): React_2.JSX.Element;
711
+ ({ children, maxDisplayedItems, overflowIndex, overflow, overflowLabel, size, focusMode, divider, className, onKeyDown, onFocus, ref, ...rest }: BreadcrumbProps): React_2.JSX.Element;
707
712
  displayName: string;
708
713
  } & {
709
714
  Item: typeof BreadcrumbItem;
710
715
  };
711
716
 
712
717
  /**
713
- * Breadcrumb: `root` on the `<nav>`; `list` on its `<ol>`; `listItem` on each `<li>`; `divider`
714
- * on each separator `<svg>`.
718
+ * Breadcrumb: `root` on the `<nav>`; `list` on the trail's list element (its `<ol>`, or with
719
+ * `overflow="auto"` the Overflow's `role="list"` element); `listItem` on each `<li>`; `divider` on
720
+ * each separator (the default chevron `<svg>`, or the `<span>` of a custom `divider`);
721
+ * `overflowButton` on the "…" `<button>` that opens the menu of the collapsed items, with
722
+ * `maxDisplayedItems` and with `overflow="auto"`. With `overflow="auto"` the "…" list item is the
723
+ * Overflow's button wrapper, not an `<li>`, so it carries no `listItem` class.
715
724
  */
716
725
  export declare const breadcrumbClassNames: {
717
726
  readonly root: "wave-breadcrumb";
718
727
  readonly list: "wave-breadcrumb__list";
719
728
  readonly listItem: "wave-breadcrumb__list-item";
720
729
  readonly divider: "wave-breadcrumb__divider";
730
+ readonly overflowButton: "wave-breadcrumb__overflow-button";
721
731
  };
722
732
 
723
733
  /**
@@ -852,6 +862,58 @@ export declare interface BreadcrumbProps extends React_2.HTMLAttributes<HTMLElem
852
862
  * the items of a conditional group (`{isAdmin && <>…</>}`) each get their own list item too.
853
863
  */
854
864
  children: React_2.ReactNode;
865
+ /**
866
+ * The most items the trail shows, the overflow button not counted. A longer trail collapses its
867
+ * middle items, from `overflowIndex`, into a "…" button that opens a menu of them (a link item
868
+ * becomes a `Menu.ItemLink`, an `asChild` element of a component (a router link) a
869
+ * `Menu.ItemLink` rendered by that component with the element's own props, its `as` included,
870
+ * a button item a `Menu.Item`). The first item and the last `current` item are never hidden.
871
+ * Without it the whole trail is shown.
872
+ * A value below 1 means 6, as in `partitionBreadcrumbItems`. Ignored with `overflow="auto"`.
873
+ */
874
+ maxDisplayedItems?: number;
875
+ /**
876
+ * The index of the first collapsed item (with `maxDisplayedItems`). It is at least 1, so the
877
+ * first item stays, and at most `maxDisplayedItems - 1`. Ignored with `overflow="auto"`.
878
+ * @default 1
879
+ */
880
+ overflowIndex?: number;
881
+ /**
882
+ * `'auto'` fits the trail to its room: the middle items that do not fit are hidden, from the
883
+ * start of the trail; the first item and the last `current` item never are. A "…" list item
884
+ * with its own separator then stands just before the first hidden item (so the trail reads
885
+ * "Home › … › Parent › Page"), and its button (`overflowLabel`) opens a menu of the hidden
886
+ * items, in trail order. When even the first and the current item do not fit, the button covers
887
+ * the end of the trail. The room decides alone: `maxDisplayedItems` and `overflowIndex` do not
888
+ * apply. The trail list is then an `Overflow` (a `role="list"` element with the `wave-overflow`
889
+ * class and 4px of padding) that measures with `ResizeObserver`. `'none'` shows the trail as
890
+ * the other props say.
891
+ * @default 'none'
892
+ */
893
+ overflow?: 'none' | 'auto';
894
+ /**
895
+ * Accessible name of the overflow button (with `maxDisplayedItems` or `overflow="auto"`).
896
+ * @default "More items"
897
+ */
898
+ overflowLabel?: string;
899
+ /**
900
+ * Text and divider size.
901
+ * @default 'medium'
902
+ */
903
+ size?: CoreSize;
904
+ /**
905
+ * `'tab'`: every link is a Tab stop. `'arrow'`: the trail is one Tab stop (the last focused link
906
+ * or button, at first the first one) and the arrow keys (mirrored in right-to-left layouts),
907
+ * Home and End move between its links and the overflow button.
908
+ * @default 'tab'
909
+ */
910
+ focusMode?: FocusMode;
911
+ /**
912
+ * The separator between items; a decorative `<span>`. `null` or `undefined` keep the chevron
913
+ * (mirrored in right-to-left layouts); `false`, or content that renders nothing, hides the
914
+ * separators. A custom divider is not mirrored.
915
+ */
916
+ divider?: Slot<'span'>;
855
917
  /** Ref to the `<nav>` element. */
856
918
  ref?: React_2.Ref<HTMLElement>;
857
919
  }
@@ -3039,6 +3101,46 @@ export declare interface CounterBadgeProps extends React_2.HTMLAttributes<HTMLSp
3039
3101
  ref?: React_2.Ref<HTMLSpanElement>;
3040
3102
  }
3041
3103
 
3104
+ /**
3105
+ * Creates a column for DataGrid's `columns`, typed by the grid's items, with `sortable` resolved
3106
+ * (`true` when the column has `compare`, unless `sortable` says otherwise). Returns a new object
3107
+ * with every member of {@link CreateTableColumnOptions}; the options are not changed. The
3108
+ * function is pure and server-safe.
3109
+ *
3110
+ * @example
3111
+ * const columns = [
3112
+ * createTableColumn<Person>({
3113
+ * columnId: 'name',
3114
+ * label: 'Name',
3115
+ * compare: (a, b) => a.name.localeCompare(b.name),
3116
+ * renderCell: (person) => person.name,
3117
+ * }),
3118
+ * ];
3119
+ */
3120
+ export declare function createTableColumn<T>(options: CreateTableColumnOptions<T>): DataGridColumn<T>;
3121
+
3122
+ /** Options of {@link createTableColumn}: a DataGrid column, with `columnId` required. */
3123
+ export declare interface CreateTableColumnOptions<T> {
3124
+ /** The column's id: the header cell's `columnId` and the `columnId` of the grid's sort. */
3125
+ columnId: string;
3126
+ /** The header content, unless `renderHeaderCell` is given. */
3127
+ label?: React_2.ReactNode;
3128
+ /**
3129
+ * Orders two items of the column, as `Array.prototype.sort` does (negative: `a` first). Makes the
3130
+ * column sortable unless `sortable` is `false`.
3131
+ */
3132
+ compare?: (a: T, b: T) => number;
3133
+ /** Renders the column's cell content for one item. Without it, the column's cells are empty. */
3134
+ renderCell?: (item: T) => React_2.ReactNode;
3135
+ /** Renders the header content in place of `label`. */
3136
+ renderHeaderCell?: () => React_2.ReactNode;
3137
+ /**
3138
+ * Whether the header is a sort button.
3139
+ * @default compare !== undefined
3140
+ */
3141
+ sortable?: boolean;
3142
+ }
3143
+
3042
3144
  /**
3043
3145
  * Creates a handle. It touches no DOM, so a module-scope handle is safe during server rendering;
3044
3146
  * a dispatch on the server does nothing (it returns the id), so no toast is carried from one
@@ -3064,49 +3166,71 @@ export declare function createToaster(): ToasterHandle;
3064
3166
  * the visual column, so a grouped header with spanning cells works), Enter/F2 to interact with a
3065
3167
  * cell's widgets and Escape to return to the cell. A composite widget in a cell (a Toolbar,
3066
3168
  * RadioGroup, TabList, …) is entered with Enter/F2 like a text field; it manages its own tab
3067
- * indexes, so it keeps its own Tab stop. Supports sortable columns (controlled sorting:
3068
- * `onSortChange` reports the new sort and the consumer reorders the rows) and single or multiple
3069
- * row selection with a select-all header checkbox.
3169
+ * indexes, so it keeps its own Tab stop. Supports sortable columns (`onSortChange` reports the new
3170
+ * sort; a grid with `items` orders its rows by the sorted column's `compare`, otherwise the consumer
3171
+ * orders them) and single or multiple row selection with a select-all header checkbox.
3172
+ *
3173
+ * Selection is made with the row's control, Space on a cell, and, with `selectOnRowClick`, a
3174
+ * click on the row. `selectionAppearance` picks the fill of a selected row, `subtleSelection`
3175
+ * hides the unchecked controls until their row (or, for select-all, the grid) is hovered or holds
3176
+ * focus, and a row's `selectionCellProps` disables, hides or names its control. The selection
3177
+ * column comes first; a `DataGrid.SelectionCell` places it elsewhere in a row.
3178
+ *
3179
+ * The grid is composed from its parts, or rendered from data: with `items` and typed `columns`
3180
+ * (`DataGridColumn<T>`, see `createTableColumn`) it renders the header, the rows and the cells
3181
+ * itself, and `DataGrid.Body` also takes a render function that returns each item's row. Rows
3182
+ * rendered from `items` take their `rowId` from `getRowId` (by default the item's index).
3070
3183
  *
3071
3184
  * Sub-components are available as `DataGrid.Header`, `DataGrid.HeaderCell`, `DataGrid.Body`,
3072
- * `DataGrid.Row` and `DataGrid.Cell` in client components, and as the flat exports
3073
- * `DataGridHeader`, `DataGridHeaderCell`, `DataGridBody`, `DataGridRow` and `DataGridCell` (the
3074
- * form React Server Components can import).
3185
+ * `DataGrid.Row`, `DataGrid.Cell` and `DataGrid.SelectionCell` in client components, and as the
3186
+ * flat exports `DataGridHeader`, `DataGridHeaderCell`, `DataGridBody`, `DataGridRow`,
3187
+ * `DataGridCell` and `DataGridSelectionCell` (the form React Server Components can import).
3075
3188
  */
3076
- export declare const DataGrid: {
3077
- (props: DataGridProps): React_2.JSX.Element;
3078
- displayName: string;
3079
- } & {
3189
+ export declare const DataGrid: typeof DataGridRoot & {
3080
3190
  Header: {
3081
3191
  ({ children, className, ref, ...rest }: DataGridHeaderProps): React_2.JSX.Element;
3082
3192
  displayName: string;
3083
3193
  };
3084
3194
  HeaderCell: {
3085
- ({ columnId, sortable, children, className, onClick, ref, ...rest }: DataGridHeaderCellProps): React_2.JSX.Element;
3195
+ ({ columnId, sortable, sortIcon, children, className, onClick, ref, ...rest }: DataGridHeaderCellProps): React_2.JSX.Element;
3086
3196
  displayName: string;
3087
3197
  };
3088
3198
  Body: {
3089
- ({ children, className, ref, ...rest }: DataGridBodyProps): React_2.JSX.Element;
3199
+ <T>({ children, className, ref, ...rest }: DataGridBodyProps<T>): React_2.JSX.Element;
3090
3200
  displayName: string;
3091
3201
  };
3092
3202
  Row: {
3093
- ({ rowId, selectionLabel, children, className, onKeyDown, ref, ...rest }: DataGridRowProps): React_2.JSX.Element;
3203
+ ({ rowId: rowIdProp, selectionLabel, selectionCellProps, children, className, onClick, onKeyDown, ref, ...rest }: DataGridRowProps): React_2.JSX.Element;
3094
3204
  displayName: string;
3095
3205
  };
3096
3206
  Cell: {
3097
3207
  ({ children, className, ref, ...rest }: DataGridCellProps): React_2.JSX.Element;
3098
3208
  displayName: string;
3099
3209
  };
3210
+ SelectionCell: {
3211
+ ({ disabled, invisible, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, controlRef, ref, ...rest }: DataGridSelectionCellProps): React_2.JSX.Element | null;
3212
+ displayName: string;
3213
+ };
3100
3214
  };
3101
3215
 
3102
- /** Props of every DataGrid, whatever sort API it uses. */
3103
- export declare interface DataGridBaseProps extends React_2.HTMLAttributes<HTMLTableElement> {
3216
+ /** Props of every DataGrid, whatever sort API it uses. `T` is the type of its `items`. */
3217
+ export declare interface DataGridBaseProps<T = unknown> extends React_2.HTMLAttributes<HTMLTableElement> {
3218
+ /**
3219
+ * The row id of an item: the `rowId` of its row (for selection), for rows rendered from `items`.
3220
+ * A row's own `rowId` wins. Ids must be unique (a duplicate warns in development).
3221
+ * @default the item's index in `items`, as a string
3222
+ */
3223
+ getRowId?: (item: T) => string;
3104
3224
  /**
3105
3225
  * Column definitions. When given and no `DataGrid.Header` child is present, the header row
3106
- * (including the selection column) is rendered from them: `id` becomes the header cell's
3107
- * `columnId`, `label` its content, `sortable` makes it a sort button.
3226
+ * (including the selection column) is rendered from them: `columnId` becomes the header cell's
3227
+ * `columnId`, `renderHeaderCell()` (else `label`) its content, and `sortable` (by default, having
3228
+ * `compare`) makes it a sort button. With `items` and no `DataGrid.Body` child, the body rows are
3229
+ * rendered from them too: one `DataGrid.Cell` per column, filled by `renderCell`. Those rows
3230
+ * render again whenever the array changes, so keep it stable (defined outside the component, or
3231
+ * memoised).
3108
3232
  */
3109
- columns?: readonly DataGridColumn[];
3233
+ columns?: readonly DataGridColumn<T>[];
3110
3234
  /**
3111
3235
  * Row selection mode. `'multiple'` adds a checkbox column with a "Select all rows" header
3112
3236
  * checkbox; `'single'` adds a radio column (its header reads "Selection" to assistive
@@ -3120,6 +3244,33 @@ export declare interface DataGridBaseProps extends React_2.HTMLAttributes<HTMLTa
3120
3244
  * `selectionLabel`.
3121
3245
  */
3122
3246
  labels?: DataGridLabels;
3247
+ /**
3248
+ * Whether a click on a body row toggles its selection in a selectable grid (single mode: selects
3249
+ * the row alone, or clears it). The row's own `onClick` runs first; calling `preventDefault()`
3250
+ * in it keeps the selection. A click never toggles when it lands on an interactive element in
3251
+ * the row (a link, a button, an input, a label, an element with `tabindex` or a widget role, the
3252
+ * selection control included), comes from a popup portaled from the row (a Menu, a Popover), or
3253
+ * ends a text selection in the row (a drag across its text); nor does a click on a header row
3254
+ * or on a row whose selection is disabled (`selectionCellProps.disabled`). Space on a cell
3255
+ * toggles the row either way.
3256
+ * @default false
3257
+ */
3258
+ selectOnRowClick?: boolean;
3259
+ /**
3260
+ * How a selected row is filled: `'brand'` with the selected token, `'neutral'` with the subtle
3261
+ * selected token, `'none'` not at all (the selection control, `aria-selected` and, in forced
3262
+ * colors, the row's outline still show it). Rendered as `data-selection-appearance` on the grid.
3263
+ * @default 'brand'
3264
+ */
3265
+ selectionAppearance?: DataGridSelectionAppearance;
3266
+ /**
3267
+ * Subtle selection controls: a row's control is transparent while the row is not selected, until
3268
+ * the row is hovered or holds focus, and the select-all checkbox while no row is selected, until
3269
+ * the grid is hovered or holds focus. Forced colors and a coarse pointer (touch) always draw
3270
+ * them; they stay focusable and named. Rendered as `data-subtle-selection` on the grid.
3271
+ * @default false
3272
+ */
3273
+ subtleSelection?: boolean;
3123
3274
  /**
3124
3275
  * Controlled selected row ids (`DataGrid.Row` `rowId`). In single mode pass at most one id: with
3125
3276
  * several, only the first one whose row is rendered is selected (a development warning says so).
@@ -3128,12 +3279,13 @@ export declare interface DataGridBaseProps extends React_2.HTMLAttributes<HTMLTa
3128
3279
  /** Initially selected row ids (uncontrolled). In single mode, at most one (see `selectedItems`). */
3129
3280
  defaultSelectedItems?: readonly string[];
3130
3281
  /**
3131
- * Called with the new selected row ids when the selection changes. Ids of rows that are not
3132
- * rendered are left out of the reported selection and of the select-all state, so the next
3133
- * change drops them. Until that change an uncontrolled grid still holds such an id: a row
3134
- * re-added with the same `rowId` before then is shown selected again.
3282
+ * Called with the new selected row ids when the selection changes, then `details` (`{ event }`,
3283
+ * the click or key press behind the change). Ids of rows that are not rendered are left out of
3284
+ * the reported selection and of the select-all state, so the next change drops them. Until that
3285
+ * change an uncontrolled grid still holds such an id: a row re-added with the same `rowId` before
3286
+ * then is shown selected again.
3135
3287
  */
3136
- onSelectedItemsChange?: (selectedItems: string[]) => void;
3288
+ onSelectedItemsChange?: (selectedItems: string[], details?: DataGridSelectedItemsChangeDetails) => void;
3137
3289
  /** @deprecated Use `selectedItems` (an array). A `Set` or an array is accepted. */
3138
3290
  selectedKeys?: ReadonlySet<string> | readonly string[];
3139
3291
  /** @deprecated Use `defaultSelectedItems` (an array). A `Set` or an array is accepted. */
@@ -3148,15 +3300,22 @@ export declare interface DataGridBaseProps extends React_2.HTMLAttributes<HTMLTa
3148
3300
  * without one they are dropped with a development warning. Name the grid with `aria-label`.
3149
3301
  */
3150
3302
  containerProps?: Omit<React_2.ComponentPropsWithRef<'div'>, 'children'>;
3151
- /** DataGrid header, body, and row elements. */
3152
- children: React_2.ReactNode;
3303
+ /**
3304
+ * DataGrid header, body, and row elements. Optional when `items` and `columns` render the grid;
3305
+ * a generated body is placed after the header and before a `<tfoot>` child.
3306
+ */
3307
+ children?: React_2.ReactNode;
3153
3308
  /** Ref to the `<table role="grid">` element. */
3154
3309
  ref?: React_2.Ref<HTMLTableElement>;
3155
3310
  }
3156
3311
 
3157
- /** The grid's `<tbody>`. */
3312
+ /**
3313
+ * The grid's `<tbody>`. Its child can also be a render function, called with each item of the
3314
+ * grid's `items` (and its index there) to render the item's row; without children, a grid with
3315
+ * `items` and `columns` renders the rows from the columns.
3316
+ */
3158
3317
  export declare const DataGridBody: {
3159
- ({ children, className, ref, ...rest }: DataGridBodyProps): React_2.JSX.Element;
3318
+ <T>({ children, className, ref, ...rest }: DataGridBodyProps<T>): React_2.JSX.Element;
3160
3319
  displayName: string;
3161
3320
  };
3162
3321
 
@@ -3165,15 +3324,27 @@ export declare const dataGridBodyClassNames: {
3165
3324
  readonly root: "wave-data-grid-body";
3166
3325
  };
3167
3326
 
3168
- /** Properties for the DataGridBody sub-component. */
3169
- export declare interface DataGridBodyProps extends React_2.HTMLAttributes<HTMLTableSectionElement> {
3170
- /** DataGrid row elements. */
3171
- children: React_2.ReactNode;
3327
+ /** Properties for the DataGridBody sub-component, in a grid whose `items` are of type `T`. */
3328
+ export declare interface DataGridBodyProps<T = unknown> extends Omit<React_2.HTMLAttributes<HTMLTableSectionElement>, 'children'> {
3329
+ /**
3330
+ * The body rows: `DataGrid.Row` elements, or a render function called with each item of the
3331
+ * grid's `items` (in the grid's sort order) and the item's index in `items` (its position there,
3332
+ * whatever the sort), which returns the item's `DataGrid.Row`. The grid keys each returned row
3333
+ * by its row id and gives it that id as `rowId` (from `getRowId`), and renders it again only
3334
+ * when its item, its index or the function change (a sort moves the rows). Type the function
3335
+ * by annotating its item parameter (`(person: Person) => …`) or with `DataGrid.Body<Person>`.
3336
+ * Without children, a grid with `items` and `columns` renders the rows from the columns; empty
3337
+ * children are no rows.
3338
+ */
3339
+ children?: React_2.ReactNode | ((item: T, index: number) => React_2.ReactNode);
3172
3340
  /** Ref to the `<tbody>` element. */
3173
3341
  ref?: React_2.Ref<HTMLTableSectionElement>;
3174
3342
  }
3175
3343
 
3176
- /** A grid cell (`<td>`), focusable through the grid's keyboard navigation. */
3344
+ /**
3345
+ * A grid cell (`<td>`), focusable through the grid's keyboard navigation. It is the positioning
3346
+ * box of a `Table.CellActions` inside it.
3347
+ */
3177
3348
  export declare const DataGridCell: {
3178
3349
  ({ children, className, ref, ...rest }: DataGridCellProps): React_2.JSX.Element;
3179
3350
  displayName: string;
@@ -3198,36 +3369,71 @@ export declare const dataGridClassNames: {
3198
3369
  readonly container: "wave-data-grid__container";
3199
3370
  };
3200
3371
 
3201
- /** Defines a column in the DataGrid. */
3202
- export declare interface DataGridColumn {
3203
- /** Unique identifier for the column (the header cell's `columnId`). */
3204
- id: string;
3205
- /** Display label for the column header. */
3206
- label: string;
3207
- /** Whether the column supports sorting. */
3372
+ /**
3373
+ * Defines a column of the DataGrid, typed by the grid's items (`T`): the header cell it renders
3374
+ * and, with `items`, the cell of each row. `createTableColumn` builds one with `sortable` resolved.
3375
+ * A column with functions (`compare`, `renderCell`, `renderHeaderCell`) cannot be passed from a
3376
+ * Server Component to the DataGrid, since functions are not serializable: define such columns in a
3377
+ * client component.
3378
+ */
3379
+ export declare interface DataGridColumn<T = unknown> {
3380
+ /**
3381
+ * Unique identifier of the column: the `columnId` of its header cell (and of the grid's sort) and
3382
+ * the React key of its cells. Required in practice: a column without it (and without the
3383
+ * deprecated `id`) cannot sort, with a development warning.
3384
+ */
3385
+ columnId?: string;
3386
+ /**
3387
+ * @deprecated Use `columnId`. Read only when `columnId` is not given, with a development
3388
+ * warning.
3389
+ */
3390
+ id?: string;
3391
+ /** The header content (text or any React node), unless `renderHeaderCell` is given. */
3392
+ label: React_2.ReactNode;
3393
+ /**
3394
+ * Orders two items of the column, as for `Array.prototype.sort` (negative: `a` first). A column
3395
+ * with `compare` is sortable unless `sortable` is `false`. While the grid's sort names the column
3396
+ * (its own sort, or a controlled `sort`), a grid with `items` renders its rows in this order: a
3397
+ * stable sort of a copy of `items`, so items that compare equal keep their order in `items`,
3398
+ * in both directions (descending negates `compare`). Without `compare` the grid never reorders
3399
+ * the rows: leave it out when the rows arrive sorted (a server-sorted grid).
3400
+ */
3401
+ compare?: (a: T, b: T) => number;
3402
+ /**
3403
+ * Renders the content of the column's cell for one item (rows rendered from `items`). Without
3404
+ * it, the column's cells are empty.
3405
+ */
3406
+ renderCell?: (item: T) => React_2.ReactNode;
3407
+ /** Renders the header content, in place of `label`. */
3408
+ renderHeaderCell?: () => React_2.ReactNode;
3409
+ /**
3410
+ * Whether the column's header is a sort button (the header cell carries `aria-sort`).
3411
+ * @default compare !== undefined
3412
+ */
3208
3413
  sortable?: boolean;
3209
3414
  }
3210
3415
 
3211
- /** The 0.5 sort API, controlled: `sort` + `onSortChange(sort)`. */
3416
+ /** The 0.5 sort API, controlled: `sort` + `onSortChange(sort, details)`. */
3212
3417
  export declare interface DataGridControlledSortProps extends NoDeprecatedSortProps {
3213
3418
  /** The controlled sort, or `null` for an unsorted grid. */
3214
3419
  sort: DataGridSort | null;
3215
3420
  /** Initial sort while `sort` is not given yet. */
3216
3421
  defaultSort?: DataGridSort | null;
3217
3422
  /**
3218
- * Called with the new sort when a sortable header is activated. Sorting is controlled: the
3219
- * consumer reorders the rows.
3423
+ * Called with the new sort when a sortable header is activated, then `details` (`{ event }`).
3424
+ * With `items`, the grid orders its rows by the sorted column's `compare` (see
3425
+ * `DataGridColumn.compare`), also while `sort` is controlled; otherwise the consumer orders them.
3220
3426
  */
3221
- onSortChange?: (sort: DataGridSort) => void;
3427
+ onSortChange?: (sort: DataGridSort, details?: DataGridSortChangeDetails) => void;
3222
3428
  }
3223
3429
 
3224
3430
  /**
3225
3431
  * The grid's `<thead>`. When the grid is selectable, it prepends the selection column's header
3226
- * cell to each `<tr>` child, also inside a Fragment: the first header row gets the "Select all
3227
- * rows" checkbox (multiple mode) or the "Selection" header (single mode; DataGrid's `labels`
3228
- * localizes both), later rows of a grouped header an empty cell. A header row rendered by another
3229
- * component cannot get it (a development warning says so): use `DataGrid.Row` for such a row,
3230
- * which adds the cell itself.
3432
+ * cell to each `<tr>` child, also inside a Fragment, unless the row holds a
3433
+ * `DataGrid.SelectionCell`: the first header row gets the "Select all rows" checkbox (multiple
3434
+ * mode) or the "Selection" header (single mode; DataGrid's `labels` localizes both), later rows of
3435
+ * a grouped header an empty cell. A header row rendered by another component cannot get it (a
3436
+ * development warning says so): use `DataGrid.Row` for such a row, which adds the cell itself.
3231
3437
  */
3232
3438
  export declare const DataGridHeader: {
3233
3439
  ({ children, className, ref, ...rest }: DataGridHeaderProps): React_2.JSX.Element;
@@ -3236,18 +3442,19 @@ export declare const DataGridHeader: {
3236
3442
 
3237
3443
  /**
3238
3444
  * A column header cell. A `sortable` header (with a `columnId`) renders its content inside a
3239
- * `<button type="button">` that toggles the sort; the `<th>` carries `aria-sort`. A consumer
3240
- * `onClick` (on the `<th>`) runs before the sort, and calling `preventDefault()` in it cancels the
3241
- * sort (also for Enter/Space on the button, which click it).
3445
+ * `<button type="button">` that toggles the sort, followed by the direction glyph (`sortIcon`)
3446
+ * while its column is sorted; the `<th>` carries `aria-sort`. A consumer `onClick` (on the `<th>`)
3447
+ * runs before the sort, and calling `preventDefault()` in it cancels the sort (also for
3448
+ * Enter/Space on the button, which click it).
3242
3449
  */
3243
3450
  export declare const DataGridHeaderCell: {
3244
- ({ columnId, sortable, children, className, onClick, ref, ...rest }: DataGridHeaderCellProps): React_2.JSX.Element;
3451
+ ({ columnId, sortable, sortIcon, children, className, onClick, ref, ...rest }: DataGridHeaderCellProps): React_2.JSX.Element;
3245
3452
  displayName: string;
3246
3453
  };
3247
3454
 
3248
3455
  /**
3249
3456
  * DataGrid.HeaderCell: `root` on the `<th>`; `button` on the sort button; `sortIcon` on its
3250
- * direction `<svg>`.
3457
+ * direction glyph (the default arrow `<svg>`, or the `<span>` of a `sortIcon` slot).
3251
3458
  */
3252
3459
  export declare const dataGridHeaderCellClassNames: {
3253
3460
  readonly root: "wave-data-grid-header-cell";
@@ -3265,6 +3472,16 @@ export declare interface DataGridHeaderCellProps extends React_2.ThHTMLAttribute
3265
3472
  * @default false
3266
3473
  */
3267
3474
  sortable?: boolean;
3475
+ /**
3476
+ * The glyph a sortable header shows after its content while its column is sorted, in place of
3477
+ * the default arrow (up for ascending, down for descending). It is decorative (`aria-hidden`:
3478
+ * `aria-sort` on the header tells the direction) and carries `data-direction` (`ascending` or
3479
+ * `descending`), so one glyph can be turned by a selector on it. `null` and `undefined` keep the
3480
+ * arrow; `false`, or any value that renders nothing, shows no glyph. A `<button>` or `Button`
3481
+ * element (or a slot object whose `as` is one) is not nested in the sort button: its children
3482
+ * become the glyph and its props are dropped, with a development warning.
3483
+ */
3484
+ sortIcon?: Slot<'span'>;
3268
3485
  /** Header cell content. */
3269
3486
  children: React_2.ReactNode;
3270
3487
  /** Ref to the `<th>` element. */
@@ -3285,15 +3502,53 @@ export declare const dataGridHeaderClassNames: {
3285
3502
  export declare interface DataGridHeaderProps extends React_2.HTMLAttributes<HTMLTableSectionElement> {
3286
3503
  /**
3287
3504
  * Header row elements. Each `<tr>` child (also inside a Fragment) gets the selection column's
3288
- * header cell prepended when the grid is selectable; a header row rendered by another component
3289
- * should be a `DataGrid.Row`, which adds the cell itself. With several header rows (a grouped
3290
- * header), only the first one gets the "Select all rows" control; later rows get an empty cell.
3505
+ * header cell prepended when the grid is selectable, unless the row holds a
3506
+ * `DataGrid.SelectionCell` (which then is that cell, where it stands); a header row rendered by
3507
+ * another component should be a `DataGrid.Row`, which adds the cell itself. With several header
3508
+ * rows (a grouped header), only the first one gets the "Select all rows" control; later rows get
3509
+ * an empty cell.
3291
3510
  */
3292
3511
  children: React_2.ReactNode;
3293
3512
  /** Ref to the `<thead>` element. */
3294
3513
  ref?: React_2.Ref<HTMLTableSectionElement>;
3295
3514
  }
3296
3515
 
3516
+ /**
3517
+ * The `items` prop of a DataGrid that renders its rows from data, part of every sort form of
3518
+ * `DataGridProps` but the 0.4 one. `T` is the type of the items.
3519
+ */
3520
+ export declare interface DataGridItemsProps<T = unknown> {
3521
+ /**
3522
+ * The grid's data, one body row per item, in this order unless the sorted column has `compare`
3523
+ * (see `DataGridColumn.compare`). With `columns` and no `DataGrid.Body` child (or one without
3524
+ * children), the grid renders the rows and cells from the columns; a `DataGrid.Body` whose child
3525
+ * is a render function renders the row of each item. Each row's `rowId` comes from `getRowId`.
3526
+ * The grid reads the array and never changes it. With `items`, `onSortChange` receives a
3527
+ * `DataGridSort` object and `details`, never the 0.4 arguments. `items` may not be `undefined`
3528
+ * unless `sort` or `defaultSort` is given; pass `items={data ?? []}` while loading.
3529
+ */
3530
+ items?: readonly T[];
3531
+ }
3532
+
3533
+ /**
3534
+ * The sort props of a grid with `items`: the 0.5 sort API, whether or not `sort` or `defaultSort`
3535
+ * is given (unsorted at first without them). The 0.4 positional `onSortChange` and the deprecated
3536
+ * sort props do not apply to such a grid.
3537
+ */
3538
+ export declare interface DataGridItemsSortProps<T = unknown> extends DataGridItemsProps<T>, NoDeprecatedSortProps {
3539
+ /** The grid's data (see `DataGridItemsProps.items`). */
3540
+ items: readonly T[];
3541
+ /** The controlled sort, or `null` for an unsorted grid; `undefined` leaves the sort to the grid. */
3542
+ sort?: DataGridSort | null;
3543
+ /** The initial sort while `sort` is not given. */
3544
+ defaultSort?: DataGridSort | null;
3545
+ /**
3546
+ * Called with the new sort when a sortable header is activated, then `details` (`{ event }`).
3547
+ * The grid orders its rows by the sorted column's `compare` (see `DataGridColumn.compare`).
3548
+ */
3549
+ onSortChange?: (sort: DataGridSort, details?: DataGridSortChangeDetails) => void;
3550
+ }
3551
+
3297
3552
  /** The built-in text of a DataGrid, for localization (see `DataGridBaseProps.labels`). */
3298
3553
  export declare interface DataGridLabels {
3299
3554
  /** Accessible name of the select-all checkbox in the header (`selectionMode="multiple"`).
@@ -3310,11 +3565,14 @@ export declare interface DataGridLabels {
3310
3565
 
3311
3566
  /**
3312
3567
  * The 0.4 sort API: `onSortChange(columnId, direction)` and the deprecated `sortColumn`/
3313
- * `sortDirection` props. It applies whenever neither `sort` nor `defaultSort` is given. As in 0.4,
3314
- * the column and the direction can be controlled independently: the half that is not controlled is
3315
- * kept internally and follows every sort request (mixed control, warned in development).
3568
+ * `sortDirection` props. It applies whenever none of `items`, `sort` and `defaultSort` is given.
3569
+ * As in 0.4, the column and the direction can be controlled independently: the half that is not
3570
+ * controlled is kept internally and follows every sort request (mixed control, warned in
3571
+ * development).
3316
3572
  */
3317
3573
  export declare interface DataGridLegacySortProps {
3574
+ /** A grid with `items` uses the 0.5 sort API (`DataGridItemsSortProps`). */
3575
+ items?: undefined;
3318
3576
  sort?: undefined;
3319
3577
  defaultSort?: undefined;
3320
3578
  /**
@@ -3332,10 +3590,10 @@ export declare interface DataGridLegacySortProps {
3332
3590
  /** @deprecated Use `defaultSort`. */
3333
3591
  defaultSortDirection?: SortDirection;
3334
3592
  /**
3335
- * Called when a sortable header is activated, with the 0.4 arguments. Pass `sort` or
3336
- * `defaultSort` to receive a `DataGridSort` object instead: `defaultSort={null}` turns the
3337
- * object form on for an initially unsorted grid. A `sort` that is still `undefined` (e.g. while
3338
- * data loads) does not: pass `sort={sort ?? null}`.
3593
+ * Called when a sortable header is activated, with the 0.4 arguments. Pass `items`, `sort` or
3594
+ * `defaultSort` to receive a `DataGridSort` object (and `details`) instead:
3595
+ * `defaultSort={null}` turns the object form on for an initially unsorted grid. A `sort` that is
3596
+ * still `undefined` (e.g. while data loads) does not: pass `sort={sort ?? null}`.
3339
3597
  *
3340
3598
  * @example
3341
3599
  * <DataGrid defaultSort={null} onSortChange={(sort) => setSort(sort)}>…</DataGrid>
@@ -3344,19 +3602,36 @@ export declare interface DataGridLegacySortProps {
3344
3602
  }
3345
3603
 
3346
3604
  /**
3347
- * Properties for the DataGrid component. The sort props form a union: `sort`/`defaultSort` with
3348
- * `onSortChange(sort)` (0.5), or the 0.4 form `onSortChange(columnId, direction)` with the
3349
- * deprecated `sortColumn`/`sortDirection`/`defaultSortColumn`/`defaultSortDirection`. The two
3350
- * cannot be mixed.
3605
+ * Properties for the DataGrid component, whose `items` are of type `T`. The sort props form a
3606
+ * union: `sort`/`defaultSort` with `onSortChange(sort, details)` (0.5, also the form of every grid
3607
+ * with `items`), or the 0.4 form `onSortChange(columnId, direction)` with the deprecated
3608
+ * `sortColumn`/`sortDirection`/`defaultSortColumn`/`defaultSortDirection`, for a grid without
3609
+ * `items`. The two cannot be mixed.
3351
3610
  */
3352
- export declare type DataGridProps = DataGridBaseProps & (DataGridControlledSortProps | DataGridUncontrolledSortProps | DataGridLegacySortProps);
3611
+ export declare type DataGridProps<T = unknown> = DataGridBaseProps<T> & ((DataGridItemsProps<T> & DataGridControlledSortProps) | (DataGridItemsProps<T> & DataGridUncontrolledSortProps) | DataGridItemsSortProps<T> | DataGridLegacySortProps);
3612
+
3613
+ declare function DataGridRoot<T>(props: DataGridBaseProps<T> & DataGridItemsSortProps<T>): React_2.JSX.Element;
3614
+
3615
+ declare function DataGridRoot<T = unknown>(props: DataGridProps<T>): React_2.JSX.Element;
3616
+
3617
+ declare namespace DataGridRoot {
3618
+ var displayName: string;
3619
+ }
3353
3620
 
3354
3621
  /**
3355
3622
  * A grid row. In a selectable grid it starts with a selection cell (checkbox or radio) named
3356
- * after the row's first cell (or `selectionLabel`); Space on one of its cells toggles the row.
3623
+ * after the row's first cell (or `selectionLabel`), unless a `DataGrid.SelectionCell` child is
3624
+ * its selection cell; Space on one of its cells toggles the row, and so does a click on the row
3625
+ * with the grid's `selectOnRowClick`.
3626
+ *
3627
+ * The row is the `group/table-row` group whose hover or focus draws a subtle selection control
3628
+ * (`subtleSelection`) and the `Table.CellActions` of its cells. A group is matched by any
3629
+ * ancestor, so the rows of a grid nested in a cell
3630
+ * share it: hovering the outer row also draws the subtle controls of the nested grid (a limit of
3631
+ * CSS groups). A Tree in a cell keeps its own rows' group.
3357
3632
  */
3358
3633
  export declare const DataGridRow: {
3359
- ({ rowId, selectionLabel, children, className, onKeyDown, ref, ...rest }: DataGridRowProps): React_2.JSX.Element;
3634
+ ({ rowId: rowIdProp, selectionLabel, selectionCellProps, children, className, onClick, onKeyDown, ref, ...rest }: DataGridRowProps): React_2.JSX.Element;
3360
3635
  displayName: string;
3361
3636
  };
3362
3637
 
@@ -3375,22 +3650,119 @@ export declare interface DataGridRowProps extends React_2.HTMLAttributes<HTMLTab
3375
3650
  /**
3376
3651
  * Unique identifier for this row, used for selection (rows that share one are selected together;
3377
3652
  * a duplicate warns in development). A selectable grid renders no selection control (and warns
3378
- * in development) for a row without it.
3653
+ * in development) for a row without it. A row rendered from the grid's `items` (by
3654
+ * `DataGrid.Body`'s render function or from `columns`) defaults to the item's row id
3655
+ * (`getRowId`).
3379
3656
  */
3380
3657
  rowId?: string;
3381
3658
  /**
3382
3659
  * Accessible name of the row's selection control. Defaults to the row's first child that is a
3383
3660
  * `DataGrid.Cell`, `<td>` or `<th>` element (`aria-labelledby`); a cell that another component
3384
3661
  * renders is not seen, so pass `selectionLabel` when the row's first cell is one. Without such a
3385
- * child the control is named "Select row" (with a development warning).
3662
+ * child the control is named "Select row" (with a development warning). The selection cell's
3663
+ * `aria-label` (`selectionCellProps`, or a `DataGrid.SelectionCell` child's) wins over it.
3386
3664
  */
3387
3665
  selectionLabel?: string;
3388
- /** DataGrid cell elements. */
3666
+ /**
3667
+ * Props of the row's selection cell (`disabled`, `invisible`, `className`, `aria-label`): the
3668
+ * cell the row adds first in a selectable grid, or a `DataGrid.SelectionCell` child, whose own
3669
+ * props win (their classes are merged). In a header row they apply to the select-all cell.
3670
+ */
3671
+ selectionCellProps?: DataGridRowSelectionCellProps;
3672
+ /**
3673
+ * DataGrid cell elements. A `DataGrid.SelectionCell` child (also inside a Fragment) is the row's
3674
+ * selection cell, where it stands: the row then adds none.
3675
+ */
3389
3676
  children: React_2.ReactNode;
3390
3677
  /** Ref to the `<tr>` element. */
3391
3678
  ref?: React_2.Ref<HTMLTableRowElement>;
3392
3679
  }
3393
3680
 
3681
+ /**
3682
+ * The props of a row's selection cell (`DataGrid.Row` `selectionCellProps`), the automatic cell or
3683
+ * a `DataGrid.SelectionCell` child (whose own props win).
3684
+ */
3685
+ export declare interface DataGridRowSelectionCellProps {
3686
+ /**
3687
+ * Disables the row's selection control natively. The control is then no focus target of the grid
3688
+ * (the cell takes focus), and neither a row click (`selectOnRowClick`), Space on a cell nor
3689
+ * select-all changes the row's selection: select-all skips it, keeps it as it is, and tells its
3690
+ * state from the other rows. In a header row it disables the select-all checkbox.
3691
+ * @default false
3692
+ */
3693
+ disabled?: boolean;
3694
+ /**
3695
+ * Hides the selection control (it keeps its space and cannot be focused). The row is still
3696
+ * selected by a row click and Space, and tells its state with `aria-selected`.
3697
+ * @default false
3698
+ */
3699
+ invisible?: boolean;
3700
+ /** Class of the selection cell (`<td>`, or the `<th>` of a header row). */
3701
+ className?: string;
3702
+ /**
3703
+ * Accessible name of the selection control, in place of `selectionLabel` and the name taken from
3704
+ * the row's first cell; in a header row, the name of the select-all checkbox.
3705
+ */
3706
+ 'aria-label'?: string;
3707
+ }
3708
+
3709
+ /** Second argument of `onSelectedItemsChange`: the event behind the change. */
3710
+ export declare interface DataGridSelectedItemsChangeDetails {
3711
+ /**
3712
+ * The DOM event behind the change: the click of a selection control (the select-all checkbox
3713
+ * included), or the key press of Space on a row.
3714
+ */
3715
+ event: Event;
3716
+ }
3717
+
3718
+ /**
3719
+ * How a selected row of a DataGrid is filled (`selectionAppearance`): `'brand'` with the selected
3720
+ * token, `'neutral'` with the subtle selected token, `'none'` not at all.
3721
+ */
3722
+ export declare type DataGridSelectionAppearance = 'brand' | 'neutral' | 'none';
3723
+
3724
+ /**
3725
+ * The selection cell of a row, rendered where it stands among the row's cells (the row and the
3726
+ * header then add none of their own). In a header row it is the select-all checkbox (multiple
3727
+ * mode; the "Selection" header text in single mode), the first header row's only, as the
3728
+ * automatic cell; in a body row (a `DataGrid.Row`) the row's checkbox or radio. It takes the
3729
+ * selection cell props of its row (`selectionCellProps`), its own winning. `aria-label`,
3730
+ * `aria-labelledby` and `aria-describedby` go to the control; the other props, `className` and
3731
+ * `ref` to the cell. In a grid without selection it renders nothing (with a development warning).
3732
+ */
3733
+ export declare const DataGridSelectionCell: {
3734
+ ({ disabled, invisible, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, controlRef, ref, ...rest }: DataGridSelectionCellProps): React_2.JSX.Element | null;
3735
+ displayName: string;
3736
+ };
3737
+
3738
+ /**
3739
+ * DataGrid.SelectionCell: `root` on the cell, which also carries the selection cell part of its
3740
+ * row (`dataGridRowClassNames.selectionCell`) or header (`dataGridHeaderClassNames.selectionCell`);
3741
+ * its control carries `dataGridRowClassNames.selectionControl` or
3742
+ * `dataGridHeaderClassNames.selectAllCheckbox`.
3743
+ */
3744
+ export declare const dataGridSelectionCellClassNames: {
3745
+ readonly root: "wave-data-grid-selection-cell";
3746
+ };
3747
+
3748
+ /** Properties for the DataGridSelectionCell sub-component. */
3749
+ export declare interface DataGridSelectionCellProps extends Omit<React_2.TdHTMLAttributes<HTMLTableCellElement>, 'children'>, DataGridRowSelectionCellProps {
3750
+ /**
3751
+ * The cell holds no content of its own: the grid renders the selection control (or, in a
3752
+ * single-mode header row, the hidden "Selection" header text).
3753
+ */
3754
+ children?: never;
3755
+ /**
3756
+ * Accessible name of the control, in place of `aria-label` and the row's `selectionLabel`.
3757
+ * Routed to the control, as `aria-label` and `aria-describedby` are.
3758
+ */
3759
+ 'aria-labelledby'?: string;
3760
+ /** Ref to the selection control (`<input type="checkbox">` or `<input type="radio">`). */
3761
+ controlRef?: React_2.Ref<HTMLInputElement>;
3762
+ /** Ref to the cell element (`<td>`, or the `<th>` of a header row's select-all). */
3763
+ ref?: React_2.Ref<HTMLTableCellElement>;
3764
+ }
3765
+
3394
3766
  /** The sort state of a DataGrid: the sorted column and its direction. */
3395
3767
  export declare interface DataGridSort {
3396
3768
  /** The `columnId` of the sorted column. */
@@ -3399,16 +3771,23 @@ export declare interface DataGridSort {
3399
3771
  direction: SortDirection;
3400
3772
  }
3401
3773
 
3402
- /** The 0.5 sort API, uncontrolled: `defaultSort` (`null` for none) + `onSortChange(sort)`. */
3774
+ /** Second argument of `onSortChange` (the `DataGridSort` form): the event behind the sort. */
3775
+ export declare interface DataGridSortChangeDetails {
3776
+ /** The DOM event behind the sort: the click of the sort button (Enter and Space click it). */
3777
+ event: Event;
3778
+ }
3779
+
3780
+ /** The 0.5 sort API, uncontrolled: `defaultSort` (`null` for none) + `onSortChange(sort, details)`. */
3403
3781
  export declare interface DataGridUncontrolledSortProps extends NoDeprecatedSortProps {
3404
3782
  sort?: undefined;
3405
3783
  /** The initial sort, or `null` for an initially unsorted grid. */
3406
3784
  defaultSort: DataGridSort | null;
3407
3785
  /**
3408
- * Called with the new sort when a sortable header is activated. Sorting is controlled: the
3409
- * consumer reorders the rows.
3786
+ * Called with the new sort when a sortable header is activated, then `details` (`{ event }`).
3787
+ * With `items`, the grid orders its rows by the sorted column's `compare` (see
3788
+ * `DataGridColumn.compare`); otherwise the consumer orders them.
3410
3789
  */
3411
- onSortChange?: (sort: DataGridSort) => void;
3790
+ onSortChange?: (sort: DataGridSort, details?: DataGridSortChangeDetails) => void;
3412
3791
  }
3413
3792
 
3414
3793
  /**
@@ -6492,6 +6871,13 @@ export declare interface InteractionTagSecondaryProps extends React_2.ButtonHTML
6492
6871
  /** Whether both dates are on the same calendar day (time of day ignored); `false` when either is missing. */
6493
6872
  export declare function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean;
6494
6873
 
6874
+ /**
6875
+ * Whether breadcrumb text is longer than `maxLength` characters, so that
6876
+ * {@link truncateBreadcrumbLongName} or {@link truncateBreadcrumbLongTooltip} would cut it. Text of
6877
+ * exactly `maxLength` characters is not truncatable.
6878
+ */
6879
+ export declare function isTruncatableBreadcrumbContent(content: string, maxLength: number): boolean;
6880
+
6495
6881
  /**
6496
6882
  * A text label for a form control (`htmlFor`), on the Fluent type ramp. The optional required
6497
6883
  * indicator is decorative (`aria-hidden`). `Field` renders its own label; use `Label` for custom
@@ -6646,16 +7032,28 @@ export declare type LinkVariant = LinkAppearance;
6646
7032
  * a text-entry widget takes focus itself: Enter/F2 enter the widget, Escape returns to the cell.
6647
7033
  * Clicks and keys that start inside an action, or inside a popup it opens (a Popover, a Menu),
6648
7034
  * never toggle selection.
7035
+ * - **Navigation without selection** (`navigationMode`): `'items'` makes the items of a plain list
7036
+ * one Tab stop (the item that last had focus) with the listbox's arrow keys, Home/End and
7037
+ * typeahead, keeping `role="list"`; `'composite'` renders the grid above from the first render,
7038
+ * for a selectable list too, so the items never remount when actions appear. The items of a
7039
+ * list without selection carry no `aria-selected`. The resolved mode is `data-navigation-mode`.
7040
+ * - **Actions on the item itself** (`List.Item onAction`): clicks and Enter run it, and Space on
7041
+ * an item that cannot be selected; in a selectable item it runs before the selection toggles,
7042
+ * and its `preventDefault()` keeps the selection. `List.Item disabledSelection` keeps an item's
7043
+ * selection as it is while the item stays focusable and in the arrow-key order.
7044
+ * - **Check marks** (`checkmark`, opt-in): a decorative check at the start of every item of a
7045
+ * selectable list, shown while the item is selected; `List.Item checkmark` replaces or hides it.
6649
7046
  * - **Switching semantics remounts the items.** Listbox/list and grid use different elements
6650
7047
  * (`ul`/`li` and `div`), so when a selectable list gains its first item action, loses its last
6651
- * one, or `selectable` changes while items have actions, React remounts the items and their
6652
- * content: state inside them (an inline rename input's draft, an uncontrolled checkbox) is reset.
6653
- * Focus that is on an item or inside it when the list switches moves to the same item (by
6654
- * `value`, else by position; the next item when the focused one was removed), so the switch
6655
- * never drops it to `<body>`. This includes focus inside the last action when that action
6656
- * removes itself (an inline rename input that unmounts on Enter). An action that removes itself
6657
- * while focused without causing a switch drops focus, like any removed element. When the list
6658
- * may switch, keep such state in the parent (or keep an action on at least one item).
7048
+ * one, or `selectable` or `navigationMode` changes the structure, React remounts the items and
7049
+ * their content: state inside them (an inline rename input's draft, an uncontrolled checkbox) is
7050
+ * reset. Focus that is on an item or inside it when the list switches moves to the same item (by
7051
+ * `value`, else by position; the next item when the focused one was removed), or to its first
7052
+ * focusable content when the item is no Tab stop any more, so the switch never drops it to
7053
+ * `<body>`. This includes focus inside the last action when that action removes itself (an
7054
+ * inline rename input that unmounts on Enter). An action that removes itself while focused
7055
+ * without causing a switch drops focus, like any removed element. When the list may switch,
7056
+ * keep such state in the parent, or pin the grid with `navigationMode="composite"`.
6659
7057
  * - Selection: `selectionMode` `'single'` (default) or `'multiple'`; controlled with
6660
7058
  * `selectedItems` (or `selectedItem` in single mode) or uncontrolled with the `default*` props.
6661
7059
  * Values of items that are no longer rendered are dropped from the reported selection.
@@ -6666,13 +7064,19 @@ export declare type LinkVariant = LinkAppearance;
6666
7064
  * <List.Item value="apple">Apple</List.Item>
6667
7065
  * <List.Item value="banana">Banana</List.Item>
6668
7066
  * </List>
7067
+ *
7068
+ * @example
7069
+ * <List navigationMode="items" aria-label="Recent files">
7070
+ * <List.Item value="report" onAction={() => open('report')}>Report</List.Item>
7071
+ * <List.Item value="budget" onAction={() => open('budget')}>Budget</List.Item>
7072
+ * </List>
6669
7073
  */
6670
7074
  export declare const List: {
6671
7075
  <M extends ListSelectionMode = "single">(props: ListProps<M>): React_2.ReactNode;
6672
7076
  displayName: string;
6673
7077
  } & {
6674
7078
  Item: {
6675
- ({ value, action, className, children, onClick, onKeyDown, ref, ...rest }: ListItemProps): React_2.JSX.Element;
7079
+ ({ value, action, onAction, disabledSelection, checkmark, className, children, onClick, onKeyDown, ref, ...rest }: ListItemProps): React_2.JSX.Element;
6676
7080
  displayName: string;
6677
7081
  };
6678
7082
  };
@@ -7170,26 +7574,32 @@ export declare const listClassNames: {
7170
7574
 
7171
7575
  /**
7172
7576
  * An item of a {@link List} (also available as `List.Item`). Renders an `<li>` (`listitem`, or
7173
- * `option` in a selectable list), or a `<div role="row">` in a selectable list with actions. In a
7174
- * selectable list, Enter and Space toggle the selection without calling `onClick`, which receives
7175
- * pointer clicks.
7577
+ * `option` in a selectable list), or a `<div role="row">` in a grid (a selectable list with
7578
+ * actions, or `navigationMode="composite"`). In a selectable list, Enter and Space toggle the
7579
+ * selection without calling `onClick`, which receives pointer clicks; `onAction` runs on clicks
7580
+ * and Enter (and Space where the item cannot be selected), before the selection toggles.
7176
7581
  *
7177
7582
  * Exported under the flat name `ListItem` so React Server Components can import it; `List.Item`
7178
7583
  * (dotted access) needs a client module.
7179
7584
  */
7180
7585
  export declare const ListItem: {
7181
- ({ value, action, className, children, onClick, onKeyDown, ref, ...rest }: ListItemProps): React_2.JSX.Element;
7586
+ ({ value, action, onAction, disabledSelection, checkmark, className, children, onClick, onKeyDown, ref, ...rest }: ListItemProps): React_2.JSX.Element;
7182
7587
  displayName: string;
7183
7588
  };
7184
7589
 
7590
+ /** The event that activated a list item: a click, or Enter or Space on the focused item. */
7591
+ export declare type ListItemActionEvent = React_2.MouseEvent<HTMLElement> | React_2.KeyboardEvent<HTMLElement>;
7592
+
7185
7593
  /**
7186
- * List.Item: `root` on the `<li>` (the `role="row"` element of a list with actions); `content` on
7187
- * the content element; `action` on the action cell.
7594
+ * List.Item: `root` on the `<li>` (the `role="row"` element of a grid list); `content` on the
7595
+ * content element; `action` on the action cell; `checkmark` on the check mark element of an item
7596
+ * of a selectable list (the List's `checkmark`, or the item's own).
7188
7597
  */
7189
7598
  export declare const listItemClassNames: {
7190
7599
  readonly root: "wave-list-item";
7191
7600
  readonly content: "wave-list-item__content";
7192
7601
  readonly action: "wave-list-item__action";
7602
+ readonly checkmark: "wave-list-item__checkmark";
7193
7603
  };
7194
7604
 
7195
7605
  /** Properties for the ListItem component. */
@@ -7208,13 +7618,47 @@ export declare interface ListItemProps extends React_2.HTMLAttributes<HTMLLIElem
7208
7618
  * with the arrow keys, and their focusable elements (also ones added later) get
7209
7619
  * `tabindex="-1"`, except inside a nested composite widget such as a Toolbar, which keeps its own
7210
7620
  * Tab stop. When the first action appears or the last one disappears, the items remount (see
7211
- * {@link List}).
7621
+ * {@link List}), unless the List's `navigationMode="composite"` keeps the grid.
7212
7622
  */
7213
7623
  action?: React_2.ReactNode;
7624
+ /**
7625
+ * Called when the item is activated: a click on it, or Enter on the focused item, and Space on
7626
+ * an item that cannot be selected (in a list without selection, or without a `value`); in a
7627
+ * selectable item Space only toggles the selection. Clicks and keys that start in an action or
7628
+ * in interactive content never run it. It runs after the item's `onClick` (whose
7629
+ * `preventDefault()` skips it) and before the selection toggles: call `event.preventDefault()`
7630
+ * to keep the selection as it is. Fires on every activation. The items of a list that does not
7631
+ * navigate them (`navigationMode` `'none'`, not selectable) cannot be reached with the keyboard:
7632
+ * there it runs on clicks only, and a development warning says so.
7633
+ */
7634
+ onAction?: (event: ListItemActionEvent) => void;
7635
+ /**
7636
+ * In a selectable list: the item's selection cannot be toggled (click, Enter or Space; a
7637
+ * selected item stays selected). The item stays focusable and in the arrow-key order and renders
7638
+ * `data-disabled-selection`. Without `onAction` it is also `aria-disabled` (with `data-disabled`
7639
+ * and `data-disabled-focusable`); with `onAction`, clicks and Enter still run the action, while
7640
+ * Space, the selection key, does nothing. The item's `onClick` runs either way.
7641
+ * @default false
7642
+ */
7643
+ disabledSelection?: boolean;
7644
+ /**
7645
+ * The item's check mark in a selectable list, a decorative `<span>` at the start of the item
7646
+ * shown while it is selected. `null` and `undefined` follow the List's `checkmark` (the default
7647
+ * check, or none); content replaces the glyph, also when the List draws none; `false`, or
7648
+ * content that renders nothing, hides it.
7649
+ */
7650
+ checkmark?: Slot<'span'>;
7214
7651
  /** Ref to the item element: an `<li>`, or a `<div role="row">` in grid mode. */
7215
7652
  ref?: React_2.Ref<HTMLLIElement | HTMLDivElement>;
7216
7653
  }
7217
7654
 
7655
+ /**
7656
+ * How the keyboard reaches the items of a {@link List} (Fluent's `navigationMode`): `'none'`, no
7657
+ * item is a Tab stop; `'items'`, the items are one Tab stop moved with the arrow keys; `'composite'`,
7658
+ * a grid whose rows are moved with Up/Down and whose actions are reached with Right/Left.
7659
+ */
7660
+ export declare type ListNavigationMode = 'none' | 'items' | 'composite';
7661
+
7218
7662
  /**
7219
7663
  * Properties for the List component.
7220
7664
  *
@@ -7250,9 +7694,39 @@ export declare interface ListProps<M extends ListSelectionMode = ListSelectionMo
7250
7694
  defaultSelectedItem?: M extends 'single' ? string | null : never;
7251
7695
  /** Single mode: called with the newly selected value, or `null` when it was deselected. */
7252
7696
  onSelectedItemChange?: M extends 'single' ? (item: string | null) => void : never;
7697
+ /**
7698
+ * How the keyboard reaches the items. Unset, the list picks the mode itself: `'none'` for a plain
7699
+ * list, `'items'` for a selectable one (a listbox) and `'composite'` (a grid) for a selectable
7700
+ * list whose items have actions, which remounts the items when the first action appears or the
7701
+ * last one disappears. An explicit value pins the structure:
7702
+ *
7703
+ * - `'none'`: a plain list; its items are no Tab stops (their actions stay in the Tab order). A
7704
+ * selectable list always navigates its items: there `'none'` is ignored, with a development
7705
+ * warning.
7706
+ * - `'items'`: the items are one Tab stop (the first selected item, else the first item; in a
7707
+ * list without selection the item that last had focus), moved with ArrowUp/ArrowDown (wrapping)
7708
+ * and Home/End, with typeahead for more than 7 items. A plain list keeps `role="list"` and its
7709
+ * items carry no `aria-selected`; their actions stay in the Tab order. A selectable list whose
7710
+ * items have actions acts as `'composite'`, with a development warning.
7711
+ * - `'composite'`: a grid (`role="grid"`, `row`s and `gridcell`s) from the first render, so the
7712
+ * items never remount when actions appear. One Tab stop; Up/Down move between the rows and
7713
+ * Right/Left (mirrored in right-to-left layouts) into and out of their actions, which leave
7714
+ * the Tab order. The rows of a list without selection carry no `aria-selected`.
7715
+ *
7716
+ * The resolved mode is rendered as `data-navigation-mode`. Changing it while mounted can switch
7717
+ * between `ul`/`li` and `div` elements, which remounts the items (see {@link List}).
7718
+ */
7719
+ navigationMode?: ListNavigationMode;
7720
+ /**
7721
+ * Draws a check mark at the start of every item of a selectable list, shown while the item is
7722
+ * selected (decorative: `aria-selected` carries the state). An item's own `checkmark` replaces
7723
+ * or hides it. Renders `data-checkmark` on the list while it draws them.
7724
+ * @default false
7725
+ */
7726
+ checkmark?: boolean;
7253
7727
  /**
7254
7728
  * Ref to the root element: a `<ul>`, or a `<div role="grid">` for a selectable list whose items
7255
- * have actions.
7729
+ * have actions and for `navigationMode="composite"`.
7256
7730
  */
7257
7731
  ref?: React_2.Ref<HTMLUListElement | HTMLDivElement>;
7258
7732
  }
@@ -9359,19 +9833,36 @@ export declare interface OptionProps extends Omit<React_2.LiHTMLAttributes<HTMLL
9359
9833
  export declare type Orientation = 'horizontal' | 'vertical';
9360
9834
 
9361
9835
  /**
9362
- * A single row that hides the items which do not fit and shows an overflow button instead.
9363
- *
9364
- * Wrap each entry in {@link OverflowItem} with a unique `itemId`; the row holds only items (other
9365
- * content is not measured, see `children`). Items are measured while visible, hidden from the end
9366
- * (in DOM order; the first item always stays) and hidden items get `data-overflow-hidden`, an
9367
- * inline `display: none`, `aria-hidden` and `inert`. Reordered items (for example a keyed sort) are
9368
- * re-measured in their new order. `overflowButton(count, hiddenIds)` renders the button after the
9369
- * visible items (its measured width is reserved); components inside it can use
9370
- * {@link useOverflowMenu} to list the hidden items (e.g. in a Menu), and
9371
- * {@link useIsOverflowItemVisible} reports a single item. The button sticks to the inline end of
9372
- * the row, so a first item wider than the room beside it cannot push it out of view: it then covers
9373
- * the end of that item and gets `data-overflow-pinned`, with the `background` token behind it. (In
9374
- * a right-to-left row, WebKit stops the pinned button short of the end, still inside the row.)
9836
+ * A single row (or column) that hides the items which do not fit and shows an overflow button
9837
+ * instead.
9838
+ *
9839
+ * Wrap each entry in {@link OverflowItem} with a unique `itemId`; the row holds only items and
9840
+ * {@link OverflowDivider}s (other content is not measured, see `children`). Items are measured
9841
+ * while visible and hidden while they do not fit: by ascending `priority` (equal priorities from
9842
+ * the end of the DOM order, or from its start with `overflowDirection="start"`), never a `pinned`
9843
+ * item and never below `minimumVisible`. Until an item sets `priority` or `pinned`, the first item
9844
+ * (`end`) or the last one (`start`) always stays, as in 0.13. `orientation="vertical"` lays the
9845
+ * items out in a column and measures heights; the column needs a definite height. The room is the
9846
+ * row's own box, so it must not depend on the items shown: in a container as wide as its content,
9847
+ * such as a Toolbar at its default width, the row narrows as items hide and never gets the room
9848
+ * back to show them again; give the Overflow a width of its own, or put it in a row that takes its
9849
+ * width from its parent and let it fill that row.
9850
+ *
9851
+ * Items with the same `groupId` form a group that is `'visible'`, `'hidden'` or `'overflow'` (some
9852
+ * members hidden): a divider with that `groupId` hides with a hidden group,
9853
+ * {@link useIsOverflowGroupVisible} reads a group and {@link useHasHiddenItems} whether anything
9854
+ * is hidden. `onOverflowChange` reports the hidden `itemId`s and the group visibility when the
9855
+ * hidden items change. Hidden items get `data-overflow-hidden`, an inline `display: none`,
9856
+ * `aria-hidden` and `inert`. Reordered items (for example a keyed sort) are re-measured in their
9857
+ * new order. `overflowButton(count, hiddenIds)` renders the button after the visible items, or
9858
+ * just before the first hidden item with `buttonPosition="before-hidden"` (its measured size is
9859
+ * reserved); components inside it can use {@link useOverflowMenu} to list the
9860
+ * hidden items (e.g. in a Menu), and {@link useIsOverflowItemVisible} reports a single item. In a
9861
+ * horizontal row the button sticks to the inline end, so a first item wider than the room beside
9862
+ * it cannot push it out of view: it then covers the end of that item and gets
9863
+ * `data-overflow-pinned`, with the `background` token behind it (a vertical column sticks it to
9864
+ * the bottom). (In a right-to-left row, WebKit stops the pinned button short of the end, still
9865
+ * inside the row.)
9375
9866
  *
9376
9867
  * The row clips what does not fit. So that the focus indicators of its items are not cut off, it
9377
9868
  * has a 4px padding: the items sit 4px in from its edges, and the row is 8px taller than they are.
@@ -9385,19 +9876,36 @@ export declare type Orientation = 'horizontal' | 'vertical';
9385
9876
  * Works without `ResizeObserver` (jsdom, old browsers): it then re-measures on window resize and
9386
9877
  * when items mount, unmount or move.
9387
9878
  *
9388
- * The item is also `Overflow.Item`. The same component is exported as `OverflowItem`; React Server
9389
- * Components import that flat name (dotted access needs a client file).
9879
+ * The item is also `Overflow.Item` and the divider `Overflow.Divider`. The same components are
9880
+ * exported as `OverflowItem` and `OverflowDivider`; React Server Components import those flat names
9881
+ * (dotted access needs a client file).
9390
9882
  */
9391
9883
  export declare const Overflow: {
9392
- ({ overflowButton, children, className, ref, ...rest }: OverflowProps): React_2.JSX.Element;
9884
+ ({ overflowButton, buttonPosition, overflowDirection, orientation, minimumVisible, hasHiddenItems, onOverflowChange, children, className, ref, ...rest }: OverflowProps): React_2.JSX.Element;
9393
9885
  displayName: string;
9394
9886
  } & {
9395
9887
  Item: {
9396
- ({ itemId, children, className, style, ref, "aria-hidden": ariaHidden, inert, ...rest }: OverflowItemProps): React_2.JSX.Element;
9888
+ ({ itemId, priority, pinned, groupId, asChild, children, className, style, ref, "aria-hidden": ariaHidden, inert, ...rest }: OverflowItemProps): React_2.JSX.Element;
9889
+ displayName: string;
9890
+ };
9891
+ Divider: {
9892
+ ({ groupId, children, className, style, ref, "aria-hidden": ariaHidden, inert, ...rest }: OverflowDividerProps): React_2.JSX.Element;
9397
9893
  displayName: string;
9398
9894
  };
9399
9895
  };
9400
9896
 
9897
+ /** What {@link OverflowProps.onOverflowChange} reports besides the hidden ids. */
9898
+ export declare interface OverflowChangeDetails {
9899
+ /** `itemId`s of the shown items, in DOM order. */
9900
+ visibleItems: string[];
9901
+ /**
9902
+ * The visibility of each item group, by `groupId` (only groups with an item; a record without a
9903
+ * prototype): `'visible'` when every member is shown, `'hidden'` when none is, `'overflow'` for
9904
+ * a mix.
9905
+ */
9906
+ groupVisibility: Record<string, OverflowGroupVisibility>;
9907
+ }
9908
+
9401
9909
  /**
9402
9910
  * Overflow: `root` on the overflow element; `overflowButton` on the element around what
9403
9911
  * `overflowButton` renders.
@@ -9408,52 +9916,186 @@ export declare const overflowClassNames: {
9408
9916
  };
9409
9917
 
9410
9918
  /**
9411
- * One entry of an {@link Overflow}. While it does not fit it stays mounted but is hidden
9412
- * (`data-overflow-hidden` and an inline `display: none` placed after the consumer's own `style`),
9413
- * `aria-hidden` and `inert`. The inline style wins over the consumer's `style.display` and over
9414
- * display utilities in any cascade layer (a prefixed Tailwind app's `tw:flex` included), so a
9415
- * hidden item is never shown while it is counted in "+N". Must be rendered inside `Overflow`.
9919
+ * Which end of the row overflows first: `'end'` hides the last items in DOM order first, `'start'`
9920
+ * the first ones. Equal priorities follow it.
9416
9921
  */
9417
- export declare const OverflowItem: {
9418
- ({ itemId, children, className, style, ref, "aria-hidden": ariaHidden, inert, ...rest }: OverflowItemProps): React_2.JSX.Element;
9922
+ export declare type OverflowDirection = 'end' | 'start';
9923
+
9924
+ /**
9925
+ * A divider between item groups of an {@link Overflow}, drawn by its children (for example a
9926
+ * vertical `Divider` or a `Toolbar.Divider`). It renders a `<div>` that stretches across the row
9927
+ * (to the row's height, or to a vertical column's width) and lays out its child on that axis, so
9928
+ * a child that stretches itself, such as `Toolbar.Divider`, spans the row; an explicitly sized
9929
+ * child is centred in a row and kept at the start of a column. It is measured like an item and
9930
+ * hidden, with `data-overflow-hidden`, an inline `display: none`, `aria-hidden` and `inert`, while
9931
+ * the group `groupId` is `'hidden'` (none of its items is shown). Must be rendered inside
9932
+ * `Overflow`.
9933
+ */
9934
+ export declare const OverflowDivider: {
9935
+ ({ groupId, children, className, style, ref, "aria-hidden": ariaHidden, inert, ...rest }: OverflowDividerProps): React_2.JSX.Element;
9419
9936
  displayName: string;
9420
9937
  };
9421
9938
 
9422
- /** Overflow.Item: `root` on the item element. */
9423
- export declare const overflowItemClassNames: {
9424
- readonly root: "wave-overflow-item";
9939
+ /** Overflow.Divider: `root` on the divider element. */
9940
+ export declare const overflowDividerClassNames: {
9941
+ readonly root: "wave-overflow-divider";
9425
9942
  };
9426
9943
 
9427
- /** Properties for the OverflowItem sub-component. */
9428
- export declare interface OverflowItemProps extends React_2.HTMLAttributes<HTMLDivElement> {
9944
+ /** Properties for the OverflowDivider sub-component. */
9945
+ export declare interface OverflowDividerProps extends React_2.HTMLAttributes<HTMLDivElement> {
9946
+ /**
9947
+ * The group the divider belongs to: it is hidden while that group is `'hidden'` and takes room
9948
+ * in the row otherwise. A group without items counts as visible.
9949
+ */
9950
+ groupId: string;
9951
+ ref?: React_2.Ref<HTMLDivElement>;
9952
+ }
9953
+
9954
+ /**
9955
+ * How much of an item group is shown: `'visible'` (every member), `'hidden'` (none) or `'overflow'`
9956
+ * (some).
9957
+ */
9958
+ export declare type OverflowGroupVisibility = 'visible' | 'hidden' | 'overflow';
9959
+
9960
+ /**
9961
+ * One entry of an {@link Overflow}. `priority` (higher overflows later, default 0) or `pinned`
9962
+ * (never overflows) decide when it hides; setting either on any item makes every item without
9963
+ * `pinned` hidable, the first one included. `groupId` puts it in a group that an
9964
+ * {@link OverflowDivider} and {@link useIsOverflowGroupVisible} follow. While it does not fit it
9965
+ * stays mounted but is hidden (`data-overflow-hidden` and an inline `display: none` placed after
9966
+ * the consumer's own `style`), `aria-hidden` and `inert`. The inline style wins over the
9967
+ * consumer's `style.display` and over display utilities in any cascade layer (a prefixed Tailwind
9968
+ * app's `tw:flex` included), so a hidden item is never shown while it is counted in "+N". With
9969
+ * `asChild` the item renders no wrapper: its props are merged onto its single element child.
9970
+ * Must be rendered inside `Overflow`.
9971
+ */
9972
+ export declare const OverflowItem: {
9973
+ ({ itemId, priority, pinned, groupId, asChild, children, className, style, ref, "aria-hidden": ariaHidden, inert, ...rest }: OverflowItemProps): React_2.JSX.Element;
9974
+ displayName: string;
9975
+ };
9976
+
9977
+ /** The props of an {@link OverflowItem} besides `priority` and `pinned`. */
9978
+ export declare interface OverflowItemBaseProps extends React_2.HTMLAttributes<HTMLDivElement> {
9429
9979
  /**
9430
9980
  * Identifier for tracking this item's overflow visibility, unique within the Overflow (a
9431
9981
  * duplicate warns in development: items that share one are hidden and shown together).
9432
9982
  */
9433
9983
  itemId: string;
9434
- /** Content of the overflow item. */
9984
+ /**
9985
+ * The group the item belongs to. A group is `'visible'`, `'hidden'` or `'overflow'` (some members
9986
+ * hidden); an {@link OverflowDivider} with the same `groupId` hides with a hidden group, and
9987
+ * {@link useIsOverflowGroupVisible} reads it.
9988
+ */
9989
+ groupId?: string;
9990
+ /**
9991
+ * Puts the item's props on its single element child (an `<li>`, a Toolbar button) instead of on
9992
+ * a wrapper `<div>`: handlers and refs are composed with the child's, classes and styles merged,
9993
+ * and the hidden state (`data-overflow-hidden`, `display: none`, `aria-hidden`, `inert`) wins
9994
+ * over the child's own. A child that is not a single element (text, several elements) renders in
9995
+ * the wrapper `<div>` and warns in development.
9996
+ * @default false
9997
+ */
9998
+ asChild?: boolean;
9999
+ /** Content of the overflow item: with `asChild`, the single element that takes its props. */
9435
10000
  children: React_2.ReactNode;
9436
10001
  ref?: React_2.Ref<HTMLDivElement>;
9437
10002
  }
9438
10003
 
10004
+ /** Overflow.Item: `root` on the item element. */
10005
+ export declare const overflowItemClassNames: {
10006
+ readonly root: "wave-overflow-item";
10007
+ };
10008
+
10009
+ /**
10010
+ * An item hides in ascending `priority` (higher overflows later, default 0), or it is `pinned` and
10011
+ * never hides: `priority` or `pinned`, never both.
10012
+ */
10013
+ export declare type OverflowItemPriorityProps = {
10014
+ /**
10015
+ * Items with a lower priority overflow first; equal priorities follow the direction.
10016
+ * @default 0
10017
+ */
10018
+ priority?: number;
10019
+ pinned?: never;
10020
+ } | {
10021
+ /**
10022
+ * The item never overflows. Pinning any item drops the 0.13 protection of the first item for
10023
+ * the whole row; `pinned={false}` alone keeps it.
10024
+ * @default false
10025
+ */
10026
+ pinned?: boolean;
10027
+ priority?: never;
10028
+ };
10029
+
10030
+ /** Properties for the OverflowItem sub-component. */
10031
+ export declare type OverflowItemProps = OverflowItemBaseProps & OverflowItemPriorityProps;
10032
+
9439
10033
  /** Properties for the Overflow component. */
9440
10034
  export declare interface OverflowProps extends React_2.HTMLAttributes<HTMLDivElement> {
9441
10035
  /**
9442
10036
  * Renders the overflow button (for example a "+3" menu trigger) while at least one item is
9443
10037
  * hidden. Receives the number of hidden items and their `itemId`s in DOM order, so the button
9444
10038
  * can open a menu of the hidden items. `hiddenIds` is the button's own array (sorting it in
9445
- * place affects nobody else). Its width is measured and reserved when items overflow.
10039
+ * place affects nobody else). Its size on the row's axis (width, or height for a vertical row)
10040
+ * is measured and reserved when items overflow. In a list row (`role="list"`, with `asChild`
10041
+ * `<li>` items) the button's wrapper is a list item (`role="listitem"`).
9446
10042
  * Components rendered by it can also read the hidden items with {@link useOverflowMenu}.
9447
10043
  */
9448
10044
  overflowButton?: (count: number, hiddenIds: string[]) => React_2.ReactNode;
9449
10045
  /**
9450
- * The {@link OverflowItem}s to lay out in one row. Only items and the overflow button are
9451
- * measured: the container's whole content box is the room for them, so other content placed in
9452
- * the row is not accounted for and could clip items that still count as visible. Keep fixed
9453
- * content outside the Overflow (for example in a surrounding flex row), or wrap it in an
9454
- * `OverflowItem` (the first item is never hidden).
10046
+ * The {@link OverflowItem}s (and {@link OverflowDivider}s) to lay out in one row or column.
10047
+ * Only items, dividers and the overflow button are measured: the container's whole content box
10048
+ * is the room for them, so other content placed in the row is not accounted for and could clip
10049
+ * items that still count as visible. Keep fixed content outside the Overflow (for example in a
10050
+ * surrounding flex row), or wrap it in an `OverflowItem` and pin it with `pinned`.
9455
10051
  */
9456
10052
  children: React_2.ReactNode;
10053
+ /**
10054
+ * Which end of the row overflows first (`start` is the start of the DOM order, so the right side
10055
+ * of a right-to-left row). While no item sets `priority` or `pinned` (`pinned={false}` does not
10056
+ * count) the first item (`end`) or the last one (`start`) is never hidden, as in 0.13; once any
10057
+ * item pins itself or sets a priority, only `pinned` items are protected, the first one included.
10058
+ * @default 'end'
10059
+ */
10060
+ overflowDirection?: OverflowDirection;
10061
+ /**
10062
+ * Where the overflow button goes while items are hidden: `'end'` after every item, sticking to
10063
+ * the end of the axis; `'before-hidden'` just before the first hidden item in DOM order, so it
10064
+ * stands in for the hidden items (a breadcrumb trail), and takes the row's gap as the items do.
10065
+ * With `'before-hidden'` the items must be children of the Overflow (Fragments and arrays are
10066
+ * opened): when the first hidden item is rendered by another component the button stays at the
10067
+ * end, with a development warning. The button moves without remounting. While nothing is
10068
+ * hidden there is no button, except the one `hasHiddenItems` reserves, at the end.
10069
+ * @default 'end'
10070
+ */
10071
+ buttonPosition?: 'end' | 'before-hidden';
10072
+ /**
10073
+ * The axis items are laid out on. `'vertical'` stacks them in a column and measures heights
10074
+ * (Fluent's `overflowAxis`); the column needs a definite height (a `height`, or a flex or grid
10075
+ * cell with one), since it has no room to measure otherwise.
10076
+ * @default 'horizontal'
10077
+ */
10078
+ orientation?: Orientation;
10079
+ /**
10080
+ * The number of items that stay visible however little room there is (pinned items count).
10081
+ * @default 0
10082
+ */
10083
+ minimumVisible?: number;
10084
+ /**
10085
+ * Renders the overflow button before the first measurement (for example in the server HTML) so
10086
+ * the row reserves its room; `overflowButton` then receives `0` and `[]`. It goes away after the
10087
+ * first measurement when every item fits.
10088
+ * @default false
10089
+ */
10090
+ hasHiddenItems?: boolean;
10091
+ /**
10092
+ * Called, from an effect, when the set of hidden items changes (not for the initial, empty set),
10093
+ * with the hidden `itemId`s in DOM order and the {@link OverflowChangeDetails}. Called once per
10094
+ * change in StrictMode, and only for a set that has been rendered. The Overflow always passes
10095
+ * `details`; it is typed optional until 1.0, as the second argument of every callback is, so a
10096
+ * handler of the hidden ids alone fits.
10097
+ */
10098
+ onOverflowChange?: (hiddenItems: string[], details?: OverflowChangeDetails) => void;
9457
10099
  ref?: React_2.Ref<HTMLDivElement>;
9458
10100
  }
9459
10101
 
@@ -9590,6 +10232,49 @@ export declare interface PartitionAvatarGroupItemsResult<T> {
9590
10232
  overflowItems: T[] | undefined;
9591
10233
  }
9592
10234
 
10235
+ /**
10236
+ * Splits a breadcrumb trail into the items shown before a collapse button, the items it hides and
10237
+ * the items shown after it, with the rules of Fluent UI's `partitionBreadcrumbItems`: it hides
10238
+ * `items.length - maxDisplayedItems` items starting at `overflowIndex`. A trail with no more items
10239
+ * than `maxDisplayedItems` is not split: all items are in `startDisplayedItems`, and the other two
10240
+ * lists are absent. The function is pure and server-safe.
10241
+ *
10242
+ * @example
10243
+ * const { startDisplayedItems, overflowItems, endDisplayedItems } = partitionBreadcrumbItems({
10244
+ * items: crumbs,
10245
+ * maxDisplayedItems: 4,
10246
+ * });
10247
+ */
10248
+ export declare function partitionBreadcrumbItems<T>(options: PartitionBreadcrumbItemsOptions<T>): PartitionBreadcrumbItemsResult<T>;
10249
+
10250
+ /** Options of {@link partitionBreadcrumbItems}. */
10251
+ export declare interface PartitionBreadcrumbItemsOptions<T> {
10252
+ /** The trail, in order. Not changed. */
10253
+ items: readonly T[];
10254
+ /**
10255
+ * The most items shown, the collapse button not counted. A missing, zero, negative or non-numeric
10256
+ * value falls back to 6.
10257
+ * @default 6
10258
+ */
10259
+ maxDisplayedItems?: number;
10260
+ /**
10261
+ * The index of the first hidden item. An index at or past `maxDisplayedItems` becomes
10262
+ * `maxDisplayedItems - 1`; a negative index becomes 0.
10263
+ * @default 1
10264
+ */
10265
+ overflowIndex?: number;
10266
+ }
10267
+
10268
+ /** The result of {@link partitionBreadcrumbItems}. */
10269
+ export declare interface PartitionBreadcrumbItemsResult<T> {
10270
+ /** The items before the collapsed ones; the whole trail when nothing is hidden. */
10271
+ startDisplayedItems: T[];
10272
+ /** The hidden items, in order. Absent when the trail fits. */
10273
+ overflowItems?: T[];
10274
+ /** The items after the collapsed ones. Absent when the trail fits. */
10275
+ endDisplayedItems?: T[];
10276
+ }
10277
+
9593
10278
  /**
9594
10279
  * A person's avatar next to their name and up to three more text lines (job title, location,
9595
10280
  * status), with an optional presence badge. The text can sit after, before or below the avatar
@@ -11316,6 +12001,7 @@ export declare type SlotObject<T extends React_2.ElementType = 'span'> = {
11316
12001
  [dataAttribute: `data-${string}`]: unknown;
11317
12002
  } & Omit<React_2.ComponentPropsWithoutRef<T>, 'children' | 'className' | 'style'>;
11318
12003
 
12004
+ /** The direction of a sorted column. */
11319
12005
  export declare type SortDirection = 'ascending' | 'descending';
11320
12006
 
11321
12007
  /**
@@ -12295,10 +12981,17 @@ export declare type SwitchSize = Extract<Size, 'small' | 'medium'>;
12295
12981
  * scrollable wrapper; while it scrolls, the wrapper is a focusable region (named by
12296
12982
  * `containerProps` or the `<caption>`) so keyboard users can scroll it.
12297
12983
  *
12298
- * Sub-components are available as `Table.Header`, `Table.HeaderCell`, `Table.Body`, `Table.Row`
12299
- * and `Table.Cell` in client components, and as the flat exports `TableHeader`,
12300
- * `TableHeaderCell`, `TableBody`, `TableRow` and `TableCell` (the form React Server Components
12301
- * can import). `Table.Head`/`Table.HeadCell` (`TableHead`/`TableHeadCell`) are deprecated aliases.
12984
+ * The table keeps no state: a sortable `Table.HeaderCell` reports its clicks, and a
12985
+ * `Table.SelectionCell` (a native checkbox or radio) its changes, for your state to sort and
12986
+ * select the rows. `Table.CellLayout` lays out a cell's media, text and description, and
12987
+ * `Table.CellActions` shows a cell's actions while its row is hovered or holds focus.
12988
+ *
12989
+ * Sub-components are available as `Table.Header`, `Table.HeaderCell`, `Table.Body`, `Table.Row`,
12990
+ * `Table.Cell`, `Table.SelectionCell`, `Table.CellLayout` and `Table.CellActions` in client
12991
+ * components, and as the flat exports `TableHeader`, `TableHeaderCell`, `TableBody`, `TableRow`,
12992
+ * `TableCell`, `TableSelectionCell`, `TableCellLayout` and `TableCellActions` (the form React
12993
+ * Server Components can import). `Table.Head`/`Table.HeadCell` (`TableHead`/`TableHeadCell`) are
12994
+ * deprecated aliases.
12302
12995
  */
12303
12996
  export declare const Table: {
12304
12997
  ({ striped, containerProps, children, className, ref, ...props }: TableProps): React_2.JSX.Element;
@@ -12309,7 +13002,7 @@ export declare const Table: {
12309
13002
  displayName: string;
12310
13003
  };
12311
13004
  HeaderCell: {
12312
- ({ children, className, ref, ...props }: TableHeaderCellProps): React_2.JSX.Element;
13005
+ ({ sortable, sortDirection, onSortClick, sortIcon, aside, children, className, ref, ...props }: TableHeaderCellProps): React_2.JSX.Element;
12313
13006
  displayName: string;
12314
13007
  };
12315
13008
  /** @deprecated Use `Table.Header`. */
@@ -12334,6 +13027,18 @@ export declare const Table: {
12334
13027
  ({ children, className, ref, ...props }: TableCellProps): React_2.JSX.Element;
12335
13028
  displayName: string;
12336
13029
  };
13030
+ SelectionCell: {
13031
+ ({ type, checked: checkedProp, defaultChecked, onCheckedChange, onChange, name, value, form, disabled, required, subtle, invisible, id, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, "aria-required": ariaRequired, "aria-errormessage": ariaErrorMessage, "aria-details": ariaDetails, autoFocus, tabIndex, onFocus, onBlur, onKeyDown, onKeyUp, controlRef, className, ref, ...rest }: TableSelectionCellProps): React_2.JSX.Element;
13032
+ displayName: string;
13033
+ };
13034
+ CellLayout: {
13035
+ ({ media, description, truncate, appearance, children, className, ref, ...rest }: TableCellLayoutProps): React_2.JSX.Element;
13036
+ displayName: string;
13037
+ };
13038
+ CellActions: {
13039
+ ({ visible, className, ref, ...rest }: TableCellActionsProps): React_2.JSX.Element;
13040
+ displayName: string;
13041
+ };
12337
13042
  };
12338
13043
 
12339
13044
  /** The table's `<tbody>`. */
@@ -12355,17 +13060,100 @@ export declare interface TableBodyProps extends React_2.HTMLAttributes<HTMLTable
12355
13060
  ref?: React_2.Ref<HTMLTableSectionElement>;
12356
13061
  }
12357
13062
 
12358
- /** A data cell (`<td>`). */
13063
+ /** A data cell (`<td>`), the positioning box of a `Table.CellActions` inside it. */
12359
13064
  export declare const TableCell: {
12360
13065
  ({ children, className, ref, ...props }: TableCellProps): React_2.JSX.Element;
12361
13066
  displayName: string;
12362
13067
  };
12363
13068
 
13069
+ /**
13070
+ * Actions of a cell (buttons, a menu button), shown over the end of the cell while its row is
13071
+ * hovered or holds focus, and always in forced colors and on a coarse pointer (touch); `visible`
13072
+ * keeps them shown. They stay in the tab order while hidden, and Tab into them shows them. Place
13073
+ * them in a `Table.Cell` or `DataGrid.Cell`, whose row (`Table.Row`, `DataGrid.Row`) is the group
13074
+ * that shows them. Their opaque background follows the row's (hover, a striped table's stripe, a
13075
+ * DataGrid's selected row); a row with a background of its own needs the same class on its
13076
+ * actions. The element carries `data-visible` while `visible` is set.
13077
+ */
13078
+ export declare const TableCellActions: {
13079
+ ({ visible, className, ref, ...rest }: TableCellActionsProps): React_2.JSX.Element;
13080
+ displayName: string;
13081
+ };
13082
+
13083
+ /** Table.CellActions: `root` on the element that holds the actions. */
13084
+ export declare const tableCellActionsClassNames: {
13085
+ readonly root: "wave-table-cell-actions";
13086
+ };
13087
+
13088
+ /** Properties for the TableCellActions sub-component. */
13089
+ export declare interface TableCellActionsProps extends React_2.HTMLAttributes<HTMLDivElement> {
13090
+ /**
13091
+ * Keeps the actions shown, also while the row is neither hovered nor focused: for example while
13092
+ * a menu opened from one of them is open.
13093
+ * @default false
13094
+ */
13095
+ visible?: boolean;
13096
+ /** The actions: buttons, a menu button. */
13097
+ children?: React_2.ReactNode;
13098
+ /** Ref to the `<div>` that holds the actions. */
13099
+ ref?: React_2.Ref<HTMLDivElement>;
13100
+ }
13101
+
12364
13102
  /** Table.Cell: `root` on the `<td>`. */
12365
13103
  export declare const tableCellClassNames: {
12366
13104
  readonly root: "wave-table-cell";
12367
13105
  };
12368
13106
 
13107
+ /**
13108
+ * Lays out a cell's content: `media` (an icon or an Avatar), then the main text (children) with
13109
+ * an optional `description` under it. `truncate` keeps both lines to one line each with an
13110
+ * ellipsis; `appearance="primary"` draws the main text semibold, for the cell that names the row.
13111
+ */
13112
+ export declare const TableCellLayout: {
13113
+ ({ media, description, truncate, appearance, children, className, ref, ...rest }: TableCellLayoutProps): React_2.JSX.Element;
13114
+ displayName: string;
13115
+ };
13116
+
13117
+ /**
13118
+ * Table.CellLayout: `root` on the layout element; `media` on the media `<span>`; `content` on the
13119
+ * column that holds the text; `main` on the main text; `description` on the description line.
13120
+ */
13121
+ export declare const tableCellLayoutClassNames: {
13122
+ readonly root: "wave-table-cell-layout";
13123
+ readonly media: "wave-table-cell-layout__media";
13124
+ readonly content: "wave-table-cell-layout__content";
13125
+ readonly main: "wave-table-cell-layout__main";
13126
+ readonly description: "wave-table-cell-layout__description";
13127
+ };
13128
+
13129
+ /** Properties for the TableCellLayout sub-component. */
13130
+ export declare interface TableCellLayoutProps extends React_2.HTMLAttributes<HTMLDivElement> {
13131
+ /**
13132
+ * A picture before the text: an icon (drawn at 20px, 24px with the primary appearance) or an
13133
+ * Avatar, which takes a 32px box when it sets no `size` of its own. It is content, not hidden
13134
+ * from assistive technology: make an Avatar beside the person's name decorative.
13135
+ */
13136
+ media?: Slot<'span'>;
13137
+ /** A second line under the main text, in the caption size and the muted color. */
13138
+ description?: Slot<'span'>;
13139
+ /**
13140
+ * Keeps the main text and the description on one line each, ending in an ellipsis where they do
13141
+ * not fit. It takes effect where the column's width is bounded (a width on the column, or a
13142
+ * table layout that does not widen columns to fit their content).
13143
+ * @default false
13144
+ */
13145
+ truncate?: boolean;
13146
+ /**
13147
+ * `'primary'` draws the main text semibold and the media icon larger: the cell that names the
13148
+ * row. Rendered as `data-appearance` while set.
13149
+ */
13150
+ appearance?: 'primary';
13151
+ /** The main text. */
13152
+ children?: React_2.ReactNode;
13153
+ /** Ref to the layout `<div>`. */
13154
+ ref?: React_2.Ref<HTMLDivElement>;
13155
+ }
13156
+
12369
13157
  /** Properties for the TableCell sub-component. */
12370
13158
  export declare interface TableCellProps extends React_2.TdHTMLAttributes<HTMLTableCellElement> {
12371
13159
  /** Cell content. */
@@ -12403,17 +13191,55 @@ export declare const TableHeader: {
12403
13191
 
12404
13192
  /** A column header cell (`<th scope="col">`). */
12405
13193
  export declare const TableHeaderCell: {
12406
- ({ children, className, ref, ...props }: TableHeaderCellProps): React_2.JSX.Element;
13194
+ ({ sortable, sortDirection, onSortClick, sortIcon, aside, children, className, ref, ...props }: TableHeaderCellProps): React_2.JSX.Element;
12407
13195
  displayName: string;
12408
13196
  };
12409
13197
 
12410
- /** Table.HeaderCell (and the deprecated Table.HeadCell): `root` on the `<th>`. */
13198
+ /**
13199
+ * Table.HeaderCell (and the deprecated Table.HeadCell): `root` on the `<th>`; `button` on the sort
13200
+ * button of a sortable header; `sortIcon` on its direction glyph (the default arrow `<svg>`, or the
13201
+ * `<span>` of a `sortIcon` slot); `aside` on the aside `<span>`, outside the button.
13202
+ */
12411
13203
  export declare const tableHeaderCellClassNames: {
12412
13204
  readonly root: "wave-table-header-cell";
13205
+ readonly button: "wave-table-header-cell__button";
13206
+ readonly sortIcon: "wave-table-header-cell__sort-icon";
13207
+ readonly aside: "wave-table-header-cell__aside";
12413
13208
  };
12414
13209
 
12415
13210
  /** Properties for the TableHeaderCell sub-component. */
12416
13211
  export declare interface TableHeaderCellProps extends React_2.ThHTMLAttributes<HTMLTableCellElement> {
13212
+ /**
13213
+ * Makes the column header a sort control: the content is wrapped in a `<button>` that fills the
13214
+ * cell, and the cell carries `aria-sort` (`"none"` while `sortDirection` is not set). The table
13215
+ * does not sort or track the direction; keep it in your state, set `sortDirection` and sort the
13216
+ * rows in `onSortClick`. The table keeps no grid semantics.
13217
+ * @default false
13218
+ */
13219
+ sortable?: boolean;
13220
+ /**
13221
+ * The direction the column is sorted in, shown as `aria-sort` and as the glyph of a sortable
13222
+ * header. Absent means the column is not sorted. Without `sortable` it has no effect.
13223
+ */
13224
+ sortDirection?: SortDirection;
13225
+ /**
13226
+ * Called with the click event when the sort button is activated (click, Enter or Space).
13227
+ * Fluent's `onSortClick`.
13228
+ */
13229
+ onSortClick?: React_2.MouseEventHandler<HTMLButtonElement>;
13230
+ /**
13231
+ * The glyph that shows the direction, only while `sortDirection` is set. It is decorative
13232
+ * (`aria-hidden`) and carries `data-direction`. `null` and `undefined` keep the default arrow
13233
+ * (up for ascending, down for descending); `false` or anything that renders nothing hides it. A
13234
+ * `<button>` or `Button` passed here is not nested: its children become the glyph.
13235
+ */
13236
+ sortIcon?: Slot<'span'>;
13237
+ /**
13238
+ * Content beside the header content, outside the sort button (a filter button, an info
13239
+ * button), so it is not part of the button's name. Nothing renders for content that renders
13240
+ * nothing.
13241
+ */
13242
+ aside?: Slot<'span'>;
12417
13243
  /** Header cell content. */
12418
13244
  children: React_2.ReactNode;
12419
13245
  /** Ref to the `<th>` element. */
@@ -12460,7 +13286,11 @@ export declare interface TableProps extends React_2.HTMLAttributes<HTMLTableElem
12460
13286
  ref?: React_2.Ref<HTMLTableElement>;
12461
13287
  }
12462
13288
 
12463
- /** A table row. Striping comes from the table (`striped`), so rows need no context. */
13289
+ /**
13290
+ * A table row. Striping comes from the table (`striped`), so rows need no context. The row is the
13291
+ * `group/table-row` group whose hover or focus draws the subtle selection controls and the cell
13292
+ * actions inside it (Tree's rows keep their own group).
13293
+ */
12464
13294
  export declare const TableRow: {
12465
13295
  ({ children, className, ref, ...props }: TableRowProps): React_2.JSX.Element;
12466
13296
  displayName: string;
@@ -12479,6 +13309,111 @@ export declare interface TableRowProps extends React_2.HTMLAttributes<HTMLTableR
12479
13309
  ref?: React_2.Ref<HTMLTableRowElement>;
12480
13310
  }
12481
13311
 
13312
+ /**
13313
+ * A selection cell: a `<td>` with a native checkbox or radio (`type`), drawn as the DataGrid's.
13314
+ * The table keeps no selection, so the cell is usually controlled (`checked`, `onCheckedChange`)
13315
+ * from your rows' state; `checked="mixed"` draws a header select-all whose rows are partly
13316
+ * selected. `id`, `aria-label`, `aria-labelledby`, `aria-describedby`, the other ARIA state
13317
+ * props, `autoFocus`, `tabIndex`, the focus, key and change handlers and `name`, `value`, `form`,
13318
+ * `disabled` and `required` go to the control (`controlRef`); `className`, `style`, `data-*`, the
13319
+ * other handlers and `ref` stay on the cell, which carries `data-type`. Name the control with
13320
+ * `aria-label` or `aria-labelledby` (the row's first cell); a development warning reports a
13321
+ * control without a name.
13322
+ */
13323
+ export declare const TableSelectionCell: {
13324
+ ({ type, checked: checkedProp, defaultChecked, onCheckedChange, onChange, name, value, form, disabled, required, subtle, invisible, id, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, "aria-required": ariaRequired, "aria-errormessage": ariaErrorMessage, "aria-details": ariaDetails, autoFocus, tabIndex, onFocus, onBlur, onKeyDown, onKeyUp, controlRef, className, ref, ...rest }: TableSelectionCellProps): React_2.JSX.Element;
13325
+ displayName: string;
13326
+ };
13327
+
13328
+ /** Second argument of `Table.SelectionCell`'s `onCheckedChange`: the event behind the change. */
13329
+ export declare interface TableSelectionCellCheckedChangeDetails {
13330
+ /**
13331
+ * The DOM event behind the change: the click of the control (Space clicks it too), or, for an
13332
+ * uncontrolled radio, the click that checked another radio of its group.
13333
+ */
13334
+ event: Event;
13335
+ }
13336
+
13337
+ /** Table.SelectionCell: `root` on the `<td>`; `control` on its checkbox or radio. */
13338
+ export declare const tableSelectionCellClassNames: {
13339
+ readonly root: "wave-table-selection-cell";
13340
+ readonly control: "wave-table-selection-cell__control";
13341
+ };
13342
+
13343
+ /**
13344
+ * Properties for the TableSelectionCell sub-component. The focus, key and change handlers are the
13345
+ * control's (C-ROUTING), so they replace the cell's.
13346
+ */
13347
+ export declare interface TableSelectionCellProps extends Omit<React_2.TdHTMLAttributes<HTMLTableCellElement>, 'children' | 'defaultChecked' | 'onChange' | 'onFocus' | 'onBlur' | 'onKeyDown' | 'onKeyUp'> {
13348
+ /**
13349
+ * The control: a checkbox (multiple selection, or a select-all in the header) or a radio (single
13350
+ * selection).
13351
+ * @default 'checkbox'
13352
+ */
13353
+ type?: 'checkbox' | 'radio';
13354
+ /**
13355
+ * Controlled checked state. `'mixed'` draws an indeterminate checkbox (a select-all whose rows
13356
+ * are partly selected); a click on it checks it. `'mixed'` is for checkboxes only: on a radio it
13357
+ * has no effect (the radio is drawn unchecked).
13358
+ */
13359
+ checked?: boolean | 'mixed';
13360
+ /**
13361
+ * Initial checked state for uncontrolled usage, also the state a form reset restores.
13362
+ * Uncontrolled radios that share a `name` uncheck each other, as a native radio group does.
13363
+ * @default false
13364
+ */
13365
+ defaultChecked?: boolean | 'mixed';
13366
+ /**
13367
+ * Called with the new checked state when the user checks or unchecks the control (not for no-op
13368
+ * updates), and when a form reset restores a `true` or `false` `defaultChecked`. The second
13369
+ * argument holds the event. The table keeps no selection: update your rows' state here.
13370
+ */
13371
+ onCheckedChange?: (checked: boolean, details?: TableSelectionCellCheckedChangeDetails) => void;
13372
+ /**
13373
+ * The native change event of the control, called before `onCheckedChange`;
13374
+ * `event.preventDefault()` in it cancels the change.
13375
+ */
13376
+ onChange?: React_2.ChangeEventHandler<HTMLInputElement>;
13377
+ /** Form field name of the control. With a name, the control submits `name=value` while checked. */
13378
+ name?: string;
13379
+ /**
13380
+ * Value the control submits while checked.
13381
+ * @default 'on'
13382
+ */
13383
+ value?: string;
13384
+ /** Id of the form the control belongs to, when the table is rendered outside that form. */
13385
+ form?: string;
13386
+ /** Natively disables the control: it cannot be checked or focused. */
13387
+ disabled?: boolean;
13388
+ /** The form must not be submitted while the control is unchecked (native validation). */
13389
+ required?: boolean;
13390
+ /**
13391
+ * Draws an unchecked control only while its row (a `Table.Row`) is hovered or holds focus; its
13392
+ * own keyboard focus, forced colors and a coarse pointer (touch) always draw it. It stays
13393
+ * focusable and named.
13394
+ * @default false
13395
+ */
13396
+ subtle?: boolean;
13397
+ /**
13398
+ * Hides the control and takes it out of the tab order, while the cell keeps its box (a row that
13399
+ * cannot be selected keeps the column aligned).
13400
+ * @default false
13401
+ */
13402
+ invisible?: boolean;
13403
+ /** Focus handler of the control. */
13404
+ onFocus?: React_2.FocusEventHandler<HTMLInputElement>;
13405
+ /** Blur handler of the control. */
13406
+ onBlur?: React_2.FocusEventHandler<HTMLInputElement>;
13407
+ /** Keydown handler of the control. */
13408
+ onKeyDown?: React_2.KeyboardEventHandler<HTMLInputElement>;
13409
+ /** Keyup handler of the control. */
13410
+ onKeyUp?: React_2.KeyboardEventHandler<HTMLInputElement>;
13411
+ /** Ref to the `<input>` element. */
13412
+ controlRef?: React_2.Ref<HTMLInputElement>;
13413
+ /** Ref to the `<td>` element. */
13414
+ ref?: React_2.Ref<HTMLTableCellElement>;
13415
+ }
13416
+
12482
13417
  /**
12483
13418
  * A set of tabs with their panels (WAI-ARIA Tabs pattern): the arrow keys (Left/Right, mirrored
12484
13419
  * in RTL; Up/Down when vertical), Home and End move focus and select (automatic activation); with
@@ -13671,11 +14606,19 @@ export declare type TagSize = Extract<Size, 'extra-small' | 'small' | 'medium'>;
13671
14606
  * A step-by-step onboarding popover (a non-modal `role="dialog"`) with Back/Next (Done on the
13672
14607
  * last step) and Close.
13673
14608
  *
13674
- * - Visibility is controllable: `open`/`defaultOpen` (default `true`)/`onOpenChange`; Close, Done
13675
- * and Escape (anywhere in the document) dismiss it and call `onDismiss`.
14609
+ * - Visibility is controllable: `open`/`defaultOpen` (default `true`, or `false` with a direct
14610
+ * `TeachingPopover.Trigger`)/`onOpenChange`; Close, Done, Escape (anywhere in the document) and
14611
+ * the Trigger dismiss it and call `onDismiss`.
13676
14612
  * - The step is controllable with `activeStep`/`defaultActiveStep`/`onStepChange` and clamped to
13677
- * the available steps. The heading carries a visually hidden “step n of m”, the new step is
13678
- * announced politely, and Back stays focusable (`aria-disabled`) on the first step.
14613
+ * the available steps. An uncontrolled step starts again at `defaultActiveStep` each time the
14614
+ * popover opens, so a tour finished with Done or closed midway starts over (`onStepChange`
14615
+ * reports the move back); a controlled `activeStep` is left as it is. The heading carries a
14616
+ * visually hidden “step n of m”, the new step is announced politely, and Back stays focusable
14617
+ * (`aria-disabled`) on the first step.
14618
+ * - `primaryAction` and `secondaryAction` (on the popover, or on a step, which wins) replace Next/Done
14619
+ * and Back: a label, a Button-like element or a slot object. The consumer's `onClick` runs first,
14620
+ * then the step's normal action unless it called `preventDefault()`. Done calls `onFinish`
14621
+ * (and, in 0.x, `onDismiss`); `footerLayout` stacks the buttons.
13679
14622
  * - The built-in text is English: `labels` localizes Back, Next, Done and the step position, and
13680
14623
  * `closeLabel` the Close button.
13681
14624
  * - Focus moves to the popover when it opens and returns to the element that had it when it
@@ -13695,16 +14638,327 @@ export declare type TagSize = Extract<Size, 'extra-small' | 'small' | 'medium'>;
13695
14638
  * With no control at or before the target, the popover is reached where it is portaled, at the
13696
14639
  * end of the page: Tab from the page's last control and Shift+Tab from outside the page enter
13697
14640
  * it.
14641
+ * - **Parts** (Fluent's composition): `TeachingPopover.Trigger` opens and closes the popover, gets
14642
+ * focus back when it closes and, without a `target`, is what it points at; written directly
14643
+ * inside TeachingPopover (a Fragment is fine), it makes the popover start closed (`defaultOpen`
14644
+ * `false`). `TeachingPopover.Surface` is the surface itself: it takes the `className`, `style`,
14645
+ * `ref` and other element props that the `steps` form takes on TeachingPopover. Inside it,
14646
+ * `TeachingPopover.Header` (the Close button, with an optional caption and `icon`),
14647
+ * `TeachingPopover.Title` (the step title with the hidden step position; it names the popover),
14648
+ * `TeachingPopover.Body` (the step body, after an optional `media`) and
14649
+ * `TeachingPopover.Footer` (the step dots and the buttons) each show their share of the current
14650
+ * step unless given children; a Surface without children shows all four, which is what the
14651
+ * `steps` form renders. Both forms share one state: the steps, the labels, the actions and the
14652
+ * callbacks stay on TeachingPopover. A part outside a TeachingPopover throws in development.
14653
+ * - **Carousel parts**: `TeachingPopover.Carousel` holds the current step's page (the title and
14654
+ * body) and `TeachingPopover.CarouselFooter`, the bottom row with the step buttons:
14655
+ * `initialStepText` turns the first step's Back into a button that dismisses the popover (“Not
14656
+ * now”), `finalStepText` relabels Done, and `layout` (`'offset'` or `'centered'`) places the
14657
+ * indicator. The indicator is the decorative step dots unless you place
14658
+ * `TeachingPopover.CarouselNav` (interactive step buttons, named by `labels.navButton`, each a
14659
+ * Tab stop, the current one with `aria-current="step"`) or `TeachingPopover.CarouselPageCount`
14660
+ * (a visible “2 of 3”, worded by a render function) there. `steps` stays the only source of
14661
+ * the pages, so there is no card part.
14662
+ *
14663
+ * The parts are also exported under flat names (`TeachingPopoverTrigger`,
14664
+ * `TeachingPopoverSurface`, `TeachingPopoverHeader`, `TeachingPopoverTitle`,
14665
+ * `TeachingPopoverBody`, `TeachingPopoverFooter`, `TeachingPopoverCarousel`,
14666
+ * `TeachingPopoverCarouselNav`, `TeachingPopoverCarouselPageCount`,
14667
+ * `TeachingPopoverCarouselFooter`) for React Server Components, which cannot use the dotted form;
14668
+ * dotted access (`TeachingPopover.Trigger`) needs a client file.
14669
+ *
14670
+ * @example
14671
+ * <TeachingPopover steps={steps} onFinish={markTourSeen}>
14672
+ * <TeachingPopover.Trigger>
14673
+ * <Button>Take the tour</Button>
14674
+ * </TeachingPopover.Trigger>
14675
+ * <TeachingPopover.Surface>
14676
+ * <TeachingPopover.Header icon={<LightbulbIcon />}>Tip</TeachingPopover.Header>
14677
+ * <TeachingPopover.Title />
14678
+ * <TeachingPopover.Body media={<img src="/tour/search.png" alt="" />} />
14679
+ * <TeachingPopover.Footer />
14680
+ * </TeachingPopover.Surface>
14681
+ * </TeachingPopover>
14682
+ *
14683
+ * @example
14684
+ * <TeachingPopover steps={steps} onFinish={markTourSeen}>
14685
+ * <TeachingPopover.Surface>
14686
+ * <TeachingPopover.Header>Tip</TeachingPopover.Header>
14687
+ * <TeachingPopover.Carousel>
14688
+ * <TeachingPopover.Title />
14689
+ * <TeachingPopover.Body />
14690
+ * <TeachingPopover.CarouselFooter initialStepText="Not now" finalStepText="Got it">
14691
+ * <TeachingPopover.CarouselNav />
14692
+ * </TeachingPopover.CarouselFooter>
14693
+ * </TeachingPopover.Carousel>
14694
+ * </TeachingPopover.Surface>
14695
+ * </TeachingPopover>
13698
14696
  */
13699
14697
  export declare const TeachingPopover: {
13700
- ({ steps, activeStep: activeStepProp, defaultActiveStep, currentStep, defaultCurrentStep, onStepChange, onDismiss, open: openProp, defaultOpen, onOpenChange, closeLabel, labels, target: targetProp, positioning, side, align, className, style, onKeyDown, ref, ...rest }: TeachingPopoverProps): React_2.JSX.Element | null;
14698
+ ({ steps, activeStep: activeStepProp, defaultActiveStep, currentStep, defaultCurrentStep, onStepChange, onDismiss, onFinish, primaryAction: primaryActionProp, secondaryAction: secondaryActionProp, footerLayout, open: openProp, defaultOpen, onOpenChange, closeLabel, labels, target: targetProp, positioning, side, align, children, id, className, style, onKeyDown, ref, ...rest }: TeachingPopoverProps): JSX.Element;
14699
+ displayName: string;
14700
+ } & {
14701
+ Trigger: {
14702
+ ({ children, asChild, onClick, ref, ...rest }: TeachingPopoverTriggerProps): ReactNode;
14703
+ displayName: string;
14704
+ };
14705
+ Surface: {
14706
+ ({ id, ref, ...rest }: TeachingPopoverSurfaceProps): JSX.Element;
14707
+ displayName: string;
14708
+ };
14709
+ Header: {
14710
+ ({ icon, dismissButton, className, children, ref, ...rest }: TeachingPopoverHeaderProps): JSX.Element | null;
14711
+ displayName: string;
14712
+ };
14713
+ Title: PolymorphicComponent<"h3", TeachingPopoverTitleOwnProps>;
14714
+ Body: {
14715
+ ({ media, className, children, ref, ...rest }: TeachingPopoverBodyProps): JSX.Element | null;
14716
+ displayName: string;
14717
+ };
14718
+ Footer: {
14719
+ ({ className, children, ref, ...rest }: TeachingPopoverFooterProps): JSX.Element | null;
14720
+ displayName: string;
14721
+ };
14722
+ Carousel: {
14723
+ ({ className, children, ref, ...rest }: TeachingPopoverCarouselProps): JSX.Element | null;
14724
+ displayName: string;
14725
+ };
14726
+ CarouselNav: {
14727
+ ({ className, ref, ...rest }: TeachingPopoverCarouselNavProps): JSX.Element | null;
14728
+ displayName: string;
14729
+ };
14730
+ CarouselPageCount: {
14731
+ ({ className, children, ref, ...rest }: TeachingPopoverCarouselPageCountProps): JSX.Element | null;
14732
+ displayName: string;
14733
+ };
14734
+ CarouselFooter: {
14735
+ ({ layout, initialStepText, finalStepText, className, children, ref, ...rest }: TeachingPopoverCarouselFooterProps): JSX.Element | null;
14736
+ displayName: string;
14737
+ };
14738
+ };
14739
+
14740
+ /**
14741
+ * A footer action of a TeachingPopover (`primaryAction`, `secondaryAction`): the label content, or
14742
+ * a Button-like slot (a `Button`, `<button>` or `<a>` element, or a slot object such as
14743
+ * `{ as: 'a', href, children }`; `as` changes the element, which stays a Wave Button).
14744
+ *
14745
+ * The consumer's `onClick` runs first; then the step's normal action runs (Next or Done for the
14746
+ * primary action, Back for the secondary one) unless the handler called `event.preventDefault()`.
14747
+ */
14748
+ export declare type TeachingPopoverAction = React_2.ReactNode | (SlotObject<'button'> & Pick<React_2.AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'target' | 'rel' | 'download'>);
14749
+
14750
+ /**
14751
+ * The step body (Fluent's `TeachingPopoverBody`): the current step's `body`, or your children,
14752
+ * after an optional `media` element.
14753
+ *
14754
+ * Also exported as `TeachingPopoverBody` for React Server Components, which cannot use the
14755
+ * dotted `TeachingPopover.Body` (that needs a client file).
14756
+ */
14757
+ export declare const TeachingPopoverBody: {
14758
+ ({ media, className, children, ref, ...rest }: TeachingPopoverBodyProps): React_2.JSX.Element | null;
14759
+ displayName: string;
14760
+ };
14761
+
14762
+ /**
14763
+ * TeachingPopover.Body: `root` on the body element (also the one the `steps` form renders), which
14764
+ * also carries TeachingPopover's `body`; `media` on the element of its `media` slot.
14765
+ */
14766
+ export declare const teachingPopoverBodyClassNames: {
14767
+ readonly root: "wave-teaching-popover-body";
14768
+ readonly media: "wave-teaching-popover-body__media";
14769
+ };
14770
+
14771
+ /** Properties for the TeachingPopoverBody sub-component. */
14772
+ export declare interface TeachingPopoverBodyProps extends React_2.HTMLAttributes<HTMLDivElement> {
14773
+ /**
14774
+ * The body content: the current step's `body` without children (or with children that render
14775
+ * nothing).
14776
+ */
14777
+ children?: React_2.ReactNode;
14778
+ /**
14779
+ * Media above the content, such as a picture or a short video of the feature, inside a `<span>`
14780
+ * (`media={<img src="…" alt="…" />}`; a slot object sets the span's own attributes). It is
14781
+ * content, not decoration: give a picture its `alt` (`alt=""` when the text says it all). A
14782
+ * value that renders nothing renders no element.
14783
+ */
14784
+ media?: Slot<'span'>;
14785
+ /** Ref to the body element. */
14786
+ ref?: React_2.Ref<HTMLDivElement>;
14787
+ }
14788
+
14789
+ /**
14790
+ * The tour as a carousel (Fluent's `TeachingPopoverCarousel`): it holds the current step's page
14791
+ * and the carousel footer. The steps stay on TeachingPopover (its `steps` are the pages, so there
14792
+ * is no card part), and so do the step state and the callbacks: the carousel parts read them
14793
+ * wherever they are in the popover. Without children it shows the step title and body and a
14794
+ * `TeachingPopover.CarouselFooter`.
14795
+ *
14796
+ * Also exported as `TeachingPopoverCarousel` for React Server Components, which cannot use the
14797
+ * dotted `TeachingPopover.Carousel` (that needs a client file).
14798
+ */
14799
+ export declare const TeachingPopoverCarousel: {
14800
+ ({ className, children, ref, ...rest }: TeachingPopoverCarouselProps): React_2.JSX.Element | null;
14801
+ displayName: string;
14802
+ };
14803
+
14804
+ /**
14805
+ * TeachingPopover.Carousel: `root` on the element that holds the step content and the carousel
14806
+ * footer.
14807
+ */
14808
+ export declare const teachingPopoverCarouselClassNames: {
14809
+ readonly root: "wave-teaching-popover-carousel";
14810
+ };
14811
+
14812
+ /**
14813
+ * The carousel's bottom row (Fluent's `TeachingPopoverCarouselFooter`): an indicator (the
14814
+ * decorative step dots, or your children) and the buttons of the current step, as in
14815
+ * `TeachingPopover.Footer`: Back and Next (Done on the last step), or the `secondaryAction` and
14816
+ * `primaryAction` that replace them. `initialStepText` turns the first step's Back into a button
14817
+ * that dismisses the popover (“Not now”), `finalStepText` relabels Done, and `layout` places the
14818
+ * indicator; the footer wraps instead of letting the indicator and the buttons overlap. The steps,
14819
+ * the actions and the callbacks stay on TeachingPopover.
14820
+ *
14821
+ * Also exported as `TeachingPopoverCarouselFooter` for React Server Components, which cannot use
14822
+ * the dotted `TeachingPopover.CarouselFooter` (that needs a client file).
14823
+ */
14824
+ export declare const TeachingPopoverCarouselFooter: {
14825
+ ({ layout, initialStepText, finalStepText, className, children, ref, ...rest }: TeachingPopoverCarouselFooterProps): React_2.JSX.Element | null;
14826
+ displayName: string;
14827
+ };
14828
+
14829
+ /**
14830
+ * TeachingPopover.CarouselFooter: `root` on the footer element, which also carries
14831
+ * TeachingPopover's `footer`. Its buttons carry TeachingPopover's button classes, and its
14832
+ * decorative step dots TeachingPopover's `dot`.
14833
+ */
14834
+ export declare const teachingPopoverCarouselFooterClassNames: {
14835
+ readonly root: "wave-teaching-popover-carousel-footer";
14836
+ };
14837
+
14838
+ /** Properties for the TeachingPopoverCarouselFooter sub-component. */
14839
+ export declare interface TeachingPopoverCarouselFooterProps extends React_2.HTMLAttributes<HTMLDivElement> {
14840
+ /**
14841
+ * Where the indicator sits: `'offset'` puts it at the start and the buttons together at the
14842
+ * end, as `TeachingPopover.Footer` does, and the buttons wrap to a row of their own (at the end)
14843
+ * when both do not fit in one row; `'centered'` puts it between the secondary button at the
14844
+ * start and the primary button at the end, in the middle of the footer whatever the buttons'
14845
+ * widths (also without a secondary button), and when that row does not fit, the indicator takes
14846
+ * a row of its own above the buttons and the footer gets `data-stacked`. While stacked, the
14847
+ * visual order differs from the Tab order, which stays the secondary button, the indicator's
14848
+ * step buttons, then the primary button. The indicator never shrinks below its content.
14849
+ * Rendered as `data-carousel-layout`. (Fluent's default is `'centered'`; WaveUI keeps its own
14850
+ * footer's arrangement.) TeachingPopover's `footerLayout` applies to `TeachingPopover.Footer`
14851
+ * only.
14852
+ * @default 'offset'
14853
+ */
14854
+ layout?: 'offset' | 'centered';
14855
+ /**
14856
+ * The text of the first step's secondary button (“Not now”). Given, that button is enabled and
14857
+ * dismisses the popover as Close does (`onOpenChange(false)`, then `onDismiss`; not
14858
+ * `onFinish`), also on a single step. Without it the first step keeps Back, focusable and
14859
+ * `aria-disabled`, and a single step has none. A `secondaryAction` replaces the button.
14860
+ */
14861
+ initialStepText?: string;
14862
+ /**
14863
+ * The text of the primary button on the last step (“Got it”), which finishes the tour as Done
14864
+ * does. A `primaryAction` replaces the button.
14865
+ * @default TeachingPopover's `labels.done` ('Done')
14866
+ */
14867
+ finalStepText?: string;
14868
+ /**
14869
+ * The indicator: without children (or with children that render nothing) the decorative step
14870
+ * dots; give it `TeachingPopover.CarouselNav` for interactive step buttons, or
14871
+ * `TeachingPopover.CarouselPageCount` for a visible count. The buttons always render.
14872
+ */
14873
+ children?: React_2.ReactNode;
14874
+ /** Ref to the footer element. */
14875
+ ref?: React_2.Ref<HTMLDivElement>;
14876
+ }
14877
+
14878
+ /**
14879
+ * Interactive step buttons (Fluent's `TeachingPopoverCarouselNav`): a group named by
14880
+ * `labels.nav` (“Choose step”) with one button per step, each named by `labels.navButton`
14881
+ * (“Step 2 of 3”) and a Tab stop. The current step's button has `aria-current="step"`; activating
14882
+ * another one shows its step (`onStepChange`, then the step announcement), and focus stays on it.
14883
+ * Opt-in: the footers show decorative dots unless you place it, for example as the children of
14884
+ * `TeachingPopover.CarouselFooter`.
14885
+ *
14886
+ * Also exported as `TeachingPopoverCarouselNav` for React Server Components, which cannot use the
14887
+ * dotted `TeachingPopover.CarouselNav` (that needs a client file).
14888
+ */
14889
+ export declare const TeachingPopoverCarouselNav: {
14890
+ ({ className, ref, ...rest }: TeachingPopoverCarouselNavProps): React_2.JSX.Element | null;
14891
+ displayName: string;
14892
+ };
14893
+
14894
+ /**
14895
+ * TeachingPopover.CarouselNav: `root` on the `role="group"` element of the step buttons; `button`
14896
+ * on each step button; `indicator` on the dot inside it.
14897
+ */
14898
+ export declare const teachingPopoverCarouselNavClassNames: {
14899
+ readonly root: "wave-teaching-popover-carousel-nav";
14900
+ readonly button: "wave-teaching-popover-carousel-nav__button";
14901
+ readonly indicator: "wave-teaching-popover-carousel-nav__indicator";
14902
+ };
14903
+
14904
+ /** Properties for the TeachingPopoverCarouselNav sub-component. */
14905
+ export declare interface TeachingPopoverCarouselNavProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, 'children'> {
14906
+ /** Ref to the element of the step buttons. */
14907
+ ref?: React_2.Ref<HTMLDivElement>;
14908
+ }
14909
+
14910
+ /**
14911
+ * The visible step count (Fluent's `TeachingPopoverCarouselPageCount`), such as “2 of 3”: the
14912
+ * current step and the step count, worded by a render function child. Place it in a footer,
14913
+ * for example in `TeachingPopover.CarouselFooter` next to or instead of `TeachingPopover.CarouselNav`.
14914
+ *
14915
+ * Also exported as `TeachingPopoverCarouselPageCount` for React Server Components, which cannot
14916
+ * use the dotted `TeachingPopover.CarouselPageCount` (that needs a client file).
14917
+ */
14918
+ export declare const TeachingPopoverCarouselPageCount: {
14919
+ ({ className, children, ref, ...rest }: TeachingPopoverCarouselPageCountProps): React_2.JSX.Element | null;
13701
14920
  displayName: string;
13702
14921
  };
13703
14922
 
14923
+ /** TeachingPopover.CarouselPageCount: `root` on the element of the visible step count. */
14924
+ export declare const teachingPopoverCarouselPageCountClassNames: {
14925
+ readonly root: "wave-teaching-popover-carousel-page-count";
14926
+ };
14927
+
14928
+ /** Properties for the TeachingPopoverCarouselPageCount sub-component. */
14929
+ export declare interface TeachingPopoverCarouselPageCountProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, 'children'> {
14930
+ /**
14931
+ * The text from the one-based number of the current step and the step count (Fluent's render
14932
+ * function); it also localizes the text. A result that renders nothing keeps the default. A
14933
+ * Server Component cannot pass a function: write the part with one in a client file.
14934
+ * @default (current, total) => `${current} of ${total}`
14935
+ */
14936
+ children?: (current: number, total: number) => React_2.ReactNode;
14937
+ /** Ref to the count element. */
14938
+ ref?: React_2.Ref<HTMLDivElement>;
14939
+ }
14940
+
14941
+ /** Properties for the TeachingPopoverCarousel sub-component. */
14942
+ export declare interface TeachingPopoverCarouselProps extends React_2.HTMLAttributes<HTMLDivElement> {
14943
+ /**
14944
+ * The carousel's content. Without children (or with children that render nothing) the current
14945
+ * step as a carousel page: `TeachingPopover.Title`, `TeachingPopover.Body` and
14946
+ * `TeachingPopover.CarouselFooter` without children of their own.
14947
+ */
14948
+ children?: React_2.ReactNode;
14949
+ /** Ref to the carousel element. */
14950
+ ref?: React_2.Ref<HTMLDivElement>;
14951
+ }
14952
+
13704
14953
  /**
13705
- * TeachingPopover: `root` on the `role="dialog"` surface; `beak` on the arrow; `closeButton`,
13706
- * `backButton` and `nextButton` on its buttons (which also carry Button's root); `title` on the
13707
- * `<h3>`; `body` on the step body; `footer` on the bottom row; `dot` on each step dot.
14954
+ * TeachingPopover: `root` on the `role="dialog"` surface (also when TeachingPopover.Surface
14955
+ * renders it); `beak` on the arrow; `closeButton`, `backButton` and `nextButton` on its buttons
14956
+ * (which also carry Button's root; `backButton` also on the first step's button that a
14957
+ * TeachingPopover.CarouselFooter's `initialStepText` names); `primaryButton` and `secondaryButton`
14958
+ * on the buttons that a `primaryAction` and a `secondaryAction` render in place of Next/Done and
14959
+ * Back; `title` on the step title (an `<h3>`, or the element of TeachingPopover.Title's `as`);
14960
+ * `body` on the step body; `footer` on the bottom row (TeachingPopover.Footer's, or
14961
+ * TeachingPopover.CarouselFooter's); `dot` on each decorative step dot.
13708
14962
  */
13709
14963
  export declare const teachingPopoverClassNames: {
13710
14964
  readonly root: "wave-teaching-popover";
@@ -13716,8 +14970,94 @@ export declare const teachingPopoverClassNames: {
13716
14970
  readonly dot: "wave-teaching-popover__dot";
13717
14971
  readonly backButton: "wave-teaching-popover__back-button";
13718
14972
  readonly nextButton: "wave-teaching-popover__next-button";
14973
+ readonly primaryButton: "wave-teaching-popover__primary-button";
14974
+ readonly secondaryButton: "wave-teaching-popover__secondary-button";
14975
+ };
14976
+
14977
+ /**
14978
+ * The bottom row (Fluent's `TeachingPopoverFooter`): the step dots and the buttons of the current
14979
+ * step, laid out by TeachingPopover's `footerLayout` (rendered as `data-layout` here too), or your
14980
+ * children. The steps, the actions and their labels stay on TeachingPopover.
14981
+ *
14982
+ * Also exported as `TeachingPopoverFooter` for React Server Components, which cannot use the
14983
+ * dotted `TeachingPopover.Footer` (that needs a client file).
14984
+ */
14985
+ export declare const TeachingPopoverFooter: {
14986
+ ({ className, children, ref, ...rest }: TeachingPopoverFooterProps): React_2.JSX.Element | null;
14987
+ displayName: string;
13719
14988
  };
13720
14989
 
14990
+ /**
14991
+ * TeachingPopover.Footer: `root` on the footer element (also the one the `steps` form renders),
14992
+ * which also carries TeachingPopover's `footer`.
14993
+ */
14994
+ export declare const teachingPopoverFooterClassNames: {
14995
+ readonly root: "wave-teaching-popover-footer";
14996
+ };
14997
+
14998
+ /** Properties for the TeachingPopoverFooter sub-component. */
14999
+ export declare interface TeachingPopoverFooterProps extends React_2.HTMLAttributes<HTMLDivElement> {
15000
+ /**
15001
+ * The footer content. Without children (or with children that render nothing) the step dots and
15002
+ * the buttons of the current step: Back and Next (Done on the last step), or the
15003
+ * `primaryAction` and `secondaryAction` that replace them.
15004
+ */
15005
+ children?: React_2.ReactNode;
15006
+ /** Ref to the footer element. */
15007
+ ref?: React_2.Ref<HTMLDivElement>;
15008
+ }
15009
+
15010
+ /**
15011
+ * The top of the popover (Fluent's `TeachingPopoverHeader`): the Close button, and an optional
15012
+ * caption with a decorative `icon` before the title. Without children it holds only the Close
15013
+ * button, as the `steps` form does. Place it first in a `TeachingPopover.Surface`.
15014
+ *
15015
+ * Also exported as `TeachingPopoverHeader` for React Server Components, which cannot use the
15016
+ * dotted `TeachingPopover.Header` (that needs a client file).
15017
+ */
15018
+ export declare const TeachingPopoverHeader: {
15019
+ ({ icon, dismissButton, className, children, ref, ...rest }: TeachingPopoverHeaderProps): React_2.JSX.Element | null;
15020
+ displayName: string;
15021
+ };
15022
+
15023
+ /**
15024
+ * TeachingPopover.Header: `root` on the header element (also the one the `steps` form renders
15025
+ * around its Close button); `icon` on the element of its `icon` slot. Its Close button carries
15026
+ * TeachingPopover's `closeButton`.
15027
+ */
15028
+ export declare const teachingPopoverHeaderClassNames: {
15029
+ readonly root: "wave-teaching-popover-header";
15030
+ readonly icon: "wave-teaching-popover-header__icon";
15031
+ };
15032
+
15033
+ /** Properties for the TeachingPopoverHeader sub-component. */
15034
+ export declare interface TeachingPopoverHeaderProps extends React_2.HTMLAttributes<HTMLDivElement> {
15035
+ /**
15036
+ * A short caption above the title, such as “Tip” or “New”. Without it (and without `icon`) the
15037
+ * header holds only the Close button, as the `steps` form's does; with either, they sit in a row
15038
+ * at the top of the popover, next to the Close button.
15039
+ */
15040
+ children?: React_2.ReactNode;
15041
+ /**
15042
+ * A decorative icon before the caption (`aria-hidden`), such as a light bulb. None by default
15043
+ * (Fluent's header shows a light bulb). A value that renders nothing renders no element.
15044
+ */
15045
+ icon?: Slot<'span'>;
15046
+ /**
15047
+ * The Close button at the popover's top end, which dismisses it (`onOpenChange(false)`, then
15048
+ * `onDismiss`) and is named by TeachingPopover's `closeLabel`. Content (an icon) replaces the
15049
+ * dismiss glyph inside the built-in button. A `<button>` or a `Button`, or a slot object whose
15050
+ * `as` is one, is merged into it, never nested: its props and handlers (called first) reach the
15051
+ * built-in button, its content goes inside, and a development warning says so; a text label of
15052
+ * two or more letters or digits in it names the button instead of `closeLabel` (WCAG 2.5.3,
15053
+ * Label in Name), as does its own `aria-label`. `null` renders no Close button; `undefined` and
15054
+ * booleans keep the default.
15055
+ */
15056
+ dismissButton?: Slot<'span'>;
15057
+ /** Ref to the header element. */
15058
+ ref?: React_2.Ref<HTMLDivElement>;
15059
+ }
15060
+
13721
15061
  /** The built-in text of a TeachingPopover, for localization (see `TeachingPopoverProps.labels`). */
13722
15062
  export declare interface TeachingPopoverLabels {
13723
15063
  /** Text of the Back button.
@@ -13739,6 +15079,16 @@ export declare interface TeachingPopoverLabels {
13739
15079
  * @default (index, count) => `step ${index + 1} of ${count}`
13740
15080
  */
13741
15081
  step?: (index: number, count: number) => string;
15082
+ /** Name of the group of step buttons that `TeachingPopover.CarouselNav` renders.
15083
+ * @default 'Choose step'
15084
+ */
15085
+ nav?: string;
15086
+ /**
15087
+ * Name of the `TeachingPopover.CarouselNav` button that shows the step at `index` (zero-based,
15088
+ * like `activeStep`) out of `count` steps.
15089
+ * @default (index, count) => `Step ${index + 1} of ${count}`
15090
+ */
15091
+ navButton?: (index: number, count: number) => string;
13742
15092
  }
13743
15093
 
13744
15094
  /** Properties for the TeachingPopover component. */
@@ -13747,10 +15097,14 @@ export declare interface TeachingPopoverProps extends React_2.HTMLAttributes<HTM
13747
15097
  steps: readonly TeachingPopoverStep[];
13748
15098
  /**
13749
15099
  * Controlled index of the displayed step. Out-of-range values are clamped to the first or last
13750
- * step (with a development warning).
15100
+ * step (with a development warning). Opening the popover leaves it as it is.
13751
15101
  */
13752
15102
  activeStep?: number;
13753
- /** Initial step index for uncontrolled usage.
15103
+ /**
15104
+ * Initial step index for uncontrolled usage, and the step the popover starts on again each time
15105
+ * it opens (after Done, Close, Escape or the Trigger closed it, or a controlled `open` turned it
15106
+ * off), so a tour opened again starts over; `onStepChange` is called with it when the step was
15107
+ * elsewhere.
13754
15108
  * @default 0
13755
15109
  */
13756
15110
  defaultActiveStep?: number;
@@ -13758,17 +15112,56 @@ export declare interface TeachingPopoverProps extends React_2.HTMLAttributes<HTM
13758
15112
  currentStep?: number;
13759
15113
  /** @deprecated Use `defaultActiveStep`. */
13760
15114
  defaultCurrentStep?: number;
13761
- /** Called with the requested step index when Next or Back is activated. */
15115
+ /**
15116
+ * Called with the requested step index when Next, Back or a step button of
15117
+ * `TeachingPopover.CarouselNav` is activated (the button of the current step requests nothing),
15118
+ * and, while the step is uncontrolled, with the initial step when an opening moves the step back
15119
+ * to it (see `defaultActiveStep`).
15120
+ */
13762
15121
  onStepChange?: (step: number) => void;
13763
- /** Called when the popover is dismissed with Close, Done or Escape. */
15122
+ /**
15123
+ * Called when the popover is dismissed with Close, Done, Escape or a `TeachingPopover.Trigger`
15124
+ * that closes it.
15125
+ *
15126
+ * Done also calls it in 0.x, after `onFinish`, so that code written before `onFinish` keeps
15127
+ * working; from 1.0 only Close, Escape and the Trigger will.
15128
+ */
13764
15129
  onDismiss?: () => void;
15130
+ /**
15131
+ * Called when the tour is finished: Done, the button that replaces Next on the last step, or a
15132
+ * `primaryAction` on the last step whose click was not prevented. The popover closes first.
15133
+ * Close, Escape and the Trigger call only `onDismiss`. Fires on every activation, like
15134
+ * `onStepChange`.
15135
+ */
15136
+ onFinish?: () => void;
15137
+ /**
15138
+ * Replaces the Next (or Done) button on every step that sets no `primaryAction` of its own.
15139
+ */
15140
+ primaryAction?: TeachingPopoverAction;
15141
+ /**
15142
+ * Replaces the Back button on every step that sets no `secondaryAction` of its own.
15143
+ */
15144
+ secondaryAction?: TeachingPopoverAction;
15145
+ /**
15146
+ * How the footer lays out the step dots and the buttons: side by side, or the dots above
15147
+ * buttons that fill the width. Rendered as `data-layout` on the popover and on its footer.
15148
+ * `TeachingPopover.CarouselFooter` has its own `layout` instead.
15149
+ * @default 'horizontal'
15150
+ */
15151
+ footerLayout?: 'horizontal' | 'vertical';
13765
15152
  /** Controlled visibility of the teaching popover. */
13766
15153
  open?: boolean;
13767
- /** Initial visibility for uncontrolled usage.
13768
- * @default true
15154
+ /**
15155
+ * Initial visibility for uncontrolled usage: `true` (a tour that shows on page load), or
15156
+ * `false` when a `TeachingPopover.Trigger` is a direct child (a Fragment is fine), which then
15157
+ * opens it.
15158
+ * @default true (false with a direct TeachingPopover.Trigger)
13769
15159
  */
13770
15160
  defaultOpen?: boolean;
13771
- /** Called with `false` when Close, Done or Escape dismisses the popover. */
15161
+ /**
15162
+ * Called with `false` when Close, Done or Escape dismisses the popover, and with the new state
15163
+ * when a `TeachingPopover.Trigger` opens or closes it.
15164
+ */
13772
15165
  onOpenChange?: (open: boolean) => void;
13773
15166
  /**
13774
15167
  * Accessible name of the built-in Close button (an icon-only button). Localize it with the
@@ -13777,15 +15170,17 @@ export declare interface TeachingPopoverProps extends React_2.HTMLAttributes<HTM
13777
15170
  */
13778
15171
  closeLabel?: string;
13779
15172
  /**
13780
- * Text of the Back, Next and Done buttons and the wording of the step position (“step 2 of 3”),
13781
- * for localization. Unset members keep their English defaults.
15173
+ * Text of the Back, Next and Done buttons, the wording of the step position (“step 2 of 3”) and
15174
+ * the names of `TeachingPopover.CarouselNav`'s step buttons, for localization. Unset members keep
15175
+ * their English defaults.
13782
15176
  */
13783
15177
  labels?: TeachingPopoverLabels;
13784
15178
  /**
13785
15179
  * The element the popover points at (a ref, the element, or a `VirtualElement`: a rectangle such as a
13786
15180
  * point; an inline object is fine). When given, the popover is
13787
15181
  * rendered in a portal, positioned next to it with a beak, and flips or shifts to stay in view;
13788
- * without it (`undefined`) the popover renders inline where it is placed (0.4 behaviour).
15182
+ * without it (`undefined`) the popover renders inline where it is placed (0.4 behaviour), or,
15183
+ * with a `TeachingPopover.Trigger`, points at the trigger.
13789
15184
  * While the target is `null` or has not been positioned against yet (an element held in state
13790
15185
  * that is not set yet, a ref that is not attached), the popover stays hidden: it is not
13791
15186
  * shown, takes no focus, announces no step change and does not handle Escape until it can
@@ -13820,7 +15215,18 @@ export declare interface TeachingPopoverProps extends React_2.HTMLAttributes<HTM
13820
15215
  * @default `{ offset: 12 }`
13821
15216
  */
13822
15217
  positioning?: PopupPositioning;
13823
- /** Ref to the popover surface (`role="dialog"`). */
15218
+ /**
15219
+ * `TeachingPopover.Trigger` and `TeachingPopover.Surface` (Fluent's composition), rendered where
15220
+ * they are written. Without a `TeachingPopover.Surface` among them, the popover renders its
15221
+ * surface itself, after the children, with the element props given here (`className`, `style`,
15222
+ * `ref`, …); with one (best written directly inside, a Fragment is fine: see
15223
+ * `TeachingPopover.Surface`), the Surface takes them instead.
15224
+ */
15225
+ children?: React_2.ReactNode;
15226
+ /**
15227
+ * Ref to the popover surface (`role="dialog"`). Ignored next to a `TeachingPopover.Surface`
15228
+ * (pass it to the Surface).
15229
+ */
13824
15230
  ref?: React_2.Ref<HTMLDivElement>;
13825
15231
  }
13826
15232
 
@@ -13830,6 +15236,164 @@ export declare interface TeachingPopoverStep {
13830
15236
  title: string;
13831
15237
  /** Body content for the step. */
13832
15238
  body: React_2.ReactNode;
15239
+ /**
15240
+ * Replaces the Next (or, on the last step, Done) button on this step; wins over the
15241
+ * popover's `primaryAction`.
15242
+ */
15243
+ primaryAction?: TeachingPopoverAction;
15244
+ /**
15245
+ * Replaces the Back button on this step (also on a single-step popover, which has no Back);
15246
+ * wins over the popover's `secondaryAction`.
15247
+ */
15248
+ secondaryAction?: TeachingPopoverAction;
15249
+ }
15250
+
15251
+ /**
15252
+ * The popover surface (Fluent's `TeachingPopoverSurface`): the non-modal `role="dialog"` element
15253
+ * that the `steps` form renders, with the same behaviour (in place, or portaled next to the
15254
+ * target with a beak; focus, dismissal, keyboard order and step announcements), so your
15255
+ * `className`, `style`, `ref` and other props reach the element the `steps` form gives
15256
+ * TeachingPopover's own. Without children it shows the current step as the `steps` form does;
15257
+ * children replace that content: build it from `TeachingPopover.Header`, `Title`, `Body` and
15258
+ * `Footer`, or from your own (then name the surface with `aria-label` or `aria-labelledby`).
15259
+ *
15260
+ * Render one inside TeachingPopover; TeachingPopover then renders no surface of its own, and its
15261
+ * own `className`, `style`, `ref` and other element props are ignored (a development warning says
15262
+ * so). Write it directly inside TeachingPopover (a Fragment is fine) where you can: there it is
15263
+ * found while rendering. One inside an element or a component of yours is found once it has
15264
+ * mounted, so until then TeachingPopover's own surface renders next to it: in the server HTML, and
15265
+ * in the browser's first commit (before anything is painted or focused). A second Surface renders
15266
+ * a second popover (a development warning says so).
15267
+ *
15268
+ * Also exported as `TeachingPopoverSurface` for React Server Components, which cannot use the
15269
+ * dotted `TeachingPopover.Surface` (that needs a client file).
15270
+ */
15271
+ export declare const TeachingPopoverSurface: {
15272
+ ({ id, ref, ...rest }: TeachingPopoverSurfaceProps): React_2.JSX.Element;
15273
+ displayName: string;
15274
+ };
15275
+
15276
+ /**
15277
+ * TeachingPopover.Surface: `root` on the `role="dialog"` surface it renders, which also carries
15278
+ * TeachingPopover's `root`; the content of the current step it shows without children carries
15279
+ * TeachingPopover's part classes.
15280
+ */
15281
+ export declare const teachingPopoverSurfaceClassNames: {
15282
+ readonly root: "wave-teaching-popover-surface";
15283
+ };
15284
+
15285
+ /** Properties for the TeachingPopoverSurface sub-component. */
15286
+ export declare interface TeachingPopoverSurfaceProps extends React_2.HTMLAttributes<HTMLDivElement> {
15287
+ /**
15288
+ * The popover's content. Without children (or with children that render nothing) the surface
15289
+ * shows the current step as the `steps` form does: `TeachingPopover.Header`, `Title`, `Body` and
15290
+ * `Footer` without children of their own (the Close button, the step title, its body, and the
15291
+ * footer with the step dots and the buttons). Children replace all of that: build it from those
15292
+ * parts, each showing its share of the current step unless you give it children, or from your
15293
+ * own content. A `TeachingPopover.Title` among the children (at any depth) names the surface;
15294
+ * without one, name it with `aria-label` or `aria-labelledby`.
15295
+ */
15296
+ children?: React_2.ReactNode;
15297
+ /** Ref to the popover surface (`role="dialog"`). */
15298
+ ref?: React_2.Ref<HTMLDivElement>;
15299
+ }
15300
+
15301
+ /**
15302
+ * The step title (Fluent's `TeachingPopoverTitle`): an `<h3>` (another level, or any element,
15303
+ * with `as`) holding the current step's `title`, or your children, and a visually hidden step
15304
+ * position. It names the surface: the surface's `aria-labelledby` points at its `id` (yours, or a
15305
+ * generated one), wherever it is among the Surface's children (inside `TeachingPopover.Body`, as
15306
+ * in Fluent, works too).
15307
+ *
15308
+ * Also exported as `TeachingPopoverTitle` for React Server Components, which cannot use the
15309
+ * dotted `TeachingPopover.Title` (that needs a client file).
15310
+ */
15311
+ export declare const TeachingPopoverTitle: PolymorphicComponent<'h3', TeachingPopoverTitleOwnProps>;
15312
+
15313
+ /**
15314
+ * TeachingPopover.Title: `root` on the heading (also the one the `steps` form renders), which
15315
+ * also carries TeachingPopover's `title`.
15316
+ */
15317
+ export declare const teachingPopoverTitleClassNames: {
15318
+ readonly root: "wave-teaching-popover-title";
15319
+ };
15320
+
15321
+ /** The TeachingPopover.Title's own props (component-specific props only). */
15322
+ export declare interface TeachingPopoverTitleOwnProps {
15323
+ /**
15324
+ * The title text: the current step's `title` without children (or with children that render
15325
+ * nothing). A visually hidden step position (“, step 2 of 3”, worded by `labels.step`) follows
15326
+ * either, so the heading, which names the popover, says where the tour is.
15327
+ */
15328
+ children?: React_2.ReactNode;
15329
+ }
15330
+
15331
+ /** Props of {@link TeachingPopoverTitle} rendered as `C` (default `'h3'`), including `ref`. */
15332
+ export declare type TeachingPopoverTitleProps<C extends React_2.ElementType = 'h3'> = PolymorphicProps<C, TeachingPopoverTitleOwnProps>;
15333
+
15334
+ /**
15335
+ * The element that opens and closes the popover (Fluent's `TeachingPopoverTrigger`, as
15336
+ * `Popover.Trigger`). Its props are merged onto the single child (no wrapper element):
15337
+ * `aria-haspopup="dialog"`, `aria-expanded`, `aria-controls` (while open), a composed `onClick`
15338
+ * that opens the popover, or dismisses it while it is open (as Close does: `onOpenChange(false)`,
15339
+ * then `onDismiss`), and a ref. The child's own handlers and classes are kept; the live state ARIA
15340
+ * always wins. A render function receives the props instead; `asChild={false}` renders a wrapper
15341
+ * span, and a custom child that neither forwards `ref` nor spreads its props falls back to that
15342
+ * span automatically (with a development warning). On the span, the state ARIA goes to the first
15343
+ * element in the tab order inside it.
15344
+ *
15345
+ * When TeachingPopover has no `target` (and no `positioning.target`), the popover points at the
15346
+ * trigger: it is portaled next to it with a beak and takes its place in the keyboard order right
15347
+ * after it. Focus returns to the trigger when the popover closes, with a `target` too (as with
15348
+ * `Popover.Trigger`). Place it directly inside TeachingPopover (a Fragment is fine): the popover
15349
+ * then starts closed unless `defaultOpen` says otherwise. A trigger nested deeper still works, but
15350
+ * leaves `defaultOpen` at `true` and becomes the target once it has mounted.
15351
+ *
15352
+ * @example
15353
+ * <TeachingPopover steps={steps}>
15354
+ * <TeachingPopover.Trigger>
15355
+ * <Button>Take the tour</Button>
15356
+ * </TeachingPopover.Trigger>
15357
+ * </TeachingPopover>
15358
+ *
15359
+ * Also exported as `TeachingPopoverTrigger` for React Server Components, which cannot use the
15360
+ * dotted `TeachingPopover.Trigger` (that needs a client file).
15361
+ */
15362
+ export declare const TeachingPopoverTrigger: {
15363
+ ({ children, asChild, onClick, ref, ...rest }: TeachingPopoverTriggerProps): React_2.ReactNode;
15364
+ displayName: string;
15365
+ };
15366
+
15367
+ /**
15368
+ * Props a `TeachingPopover.Trigger` puts on its element; a render-prop child receives them (spread
15369
+ * them onto the element that opens the popover).
15370
+ */
15371
+ export declare type TeachingPopoverTriggerChildProps = Omit<React_2.HTMLAttributes<HTMLElement>, 'children'> & {
15372
+ 'aria-haspopup': 'dialog';
15373
+ 'aria-expanded': boolean;
15374
+ /** The surface's id, only while the popover is open. */
15375
+ 'aria-controls': string | undefined;
15376
+ onClick: React_2.MouseEventHandler<HTMLElement>;
15377
+ ref: React_2.RefCallback<HTMLElement>;
15378
+ };
15379
+
15380
+ /** Properties for the TeachingPopoverTrigger sub-component. */
15381
+ export declare interface TeachingPopoverTriggerProps extends Omit<React_2.HTMLAttributes<HTMLElement>, 'children'> {
15382
+ /**
15383
+ * The element that opens and closes the popover (its props are merged onto it), or a render
15384
+ * function that receives the trigger props.
15385
+ */
15386
+ children: React_2.ReactNode | ((props: TeachingPopoverTriggerChildProps) => React_2.ReactNode);
15387
+ /**
15388
+ * `false` renders a wrapper `<span>` carrying the trigger props around the children instead of
15389
+ * merging them onto the child. `aria-haspopup`, `aria-expanded` and `aria-controls`, which a
15390
+ * generic element cannot carry, go to the first element in the tab order inside the span. A
15391
+ * render-prop child ignores `asChild` and receives every prop.
15392
+ * @default true
15393
+ */
15394
+ asChild?: boolean;
15395
+ /** Ref to the trigger element (the child, or the wrapper span). */
15396
+ ref?: React_2.Ref<HTMLElement>;
13833
15397
  }
13834
15398
 
13835
15399
  /**
@@ -15402,6 +16966,23 @@ export declare interface TreeProps extends React_2.HTMLAttributes<HTMLDivElement
15402
16966
  ref?: React_2.Ref<HTMLDivElement>;
15403
16967
  }
15404
16968
 
16969
+ /**
16970
+ * Shortens the text of a breadcrumb item that is longer than `maxLength` characters: it trims the
16971
+ * text, keeps the first `maxLength` characters and adds `...`. Shorter text, and text of exactly
16972
+ * `maxLength` characters, is returned unchanged. Show the full text in a tooltip when
16973
+ * {@link isTruncatableBreadcrumbContent} is true.
16974
+ * @default maxLength 30
16975
+ */
16976
+ export declare function truncateBreadcrumbLongName(content: string, maxLength?: number): string;
16977
+
16978
+ /**
16979
+ * Shortens the text of a breadcrumb item's tooltip that is longer than `maxLength` characters, the
16980
+ * same way as {@link truncateBreadcrumbLongName}. Fluent UI spells this function
16981
+ * `truncateBreadcrumLongTooltip`; WaveUI spells it correctly and keeps no alias.
16982
+ * @default maxLength 80
16983
+ */
16984
+ export declare function truncateBreadcrumbLongTooltip(content: string, maxLength?: number): string;
16985
+
15405
16986
  /** Typography scale variant mapping to Fluent UI type ramp tokens. */
15406
16987
  export declare type TypographyVariant = 'caption-2' | 'caption-1' | 'body-1' | 'body-2' | 'subtitle-2' | 'subtitle-1' | 'title-3' | 'title-2' | 'title-1' | 'large-title' | 'display';
15407
16988
 
@@ -15866,6 +17447,12 @@ export declare interface UseGridNavigationResult {
15866
17447
  gridProps: GridNavigationHandlers;
15867
17448
  }
15868
17449
 
17450
+ /**
17451
+ * Whether the enclosing {@link Overflow} currently hides at least one item (the button that the
17452
+ * `hasHiddenItems` prop reserves does not count). Must be called inside `Overflow`.
17453
+ */
17454
+ export declare function useHasHiddenItems(): boolean;
17455
+
15869
17456
  /**
15870
17457
  * Generates a stable, SSR-safe unique id, optionally with a prefix. Wraps React's `useId` so every
15871
17458
  * component builds DOM ids the same way (C-IDS).
@@ -15910,6 +17497,12 @@ export declare interface UseInitialFocusOptions {
15910
17497
  */
15911
17498
  export declare function useIsClient(): boolean;
15912
17499
 
17500
+ /**
17501
+ * How much of the item group `groupId` is shown: `'visible'` (every member, and also a group
17502
+ * without items), `'hidden'` (none) or `'overflow'` (some). Must be called inside `Overflow`.
17503
+ */
17504
+ export declare function useIsOverflowGroupVisible(groupId: string): OverflowGroupVisibility;
17505
+
15913
17506
  /**
15914
17507
  * Whether `target`'s content is wider than the element (`scrollWidth > clientWidth`).
15915
17508
  *