@fanvue/ui 3.8.0 → 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 (54) 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/Checkbox/Checkbox.cjs +1 -1
  6. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
  7. package/dist/cjs/components/Dialog/Dialog.cjs +21 -8
  8. package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
  9. package/dist/cjs/components/FanFollowerCount/FanFollowerCount.cjs +64 -0
  10. package/dist/cjs/components/FanFollowerCount/FanFollowerCount.cjs.map +1 -0
  11. package/dist/cjs/components/IconButton/IconButton.cjs +1 -1
  12. package/dist/cjs/components/IconButton/IconButton.cjs.map +1 -1
  13. package/dist/cjs/components/Link/Link.cjs +85 -0
  14. package/dist/cjs/components/Link/Link.cjs.map +1 -0
  15. package/dist/cjs/components/Pill/Pill.cjs +3 -1
  16. package/dist/cjs/components/Pill/Pill.cjs.map +1 -1
  17. package/dist/cjs/components/ProfileStatus/ProfileStatus.cjs +51 -0
  18. package/dist/cjs/components/ProfileStatus/ProfileStatus.cjs.map +1 -0
  19. package/dist/cjs/components/Radio/Radio.cjs +65 -34
  20. package/dist/cjs/components/Radio/Radio.cjs.map +1 -1
  21. package/dist/cjs/components/Select/Select.cjs +4 -4
  22. package/dist/cjs/components/Select/Select.cjs.map +1 -1
  23. package/dist/cjs/components/TextField/TextField.cjs +4 -4
  24. package/dist/cjs/components/TextField/TextField.cjs.map +1 -1
  25. package/dist/cjs/index.cjs +6 -0
  26. package/dist/cjs/index.cjs.map +1 -1
  27. package/dist/components/Alert/Alert.mjs +28 -5
  28. package/dist/components/Alert/Alert.mjs.map +1 -1
  29. package/dist/components/Badge/Badge.mjs +17 -5
  30. package/dist/components/Badge/Badge.mjs.map +1 -1
  31. package/dist/components/Checkbox/Checkbox.mjs +1 -1
  32. package/dist/components/Checkbox/Checkbox.mjs.map +1 -1
  33. package/dist/components/Dialog/Dialog.mjs +21 -8
  34. package/dist/components/Dialog/Dialog.mjs.map +1 -1
  35. package/dist/components/FanFollowerCount/FanFollowerCount.mjs +47 -0
  36. package/dist/components/FanFollowerCount/FanFollowerCount.mjs.map +1 -0
  37. package/dist/components/IconButton/IconButton.mjs +1 -1
  38. package/dist/components/IconButton/IconButton.mjs.map +1 -1
  39. package/dist/components/Link/Link.mjs +68 -0
  40. package/dist/components/Link/Link.mjs.map +1 -0
  41. package/dist/components/Pill/Pill.mjs +3 -1
  42. package/dist/components/Pill/Pill.mjs.map +1 -1
  43. package/dist/components/ProfileStatus/ProfileStatus.mjs +34 -0
  44. package/dist/components/ProfileStatus/ProfileStatus.mjs.map +1 -0
  45. package/dist/components/Radio/Radio.mjs +66 -35
  46. package/dist/components/Radio/Radio.mjs.map +1 -1
  47. package/dist/components/Select/Select.mjs +4 -4
  48. package/dist/components/Select/Select.mjs.map +1 -1
  49. package/dist/components/TextField/TextField.mjs +4 -4
  50. package/dist/components/TextField/TextField.mjs.map +1 -1
  51. package/dist/index.d.ts +158 -11
  52. package/dist/index.mjs +6 -0
  53. package/dist/index.mjs.map +1 -1
  54. package/package.json +1 -1
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.
@@ -1703,8 +1731,9 @@ export declare type DialogCloseProps = React_2.ComponentPropsWithoutRef<typeof D
1703
1731
  * `fixed` positioning still applies; ancestors with `transform` or `overflow` may affect layout.
1704
1732
  *
