@bearmenu/ui 0.8.7 → 0.8.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.
Files changed (179) hide show
  1. package/dist/{chunk-637L7XQ3.js → chunk-3TNPSN4D.js} +28 -9
  2. package/dist/chunk-62ES6N32.js +27 -0
  3. package/dist/chunk-AHL45DD2.js +145 -0
  4. package/dist/chunk-AXV5O2IZ.js +58 -0
  5. package/dist/chunk-IYDH5IU6.js +66 -0
  6. package/dist/chunk-OPVKL4VS.js +18 -0
  7. package/dist/chunk-Q6QH52LJ.js +38 -0
  8. package/dist/chunk-TH6W2PWG.js +213 -0
  9. package/dist/chunk-THOVPZNN.js +37 -0
  10. package/dist/chunk-YS6BHKZO.js +92 -0
  11. package/dist/components/badge.d.ts +1 -1
  12. package/dist/components/button.d.ts +1 -1
  13. package/dist/components/category-deck.js +10 -1
  14. package/dist/components/command.d.ts +7 -7
  15. package/dist/components/concept-compare.d.ts +73 -0
  16. package/dist/components/concept-compare.js +162 -0
  17. package/dist/components/coverflow.d.ts +11 -3
  18. package/dist/components/coverflow.js +34 -51
  19. package/dist/components/date-input.d.ts +1 -1
  20. package/dist/components/drift-rail.d.ts +24 -10
  21. package/dist/components/drift-rail.js +1 -1
  22. package/dist/components/event-card.d.ts +8 -0
  23. package/dist/components/event-card.js +64 -34
  24. package/dist/components/event-compact-row.d.ts +33 -6
  25. package/dist/components/event-compact-row.js +120 -39
  26. package/dist/components/event-day-header.js +3 -1
  27. package/dist/components/event-day-separator.d.ts +7 -1
  28. package/dist/components/event-day-separator.js +3 -2
  29. package/dist/components/event-detail-panel.d.ts +171 -25
  30. package/dist/components/event-detail-panel.js +471 -174
  31. package/dist/components/event-hub-hero.d.ts +25 -4
  32. package/dist/components/event-hub-hero.js +89 -19
  33. package/dist/components/event-list-row-wide.js +1 -1
  34. package/dist/components/event-list-row.d.ts +19 -6
  35. package/dist/components/event-list-row.js +79 -35
  36. package/dist/components/hour-band.d.ts +38 -40
  37. package/dist/components/hour-band.js +55 -27
  38. package/dist/components/hour-group.js +1 -1
  39. package/dist/components/hub-surface.d.ts +27 -0
  40. package/dist/components/hub-surface.js +20 -0
  41. package/dist/components/menu-family-card.d.ts +59 -0
  42. package/dist/components/menu-family-card.js +121 -0
  43. package/dist/components/menu-field.d.ts +57 -0
  44. package/dist/components/menu-field.js +3 -0
  45. package/dist/components/menu-hub-hero.d.ts +65 -0
  46. package/dist/components/menu-hub-hero.js +103 -0
  47. package/dist/components/menu-intent-tiles.d.ts +31 -0
  48. package/dist/components/menu-intent-tiles.js +50 -0
  49. package/dist/components/menu-item.d.ts +127 -0
  50. package/dist/components/menu-item.js +5 -0
  51. package/dist/components/menu-mocks.d.ts +55 -0
  52. package/dist/components/menu-mocks.js +379 -0
  53. package/dist/components/menu-types.d.ts +245 -0
  54. package/dist/components/menu-types.js +1 -0
  55. package/dist/components/motion-icon-set.js +15 -3
  56. package/dist/components/open-now-list.d.ts +40 -0
  57. package/dist/components/open-now-list.js +69 -0
  58. package/dist/components/place-types.d.ts +112 -1
  59. package/dist/components/poster-tape.js +1 -1
  60. package/dist/components/poster-wall.d.ts +3 -3
  61. package/dist/components/poster-wall.js +73 -17
  62. package/dist/components/ranked-venue-list.d.ts +49 -0
  63. package/dist/components/ranked-venue-list.js +87 -0
  64. package/dist/components/section-header.d.ts +16 -1
  65. package/dist/components/section-header.js +26 -7
  66. package/dist/components/signature-chip.d.ts +37 -0
  67. package/dist/components/signature-chip.js +4 -0
  68. package/dist/components/signature-line-list.d.ts +45 -0
  69. package/dist/components/signature-line-list.js +99 -0
  70. package/dist/components/snap-rail.d.ts +54 -0
  71. package/dist/components/snap-rail.js +109 -0
  72. package/dist/components/spinner.d.ts +2 -2
  73. package/dist/components/stat-banner.d.ts +47 -0
  74. package/dist/components/stat-banner.js +61 -0
  75. package/dist/components/text.d.ts +3 -3
  76. package/dist/components/timeline-band.d.ts +20 -2
  77. package/dist/components/timeline-band.js +1 -1
  78. package/dist/components/timeline-playhead.d.ts +26 -0
  79. package/dist/components/timeline-playhead.js +25 -0
  80. package/dist/components/venue-busyness-strip.d.ts +35 -0
  81. package/dist/components/venue-busyness-strip.js +37 -0
  82. package/dist/components/venue-grade-dimensions.d.ts +36 -0
  83. package/dist/components/venue-grade-dimensions.js +3 -0
  84. package/dist/components/venue-quotes.d.ts +32 -0
  85. package/dist/components/venue-quotes.js +3 -0
  86. package/dist/components/venue-signature-block.d.ts +39 -0
  87. package/dist/components/venue-signature-block.js +6 -0
  88. package/dist/components/venue-spotlight.d.ts +74 -0
  89. package/dist/components/venue-spotlight.js +138 -0
  90. package/dist/components/venue-wall.d.ts +41 -0
  91. package/dist/components/venue-wall.js +118 -0
  92. package/dist/components/weekday-theme-banner.d.ts +70 -0
  93. package/dist/components/weekday-theme-banner.js +127 -0
  94. package/dist/components/weekend-panel.d.ts +5 -4
  95. package/dist/components/weekend-panel.js +85 -71
  96. package/dist/hooks/use-drag-swipe.d.ts +44 -0
  97. package/dist/hooks/use-drag-swipe.js +2 -0
  98. package/dist/hooks/use-media-query.d.ts +17 -0
  99. package/dist/hooks/use-media-query.js +2 -0
  100. package/package.json +1 -1
  101. package/src/components/category-deck.tsx +19 -8
  102. package/src/components/colour-dictionary.stories.tsx +227 -0
  103. package/src/components/concept-compare.stories.tsx +104 -0
  104. package/src/components/concept-compare.tsx +276 -0
  105. package/src/components/coverflow.test.tsx +28 -1
  106. package/src/components/coverflow.tsx +37 -43
  107. package/src/components/drift-rail.tsx +167 -42
  108. package/src/components/event-card.tsx +55 -10
  109. package/src/components/event-compact-row.stories.tsx +30 -0
  110. package/src/components/event-compact-row.test.tsx +49 -0
  111. package/src/components/event-compact-row.tsx +162 -38
  112. package/src/components/event-day-header.tsx +3 -1
  113. package/src/components/event-day-separator.tsx +8 -1
  114. package/src/components/event-detail-panel.stories.tsx +205 -97
  115. package/src/components/event-detail-panel.test.tsx +181 -0
  116. package/src/components/event-detail-panel.tsx +703 -185
  117. package/src/components/event-hub-hero.stories.tsx +30 -0
  118. package/src/components/event-hub-hero.tsx +102 -30
  119. package/src/components/event-list-row.stories.tsx +34 -0
  120. package/src/components/event-list-row.test.tsx +53 -0
  121. package/src/components/event-list-row.tsx +135 -87
  122. package/src/components/hour-band.stories.tsx +28 -5
  123. package/src/components/hour-band.tsx +90 -70
  124. package/src/components/hub-surface.stories.tsx +68 -0
  125. package/src/components/hub-surface.tsx +40 -0
  126. package/src/components/menu-family-card.stories.tsx +112 -0
  127. package/src/components/menu-family-card.tsx +211 -0
  128. package/src/components/menu-field.stories.tsx +74 -0
  129. package/src/components/menu-field.tsx +199 -0
  130. package/src/components/menu-hub-hero.stories.tsx +92 -0
  131. package/src/components/menu-hub-hero.tsx +187 -0
  132. package/src/components/menu-intent-tiles.stories.tsx +54 -0
  133. package/src/components/menu-intent-tiles.tsx +76 -0
  134. package/src/components/menu-item.tsx +416 -0
  135. package/src/components/menu-mocks.ts +417 -0
  136. package/src/components/menu-types.ts +259 -0
  137. package/src/components/motion-icon-set.tsx +30 -3
  138. package/src/components/open-now-list.stories.tsx +76 -0
  139. package/src/components/open-now-list.tsx +127 -0
  140. package/src/components/place-types.ts +112 -0
  141. package/src/components/poster-wall.test.tsx +28 -0
  142. package/src/components/poster-wall.tsx +96 -23
  143. package/src/components/ranked-venue-list.stories.tsx +80 -0
  144. package/src/components/ranked-venue-list.tsx +177 -0
  145. package/src/components/section-header.stories.tsx +24 -0
  146. package/src/components/section-header.test.tsx +28 -0
  147. package/src/components/section-header.tsx +45 -7
  148. package/src/components/signature-chip.tsx +77 -0
  149. package/src/components/signature-line-list.stories.tsx +85 -0
  150. package/src/components/signature-line-list.tsx +136 -0
  151. package/src/components/snap-rail.stories.tsx +79 -0
  152. package/src/components/snap-rail.test.tsx +18 -0
  153. package/src/components/snap-rail.tsx +148 -0
  154. package/src/components/stat-banner.stories.tsx +100 -0
  155. package/src/components/stat-banner.tsx +117 -0
  156. package/src/components/timeline-band.tsx +52 -12
  157. package/src/components/timeline-playhead.stories.tsx +30 -0
  158. package/src/components/timeline-playhead.test.tsx +11 -0
  159. package/src/components/timeline-playhead.tsx +46 -0
  160. package/src/components/venue-busyness-strip.stories.tsx +66 -0
  161. package/src/components/venue-busyness-strip.tsx +64 -0
  162. package/src/components/venue-grade-dimensions.stories.tsx +83 -0
  163. package/src/components/venue-grade-dimensions.tsx +91 -0
  164. package/src/components/venue-quotes.stories.tsx +59 -0
  165. package/src/components/venue-quotes.tsx +64 -0
  166. package/src/components/venue-signature-block.stories.tsx +68 -0
  167. package/src/components/venue-signature-block.tsx +71 -0
  168. package/src/components/venue-spotlight.stories.tsx +141 -0
  169. package/src/components/venue-spotlight.tsx +236 -0
  170. package/src/components/venue-wall.stories.tsx +78 -0
  171. package/src/components/venue-wall.tsx +185 -0
  172. package/src/components/weekday-theme-banner.stories.tsx +113 -0
  173. package/src/components/weekday-theme-banner.tsx +231 -0
  174. package/src/components/weekend-panel.test.tsx +43 -0
  175. package/src/components/weekend-panel.tsx +142 -108
  176. package/src/hooks/use-drag-swipe.test.tsx +66 -0
  177. package/src/hooks/use-drag-swipe.ts +105 -0
  178. package/src/hooks/use-media-query.ts +31 -0
  179. package/dist/chunk-GPH6L4DX.js +0 -55
