@ship-it-ui/ui 0.0.7 → 0.0.8

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.
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { ClassValue } from 'clsx';
2
2
  export { ClassValue } from 'clsx';
3
3
  import * as react from 'react';
4
- import { useEffect, KeyboardEvent, RefObject, ButtonHTMLAttributes, ReactNode, HTMLAttributes, InputHTMLAttributes, TextareaHTMLAttributes, AnchorHTMLAttributes, Ref, LabelHTMLAttributes, FC, SVGAttributes, MouseEventHandler } from 'react';
4
+ import { useEffect, KeyboardEvent, RefObject, ButtonHTMLAttributes, ReactNode, HTMLAttributes, InputHTMLAttributes, TextareaHTMLAttributes, AnchorHTMLAttributes, Ref, forwardRef, LabelHTMLAttributes, FC, SVGAttributes, MouseEventHandler } from 'react';
5
5
  import * as class_variance_authority_types from 'class-variance-authority/types';
6
6
  import { VariantProps } from 'class-variance-authority';
7
7
  import * as RadixCheckbox from '@radix-ui/react-checkbox';
@@ -10,6 +10,7 @@ import * as RadixRadio from '@radix-ui/react-radio-group';
10
10
  import * as RadixSelect from '@radix-ui/react-select';
11
11
  import * as RadixSlider from '@radix-ui/react-slider';
12
12
  import * as RadixSwitch from '@radix-ui/react-switch';
13
+ import * as RadixAccordion from '@radix-ui/react-accordion';
13
14
  import * as RadixContext from '@radix-ui/react-context-menu';
14
15
  import * as RadixDialog from '@radix-ui/react-dialog';
15
16
  import * as RadixAlert from '@radix-ui/react-alert-dialog';
@@ -376,6 +377,31 @@ interface SearchInputProps extends InputHTMLAttributes<HTMLInputElement> {
376
377
  */
377
378
  declare const SearchInput: react.ForwardRefExoticComponent<SearchInputProps & react.RefAttributes<HTMLInputElement>>;
378
379
 
380
+ /**
381
+ * NumberInput — numeric input with `−` / `+` stepper buttons. Long-press the
382
+ * buttons to repeat. Use for guest count, additional drivers, days, child
383
+ * seats — anywhere users tweak a small integer or decimal.
384
+ */
385
+ interface NumberInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'defaultValue' | 'onChange' | 'type' | 'size'> {
386
+ /** Current value (controlled). */
387
+ value?: number;
388
+ /** Default value (uncontrolled). */
389
+ defaultValue?: number;
390
+ /** Fires when the value changes via input or stepper. */
391
+ onValueChange?: (value: number) => void;
392
+ /** Minimum allowed value. Default `0`. */
393
+ min?: number;
394
+ /** Maximum allowed value. Default `Infinity`. */
395
+ max?: number;
396
+ /** Step increment. Default `1`. */
397
+ step?: number;
398
+ /** Visual size. Default `'md'`. */
399
+ size?: 'sm' | 'md' | 'lg';
400
+ /** Accessible label. */
401
+ 'aria-label'?: string;
402
+ }
403
+ declare const NumberInput: react.ForwardRefExoticComponent<NumberInputProps & react.RefAttributes<HTMLInputElement>>;
404
+
379
405
  interface OTPProps {
380
406
  /** Number of digit slots. Defaults to 6. */
381
407
  length?: number;
@@ -416,6 +442,31 @@ interface RadioProps extends Omit<RadixRadio.RadioGroupItemProps, 'asChild' | 'c
416
442
  }
417
443
  declare const Radio: react.ForwardRefExoticComponent<RadioProps & react.RefAttributes<HTMLButtonElement>>;
418
444
 
445
+ /**
446
+ * SegmentedControl — pill-styled radio group for filtering the current view's
447
+ * data (Daily / Weekly / Monthly rates, Map / List view). Distinct from
448
+ * `Tabs`, which changes navigational context.
449
+ */
450
+ interface SegmentedControlOption {
451
+ /** Stable identifier. */
452
+ value: string;
453
+ /** Visible label. */
454
+ label: ReactNode;
455
+ /** Optional leading icon name (from `@ship-it-ui/icons`). */
456
+ icon?: string;
457
+ /** When true, this option is disabled. */
458
+ disabled?: boolean;
459
+ }
460
+ interface SegmentedControlProps extends Omit<RadixRadio.RadioGroupProps, 'orientation' | 'children'> {
461
+ /** Options to render. */
462
+ options: ReadonlyArray<SegmentedControlOption>;
463
+ /** Visual size. Default `md`. */
464
+ size?: 'sm' | 'md';
465
+ /** When true, stretches to fill the parent. */
466
+ fullWidth?: boolean;
467
+ }
468
+ declare const SegmentedControl: react.ForwardRefExoticComponent<SegmentedControlProps & react.RefAttributes<HTMLDivElement>>;
469
+
419
470
  declare const SelectRoot: react.FC<RadixSelect.SelectProps>;
420
471
  declare const SelectValue: react.ForwardRefExoticComponent<RadixSelect.SelectValueProps & react.RefAttributes<HTMLSpanElement>>;
421
472
  declare const SelectGroup: react.ForwardRefExoticComponent<RadixSelect.SelectGroupProps & react.RefAttributes<HTMLDivElement>>;
@@ -512,6 +563,26 @@ interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement>, Var
512
563
  }
