@fanvue/ui 3.7.2 → 3.9.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 (102) hide show
  1. package/dist/cjs/components/Alert/Alert.cjs +28 -5
  2. package/dist/cjs/components/Alert/Alert.cjs.map +1 -1
  3. package/dist/cjs/components/Badge/Badge.cjs +17 -5
  4. package/dist/cjs/components/Badge/Badge.cjs.map +1 -1
  5. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +46 -23
  6. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
  7. package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -1
  8. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
  9. package/dist/cjs/components/Dialog/Dialog.cjs +21 -8
  10. package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
  11. package/dist/cjs/components/FanFollowerCount/FanFollowerCount.cjs +64 -0
  12. package/dist/cjs/components/FanFollowerCount/FanFollowerCount.cjs.map +1 -0
  13. package/dist/cjs/components/IconButton/IconButton.cjs +1 -1
  14. package/dist/cjs/components/IconButton/IconButton.cjs.map +1 -1
  15. package/dist/cjs/components/Icons/GifIcon.cjs +101 -0
  16. package/dist/cjs/components/Icons/GifIcon.cjs.map +1 -0
  17. package/dist/cjs/components/Icons/VerifiedIcon.cjs +82 -0
  18. package/dist/cjs/components/Icons/VerifiedIcon.cjs.map +1 -0
  19. package/dist/cjs/components/Link/Link.cjs +85 -0
  20. package/dist/cjs/components/Link/Link.cjs.map +1 -0
  21. package/dist/cjs/components/Pagination/Pagination.cjs +7 -7
  22. package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
  23. package/dist/cjs/components/Pill/Pill.cjs +3 -1
  24. package/dist/cjs/components/Pill/Pill.cjs.map +1 -1
  25. package/dist/cjs/components/ProfileOnlineStatus/ProfileOnlineStatus.cjs +44 -0
  26. package/dist/cjs/components/ProfileOnlineStatus/ProfileOnlineStatus.cjs.map +1 -0
  27. package/dist/cjs/components/ProfileStatus/ProfileStatus.cjs +51 -0
  28. package/dist/cjs/components/ProfileStatus/ProfileStatus.cjs.map +1 -0
  29. package/dist/cjs/components/Radio/Radio.cjs +65 -34
  30. package/dist/cjs/components/Radio/Radio.cjs.map +1 -1
  31. package/dist/cjs/components/RatingSummary/RatingSummary.cjs +103 -0
  32. package/dist/cjs/components/RatingSummary/RatingSummary.cjs.map +1 -0
  33. package/dist/cjs/components/ReviewCard/ReviewCard.cjs +51 -0
  34. package/dist/cjs/components/ReviewCard/ReviewCard.cjs.map +1 -0
  35. package/dist/cjs/components/Select/Select.cjs +4 -4
  36. package/dist/cjs/components/Select/Select.cjs.map +1 -1
  37. package/dist/cjs/components/TextField/TextField.cjs +4 -4
  38. package/dist/cjs/components/TextField/TextField.cjs.map +1 -1
  39. package/dist/cjs/components/Toast/Toast.cjs +18 -32
  40. package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
  41. package/dist/cjs/components/UserDisplayName/UserDisplayName.cjs +67 -0
  42. package/dist/cjs/components/UserDisplayName/UserDisplayName.cjs.map +1 -0
  43. package/dist/cjs/components/UserHandle/UserHandle.cjs +46 -0
  44. package/dist/cjs/components/UserHandle/UserHandle.cjs.map +1 -0
  45. package/dist/cjs/components/UserItem/UserItem.cjs +74 -0
  46. package/dist/cjs/components/UserItem/UserItem.cjs.map +1 -0
  47. package/dist/cjs/index.cjs +24 -0
  48. package/dist/cjs/index.cjs.map +1 -1
  49. package/dist/cjs/utils/getInitials.cjs +10 -0
  50. package/dist/cjs/utils/getInitials.cjs.map +1 -0
  51. package/dist/components/Alert/Alert.mjs +28 -5
  52. package/dist/components/Alert/Alert.mjs.map +1 -1
  53. package/dist/components/Badge/Badge.mjs +17 -5
  54. package/dist/components/Badge/Badge.mjs.map +1 -1
  55. package/dist/components/Breadcrumb/Breadcrumb.mjs +46 -23
  56. package/dist/components/Breadcrumb/Breadcrumb.mjs.map +1 -1
  57. package/dist/components/Checkbox/Checkbox.mjs +1 -1
  58. package/dist/components/Checkbox/Checkbox.mjs.map +1 -1
  59. package/dist/components/Dialog/Dialog.mjs +21 -8
  60. package/dist/components/Dialog/Dialog.mjs.map +1 -1
  61. package/dist/components/FanFollowerCount/FanFollowerCount.mjs +47 -0
  62. package/dist/components/FanFollowerCount/FanFollowerCount.mjs.map +1 -0
  63. package/dist/components/IconButton/IconButton.mjs +1 -1
  64. package/dist/components/IconButton/IconButton.mjs.map +1 -1
  65. package/dist/components/Icons/GifIcon.mjs +84 -0
  66. package/dist/components/Icons/GifIcon.mjs.map +1 -0
  67. package/dist/components/Icons/VerifiedIcon.mjs +65 -0
  68. package/dist/components/Icons/VerifiedIcon.mjs.map +1 -0
  69. package/dist/components/Link/Link.mjs +68 -0
  70. package/dist/components/Link/Link.mjs.map +1 -0
  71. package/dist/components/Pagination/Pagination.mjs +7 -7
  72. package/dist/components/Pagination/Pagination.mjs.map +1 -1
  73. package/dist/components/Pill/Pill.mjs +3 -1
  74. package/dist/components/Pill/Pill.mjs.map +1 -1
  75. package/dist/components/ProfileOnlineStatus/ProfileOnlineStatus.mjs +27 -0
  76. package/dist/components/ProfileOnlineStatus/ProfileOnlineStatus.mjs.map +1 -0
  77. package/dist/components/ProfileStatus/ProfileStatus.mjs +34 -0
  78. package/dist/components/ProfileStatus/ProfileStatus.mjs.map +1 -0
  79. package/dist/components/Radio/Radio.mjs +66 -35
  80. package/dist/components/Radio/Radio.mjs.map +1 -1
  81. package/dist/components/RatingSummary/RatingSummary.mjs +86 -0
  82. package/dist/components/RatingSummary/RatingSummary.mjs.map +1 -0
  83. package/dist/components/ReviewCard/ReviewCard.mjs +34 -0
  84. package/dist/components/ReviewCard/ReviewCard.mjs.map +1 -0
  85. package/dist/components/Select/Select.mjs +4 -4
  86. package/dist/components/Select/Select.mjs.map +1 -1
  87. package/dist/components/TextField/TextField.mjs +4 -4
  88. package/dist/components/TextField/TextField.mjs.map +1 -1
  89. package/dist/components/Toast/Toast.mjs +18 -32
  90. package/dist/components/Toast/Toast.mjs.map +1 -1
  91. package/dist/components/UserDisplayName/UserDisplayName.mjs +50 -0
  92. package/dist/components/UserDisplayName/UserDisplayName.mjs.map +1 -0
  93. package/dist/components/UserHandle/UserHandle.mjs +29 -0
  94. package/dist/components/UserHandle/UserHandle.mjs.map +1 -0
  95. package/dist/components/UserItem/UserItem.mjs +57 -0
  96. package/dist/components/UserItem/UserItem.mjs.map +1 -0
  97. package/dist/index.d.ts +404 -15
  98. package/dist/index.mjs +24 -0
  99. package/dist/index.mjs.map +1 -1
  100. package/dist/utils/getInitials.mjs +10 -0
  101. package/dist/utils/getInitials.mjs.map +1 -0
  102. package/package.json +2 -2