@@ -3,41 +3,85 @@ import * as React from 'react';
3
3
  import { EventPreview, EventFormatters } from './event-types.js';
4
4
 
5
5
  /**
6
- * EventDetailPanel — the BODY of the event detail sheet.
6
+ * EventDetailPanel — the BODY of the event detail sheet, and the body the
7
+ * event PAGE is a superset of.
7
8
  *
8
9
  * Deliberately not a sheet. The design opens this as a side sheet over a dimmed
9
- * page on desktop and a bottom sheet on mobile, and the DS already ships `Sheet`
10
- * and `Drawer`; owning sheet mechanics a third time here would fork them. The
11
- * consuming app mounts this inside whichever container the breakpoint calls for.
10
+ * page on desktop and a bottom drawer on mobile, and the DS already ships
11
+ * `Sheet` and `Drawer`; owning sheet mechanics a third time here would fork
12
+ * them. The consuming app mounts this inside whichever container the
13
+ * breakpoint calls for, and passes the container's own controls (close, back,
14
+ * share) as `headerActions`, positioned over the poster by this component.
12
15
  *
13
- * This is the terminal surface for acting on an event, which is why the cards
14
- * that open it carry no actions of their own the footer is where booking and
15
- * directions live.
16
+ * ONE BODY, TWO HOSTS. The same regions in the same order everywhere: poster,
17
+ * title, when-line, one chip row, venue, line-up, about, external link, then a
18
+ * footer of one primary action over a row of ghost actions. The page renders
19
+ * these regions itself with more room; nothing here is invented twice.
16
20
  *
17
- * Everything is injected: strings via `labels`, times via `formatters`, and the
18
- * close/share affordances as `headerActions` so the sheet container owns
19
- * dismissal (bearmenu sheets close by drag handle, not by back navigation).
21
+ * THE HERO IS CAPPED, NOT A RATIO. 91% of posters are 4:5 flyers, and at 4:5 a
22
+ * hero took 68% of a side sheet and cut the venue card mid-row before any
23
+ * scrolling the one thing this surface exists to answer. So `heroHeight`
24
+ * caps it: 300px on the 480px side sheet, 318px on the phone drawer, chosen so
25
+ * the venue card clears the fold even when status, fee, hype and two tags wrap
26
+ * the chip row onto a second line. It crops more than a 4:3 would, and that is
27
+ * the trade; the full flyer is one tap away on the page.
28
+ *
29
+ * STATUS IS A CHIP, IN THE INFO BLOCK. Cards put pills on the poster because a
30
+ * card has nowhere else; a detail surface does, and a portrait flyer is busy
31
+ * artwork already. `live` and the free fee are `--success`; `soon` is the
32
+ * accent — success is reserved for live and free, and a third meaning on the
33
+ * same colour would flatten both. `ended` desaturates and dims the POSTER
34
+ * (never the whole surface, which drops text below AA), mutes the title and
35
+ * adds an explicit chip; the host replaces the primary action rather than
36
+ * disabling it.
37
+ *
38
+ * Everything is injected: strings via `labels`, times via `formatters`, the
39
+ * date line and the soon label composed by the caller (clause order is
40
+ * locale-dependent and "is this live" depends on the app's clock, not the
41
+ * DS's).
20
42
  */