1705
1733
  * On mobile viewports (<640px), the dialog slides up from the bottom as a sheet
1706
- * with top-only border radius. On larger viewports it renders centered with
1707
- * 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.
1708
1737
  *
1709
1738
  * @example
1710
1739
  * ```tsx
@@ -1747,8 +1776,17 @@ export declare interface DialogContentProps extends React_2.ComponentPropsWithou
1747
1776
  * @default true
1748
1777
  */
1749
1778
  portal?: boolean;
1750
- /** 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 */
1751
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";
1752
1790
  }
1753
1791
 
1754
1792
  /** Accessible description for the dialog. Rendered as secondary text. */
@@ -2461,6 +2499,33 @@ export declare const FacebookIcon: React_2.ForwardRefExoticComponent<React_2.SVG
2461
2499
  className?: string;
2462
2500
  } & React_2.RefAttributes<SVGSVGElement>>;
2463
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
+
2464
2529
  /**
2465
2530
  * Flag icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
2466
2531
  *
@@ -2901,6 +2966,22 @@ export declare const LanguageIcon: React_2.ForwardRefExoticComponent<BaseIconPro
2901
2966
  /** Props for {@link LanguageIcon}. See {@link BaseIconProps} for the shared shape. */
2902
2967
  export declare type LanguageIconProps = BaseIconProps;
2903
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
+
2904
2985
  /**
2905
2986
  * Link icon. Renders at sizes 16, 24, or 32 px.
2906
2987
  *
@@ -2914,6 +2995,27 @@ export declare const LinkIcon: React_2.ForwardRefExoticComponent<BaseIconProps &
2914
2995
  /** Props for {@link LinkIcon}. See {@link BaseIconProps} for the shared shape. */
2915
2996
  export declare type LinkIconProps = BaseIconProps;
2916
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
+
2917
3019
  /**
2918
3020
  * A layout-aware loading indicator that renders a centered `SpinnerIcon` inside
2919
3021
  * a relatively-positioned container. Drop-in replacement for the Olympus `Loader`.
@@ -3413,7 +3515,7 @@ export declare interface PillProps extends React_2.HTMLAttributes<HTMLSpanElemen
3413
3515
  }
3414
3516
 
3415
3517
  /** Colour variant of the pill. */
3416
- 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";
3417
3519
 
3418
3520
  /**
3419
3521
  * Pin 2 icon. Renders at sizes 16, 24, or 32 px with outlined and filled variants.
@@ -3483,6 +3585,38 @@ export declare interface ProfileOnlineStatusProps extends React_2.HTMLAttributes
3483
3585
  label?: string;
3484
3586
  }
3485
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
+
3486
3620
  /**
3487
3621
  * A horizontal progress indicator with optional title, completion percentage,
3488
3622
  * step count, and helper text. The bar colour reflects progress when using the
@@ -3540,14 +3674,14 @@ export declare const QueueIcon: React_2.ForwardRefExoticComponent<BaseIconProps
3540
3674
  export declare type QueueIconProps = BaseIconProps;
3541
3675
 
3542
3676
  /**
3543
- * A single radio option within a {@link RadioGroup}. Includes an optional label
3544
- * 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.
3545
3679
  *
3546
3680
  * @example
3547
3681
  * ```tsx
3548
3682
  * <RadioGroup value={value} onValueChange={setValue}>
3549
3683
  * <Radio value="a" label="Option A" />
3550
- * <Radio value="b" label="Option B" />
3684
+ * <Radio value="b" label="Option B" layout="trailing" />
3551
3685
  * </RadioGroup>