package/dist/index.d.ts CHANGED
@@ -155,18 +155,39 @@ export declare type AIIconProps = BaseIconProps;
155
155
  /**
156
156
  * Displays a contextual feedback message to the user.
157
157
  *
158
- * Supports `info`, `success`, `warning`, and `error` variants with a default
159
- * icon per variant, optional title, description, and dismiss button.
158
+ * Supports `info`, `success`, `warning`, `error`, and `neutral` variants with a
159
+ * default icon per variant, optional title, description, dismiss button, and an
160
+ * optional composable `action` slot.
160
161
  *
161
162
  * Each variant renders a default icon automatically. Pass a custom `icon` to
162
163
  * override, or `icon={null}` to hide the icon entirely.
163
164
  *
165
+ * Only the title and description live inside the `role="alert"` live region.
166
+ * The icon, `action`, and close button are rendered outside it so interactive
167
+ * controls are announced and navigated consistently by screen readers.
168
+ *
164
169
  * @example
165
170
  * ```tsx
166
171
  * <Alert variant="success" title="Saved" closable onClose={handleClose}>
167
172
  * Your changes have been saved.
168
173
  * </Alert>
169
174
  * ```
175
+ *
176
+ * @example
177
+ * ```tsx
178
+ * <Alert variant="neutral" title="Heads up" action={<a href="/docs">Learn more</a>}>
179
+ * A general notice with no specific sentiment.
180
+ * </Alert>
181
+ * ```
182
+ *
183
+ * @example
184
+ * ```tsx
185
+ * import Link from "next/link";
186
+ *
187
+ * <Alert variant="info" title="Update available" action={<Link href="/changelog">See what's new</Link>}>
188
+ * A new version is ready to install.
189
+ * </Alert>
190
+ * ```
170
191
  */
171
192
  export declare const Alert: React_2.ForwardRefExoticComponent<AlertProps & React_2.RefAttributes<HTMLDivElement>>;
172
193
 
@@ -196,10 +217,17 @@ export declare interface AlertProps extends React_2.HTMLAttributes<HTMLDivElemen
196
217
  onClose?: () => void;
