@ship-it-ui/ui 0.0.7 → 0.0.9

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,9 +563,29 @@ 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
- interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {
588
+ interface AvatarProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
518
589
  /** Display name. Used to derive initials and a deterministic background color. */
519
590
  name?: string;
520
591
  /** Image source. Falls back to initials if loading fails. */
@@ -525,6 +596,11 @@ interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {
525
596
  status?: AvatarStatus;
526
597
  /** Override the auto-generated initials (e.g., for non-Latin scripts). */
527
598
  initials?: string;
599
+ /**
600
+ * Override the hash-derived fallback background with a literal CSS color value.
601
+ * Only applies when the initials fallback is shown; image avatars are unaffected.
602
+ */
603
+ color?: string;
528
604
  }
529
605
  /**
530
606
  * Person/entity avatar. Auto-generates initials and a stable background color from
@@ -548,14 +624,24 @@ interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {
548
624
  declare const AvatarGroup: react.ForwardRefExoticComponent<AvatarGroupProps & react.RefAttributes<HTMLDivElement>>;
549
625
 
550
626
  declare const badgeStyles: (props?: ({
551
- variant?: "outline" | "err" | "pink" | "purple" | "solid" | "ok" | "warn" | "accent" | "neutral" | null | undefined;
627
+ variant?: "outline" | "err" | "pink" | "purple" | "solid" | "warn" | "ok" | "accent" | "neutral" | null | undefined;
552
628
  size?: "sm" | "md" | "lg" | null | undefined;
553
629
  } & class_variance_authority_types.ClassProp) | undefined) => string;
554
- interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeStyles> {
630
+ /**
631
+ * Variant path: use one of the DS semantic variants.
632
+ * <Badge variant="ok">Done</Badge>
633
+ *
634
+ * Color path (escape hatch): pass an arbitrary CSS color. When both are set,
635
+ * `color` wins at runtime.
636
+ * <Badge color="#7c3aed">VIP</Badge>
637
+ */
638
+ interface BadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'>, VariantProps<typeof badgeStyles> {
555
639
  /** Show a colored leading dot. */
556
640
  dot?: boolean;
557
641
  /** Optional leading icon (defers to children). */
558
642
  icon?: ReactNode;
643
+ /** Arbitrary CSS color override. When set, replaces the `variant` tint. */
644
+ color?: string;
559
645
  }
560
646
  declare const Badge: react.ForwardRefExoticComponent<BadgeProps & react.RefAttributes<HTMLSpanElement>>;
561
647
 