3552
3686
  * ```
3553
3687
  */
@@ -3570,6 +3704,9 @@ export declare const RadioGroup: React_2.ForwardRefExoticComponent<Omit<RadioGro
3570
3704
  /** Props for the {@link RadioGroup} component. Extends the Radix `RadioGroup.Root` props. */
3571
3705
  export declare type RadioGroupProps = React_2.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>;
3572
3706
 
3707
+ /** Placement of the radio button relative to its label. */
3708
+ export declare type RadioLayout = "leading" | "trailing";
3709
+
3573
3710
  export declare interface RadioProps extends Omit<React_2.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>, "asChild"> {
3574
3711
  /** Size variant controlling label and helper text typography. @default "default" */
3575
3712
  size?: "default" | "small";
@@ -3577,6 +3714,16 @@ export declare interface RadioProps extends Omit<React_2.ComponentPropsWithoutRe
3577
3714
  label?: string;
3578
3715
  /** Descriptive text displayed below the label. */
3579
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;
3580
3727
  }
3581
3728
 
3582
3729
  /** A single rating value paired with the number of reviews that gave it. */
package/dist/index.mjs CHANGED
@@ -29,6 +29,7 @@ import { Divider } from "./components/Divider/Divider.mjs";
29
29
  import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerTitle, DrawerTrigger } from "./components/Drawer/Drawer.mjs";
30
30
  import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuHeader, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuTrigger } from "./components/DropdownMenu/DropdownMenu.mjs";
31
31
  import { EmptyState } from "./components/EmptyState/EmptyState.mjs";
32
+ import { FanFollowerCount } from "./components/FanFollowerCount/FanFollowerCount.mjs";
32
33
  import { IconButton } from "./components/IconButton/IconButton.mjs";
33
34
  import { AddIcon } from "./components/Icons/AddIcon.mjs";
34
35
  import { AffiliatesIcon } from "./components/Icons/AffiliatesIcon.mjs";
@@ -195,6 +196,7 @@ import { WifiOnIcon } from "./components/Icons/WifiOnIcon.mjs";
195
196
  import { WrenchIcon } from "./components/Icons/WrenchIcon.mjs";
196
197
  import { InfoBox, InfoBoxContent, InfoBoxTrigger } from "./components/InfoBox/InfoBox.mjs";
197
198
  import { InlineEdit } from "./components/InlineEdit/InlineEdit.mjs";
199
+ import { Link } from "./components/Link/Link.mjs";
198
200
  import { Loader } from "./components/Loader/Loader.mjs";
199
201
  import { Logo } from "./components/Logo/Logo.mjs";
200
202
  import { MobileStepper } from "./components/MobileStepper/MobileStepper.mjs";
@@ -203,6 +205,7 @@ import { Pagination } from "./components/Pagination/Pagination.mjs";
203
205
  import { PasswordField } from "./components/PasswordField/PasswordField.mjs";
204
206
  import { Pill } from "./components/Pill/Pill.mjs";
205
207
  import { ProfileOnlineStatus } from "./components/ProfileOnlineStatus/ProfileOnlineStatus.mjs";
208
+ import { ProfileStatus } from "./components/ProfileStatus/ProfileStatus.mjs";
206
209
  import { ProgressBar } from "./components/ProgressBar/ProgressBar.mjs";
207
210
  import { Radio } from "./components/Radio/Radio.mjs";
208
211
  import { RadioGroup } from "./components/RadioGroup/RadioGroup.mjs";
@@ -362,6 +365,7 @@ export {
362
365
  EyeOffIcon,
363
366
  EyeSlashIcon,
364
367
  FacebookIcon,
368
+ FanFollowerCount,
365
369
  FlagIcon,
366
370
  FlameIcon,
367
371
  FlashIcon,
@@ -389,6 +393,7 @@ export {
389
393
  InfoIcon,
390
394
  InlineEdit,
391
395
  LanguageIcon,
396
+ Link,
392
397
  LinkIcon,
393
398
  Loader,
394
399
  LocationIcon,
@@ -426,6 +431,7 @@ export {
426
431
  PlusIcon,
427
432
  PrivacyIcon,
428
433
  ProfileOnlineStatus,
434
+ ProfileStatus,
429
435
  ProgressBar,
430
436
  QueueIcon,
431
437
  Radio,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fanvue/ui",
3
- "version": "3.8.0",
3
+ "version": "3.9.0",
4
4
  "description": "React component library built with Tailwind CSS for Fanvue ecosystem",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org",