21
43
  type EventDetailPanelLinkProps = {
22
44
  href: string;
23
45
  className?: string;
24
46
  children: React.ReactNode;
47
+ onClick?: (mouseEvent: React.MouseEvent) => void;
25
48
  };
49
+ type EventDetailStatus = "upcoming" | "soon" | "live" | "ended";
26
50
  type EventDetailVenue = {
27
51
  name: string;
28
- /** Address plus opening line, composed by the caller. */
29
- meta?: string;
52
+ /** Address line, e.g. "Str. Iuliu Maniu 5". */
53
+ address?: string;
54
+ /** e.g. "4.7" — rendered with a star. */
30
55
  ratingLabel?: string;
56
+ /** e.g. "open until 20:00" — appended to the meta row when given. */
57
+ openLabel?: string;
58
+ /** Lights the green dot on the thumbnail. */
59
+ isOpenNow?: boolean;
31
60
  thumbnailUrl?: string;
61
+ /**
62
+ * The venue's own page. Without it the card is not a link and shows
63
+ * `labels.venueNoPage` beneath the name — a venue the ingest knows by name
64
+ * only, which is common and must not read as a broken link.
65
+ */
32
66
  href?: string;
33
67
  };
34
68
  type EventDetailPanelLabels = {
35
69
  free: string;
36
70
  liveNow: string;
71
+ /** The ended chip, e.g. "Ended". */
72
+ ended: string;
37
73
  /** Section heading above the venue card. */
38
74
  venueHeading: string;
75
+ /** Under the venue name when the venue has no page, e.g. "name only — no venue page yet". */
76
+ venueNoPage: string;
77
+ /** Section heading above the performers. */
78
+ lineupHeading: string;
39
79
  /** Section heading above the description. */
40
80
  aboutHeading: string;
81
+ /** Italic placeholder when there is no description, e.g. "Event details coming soon." */
82
+ noDescription: string;
83
+ readMore: string;
84
+ readLess: string;
41
85
  };
