@admin-layout/ai-chat-ext-browser 12.2.5-alpha.2 → 12.2.5-alpha.7

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 (74) hide show
  1. package/lib/components/MessageWidgets/MessageFlights.d.ts +27 -4
  2. package/lib/components/MessageWidgets/MessageFlights.d.ts.map +1 -1
  3. package/lib/components/MessageWidgets/MessageFlights.js +192 -64
  4. package/lib/components/MessageWidgets/MessageFlights.js.map +1 -1
  5. package/lib/components/MessageWidgets/MessageResults.d.ts +54 -0
  6. package/lib/components/MessageWidgets/MessageResults.d.ts.map +1 -0
  7. package/lib/components/MessageWidgets/MessageResults.js +163 -0
  8. package/lib/components/MessageWidgets/MessageResults.js.map +1 -0
  9. package/lib/components/MessageWidgets/MessageTravel.d.ts +2 -0
  10. package/lib/components/MessageWidgets/MessageTravel.d.ts.map +1 -1
  11. package/lib/components/MessageWidgets/MessageTravel.js +15 -3
  12. package/lib/components/MessageWidgets/MessageTravel.js.map +1 -1
  13. package/lib/components/MessageWidgets/ResultCards.d.ts +19 -0
  14. package/lib/components/MessageWidgets/ResultCards.d.ts.map +1 -0
  15. package/lib/components/MessageWidgets/ResultCards.js +543 -0
  16. package/lib/components/MessageWidgets/ResultCards.js.map +1 -0
  17. package/lib/components/MessageWidgets/ResultRow.d.ts +57 -0
  18. package/lib/components/MessageWidgets/ResultRow.d.ts.map +1 -0
  19. package/lib/components/MessageWidgets/ResultRow.js +216 -0
  20. package/lib/components/MessageWidgets/ResultRow.js.map +1 -0
  21. package/lib/components/MessageWidgets/index.d.ts +6 -2
  22. package/lib/components/MessageWidgets/index.d.ts.map +1 -1
  23. package/lib/components/index.d.ts +1 -1
  24. package/lib/components/index.d.ts.map +1 -1
  25. package/lib/index.d.ts +6 -2
  26. package/lib/index.d.ts.map +1 -1
  27. package/lib/index.js +1 -1
  28. package/lib/module.d.ts.map +1 -1
  29. package/lib/module.js +13 -1
  30. package/lib/module.js.map +1 -1
  31. package/lib/slot-fill/chat-settings-fill.js +1 -1
  32. package/lib/slot-fill/chat-settings-fill.js.map +1 -1
  33. package/lib/slot-fill/index.d.ts +4 -0
  34. package/lib/slot-fill/index.d.ts.map +1 -1
  35. package/lib/slot-fill/message-ai-assistant-fill.js +1 -1
  36. package/lib/slot-fill/message-ai-assistant-fill.js.map +1 -1
  37. package/lib/slot-fill/message-codeblock-fill.js +1 -1
  38. package/lib/slot-fill/message-codeblock-fill.js.map +1 -1
  39. package/lib/slot-fill/message-connector-fill.js +1 -1
  40. package/lib/slot-fill/message-connector-fill.js.map +1 -1
  41. package/lib/slot-fill/message-generic-fill.js +1 -1
  42. package/lib/slot-fill/message-generic-fill.js.map +1 -1
  43. package/lib/slot-fill/message-jobs-fill.d.ts +4 -0
  44. package/lib/slot-fill/message-jobs-fill.d.ts.map +1 -0
  45. package/lib/slot-fill/message-jobs-fill.js +6 -0
  46. package/lib/slot-fill/message-jobs-fill.js.map +1 -0
  47. package/lib/slot-fill/message-media-fill.js +1 -1
  48. package/lib/slot-fill/message-media-fill.js.map +1 -1
  49. package/lib/slot-fill/message-movies-fill.d.ts +4 -0
  50. package/lib/slot-fill/message-movies-fill.d.ts.map +1 -0
  51. package/lib/slot-fill/message-movies-fill.js +6 -0
  52. package/lib/slot-fill/message-movies-fill.js.map +1 -0
  53. package/lib/slot-fill/message-resume-fill.d.ts +4 -0
  54. package/lib/slot-fill/message-resume-fill.d.ts.map +1 -0
  55. package/lib/slot-fill/message-resume-fill.js +6 -0
  56. package/lib/slot-fill/message-resume-fill.js.map +1 -0
  57. package/lib/slot-fill/message-service-fill.js +1 -1
  58. package/lib/slot-fill/message-service-fill.js.map +1 -1
  59. package/lib/slot-fill/message-shopping-fill.d.ts +4 -0
  60. package/lib/slot-fill/message-shopping-fill.d.ts.map +1 -0
  61. package/lib/slot-fill/message-shopping-fill.js +6 -0
  62. package/lib/slot-fill/message-shopping-fill.js.map +1 -0
  63. package/lib/slot-fill/message-thinking-fill.js +1 -1
  64. package/lib/slot-fill/message-thinking-fill.js.map +1 -1
  65. package/lib/slot-fill/message-tooluse-fill.js +1 -1
  66. package/lib/slot-fill/message-tooluse-fill.js.map +1 -1
  67. package/lib/slot-fill/message-travel-fill.js +1 -1
  68. package/lib/slot-fill/message-travel-fill.js.map +1 -1
  69. package/lib/slot-fill/message-workflow-fill.js +1 -1
  70. package/lib/slot-fill/message-workflow-fill.js.map +1 -1
  71. package/lib/utils/parseWidgetPost.d.ts.map +1 -1
  72. package/lib/utils/parseWidgetPost.js +1 -1
  73. package/lib/utils/parseWidgetPost.js.map +1 -1
  74. package/package.json +3 -3