197
218
  /** Accessible label for the close button. @default "Close alert" */
198
219
  closeLabel?: string;
220
+ /**
221
+ * Composable action slot rendered beneath the description, outside the
222
+ * `role="alert"` live region. Pass your own element (an `<a>`, a `next/link`
223
+ * `<Link>`, or a `<Button>`) and it receives the variant-appropriate link
224
+ * styling via the Radix `Slot` pattern while remaining a real link/button.
225
+ */
226
+ action?: React_2.ReactNode;
199
227
  }
200
228
 
201
229
  /** Visual style variant of the alert. */
202
- export declare type AlertVariant = "info" | "success" | "warning" | "error";
230
+ export declare type AlertVariant = "info" | "success" | "warning" | "error" | "neutral";
203
231
 
204
232
  /**
205
233
  * Apps icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
@@ -596,7 +624,7 @@ export declare interface BadgeProps extends React_2.HTMLAttributes<HTMLSpanEleme
596
624
  }
597
625
 
598
626
  /** Visual style variant of the badge. */
599
- export declare type BadgeVariant = "default" | "dark" | "success" | "warning" | "error" | "special" | "info" | "online" | "brand" | "pink" | "brandLight" | "pinkLight";
627
+ export declare type BadgeVariant = "default" | "dark" | "success" | "warning" | "error" | "special" | "info" | "successColour" | "warningColour" | "errorColour" | "infoColour" | "aiGenerated" | "negative" | "online" | "brand" | "pink" | "brandLight" | "pinkLight";
600
628
 
601
629
  /**
602
630
  * Bank icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
@@ -744,7 +772,7 @@ export declare interface BottomNavigationProps extends React_2.HTMLAttributes<HT
744
772
  * @example
745
773
  * ```tsx
746
774
  * <Breadcrumb>
747
- * <BreadcrumbList>
775
+ * <BreadcrumbList size="14px">
748
776
  * <BreadcrumbItem><BreadcrumbLink href="/">Home</BreadcrumbLink></BreadcrumbItem>
749
777
  * <BreadcrumbSeparator />
750
778
  * <BreadcrumbItem><BreadcrumbPage>Current Page</BreadcrumbPage></BreadcrumbItem>
@@ -775,13 +803,16 @@ export declare interface BreadcrumbLinkProps extends React_2.ComponentPropsWitho
775
803
 
776
804
  /**
777
805
  * Ordered list container for breadcrumb items. Automatically injects a
778
- * separator between each child item.
806
+ * separator between each child item and shares the trail {@link BreadcrumbSize}
807
+ * with its descendants.
779
808
  */
780
809
  export declare const BreadcrumbList: React_2.ForwardRefExoticComponent<BreadcrumbListProps & React_2.RefAttributes<HTMLOListElement>>;
781
810
 
782
811
  export declare interface BreadcrumbListProps extends React_2.ComponentPropsWithoutRef<"ol"> {
783
- /** Custom separator element rendered between items. @default ChevronRightIcon */
812
+ /** Custom separator element rendered between items. @default "/" */
784
813
  separator?: React_2.ReactNode;
814
+ /** Text size preset applied to every item in the trail. @default "12px" */
815
+ size?: BreadcrumbSize;
785
816
  }
786
817
 
787
818
  /**
@@ -799,13 +830,16 @@ export declare interface BreadcrumbProps extends React_2.ComponentPropsWithoutRe
799
830
 
800
831
  /**
801
832
  * Visual separator rendered between breadcrumb items.
802
- * Renders a right-pointing chevron icon and is hidden from assistive technology.
833
+ * Renders a `/` glyph by default and is hidden from assistive technology.
803
834
  */
804
835
  export declare const BreadcrumbSeparator: React_2.ForwardRefExoticComponent<BreadcrumbSeparatorProps & React_2.RefAttributes<HTMLLIElement>>;
805
836
 
806
837
  export declare interface BreadcrumbSeparatorProps extends React_2.ComponentPropsWithoutRef<"li"> {
807
838
  }
808
839
 
840
+ /** Text size preset controlling the typography of the whole breadcrumb trail. @default "12px" */
841
+ export declare type BreadcrumbSize = "12px" | "14px" | "16px";
842
+
809
843
  /** Breakpoint values for responsive props. */
810
844
  declare type Breakpoint = "sm" | "md" | "lg" | "xl";
811
845
 
@@ -1697,8 +1731,9 @@ export declare type DialogCloseProps = React_2.ComponentPropsWithoutRef<typeof D
1697
1731
  * `fixed` positioning still applies; ancestors with `transform` or `overflow` may affect layout.
1698
1732
  *
1699
1733
  * On mobile viewports (<640px), the dialog slides up from the bottom as a sheet
1700
- * with top-only border radius. On larger viewports it renders centered with
1701
- * full border radius.
1734
+ * with top-only border radius by default; pass `mobilePresentation="card"` to
1735
+ * render a centered floating card instead (used for small confirmation dialogs).
1736
+ * On larger viewports it renders centered with full border radius.
1702
1737
  *
