@mortenbrudvik/waveui 0.12.0 → 0.13.0

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 (104) hide show
  1. package/README.md +60 -11
  2. package/dist/components/data-display/Avatar.cjs +1 -1
  3. package/dist/components/data-display/Avatar.cjs.map +1 -1
  4. package/dist/components/data-display/Avatar.colors.cjs +2 -0
  5. package/dist/components/data-display/Avatar.colors.cjs.map +1 -0
  6. package/dist/components/data-display/Avatar.colors.mjs +45 -0
  7. package/dist/components/data-display/Avatar.colors.mjs.map +1 -0
  8. package/dist/components/data-display/Avatar.context.cjs +1 -1
  9. package/dist/components/data-display/Avatar.context.cjs.map +1 -1
  10. package/dist/components/data-display/Avatar.context.mjs +4 -2
  11. package/dist/components/data-display/Avatar.context.mjs.map +1 -1
  12. package/dist/components/data-display/Avatar.mjs +103 -96
  13. package/dist/components/data-display/Avatar.mjs.map +1 -1
  14. package/dist/components/data-display/Avatar.sizes.cjs +2 -0
  15. package/dist/components/data-display/Avatar.sizes.cjs.map +1 -0
  16. package/dist/components/data-display/Avatar.sizes.mjs +41 -0
  17. package/dist/components/data-display/Avatar.sizes.mjs.map +1 -0
  18. package/dist/components/data-display/AvatarGroup.cjs +1 -1
  19. package/dist/components/data-display/AvatarGroup.cjs.map +1 -1
  20. package/dist/components/data-display/AvatarGroup.context.cjs +2 -0
  21. package/dist/components/data-display/AvatarGroup.context.cjs.map +1 -0
  22. package/dist/components/data-display/AvatarGroup.context.mjs +9 -0
  23. package/dist/components/data-display/AvatarGroup.context.mjs.map +1 -0
  24. package/dist/components/data-display/AvatarGroup.mjs +65 -122
  25. package/dist/components/data-display/AvatarGroup.mjs.map +1 -1
  26. package/dist/components/data-display/AvatarGroup.partition.cjs +2 -0
  27. package/dist/components/data-display/AvatarGroup.partition.cjs.map +1 -0
  28. package/dist/components/data-display/AvatarGroup.partition.mjs +14 -0
  29. package/dist/components/data-display/AvatarGroup.partition.mjs.map +1 -0
  30. package/dist/components/data-display/AvatarGroup.parts.cjs +2 -0
  31. package/dist/components/data-display/AvatarGroup.parts.cjs.map +1 -0
  32. package/dist/components/data-display/AvatarGroup.parts.mjs +178 -0
  33. package/dist/components/data-display/AvatarGroup.parts.mjs.map +1 -0
  34. package/dist/components/data-display/InteractionTag.cjs +1 -1
  35. package/dist/components/data-display/InteractionTag.cjs.map +1 -1
  36. package/dist/components/data-display/InteractionTag.mjs +36 -33
  37. package/dist/components/data-display/InteractionTag.mjs.map +1 -1
  38. package/dist/components/data-display/Persona.cjs +1 -1
  39. package/dist/components/data-display/Persona.cjs.map +1 -1
  40. package/dist/components/data-display/Persona.mjs +96 -37
  41. package/dist/components/data-display/Persona.mjs.map +1 -1
  42. package/dist/components/data-display/PresenceBadge.cjs +1 -1
  43. package/dist/components/data-display/PresenceBadge.cjs.map +1 -1
  44. package/dist/components/data-display/PresenceBadge.mjs +42 -28
  45. package/dist/components/data-display/PresenceBadge.mjs.map +1 -1
  46. package/dist/components/data-display/Tag.cjs +1 -1
  47. package/dist/components/data-display/Tag.cjs.map +1 -1
  48. package/dist/components/data-display/Tag.mjs +111 -108
  49. package/dist/components/data-display/Tag.mjs.map +1 -1
  50. package/dist/components/layout/Card.cjs +1 -1
  51. package/dist/components/layout/Card.cjs.map +1 -1
  52. package/dist/components/layout/Card.context.cjs +2 -0
  53. package/dist/components/layout/Card.context.cjs.map +1 -0
  54. package/dist/components/layout/Card.context.mjs +14 -0
  55. package/dist/components/layout/Card.context.mjs.map +1 -0
  56. package/dist/components/layout/Card.mjs +138 -92
  57. package/dist/components/layout/Card.mjs.map +1 -1
  58. package/dist/components/layout/Card.preview.cjs +2 -0
  59. package/dist/components/layout/Card.preview.cjs.map +1 -0
  60. package/dist/components/layout/Card.preview.mjs +22 -0
  61. package/dist/components/layout/Card.preview.mjs.map +1 -0
  62. package/dist/components/layout/Carousel.button.cjs +2 -0
  63. package/dist/components/layout/Carousel.button.cjs.map +1 -0
  64. package/dist/components/layout/Carousel.button.mjs +34 -0
  65. package/dist/components/layout/Carousel.button.mjs.map +1 -0
  66. package/dist/components/layout/Carousel.cjs +1 -1
  67. package/dist/components/layout/Carousel.cjs.map +1 -1
  68. package/dist/components/layout/Carousel.context.cjs +2 -0
  69. package/dist/components/layout/Carousel.context.cjs.map +1 -0
  70. package/dist/components/layout/Carousel.context.mjs +24 -0
  71. package/dist/components/layout/Carousel.context.mjs.map +1 -0
  72. package/dist/components/layout/Carousel.drag.cjs +2 -0
  73. package/dist/components/layout/Carousel.drag.cjs.map +1 -0
  74. package/dist/components/layout/Carousel.drag.mjs +79 -0
  75. package/dist/components/layout/Carousel.drag.mjs.map +1 -0
  76. package/dist/components/layout/Carousel.groups.cjs +2 -0
  77. package/dist/components/layout/Carousel.groups.cjs.map +1 -0
  78. package/dist/components/layout/Carousel.groups.mjs +23 -0
  79. package/dist/components/layout/Carousel.groups.mjs.map +1 -0
  80. package/dist/components/layout/Carousel.mjs +288 -150
  81. package/dist/components/layout/Carousel.mjs.map +1 -1
  82. package/dist/components/layout/Carousel.styles.cjs +2 -0
  83. package/dist/components/layout/Carousel.styles.cjs.map +1 -0
  84. package/dist/components/layout/Carousel.styles.mjs +30 -0
  85. package/dist/components/layout/Carousel.styles.mjs.map +1 -0
  86. package/dist/components/layout/TabList.cjs +1 -1
  87. package/dist/components/layout/TabList.cjs.map +1 -1
  88. package/dist/components/layout/TabList.mjs +163 -124
  89. package/dist/components/layout/TabList.mjs.map +1 -1
  90. package/dist/index.cjs +1 -1
  91. package/dist/index.d.cts +550 -48
  92. package/dist/index.d.ts +550 -48
  93. package/dist/index.mjs +132 -127
  94. package/dist/lib/classNames.cjs +1 -1
  95. package/dist/lib/classNames.cjs.map +1 -1
  96. package/dist/lib/classNames.mjs +112 -92
  97. package/dist/lib/classNames.mjs.map +1 -1
  98. package/dist/lib/initials.cjs +2 -0
  99. package/dist/lib/initials.cjs.map +1 -0
  100. package/dist/lib/initials.mjs +21 -0
  101. package/dist/lib/initials.mjs.map +1 -0
  102. package/dist/styles.css +1 -1
  103. package/package.json +1 -1
  104. package/src/styles/tokens.css +102 -0
package/dist/index.d.ts CHANGED
@@ -306,7 +306,7 @@ export declare type Appearance = 'primary' | 'outline' | 'subtle' | 'transparent
306
306
  * <Avatar name="Jane Doe" src="/jane.jpg" badge={<PresenceBadge status="available" />} />