@@ -0,0 +1,543 @@
1
+ import React from'react';import {FaBed}from'@react-icons/all-files/fa/FaBed.js';import {FaBus}from'@react-icons/all-files/fa/FaBus.js';import {FaCar}from'@react-icons/all-files/fa/FaCar.js';import {FaStar}from'@react-icons/all-files/fa/FaStar.js';import {FaTrain}from'@react-icons/all-files/fa/FaTrain.js';import {FiArrowUpRight}from'@react-icons/all-files/fi/FiArrowUpRight.js';import {FiClock}from'@react-icons/all-files/fi/FiClock.js';import {FiDownload}from'@react-icons/all-files/fi/FiDownload.js';import {FiExternalLink}from'@react-icons/all-files/fi/FiExternalLink.js';import {FiFileText}from'@react-icons/all-files/fi/FiFileText.js';import {FiFilm}from'@react-icons/all-files/fi/FiFilm.js';import {FiMapPin}from'@react-icons/all-files/fi/FiMapPin.js';import {FiShoppingBag}from'@react-icons/all-files/fi/FiShoppingBag.js';import {RouteLine,TONES}from'./MessageFlights.js';import {CardShell,SafeImage,ResultBadgePill,RESULT_CARD_CLASS,IN_ROW,resultCardBorder}from'./ResultRow.js';const shellClass = (fullWidth, highlighted, extra = '') => `${RESULT_CARD_CLASS} ${resultCardBorder(highlighted)} ${fullWidth ? 'w-full' : IN_ROW} ${extra}`;
2
+ const Rating = ({
3
+ text,
4
+ reviews,
5
+ suffix
6
+ }) => text ? React.createElement("span", {
7
+ className: "inline-flex items-center gap-1 text-xs"
8
+ }, React.createElement(FaStar, {
9
+ className: "h-3 w-3 text-amber-400"
10
+ }), React.createElement("span", {
11
+ className: "font-semibold tabular-nums text-gray-900 dark:text-gray-50"
12
+ }, text), reviews ? React.createElement("span", {
13
+ className: "text-gray-500 dark:text-gray-400"
14
+ }, "(", reviews, suffix ? ` ${suffix}` : '', ")") : null) : null;
15
+ const PriceFooter = ({
16
+ left,
17
+ price,
18
+ unit,
19
+ url
20
+ }) => React.createElement("div", {
21
+ className: "mt-auto flex items-end justify-between gap-3 border-t border-gray-100 pt-3 dark:border-gray-700"
22
+ }, React.createElement("p", {
23
+ className: "min-w-0 truncate text-xs text-gray-500 dark:text-gray-400"
24
+ }, left ? `via ${left}` : ' '), React.createElement("span", {
25
+ className: "flex shrink-0 items-baseline gap-1"
26
+ }, price ? React.createElement("span", {
27
+ className: "text-lg font-bold leading-none tabular-nums text-gray-900 dark:text-white"
28
+ }, price) : null, price && unit ? React.createElement("span", {
29
+ className: "text-xs text-gray-500 dark:text-gray-400"
30
+ }, "/", unit) : null, url ? React.createElement(FiExternalLink, {
31
+ className: "ml-1 h-3.5 w-3.5 self-center text-gray-400 transition-colors group-hover/card:text-blue-500"
32
+ }) : null));
33
+ const ImagePlaceholder = ({
34
+ icon,
35
+ className = ''
36
+ }) => React.createElement("div", {
37
+ className: `flex items-center justify-center bg-gradient-to-br from-slate-100 to-slate-200 text-slate-400 dark:from-gray-700 dark:to-gray-800 dark:text-gray-500 ${className}`
38
+ }, icon);
39
+ const Monogram = ({
40
+ code,
41
+ tone,
42
+ logoUrl,
43
+ name
44
+ }) => React.createElement(SafeImage, {
45
+ src: logoUrl,
46
+ alt: name,
47
+ fit: "contain",
48
+ className: "h-9 w-9 shrink-0 rounded-lg border border-gray-100 bg-white p-0.5 dark:border-gray-700",
49
+ fallback: React.createElement("span", {
50
+ "aria-hidden": "true",
51
+ className: `flex h-9 w-9 shrink-0 items-center justify-center rounded-lg text-[11px] font-bold tracking-wide ${TONES[tone % TONES.length]}`
52
+ }, code)
53
+ });
54
+ // ─── Stays ───────────────────────────────────────────────────────
55
+ const StayCard = ({
56
+ card,
57
+ onOpen,
58
+ fullWidth,
59
+ highlighted
60
+ }) => React.createElement(CardShell, {
61
+ url: card.url,
62
+ onOpen: onOpen,
63
+ label: card.accessibleLabel,
64
+ cardKey: card.key,
65
+ className: shellClass(fullWidth, highlighted)
66
+ }, React.createElement("div", {
67
+ className: "relative aspect-[16/10] w-full overflow-hidden bg-gray-100 dark:bg-gray-700"
68
+ }, React.createElement(SafeImage, {
69
+ src: card.imageUrl,
70
+ alt: card.title,
71
+ className: "h-full w-full transition-transform duration-300 group-hover/card:scale-[1.03]",
72
+ fallback: React.createElement(ImagePlaceholder, {
73
+ icon: React.createElement(FaBed, {
74
+ className: "h-7 w-7"
75
+ }),
76
+ className: "h-full w-full"
77
+ })
78
+ }), card.badges[0] ? React.createElement("span", {
79
+ className: "absolute left-2.5 top-2.5"
80
+ }, React.createElement(ResultBadgePill, {
81
+ badge: card.badges[0],
82
+ floating: true
83
+ })) : null, card.ratingText ? React.createElement("span", {
84
+ className: "absolute right-2.5 top-2.5 inline-flex items-center gap-1 rounded-lg bg-white/95 px-1.5 py-0.5 text-xs font-bold text-gray-900 shadow-sm dark:bg-gray-900/90 dark:text-white"
85
+ }, React.createElement(FaStar, {
86
+ className: "h-2.5 w-2.5 text-amber-400"
87
+ }), card.ratingText) : null), React.createElement("div", {
88
+ className: "flex flex-1 flex-col p-3.5"
89
+ }, React.createElement("p", {
90
+ className: "line-clamp-2 text-sm font-semibold leading-5 text-gray-900 dark:text-gray-50"
91
+ }, card.title), card.location ? React.createElement("p", {
92
+ className: "mt-1 flex items-center gap-1 truncate text-xs text-gray-500 dark:text-gray-400"
93
+ }, React.createElement(FiMapPin, {
94
+ className: "h-3 w-3 shrink-0"
95
+ }), React.createElement("span", {
96
+ className: "truncate"
97
+ }, card.location)) : null, card.reviewsText ? React.createElement("p", {
98
+ className: "mt-1 text-xs text-gray-500 dark:text-gray-400"
99
+ }, card.reviewsText, " reviews") : null, card.perks.length ? React.createElement("div", {
100
+ className: "mt-2 flex flex-wrap gap-1"
101
+ }, card.perks.map(p => React.createElement("span", {
102
+ key: p,
103
+ className: "rounded-md bg-emerald-50 px-1.5 py-0.5 text-[11px] font-medium text-emerald-700 dark:bg-emerald-500/10 dark:text-emerald-300"
104
+ }, p))) : null, React.createElement("div", {
105
+ className: "mt-3 flex flex-1 flex-col"
106
+ }, React.createElement(PriceFooter, {
107
+ left: card.sourceLabel,
108
+ price: card.price,
109
+ unit: card.unit,
110
+ url: card.url
111
+ }))));
112
+ // ─── Cars ────────────────────────────────────────────────────────
113
+ const CarCard = ({
114
+ card,
115
+ onOpen,
116
+ fullWidth,
117
+ highlighted
118
+ }) => {
119
+ if (card.isLink) {
120
+ return React.createElement(CardShell, {
121
+ url: card.url,
122
+ onOpen: onOpen,
123
+ label: card.accessibleLabel,
124
+ cardKey: card.key,
125
+ className: shellClass(fullWidth, highlighted, 'p-4')
126
+ }, React.createElement("span", {
127
+ className: "flex h-10 w-10 items-center justify-center rounded-xl bg-blue-50 text-blue-600 dark:bg-blue-500/15 dark:text-blue-300"
128
+ }, React.createElement(FaCar, {
129
+ className: "h-4 w-4"
130
+ })), React.createElement("p", {
131
+ className: "mt-3 line-clamp-2 text-sm font-semibold leading-5 text-gray-900 dark:text-gray-50"
132
+ }, card.title), card.description ? React.createElement("p", {
133
+ className: "mt-1 line-clamp-3 text-xs leading-4 text-gray-500 dark:text-gray-400"
134
+ }, card.description) : null, React.createElement("p", {
135
+ className: "mt-auto inline-flex items-center gap-1 pt-3 text-xs font-semibold text-blue-600 dark:text-blue-400"
136
+ }, "Search ", card.sourceLabel ?? 'rentals', React.createElement(FiArrowUpRight, {
137
+ className: "h-3.5 w-3.5"
138
+ })));
139
+ }
140
+ return React.createElement(CardShell, {
141
+ url: card.url,
142
+ onOpen: onOpen,
143
+ label: card.accessibleLabel,
144
+ cardKey: card.key,
145
+ className: shellClass(fullWidth, highlighted)
146
+ }, React.createElement("div", {
147
+ className: "relative aspect-[16/9] w-full overflow-hidden bg-gray-100 dark:bg-gray-700"
148
+ }, React.createElement(SafeImage, {
149
+ src: card.imageUrl,
150
+ alt: card.title,
151
+ className: "h-full w-full transition-transform duration-300 group-hover/card:scale-[1.03]",
152
+ fallback: React.createElement(ImagePlaceholder, {
153
+ icon: React.createElement(FaCar, {
154
+ className: "h-8 w-8"
155
+ }),
156
+ className: "h-full w-full"
157
+ })
158
+ }), card.badges[0] ? React.createElement("span", {
159
+ className: "absolute left-2.5 top-2.5"
160
+ }, React.createElement(ResultBadgePill, {
161
+ badge: card.badges[0],
162
+ floating: true
163
+ })) : null), React.createElement("div", {
164
+ className: "flex flex-1 flex-col p-3.5"
165
+ }, React.createElement("p", {
166
+ className: "line-clamp-2 text-sm font-semibold leading-5 text-gray-900 dark:text-gray-50"
167
+ }, card.title), card.specs || card.description ? React.createElement("p", {
168
+ className: "mt-1 truncate text-xs text-gray-500 dark:text-gray-400"
169
+ }, card.specs ?? card.description) : null, React.createElement("div", {
170
+ className: "mt-1.5"
171
+ }, React.createElement(Rating, {
172
+ text: card.ratingText,
173
+ reviews: card.reviewsText
174
+ })), React.createElement("div", {
175
+ className: "mt-3 flex flex-1 flex-col"
176
+ }, React.createElement(PriceFooter, {
177
+ left: card.sourceLabel,
178
+ price: card.price,
179
+ unit: card.unit,
180
+ url: card.url
181
+ }))));
182
+ };
183
+ // ─── Trains and buses ────────────────────────────────────────────
184
+ const GroundCard = ({
185
+ card,
186
+ onOpen,
187
+ fullWidth,
188
+ highlighted
189
+ }) => {
190
+ const ModeIcon = card.mode === 'bus' ? FaBus : FaTrain;
191
+ if (card.isLink) {
192
+ return React.createElement(CardShell, {
193
+ url: card.url,
194
+ onOpen: onOpen,
195
+ label: card.accessibleLabel,
196
+ cardKey: card.key,
197
+ className: shellClass(fullWidth, highlighted, 'p-4')
198
+ }, React.createElement("span", {
199
+ className: "flex h-10 w-10 items-center justify-center rounded-xl bg-blue-50 text-blue-600 dark:bg-blue-500/15 dark:text-blue-300"
200
+ }, React.createElement(ModeIcon, {
201
+ className: "h-4 w-4"
202
+ })), React.createElement("p", {
203
+ className: "mt-3 line-clamp-2 text-sm font-semibold leading-5 text-gray-900 dark:text-gray-50"
204
+ }, card.title), card.description ? React.createElement("p", {
205
+ className: "mt-1 line-clamp-3 text-xs leading-4 text-gray-500 dark:text-gray-400"
206
+ }, card.description) : null, React.createElement("p", {
207
+ className: "mt-auto inline-flex items-center gap-1 pt-3 text-xs font-semibold text-blue-600 dark:text-blue-400"
208
+ }, "Compare on ", card.sourceLabel ?? 'the planner', React.createElement(FiArrowUpRight, {
209
+ className: "h-3.5 w-3.5"
210
+ })));
211
+ }
212
+ const subtitle = [card.travelClass, card.date].filter(Boolean).join(' · ') || (card.mode === 'bus' ? 'Bus' : 'Train');
213
+ return React.createElement(CardShell, {
214
+ url: card.url,
215
+ onOpen: onOpen,
216
+ label: card.accessibleLabel,
217
+ cardKey: card.key,
218
+ className: shellClass(fullWidth, highlighted, 'p-4')
219
+ }, React.createElement("div", {
220
+ className: "flex items-center gap-2.5"
221
+ }, React.createElement(Monogram, {
222
+ code: card.operatorCode,
223
+ tone: card.operatorTone,
224
+ name: card.operator ?? card.title
225
+ }), React.createElement("div", {
226
+ className: "min-w-0 flex-1"
227
+ }, React.createElement("p", {
228
+ className: "flex items-center gap-1.5 truncate text-sm font-semibold leading-5 text-gray-900 dark:text-gray-50"
229
+ }, React.createElement(ModeIcon, {
230
+ className: "h-3 w-3 shrink-0 text-gray-400"
231
+ }), React.createElement("span", {
232
+ className: "truncate"
233
+ }, card.operator ?? card.title)), React.createElement("p", {
234
+ className: "truncate text-xs leading-4 text-gray-500 dark:text-gray-400"
235
+ }, subtitle)), card.badges[0] ? React.createElement(ResultBadgePill, {
236
+ badge: card.badges[0]
237
+ }) : null), React.createElement("div", {
238
+ className: "my-4 grid grid-cols-[auto_1fr_auto] items-center gap-2"
239
+ }, React.createElement("div", {
240
+ className: "min-w-0 max-w-[6.5rem]"
241
+ }, React.createElement("p", {
242
+ className: "text-[22px] font-bold leading-none tracking-tight tabular-nums text-gray-900 dark:text-gray-50"
243
+ }, card.departTime ?? '--:--'), React.createElement("p", {
244
+ className: "mt-1.5 truncate text-xs font-medium text-gray-500 dark:text-gray-400",
245
+ title: card.origin
246
+ }, card.origin ?? ' ')), React.createElement(RouteLine, {
247
+ slice: {
248
+ origin: '',
249
+ destination: '',
250
+ duration: card.duration,
251
+ stops: card.stops,
252
+ stopCount: card.stopCount
253
+ }
254
+ }), React.createElement("div", {
255
+ className: "min-w-0 max-w-[6.5rem] text-right"
256
+ }, React.createElement("p", {
257
+ className: "text-[22px] font-bold leading-none tracking-tight tabular-nums text-gray-900 dark:text-gray-50"
258
+ }, card.arriveTime ?? '--:--', card.dayOffset ? React.createElement("sup", {
259
+ className: "ml-0.5 text-[11px] font-semibold text-amber-600 dark:text-amber-400"
260
+ }, card.dayOffset) : null), React.createElement("p", {
261
+ className: "mt-1.5 truncate text-xs font-medium text-gray-500 dark:text-gray-400",
262
+ title: card.destination
263
+ }, card.destination ?? ' '))), card.seatsLeft ? React.createElement("p", {
264
+ className: "-mt-2 mb-3 text-[11px] font-semibold text-amber-600 dark:text-amber-400"
265
+ }, card.seatsLeft) : null, React.createElement(PriceFooter, {
266
+ left: card.sourceLabel,
267
+ price: card.price,
268
+ url: card.url
269
+ }));
270
+ };
271
+ // ─── Products ────────────────────────────────────────────────────
272
+ const ProductCard = ({
273
+ card,
274
+ onOpen,
275
+ fullWidth,
276
+ highlighted
277
+ }) => React.createElement(CardShell, {
278
+ url: card.url,
279
+ onOpen: onOpen,
280
+ label: card.accessibleLabel,
281
+ cardKey: card.key,
282
+ className: shellClass(fullWidth, highlighted, fullWidth ? '' : '!w-[min(15rem,70%)]')
283
+ }, React.createElement("div", {
284
+ className: "relative aspect-square w-full overflow-hidden bg-white p-4 dark:bg-gray-100"
285
+ }, React.createElement(SafeImage, {
286
+ src: card.imageUrl,
287
+ alt: card.title,
288
+ fit: "contain",
289
+ className: "h-full w-full mix-blend-multiply transition-transform duration-300 group-hover/card:scale-105",
290
+ fallback: React.createElement(ImagePlaceholder, {
291
+ icon: React.createElement(FiShoppingBag, {
292
+ className: "h-8 w-8"
293
+ }),
294
+ className: "h-full w-full rounded-xl"
295
+ })
296
+ }), card.badges[0] ? React.createElement("span", {
297
+ className: "absolute left-2.5 top-2.5"
298
+ }, React.createElement(ResultBadgePill, {
299
+ badge: card.badges[0],
300
+ floating: true
301
+ })) : null), React.createElement("div", {
302
+ className: "flex flex-1 flex-col border-t border-gray-100 p-3.5 dark:border-gray-700"
303
+ }, React.createElement("p", {
304
+ className: "line-clamp-2 min-h-[2.5rem] text-sm font-medium leading-5 text-gray-900 dark:text-gray-50"
305
+ }, card.title), React.createElement("div", {
306
+ className: "mt-1.5 h-4"
307
+ }, React.createElement(Rating, {
308
+ text: card.ratingText,
309
+ reviews: card.reviewsText
310
+ })), React.createElement("div", {
311
+ className: "mt-3 flex items-baseline gap-2"
312
+ }, card.price ? React.createElement("span", {
313
+ className: "text-lg font-bold tabular-nums text-gray-900 dark:text-white"
314
+ }, card.price) : null, card.wasPrice ? React.createElement("span", {
315
+ className: "text-xs text-gray-400 line-through"
316
+ }, card.wasPrice.replace(/^Was /, '')) : null), card.note ? React.createElement("p", {
317
+ className: "mt-0.5 truncate text-[11px] font-medium text-emerald-600 dark:text-emerald-400"
318
+ }, card.note) : null, React.createElement("p", {
319
+ className: "mt-auto flex items-center justify-between gap-2 pt-2 text-xs text-gray-500 dark:text-gray-400"
320
+ }, React.createElement("span", {
321
+ className: "truncate"
322
+ }, card.sourceLabel ?? ' '), card.url ? React.createElement(FiExternalLink, {
323
+ className: "h-3.5 w-3.5 shrink-0 text-gray-400 group-hover/card:text-blue-500"
324
+ }) : null)));
325
+ // ─── Movies ──────────────────────────────────────────────────────
326
+ const MovieCard = ({
327
+ card,
328
+ onOpen,
329
+ fullWidth,
330
+ highlighted
331
+ }) =>
332
+ // The card itself is a group: each showtime is its own link.
333
+ React.createElement("div", {
334
+ role: "group",
335
+ "aria-label": card.accessibleLabel,
336
+ "data-result-card": "",
337
+ "data-result-key": card.key,
338
+ className: shellClass(fullWidth, highlighted, `${fullWidth ? '' : '!w-[min(22rem,88%)]'} !flex-row p-3`)
339
+ }, React.createElement(SafeImage, {
340
+ src: card.posterUrl,
341
+ alt: `${card.title} poster`,
342
+ className: "aspect-[2/3] w-20 shrink-0 self-start rounded-lg shadow-sm",
343
+ fallback: React.createElement(ImagePlaceholder, {
344
+ icon: React.createElement(FiFilm, {
345
+ className: "h-6 w-6"
346
+ }),
347
+ className: "aspect-[2/3] w-20 shrink-0 self-start rounded-lg"
348
+ })
349
+ }), React.createElement("div", {
350
+ className: "ml-3 flex min-w-0 flex-1 flex-col"
351
+ }, React.createElement("div", {
352
+ className: "flex items-start justify-between gap-2"
353
+ }, React.createElement("p", {
354
+ className: "line-clamp-2 text-sm font-semibold leading-5 text-gray-900 dark:text-gray-50"
355
+ }, card.title), card.ratingText ? React.createElement("span", {
356
+ className: "mt-0.5 inline-flex shrink-0 items-center gap-0.5 text-xs font-bold text-gray-900 dark:text-white"
357
+ }, React.createElement(FaStar, {
358
+ className: "h-3 w-3 text-amber-400"
359
+ }), card.ratingText) : null), card.meta ? React.createElement("p", {
360
+ className: "mt-0.5 truncate text-xs text-gray-500 dark:text-gray-400"
361
+ }, card.meta) : null, card.theater ? React.createElement("p", {
362
+ className: "mt-2 flex items-center gap-1 truncate text-xs font-medium text-gray-700 dark:text-gray-200"
363
+ }, React.createElement(FiMapPin, {
364
+ className: "h-3 w-3 shrink-0 text-gray-400"
365
+ }), React.createElement("span", {
366
+ className: "truncate"
367
+ }, card.theater), card.place ? React.createElement("span", {
368
+ className: "truncate font-normal text-gray-400"
369
+ }, "\u00B7 ", card.place) : null) : null, card.when || card.format ? React.createElement("p", {
370
+ className: "mt-1 flex items-center gap-1.5 text-[11px] text-gray-500 dark:text-gray-400"
371
+ }, React.createElement(FiClock, {
372
+ className: "h-3 w-3"
373
+ }), card.when, card.format ? React.createElement("span", {
374
+ className: "rounded bg-gray-900 px-1 py-px text-[10px] font-bold uppercase tracking-wide text-white dark:bg-white dark:text-gray-900"
375
+ }, card.format) : null) : null, card.times.length ? React.createElement("div", {
376
+ className: "mt-2 flex flex-wrap gap-1.5"
377
+ }, card.times.map(t => {
378
+ const href = t.url ?? card.url;
379
+ const chip = 'rounded-lg border border-gray-200 px-2 py-1 text-xs font-semibold tabular-nums text-gray-800 transition dark:border-gray-600 dark:text-gray-100';
380
+ return href && /^https?:\/\//i.test(href) ? React.createElement("a", {
381
+ key: t.time,
382
+ href: href,
383
+ target: "_blank",
384
+ rel: "noopener noreferrer",
385
+ className: `${chip} hover:border-blue-400 hover:bg-blue-50 hover:text-blue-700 dark:hover:bg-blue-500/10 dark:hover:text-blue-300`
386
+ }, t.time) : React.createElement("span", {
387
+ key: t.time,
388
+ className: chip
389
+ }, t.time);
390
+ }), card.moreTimes ? React.createElement("button", {
391
+ type: "button",
392
+ onClick: onOpen,
393
+ className: "rounded-lg px-1.5 py-1 text-xs font-medium text-blue-600 hover:underline dark:text-blue-400"
394
+ }, "+", card.moreTimes) : null) : null, card.price ? React.createElement("p", {
395
+ className: "mt-auto pt-2 text-right text-xs text-gray-500 dark:text-gray-400"
396
+ }, card.price) : null));
397
+ // ─── Jobs ────────────────────────────────────────────────────────
398
+ const Chip = ({
399
+ children,
400
+ tone = 'gray'
401
+ }) => React.createElement("span", {
402
+ className: `inline-flex items-center rounded-md px-1.5 py-0.5 text-[11px] font-medium ${tone === 'green' ? 'bg-emerald-50 text-emerald-700 dark:bg-emerald-500/10 dark:text-emerald-300' : tone === 'blue' ? 'bg-blue-50 text-blue-700 dark:bg-blue-500/10 dark:text-blue-300' : 'bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-200'}`
403
+ }, children);
404
+ const JobCard = ({
405
+ card,
406
+ onOpen,
407
+ fullWidth,
408
+ highlighted
409
+ }) => React.createElement(CardShell, {
410
+ url: card.url,
411
+ onOpen: onOpen,
412
+ label: card.accessibleLabel,
413
+ cardKey: card.key,
414
+ className: shellClass(fullWidth, highlighted, 'p-4')
415
+ }, React.createElement("div", {
416
+ className: "flex items-start gap-2.5"
417
+ }, React.createElement(Monogram, {
418
+ code: card.companyCode,
419
+ tone: card.companyTone,
420
+ logoUrl: card.logoUrl,
421
+ name: card.company ?? card.title
422
+ }), React.createElement("div", {
423
+ className: "min-w-0 flex-1"
424
+ }, React.createElement("p", {
425
+ className: "line-clamp-2 text-sm font-semibold leading-5 text-gray-900 dark:text-gray-50"
426
+ }, card.title), card.company ? React.createElement("p", {
427
+ className: "truncate text-xs leading-4 text-gray-500 dark:text-gray-400"
428
+ }, card.company) : null)), React.createElement("div", {
429
+ className: "mt-3 flex flex-wrap gap-1"
430
+ }, card.workplace ? React.createElement(Chip, {
431
+ tone: card.workplace === 'Remote' ? 'green' : 'gray'
432
+ }, card.workplace) : null, card.employmentType ? React.createElement(Chip, null, card.employmentType) : null, card.easyApply ? React.createElement(Chip, {
433
+ tone: "blue"
434
+ }, "Easy apply") : null), card.location ? React.createElement("p", {
435
+ className: "mt-2 flex items-center gap-1 truncate text-xs text-gray-500 dark:text-gray-400"
436
+ }, React.createElement(FiMapPin, {
437
+ className: "h-3 w-3 shrink-0"
438
+ }), React.createElement("span", {
439
+ className: "truncate"
440
+ }, card.location)) : null, card.salary ? React.createElement("p", {
441
+ className: "mt-1.5 truncate text-sm font-semibold tabular-nums text-gray-900 dark:text-white"
442
+ }, card.salary) : null, fullWidth && card.snippet ? React.createElement("p", {
443
+ className: "mt-2 line-clamp-3 text-xs leading-4 text-gray-500 dark:text-gray-400"
444
+ }, card.snippet) : null, React.createElement("div", {
445
+ className: "mt-auto flex items-center justify-between gap-3 border-t border-gray-100 pt-3 text-xs dark:border-gray-700"
446
+ }, React.createElement("span", {
447
+ className: "min-w-0 truncate text-gray-500 dark:text-gray-400"
448
+ }, [card.posted, card.sourceLabel].filter(Boolean).join(' · ') || ' '), card.url ? React.createElement("span", {
449
+ className: "inline-flex shrink-0 items-center gap-0.5 font-semibold text-blue-600 dark:text-blue-400"
450
+ }, "Apply", React.createElement(FiArrowUpRight, {
451
+ className: "h-3.5 w-3.5"
452
+ })) : null));
453
+ // ─── Resume ──────────────────────────────────────────────────────
454
+ const isHttp = u => !!u && /^https?:\/\//i.test(u);
455
+ const ResumeCard = ({
456
+ card,
457
+ onOpen
458
+ }) => {
459
+ const openProps = isHttp(card.openUrl) ? {
460
+ href: card.openUrl,
461
+ target: '_blank',
462
+ rel: 'noopener noreferrer'
463
+ } : undefined;
464
+ const primary = 'inline-flex items-center gap-1.5 rounded-lg bg-blue-600 px-3 py-1.5 text-xs font-semibold text-white shadow-sm transition hover:bg-blue-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2';
465
+ const secondary = 'inline-flex items-center gap-1.5 rounded-lg border border-gray-200 px-3 py-1.5 text-xs font-semibold text-gray-700 transition hover:bg-gray-50 dark:border-gray-600 dark:text-gray-200 dark:hover:bg-gray-700';
466
+ return React.createElement("div", {
467
+ role: "group",
468
+ "aria-label": card.accessibleLabel,
469
+ className: "mx-2 my-2 flex w-[calc(100%-1rem)] max-w-xl gap-4 rounded-2xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800"
470
+ }, React.createElement("div", {
471
+ "aria-hidden": "true",
472
+ className: "relative hidden aspect-[1/1.3] w-24 shrink-0 overflow-hidden rounded-md border border-gray-200 bg-white p-2 shadow-sm sm:block dark:border-gray-600"
473
+ }, card.imageUrl ?
474
+ // eslint-disable-next-line @next/next/no-img-element
475
+ React.createElement("img", {
476
+ src: card.imageUrl,
477
+ alt: "",
478
+ className: "absolute inset-0 h-full w-full object-cover object-top"
479
+ }) : React.createElement(React.Fragment, null, React.createElement("div", {
480
+ className: "h-1.5 w-3/4 rounded-full bg-gray-800"
481
+ }), React.createElement("div", {
482
+ className: "mt-1 h-1 w-1/2 rounded-full bg-blue-400"
483
+ }), React.createElement("div", {
484
+ className: "mt-2.5 space-y-1"
485
+ }, [100, 92, 96, 70].map((w, i) => React.createElement("div", {
486
+ key: i,
487
+ className: "h-[3px] rounded-full bg-gray-200",
488
+ style: {
489
+ width: `${w}%`
490
+ }
491
+ }))), React.createElement("div", {
492
+ className: "mt-2 h-1 w-1/3 rounded-full bg-gray-400"
493
+ }), React.createElement("div", {
494
+ className: "mt-1 space-y-1"
495
+ }, [95, 88, 60].map((w, i) => React.createElement("div", {
496
+ key: i,
497
+ className: "h-[3px] rounded-full bg-gray-200",
498
+ style: {
499
+ width: `${w}%`
500
+ }
501
+ }))))), React.createElement("div", {
502
+ className: "flex min-w-0 flex-1 flex-col"
503
+ }, React.createElement("div", {
504
+ className: "flex items-center gap-2"
505
+ }, React.createElement("span", {
506
+ className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-lg bg-blue-50 text-blue-600 dark:bg-blue-500/15 dark:text-blue-300"
507
+ }, React.createElement(FiFileText, {
508
+ className: "h-3.5 w-3.5"
509
+ })), React.createElement("p", {
510
+ className: "truncate text-sm font-semibold text-gray-900 dark:text-gray-50"
511
+ }, card.title)), card.headline || card.subtitle ? React.createElement("p", {
512
+ className: "mt-1.5 line-clamp-2 text-xs text-gray-500 dark:text-gray-400"
513
+ }, card.headline ?? card.subtitle) : null, card.tags.length || card.template ? React.createElement("div", {
514
+ className: "mt-2 flex flex-wrap gap-1"
515
+ }, card.tags.map(t => React.createElement(Chip, {
516
+ key: t
517
+ }, t)), card.template ? React.createElement(Chip, {
518
+ tone: "blue"
519
+ }, card.template, " template") : null) : null, React.createElement("div", {
520
+ className: "mt-auto flex flex-wrap gap-2 pt-3"
521
+ }, onOpen ? React.createElement("button", {
522
+ type: "button",
523
+ onClick: onOpen,
524
+ className: primary
525
+ }, card.actionLabel) : openProps ? React.createElement("a", {
526
+ ...openProps,
527
+ className: primary
528
+ }, card.actionLabel, React.createElement(FiArrowUpRight, {
529
+ className: "h-3.5 w-3.5"
530
+ })) : null, onOpen && openProps ? React.createElement("a", {
531
+ ...openProps,
532
+ className: secondary
533
+ }, "New tab", React.createElement(FiArrowUpRight, {
534
+ className: "h-3.5 w-3.5"
535
+ })) : null, isHttp(card.downloadUrl) ? React.createElement("a", {
536
+ href: card.downloadUrl,
537
+ target: "_blank",
538
+ rel: "noopener noreferrer",
539
+ className: secondary
540
+ }, React.createElement(FiDownload, {
541
+ className: "h-3.5 w-3.5"
542
+ }), "PDF") : null)));
543
+ };export{CarCard,GroundCard,JobCard,MovieCard,ProductCard,ResumeCard,StayCard};//# sourceMappingURL=ResultCards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResultCards.js","sources":["../../../src/components/MessageWidgets/ResultCards.tsx"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import React, { ReactNode } from 'react';
2
+ import type { ResultBadge, ResultPick } from '@admin-layout/client';
3
+ /**
4
+ * The frame every list-shaped chat widget shares (stays, cars, trains, buses,
5
+ * products, showtimes, jobs): the result set named once, quick picks that
6
+ * jump to their card, and a swipeable row with the next card peeking in.
7
+ * Flights draw the same frame in MessageFlights; this is its reusable twin.
8
+ */
9
+ export declare const BADGE_STYLE: Record<ResultBadge, {
10
+ pill: string;
11
+ text: string;
12
+ }>;
13
+ export declare const ResultBadgePill: ({ badge, floating }: {
14
+ badge: ResultBadge;
15
+ floating?: boolean;
16
+ }) => React.JSX.Element;
17
+ /** Card chrome shared by every result card; width comes from the row or the list. */
18
+ export declare const RESULT_CARD_CLASS: string;
19
+ export declare const resultCardBorder: (highlighted?: boolean) => string;
20
+ /** In-row width: about a card and a half on a phone, three on a wide chat. */
21
+ export declare const IN_ROW = "w-[min(18rem,82%)] shrink-0 snap-start";
22
+ /**
23
+ * A card as a link to its seller when it has one, a button that opens the
24
+ * rail when it does not, and plain content when neither applies.
25
+ */
26
+ export declare const CardShell: ({ url, onOpen, label, className, cardKey, children, }: {
27
+ url?: string;
28
+ onOpen?: () => void;
29
+ label: string;
30
+ className: string;
31
+ cardKey: string;
32
+ children: ReactNode;
33
+ }) => React.JSX.Element;
34
+ /** An image that steps aside for a fallback when it fails to load. */
35
+ export declare const SafeImage: ({ src, alt, className, fallback, fit, }: {
36
+ src?: string;
37
+ alt: string;
38
+ className: string;
39
+ fallback: ReactNode;
40
+ fit?: "cover" | "contain";
41
+ }) => React.JSX.Element;
42
+ export interface IResultRowProps {
43
+ icon: ReactNode;
44
+ title: string;
45
+ subtitle?: string;
46
+ picks?: ResultPick[];
47
+ /** How many results exist, for the "View all" button. */
48
+ count: number;
49
+ /** Opens the full list (the side rail). */
50
+ onViewAll?: () => void;
51
+ viewAllLabel?: string;
52
+ ariaLabel: string;
53
+ /** The cards; each must render through {@link CardShell} so quick picks can find it. */
54
+ children: (highlighted: string | null) => ReactNode;
55
+ }
56
+ export declare const ResultRow: ({ icon, title, subtitle, picks, count, onViewAll, viewAllLabel, ariaLabel, children, }: IResultRowProps) => React.JSX.Element;
57
+ //# sourceMappingURL=ResultRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResultRow.d.ts","sourceRoot":"","sources":["../../../src/components/MessageWidgets/ResultRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAA4C,MAAM,OAAO,CAAC;AAGnF,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;;;;GAKG;AAEH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAa3E,CAAC;AAIF,eAAO,MAAM,eAAe,GAAI,qBAA6B;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,sBAQtG,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,QAIyF,CAAC;AAExH,eAAO,MAAM,gBAAgB,GAAI,cAAc,OAAO,KAAG,MAGT,CAAC;AAEjD,8EAA8E;AAC9E,eAAO,MAAM,MAAM,2CAA2C,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,uDAOvB;IACC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACvB,sBAqBA,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,SAAS,GAAI,yCAMvB;IACC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B,sBAaA,CAAC;AAEF,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC;CACvD;AAID,eAAO,MAAM,SAAS,GAAI,wFAUvB,eAAe,sBAkIjB,CAAC"}