@@ -638,7 +724,7 @@ interface StatCardProps extends HTMLAttributes<HTMLDivElement> {
638
724
  */
639
725
  declare const StatCard: react.ForwardRefExoticComponent<StatCardProps & react.RefAttributes<HTMLDivElement>>;
640
726
 
641
- interface ChipProps extends HTMLAttributes<HTMLSpanElement> {
727
+ interface ChipProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
642
728
  /** Pill-style leading icon (typically a glyph or `@`/`#`). */
643
729
  icon?: ReactNode;
644
730
  /**
@@ -651,13 +737,10 @@ interface ChipProps extends HTMLAttributes<HTMLSpanElement> {
651
737
  * `'touch'` swaps to a roomier 32px chip with larger text for mobile filter strips.
652
738
  */
653
739
  density?: 'comfortable' | 'touch';
740
+ /** Arbitrary CSS color. When set, the default neutral tint is replaced with this color. */
741
+ color?: string;
654
742
  children: ReactNode;
655
743
  }
656
- /**
657
- * Pill-shaped filter chip. Used in command palette tag rows, search filter strips,
658
- * and AI suggestion lists. Differs from `Tag` by being pill-shaped (full radius)
659
- * and slightly more decorative.
660
- */
661
744
  declare const Chip: react.ForwardRefExoticComponent<ChipProps & react.RefAttributes<HTMLSpanElement>>;
662
745
 
663
746
  type KbdProps = HTMLAttributes<HTMLElement>;
@@ -667,6 +750,39 @@ type KbdProps = HTMLAttributes<HTMLElement>;
667
750
  */
668
751
  declare const Kbd: react.ForwardRefExoticComponent<KbdProps & react.RefAttributes<HTMLElement>>;
669
752
 
753
+ /**
754
+ * Rating — star rating display and input.
755
+ *
756
+ * `readOnly` (default for displays of averaged values like 4.7) supports
757
+ * `precision='half'` for fractional fills via a clipped overlay. Interactive
758
+ * ratings step in whole units only — half-step input is uncommon UX and the
759
+ * keyboard model (radiogroup) doesn't map cleanly to it.
760
+ */
761
+ interface RatingProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color' | 'onChange' | 'defaultValue' | 'role'> {
762
+ /** Current rating (controlled). Range `0` … `max`. */
763
+ value?: number;
764
+ /** Default rating (uncontrolled). */
765
+ defaultValue?: number;
766
+ /** Fires with the new whole-number rating on click / keyboard select. */
767
+ onValueChange?: (value: number) => void;
768
+ /** Maximum number of stars. Default `5`. */
769
+ max?: number;
770
+ /**
771
+ * Fractional precision for **read-only** display. Interactive ratings always
772
+ * step in whole units. Default `'full'`.
773
+ */
774
+ precision?: 'full' | 'half';
775
+ /** Visual size. Default `'md'`. */
776
+ size?: 'sm' | 'md' | 'lg';
777
+ /** When true, renders a non-interactive display (`role='img'`). */
778
+ readOnly?: boolean;
779
+ /** Accessible label. For read-only this overrides the auto-generated "X out of Y stars" label. */
780
+ 'aria-label'?: string;
781
+ /** Override the filled-star color. Accepts any CSS color. */
782
+ color?: string;
783
+ }
784
+ declare const Rating: react.ForwardRefExoticComponent<RatingProps & react.RefAttributes<HTMLDivElement>>;
785
+
670
786
  /**
671
787
  * ScrollArea — token-styled scrollbar primitive built on
672
788
  * `@radix-ui/react-scroll-area`. Wraps a viewport with custom scrollbars that
@@ -746,9 +862,19 @@ interface SkeletonGroupProps extends HTMLAttributes<HTMLDivElement> {
746
862
  declare const SkeletonGroup: react.ForwardRefExoticComponent<SkeletonGroupProps & react.RefAttributes<HTMLDivElement>>;
747
863
 
748
864
  type StatusState = 'ok' | 'warn' | 'err' | 'off' | 'sync' | 'accent';
749
- interface StatusDotProps extends HTMLAttributes<HTMLSpanElement> {
750
- /** Semantic status. */
865
+ /**
866
+ * State path: use a semantic state.
867
+ * <StatusDot state="ok" />
868
+ *
869
+ * Color path (escape hatch): pass an arbitrary CSS color. When both are set,
870
+ * `color` wins at runtime.
871
+ * <StatusDot color="#7c3aed" />
872
+ */
873
+ interface StatusDotProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
874
+ /** Semantic state. Default `'ok'`. */
751
875
  state?: StatusState;
876
+ /** Arbitrary CSS color override. When set, replaces the state-derived color. */
877
+ color?: string;
752
878
  /** Optional label rendered next to the dot. */
753
879
  label?: ReactNode;
754
880
  /** Pulse the dot — used for `sync` state to indicate live activity. */
@@ -758,13 +884,15 @@ interface StatusDotProps extends HTMLAttributes<HTMLSpanElement> {
758
884
  }
759
885
  declare const StatusDot: react.ForwardRefExoticComponent<StatusDotProps & react.RefAttributes<HTMLSpanElement>>;
760
886
 
