@fanvue/ui 2.0.0 → 2.1.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 (30) hide show
  1. package/dist/cjs/components/Dialog/Dialog.cjs +1 -1
  2. package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
  3. package/dist/cjs/components/Icons/NewMessageIcon.cjs +47 -0
  4. package/dist/cjs/components/Icons/NewMessageIcon.cjs.map +1 -0
  5. package/dist/cjs/components/Icons/ReverseIcon.cjs +64 -0
  6. package/dist/cjs/components/Icons/ReverseIcon.cjs.map +1 -0
  7. package/dist/cjs/components/Table/Table.cjs +341 -0
  8. package/dist/cjs/components/Table/Table.cjs.map +1 -0
  9. package/dist/cjs/components/Table/TablePagination.cjs +70 -0
  10. package/dist/cjs/components/Table/TablePagination.cjs.map +1 -0
  11. package/dist/cjs/index.cjs +26 -2
  12. package/dist/cjs/index.cjs.map +1 -1
  13. package/dist/components/Dialog/Dialog.mjs +1 -1
  14. package/dist/components/Dialog/Dialog.mjs.map +1 -1
  15. package/dist/components/Icons/NewMessageIcon.mjs +30 -0
  16. package/dist/components/Icons/NewMessageIcon.mjs.map +1 -0
  17. package/dist/components/Icons/ReverseIcon.mjs +47 -0
  18. package/dist/components/Icons/ReverseIcon.mjs.map +1 -0
  19. package/dist/components/Table/Table.mjs +324 -0
  20. package/dist/components/Table/Table.mjs.map +1 -0
  21. package/dist/components/Table/TablePagination.mjs +53 -0
  22. package/dist/components/Table/TablePagination.mjs.map +1 -0
  23. package/dist/index.d.ts +244 -40
  24. package/dist/index.mjs +26 -2
  25. package/dist/index.mjs.map +1 -1
  26. package/package.json +2 -2
  27. package/dist/cjs/components/Banner/Banner.cjs +0 -71
  28. package/dist/cjs/components/Banner/Banner.cjs.map +0 -1
  29. package/dist/components/Banner/Banner.mjs +0 -54
  30. package/dist/components/Banner/Banner.mjs.map +0 -1
package/dist/index.d.ts CHANGED
@@ -371,46 +371,6 @@ export declare const BankIcon: React_2.ForwardRefExoticComponent<React_2.SVGAttr
371
371
  className?: string;
372
372
  } & React_2.RefAttributes<SVGSVGElement>>;
373
373
 
374
- /**
375
- * A promotional banner card with gradient backgrounds, optional badge,
376
- * heading, description, and call-to-action button.
377
- *
378
- * @example
379
- * ```tsx
380
- * <Banner
381
- * variant="primary"
382
- * badgeLabel="New"
383
- * heading="Boost your earnings"
384
- * description="Try our latest feature to grow faster."
385
- * cta={{ label: "Learn more", onClick: handleClick }}
386
- * />
387
- * ```
388
- */
389
- export declare const Banner: React_2.ForwardRefExoticComponent<BannerProps & React_2.RefAttributes<HTMLDivElement>>;
390
-
391
- export declare interface BannerProps extends React_2.HTMLAttributes<HTMLDivElement> {
392
- /** Gradient variant controlling the background colours. @default "primary" */
393
- variant?: BannerVariant;
394
- /** Text rendered inside a `Badge` at the top of the banner. */
395
- badgeLabel?: string;
396
- /** Primary heading displayed below the badge. Rendered as an `<h3>`. */
397
- heading?: React_2.ReactNode;
398
- /** Supporting copy displayed below the heading. */
399
- description?: React_2.ReactNode;
400
- /**
401
- * Call-to-action button config. Renders a text-style `Button` with an arrow icon.
402
- * Pass `icon` to override the default `ArrowRightIcon`.
403
- */
404
- cta?: {
405
- label: string;
406
- onClick: () => void;
407
- icon?: React_2.ReactNode;
408
- };
409
- }
410
-
411
- /** Gradient variant of the banner. */
412
- export declare type BannerVariant = "primary" | "secondary" | "tertiary";
413
-
414
374
  export declare const BellIcon: React_2.ForwardRefExoticComponent<React_2.SVGAttributes<SVGSVGElement> & {
415
375
  className?: string;
416
376
  } & React_2.RefAttributes<SVGSVGElement>>;
@@ -1592,6 +1552,10 @@ export declare const MoreVerticalIcon: React_2.ForwardRefExoticComponent<React_2
1592
1552
  className?: string;
1593
1553
  } & React_2.RefAttributes<SVGSVGElement>>;
1594
1554
 