42
86
  type EventDetailPanelProps = {
43
87
  event: EventPreview;
@@ -45,36 +89,138 @@ type EventDetailPanelProps = {
45
89
  formatters: EventFormatters;
46
90
  /**
47
91
  * The date line, composed by the caller — the design reads
48
- * "Saturday, September 5 · Starts at 20:00", whose clause order and
49
- * preposition are locale-dependent.
92
+ * "Tuesday, September 8 · Starts at 17:30", or time to be announced" when
93
+ * the hour is unknown. Clause order and preposition are locale-dependent.
50
94
  */
51
95
  dateLine: string;
96
+ /** The start as an ISO string; when given the date line is a `<time dateTime>`. */
97
+ dateTime?: string;
98
+ status?: EventDetailStatus;
99
+ /** The soon chip's text, composed by the caller — "Starts in 2h 10m". Required to render it. */
100
+ soonLabel?: string;
101
+ /** The hype tier, rendered as given (the app's own badge) in the chip row. */
102
+ hype?: React.ReactNode;
52
103
  venue?: EventDetailVenue;
53
- /** Category chips beside the live/price chips. */
104
+ /** Activity tags, after status, fee and hype. */
54
105
  tags?: string[];
55
- isLive?: boolean;
56
- /** Close and share controls, positioned over the poster by this component. */
106
+ /** Performer names, in the order the API gave them. */
107
+ performers?: string[];
108
+ /** How many performers to show before the "show all" chip. Default 5. */
109
+ performersPreview?: number;
110
+ /** The "show all" chip's text, e.g. "Show all 8 performers". Required to render it. */
111
+ showAllPerformersLabel?: string;
112
+ /** Close, back and share controls, positioned over the poster by this component. */
57
113
  headerActions?: React.ReactNode;
58
- /** Footer actionsthe booking CTA and directions. Rendered in a sticky footer. */
114
+ /** The footerusually an `EventDetailFooter`. Rendered below the scroll region. */
59
115
  footer?: React.ReactNode;
60
116
  /** An external link row, e.g. "View on Instagram". */
61
117
  externalLink?: React.ReactNode;
62
- /** `compact` is the mobile bottom sheet: tighter type and padding, same 4:5 poster. */
118
+ /**
119
+ * Poster height cap in px, or `"aspect"` for the poster's own 4:5. Defaults
120
+ * to 318 for `compact` (the phone drawer) and 300 otherwise (the side sheet).
121
+ */
122
+ heroHeight?: number | "aspect";
123
+ /** `compact` is the phone drawer: the shorter default hero cap. */
63
124
  size?: "compact" | "default";
64
125
  linkComponent?: React.ComponentType<EventDetailPanelLinkProps>;
65
126
  className?: string;
66
127
  /** Rendered instead of the poster when it's absent. Defaults to `<EventPosterFallback />`. */
67
128
  fallback?: React.ReactNode;
68
129
  };
69
- declare function EventDetailPanel({ event, labels, formatters, dateLine, venue, tags, isLive, headerActions, footer, externalLink, size, linkComponent: LinkComponent, className, fallback, }: EventDetailPanelProps): react_jsx_runtime.JSX.Element;
130
+ declare function EventDetailPanel({ event, labels, formatters, dateLine, dateTime, status, soonLabel, hype, venue, tags, performers, performersPreview, showAllPerformersLabel, headerActions, footer, externalLink, heroHeight, size, linkComponent: LinkComponent, className, fallback, }: EventDetailPanelProps): react_jsx_runtime.JSX.Element;
131
+ type EventDetailFooterProps = {
132
+ /**
133
+ * The one primary action — a `Button` (reserve, tickets, directions when
134
+ * there is no booking, or "see what's on tonight" for an ended event). The
135
+ * host decides which; this only lays it out.
136
+ */
137
+ primary: React.ReactNode;
138
+ /**
139
+ * Zero to two ghost actions — `EventDetailGhostAction`s — drawn as one row
140
+ * above the primary with a hairline between them. Ghosts, not bordered
141
+ * boxes: three bordered buttons stacked read as three equal choices, and
142
+ * the reserve action is not one of three.
143
+ */
144
+ ghosts?: React.ReactNode[];
145
+ className?: string;
146
+ };
147
+ /** The sticky footer under the panel's scroll region: one primary over a ghost row. */
148
+ declare function EventDetailFooter({ primary, ghosts, className, }: EventDetailFooterProps): react_jsx_runtime.JSX.Element;
149
+ type EventDetailGhostActionProps = {
150
+ icon?: React.ReactNode;
151
+ children: React.ReactNode;
152
+ href?: string;
153
+ linkComponent?: React.ComponentType<EventDetailPanelLinkProps>;
154
+ onClick?: (mouseEvent: React.MouseEvent) => void;
155
+ /** `_blank` for an outward link (a maps app). */
156
+ target?: string;
157
+ rel?: string;
158
+ className?: string;
159
+ };
160
+ /** A quiet action in the footer's ghost row. A link when `href` is given, a button otherwise. */
161
+ declare function EventDetailGhostAction({ icon, children, href, linkComponent: LinkComponent, onClick, target, rel, className, }: EventDetailGhostActionProps): react_jsx_runtime.JSX.Element;
162
+ type EventDetailPanelErrorProps = {
163
+ title: string;
164
+ description: string;
165
+ retryLabel: string;
166
+ onRetry: () => void;
167
+ /** The way onward, e.g. "See what's on tonight". */
168
+ secondaryLabel?: string;
169
+ secondaryHref?: string;
170
+ onSecondary?: () => void;
171
+ linkComponent?: React.ComponentType<EventDetailPanelLinkProps>;
172
+ /** Close/share controls over the (empty) hero — same slot as the panel. */
173
+ headerActions?: React.ReactNode;
174
+ className?: string;
175
+ };
176
+ /**
177
+ * The panel when the event could not be loaded: an empty gradient hero so the
178
+ * sheet keeps its shape and its controls, then the message and a way onward —
179
+ * not only an apology.
180
+ */
181
+ declare function EventDetailPanelError({ title, description, retryLabel, onRetry, secondaryLabel, secondaryHref, onSecondary, linkComponent: LinkComponent, headerActions, className, }: EventDetailPanelErrorProps): react_jsx_runtime.JSX.Element;
70
182
  type EventDetailPanelSkeletonProps = {
71
- /** `compact` is the mobile bottom sheet: tighter type and padding, same 4:5 poster. */
183
+ /** `compact` is the phone drawer: the shorter default hero cap. */
72
184
  size?: "compact" | "default";
73
- /** Close and share controls, positioned over the poster — same slot as the real component. */
185
+ heroHeight?: number | "aspect";
186
+ /** Close and share controls over the poster — same slot as the real component. */
74
187
  headerActions?: React.ReactNode;
188
+ /**
189
+ * Announces the skeleton as a busy status region with this text, e.g.
190
+ * "Loading the event". Without it the skeleton is `aria-hidden` and the host
191
+ * is expected to announce loading itself.
192
+ */
193
+ label?: string;
75
194
  className?: string;
76
195
  };
77
- /** Mirrors `<EventDetailPanel>`'s geometry exactly: the hero scrolls away with the body, the footer is sticky. */
78
- declare function EventDetailPanelSkeleton({ size, headerActions, className, }: EventDetailPanelSkeletonProps): react_jsx_runtime.JSX.Element;
196
+ /** Mirrors `<EventDetailPanel>`'s geometry: capped hero, two title lines, when-line, chips, venue card, line-up, about, ghost row and primary. */
197
+ declare function EventDetailPanelSkeleton({ size, heroHeight, headerActions, label, className, }: EventDetailPanelSkeletonProps): react_jsx_runtime.JSX.Element;
198
+ type EventDetailChipRowProps = Pick<EventDetailPanelProps, "event" | "formatters" | "status" | "soonLabel" | "hype" | "tags"> & {
199
+ /** Only the chip strings — a page rendering the row alone need not name the section headings. */
200
+ labels: Pick<EventDetailPanelLabels, "free" | "liveNow" | "ended">;
201
+ className?: string;
202
+ };
203
+ /**
204
+ * One wrapping row, all 24px: status, fee, hype, then activity tags. Exported
205
+ * so the page renders the same row above its title — it is the panel's row,
206
+ * not a second one.
207
+ */
208
+ declare function EventDetailChipRow({ event, labels, formatters, status, soonLabel, hype, tags, className, }: EventDetailChipRowProps): react_jsx_runtime.JSX.Element;
209
+ type EventDetailVenueCardProps = {
210
+ venue: EventDetailVenue;
211
+ labels: Pick<EventDetailPanelLabels, "venueNoPage">;
212
+ linkComponent?: React.ComponentType<EventDetailPanelLinkProps>;
213
+ /** Thumbnail size in px: 52 in the sheet, 64 on the page. */
214
+ thumbnailSize?: 52 | 64;
215
+ /** An inline action beside the chevron — the page's "Open in Maps". */
216
+ action?: React.ReactNode;
217
+ className?: string;
218
+ };
219
+ /**
220
+ * The venue row: cover with an open-now dot, name, address · rating · open
221
+ * label, a chevron when it links. Without `venue.href` it is not a link and
222
+ * says so — a venue the ingest knows by name only must not read as broken.
223
+ */
224
+ declare function EventDetailVenueCard({ venue, labels, linkComponent: LinkComponent, thumbnailSize, action, className, }: EventDetailVenueCardProps): react_jsx_runtime.JSX.Element;
79
225
 
80
- export { EventDetailPanel, type EventDetailPanelLabels, type EventDetailPanelLinkProps, type EventDetailPanelProps, EventDetailPanelSkeleton, type EventDetailPanelSkeletonProps, type EventDetailVenue };
226
+ export { EventDetailChipRow, type EventDetailChipRowProps, EventDetailFooter, type EventDetailFooterProps, EventDetailGhostAction, type EventDetailGhostActionProps, EventDetailPanel, EventDetailPanelError, type EventDetailPanelErrorProps, type EventDetailPanelLabels, type EventDetailPanelLinkProps, type EventDetailPanelProps, EventDetailPanelSkeleton, type EventDetailPanelSkeletonProps, type EventDetailStatus, type EventDetailVenue, EventDetailVenueCard, type EventDetailVenueCardProps };