761
- interface TagProps extends HTMLAttributes<HTMLSpanElement> {
887
+ interface TagProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {
762
888
  /** Optional close button. When provided, a `×` rendered on the right calls it. */
763
889
  onRemove?: () => void;
764
890
  /** Optional leading icon. */
765
891
  icon?: ReactNode;
766
892
  /** Pixel height. Defaults to 22px. */
767
893
  size?: number;
894
+ /** Arbitrary CSS color. When set, the default neutral tint is replaced with this color. */
895
+ color?: string;
768
896
  children: ReactNode;
769
897
  }
770
898
  /**
@@ -1014,7 +1142,7 @@ declare function SimpleTooltip({ content, children, side, delayDuration, }: Simp
1014
1142
  */
1015
1143
  type AlertTone = 'accent' | 'ok' | 'warn' | 'err';
1016
1144
  declare const alertStyles: (props?: ({
1017
- tone?: "err" | "ok" | "warn" | "accent" | null | undefined;
1145
+ tone?: "err" | "warn" | "ok" | "accent" | null | undefined;
1018
1146
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1019
1147
  interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>, VariantProps<typeof alertStyles> {
1020
1148
  /** Bold title text. */
@@ -1045,7 +1173,7 @@ declare const Alert: react.ForwardRefExoticComponent<AlertProps & react.RefAttri
1045
1173
  */
1046
1174
  type BannerTone = 'accent' | 'ok' | 'warn' | 'err';
1047
1175
  declare const bannerStyles: (props?: ({
1048
- tone?: "err" | "ok" | "warn" | "accent" | null | undefined;
1176
+ tone?: "err" | "warn" | "ok" | "accent" | null | undefined;
1049
1177
  sticky?: boolean | null | undefined;
1050
1178
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1051
1179
  interface BannerProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof bannerStyles> {
@@ -1083,6 +1211,40 @@ interface CrumbProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
1083
1211
  }
1084
1212
  declare const Crumb: react.ForwardRefExoticComponent<CrumbProps & react.RefAttributes<HTMLAnchorElement>>;
1085
1213
 
1214
+ /**
1215
+ * Carousel — a horizontal scroll-snap container with prev/next controls,
1216
+ * dot indicators, and an optional thumbnail strip. Native CSS scroll
1217
+ * behavior; no library.
1218
+ *
1219
+ * Pass an array of `items` and a `renderItem` function — the carousel
1220
+ * handles snapping, active-index tracking, and keyboard nav.
1221
+ */
1222
+ interface CarouselProps<T = unknown> extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
1223
+ /** Slide data. */
1224
+ items: ReadonlyArray<T>;
1225
+ /** Renderer for each slide. */
1226
+ renderItem: (item: T, index: number) => ReactNode;
1227
+ /** Optional renderer for a thumbnail strip below the viewport. */
1228
+ renderThumbnail?: (item: T, index: number) => ReactNode;
1229
+ /** Active slide index (controlled). */
1230
+ index?: number;
1231
+ /** Default index (uncontrolled). Default `0`. */
1232
+ defaultIndex?: number;
1233
+ /** Fires when the active index changes. */
1234
+ onIndexChange?: (index: number) => void;
1235
+ /** Aspect ratio of each slide. Default `16/10`. */
1236
+ aspectRatio?: string | number;
1237
+ /** When false, hides the dot indicators. Default `true`. */
1238
+ showDots?: boolean;
1239
+ /** When false, hides the prev/next arrows. Default `true`. */
1240
+ showArrows?: boolean;
1241
+ /** Accessible label for the carousel region. */
1242
+ 'aria-label'?: string;
1243
+ }
1244
+ declare const Carousel: <T>(p: CarouselProps<T> & {
1245
+ ref?: React.Ref<HTMLDivElement>;
1246
+ }) => ReactNode;
1247
+
1086
1248
  /**
1087
1249
  * Combobox — text input with an attached, type-to-filter listbox. Implements
1088
1250
  * the WAI-ARIA combobox pattern (input owns focus; listbox is referenced via
@@ -1244,13 +1406,26 @@ declare function DataTable<T>(props: DataTableProps<T> & {
1244
1406
  ref?: Ref<HTMLTableElement>;
1245
1407
  }): react_jsx_runtime.JSX.Element;
1246
1408
 
1409
+ /** A `{from, to}` date range used by `Calendar` and `DateRangePicker`. */
1410
+ interface DateRange {
1411
+ from?: Date;
1412
+ to?: Date;
1413
+ }
1247
1414
  interface CalendarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect' | 'defaultValue'> {
1248
- /** Currently selected date (controlled). */
1415
+ /** Selection mode. Default `'single'`. */
1416
+ mode?: 'single' | 'range';
1417
+ /** Currently selected date (controlled, single mode). */
1249
1418
  value?: Date;
1250
- /** Default selected date (uncontrolled). */
1419
+ /** Default selected date (uncontrolled, single mode). */
1251
1420
  defaultValue?: Date;
1252
- /** Fires with the newly selected date. */
1421
+ /** Fires with the newly selected date (single mode). */
1253
1422
  onValueChange?: (date: Date) => void;
1423
+ /** Currently selected range (controlled, range mode). */
1424
+ range?: DateRange;
1425
+ /** Default range (uncontrolled, range mode). */
1426
+ defaultRange?: DateRange;
1427
+ /** Fires when the range changes (range mode). */
1428
+ onRangeChange?: (range: DateRange) => void;
1254
1429
  /** Currently visible month (0-indexed) and year. */
1255
1430
  month?: number;
1256
1431
  year?: number;
@@ -1291,6 +1466,201 @@ interface DatePickerProps {
1291
1466
  }
1292
1467
  declare const DatePicker: react.ForwardRefExoticComponent<DatePickerProps & react.RefAttributes<HTMLButtonElement>>;
1293
1468
 
1469
+ /**
1470
+ * DateRangePicker — a button trigger that opens a popover with one or two
1471
+ * adjacent `Calendar` grids in `mode="range"`. The anchor of every
1472
+ * car-rental booking: pickup → return.
1473
+ */
1474
+ interface DateRangePickerProps {
1475
+ value?: DateRange;
1476
+ defaultValue?: DateRange;
1477
+ onValueChange?: (range: DateRange) => void;
1478
+ /** Number of months shown side-by-side. Default `2` for desktop, `1` for mobile. */
1479
+ months?: 1 | 2;
1480
+ /** Placeholder shown when no range is set. */
1481
+ placeholder?: string;
1482
+ /** Custom formatter. Default uses each date's `toLocaleDateString()`. */
1483
+ format?: (d: Date) => string;
1484
+ /** Pixel width of the trigger. */
1485
+ width?: number | string;
1486
+ disabled?: boolean;
1487
+ /** Optional disable predicate forwarded to each Calendar. */
1488
+ isDateDisabled?: (date: Date) => boolean;
1489
+ 'aria-label'?: string;
1490
+ id?: string;
1491
+ }
1492
+ declare const DateRangePicker: react.ForwardRefExoticComponent<DateRangePickerProps & react.RefAttributes<HTMLButtonElement>>;
1493
+
1494
+ /**
1495
+ * Lightbox — fullscreen photo viewer. Built on Radix Dialog (reuses the
1496
+ * focus trap, portal, and escape-to-close). Adds keyboard ←/→ navigation
1497
+ * between items and a counter overlay.
1498
+ */
1499
+ interface LightboxProps {
1500
+ open?: boolean;
1501
+ defaultOpen?: boolean;
1502
+ onOpenChange?: (open: boolean) => void;
1503
+ /** Items to view — usually image URLs but anything renderable is fine. */
1504
+ items: ReadonlyArray<unknown>;
1505
+ /** Renderer for the active item. */
1506
+ renderItem: (item: unknown, index: number) => ReactNode;
1507
+ /** Current index (controlled). */
1508
+ index?: number;
1509
+ /** Default index (uncontrolled). */
1510
+ defaultIndex?: number;
1511
+ /** Fires when the index changes. */
1512
+ onIndexChange?: (index: number) => void;
1513
+ /** Accessible title (visually hidden). */
1514
+ title?: ReactNode;
1515
+ }
1516
+ declare const Lightbox: react.ForwardRefExoticComponent<LightboxProps & react.RefAttributes<HTMLDivElement>>;
1517
+
1518
+ /**
1519
+ * ListingCard — a consumer-marketplace card composing photos (`Carousel`),
1520
+ * title, `Rating`, price, host, and an optional verified badge / favorite
1521
+ * toggle. Distinct from `EntityCard`, which is dev-tool entity chrome.
1522
+ */
1523
+ interface ListingCardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'title'> {
1524
+ /** Photo URLs (or anything `Carousel` can render). At least one. */
1525
+ photos: ReadonlyArray<string>;
1526
+ /** Listing title — e.g. "2023 Tesla Model 3". */
1527
+ title: ReactNode;
1528
+ /** Optional eyebrow text above the title (location, vehicle type). */
1529
+ eyebrow?: ReactNode;
1530
+ /** Average rating (0–5). When undefined, the rating row is hidden. */
1531
+ rating?: number;
1532
+ /** Number of reviews — shown next to the rating. */
1533
+ reviewCount?: number;
1534
+ /** Headline price (e.g. `89`). */
1535
+ price: ReactNode;
1536
+ /** Price unit suffix (e.g. `/day`). */
1537
+ priceUnit?: ReactNode;
1538
+ /** Original price for sale strike-through. */
1539
+ originalPrice?: ReactNode;
1540
+ /** Host / owner name. */
1541
+ host?: ReactNode;
1542
+ /** Distance label (e.g. `0.4 mi away`). */
1543
+ distance?: ReactNode;
1544
+ /** When true, shows a `verified` badge on the photo. */
1545
+ verified?: boolean;
1546
+ /** Link target for the whole card. */
1547
+ href?: string;
1548
+ /** Heart-icon favorite toggle handler. */
1549
+ onFavorite?: (next: boolean) => void;
1550
+ /** Current favorite state. */
1551
+ favorited?: boolean;
1552
+ /** Card width override. */
1553
+ width?: number | string;
1554
+ }
1555
+ declare const ListingCard: react.ForwardRefExoticComponent<ListingCardProps & react.RefAttributes<HTMLDivElement>>;
1556
+
1557
+ /**
1558
+ * Country data for `PhoneInput`. Subset of common origins — extend as the
1559
+ * product grows or replace with a full ISO 3166-1 list (e.g. `libphonenumber-js`
1560
+ * `getCountries()`). Each country lists its ISO code (cca2), display name,
1561
+ * E.164 dial code, and flag emoji.
1562
+ */
1563
+ interface PhoneCountry {
1564
+ /** ISO 3166-1 alpha-2 code, e.g. "US". */
1565
+ code: string;
1566
+ /** Display name. */
1567
+ name: string;
1568
+ /** E.164 country calling code without `+`, e.g. "1" or "44". */
1569
+ dialCode: string;
1570
+ /** Unicode flag (regional indicator pair). */
1571
+ flag: string;
1572
+ }
1573
+ declare const phoneCountries: ReadonlyArray<PhoneCountry>;
1574
+
1575
+ /**
1576
+ * PhoneInput — country-code Select + national-number text input. Emits
1577
+ * E.164-formatted strings (`+CC<NSN>`) via `onValueChange`.
1578
+ *
1579
+ * The country list is a curated subset of common origins. Pass a custom
1580
+ * `countries` prop to supply your own (e.g. via `libphonenumber-js`).
1581
+ */
1582
+ interface PhoneInputProps {
1583
+ /** E.164 value (controlled), e.g. `+14155550100`. */
1584
+ value?: string;
1585
+ /** Default E.164 value (uncontrolled). */
1586
+ defaultValue?: string;
1587
+ /** Fires with the new E.164 value. Empty national number → empty string. */
1588
+ onValueChange?: (value: string) => void;
1589
+ /** Custom country list. Defaults to the bundled subset. */
1590
+ countries?: ReadonlyArray<PhoneCountry>;
1591
+ /** Default selected country code. Default `'US'`. */
1592
+ defaultCountry?: string;
1593
+ placeholder?: string;
1594
+ disabled?: boolean;
1595
+ /** Accessible label for the national-number input. */
1596
+ 'aria-label'?: string;
1597
+ }
1598
+ declare const PhoneInput: react.ForwardRefExoticComponent<PhoneInputProps & react.RefAttributes<HTMLInputElement>>;
1599
+
1600
+ /**
1601
+ * PriceBreakdown — labelled line items + a totals row. Used in booking
1602
+ * summaries, checkout sheets, trip receipts.
1603
+ *
1604
+ * Compose with `<PriceBreakdown.Line>` for individual rows, or pass an
1605
+ * `items` array for the common case. The `total` is rendered last with a
1606
+ * top border separator.
1607
+ */
1608
+ interface PriceBreakdownItem {
1609
+ label: ReactNode;
1610
+ /** Optional secondary text (e.g. `$89 × 3 nights`). */
1611
+ subLabel?: ReactNode;
1612
+ amount: ReactNode;
1613
+ /** When set, renders the amount with a strike-through in the `sale` token. */
1614
+ originalAmount?: ReactNode;
1615
+ /** When true, renders the amount in the `sale` color (e.g. discounts). */
1616
+ discount?: boolean;
1617
+ }
1618
+ interface PriceBreakdownProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
1619
+ /** Line items rendered in order. */
1620
+ items?: ReadonlyArray<PriceBreakdownItem>;
1621
+ /** Final total. Pre-formatted (e.g. `$267`). */
1622
+ total?: ReactNode;
1623
+ /** Label for the total row. Default `'Total'`. */
1624
+ totalLabel?: ReactNode;
1625
+ /** Currency hint shown next to the total. */
1626
+ currency?: ReactNode;
1627
+ /** Optional bespoke children — use instead of `items` for custom rows. */
1628
+ children?: ReactNode;
1629
+ }
1630
+ declare const PriceBreakdown: ReturnType<typeof forwardRef<HTMLDivElement, PriceBreakdownProps>> & {
1631
+ Line: typeof PriceBreakdownLine;
1632
+ };
1633
+ interface PriceBreakdownLineProps extends PriceBreakdownItem {
1634
+ className?: string;
1635
+ }
1636
+ declare const PriceBreakdownLine: react.ForwardRefExoticComponent<PriceBreakdownLineProps & react.RefAttributes<HTMLDivElement>>;
1637
+
1638
+ /**
1639
+ * ReviewCard — a single review feed item. Composes Avatar, Rating, date,
1640
+ * body, optional photos strip, and a `verified-trip` badge.
1641
+ *
1642
+ * Distinct from `Testimonial`, which is curated marketing chrome.
1643
+ */
1644
+ interface ReviewCardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
1645
+ /** Reviewer display name. */
1646
+ author: ReactNode;
1647
+ /** Optional author avatar URL. */
1648
+ authorAvatar?: string;
1649
+ /** Star rating, 0–5. */
1650
+ rating: number;
1651
+ /** When set, renders as a Date — otherwise as a string. */
1652
+ date: ReactNode;
1653
+ /** Review body. */
1654
+ body: ReactNode;
1655
+ /** Optional photo URLs (rendered as a horizontal strip). */
1656
+ photos?: ReadonlyArray<string>;
1657
+ /** When true, shows the "Verified trip" badge. */
1658
+ verified?: boolean;
1659
+ /** Optional reviewer subtitle (location, member-since date). */
1660
+ subtitle?: ReactNode;
1661
+ }
1662
+ declare const ReviewCard: react.ForwardRefExoticComponent<ReviewCardProps & react.RefAttributes<HTMLDivElement>>;
1663
+
1294
1664
  /**
1295
1665
  * Dots — progress dots for carousels and onboarding tours. The current dot
1296
1666
  * widens into a pill (per the handoff spec); the rest stay circular.
@@ -1339,7 +1709,7 @@ declare const Dropzone: react.ForwardRefExoticComponent<DropzoneProps & react.Re
1339
1709
  * signal semantic intent (e.g., `err` for sync failures).
1340
1710
  */
1341
1711
  declare const plateStyles: (props?: ({
1342
- tone?: "err" | "ok" | "warn" | "accent" | "neutral" | null | undefined;
1712
+ tone?: "err" | "warn" | "ok" | "accent" | "neutral" | null | undefined;
1343
1713
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1344
1714
  type PlateVariantProps = VariantProps<typeof plateStyles>;
1345
1715
  interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
@@ -1647,7 +2017,7 @@ declare const trackStyles: (props?: ({
1647
2017
  size?: "sm" | "md" | "lg" | null | undefined;
1648
2018
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1649
2019
  declare const fillStyles: (props?: ({
1650
- tone?: "err" | "ok" | "warn" | "accent" | null | undefined;
2020
+ tone?: "err" | "warn" | "ok" | "accent" | null | undefined;
1651
2021
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1652
2022
  interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'>, VariantProps<typeof trackStyles>, VariantProps<typeof fillStyles> {
1653
2023
  /** Numeric progress, 0..max. Ignored when `indeterminate`. */
@@ -2078,4 +2448,4 @@ interface WizardDialogProps {
2078
2448
  }
2079
2449
  declare const WizardDialog: react.ForwardRefExoticComponent<WizardDialogProps & react.RefAttributes<HTMLDivElement>>;
2080
2450
 
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 };
2451
+ 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 };