1703
1738
  * @example
1704
1739
  * ```tsx
@@ -1741,8 +1776,17 @@ export declare interface DialogContentProps extends React_2.ComponentPropsWithou
1741
1776
  * @default true
1742
1777
  */
1743
1778
  portal?: boolean;
1744
- /** Show the v2 mobile sheet pull handle. @default true */
1779
+ /** Show the v2 mobile sheet pull handle. Only rendered when `mobilePresentation` is `"sheet"`. @default true */
1745
1780
  showMobileHandle?: boolean;
1781
+ /**
1782
+ * How the dialog presents below the `sm` breakpoint.
1783
+ * - `"sheet"` — bottom sheet pinned to the viewport bottom edge (default)
1784
+ * - `"card"` — centered floating card per the v2-modal confirmation spec:
1785
+ * 16px side margins, 24px padding, 32px radius on all corners, no pull handle
1786
+ *
1787
+ * @default "sheet"
1788
+ */
1789
+ mobilePresentation?: "sheet" | "card";
1746
1790
  }
1747
1791
 
1748
1792
  /** Accessible description for the dialog. Rendered as secondary text. */
@@ -2455,6 +2499,33 @@ export declare const FacebookIcon: React_2.ForwardRefExoticComponent<React_2.SVG
2455
2499
  className?: string;
2456
2500
  } & React_2.RefAttributes<SVGSVGElement>>;
2457
2501
 
2502
+ /**
2503
+ * Displays a creator's formatted fan and subscriber counts, each paired with an
2504
+ * icon. Numeric values are compacted (`1200` → `"1.2k"`); pass a pre-formatted
2505
+ * string to bypass formatting. Either group can be hidden independently.
2506
+ *
2507
+ * @example
2508
+ * ```tsx
2509
+ * <FanFollowerCount fans={1200} subs={3000} />
2510
+ * ```
2511
+ */
2512
+ export declare const FanFollowerCount: React_2.ForwardRefExoticComponent<FanFollowerCountProps & React_2.RefAttributes<HTMLDivElement>>;
2513
+
2514
+ export declare interface FanFollowerCountProps extends React_2.HTMLAttributes<HTMLDivElement> {
2515
+ /** Fan count. Numbers are compacted (e.g. `1200` → `"1.2k"`); strings render verbatim. @default 0 */
2516
+ fans?: number | string;
2517
+ /** Subscriber count. Numbers are compacted (e.g. `3000` → `"3k"`); strings render verbatim. @default 0 */
2518
+ subs?: number | string;
2519
+ /** Show the fan count group. @default true */
2520
+ showFans?: boolean;
2521
+ /** Show the subscriber count group. @default true */
2522
+ showSubs?: boolean;
2523
+ /** Label rendered after the fan count. @default "Fans" */
2524
+ fansLabel?: string;
2525
+ /** Label rendered after the subscriber count. @default "Subs" */
2526
+ subsLabel?: string;
2527
+ }
2528
+
2458
2529
  /**
2459
2530
  * Flag icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
2460
2531
  *
@@ -2557,6 +2628,28 @@ export declare const GenderIcon: React_2.ForwardRefExoticComponent<BaseIconProps
2557
2628
  /** Props for {@link GenderIcon}. See {@link BaseIconProps} for the shared shape. */
2558
2629
  export declare type GenderIconProps = BaseIconProps;
2559
2630
 
2631
+ /**
2632
+ * Returns the first letters of the first one or two words in a given string, capitalized.
2633
+ * @example
2634
+ * getInitials("Ciao Bello"); // "CB"
2635
+ * getInitials("JavaScript"); // "J"
2636
+ * getInitials(undefined); // ""
2637
+ */
2638
+ export declare const getInitials: (str?: string | null) => string;
2639
+
2640
+ /**
2641
+ * Gif icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
2642
+ *
2643
+ * @example
2644
+ * ```tsx
2645
+ * <GifIcon size={24} filled />
2646
+ * ```
2647
+ */
2648
+ export declare const GifIcon: React_2.ForwardRefExoticComponent<BaseIconProps & React_2.RefAttributes<SVGSVGElement>>;
2649
+
2650
+ /** Props for {@link GifIcon}. See {@link BaseIconProps} for the shared shape. */
2651
+ export declare type GifIconProps = BaseIconProps;
2652
+
2560
2653
  /**
2561
2654
  * Gift icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
2562
2655
  *
@@ -2873,6 +2966,22 @@ export declare const LanguageIcon: React_2.ForwardRefExoticComponent<BaseIconPro
2873
2966
  /** Props for {@link LanguageIcon}. See {@link BaseIconProps} for the shared shape. */
2874
2967
  export declare type LanguageIconProps = BaseIconProps;
2875
2968
 
2969
+ /**
2970
+ * An inline text link for navigating to a related page or section without
2971
+ * using a button. Use `primary` for standard navigation and `brand` for the
2972
+ * Fanvue green accent on calls to action within content.
2973
+ *
2974
+ * Renders an underlined `<a>` by default. Pass `asChild` to compose with a
2975
+ * router link (e.g. Next.js `Link`). When rendering without a visible label,
2976
+ * provide an `aria-label`.
2977
+ *
2978
+ * @example
2979
+ * ```tsx
2980
+ * <Link href="/pricing" variant="brand">See our plans</Link>
2981
+ * ```
2982
+ */
2983
+ export declare const Link: React_2.ForwardRefExoticComponent<LinkProps & React_2.RefAttributes<HTMLAnchorElement>>;
2984
+
2876
2985
  /**
2877
2986
  * Link icon. Renders at sizes 16, 24, or 32 px.
2878
2987
  *
@@ -2886,6 +2995,27 @@ export declare const LinkIcon: React_2.ForwardRefExoticComponent<BaseIconProps &
2886
2995
  /** Props for {@link LinkIcon}. See {@link BaseIconProps} for the shared shape. */
2887
2996
  export declare type LinkIconProps = BaseIconProps;
2888
2997
 
2998
+ export declare interface LinkProps extends React_2.AnchorHTMLAttributes<HTMLAnchorElement> {
2999
+ /** Visual style variant of the link. @default "primary" */
3000
+ variant?: LinkVariant;
3001
+ /** Text size of the link in pixels. @default "16" */
3002
+ size?: LinkSize;
3003
+ /** When `true`, greys the link out and blocks interaction. @default false */
3004
+ disabled?: boolean;
3005
+ /** Icon element displayed before the label. */
3006
+ leftIcon?: React_2.ReactNode;
3007
+ /** Icon element displayed after the label. */
3008
+ rightIcon?: React_2.ReactNode;
3009
+ /** Merge props onto a child element instead of rendering an `<a>`. @default false */
3010
+ asChild?: boolean;
3011
+ }
3012
+
3013
+ /** Text size of the link in pixels. */
3014
+ export declare type LinkSize = "16" | "14";
3015
+
3016
+ /** Visual style variant of the link. */
3017
+ export declare type LinkVariant = "primary" | "brand";
3018
+
2889
3019
  /**
2890
3020
  * A layout-aware loading indicator that renders a centered `SpinnerIcon` inside
2891
3021
  * a relatively-positioned container. Drop-in replacement for the Olympus `Loader`.
@@ -3385,7 +3515,7 @@ export declare interface PillProps extends React_2.HTMLAttributes<HTMLSpanElemen
3385
3515
  }
3386
3516
 
3387
3517
  /** Colour variant of the pill. */
3388
- export declare type PillVariant = "green" | "grey" | "blue" | "gold" | "pinkLight" | "base" | "brand" | "brandLight" | "beta" | "error" | "red";
3518
+ export declare type PillVariant = "green" | "grey" | "blue" | "gold" | "pinkLight" | "base" | "contrast" | "negative" | "brand" | "brandLight" | "beta" | "error" | "red";
3389
3519
 
3390
3520
  /**
3391
3521
  * Pin 2 icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
@@ -3444,6 +3574,49 @@ export declare const PrivacyIcon: React_2.ForwardRefExoticComponent<BaseIconProp
3444
3574
  /** Props for {@link PrivacyIcon}. See {@link BaseIconProps} for the shared shape. */
3445
3575
  export declare type PrivacyIconProps = BaseIconProps;
3446
3576
 
3577
+ /**
3578
+ * Inline online-status indicator: a pulsing dot followed by a label. Used by
3579
+ * {@link UserDisplayName} when `showOnlineStatus` is set.
3580
+ */
3581
+ export declare const ProfileOnlineStatus: React_2.ForwardRefExoticComponent<ProfileOnlineStatusProps & React_2.RefAttributes<HTMLSpanElement>>;
3582
+
3583
+ export declare interface ProfileOnlineStatusProps extends React_2.HTMLAttributes<HTMLSpanElement> {
3584
+ /** Visible status label rendered next to the indicator. @default "Online" */
3585
+ label?: string;
3586
+ }
3587
+
3588
+ /**
3589
+ * Presence indicator showing whether a creator or fan is currently active.
3590
+ * The active state pulses to signal real-time presence; the inactive state is a
3591
+ * static, muted dot for lists, tables, and content views where presence is less
3592
+ * relevant.
3593
+ *
3594
+ * Decorative by default (`aria-hidden`) — pair it with a visible or visually
3595
+ * hidden label at the usage site. Pass `aria-label` to expose it as a
3596
+ * standalone image to assistive technology.
3597
+ *
3598
+ * Supersedes the V1 `OnlineBlinkingIcon`: `<ProfileStatus />` is a drop-in
3599
+ * replacement for `<OnlineBlinkingIcon />`, adding the distinct inactive state.
3600
+ *
3601
+ * @example
3602
+ * ```tsx
3603
+ * <ProfileStatus active />
3604
+ * <ProfileStatus active={false} size="md" />
3605
+ * <ProfileStatus active aria-label="Online" />
3606
+ * ```
3607
+ */
3608
+ export declare const ProfileStatus: React_2.ForwardRefExoticComponent<ProfileStatusProps & React_2.RefAttributes<HTMLSpanElement>>;
3609
+
3610
+ export declare interface ProfileStatusProps extends React_2.HTMLAttributes<HTMLSpanElement> {
3611
+ /** Whether the profile is currently active. Active renders a pulsing green dot; inactive renders a static grey dot. @default true */
3612
+ active?: boolean;
3613
+ /** Size preset of the indicator. @default "sm" */
3614
+ size?: ProfileStatusSize;
3615
+ }
3616
+
3617
+ /** Size preset of the {@link ProfileStatus} indicator. */
3618
+ export declare type ProfileStatusSize = "sm" | "md";
3619
+
3447
3620
  /**
3448
3621
  * A horizontal progress indicator with optional title, completion percentage,
3449
3622
  * step count, and helper text. The bar colour reflects progress when using the
@@ -3501,14 +3674,14 @@ export declare const QueueIcon: React_2.ForwardRefExoticComponent<BaseIconProps
3501
3674
  export declare type QueueIconProps = BaseIconProps;
3502
3675
 
3503
3676
  /**
3504
- * A single radio option within a {@link RadioGroup}. Includes an optional label
3505
- * and helper text.
3677
+ * A single radio option within a {@link RadioGroup}. Supports leading or
3678
+ * trailing button placement, an optional avatar, a label, and helper text.
3506
3679
  *
3507
3680
  * @example
3508
3681
  * ```tsx