1555
+ export declare const NewMessageIcon: React_2.ForwardRefExoticComponent<React_2.SVGAttributes<SVGSVGElement> & {
1556
+ className?: string;
1557
+ } & React_2.RefAttributes<SVGSVGElement>>;
1558
+
1595
1559
  /**
1596
1560
  * Like `Omit`, but preserves discriminated unions.
1597
1561
  *
@@ -1818,6 +1782,10 @@ export declare const ReplyIcon: React_2.ForwardRefExoticComponent<React_2.SVGAtt
1818
1782
  className?: string;
1819
1783
  } & React_2.RefAttributes<SVGSVGElement>>;
1820
1784
 
1785
+ export declare const ReverseIcon: React_2.ForwardRefExoticComponent<React_2.SVGAttributes<SVGSVGElement> & {
1786
+ className?: string;
1787
+ } & React_2.RefAttributes<SVGSVGElement>>;
1788
+
1821
1789
  /**
1822
1790
  * A text input field with a search icon and optional clear button.
1823
1791
  *
@@ -2216,6 +2184,242 @@ export declare interface SwitchToggleProps extends Omit<React_2.HTMLAttributes<H
2216
2184
  /** Height of the switch toggle in pixels. */
2217
2185
  export declare type SwitchToggleSize = "24" | "32" | "40";
2218
2186
 