513
564
  declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
514
565
 
566
+ /**
567
+ * Accordion — collapsible sections. Built on Radix Accordion.
568
+ *
569
+ * Use `type='single'` for one-open-at-a-time (FAQ pages); `'multiple'` when
570
+ * sections are independent (filter groups, listing detail panels).
571
+ */
572
+ type AccordionProps = (RadixAccordion.AccordionSingleProps | RadixAccordion.AccordionMultipleProps) & {
573
+ children?: ReactNode;
574
+ };
575
+ declare const Accordion: react.ForwardRefExoticComponent<AccordionProps & react.RefAttributes<HTMLDivElement>>;
576
+ type AccordionItemProps = RadixAccordion.AccordionItemProps;
577
+ declare const AccordionItem: react.ForwardRefExoticComponent<RadixAccordion.AccordionItemProps & react.RefAttributes<HTMLDivElement>>;
578
+ interface AccordionTriggerProps extends Omit<RadixAccordion.AccordionTriggerProps, 'asChild'> {
579
+ /** Optional icon name rendered to the left of the trigger label. */
580
+ leadingIcon?: string;
581
+ }
582
+ declare const AccordionTrigger: react.ForwardRefExoticComponent<AccordionTriggerProps & react.RefAttributes<HTMLButtonElement>>;
583
+ type AccordionContentProps = RadixAccordion.AccordionContentProps;
584
+ declare const AccordionContent: react.ForwardRefExoticComponent<RadixAccordion.AccordionContentProps & react.RefAttributes<HTMLDivElement>>;
585
+
515
586
  type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
516
587
  type AvatarStatus = 'ok' | 'warn' | 'err' | 'off';