3509
3682
  * <RadioGroup value={value} onValueChange={setValue}>
3510
3683
  * <Radio value="a" label="Option A" />
3511
- * <Radio value="b" label="Option B" />
3684
+ * <Radio value="b" label="Option B" layout="trailing" />
3512
3685
  * </RadioGroup>
3513
3686
  * ```
3514
3687
  */
@@ -3531,6 +3704,9 @@ export declare const RadioGroup: React_2.ForwardRefExoticComponent<Omit<RadioGro
3531
3704
  /** Props for the {@link RadioGroup} component. Extends the Radix `RadioGroup.Root` props. */
3532
3705
  export declare type RadioGroupProps = React_2.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>;
3533
3706
 
3707
+ /** Placement of the radio button relative to its label. */
3708
+ export declare type RadioLayout = "leading" | "trailing";
3709
+
3534
3710
  export declare interface RadioProps extends Omit<React_2.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>, "asChild"> {
3535
3711
  /** Size variant controlling label and helper text typography. @default "default" */
3536
3712
  size?: "default" | "small";
@@ -3538,6 +3714,84 @@ export declare interface RadioProps extends Omit<React_2.ComponentPropsWithoutRe
3538
3714
  label?: string;
3539
3715
  /** Descriptive text displayed below the label. */
3540
3716
  helperText?: string;
3717
+ /**
3718
+ * Placement of the radio button. `"leading"` renders it before the label;
3719
+ * `"trailing"` pushes it to the far end of the row (for list rows). @default "leading"
3720
+ */
3721
+ layout?: RadioLayout;
3722
+ /**
3723
+ * Optional avatar shown alongside the label, for options that represent a
3724
+ * person or account. Pass an {@link Avatar} sized to `32`.
3725
+ */
3726
+ avatar?: React_2.ReactNode;
3727
+ }
3728
+
3729
+ /** A single rating value paired with the number of reviews that gave it. */
3730
+ export declare interface RatingCount {
3731
+ /** The rating value this entry represents (e.g. `5`). */
3732
+ rating: number;
3733
+ /** Number of reviews that gave this rating. */
3734
+ count: number;
3735
+ }
3736
+
3737
+ /**
3738
+ * An aggregated rating overview: a headline average with the total review count,
3739
+ * followed by a per-rating histogram. Bar lengths are scaled relative to the
3740
+ * most-reviewed rating, so the busiest rating always fills the track.
3741
+ *
3742
+ * The brand star is decorative; the header and each histogram row expose
3743
+ * `role="img"` with an accessible label (override via `formatAverageLabel` /
3744
+ * `formatRatingLabel`) so the single-star-plus-number reads clearly.
3745
+ *
3746
+ * @example
3747
+ * ```tsx
3748
+ * <RatingSummary
3749
+ * distribution={[
3750
+ * { rating: 5, count: 300 },
3751
+ * { rating: 4, count: 20 },
3752
+ * { rating: 3, count: 20 },
3753
+ * { rating: 2, count: 10 },
3754
+ * { rating: 1, count: 0 },
3755
+ * ]}
3756
+ * />
3757
+ * ```
3758
+ */
3759
+ export declare const RatingSummary: React_2.ForwardRefExoticComponent<RatingSummaryProps & React_2.RefAttributes<HTMLDivElement>>;
3760
+
3761
+ export declare interface RatingSummaryProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "title"> {
3762
+ /**
3763
+ * Per-rating review counts. Order is not significant — rows always render from
3764
+ * `maxRating` down to `1`, and any rating without an entry renders as zero.
3765
+ * Entries are expected to use whole-number ratings within `1`–`maxRating`;
3766
+ * any outside that range are ignored, including in the derived total and average.
3767
+ */
3768
+ distribution: RatingCount[];
3769
+ /**
3770
+ * Average rating shown in the header. Defaults to the count-weighted mean of
3771
+ * `distribution`; provide it to display a server-computed average instead.
3772
+ */
3773
+ averageRating?: number;
3774
+ /** Highest possible rating. Sets how many histogram rows render. @default 5 */
3775
+ maxRating?: number;
3776
+ /**
3777
+ * Formats a review count into its label, without surrounding parentheses.
3778
+ * Used for the visible text and as the count portion of the default
3779
+ * accessible labels.
3780
+ * @default ``(count) => `${count.toLocaleString()} review(s)` ``
3781
+ */
3782
+ formatCount?: (count: number) => string;
3783
+ /**
3784
+ * Builds the accessible label for the header. Override to localise the
3785
+ * screen-reader text. `average` is the already-formatted average string.
3786
+ * @default ``(average, max, total) => `Average rating ${average} out of ${max}, ${formatCount(total)}` ``
3787
+ */
3788
+ formatAverageLabel?: (average: string, maxRating: number, total: number) => string;
3789
+ /**
3790
+ * Builds the accessible label for each histogram row. Override to localise the
3791
+ * screen-reader text.
3792
+ * @default ``(rating, count) => `${rating} star(s), ${formatCount(count)}` ``
3793
+ */
3794
+ formatRatingLabel?: (rating: number, count: number) => string;
3541
3795
  }
3542
3796
 
3543
3797
  /**
@@ -3592,6 +3846,34 @@ export declare const ReverseIcon: React_2.ForwardRefExoticComponent<BaseIconProp
3592
3846
  /** Props for {@link ReverseIcon}. See {@link BaseIconProps} for the shared shape. */
3593
3847
  export declare type ReverseIconProps = BaseIconProps;
3594
3848
 
3849
+ /**
3850
+ * A single written review: a star rating with an optional author byline, a
3851
+ * title, and the review body. Stack several with a {@link Divider} between them
3852
+ * to build a review list.
3853
+ *
3854
+ * @example
3855
+ * ```tsx
3856
+ * <ReviewCard rating={4} author="@jane_doe" title="A great app to start!">
3857
+ * Easily plan and organize your content. Streamline your scheduling so you can
3858
+ * focus on what you do best.
3859
+ * </ReviewCard>
3860
+ * ```
3861
+ */
3862
+ export declare const ReviewCard: React_2.ForwardRefExoticComponent<ReviewCardProps & React_2.RefAttributes<HTMLDivElement>>;
3863
+
3864
+ export declare interface ReviewCardProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "title"> {
3865
+ /** Star rating the reviewer gave, shown beside the star icon. */
3866
+ rating: number;
3867
+ /** Highest possible rating, used only in the accessible label (e.g. "4 out of 5"). @default 5 */
3868
+ maxRating?: number;
3869
+ /** Reviewer name or handle, rendered after "by". Omitted when not provided. */
3870
+ author?: React_2.ReactNode;
3871
+ /** Short headline for the review. */
3872
+ title?: React_2.ReactNode;
3873
+ /** Review body text. */
3874
+ children?: React_2.ReactNode;
3875
+ }
3876
+
3595
3877
  /**
3596
3878
  * A text input field with a search icon and optional clear button.
3597
3879
  *
@@ -4973,6 +5255,60 @@ export declare const UserCircleIcon: React_2.ForwardRefExoticComponent<React_2.S
4973
5255
  className?: string;
4974
5256
  } & React_2.RefAttributes<SVGSVGElement>>;
4975
5257
 
5258
+ /**
5259
+ * Renders a user's display name with optional ambassador/verified badges and an
5260
+ * online-status indicator. Only the name shrinks and truncates; trailing badges
5261
+ * and the online-status indicator stay visible on the same line.
5262
+ *
5263
+ * Typography is not baked in: pass a `typography-*` utility via `className` on
5264
+ * the root and the name inherits it. Use `typography-body-small-14px-semibold`
5265
+ * for the standard display-name scale.
5266
+ *
5267
+ * When both `ambassador` and `verified` are set, the ambassador badge takes
5268
+ * precedence. Its tint uses `text-success-content` (not `text-icons-brand-green`)
5269
+ * so the green darkens in light mode and lightens in dark mode, matching
5270
+ * {@link ProfileOnlineStatus}; `text-icons-brand-green` is fixed across modes.
5271
+ *
5272
+ * @example
5273
+ * ```tsx
5274
+ * <UserDisplayName className="typography-body-small-14px-semibold">Jane Doe</UserDisplayName>
5275
+ * ```
5276
+ */
5277
+ export declare const UserDisplayName: React_2.ForwardRefExoticComponent<UserDisplayNameProps & React_2.RefAttributes<HTMLElement>>;
5278
+
5279
+ export declare interface UserDisplayNameProps extends React_2.HTMLAttributes<HTMLElement> {
5280
+ /** Render an ambassador badge after the name. */
5281
+ ambassador?: boolean;
5282
+ /** Accessible label for the ambassador badge. @default "Ambassador" */
5283
+ ambassadorLabel?: string;
5284
+ /** HTML element used for the root wrapper. @default "span" */
5285
+ component?: "span" | "h1" | "h2" | "h3" | "p" | "div";
5286
+ /** Truncate the display name on a single line. @default true */
5287
+ noWrap?: boolean;
5288
+ /** Accessible label for the online-status indicator. @default "Online" */
5289
+ onlineLabel?: string;
5290
+ /** Render the inline online-status indicator after the name. @default false */
5291
+ showOnlineStatus?: boolean;
5292
+ /** Render a verified badge after the name (ignored when `ambassador` is set). */
5293
+ verified?: boolean;
5294
+ /** Accessible label for the verified badge. @default "Verified" */
5295
+ verifiedLabel?: string;
5296
+ }
5297
+
5298
+ /**
5299
+ * Renders a user handle prefixed with the `@` symbol as muted, truncated
5300
+ * secondary text.
5301
+ *
5302
+ * @example
5303
+ * ```tsx
5304
+ * <UserHandle>jane_doe</UserHandle>
5305
+ * ```
5306
+ */
5307
+ export declare const UserHandle: React_2.ForwardRefExoticComponent<UserHandleProps & React_2.RefAttributes<HTMLSpanElement>>;
5308
+
5309
+ export declare interface UserHandleProps extends React_2.HTMLAttributes<HTMLSpanElement> {
5310
+ }
5311
+
4976
5312
  /**
4977
5313
  * User icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
4978
5314
  *
@@ -4986,6 +5322,45 @@ export declare const UserIcon: React_2.ForwardRefExoticComponent<BaseIconProps &
4986
5322
  /** Props for {@link UserIcon}. See {@link BaseIconProps} for the shared shape. */
4987
5323
  export declare type UserIconProps = BaseIconProps;
4988
5324
 
5325
+ /**
5326
+ * A compact user row showing an avatar, display name (or nickname) and handle,
5327
+ * with optional online and muted indicators.
5328
+ *
5329
+ * @example
5330
+ * ```tsx
5331
+ * <UserItem user={{ displayName: "Jane Doe", handle: "jane_doe" }} />
5332
+ * ```
5333
+ */
5334
+ export declare const UserItem: React_2.ForwardRefExoticComponent<UserItemProps & React_2.RefAttributes<HTMLDivElement>>;
5335
+
5336
+ export declare interface UserItemProps extends React_2.HTMLAttributes<HTMLDivElement> {
5337
+ /** The user to display. */
5338
+ user: UserItemUser;
5339
+ /** Desired avatar size in px; snapped to the nearest supported token. @default 48 */
5340
+ avatarSize?: number;
5341
+ /** Show the muted indicator in the bottom-left corner. @default false */
5342
+ isMuted?: boolean;
5343
+ /** Whether the user is online (only shown when `showOnlineStatus` is also set). @default false */
5344
+ isOnline?: boolean;
5345
+ /** Render the avatar. @default true */
5346
+ showAvatar?: boolean;
5347
+ /** Render the handle line under the display name. @default true */
5348
+ showHandle?: boolean;
5349
+ /** Enable the avatar online indicator (combined with `isOnline`). */
5350
+ showOnlineStatus?: boolean;
5351
+ }
5352
+
5353
+ /** Minimal user shape consumed by {@link UserItem}. */
5354
+ export declare type UserItemUser = {
5355
+ avatarUri?: {
5356
+ url: string;
5357
+ url2x?: string;
5358
+ };
5359
+ displayName: string;
5360
+ handle: string;
5361
+ nickname?: string;
5362
+ };
5363
+
4989
5364
  /**
4990
5365
  * User Menu icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
4991
5366
  *
@@ -5042,6 +5417,20 @@ export declare const VaultIcon: React_2.ForwardRefExoticComponent<BaseIconProps
5042
5417
  /** Props for {@link VaultIcon}. See {@link BaseIconProps} for the shared shape. */
5043
5418
  export declare type VaultIconProps = BaseIconProps;
5044
5419
 
5420
+ /**
5421
+ * Verified badge icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
5422
+ * Defaults to the filled variant.
5423
+ *
5424
+ * @example
5425
+ * ```tsx
5426
+ * <VerifiedIcon size={24} />
5427
+ * ```
5428
+ */
5429
+ export declare const VerifiedIcon: React_2.ForwardRefExoticComponent<BaseIconProps & React_2.RefAttributes<SVGSVGElement>>;
5430
+
5431
+ /** Props for {@link VerifiedIcon}. See {@link BaseIconProps} for the shared shape. */
5432
+ export declare type VerifiedIconProps = BaseIconProps;
5433
+
5045
5434
  /**
5046
5435
  * Video icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
5047
5436
  *