2187
+ /**
2188
+ * Semantic `<table>` element. Place inside {@link TableScrollArea}.
2189
+ */
2190
+ export declare const Table: React_2.ForwardRefExoticComponent<TableProps & React_2.RefAttributes<HTMLTableElement>>;
2191
+
2192
+ export declare const TableBody: React_2.ForwardRefExoticComponent<TableBodyProps & React_2.RefAttributes<HTMLTableSectionElement>>;
2193
+
2194
+ export declare interface TableBodyProps extends React_2.HTMLAttributes<HTMLTableSectionElement> {
2195
+ }
2196
+
2197
+ /**
2198
+ * Surface wrapper for data tables: rounded container, spacing, and size
2199
+ * context for {@link TableCell} descendants. Compose with {@link TableScrollArea},
2200
+ * {@link Table}, {@link TableHeader}, {@link TableBody}, {@link TableRow},
2201
+ * {@link TableHead}, and {@link TableCell}.
2202
+ *
2203
+ * @example
2204
+ * ```tsx
2205
+ * <TableCard size="md">
2206
+ * <TableScrollArea>
2207
+ * <Table>
2208
+ * <TableHeader>
2209
+ * <TableRow>
2210
+ * <TableHead>Name</TableHead>
2211
+ * </TableRow>
2212
+ * </TableHeader>
2213
+ * <TableBody>
2214
+ * <TableRow>
2215
+ * <TableCell>Jane Doe</TableCell>
2216
+ * </TableRow>
2217
+ * </TableBody>
2218
+ * </Table>
2219
+ * </TableScrollArea>
2220
+ * </TableCard>
2221
+ * ```
2222
+ */
2223
+ export declare const TableCard: React_2.ForwardRefExoticComponent<TableCardProps & React_2.RefAttributes<HTMLDivElement>>;
2224
+
2225
+ export declare interface TableCardProps extends React_2.HTMLAttributes<HTMLDivElement> {
2226
+ /** Row density applied to {@link TableCell} descendants. @default "md" */
2227
+ size?: TableSize;
2228
+ }
2229
+
2230
+ export declare const TableCell: React_2.ForwardRefExoticComponent<TableCellProps & React_2.RefAttributes<HTMLTableCellElement>>;
2231
+
2232
+ /**
2233
+ * Horizontal group for icons, chips, and metadata inside a {@link TableCell} (Figma `gap-[10px]`).
2234
+ */
2235
+ export declare const TableCellGroup: React_2.ForwardRefExoticComponent<TableCellGroupProps & React_2.RefAttributes<HTMLDivElement>>;
2236
+
2237
+ export declare interface TableCellGroupProps extends React_2.HTMLAttributes<HTMLDivElement> {
2238
+ }
2239
+
2240
+ /** Layout / typography preset for {@link TableCell} (orthogonal to {@link TableCellVariant}). */
2241
+ export declare type TableCellIntent = "default" | "checkbox" | "stacked" | "multiline" | "sideLabel";
2242
+
2243
+ export declare interface TableCellProps extends React_2.TdHTMLAttributes<HTMLTableCellElement> {
2244
+ /** `pillProgress` uses wider horizontal padding; row dividers match the default weight for visibility. @default "default" */
2245
+ cellVariant?: TableCellVariant;
2246
+ /** Alignment and typography preset for common cell types. @default "default" */
2247
+ intent?: TableCellIntent;
2248
+ }
2249
+
2250
+ /** Bottom border and padding preset for body cells (Figma table cell component). */
2251
+ export declare type TableCellVariant = "default" | "chip" | "pillProgress";
2252
+
2253
+ export declare const TableFooter: React_2.ForwardRefExoticComponent<TableFooterProps & React_2.RefAttributes<HTMLTableSectionElement>>;
2254
+
2255
+ export declare interface TableFooterProps extends React_2.HTMLAttributes<HTMLTableSectionElement> {
2256
+ }
2257
+
2258
+ export declare const TableHead: React_2.ForwardRefExoticComponent<TableHeadProps & React_2.RefAttributes<HTMLTableCellElement>>;
2259
+
2260
+ export declare const TableHeader: React_2.ForwardRefExoticComponent<TableHeaderProps & React_2.RefAttributes<HTMLTableSectionElement>>;
2261
+
2262
+ export declare interface TableHeaderProps extends React_2.HTMLAttributes<HTMLTableSectionElement> {
2263
+ }
2264
+
2265
+ /** Column layout preset for {@link TableHead}. */
2266
+ export declare type TableHeadIntent = "default" | "checkbox" | "sort" | "leading";
2267
+
2268
+ export declare interface TableHeadProps extends React_2.ThHTMLAttributes<HTMLTableCellElement> {
2269
+ /** Layout preset for common column types. @default "default" */
2270
+ intent?: TableHeadIntent;
2271
+ }
2272
+
2273
+ /**
2274
+ * Clamps child text to a fixed number of lines inside a {@link TableCell}.
2275
+ */
2276
+ export declare const TableLineClamp: React_2.ForwardRefExoticComponent<TableLineClampProps & React_2.RefAttributes<HTMLDivElement>>;
2277
+
2278
+ export declare interface TableLineClampProps extends React_2.HTMLAttributes<HTMLDivElement> {
2279
+ /** Number of lines before ellipsis. @default 2 */
2280
+ lines?: 1 | 2 | 3;
2281
+ }
2282
+
2283
+ /**
2284
+ * Rounded thumbnail sized from {@link TableCard} `size` (`md` vs `lg`).
2285
+ */
2286
+ export declare const TableMediaThumbnail: React_2.ForwardRefExoticComponent<TableMediaThumbnailProps & React_2.RefAttributes<HTMLDivElement>>;
2287
+
2288
+ export declare interface TableMediaThumbnailProps extends Omit<React_2.HTMLAttributes<HTMLDivElement>, "children"> {
2289
+ /** Image URL. */
2290
+ src: string;
2291
+ /** Alt text for the image. @default "" */
2292
+ alt?: string;
2293
+ /** Applies the table’s blurred-media treatment. @default false */
2294
+ blurred?: boolean;
2295
+ /** `center` uses the fixed media column width from the lg spec. @default "start" */
2296
+ align?: "start" | "center";
2297
+ }
2298
+
2299
+ /**
2300
+ * Footer bar for data tables: rows-per-page control, page navigation, and range
2301
+ * summary. Pair `paginationSlot` with {@link Pagination} for numbered controls.
2302
+ *
2303
+ * @example
2304
+ * ```tsx
2305
+ * <TablePagination
2306
+ * leadingSlot={<Select size="32" aria-label="Rows per page">…</Select>}
2307
+ * paginationSlot={<Pagination totalPages={5} currentPage={2} onPageChange={setPage} />}
2308
+ * summary="20–30 of 100 rows"
2309
+ * />
2310
+ * ```
2311
+ */
2312
+ export declare const TablePagination: React_2.ForwardRefExoticComponent<TablePaginationProps & React_2.RefAttributes<HTMLDivElement>>;
2313
+
2314
+ /** Layout preset for the pagination bar — desktop (range on the right) or stacked mobile. */
2315
+ export declare type TablePaginationLayout = "desktop" | "mobile";
2316
+
2317
+ export declare interface TablePaginationProps extends React_2.HTMLAttributes<HTMLDivElement> {
2318
+ /** Layout preset. @default "desktop" */
2319
+ layout?: TablePaginationLayout;
2320
+ /** Left (desktop) or top row (mobile) content, e.g. rows-per-page {@link Select}. */
2321
+ leadingSlot?: React_2.ReactNode;
2322
+ /** Center (desktop) or bottom row (mobile) content, e.g. {@link Pagination}. */
2323
+ paginationSlot?: React_2.ReactNode;
2324
+ /** Summary text or node (e.g. current range and total). */
2325
+ summary: React_2.ReactNode;
2326
+ }
2327
+
2328
+ /**
2329
+ * Vertical layout for pill label + {@link TableProgressTrack} in a cell.
2330
+ */
2331
+ export declare const TablePillProgressLayout: React_2.ForwardRefExoticComponent<TablePillProgressLayoutProps & React_2.RefAttributes<HTMLDivElement>>;
2332
+
2333
+ export declare interface TablePillProgressLayoutProps extends React_2.HTMLAttributes<HTMLDivElement> {
2334
+ }
2335
+
2336
+ /**
2337
+ * Thin progress track used with badges in table cells (Figma pill + progress).
2338
+ * Renders with `role="progressbar"` and a default `aria-label` of `"Progress"`.
2339
+ */
2340
+ export declare const TableProgressTrack: React_2.ForwardRefExoticComponent<TableProgressTrackProps & React_2.RefAttributes<HTMLDivElement>>;
2341
+
2342
+ export declare interface TableProgressTrackProps extends React_2.HTMLAttributes<HTMLDivElement> {
2343
+ /** Fill width from 0–100. @default 0 */
2344
+ value?: number;
2345
+ }
2346
+
2347
+ export declare interface TableProps extends React_2.TableHTMLAttributes<HTMLTableElement> {
2348
+ }
2349
+
2350
+ export declare const TableRow: React_2.ForwardRefExoticComponent<TableRowProps & React_2.RefAttributes<HTMLTableRowElement>>;
2351
+
2352
+ export declare interface TableRowProps extends React_2.HTMLAttributes<HTMLTableRowElement> {
2353
+ }
2354
+
2355
+ /**
2356
+ * Rows-per-page {@link Select} styled for {@link TablePagination} (Figma field).
2357
+ */
2358
+ export declare function TableRowsPerPageSelect(props: TableRowsPerPageSelectProps): JSX.Element;
2359
+
2360
+ export declare interface TableRowsPerPageSelectProps {
2361
+ /** Passed to the trigger for forms and labels. */
2362
+ id?: string;
2363
+ /** Accessible name for the trigger when no visible label. @default "Rows per page" */
2364
+ "aria-label"?: string;
2365
+ }
2366
+
2367
+ /**
2368
+ * Horizontal scroll container for wide tables. Uses an inner scrollport so the
2369
+ * table respects the card radius (plain `overflow-x-auto` on the table
2370
+ * wrapper often loses rounded corners with `border-collapse`).
2371
+ */
2372
+ export declare const TableScrollArea: React_2.ForwardRefExoticComponent<TableScrollAreaProps & React_2.RefAttributes<HTMLDivElement>>;
2373
+
2374
+ export declare interface TableScrollAreaProps extends React_2.HTMLAttributes<HTMLDivElement> {
2375
+ /** Rounds the top of the table block to match {@link TableCard}. Set `false` when {@link TableToolbar} is above this scroll area. @default true */
2376
+ roundTop?: boolean;
2377
+ }
2378
+
2379
+ /** Row density for body cells — `md` (60px min height) or `lg` (80px). */
2380
+ export declare type TableSize = "md" | "lg";
2381
+
2382
+ /**
2383
+ * Sortable column label with caption typography and a sort affordance.
2384
+ */
2385
+ export declare const TableSortLabel: React_2.ForwardRefExoticComponent<TableSortLabelProps & React_2.RefAttributes<HTMLSpanElement>>;
2386
+
2387
+ export declare interface TableSortLabelProps extends React_2.HTMLAttributes<HTMLSpanElement> {
2388
+ children: React_2.ReactNode;
2389
+ }
2390
+
2391
+ /**
2392
+ * Two-line primary + secondary text block for “cell + info” patterns.
2393
+ */
2394
+ export declare function TableStackedText({ title, subtitle }: TableStackedTextProps): JSX.Element;
2395
+
2396
+ export declare namespace TableStackedText {
2397
+ var displayName: string;
2398
+ }
2399
+
2400
+ export declare interface TableStackedTextProps {
2401
+ /** Primary line (semibold body). */
2402
+ title: React_2.ReactNode;
2403
+ /** Secondary line (caption, muted). */
2404
+ subtitle: React_2.ReactNode;
2405
+ }
2406
+
2407
+ /**
2408
+ * Small status indicator dot for table cells (Figma status column).
2409
+ */
2410
+ export declare const TableStatusDot: React_2.ForwardRefExoticComponent<TableStatusDotProps & React_2.RefAttributes<HTMLDivElement>>;
2411
+
2412
+ export declare interface TableStatusDotProps extends React_2.HTMLAttributes<HTMLDivElement> {
2413
+ }
2414
+
2415
+ /**
2416
+ * Optional toolbar row above the table (e.g. bulk selection actions).
2417
+ */
2418
+ export declare const TableToolbar: React_2.ForwardRefExoticComponent<TableToolbarProps & React_2.RefAttributes<HTMLDivElement>>;
2419
+
2420
+ export declare interface TableToolbarProps extends React_2.HTMLAttributes<HTMLDivElement> {
2421
+ }
2422
+
2219
2423
  /**
2220
2424
  * Root container for a tabbed interface. Manages the active tab state and
2221
2425
  * coordinates {@link TabsList}, {@link TabsTrigger}, and {@link TabsContent}.
package/dist/index.mjs CHANGED
@@ -9,7 +9,6 @@ import { useAudioRecorder } from "./components/AudioUpload/useAudioRecorder.mjs"
9
9
  import { Autocomplete } from "./components/Autocomplete/Autocomplete.mjs";
10
10
  import { Avatar, AvatarFallback, AvatarImage, AvatarRoot } from "./components/Avatar/Avatar.mjs";
11
11
  import { Badge } from "./components/Badge/Badge.mjs";
12
- import { Banner } from "./components/Banner/Banner.mjs";
13
12
  import { BottomNavigation } from "./components/BottomNavigation/BottomNavigation.mjs";
14
13
  import { BottomNavigationAction } from "./components/BottomNavigation/BottomNavigationAction.mjs";
15
14
  import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "./components/Breadcrumb/Breadcrumb.mjs";
@@ -98,6 +97,7 @@ import { MinusIcon } from "./components/Icons/MinusIcon.mjs";
98
97
  import { MoonIcon } from "./components/Icons/MoonIcon.mjs";
99
98
  import { MoreIcon } from "./components/Icons/MoreIcon.mjs";
100
99
  import { MoreVerticalIcon } from "./components/Icons/MoreVerticalIcon.mjs";
100
+ import { NewMessageIcon } from "./components/Icons/NewMessageIcon.mjs";
101
101
  import { PauseIcon } from "./components/Icons/PauseIcon.mjs";
102
102
  import { PhoneIcon } from "./components/Icons/PhoneIcon.mjs";
103
103
  import { PhoneOffIcon } from "./components/Icons/PhoneOffIcon.mjs";
@@ -108,6 +108,7 @@ import { PrivacyIcon } from "./components/Icons/PrivacyIcon.mjs";
108
108
  import { RepeatIcon } from "./components/Icons/RepeatIcon.mjs";
109
109
  import { Reply2Icon } from "./components/Icons/Reply2Icon.mjs";
110
110
  import { ReplyIcon } from "./components/Icons/ReplyIcon.mjs";
111
+ import { ReverseIcon } from "./components/Icons/ReverseIcon.mjs";
111
112
  import { SearchIcon } from "./components/Icons/SearchIcon.mjs";
112
113
  import { SendIcon } from "./components/Icons/SendIcon.mjs";
113
114
  import { SettingsIcon } from "./components/Icons/SettingsIcon.mjs";
@@ -160,6 +161,8 @@ import { Snackbar } from "./components/Snackbar/Snackbar.mjs";
160
161
  import { Switch } from "./components/Switch/Switch.mjs";
161
162
  import { SwitchField } from "./components/SwitchField/SwitchField.mjs";
162
163
  import { SwitchToggle } from "./components/SwitchToggle/SwitchToggle.mjs";
164
+ import { Table, TableBody, TableCard, TableCell, TableCellGroup, TableFooter, TableHead, TableHeader, TableLineClamp, TableMediaThumbnail, TablePillProgressLayout, TableProgressTrack, TableRow, TableRowsPerPageSelect, TableScrollArea, TableSortLabel, TableStackedText, TableStatusDot, TableToolbar } from "./components/Table/Table.mjs";
165
+ import { TablePagination } from "./components/Table/TablePagination.mjs";
163
166
  import { Tabs } from "./components/Tabs/Tabs.mjs";
164
167
  import { TabsContent } from "./components/Tabs/TabsContent.mjs";
165
168
  import { TabsList } from "./components/Tabs/TabsList.mjs";
@@ -191,7 +194,6 @@ export {
191
194
  AvatarRoot,
192
195
  Badge,
193
196
  BankIcon,
194
- Banner,
195
197
  BellIcon,
196
198
  BellOffIcon,
197
199
  BoltIcon,
@@ -310,6 +312,7 @@ export {
310
312
  MoonIcon,
311
313
  MoreIcon,
312
314
  MoreVerticalIcon,
315
+ NewMessageIcon,
313
316
  OnlineBlinkingIcon,
314
317
  Pagination,
315
318
  PasswordField,
@@ -327,6 +330,7 @@ export {
327
330
  RepeatIcon,
328
331
  Reply2Icon,
329
332
  ReplyIcon,
333
+ ReverseIcon,
330
334
  SearchField,
331
335
  SearchIcon,
332
336
  Select,
@@ -351,6 +355,26 @@ export {
351
355
  Switch,
352
356
  SwitchField,
353
357
  SwitchToggle,
358
+ Table,
359
+ TableBody,
360
+ TableCard,
361
+ TableCell,
362
+ TableCellGroup,
363
+ TableFooter,
364
+ TableHead,
365
+ TableHeader,
366
+ TableLineClamp,
367
+ TableMediaThumbnail,
368
+ TablePagination,
369
+ TablePillProgressLayout,
370
+ TableProgressTrack,
371
+ TableRow,
372
+ TableRowsPerPageSelect,
373
+ TableScrollArea,
374
+ TableSortLabel,
375
+ TableStackedText,
376
+ TableStatusDot,
377
+ TableToolbar,
354
378
  Tabs,
355
379
  TabsContent,
356
380
  TabsList,
@@ -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": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "React component library built with Tailwind CSS for Fanvue ecosystem",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org",
@@ -164,7 +164,7 @@
164
164
  "size-limit": [
165
165
  {
166
166
  "path": "dist/index.mjs",
167
- "limit": "50 KB",
167
+ "limit": "55 KB",
168
168
  "ignore": [
169
169
  "@radix-ui/*",
170
170
  "clsx",
@@ -1,71 +0,0 @@
1
- "use client";
2
- "use strict";
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
- const jsxRuntime = require("react/jsx-runtime");
5
- const React = require("react");
6
- const cn = require("../../utils/cn.cjs");
7
- const Badge = require("../Badge/Badge.cjs");
8
- const Button = require("../Button/Button.cjs");
9
- const ArrowRightIcon = require("../Icons/ArrowRightIcon.cjs");
10
- function _interopNamespaceDefault(e) {
11
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
12
- if (e) {
13
- for (const k in e) {
14
- if (k !== "default") {
15
- const d = Object.getOwnPropertyDescriptor(e, k);
16
- Object.defineProperty(n, k, d.get ? d : {
17
- enumerable: true,
18
- get: () => e[k]
19
- });
20
- }
21
- }
22
- }
23
- n.default = e;
24
- return Object.freeze(n);
25
- }
26
- const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
27
- const VARIANT_GRADIENTS = {
28
- primary: "from-[var(--primitives-color-green-50)] to-[var(--primitives-color-purple-50)]",
29
- secondary: "from-[var(--primitives-color-purple-50)] to-[var(--primitives-color-pink-50)]",
30
- tertiary: "from-[var(--primitives-color-pink-50)] to-[var(--primitives-color-info-50)]"
31
- };
32
- const LIGHT_MODE_OVERRIDES = {
33
- "--color-content-primary": "#151515ff",
34
- "--color-content-secondary": "#404040ff",
35
- "--color-neutral-alphas-100": "#1515150a"
36
- };
37
- const Banner = React__namespace.forwardRef(
38
- ({ className, variant = "primary", badgeLabel, heading, description, cta, style, ...props }, ref) => {
39
- return /* @__PURE__ */ jsxRuntime.jsxs(
40
- "div",
41
- {
42
- ref,
43
- className: cn.cn(
44
- "flex flex-col items-start gap-2 overflow-hidden rounded-2xl bg-gradient-to-br p-3 text-content-primary",
45
- VARIANT_GRADIENTS[variant],
46
- className
47
- ),
48
- style: { ...LIGHT_MODE_OVERRIDES, ...style },
49
- ...props,
50
- children: [
51
- badgeLabel && /* @__PURE__ */ jsxRuntime.jsx(Badge.Badge, { children: badgeLabel }),
52
- heading && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "typography-semibold-body-md", children: heading }),
53
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "typography-regular-body-sm", children: description }),
54
- cta && /* @__PURE__ */ jsxRuntime.jsx(
55
- Button.Button,
56
- {
57
- variant: "text",
58
- onClick: cta.onClick,
59
- size: "24",
60
- rightIcon: cta.icon ?? /* @__PURE__ */ jsxRuntime.jsx(ArrowRightIcon.ArrowRightIcon, {}),
61
- children: cta.label
62
- }
63
- )
64
- ]
65
- }
66
- );
67
- }
68
- );
69
- Banner.displayName = "Banner";
70
- exports.Banner = Banner;
71
- //# sourceMappingURL=Banner.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Banner.cjs","sources":["../../../../src/components/Banner/Banner.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Badge } from \"../Badge/Badge\";\nimport { Button } from \"../Button/Button\";\nimport { ArrowRightIcon } from \"../Icons/ArrowRightIcon\";\n\n/** Gradient variant of the banner. */\nexport type BannerVariant = \"primary\" | \"secondary\" | \"tertiary\";\n\nconst VARIANT_GRADIENTS: Record<BannerVariant, string> = {\n primary: \"from-[var(--primitives-color-green-50)] to-[var(--primitives-color-purple-50)]\",\n secondary: \"from-[var(--primitives-color-purple-50)] to-[var(--primitives-color-pink-50)]\",\n tertiary: \"from-[var(--primitives-color-pink-50)] to-[var(--primitives-color-info-50)]\",\n};\n\nexport interface BannerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Gradient variant controlling the background colours. @default \"primary\" */\n variant?: BannerVariant;\n /** Text rendered inside a `Badge` at the top of the banner. */\n badgeLabel?: string;\n /** Primary heading displayed below the badge. Rendered as an `<h3>`. */\n heading?: React.ReactNode;\n /** Supporting copy displayed below the heading. */\n description?: React.ReactNode;\n /**\n * Call-to-action button config. Renders a text-style `Button` with an arrow icon.\n * Pass `icon` to override the default `ArrowRightIcon`.\n */\n cta?: { label: string; onClick: () => void; icon?: React.ReactNode };\n}\n\n/**\n * Force light-mode semantic tokens on the Banner since its gradient\n * backgrounds are always light regardless of the current colour scheme.\n */\nconst LIGHT_MODE_OVERRIDES: React.CSSProperties = {\n \"--color-content-primary\": \"#151515ff\",\n \"--color-content-secondary\": \"#404040ff\",\n \"--color-neutral-alphas-100\": \"#1515150a\",\n} as React.CSSProperties;\n\n/**\n * A promotional banner card with gradient backgrounds, optional badge,\n * heading, description, and call-to-action button.\n *\n * @example\n * ```tsx\n * <Banner\n * variant=\"primary\"\n * badgeLabel=\"New\"\n * heading=\"Boost your earnings\"\n * description=\"Try our latest feature to grow faster.\"\n * cta={{ label: \"Learn more\", onClick: handleClick }}\n * />\n * ```\n */\nexport const Banner = React.forwardRef<HTMLDivElement, BannerProps>(\n (\n { className, variant = \"primary\", badgeLabel, heading, description, cta, style, ...props },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col items-start gap-2 overflow-hidden rounded-2xl bg-gradient-to-br p-3 text-content-primary\",\n VARIANT_GRADIENTS[variant],\n className,\n )}\n style={{ ...LIGHT_MODE_OVERRIDES, ...style }}\n {...props}\n >\n {badgeLabel && <Badge>{badgeLabel}</Badge>}\n {heading && <h3 className=\"typography-semibold-body-md\">{heading}</h3>}\n {description && <p className=\"typography-regular-body-sm\">{description}</p>}\n {cta && (\n <Button\n variant=\"text\"\n onClick={cta.onClick}\n size=\"24\"\n rightIcon={cta.icon ?? <ArrowRightIcon />}\n >\n {cta.label}\n </Button>\n )}\n </div>\n );\n },\n);\n\nBanner.displayName = \"Banner\";\n"],"names":["React","jsxs","cn","jsx","Badge","Button","ArrowRightIcon"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAM,oBAAmD;AAAA,EACvD,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AACZ;AAsBA,MAAM,uBAA4C;AAAA,EAChD,2BAA2B;AAAA,EAC3B,6BAA6B;AAAA,EAC7B,8BAA8B;AAChC;AAiBO,MAAM,SAASA,iBAAM;AAAA,EAC1B,CACE,EAAE,WAAW,UAAU,WAAW,YAAY,SAAS,aAAa,KAAK,OAAO,GAAG,MAAA,GACnF,QACG;AACH,WACEC,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAWC,GAAAA;AAAAA,UACT;AAAA,UACA,kBAAkB,OAAO;AAAA,UACzB;AAAA,QAAA;AAAA,QAEF,OAAO,EAAE,GAAG,sBAAsB,GAAG,MAAA;AAAA,QACpC,GAAG;AAAA,QAEH,UAAA;AAAA,UAAA,cAAcC,2BAAAA,IAACC,MAAAA,SAAO,UAAA,WAAA,CAAW;AAAA,UACjC,WAAWD,2BAAAA,IAAC,MAAA,EAAG,WAAU,+BAA+B,UAAA,SAAQ;AAAA,UAChE,eAAeA,2BAAAA,IAAC,KAAA,EAAE,WAAU,8BAA8B,UAAA,aAAY;AAAA,UACtE,OACCA,2BAAAA;AAAAA,YAACE,OAAAA;AAAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAAS,IAAI;AAAA,cACb,MAAK;AAAA,cACL,WAAW,IAAI,QAAQF,2BAAAA,IAACG,eAAAA,gBAAA,CAAA,CAAe;AAAA,cAEtC,UAAA,IAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QACP;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AAEA,OAAO,cAAc;;"}
@@ -1,54 +0,0 @@
1
- "use client";
2
- import { jsxs, jsx } from "react/jsx-runtime";
3
- import * as React from "react";
4
- import { cn } from "../../utils/cn.mjs";
5
- import { Badge } from "../Badge/Badge.mjs";
6
- import { Button } from "../Button/Button.mjs";
7
- import { ArrowRightIcon } from "../Icons/ArrowRightIcon.mjs";
8
- const VARIANT_GRADIENTS = {
9
- primary: "from-[var(--primitives-color-green-50)] to-[var(--primitives-color-purple-50)]",
10
- secondary: "from-[var(--primitives-color-purple-50)] to-[var(--primitives-color-pink-50)]",
11
- tertiary: "from-[var(--primitives-color-pink-50)] to-[var(--primitives-color-info-50)]"
12
- };
13
- const LIGHT_MODE_OVERRIDES = {
14
- "--color-content-primary": "#151515ff",
15
- "--color-content-secondary": "#404040ff",
16
- "--color-neutral-alphas-100": "#1515150a"
17
- };
18
- const Banner = React.forwardRef(
19
- ({ className, variant = "primary", badgeLabel, heading, description, cta, style, ...props }, ref) => {
20
- return /* @__PURE__ */ jsxs(
21
- "div",
22
- {
23
- ref,
24
- className: cn(
25
- "flex flex-col items-start gap-2 overflow-hidden rounded-2xl bg-gradient-to-br p-3 text-content-primary",
26
- VARIANT_GRADIENTS[variant],
27
- className
28
- ),
29
- style: { ...LIGHT_MODE_OVERRIDES, ...style },
30
- ...props,
31
- children: [
32
- badgeLabel && /* @__PURE__ */ jsx(Badge, { children: badgeLabel }),
33
- heading && /* @__PURE__ */ jsx("h3", { className: "typography-semibold-body-md", children: heading }),
34
- description && /* @__PURE__ */ jsx("p", { className: "typography-regular-body-sm", children: description }),
35
- cta && /* @__PURE__ */ jsx(
36
- Button,
37
- {
38
- variant: "text",
39
- onClick: cta.onClick,
40
- size: "24",
41
- rightIcon: cta.icon ?? /* @__PURE__ */ jsx(ArrowRightIcon, {}),
42
- children: cta.label
43
- }
44
- )
45
- ]
46
- }
47
- );
48
- }
49
- );
50
- Banner.displayName = "Banner";
51
- export {
52
- Banner
53
- };
54
- //# sourceMappingURL=Banner.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Banner.mjs","sources":["../../../src/components/Banner/Banner.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Badge } from \"../Badge/Badge\";\nimport { Button } from \"../Button/Button\";\nimport { ArrowRightIcon } from \"../Icons/ArrowRightIcon\";\n\n/** Gradient variant of the banner. */\nexport type BannerVariant = \"primary\" | \"secondary\" | \"tertiary\";\n\nconst VARIANT_GRADIENTS: Record<BannerVariant, string> = {\n primary: \"from-[var(--primitives-color-green-50)] to-[var(--primitives-color-purple-50)]\",\n secondary: \"from-[var(--primitives-color-purple-50)] to-[var(--primitives-color-pink-50)]\",\n tertiary: \"from-[var(--primitives-color-pink-50)] to-[var(--primitives-color-info-50)]\",\n};\n\nexport interface BannerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Gradient variant controlling the background colours. @default \"primary\" */\n variant?: BannerVariant;\n /** Text rendered inside a `Badge` at the top of the banner. */\n badgeLabel?: string;\n /** Primary heading displayed below the badge. Rendered as an `<h3>`. */\n heading?: React.ReactNode;\n /** Supporting copy displayed below the heading. */\n description?: React.ReactNode;\n /**\n * Call-to-action button config. Renders a text-style `Button` with an arrow icon.\n * Pass `icon` to override the default `ArrowRightIcon`.\n */\n cta?: { label: string; onClick: () => void; icon?: React.ReactNode };\n}\n\n/**\n * Force light-mode semantic tokens on the Banner since its gradient\n * backgrounds are always light regardless of the current colour scheme.\n */\nconst LIGHT_MODE_OVERRIDES: React.CSSProperties = {\n \"--color-content-primary\": \"#151515ff\",\n \"--color-content-secondary\": \"#404040ff\",\n \"--color-neutral-alphas-100\": \"#1515150a\",\n} as React.CSSProperties;\n\n/**\n * A promotional banner card with gradient backgrounds, optional badge,\n * heading, description, and call-to-action button.\n *\n * @example\n * ```tsx\n * <Banner\n * variant=\"primary\"\n * badgeLabel=\"New\"\n * heading=\"Boost your earnings\"\n * description=\"Try our latest feature to grow faster.\"\n * cta={{ label: \"Learn more\", onClick: handleClick }}\n * />\n * ```\n */\nexport const Banner = React.forwardRef<HTMLDivElement, BannerProps>(\n (\n { className, variant = \"primary\", badgeLabel, heading, description, cta, style, ...props },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col items-start gap-2 overflow-hidden rounded-2xl bg-gradient-to-br p-3 text-content-primary\",\n VARIANT_GRADIENTS[variant],\n className,\n )}\n style={{ ...LIGHT_MODE_OVERRIDES, ...style }}\n {...props}\n >\n {badgeLabel && <Badge>{badgeLabel}</Badge>}\n {heading && <h3 className=\"typography-semibold-body-md\">{heading}</h3>}\n {description && <p className=\"typography-regular-body-sm\">{description}</p>}\n {cta && (\n <Button\n variant=\"text\"\n onClick={cta.onClick}\n size=\"24\"\n rightIcon={cta.icon ?? <ArrowRightIcon />}\n >\n {cta.label}\n </Button>\n )}\n </div>\n );\n },\n);\n\nBanner.displayName = \"Banner\";\n"],"names":[],"mappings":";;;;;;;AASA,MAAM,oBAAmD;AAAA,EACvD,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AACZ;AAsBA,MAAM,uBAA4C;AAAA,EAChD,2BAA2B;AAAA,EAC3B,6BAA6B;AAAA,EAC7B,8BAA8B;AAChC;AAiBO,MAAM,SAAS,MAAM;AAAA,EAC1B,CACE,EAAE,WAAW,UAAU,WAAW,YAAY,SAAS,aAAa,KAAK,OAAO,GAAG,MAAA,GACnF,QACG;AACH,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA,kBAAkB,OAAO;AAAA,UACzB;AAAA,QAAA;AAAA,QAEF,OAAO,EAAE,GAAG,sBAAsB,GAAG,MAAA;AAAA,QACpC,GAAG;AAAA,QAEH,UAAA;AAAA,UAAA,cAAc,oBAAC,SAAO,UAAA,WAAA,CAAW;AAAA,UACjC,WAAW,oBAAC,MAAA,EAAG,WAAU,+BAA+B,UAAA,SAAQ;AAAA,UAChE,eAAe,oBAAC,KAAA,EAAE,WAAU,8BAA8B,UAAA,aAAY;AAAA,UACtE,OACC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAAS,IAAI;AAAA,cACb,MAAK;AAAA,cACL,WAAW,IAAI,QAAQ,oBAAC,gBAAA,CAAA,CAAe;AAAA,cAEtC,UAAA,IAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QACP;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AAEA,OAAO,cAAc;"}