307
307
  */
308
308
  export declare const Avatar: {
309
- ({ src, name, size: sizeProp, icon, image, badge, decorative, className, ref, role, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-description": ariaDescription, "aria-details": ariaDetails, ...rest }: AvatarProps): React_2.JSX.Element;
309
+ ({ src, name, size: sizeProp, shape: shapeProp, color: colorProp, idForColor, active, activeAppearance, initials: initialsSlot, icon, image, badge, decorative, className, ref, role, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-description": ariaDescription, "aria-details": ariaDetails, ...rest }: AvatarProps): React_2.JSX.Element;
310
310
  displayName: string;
311
311
  };
312
312
 
@@ -325,30 +325,48 @@ export declare const avatarClassNames: {
325
325
  readonly badge: "wave-avatar__badge";
326
326
  };
327
327
 
328
+ /** The color of an Avatar that shows initials: a look, `colorful` (hashed), or a named color. */
329
+ export declare type AvatarColor = 'neutral' | 'brand' | 'colorful' | AvatarNamedColor;
330
+
328
331
  /**
329
- * A row of overlapping avatars (`role="group"`; name it with `aria-label`).
332
+ * A row of avatars (`role="group"`; name it with `aria-label`), laid out as a `stack` (overlapping),
333
+ * `spread` or `pie` (`layout`). `size` reaches the members.
330
334
  *
331
335
  * With `max`, the avatars beyond the limit are replaced by an overflow `<button>` ("+3", named
332
- * "3 more", see `overflowLabel`). It toggles a popup that lists the hidden members' names: an
333
- * `Avatar` by its `aria-label` or `name` prop, text as it is. Other members, such as an `Avatar`
334
- * inside a link or one labelled by `aria-labelledby`, are rendered as they are, and an `Avatar` or
335
- * text with no accessible name is listed as `unnamedMemberLabel` with a development warning.
336
- * Focus moves into the popup; Escape, a press outside or the button close it and focus returns to
337
- * the button. Tab and Shift+Tab move through the popup's own tab stops (links in rendered
336
+ * "3 more", see `overflowLabel`; `overflowIndicator="icon"` shows an icon, and a count above 99
337
+ * reads "99+"). It toggles a popup that lists the hidden members: an `AvatarGroup.Item` as a row
338
+ * with its avatar and name, an `Avatar` by its `aria-label` or `name` prop, text as it is. Other
339
+ * members, such as an `Avatar` inside a link or one labelled by `aria-labelledby`, are rendered as
340
+ * they are, and an `Avatar` or text with no accessible name is listed as `unnamedMemberLabel` with
341
+ * a development warning. Focus moves into the popup; Escape, a press outside or the button close
342
+ * it and focus returns to the button (`open`, `defaultOpen` and `onOpenChange(open, details)`
343
+ * control it). Tab and Shift+Tab move through the popup's own tab stops (links in rendered
338
344
  * members); Tab from the last one closes the popup and moves on to the element after the button,
339
345
  * Shift+Tab from the first one closes it and returns to the button. When the button is the last
340
346
  * tab stop (of the page, or of the Wave layer the group is in, such as a dialog), Tab is left to
341
347
  * the browser or the enclosing focus trap.
342
348
  *
349
+ * To split the members yourself, render `AvatarGroup.Item`s and an `AvatarGroup.Popover` holding
350
+ * the overflow items (see `partitionAvatarGroupItems`).
351
+ *
343
352
  * @example
344
353
  * <AvatarGroup aria-label="Project team" max={3}>
345
- * <Avatar name="Ada Lovelace" />
346
- * <Avatar name="Alan Turing" />
354
+ * <AvatarGroup.Item name="Ada Lovelace" />
355
+ * <AvatarGroup.Item name="Alan Turing" />
347
356
  * </AvatarGroup>
348
357
  */
349
358
  export declare const AvatarGroup: {
350
- ({ max, size, overflowLabel, unnamedMemberLabel, className, children, ref, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }: AvatarGroupProps): React_2.JSX.Element;
359
+ ({ max, size, layout, overflowIndicator, overflowLabel, unnamedMemberLabel, open, defaultOpen, onOpenChange, className, children, ref, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }: AvatarGroupProps): React_2.JSX.Element;
351
360
  displayName: string;
361
+ } & {
362
+ Item: {
363
+ ({ className, ...props }: AvatarGroupItemProps): React_2.JSX.Element;
364
+ displayName: string;
365
+ };
366
+ Popover: {
367
+ ({ children, indicator, count, label: labelProp, unnamedMemberLabel, open: openProp, defaultOpen, onOpenChange, className, ref, }: AvatarGroupPopoverProps): React_2.JSX.Element;
368
+ displayName: string;
369
+ };
352
370
  };
353
371
 
354
372
  /**
@@ -360,24 +378,120 @@ export declare const avatarGroupClassNames: {
360
378
  readonly root: "wave-avatar-group";
361
379
  readonly item: "wave-avatar-group__item";
362
380
  readonly overflowButton: "wave-avatar-group__overflow-button";
381
+ readonly pie: "wave-avatar-group__pie";
363
382
  readonly surface: "wave-avatar-group__surface";
364
383
  readonly list: "wave-avatar-group__list";
365
384
  readonly listItem: "wave-avatar-group__list-item";
366
385
  };
367
386
 
387
+ /**
388
+ * A member of an AvatarGroup. In the group it renders as an `Avatar`; in the overflow list of the
389
+ * popup it renders as a row with the avatar and the name. It takes the props of an `Avatar`.
390
+ */
391
+ export declare const AvatarGroupItem: {
392
+ ({ className, ...props }: AvatarGroupItemProps): React_2.JSX.Element;
393
+ displayName: string;
394
+ };
395
+
396
+ /**
397
+ * AvatarGroup.Item: `root` on the avatar it renders in the group, and on the row (avatar and name)
398
+ * it renders in the overflow list; `name` on the name text of that row.
399
+ */
400
+ export declare const avatarGroupItemClassNames: {
401
+ readonly root: "wave-avatar-group-item";
402
+ readonly name: "wave-avatar-group-item__name";
403
+ };
404
+
405
+ /** Properties for the AvatarGroup.Item sub-component: the props of an Avatar. */
406
+ export declare type AvatarGroupItemProps = AvatarProps;
407
+
408
+ /** The layouts of an AvatarGroup. */
409
+ export declare type AvatarGroupLayout = 'stack' | 'spread' | 'pie';
410
+
411
+ /** Why the popup of an AvatarGroup opens or closes: its trigger, or a dismissal. */
412
+ export declare type AvatarGroupOpenChangeDetails = OpenChangeDetails<DismissReason | 'trigger'>;
413
+
414
+ /**
415
+ * The overflow of an AvatarGroup, written by hand: a "+N" button that opens a popup listing its
416
+ * children (`AvatarGroup.Item`s, `Avatar`s, text or other elements). Write it as a child of the
417
+ * group to replace the overflow that `max` makes; its `count`, `indicator`, `label`, `open` and
418
+ * `onOpenChange` take over what `max` would have derived. Tab leaves the popup from the button.
419
+ */
420
+ export declare const AvatarGroupPopover: {
421
+ ({ children, indicator, count, label: labelProp, unnamedMemberLabel, open: openProp, defaultOpen, onOpenChange, className, ref, }: AvatarGroupPopoverProps): React_2.JSX.Element;
422
+ displayName: string;
423
+ };
424
+
425
+ /** AvatarGroup.Popover: `root` on the overflow button (which also carries the group's button class). */
426
+ export declare const avatarGroupPopoverClassNames: {
427
+ readonly root: "wave-avatar-group-popover";
428
+ };
429
+
430
+ /** Properties for the AvatarGroup.Popover sub-component. */
431
+ export declare interface AvatarGroupPopoverProps {
432
+ /** The overflow members: `AvatarGroup.Item`s, `Avatar`s, text or other elements. */
433
+ children?: React_2.ReactNode;
434
+ /**
435
+ * What the overflow button shows: the number of hidden members (`+3`, capped at `99+`), or an
436
+ * icon.
437
+ * @default 'count'
438
+ */
439
+ indicator?: 'count' | 'icon';
440
+ /** The number of hidden members. @default the number of `children` */
441
+ count?: number;
442
+ /**
443
+ * Accessible name of the overflow button and its popup. A function receives the number of hidden
444
+ * members.
445
+ * @default (count) => `${count} more`
446
+ */
447
+ label?: string | ((count: number) => string);
448
+ /**
449
+ * Text listed in the overflow popup for a hidden member that has no accessible name.
450
+ * @default 'Unnamed member'
451
+ */
452
+ unnamedMemberLabel?: string;
453
+ /** Whether the popup is open (controlled). */
454
+ open?: boolean;
455
+ /**
456
+ * Whether the popup starts open (uncontrolled).
457
+ * @default false
458
+ */
459
+ defaultOpen?: boolean;
460
+ /** Called when the popup asks to open or close, with the reason (`trigger`, `escape`, …). */
461
+ onOpenChange?: (open: boolean, details?: AvatarGroupOpenChangeDetails) => void;
462
+ /** Extra classes for the overflow button. */
463
+ className?: string;
464
+ /** Ref to the overflow `<button>`. */
465
+ ref?: React_2.Ref<HTMLButtonElement>;
466
+ }
467
+
368
468
  /** Properties for the AvatarGroup component. */
369
469
  export declare interface AvatarGroupProps extends React_2.HTMLAttributes<HTMLDivElement> {
370
470
  /**
371
471
  * Maximum number of avatars to display. The others are replaced by an overflow button that
372
472
  * lists their names. `0` or a negative value shows only the overflow button, a fraction is
373
473
  * rounded down, and `NaN` shows every member (as without `max`). The members of a Fragment
374
- * count one by one.
474
+ * count one by one. A `pie` shows at most three.
375
475
  */
376
476
  max?: number;
377
- /** Size of the overflow button (match it to the avatars).
378
- * @default 'medium'
477
+ /**
478
+ * Size of the avatars. It reaches the members that set no `size` of their own, and the overflow
479
+ * button.
480
+ * @default 'medium' ('large' in a `pie`)
379
481
  */
380
- size?: Size;
482
+ size?: AvatarSize;
483
+ /**
484
+ * How the members are laid out: `stack` overlaps them, `spread` puts them side by side, `pie`
485
+ * draws up to three of them as the wedges of one circle (the group's name is then the only name).
486
+ * @default 'stack'
487
+ */
488
+ layout?: AvatarGroupLayout;
489
+ /**
490
+ * What the overflow button shows: the number of hidden members (`+3`, capped at `99+`), or an
491
+ * icon.
492
+ * @default 'count'
493
+ */
494
+ overflowIndicator?: 'count' | 'icon';
381
495
  /**
382
496
  * Accessible name of the overflow button (and its popup). A function receives the number of
383
497
  * hidden members. Localise it here.
@@ -391,10 +505,31 @@ export declare interface AvatarGroupProps extends React_2.HTMLAttributes<HTMLDiv
391
505
  * @default 'Unnamed member'
392
506
  */
393
507
  unnamedMemberLabel?: string;
508
+ /** Whether the overflow popup is open (controlled). */
509
+ open?: boolean;
510
+ /**
511
+ * Whether the overflow popup starts open (uncontrolled).
512
+ * @default false
513
+ */
514
+ defaultOpen?: boolean;
515
+ /**
516
+ * Called when the overflow popup asks to open or close, with the reason: `trigger` (the button),
517
+ * `escape`, `outside-press` or `focus-outside`.
518
+ */
519
+ onOpenChange?: (open: boolean, details?: AvatarGroupOpenChangeDetails) => void;
394
520
  /** Ref to the root `<div>`. */
395
521
  ref?: React_2.Ref<HTMLDivElement>;
396
522
  }
397
523
 
524
+ /** The named colors of an Avatar: the persona palette (`--wave-palette-<name>` tokens). */
525
+ export declare type AvatarNamedColor = 'red' | 'pumpkin' | 'gold' | 'forest' | 'teal' | 'blue' | 'navy' | 'lavender' | 'purple' | 'magenta' | 'brown' | 'steel';
526
+
527
+ /**
528
+ * The numeric sizes of an Avatar, in pixels (Fluent's 14 sizes). A literal union: Tailwind can only
529
+ * generate the classes of {@link avatarBoxClasses}.
530
+ */
531
+ export declare type AvatarNumericSize = 16 | 20 | 24 | 28 | 32 | 36 | 40 | 48 | 56 | 64 | 72 | 96 | 120 | 128;
532
+
398
533
  /** Properties for the Avatar component. */
399
534
  export declare interface AvatarProps extends React_2.HTMLAttributes<HTMLSpanElement> {
400
535
  /**
@@ -409,11 +544,49 @@ export declare interface AvatarProps extends React_2.HTMLAttributes<HTMLSpanElem
409
544
  */
410
545
  name?: string;
411
546
  /**
412
- * Size of the avatar. Without it, an Avatar in the `media` of a tag (Tag, InteractionTag) takes
413
- * the tag's media box instead: 24, 20 or 16px by the tag's size.
547
+ * Size of the avatar: a named size (`extra-small` 24px to `extra-large` 56px) or a pixel size from
548
+ * 16 to 128. Without it, an Avatar in the `media` of a tag (Tag, InteractionTag) takes the tag's
549
+ * media box instead: 24, 20 or 16px by the tag's size.
414
550
  * @default 'medium'
415
551
  */
416
- size?: Size;
552
+ size?: AvatarSize;
553
+ /**
554
+ * Shape of the avatar. Without it, an Avatar in the `media` of a rounded tag is square.
555
+ * @default 'circular'
556
+ */
557
+ shape?: 'circular' | 'square';
558
+ /**
559
+ * Color of the avatar when it shows initials: `brand` (the primary color), `neutral` (muted),
560
+ * `colorful` (one of the named colors, chosen from `idForColor`, else from `name`; `brand`
561
+ * without either) or a named color of the persona palette. An image, or an icon, keeps its own
562
+ * look.
563
+ * @default 'brand'
564
+ */
565
+ color?: AvatarColor;
566
+ /**
567
+ * Whether the person is active: `active` draws the `activeAppearance` around the avatar, `inactive`
568
+ * dims it, `unset` shows neither.
569
+ * @default 'unset'
570
+ */
571
+ active?: 'active' | 'inactive' | 'unset';
572
+ /**
573
+ * How an `active` avatar is marked: a `ring`, a `shadow`, both (`ring-shadow`) or a `glow` in the
574
+ * primary color.
575
+ * @default 'ring'
576
+ */
577
+ activeAppearance?: 'ring' | 'ring-shadow' | 'shadow' | 'glow';
578
+ /**
579
+ * A stable id (a user id, say) that picks the color of `color="colorful"`, so the same person has
580
+ * the same color wherever they are shown, whatever their name looks like.
581
+ */
582
+ idForColor?: string;
583
+ /**
584
+ * The initials shown when there is no image and no icon, instead of the ones computed from
585
+ * `name` (see `getInitials`): a string, an element or an object of `<span>` attributes. A value
586
+ * that renders nothing (`''`, `[]`) keeps the computed initials. Rendered in an `aria-hidden`
587
+ * `<span>`.
588
+ */
589
+ initials?: Slot<'span'>;
417
590
  /**
418
591
  * Icon shown instead of the initials when there is no image. Rendered in an `aria-hidden`
419
592
  * `<span>` (a slot object can override its attributes). A falsy value (`null`, `false`, `''`,
@@ -455,6 +628,9 @@ export declare interface AvatarProps extends React_2.HTMLAttributes<HTMLSpanElem
455
628
  ref?: React_2.Ref<HTMLSpanElement>;
456
629
  }
457
630
 
631
+ /** The size of an Avatar: a named size (24 to 56px) or one of the {@link AvatarNumericSize}s. */
632
+ export declare type AvatarSize = Size | AvatarNumericSize;
633
+
458
634
  /** How a modal surface's backdrop paints the page: `dimmed`, or `transparent` (a modal over another). */
459
635
  export declare type BackdropAppearance = 'dimmed' | 'transparent';
460
636
 
@@ -1071,7 +1247,8 @@ export declare interface CalendarValueChangeDetails {
1071
1247
  }
1072
1248
 
1073
1249
  /**
1074
- * A surface that groups related content, with `Card.Header`, `Card.Body` and `Card.Footer`.
1250
+ * A surface that groups related content, with `Card.Header`, `Card.Preview`, `Card.Body` and
1251
+ * `Card.Footer`.
1075
1252
  *
1076
1253
  * **Selectable cards** (`onSelect`) come in two patterns:
1077
1254
  * - A card without interactive content is itself the control (`selectionControl="card"`, the
@@ -1088,7 +1265,7 @@ export declare interface CalendarValueChangeDetails {
1088
1265
  * the selected look only; its state is not exposed to assistive technology.
1089
1266
  *
1090
1267
  * React Server Components cannot dot into a client module: import the flat names `CardHeader`,
1091
- * `CardBody` and `CardFooter` there; `Card.Header` etc. work in client files.
1268
+ * `CardPreview`, `CardBody` and `CardFooter` there; `Card.Header` etc. work in client files.
1092
1269
  *
1093
1270
  * @example
1094
1271
  * <Card onSelect={toggle} selected={selected}>
@@ -1102,10 +1279,14 @@ export declare interface CalendarValueChangeDetails {
1102
1279
  */
1103
1280
  export declare const Card: PolymorphicComponent<"div", CardOwnProps> & {
1104
1281
  Header: PolymorphicComponent<"div", CardHeaderOwnProps>;
1282
+ Preview: PolymorphicComponent<"div", CardPreviewOwnProps>;
1105
1283
  Body: PolymorphicComponent<"div", CardBodyOwnProps>;
1106
1284
  Footer: PolymorphicComponent<"div", CardFooterOwnProps>;
1107
1285
  };
1108
1286
 
1287
+ /** The look of a Card: a filled surface with a shadow, a muted fill, an outline, or no surface. */
1288
+ export declare type CardAppearance = 'filled' | 'filled-alternative' | 'outline' | 'subtle';
1289
+
1109
1290
  /**
1110
1291
  * The main content of a {@link Card}. Flat export for React Server Components (`Card.Body` in
1111
1292
  * client files).
@@ -1131,6 +1312,7 @@ export declare const cardClassNames: {
1131
1312
  readonly root: "wave-card";
1132
1313
  readonly checkbox: "wave-card__checkbox";
1133
1314
  readonly checkmark: "wave-card__checkmark";
1315
+ readonly floatingAction: "wave-card__floating-action";
1134
1316
  };
1135
1317
 
1136
1318
  /**
@@ -1160,8 +1342,11 @@ export declare const CardHeader: PolymorphicComponent<'div', CardHeaderOwnProps>
1160
1342
  /** Card.Header: `root` on the rendered element; `title` on the title; `subtitle` on the subtitle. */
1161
1343
  export declare const cardHeaderClassNames: {
1162
1344
  readonly root: "wave-card-header";
1345
+ readonly image: "wave-card-header__image";
1346
+ readonly text: "wave-card-header__text";
1163
1347
  readonly title: "wave-card-header__title";
1164
1348
  readonly subtitle: "wave-card-header__subtitle";
1349
+ readonly action: "wave-card-header__action";
1165
1350
  };
1166
1351
 
1167
1352
  /** The Card.Header's own props (component-specific props only). */
@@ -1174,6 +1359,16 @@ export declare interface CardHeaderOwnProps {
1174
1359
  title?: React_2.ReactNode;
1175
1360
  /** Subtitle content displayed below the title (none when it renders nothing, as `title`). */
1176
1361
  subtitle?: React_2.ReactNode;
1362
+ /**
1363
+ * An image beside the text, at the start: an `Avatar`, an icon, a logo. A value that renders
1364
+ * nothing renders no element.
1365
+ */
1366
+ image?: Slot<'span'>;
1367
+ /**
1368
+ * An action beside the text, at the end: a menu button, say. A value that renders nothing
1369
+ * renders no element.
1370
+ */
1371
+ action?: Slot<'span'>;
1177
1372
  }
1178
1373
 
1179
1374
  /** Props of {@link CardHeader} rendered as `C` (default `'div'`), including `ref`. */
@@ -1184,6 +1379,25 @@ export declare type CardHeaderProps<C extends React_2.ElementType = 'div'> = Pol
1184
1379
  * Every other prop comes from the rendered element (`as`).
1185
1380
  */
1186
1381
  export declare interface CardOwnProps {
1382
+ /**
1383
+ * Look of the card: `filled` (a surface with a border and a shadow), `filled-alternative` (a
1384
+ * muted fill), `outline` (a border only) or `subtle` (no surface until hovered or selected). A
1385
+ * selectable card gets a hover and pressed look for its appearance; the selected look is the
1386
+ * same in every appearance.
1387
+ * @default 'filled'
1388
+ */
1389
+ appearance?: CardAppearance;
1390
+ /**
1391
+ * Padding of the card's parts: `small` 0.75rem, `medium` 1rem, `large` 1.25rem.
1392
+ * @default 'medium'
1393
+ */
1394
+ size?: CoreSize;
1395
+ /**
1396
+ * Layout of the card's parts: `vertical` stacks them, `horizontal` puts them in a row (put the
1397
+ * text parts in one wrapper element to keep them stacked beside a `Card.Preview`).
1398
+ * @default 'vertical'
1399
+ */
1400
+ orientation?: Orientation;
1187
1401
  /**
1188
1402
  * Whether the card is selected. Shown with the selected colors plus non-color cues: a 2px primary
1189
1403
  * border (a 1px border plus an inset 1px ring), a Highlight outline in forced-colors mode, and a
@@ -1225,8 +1439,54 @@ export declare interface CardOwnProps {
1225
1439
  * `Card.Header` title, which the checkbox references with `aria-labelledby`.
1226
1440
  */
1227
1441
  selectLabel?: string;
1442
+ /**
1443
+ * The built-in checkbox of `selectionControl="checkbox"`: an object of `<input>` attributes is
1444
+ * merged onto it (a class, `aria-describedby`, `name`; its type, checked state and change
1445
+ * handling stay the card's), an element replaces it (give that control its own name and call
1446
+ * `onSelect` from it), and `null` or `false` removes it, for a control you render elsewhere.
1447
+ * Ignored with the default `selectionControl`.
1448
+ */
1449
+ checkbox?: Slot<'input'>;
1450
+ /**
1451
+ * An action over the top end corner of the card (a menu button, say). A card with one is
1452
+ * positioned; with `selectionControl="checkbox"` the built-in checkbox then moves to the top
1453
+ * start corner. Content that renders nothing renders no element.
1454
+ */
1455
+ floatingAction?: Slot<'span'>;
1228
1456
  }
1229
1457
 
1458
+ /**
1459
+ * Edge-to-edge media of a {@link Card} (an image, a video, a map), with an optional `logo` over its
1460
+ * bottom start corner. It has no padding: in a vertical card it fills the width, in a horizontal
1461
+ * one it is the full-height block at the start. Flat export for React Server Components
1462
+ * (`Card.Preview` in client files).
1463
+ *
1464
+ * @example
1465
+ * <Card>
1466
+ * <Card.Preview logo={<img alt="Contoso" src="/logo.svg" />}><img alt="" src="/cover.jpg" /></Card.Preview>
1467
+ * <Card.Header title="Contoso" />
1468
+ * </Card>
1469
+ */
1470
+ export declare const CardPreview: PolymorphicComponent<'div', CardPreviewOwnProps>;
1471
+
1472
+ /** Card.Preview: `root` on the rendered element; `logo` on the logo over its bottom start corner. */
1473
+ export declare const cardPreviewClassNames: {
1474
+ readonly root: "wave-card-preview";
1475
+ readonly logo: "wave-card-preview__logo";
1476
+ };
1477
+
1478
+ /** The Card.Preview's own props (component-specific props only). */
1479
+ export declare interface CardPreviewOwnProps {
1480
+ /**
1481
+ * A logo placed over the bottom start corner of the preview: a string, an element or an object
1482
+ * of `<span>` attributes. A value that renders nothing renders no element.
1483
+ */
1484
+ logo?: Slot<'span'>;
1485
+ }
1486
+
1487
+ /** Props of {@link CardPreview} rendered as `C` (default `'div'`), including `ref`. */
1488
+ export declare type CardPreviewProps<C extends React_2.ElementType = 'div'> = PolymorphicProps<C, CardPreviewOwnProps>;
1489
+
1230
1490
  /**
1231
1491
  * Props of {@link Card} rendered as `C` (default `'div'`). `CardProps` without a type argument is
1232
1492
  * the 0.4 name: the props of a Card rendered as a `<div>`, including `ref`.
@@ -1261,19 +1521,32 @@ export declare type CardProps<C extends React_2.ElementType = 'div'> = Polymorph
1261
1521
  * - The controls are layered over the slides inside the carousel's own stacking context, so they
1262
1522
  * never paint over page headers that stay in view while the page scrolls.
1263
1523
  *
1264
- * Compound access (`Carousel.Item`) needs a client module; React Server Components import the
1265
- * flat name `CarouselItem` instead.
1524
+ * - `groupSize` shows several slides per page, `draggable` lets the pointer drag them, and a
1525
+ * `thumbnail` on a `Carousel.Item` turns the picker into a row of thumbnails.
1526
+ * - `controlsLayout` places the Previous and Next buttons over the slides (`overlay`,
1527
+ * `overlay-wide`) or beside them (`inline`, `inline-wide`); `Carousel.Button` replaces the
1528
+ * built-in button of its `direction` with one of your own glyph.
1529
+ *
1530
+ * Compound access (`Carousel.Item`, `Carousel.Button`) needs a client module; React Server
1531
+ * Components import the flat names `CarouselItem` and `CarouselButton` instead.
1266
1532
  */
1267
1533
  export declare const Carousel: {
1268
- ({ value: controlledValue, defaultValue, onValueChange, autoPlay, autoPlayInterval, autoPlayLabels, labels, loop, className, children, onMouseEnter, onMouseLeave, onFocus, onBlur, ref, ...rest }: CarouselProps): React_2.JSX.Element;
1534
+ ({ value: controlledValue, defaultValue, onValueChange, autoPlay, autoPlayInterval, autoPlayLabels, labels, loop, groupSize, align, draggable, controlsLayout, appearance, className, children, onMouseEnter, onMouseLeave, onFocus, onBlur, ref, ...rest }: CarouselProps): React_2.JSX.Element;
1269
1535
  displayName: string;
1270
1536
  } & {
1271
1537
  Item: {
1272
- ({ className, children, ref, ...rest }: CarouselItemProps): React_2.JSX.Element;
1538
+ ({ thumbnail: _thumbnail, className, children, ref, ...rest }: CarouselItemProps): React_2.JSX.Element;
1539
+ displayName: string;
1540
+ };
1541
+ Button: {
1542
+ ({ direction, onClick, className, children, ref, ...rest }: CarouselButtonProps): React_2.JSX.Element;
1273
1543
  displayName: string;
1274
1544
  };
1275
1545
  };
1276
1546
 
1547
+ /** How a Carousel is drawn: `flat`, or `elevated` with rounded corners and a shadow. */
1548
+ export declare type CarouselAppearance = 'flat' | 'elevated';
1549
+
1277
1550
  /** Accessible names of the rotation control shown while `autoPlay` is on. */
1278
1551
  export declare interface CarouselAutoPlayLabels {
1279
1552
  /** Name of the control while slides rotate (activating it stops the rotation).
@@ -1286,15 +1559,42 @@ export declare interface CarouselAutoPlayLabels {
1286
1559
  play?: string;
1287
1560
  }
1288
1561
 
1562
+ /**
1563
+ * A Previous or Next button written in a {@link Carousel}, for a glyph or look of your own.
1564
+ * Write it as a direct child of the Carousel: it replaces the built-in button of its
1565
+ * `direction`, takes its place in the layout and is named, disabled and wired to the slides the
1566
+ * same way (`labels.previous`/`labels.next`, `aria-controls`, `aria-disabled` at the ends
1567
+ * without `loop`, which keeps it focusable). Its children replace the chevron, which mirrors in
1568
+ * right-to-left layouts; `aria-label` replaces the name.
1569
+ */
1570
+ export declare const CarouselButton: {
1571
+ ({ direction, onClick, className, children, ref, ...rest }: CarouselButtonProps): React_2.JSX.Element;
1572
+ displayName: string;
1573
+ };
1574
+
1575
+ /** Carousel.Button: `root` on the button element. */
1576
+ export declare const carouselButtonClassNames: {
1577
+ readonly root: "wave-carousel-button";
1578
+ };
1579
+
1580
+ /** Properties for the CarouselButton sub-component. */
1581
+ export declare interface CarouselButtonProps extends React_2.ButtonHTMLAttributes<HTMLButtonElement> {
1582
+ /** Which way the button moves the carousel. */
1583
+ direction: 'previous' | 'next';
1584
+ ref?: React_2.Ref<HTMLButtonElement>;
1585
+ }
1586
+
1289
1587
  /**
1290
1588
  * Carousel: `root` on the `role="region"` element; `autoPlayButton` on the pause and start
1291
- * button; `track` on the moving element around the slides; `slide` on each slide wrapper;
1589
+ * button; `viewport` on the clipping element around the track; `track` on the moving element
1590
+ * around the slides; `slide` on each slide wrapper;
1292
1591
  * `previousButton` and `nextButton` on the arrow buttons; `picker` on the `role="group"` of
1293
1592
  * picker buttons; `pickerButton` on each of them; `pickerIndicator` on each button's dot.
1294
1593
  */
1295
1594
  export declare const carouselClassNames: {
1296
1595
  readonly root: "wave-carousel";
1297
1596
  readonly autoPlayButton: "wave-carousel__auto-play-button";
1597
+ readonly viewport: "wave-carousel__viewport";
1298
1598
  readonly track: "wave-carousel__track";
1299
1599
  readonly slide: "wave-carousel__slide";
1300
1600
  readonly previousButton: "wave-carousel__previous-button";
@@ -1304,23 +1604,35 @@ export declare const carouselClassNames: {
1304
1604
  readonly pickerIndicator: "wave-carousel__picker-indicator";
1305
1605
  };
1306
1606
 
1607
+ /** Where a Carousel puts its Previous and Next buttons. */
1608
+ export declare type CarouselControlsLayout = 'overlay' | 'inline' | 'overlay-wide' | 'inline-wide';
1609
+
1307
1610
  /**
1308
1611
  * One slide of a {@link Carousel}. Write it in the Carousel, directly or in a Fragment: a component
1309
1612
  * that renders `Carousel.Item` itself is not recognised as a slide (put that component inside the
1310
1613
  * `Carousel.Item` instead).
1311
1614
  */
1312
1615
  export declare const CarouselItem: {
1313
- ({ className, children, ref, ...rest }: CarouselItemProps): React_2.JSX.Element;
1616
+ ({ thumbnail: _thumbnail, className, children, ref, ...rest }: CarouselItemProps): React_2.JSX.Element;
1314
1617
  displayName: string;
1315
1618
  };
1316
1619
 
1317
- /** Carousel.Item: `root` on the item element. */
1620
+ /** Carousel.Item: `root` on the item element; `thumbnail` on the image in its picker button. */
1318
1621
  export declare const carouselItemClassNames: {
1319
1622
  readonly root: "wave-carousel-item";
1623
+ readonly thumbnail: "wave-carousel-item__thumbnail";
1320
1624
  };
1321
1625
 
1322
1626
  /** Properties for the CarouselItem sub-component. */
1323
1627
  export declare interface CarouselItemProps extends React_2.HTMLAttributes<HTMLDivElement> {
1628
+ /**
1629
+ * An image for this slide's button in the picker, in place of the dot. A string is the image
1630
+ * `src`; an object sets the `<img>`'s attributes. The button keeps its slide-label name, so the
1631
+ * image is decorative (`alt=""`). When any slide has one, the picker becomes a row of
1632
+ * thumbnails below the slides; a slide without one keeps its dot. With `groupSize` above 1, a
1633
+ * page shows the thumbnail of its first slide.
1634
+ */
1635
+ thumbnail?: Slot<'img'>;
1324
1636
  ref?: React_2.Ref<HTMLDivElement>;
1325
1637
  }
1326
1638
 
@@ -1350,6 +1662,13 @@ export declare interface CarouselLabels {
1350
1662
  * @default (index, total) => `Slide ${index + 1} of ${total}`
1351
1663
  */
1352
1664
  slide?: (index: number, total: number) => string;
1665
+ /**
1666
+ * Name of a page of several slides, from the one-based number of its first and last slide, out
1667
+ * of `total` slides (`groupSize` above 1). It names the page's picker button and is announced
1668
+ * by the live region when the page is shown. A page of one slide uses `slide`.
1669
+ * @default (start, end, total) => `Slides ${start} to ${end} of ${total}`
1670
+ */
1671
+ slides?: (start: number, end: number, total: number) => string;
1353
1672
  /** How assistive technology announces the carousel region (`aria-roledescription`).
1354
1673
  * @default 'carousel'
1355
1674
  */
@@ -1362,14 +1681,57 @@ export declare interface CarouselLabels {
1362
1681
 
1363
1682
  /** Properties for the Carousel component. */
1364
1683
  export declare interface CarouselProps extends React_2.HTMLAttributes<HTMLDivElement> {
1365
- /** Controlled index of the currently active slide. Out-of-range values show the nearest slide. */
1684
+ /**
1685
+ * Controlled index of the active slide: with `groupSize` above 1, the first slide of the shown
1686
+ * page. A value in the middle of a page shows that page and out-of-range values show the
1687
+ * nearest one.
1688
+ */
1366
1689
  value?: number;
1367
1690
  /** Default active slide index for uncontrolled usage.
1368
1691
  * @default 0
1369
1692
  */
1370
1693
  defaultValue?: number;
1371
- /** Called with the new index when the active slide changes (not when it stays the same). */
1694
+ /**
1695
+ * Called with the new index when the active slide changes (not when it stays the same): the
1696
+ * first slide of the new page when `groupSize` is above 1.
1697
+ */
1372
1698
  onValueChange?: (index: number) => void;
1699
+ /**
1700
+ * How many slides one page shows: a number, or `'auto'` to show as many as fit the width of the
1701
+ * carousel (the slides keep their own width, which must be equal). Previous, Next, the picker
1702
+ * (one button per page), looping and autoplay move by page, and the slides of the shown page
1703
+ * form one arrow-key focus group. With `1` each slide fills the width, as before.
1704
+ * @default 1
1705
+ */
1706
+ groupSize?: number | 'auto';
1707
+ /**
1708
+ * With `groupSize="auto"`, where the shown page sits when its slides do not fill the width.
1709
+ * @default 'start'
1710
+ */
1711
+ align?: 'start' | 'center' | 'end';
1712
+ /**
1713
+ * Lets the pointer drag the slides (mouse, touch and pen). The track follows the pointer and,
1714
+ * on release, the page changes when the drag passed a quarter of the width or left fast, else
1715
+ * it snaps back; the direction follows the carousel's. The click that ends a drag is not
1716
+ * delivered to the slide, and a vertical swipe still scrolls the page. Dragging pauses
1717
+ * autoplay like the pointer over the carousel does. The buttons and the keyboard stay the way
1718
+ * to operate the carousel without a pointer.
1719
+ * @default false
1720
+ */
1721
+ draggable?: boolean;
1722
+ /**
1723
+ * Where the Previous and Next buttons go. `overlay` floats round buttons over the slides;
1724
+ * `overlay-wide` makes them full-height strips at the edges; `inline` puts them in a row with
1725
+ * the slides, outside them; `inline-wide` is `inline` with full-height buttons. The rotation
1726
+ * control stays the first focusable element at the start corner in every layout.
1727
+ * @default 'overlay'
1728
+ */
1729
+ controlsLayout?: CarouselControlsLayout;
1730
+ /**
1731
+ * `elevated` rounds the corners and adds a shadow.
1732
+ * @default 'flat'
1733
+ */
1734
+ appearance?: CarouselAppearance;
1373
1735
  /**
1374
1736
  * Rotates the slides automatically. A Pause/Start control is rendered as the first focusable
1375
1737
  * element. Rotation pauses while focus is anywhere inside the carousel (the control included;
@@ -3387,6 +3749,12 @@ export declare interface DatePickerProps extends Omit<React_2.HTMLAttributes<HTM
3387
3749
  /** A day of the week, as `Date.prototype.getDay()` numbers them: 0 is Sunday, 6 is Saturday. */
3388
3750
  export declare type DayOfWeek = 0 | 1 | 2 | 3 | 4 | 5 | 6;
3389
3751
 
3752
+ /**
3753
+ * The 0.5 spellings of two presence statuses. They still work and warn once in development; use
3754
+ * `'do-not-disturb'` and `'out-of-office'` instead. Removed in 1.0.
3755
+ */
3756
+ export declare type DeprecatedPresenceStatus = 'dnd' | 'oof';
3757
+
3390
3758
  /**
3391
3759
  * A dialog (Fluent UI v2 style), modal by default: `Dialog` holds the open state; `Dialog.Trigger`
3392
3760
  * opens and closes it and `Dialog.Content` renders the surface in a portal while open (and, with
@@ -5258,6 +5626,38 @@ export declare function getFirstTabbable(container: Element, options?: {
5258
5626
  includeContainer?: boolean;
5259
5627
  }): HTMLElement | null;
5260
5628
 
5629
+ /**
5630
+ * The initials of a person's name, for an avatar: the first letter of the first and, with two or
5631
+ * more words, of the last word, upper-cased.
5632
+ *
5633
+ * Text in `()`, `[]`, `{}` and `<>` and all punctuation are ignored (`'Jane Doe (Contoso)'` gives
5634
+ * `'JD'`). A name with no letters (a phone number, an emoji) or with letters of a script without
5635
+ * letter initials (Han, Hiragana, Katakana, Hangul, Thai, Lao, Khmer, Myanmar, Tibetan) gives
5636
+ * `''`, so an avatar falls back to its person glyph. Server-safe.
5637
+ *
5638
+ * @example
5639
+ * getInitials('Jane Doe (Contoso)'); // 'JD'
5640
+ * getInitials('Jane Doe', { dir: 'rtl' }); // 'DJ'
5641
+ * getInitials('+1 (555) 010-0000'); // ''
5642
+ */
5643
+ export declare function getInitials(name: string, options?: GetInitialsOptions): string;
5644
+
5645
+ /** Options of {@link getInitials}. */
5646
+ export declare interface GetInitialsOptions {
5647
+ /**
5648
+ * Text direction of the place the initials are shown. In `'rtl'` the first and last initial of a
5649
+ * left-to-right script swap, so they read in the order of the name on screen; a Hebrew or Arabic
5650
+ * name keeps its order, which the text direction already mirrors.
5651
+ * @default 'ltr'
5652
+ */
5653
+ dir?: 'ltr' | 'rtl';
5654
+ /**
5655
+ * Keep only the first initial, also for a name of several words.
5656
+ * @default false
5657
+ */
5658
+ firstInitialOnly?: boolean;
5659
+ }
5660
+
5261
5661
  /** The last tabbable element inside `container`, or `null`. */
5262
5662
  export declare function getLastTabbable(container: Element, options?: {
5263
5663
  includeContainer?: boolean;
@@ -9157,17 +9557,53 @@ export declare interface PaginationProps extends Omit<React_2.HTMLAttributes<HTM
9157
9557
  }
9158
9558
 
9159
9559
  /**
9160
- * A person's avatar next to their name and optional secondary text (job title, email), with an
9161
- * optional presence badge.
9560
+ * Splits the items of an AvatarGroup into the ones shown inline and the ones in the overflow list.
9561
+ * `AvatarGroup` uses it for `max`; use it yourself to render `AvatarGroup.Item`s and
9562
+ * `AvatarGroup.Popover` from your own list. Server-safe: it imports nothing.
9563
+ *
9564
+ * @example
9565
+ * const { inlineItems, overflowItems } = partitionAvatarGroupItems({ items: people, maxInlineItems: 4 });
9566
+ */
9567
+ export declare function partitionAvatarGroupItems<T>({ items, maxInlineItems, layout, }: PartitionAvatarGroupItemsOptions<T>): PartitionAvatarGroupItemsResult<T>;
9568
+
9569
+ /** Options of {@link partitionAvatarGroupItems}. */
9570
+ export declare interface PartitionAvatarGroupItemsOptions<T> {
9571
+ /** All the items of the group. */
9572
+ items: readonly T[];
9573
+ /**
9574
+ * How many items are shown inline; the rest go to the overflow. A fraction is rounded down, `0`
9575
+ * or a negative value shows none, and `undefined` or `NaN` shows all (up to the layout's cap).
9576
+ */
9577
+ maxInlineItems?: number;
9578
+ /**
9579
+ * The layout of the group. A `pie` shows at most three items inline.
9580
+ * @default 'stack'
9581
+ */
9582
+ layout?: AvatarGroupLayout;
9583
+ }
9584
+
9585
+ /** Result of {@link partitionAvatarGroupItems}. */
9586
+ export declare interface PartitionAvatarGroupItemsResult<T> {
9587
+ /** The items shown inline, in order. */
9588
+ inlineItems: T[];
9589
+ /** The items in the overflow list, in order; `undefined` when nothing overflows. */
9590
+ overflowItems: T[] | undefined;
9591
+ }
9592
+
9593
+ /**
9594
+ * A person's avatar next to their name and up to three more text lines (job title, location,
9595
+ * status), with an optional presence badge. The text can sit after, before or below the avatar
9596
+ * (`textPosition`), `presenceOnly` swaps the avatar for the presence badge, and the text scales with
9597
+ * `size` up to `huge`.
9162
9598
  *
9163
9599
  * The built-in avatar is decorative (`<Avatar decorative>`): the visible name is announced once,
9164
9600
  * not a second time as the avatar's image name. The presence badge stays exposed as a named image.
9165
9601
  *
9166
9602
  * @example
9167
- * <Persona name="Jane Doe" secondaryText="Designer" status="available" />
9603
+ * <Persona name="Jane Doe" secondaryText="Designer" tertiaryText="Oslo" status="available" />
9168
9604
  */
9169
9605
  export declare const Persona: {
9170
- ({ name, secondaryText, src, size, status, avatar, badge, className, ref, ...props }: PersonaProps): React_2.JSX.Element;
9606
+ ({ name, primaryText, secondaryText, tertiaryText, quaternaryText, textPosition, textAlignment, presenceOnly, src, size, status, avatar, badge, className, ref, ...props }: PersonaProps): React_2.JSX.Element;
9171
9607
  displayName: string;
9172
9608
  };
9173
9609
 
@@ -9182,20 +9618,52 @@ export declare const personaClassNames: {
9182
9618
  readonly badge: "wave-persona__badge";
9183
9619
  readonly primaryText: "wave-persona__primary-text";
9184
9620
  readonly secondaryText: "wave-persona__secondary-text";
9621
+ readonly tertiaryText: "wave-persona__tertiary-text";
9622
+ readonly quaternaryText: "wave-persona__quaternary-text";
9185
9623
  };
9186
9624
 
9187
9625
  /** Properties for the Persona component. */
9188
9626
  export declare interface PersonaProps extends React_2.HTMLAttributes<HTMLDivElement> {
9189
- /** Display name of the person. */
9190
- name: string;
9191
- /** Secondary text such as job title or email. */
9192
- secondaryText?: string;
9627
+ /**
9628
+ * Display name of the person. It gives the avatar its initials and the first text line its text
9629
+ * (unless `primaryText` is given). A persona with neither `name` nor `primaryText` warns in
9630
+ * development.
9631
+ */
9632
+ name?: string;
9633
+ /**
9634
+ * The first text line (the name). A string, an element or an object of `<span>` attributes.
9635
+ * @default the `name`
9636
+ */
9637
+ primaryText?: Slot<'span'>;
9638
+ /** The second text line, such as a job title or email. */
9639
+ secondaryText?: Slot<'span'>;
9640
+ /** The third text line, such as a location. */
9641
+ tertiaryText?: Slot<'span'>;
9642
+ /** The fourth text line, such as a status message. */
9643
+ quaternaryText?: Slot<'span'>;
9644
+ /**
9645
+ * Where the text sits relative to the avatar, in reading order: after it, before it, or below it.
9646
+ * @default 'after'
9647
+ */
9648
+ textPosition?: 'after' | 'before' | 'below';
9649
+ /**
9650
+ * How the text lines align with each other.
9651
+ * @default 'start' ('center' when the text is below the avatar)
9652
+ */
9653
+ textAlignment?: 'start' | 'center';
9654
+ /**
9655
+ * Shows only the presence badge (from `status` or `badge`) in place of the avatar. The text
9656
+ * stays.
9657
+ * @default false
9658
+ */
9659
+ presenceOnly?: boolean;
9193
9660
  /** URL of the person's avatar image. */
9194
9661
  src?: string;
9195
- /** Size of the persona avatar.
9662
+ /**
9663
+ * Size of the persona: its avatar and its text.
9196
9664
  * @default 'medium'
9197
9665
  */
9198
- size?: Size;
9666
+ size?: PersonaSize;
9199
9667
  /** Presence status shown as a badge on the avatar. Ignored when a `badge` is given. */
9200
9668
  status?: PresenceStatus;
9201
9669
  /**
@@ -9215,6 +9683,9 @@ export declare interface PersonaProps extends React_2.HTMLAttributes<HTMLDivElem
9215
9683
  ref?: React_2.Ref<HTMLDivElement>;
9216
9684
  }
9217
9685
 
9686
+ /** The size of a Persona: the Avatar sizes, and `huge` (a 72px avatar). */
9687
+ export declare type PersonaSize = Size | 'huge';
9688
+
9218
9689
  /** How urgently assistive technology should read a message. */
9219
9690
  export declare type Politeness = 'polite' | 'assertive';
9220
9691
 
@@ -9737,9 +10208,10 @@ export declare interface PresenceAttributes {
9737
10208
  *
9738
10209
  * @example
9739
10210
  * <PresenceBadge status="busy" />
10211
+ * <PresenceBadge status="do-not-disturb" />
9740
10212
  */
9741
10213
  export declare const PresenceBadge: {
9742
- ({ status, size, className, ref, ...props }: PresenceBadgeProps): React_2.JSX.Element;
10214
+ ({ status: statusProp, size: sizeProp, className, ref, ...props }: PresenceBadgeProps): React_2.JSX.Element;
9743
10215
  displayName: string;
9744
10216
  };
9745
10217
 
@@ -9751,9 +10223,14 @@ export declare const presenceBadgeClassNames: {
9751
10223
 
9752
10224
  /** Properties for the PresenceBadge component. */
9753
10225
  export declare interface PresenceBadgeProps extends React_2.HTMLAttributes<HTMLSpanElement> {
9754
- /** Presence status to display. */
9755
- status: PresenceStatus;
9756
- /** Size of the presence indicator.
10226
+ /**
10227
+ * Presence status to display. `'dnd'` and `'oof'` are deprecated aliases of `'do-not-disturb'`
10228
+ * and `'out-of-office'`: they render the same and warn once in development (removed in 1.0).
10229
+ * @default 'available'
10230
+ */
10231
+ status?: PresenceStatus;
10232
+ /**
10233
+ * Size of the presence indicator. In the `badge` slot of an Avatar it is sized from the avatar.
9757
10234
  * @default 'medium'
9758
10235
  */
9759
10236
  size?: Size;
@@ -9779,8 +10256,11 @@ export declare interface PresenceProps extends UsePresenceOptions {
9779
10256
  children: React_2.ReactElement | ((presence: UsePresenceResult) => React_2.ReactNode);
9780
10257
  }
9781
10258
 
9782
- /** User presence status for Avatar and Persona components. */
9783
- export declare type PresenceStatus = 'available' | 'busy' | 'away' | 'offline' | 'dnd' | 'oof';
10259
+ /**
10260
+ * User presence status for Avatar and Persona components. `'dnd'` and `'oof'` are deprecated
10261
+ * aliases of `'do-not-disturb'` and `'out-of-office'` ({@link DeprecatedPresenceStatus}).
10262
+ */
10263
+ export declare type PresenceStatus = 'available' | 'busy' | 'away' | 'offline' | 'do-not-disturb' | 'out-of-office' | DeprecatedPresenceStatus;
9784
10264
 
9785
10265
  /**
9786
10266
  * Shows the progress of a task, or that a task is running (indeterminate, `value` omitted).
@@ -12019,11 +12499,11 @@ export declare interface TableRowProps extends React_2.HTMLAttributes<HTMLTableR
12019
12499
  * `TabListPanels`) for React Server Components, which cannot use the dotted form.
12020
12500
  */
12021
12501
  export declare const TabList: {
12022
- ({ value: valueProp, defaultValue: defaultValueProp, onValueChange, orientation: orientationProp, selectTabOnFocus, selectedValue, defaultSelectedValue, onTabSelect, vertical, className, children, onKeyDown, onFocus, ref, ...rest }: TabListProps): React_2.JSX.Element;
12502
+ ({ value: valueProp, defaultValue: defaultValueProp, onValueChange, orientation: orientationProp, appearance, size, selectTabOnFocus, selectedValue, defaultSelectedValue, onTabSelect, vertical, className, children, onKeyDown, onFocus, ref, ...rest }: TabListProps): React_2.JSX.Element;
12023
12503
  displayName: string;
12024
12504
  } & {
12025
12505
  Tab: {
12026
- ({ value, id: idProp, className, children, onClick, ref, ...rest }: TabProps): React_2.JSX.Element;
12506
+ ({ value, id: idProp, icon, className, children, onClick, ref, ...rest }: TabProps): React_2.JSX.Element;
12027
12507
  displayName: string;
12028
12508
  };
12029
12509
  Panel: {
@@ -12036,6 +12516,9 @@ export declare const TabList: {
12036
12516
  };
12037
12517
  };
12038
12518
 
12519
+ /** The look of a TabList: an underline, subtle fills, or circular subtle or filled tabs. */
12520
+ export declare type TabListAppearance = 'transparent' | 'subtle' | 'subtle-circular' | 'filled-circular';
12521
+
12039
12522
  /** TabList: `root` on the `role="tablist"` element. */
12040
12523
  export declare const tabListClassNames: {
12041
12524
  readonly root: "wave-tab-list";
@@ -12098,6 +12581,19 @@ export declare interface TabListProps extends Omit<React_2.HTMLAttributes<HTMLDi
12098
12581
  * @default 'horizontal'
12099
12582
  */
12100
12583
  orientation?: Orientation;
12584
+ /**
12585
+ * Look of the tabs: `transparent` underlines the selected tab, `subtle` and `subtle-circular`
12586
+ * fill it with a subtle color (square or fully rounded), `filled-circular` fills it with the
12587
+ * primary color. In forced colors the selected tab keeps a Highlight outline (or underline) in
12588
+ * every appearance.
12589
+ * @default 'transparent'
12590
+ */
12591
+ appearance?: TabListAppearance;
12592
+ /**
12593
+ * Size of the tabs: their padding and type (`medium` is 14px text on 16 by 8px padding).
12594
+ * @default 'medium'
12595
+ */
12596
+ size?: CoreSize;
12101
12597
  /**
12102
12598
  * Whether moving focus with the arrow keys, Home and End also selects the tab (automatic
12103
12599
  * activation, as in 0.5). With `false`, the keys only move focus and Enter, Space or a click
@@ -12129,13 +12625,14 @@ export declare interface TabListProps extends Omit<React_2.HTMLAttributes<HTMLDi
12129
12625
  * with its value is mounted.
12130
12626
  */
12131
12627
  export declare const TabListTab: {
12132
- ({ value, id: idProp, className, children, onClick, ref, ...rest }: TabProps): React_2.JSX.Element;
12628
+ ({ value, id: idProp, icon, className, children, onClick, ref, ...rest }: TabProps): React_2.JSX.Element;
12133
12629
  displayName: string;
12134
12630
  };
12135
12631
 
12136
12632
  /** TabList.Tab: `root` on the `role="tab"` button. */
12137
12633
  export declare const tabListTabClassNames: {
12138
12634
  readonly root: "wave-tab-list-tab";
12635
+ readonly icon: "wave-tab-list-tab__icon";
12139
12636
  };
12140
12637
 
12141
12638
  /** Properties for the TabPanel sub-component. */
@@ -12156,6 +12653,11 @@ export declare interface TabPanelsProps extends React_2.HTMLAttributes<HTMLDivEl
12156
12653
  export declare interface TabProps extends React_2.ButtonHTMLAttributes<HTMLButtonElement> {
12157
12654
  /** Unique value identifying this tab (and its panel). */
12158
12655
  value: string;
12656
+ /**
12657
+ * An icon before the text, hidden from assistive technology. A tab with an icon and no text is
12658
+ * icon-only (a square hit area): name it with `aria-label`, or a development warning asks for it.
12659
+ */
12660
+ icon?: Slot<'span'>;
12159
12661
  /** Ref to the tab `<button>`. */
12160
12662
  ref?: React_2.Ref<HTMLButtonElement>;
12161
12663
  }