517
588
  interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {
@@ -548,7 +619,7 @@ interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {
548
619
  declare const AvatarGroup: react.ForwardRefExoticComponent<AvatarGroupProps & react.RefAttributes<HTMLDivElement>>;
549
620
 
550
621
  declare const badgeStyles: (props?: ({
551
- variant?: "outline" | "err" | "pink" | "purple" | "solid" | "ok" | "warn" | "accent" | "neutral" | null | undefined;
622
+ variant?: "outline" | "err" | "pink" | "purple" | "solid" | "warn" | "ok" | "accent" | "neutral" | null | undefined;
552
623
  size?: "sm" | "md" | "lg" | null | undefined;
553
624
  } & class_variance_authority_types.ClassProp) | undefined) => string;
554
625
  interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeStyles> {
@@ -667,6 +738,37 @@ type KbdProps = HTMLAttributes<HTMLElement>;
667
738
  */
668
739
  declare const Kbd: react.ForwardRefExoticComponent<KbdProps & react.RefAttributes<HTMLElement>>;
669
740
 
741
+ /**
742
+ * Rating — star rating display and input.
743
+ *
744
+ * `readOnly` (default for displays of averaged values like 4.7) supports
745
+ * `precision='half'` for fractional fills via a clipped overlay. Interactive
746
+ * ratings step in whole units only — half-step input is uncommon UX and the
747
+ * keyboard model (radiogroup) doesn't map cleanly to it.
748
+ */
749
+ interface RatingProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue' | 'role'> {
750
+ /** Current rating (controlled). Range `0` … `max`. */
751
+ value?: number;
752
+ /** Default rating (uncontrolled). */
753
+ defaultValue?: number;
754
+ /** Fires with the new whole-number rating on click / keyboard select. */
755
+ onValueChange?: (value: number) => void;
756
+ /** Maximum number of stars. Default `5`. */
757
+ max?: number;
758
+ /**
759
+ * Fractional precision for **read-only** display. Interactive ratings always
760
+ * step in whole units. Default `'full'`.
761
+ */
762
+ precision?: 'full' | 'half';
763
+ /** Visual size. Default `'md'`. */
764
+ size?: 'sm' | 'md' | 'lg';
765
+ /** When true, renders a non-interactive display (`role='img'`). */
766
+ readOnly?: boolean;
767
+ /** Accessible label. For read-only this overrides the auto-generated "X out of Y stars" label. */
768
+ 'aria-label'?: string;
769
+ }
770
+ declare const Rating: react.ForwardRefExoticComponent<RatingProps & react.RefAttributes<HTMLDivElement>>;
771
+
670
772
  /**
671
773
  * ScrollArea — token-styled scrollbar primitive built on
672
774
  * `@radix-ui/react-scroll-area`. Wraps a viewport with custom scrollbars that
@@ -1014,7 +1116,7 @@ declare function SimpleTooltip({ content, children, side, delayDuration, }: Simp
1014
1116
  */
1015
1117
  type AlertTone = 'accent' | 'ok' | 'warn' | 'err';
1016
1118
  declare const alertStyles: (props?: ({
1017
- tone?: "err" | "ok" | "warn" | "accent" | null | undefined;
1119
+ tone?: "err" | "warn" | "ok" | "accent" | null | undefined;
1018
1120
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1019
1121
  interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>, VariantProps<typeof alertStyles> {
1020
1122
  /** Bold title text. */
@@ -1045,7 +1147,7 @@ declare const Alert: react.ForwardRefExoticComponent<AlertProps & react.RefAttri
1045
1147
  */
1046
1148
  type BannerTone = 'accent' | 'ok' | 'warn' | 'err';
1047
1149
  declare const bannerStyles: (props?: ({
1048
- tone?: "err" | "ok" | "warn" | "accent" | null | undefined;
1150
+ tone?: "err" | "warn" | "ok" | "accent" | null | undefined;
1049
1151
  sticky?: boolean | null | undefined;
1050
1152
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1051
1153
  interface BannerProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof bannerStyles> {
@@ -1083,6 +1185,40 @@ interface CrumbProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
1083
1185
  }
1084
1186
  declare const Crumb: react.ForwardRefExoticComponent<CrumbProps & react.RefAttributes<HTMLAnchorElement>>;
1085
1187
 
1188
+ /**
1189
+ * Carousel — a horizontal scroll-snap container with prev/next controls,
1190
+ * dot indicators, and an optional thumbnail strip. Native CSS scroll
1191
+ * behavior; no library.
1192
+ *
1193
+ * Pass an array of `items` and a `renderItem` function — the carousel
1194
+ * handles snapping, active-index tracking, and keyboard nav.
1195
+ */
1196
+ interface CarouselProps<T = unknown> extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
1197
+ /** Slide data. */
1198
+ items: ReadonlyArray<T>;
1199
+ /** Renderer for each slide. */
1200
+ renderItem: (item: T, index: number) => ReactNode;
1201
+ /** Optional renderer for a thumbnail strip below the viewport. */
1202
+ renderThumbnail?: (item: T, index: number) => ReactNode;
1203
+ /** Active slide index (controlled). */
1204
+ index?: number;
1205
+ /** Default index (uncontrolled). Default `0`. */
1206
+ defaultIndex?: number;
1207
+ /** Fires when the active index changes. */
1208
+ onIndexChange?: (index: number) => void;
1209
+ /** Aspect ratio of each slide. Default `16/10`. */
1210
+ aspectRatio?: string | number;
1211
+ /** When false, hides the dot indicators. Default `true`. */
1212
+ showDots?: boolean;
1213
+ /** When false, hides the prev/next arrows. Default `true`. */
1214
+ showArrows?: boolean;
1215
+ /** Accessible label for the carousel region. */
1216
+ 'aria-label'?: string;
1217
+ }
1218
+ declare const Carousel: <T>(p: CarouselProps<T> & {
1219
+ ref?: React.Ref<HTMLDivElement>;
1220
+ }) => ReactNode;
1221
+
1086
1222
  /**
1087
1223
  * Combobox — text input with an attached, type-to-filter listbox. Implements
1088
1224
  * the WAI-ARIA combobox pattern (input owns focus; listbox is referenced via
@@ -1244,13 +1380,26 @@ declare function DataTable<T>(props: DataTableProps<T> & {
1244
1380
  ref?: Ref<HTMLTableElement>;
1245
1381
  }): react_jsx_runtime.JSX.Element;
1246
1382
 
1383
+ /** A `{from, to}` date range used by `Calendar` and `DateRangePicker`. */
1384
+ interface DateRange {
1385
+ from?: Date;
1386
+ to?: Date;
1387
+ }
1247
1388
  interface CalendarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect' | 'defaultValue'> {
1248
- /** Currently selected date (controlled). */
1389
+ /** Selection mode. Default `'single'`. */
1390
+ mode?: 'single' | 'range';
1391
+ /** Currently selected date (controlled, single mode). */
1249
1392
  value?: Date;
1250
- /** Default selected date (uncontrolled). */
1393
+ /** Default selected date (uncontrolled, single mode). */
1251
1394
  defaultValue?: Date;
1252
- /** Fires with the newly selected date. */
1395
+ /** Fires with the newly selected date (single mode). */
1253
1396
  onValueChange?: (date: Date) => void;
1397
+ /** Currently selected range (controlled, range mode). */
1398
+ range?: DateRange;
1399
+ /** Default range (uncontrolled, range mode). */
1400
+ defaultRange?: DateRange;
1401
+ /** Fires when the range changes (range mode). */
1402
+ onRangeChange?: (range: DateRange) => void;
1254
1403
  /** Currently visible month (0-indexed) and year. */
1255
1404
  month?: number;
1256
1405
  year?: number;
@@ -1291,6 +1440,201 @@ interface DatePickerProps {
1291
1440
  }
1292
1441
  declare const DatePicker: react.ForwardRefExoticComponent<DatePickerProps & react.RefAttributes<HTMLButtonElement>>;
1293
1442
 
1443
+ /**
1444
+ * DateRangePicker — a button trigger that opens a popover with one or two
1445
+ * adjacent `Calendar` grids in `mode="range"`. The anchor of every
1446
+ * car-rental booking: pickup → return.
1447
+ */
1448
+ interface DateRangePickerProps {
1449
+ value?: DateRange;
1450
+ defaultValue?: DateRange;
1451
+ onValueChange?: (range: DateRange) => void;
1452
+ /** Number of months shown side-by-side. Default `2` for desktop, `1` for mobile. */
1453
+ months?: 1 | 2;
1454
+ /** Placeholder shown when no range is set. */
1455
+ placeholder?: string;
1456
+ /** Custom formatter. Default uses each date's `toLocaleDateString()`. */
1457
+ format?: (d: Date) => string;
1458
+ /** Pixel width of the trigger. */
1459
+ width?: number | string;
1460
+ disabled?: boolean;
1461
+ /** Optional disable predicate forwarded to each Calendar. */
1462
+ isDateDisabled?: (date: Date) => boolean;
1463
+ 'aria-label'?: string;
1464
+ id?: string;
1465
+ }
1466
+ declare const DateRangePicker: react.ForwardRefExoticComponent<DateRangePickerProps & react.RefAttributes<HTMLButtonElement>>;
1467
+
1468
+ /**
1469
+ * Lightbox — fullscreen photo viewer. Built on Radix Dialog (reuses the
1470
+ * focus trap, portal, and escape-to-close). Adds keyboard ←/→ navigation
1471
+ * between items and a counter overlay.
1472
+ */
1473
+ interface LightboxProps {
1474
+ open?: boolean;
1475
+ defaultOpen?: boolean;
1476
+ onOpenChange?: (open: boolean) => void;
1477
+ /** Items to view — usually image URLs but anything renderable is fine. */
1478
+ items: ReadonlyArray<unknown>;
1479
+ /** Renderer for the active item. */
1480
+ renderItem: (item: unknown, index: number) => ReactNode;
1481
+ /** Current index (controlled). */
1482
+ index?: number;
1483
+ /** Default index (uncontrolled). */
1484
+ defaultIndex?: number;
1485
+ /** Fires when the index changes. */
1486
+ onIndexChange?: (index: number) => void;
1487
+ /** Accessible title (visually hidden). */
1488
+ title?: ReactNode;
1489
+ }
1490
+ declare const Lightbox: react.ForwardRefExoticComponent<LightboxProps & react.RefAttributes<HTMLDivElement>>;
1491
+
1492
+ /**
1493
+ * ListingCard — a consumer-marketplace card composing photos (`Carousel`),
1494
+ * title, `Rating`, price, host, and an optional verified badge / favorite
1495
+ * toggle. Distinct from `EntityCard`, which is dev-tool entity chrome.
1496
+ */
1497
+ interface ListingCardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'title'> {
1498
+ /** Photo URLs (or anything `Carousel` can render). At least one. */
1499
+ photos: ReadonlyArray<string>;
1500
+ /** Listing title — e.g. "2023 Tesla Model 3". */
1501
+ title: ReactNode;
1502
+ /** Optional eyebrow text above the title (location, vehicle type). */
1503
+ eyebrow?: ReactNode;
1504
+ /** Average rating (0–5). When undefined, the rating row is hidden. */
1505
+ rating?: number;
1506
+ /** Number of reviews — shown next to the rating. */
1507
+ reviewCount?: number;
1508
+ /** Headline price (e.g. `89`). */
1509
+ price: ReactNode;
1510
+ /** Price unit suffix (e.g. `/day`). */
1511
+ priceUnit?: ReactNode;
1512
+ /** Original price for sale strike-through. */
1513
+ originalPrice?: ReactNode;
1514
+ /** Host / owner name. */
1515
+ host?: ReactNode;
1516
+ /** Distance label (e.g. `0.4 mi away`). */
1517
+ distance?: ReactNode;
1518
+ /** When true, shows a `verified` badge on the photo. */
1519
+ verified?: boolean;
1520
+ /** Link target for the whole card. */
1521
+ href?: string;
1522
+ /** Heart-icon favorite toggle handler. */
1523
+ onFavorite?: (next: boolean) => void;
1524
+ /** Current favorite state. */
1525
+ favorited?: boolean;
1526
+ /** Card width override. */
1527
+ width?: number | string;
1528
+ }
1529
+ declare const ListingCard: react.ForwardRefExoticComponent<ListingCardProps & react.RefAttributes<HTMLDivElement>>;
1530
+
1531
+ /**
1532
+ * Country data for `PhoneInput`. Subset of common origins — extend as the
1533
+ * product grows or replace with a full ISO 3166-1 list (e.g. `libphonenumber-js`
1534
+ * `getCountries()`). Each country lists its ISO code (cca2), display name,
1535
+ * E.164 dial code, and flag emoji.
1536
+ */
1537
+ interface PhoneCountry {
1538
+ /** ISO 3166-1 alpha-2 code, e.g. "US". */
1539
+ code: string;
1540
+ /** Display name. */
1541
+ name: string;
1542
+ /** E.164 country calling code without `+`, e.g. "1" or "44". */
1543
+ dialCode: string;
1544
+ /** Unicode flag (regional indicator pair). */
1545
+ flag: string;
1546
+ }
1547
+ declare const phoneCountries: ReadonlyArray<PhoneCountry>;
1548
+
1549
+ /**
1550
+ * PhoneInput — country-code Select + national-number text input. Emits
1551
+ * E.164-formatted strings (`+CC<NSN>`) via `onValueChange`.
1552
+ *
1553
+ * The country list is a curated subset of common origins. Pass a custom
1554
+ * `countries` prop to supply your own (e.g. via `libphonenumber-js`).
1555
+ */
1556
+ interface PhoneInputProps {
1557
+ /** E.164 value (controlled), e.g. `+14155550100`. */
1558
+ value?: string;
1559
+ /** Default E.164 value (uncontrolled). */
1560
+ defaultValue?: string;
1561
+ /** Fires with the new E.164 value. Empty national number → empty string. */
1562
+ onValueChange?: (value: string) => void;
1563
+ /** Custom country list. Defaults to the bundled subset. */
1564
+ countries?: ReadonlyArray<PhoneCountry>;
1565
+ /** Default selected country code. Default `'US'`. */
1566
+ defaultCountry?: string;
1567
+ placeholder?: string;
1568
+ disabled?: boolean;
1569
+ /** Accessible label for the national-number input. */
1570
+ 'aria-label'?: string;
1571
+ }
1572
+ declare const PhoneInput: react.ForwardRefExoticComponent<PhoneInputProps & react.RefAttributes<HTMLInputElement>>;
1573
+
1574
+ /**
1575
+ * PriceBreakdown — labelled line items + a totals row. Used in booking
1576
+ * summaries, checkout sheets, trip receipts.
1577
+ *
1578
+ * Compose with `<PriceBreakdown.Line>` for individual rows, or pass an
1579
+ * `items` array for the common case. The `total` is rendered last with a
1580
+ * top border separator.
1581
+ */
1582
+ interface PriceBreakdownItem {
1583
+ label: ReactNode;
1584
+ /** Optional secondary text (e.g. `$89 × 3 nights`). */
1585
+ subLabel?: ReactNode;
1586
+ amount: ReactNode;
1587
+ /** When set, renders the amount with a strike-through in the `sale` token. */
1588
+ originalAmount?: ReactNode;
1589
+ /** When true, renders the amount in the `sale` color (e.g. discounts). */
1590
+ discount?: boolean;
1591
+ }
1592
+ interface PriceBreakdownProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
1593
+ /** Line items rendered in order. */
1594
+ items?: ReadonlyArray<PriceBreakdownItem>;
1595
+ /** Final total. Pre-formatted (e.g. `$267`). */
1596
+ total?: ReactNode;
1597
+ /** Label for the total row. Default `'Total'`. */
1598
+ totalLabel?: ReactNode;
1599
+ /** Currency hint shown next to the total. */
1600
+ currency?: ReactNode;
1601
+ /** Optional bespoke children — use instead of `items` for custom rows. */
1602
+ children?: ReactNode;
1603
+ }
1604
+ declare const PriceBreakdown: ReturnType<typeof forwardRef<HTMLDivElement, PriceBreakdownProps>> & {
1605
+ Line: typeof PriceBreakdownLine;
1606
+ };
1607
+ interface PriceBreakdownLineProps extends PriceBreakdownItem {
1608
+ className?: string;
1609
+ }
1610
+ declare const PriceBreakdownLine: react.ForwardRefExoticComponent<PriceBreakdownLineProps & react.RefAttributes<HTMLDivElement>>;
1611
+
1612
+ /**
1613
+ * ReviewCard — a single review feed item. Composes Avatar, Rating, date,
1614
+ * body, optional photos strip, and a `verified-trip` badge.
1615
+ *
1616
+ * Distinct from `Testimonial`, which is curated marketing chrome.
1617
+ */
1618
+ interface ReviewCardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
1619
+ /** Reviewer display name. */
1620
+ author: ReactNode;
1621
+ /** Optional author avatar URL. */
1622
+ authorAvatar?: string;
1623
+ /** Star rating, 0–5. */
1624
+ rating: number;
1625
+ /** When set, renders as a Date — otherwise as a string. */
1626
+ date: ReactNode;
1627
+ /** Review body. */
1628
+ body: ReactNode;
1629
+ /** Optional photo URLs (rendered as a horizontal strip). */
1630
+ photos?: ReadonlyArray<string>;
1631
+ /** When true, shows the "Verified trip" badge. */
1632
+ verified?: boolean;
1633
+ /** Optional reviewer subtitle (location, member-since date). */
1634
+ subtitle?: ReactNode;
1635
+ }
1636
+ declare const ReviewCard: react.ForwardRefExoticComponent<ReviewCardProps & react.RefAttributes<HTMLDivElement>>;
1637
+
1294
1638
  /**
1295
1639
  * Dots — progress dots for carousels and onboarding tours. The current dot
1296
1640
  * widens into a pill (per the handoff spec); the rest stay circular.
@@ -1339,7 +1683,7 @@ declare const Dropzone: react.ForwardRefExoticComponent<DropzoneProps & react.Re
1339
1683
  * signal semantic intent (e.g., `err` for sync failures).
1340
1684
  */
1341
1685
  declare const plateStyles: (props?: ({
1342
- tone?: "err" | "ok" | "warn" | "accent" | "neutral" | null | undefined;
1686
+ tone?: "err" | "warn" | "ok" | "accent" | "neutral" | null | undefined;
1343
1687
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1344
1688
  type PlateVariantProps = VariantProps<typeof plateStyles>;
1345
1689
  interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
@@ -1647,7 +1991,7 @@ declare const trackStyles: (props?: ({
1647
1991
  size?: "sm" | "md" | "lg" | null | undefined;
1648
1992
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1649
1993
  declare const fillStyles: (props?: ({
1650
- tone?: "err" | "ok" | "warn" | "accent" | null | undefined;
1994
+ tone?: "err" | "warn" | "ok" | "accent" | null | undefined;
1651
1995
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1652
1996
  interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'>, VariantProps<typeof trackStyles>, VariantProps<typeof fillStyles> {
1653
1997
  /** Numeric progress, 0..max. Ignored when `indeterminate`. */
@@ -2078,4 +2422,4 @@ interface WizardDialogProps {
2078
2422
  }
2079
2423
  declare const WizardDialog: react.ForwardRefExoticComponent<WizardDialogProps & react.RefAttributes<HTMLDivElement>>;
2080
2424
 
2081
- export { type ActivityActor, type ActivityEvent, ActivityTimeline, type ActivityTimelineProps, Alert, AlertDialog, AlertDialogAction, AlertDialogCancel, type AlertDialogProps, AlertDialogRoot, AlertDialogTrigger, type AlertProps, type AlertTone, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarSize, type AvatarStatus, Badge, type BadgeProps, Banner, type BannerProps, type BannerTone, Breadcrumbs, type BreadcrumbsProps, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, Calendar, type CalendarProps, Card, CardLink, type CardLinkProps, type CardProps, Checkbox, type CheckboxProps, Chip, type ChipProps, Combobox, type ComboboxOption, type ComboboxProps, CommandPalette, type CommandPaletteGroup, type CommandPaletteItem, type CommandPaletteProps, ContextMenu, ContextMenuContent, ContextMenuItem, type ContextMenuItemProps, ContextMenuPortal, ContextMenuRoot, ContextMenuSeparator, ContextMenuTrigger, Crumb, type CrumbProps, DataTable, type DataTableColumn, type DataTableProps, type DataTableSort, DatePicker, type DatePickerProps, Dialog, DialogClose, DialogContent, type DialogContentProps, DialogOverlay, DialogPortal, type DialogProps, DialogRoot, DialogTrigger, Dots, type DotsProps, Drawer, type DrawerProps, type DrawerSide, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRoot, DropdownMenuTrigger, Dropzone, type DropzoneProps, EmptyState, type EmptyStateProps, FAB, type FABProps, Field, type FieldProps, FileChip, type FileChipProps, type FilterFacet, type FilterFacetOption, FilterPanel, type FilterPanelProps, type FilterPanelValue, HealthScore, type HealthScoreBreakdownEntry, type HealthScoreProps, HoverCard, HoverCardContent, HoverCardPortal, type HoverCardProps, HoverCardRoot, HoverCardTrigger, IconButton, type IconButtonProps, InlineEdit, type InlineEditHandle, type InlineEditProps, Input, type InputProps, Kbd, type KbdProps, LargeTitle, type LargeTitleProps, MenuCheckboxItem, MenuItem, type MenuItemProps, MenuSeparator, Menubar, MenubarContent, MenubarItem, type MenubarItemProps, MenubarMenu, MenubarSeparator, MenubarTrigger, NavBar, type NavBarItem, type NavBarOrientation, type NavBarProps, NavItem, type NavItemProps, NavSection, type NavSectionProps, type NormalizedOption, OTP, type OTPHandle, type OTPProps, OnboardingChecklist, type OnboardingChecklistProps, type OnboardingItem, type OnboardingItemStatus, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverArrow, PopoverClose, PopoverContent, PopoverPortal, PopoverRoot, PopoverTrigger, Progress, type ProgressProps, PullToRefresh, type PullToRefreshProps, type PullToRefreshState, RadialProgress, type RadialProgressProps, type RadialTone, Radio, RadioGroup, type RadioGroupProps, type RadioProps, ScrollArea, type ScrollAreaProps, type ScrollAreaType, SearchInput, type SearchInputProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, type SelectOption, type SelectProps, SelectRoot, SelectTrigger, SelectValue, Sheet, type SheetProps, Sidebar, type SidebarProps, SimpleTooltip, type SimpleTooltipProps, Skeleton, SkeletonGroup, type SkeletonGroupProps, type SkeletonProps, Slider, type SliderProps, Sparkline, type SparklineProps, Spinner, type SpinnerProps, SplitButton, type SplitButtonProps, StatCard, type StatCardProps, type StatTrend, StatusDot, type StatusDotProps, type StatusState, type StepState, Stepper, type StepperProps, type StepperStep, Switch, type SwitchProps, Tab, TabBar, type TabBarItem, type TabBarProps, type TabProps, Tabs, TabsContent, TabsList, type TabsProps, type TabsVariantProps, Tag, type TagProps, Textarea, type TextareaProps, type Theme, Timeline, type TimelineEvent, type TimelineEventTone, TimelineItem, type TimelineItemProps, type TimelineProps, ToastCard, type ToastInput, ToastProvider, type ToastVariant, Tooltip, TooltipArrow, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Topbar, type TopbarProps, Tree, type TreeItem, type TreeProps, type UseControllableStateProps, type UseKeyboardListOptions, type UseKeyboardListResult, type WizardContext, WizardDialog, type WizardDialogProps, type WizardStep, badgeStyles, buttonStyles, cardStyles, cn, filterCommandItems, formatRelative, iconButtonStyles, useControllableState, useDisclosure, useEscape, useIsomorphicLayoutEffect, useKeyboardList, useOutsideClick, useTheme, useToast };
2425
+ export { Accordion, AccordionContent, type AccordionContentProps, AccordionItem, type AccordionItemProps, type AccordionProps, AccordionTrigger, type AccordionTriggerProps, type ActivityActor, type ActivityEvent, ActivityTimeline, type ActivityTimelineProps, Alert, AlertDialog, AlertDialogAction, AlertDialogCancel, type AlertDialogProps, AlertDialogRoot, AlertDialogTrigger, type AlertProps, type AlertTone, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarSize, type AvatarStatus, Badge, type BadgeProps, Banner, type BannerProps, type BannerTone, Breadcrumbs, type BreadcrumbsProps, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, Calendar, type CalendarProps, Card, CardLink, type CardLinkProps, type CardProps, Carousel, type CarouselProps, Checkbox, type CheckboxProps, Chip, type ChipProps, Combobox, type ComboboxOption, type ComboboxProps, CommandPalette, type CommandPaletteGroup, type CommandPaletteItem, type CommandPaletteProps, ContextMenu, ContextMenuContent, ContextMenuItem, type ContextMenuItemProps, ContextMenuPortal, ContextMenuRoot, ContextMenuSeparator, ContextMenuTrigger, Crumb, type CrumbProps, DataTable, type DataTableColumn, type DataTableProps, type DataTableSort, DatePicker, type DatePickerProps, type DateRange, DateRangePicker, type DateRangePickerProps, Dialog, DialogClose, DialogContent, type DialogContentProps, DialogOverlay, DialogPortal, type DialogProps, DialogRoot, DialogTrigger, Dots, type DotsProps, Drawer, type DrawerProps, type DrawerSide, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRoot, DropdownMenuTrigger, Dropzone, type DropzoneProps, EmptyState, type EmptyStateProps, FAB, type FABProps, Field, type FieldProps, FileChip, type FileChipProps, type FilterFacet, type FilterFacetOption, FilterPanel, type FilterPanelProps, type FilterPanelValue, HealthScore, type HealthScoreBreakdownEntry, type HealthScoreProps, HoverCard, HoverCardContent, HoverCardPortal, type HoverCardProps, HoverCardRoot, HoverCardTrigger, IconButton, type IconButtonProps, InlineEdit, type InlineEditHandle, type InlineEditProps, Input, type InputProps, Kbd, type KbdProps, LargeTitle, type LargeTitleProps, Lightbox, type LightboxProps, ListingCard, type ListingCardProps, MenuCheckboxItem, MenuItem, type MenuItemProps, MenuSeparator, Menubar, MenubarContent, MenubarItem, type MenubarItemProps, MenubarMenu, MenubarSeparator, MenubarTrigger, NavBar, type NavBarItem, type NavBarOrientation, type NavBarProps, NavItem, type NavItemProps, NavSection, type NavSectionProps, type NormalizedOption, NumberInput, type NumberInputProps, OTP, type OTPHandle, type OTPProps, OnboardingChecklist, type OnboardingChecklistProps, type OnboardingItem, type OnboardingItemStatus, Pagination, type PaginationProps, type PhoneCountry, PhoneInput, type PhoneInputProps, Popover, PopoverAnchor, PopoverArrow, PopoverClose, PopoverContent, PopoverPortal, PopoverRoot, PopoverTrigger, PriceBreakdown, type PriceBreakdownItem, PriceBreakdownLine, type PriceBreakdownLineProps, type PriceBreakdownProps, Progress, type ProgressProps, PullToRefresh, type PullToRefreshProps, type PullToRefreshState, RadialProgress, type RadialProgressProps, type RadialTone, Radio, RadioGroup, type RadioGroupProps, type RadioProps, Rating, type RatingProps, ReviewCard, type ReviewCardProps, ScrollArea, type ScrollAreaProps, type ScrollAreaType, SearchInput, type SearchInputProps, SegmentedControl, type SegmentedControlOption, type SegmentedControlProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, type SelectOption, type SelectProps, SelectRoot, SelectTrigger, SelectValue, Sheet, type SheetProps, Sidebar, type SidebarProps, SimpleTooltip, type SimpleTooltipProps, Skeleton, SkeletonGroup, type SkeletonGroupProps, type SkeletonProps, Slider, type SliderProps, Sparkline, type SparklineProps, Spinner, type SpinnerProps, SplitButton, type SplitButtonProps, StatCard, type StatCardProps, type StatTrend, StatusDot, type StatusDotProps, type StatusState, type StepState, Stepper, type StepperProps, type StepperStep, Switch, type SwitchProps, Tab, TabBar, type TabBarItem, type TabBarProps, type TabProps, Tabs, TabsContent, TabsList, type TabsProps, type TabsVariantProps, Tag, type TagProps, Textarea, type TextareaProps, type Theme, Timeline, type TimelineEvent, type TimelineEventTone, TimelineItem, type TimelineItemProps, type TimelineProps, ToastCard, type ToastInput, ToastProvider, type ToastVariant, Tooltip, TooltipArrow, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Topbar, type TopbarProps, Tree, type TreeItem, type TreeProps, type UseControllableStateProps, type UseKeyboardListOptions, type UseKeyboardListResult, type WizardContext, WizardDialog, type WizardDialogProps, type WizardStep, badgeStyles, buttonStyles, cardStyles, cn, filterCommandItems, formatRelative, iconButtonStyles, phoneCountries, useControllableState, useDisclosure, useEscape, useIsomorphicLayoutEffect, useKeyboardList, useOutsideClick, useTheme, useToast };