@voyant-travel/charters-react 0.117.2

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 (85) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +40 -0
  3. package/dist/client.d.ts +14 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +59 -0
  6. package/dist/components/apa-tracker.d.ts +18 -0
  7. package/dist/components/apa-tracker.d.ts.map +1 -0
  8. package/dist/components/apa-tracker.js +69 -0
  9. package/dist/components/charter-catalog-card.d.ts +13 -0
  10. package/dist/components/charter-catalog-card.d.ts.map +1 -0
  11. package/dist/components/charter-catalog-card.js +58 -0
  12. package/dist/components/external-badge.d.ts +13 -0
  13. package/dist/components/external-badge.d.ts.map +1 -0
  14. package/dist/components/external-badge.js +16 -0
  15. package/dist/components/voyage-suite-grid.d.ts +26 -0
  16. package/dist/components/voyage-suite-grid.d.ts.map +1 -0
  17. package/dist/components/voyage-suite-grid.js +77 -0
  18. package/dist/components/whole-yacht-quote-card.d.ts +21 -0
  19. package/dist/components/whole-yacht-quote-card.d.ts.map +1 -0
  20. package/dist/components/whole-yacht-quote-card.js +46 -0
  21. package/dist/hooks/index.d.ts +10 -0
  22. package/dist/hooks/index.d.ts.map +1 -0
  23. package/dist/hooks/index.js +9 -0
  24. package/dist/hooks/use-apa.d.ts +130 -0
  25. package/dist/hooks/use-apa.d.ts.map +1 -0
  26. package/dist/hooks/use-apa.js +60 -0
  27. package/dist/hooks/use-charter-booking.d.ts +175 -0
  28. package/dist/hooks/use-charter-booking.d.ts.map +1 -0
  29. package/dist/hooks/use-charter-booking.js +39 -0
  30. package/dist/hooks/use-charter-product-mutation.d.ts +124 -0
  31. package/dist/hooks/use-charter-product-mutation.d.ts.map +1 -0
  32. package/dist/hooks/use-charter-product-mutation.js +55 -0
  33. package/dist/hooks/use-charter-products.d.ts +150 -0
  34. package/dist/hooks/use-charter-products.d.ts.map +1 -0
  35. package/dist/hooks/use-charter-products.js +29 -0
  36. package/dist/hooks/use-charter-public.d.ts +232 -0
  37. package/dist/hooks/use-charter-public.d.ts.map +1 -0
  38. package/dist/hooks/use-charter-public.js +41 -0
  39. package/dist/hooks/use-charter-quote.d.ts +42 -0
  40. package/dist/hooks/use-charter-quote.d.ts.map +1 -0
  41. package/dist/hooks/use-charter-quote.js +30 -0
  42. package/dist/hooks/use-charter-voyages.d.ts +111 -0
  43. package/dist/hooks/use-charter-voyages.d.ts.map +1 -0
  44. package/dist/hooks/use-charter-voyages.js +19 -0
  45. package/dist/hooks/use-charter-yachts.d.ts +72 -0
  46. package/dist/hooks/use-charter-yachts.d.ts.map +1 -0
  47. package/dist/hooks/use-charter-yachts.js +19 -0
  48. package/dist/hooks/use-myba-contract.d.ts +28 -0
  49. package/dist/hooks/use-myba-contract.d.ts.map +1 -0
  50. package/dist/hooks/use-myba-contract.js +31 -0
  51. package/dist/i18n/en.d.ts +3 -0
  52. package/dist/i18n/en.d.ts.map +1 -0
  53. package/dist/i18n/en.js +78 -0
  54. package/dist/i18n/index.d.ts +5 -0
  55. package/dist/i18n/index.d.ts.map +1 -0
  56. package/dist/i18n/index.js +3 -0
  57. package/dist/i18n/messages.d.ts +70 -0
  58. package/dist/i18n/messages.d.ts.map +1 -0
  59. package/dist/i18n/messages.js +1 -0
  60. package/dist/i18n/provider.d.ts +26 -0
  61. package/dist/i18n/provider.d.ts.map +1 -0
  62. package/dist/i18n/provider.js +44 -0
  63. package/dist/i18n/ro.d.ts +3 -0
  64. package/dist/i18n/ro.d.ts.map +1 -0
  65. package/dist/i18n/ro.js +78 -0
  66. package/dist/index.d.ts +7 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +6 -0
  69. package/dist/provider.d.ts +2 -0
  70. package/dist/provider.d.ts.map +1 -0
  71. package/dist/provider.js +1 -0
  72. package/dist/query-keys.d.ts +61 -0
  73. package/dist/query-keys.d.ts.map +1 -0
  74. package/dist/query-keys.js +31 -0
  75. package/dist/query-options.d.ts +2108 -0
  76. package/dist/query-options.d.ts.map +1 -0
  77. package/dist/query-options.js +110 -0
  78. package/dist/schemas.d.ts +1066 -0
  79. package/dist/schemas.d.ts.map +1 -0
  80. package/dist/schemas.js +323 -0
  81. package/dist/ui.d.ts +6 -0
  82. package/dist/ui.d.ts.map +1 -0
  83. package/dist/ui.js +5 -0
  84. package/package.json +121 -0
  85. package/src/styles.css +11 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC;;;;;iBAM7D,CAAA;AAEJ,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC;;iBAA6B,CAAA;AAE3F,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC;;iBAAsC,CAAA;AAIlG,eAAO,MAAM,mBAAmB;;;;;EAA2D,CAAA;AAC3F,eAAO,MAAM,mBAAmB;;;EAAgC,CAAA;AAChE,eAAO,MAAM,wBAAwB;;;EAAuC,CAAA;AAC5E,eAAO,MAAM,gBAAgB;;;;;EAK3B,CAAA;AACF,eAAO,MAAM,uBAAuB;;;;;;EAMlC,CAAA;AACF,eAAO,MAAM,mBAAmB;;;;;;;EAO9B,CAAA;AACF,eAAO,MAAM,uBAAuB;;;;;;EAMlC,CAAA;AACF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,aAE8C,CAAA;AAS7E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuBrC,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBpC,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BnC,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsBnC,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;iBAczC,CAAA;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAIrF,eAAO,MAAM,mBAAmB;;;;;;;;;iBAS9B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,eAAO,MAAM,qBAAqB;;;;;;;;iBAQhC,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAInE,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgC3C,CAAA;AAEF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAA;AAIzF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAerC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQnC,CAAA;AAOF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAehC,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAe/B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU9B,CAAA;AAIF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAgD,CAAA;AAChF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA6C,CAAA;AAC/E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA+C,CAAA;AAC9E,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA4C,CAAA;AAC7E,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA8C,CAAA;AAC5E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA2C,CAAA;AAC3E,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAoD,CAAA;AAClF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;iBAA0D,CAAA;AAC3F,eAAO,MAAM,qBAAqB;;;;;;;;;;;iBAAsC,CAAA;AACxE,eAAO,MAAM,uBAAuB;;;;;;;;;;iBAAwC,CAAA;AAI5E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBASjC,CAAA;AAED,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAKxC,CAAA;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAmD,CAAA"}
@@ -0,0 +1,323 @@
1
+ import { z } from "zod";
2
+ // ---------- envelope helpers ----------
3
+ export const paginatedEnvelope = (item) => z.object({
4
+ data: z.array(item),
5
+ total: z.number().int(),
6
+ limit: z.number().int(),
7
+ offset: z.number().int(),
8
+ });
9
+ export const singleEnvelope = (item) => z.object({ data: item });
10
+ export const listEnvelope = (item) => z.object({ data: z.array(item) });
11
+ // ---------- canonical enum schemas (mirror server) ----------
12
+ export const charterStatusSchema = z.enum(["draft", "awaiting_review", "live", "archived"]);
13
+ export const charterSourceSchema = z.enum(["local", "external"]);
14
+ export const charterBookingModeSchema = z.enum(["per_suite", "whole_yacht"]);
15
+ export const yachtClassSchema = z.enum([
16
+ "luxury_motor",
17
+ "luxury_sailing",
18
+ "expedition",
19
+ "small_cruise",
20
+ ]);
21
+ export const voyageSalesStatusSchema = z.enum([
22
+ "open",
23
+ "on_request",
24
+ "wait_list",
25
+ "sold_out",
26
+ "closed",
27
+ ]);
28
+ export const suiteCategorySchema = z.enum([
29
+ "standard",
30
+ "deluxe",
31
+ "suite",
32
+ "penthouse",
33
+ "owners",
34
+ "signature",
35
+ ]);
36
+ export const suiteAvailabilitySchema = z.enum([
37
+ "available",
38
+ "limited",
39
+ "on_request",
40
+ "wait_list",
41
+ "sold_out",
42
+ ]);
43
+ /**
44
+ * ISO-4217 currency code (three uppercase letters). Charter pricing stores
45
+ * per-currency amounts in `pricesByCurrency: Record<code, amount>` maps,
46
+ * so adding a new currency is a content change — no client-schema bump.
47
+ */
48
+ export const currencyCodeSchema = z
49
+ .string()
50
+ .regex(/^[A-Z]{3}$/, "Expected ISO-4217 currency code (e.g. 'USD', 'RON')");
51
+ const pricesByCurrencySchema = z.record(currencyCodeSchema, z.string());
52
+ const isoDateString = z.string();
53
+ const timestampString = z.string();
54
+ // ---------- record schemas ----------
55
+ export const charterProductRecordSchema = z.object({
56
+ id: z.string(),
57
+ slug: z.string(),
58
+ name: z.string(),
59
+ lineSupplierId: z.string().nullable(),
60
+ defaultYachtId: z.string().nullable(),
61
+ description: z.string().nullable(),
62
+ shortDescription: z.string().nullable(),
63
+ heroImageUrl: z.string().nullable(),
64
+ mapImageUrl: z.string().nullable(),
65
+ regions: z.array(z.string()).nullable(),
66
+ themes: z.array(z.string()).nullable(),
67
+ status: charterStatusSchema,
68
+ defaultBookingModes: z.array(charterBookingModeSchema).nullable(),
69
+ defaultMybaTemplateId: z.string().nullable(),
70
+ defaultApaPercent: z.string().nullable(),
71
+ lowestPriceCachedAmount: z.string().nullable(),
72
+ lowestPriceCachedCurrency: z.string().nullable(),
73
+ earliestVoyageCached: isoDateString.nullable(),
74
+ latestVoyageCached: isoDateString.nullable(),
75
+ externalRefs: z.record(z.string(), z.string()).nullable(),
76
+ createdAt: timestampString,
77
+ updatedAt: timestampString,
78
+ });
79
+ export const charterVoyageRecordSchema = z.object({
80
+ id: z.string(),
81
+ productId: z.string(),
82
+ yachtId: z.string(),
83
+ voyageCode: z.string(),
84
+ name: z.string().nullable(),
85
+ embarkPortFacilityId: z.string().nullable(),
86
+ embarkPortName: z.string().nullable(),
87
+ disembarkPortFacilityId: z.string().nullable(),
88
+ disembarkPortName: z.string().nullable(),
89
+ departureDate: isoDateString,
90
+ returnDate: isoDateString,
91
+ nights: z.number().int(),
92
+ bookingModes: z.array(charterBookingModeSchema),
93
+ appointmentOnly: z.boolean(),
94
+ wholeYachtPricesByCurrency: pricesByCurrencySchema,
95
+ apaPercentOverride: z.string().nullable(),
96
+ mybaTemplateIdOverride: z.string().nullable(),
97
+ charterAreaOverride: z.string().nullable(),
98
+ salesStatus: voyageSalesStatusSchema,
99
+ availabilityNote: z.string().nullable(),
100
+ externalRefs: z.record(z.string(), z.string()).nullable(),
101
+ lastSyncedAt: timestampString.nullable(),
102
+ createdAt: timestampString,
103
+ updatedAt: timestampString,
104
+ });
105
+ export const charterYachtRecordSchema = z.object({
106
+ id: z.string(),
107
+ lineSupplierId: z.string().nullable(),
108
+ name: z.string(),
109
+ slug: z.string(),
110
+ yachtClass: yachtClassSchema,
111
+ capacityGuests: z.number().int().nullable(),
112
+ capacityCrew: z.number().int().nullable(),
113
+ lengthMeters: z.string().nullable(),
114
+ yearBuilt: z.number().int().nullable(),
115
+ yearRefurbished: z.number().int().nullable(),
116
+ imo: z.string().nullable(),
117
+ description: z.string().nullable(),
118
+ gallery: z.array(z.string()).nullable(),
119
+ amenities: z.record(z.string(), z.unknown()).nullable(),
120
+ crewBios: z
121
+ .array(z.object({
122
+ role: z.string(),
123
+ name: z.string(),
124
+ bio: z.string().optional(),
125
+ photoUrl: z.string().optional(),
126
+ }))
127
+ .nullable(),
128
+ defaultCharterAreas: z.array(z.string()).nullable(),
129
+ externalRefs: z.record(z.string(), z.string()).nullable(),
130
+ isActive: z.boolean(),
131
+ createdAt: timestampString,
132
+ updatedAt: timestampString,
133
+ });
134
+ export const charterSuiteRecordSchema = z.object({
135
+ id: z.string(),
136
+ voyageId: z.string(),
137
+ suiteCode: z.string(),
138
+ suiteName: z.string(),
139
+ suiteCategory: suiteCategorySchema.nullable(),
140
+ description: z.string().nullable(),
141
+ squareFeet: z.string().nullable(),
142
+ images: z.array(z.string()).nullable(),
143
+ floorplanImages: z.array(z.string()).nullable(),
144
+ maxGuests: z.number().int().nullable(),
145
+ pricesByCurrency: pricesByCurrencySchema,
146
+ portFeesByCurrency: pricesByCurrencySchema,
147
+ availability: suiteAvailabilitySchema,
148
+ unitsAvailable: z.number().int().nullable(),
149
+ appointmentOnly: z.boolean(),
150
+ notes: z.string().nullable(),
151
+ extra: z.record(z.string(), z.unknown()).nullable(),
152
+ externalRefs: z.record(z.string(), z.string()).nullable(),
153
+ lastSyncedAt: timestampString.nullable(),
154
+ createdAt: timestampString,
155
+ updatedAt: timestampString,
156
+ });
157
+ export const charterScheduleDayRecordSchema = z.object({
158
+ id: z.string(),
159
+ voyageId: z.string(),
160
+ dayNumber: z.number().int(),
161
+ portFacilityId: z.string().nullable(),
162
+ portName: z.string().nullable(),
163
+ scheduleDate: isoDateString.nullable(),
164
+ arrivalTime: z.string().nullable(),
165
+ departureTime: z.string().nullable(),
166
+ isSeaDay: z.boolean(),
167
+ description: z.string().nullable(),
168
+ activities: z.array(z.string()).nullable(),
169
+ createdAt: timestampString,
170
+ updatedAt: timestampString,
171
+ });
172
+ // ---------- quotes (composed by the server) ----------
173
+ export const perSuiteQuoteSchema = z.object({
174
+ mode: z.literal("per_suite"),
175
+ voyageId: z.string(),
176
+ suiteId: z.string(),
177
+ suiteName: z.string(),
178
+ currency: currencyCodeSchema,
179
+ suitePrice: z.string(),
180
+ portFee: z.string().nullable(),
181
+ total: z.string(),
182
+ });
183
+ export const wholeYachtQuoteSchema = z.object({
184
+ mode: z.literal("whole_yacht"),
185
+ voyageId: z.string(),
186
+ currency: currencyCodeSchema,
187
+ charterFee: z.string(),
188
+ apaPercent: z.string(),
189
+ apaAmount: z.string(),
190
+ total: z.string(),
191
+ });
192
+ // ---------- booking_charter_details (1:1 extension on bookings) ----------
193
+ export const bookingCharterDetailRecordSchema = z.object({
194
+ bookingId: z.string(),
195
+ bookingMode: charterBookingModeSchema,
196
+ source: charterSourceSchema,
197
+ sourceProvider: z.string().nullable(),
198
+ sourceRef: z.record(z.string(), z.unknown()).nullable(),
199
+ voyageId: z.string().nullable(),
200
+ suiteId: z.string().nullable(),
201
+ yachtId: z.string().nullable(),
202
+ voyageDisplayName: z.string().nullable(),
203
+ suiteDisplayName: z.string().nullable(),
204
+ yachtName: z.string().nullable(),
205
+ charterAreaSnapshot: z.string().nullable(),
206
+ guestCount: z.number().int(),
207
+ quotedCurrency: z.string(),
208
+ quotedSuitePrice: z.string().nullable(),
209
+ quotedPortFee: z.string().nullable(),
210
+ quotedCharterFee: z.string().nullable(),
211
+ apaPercent: z.string().nullable(),
212
+ apaAmount: z.string().nullable(),
213
+ quotedTotal: z.string(),
214
+ mybaTemplateIdSnapshot: z.string().nullable(),
215
+ mybaContractId: z.string().nullable(),
216
+ apaPaidAmount: z.string().nullable(),
217
+ apaSpentAmount: z.string().nullable(),
218
+ apaRefundAmount: z.string().nullable(),
219
+ apaSettledAt: timestampString.nullable(),
220
+ connectorBookingRef: z.string().nullable(),
221
+ connectorStatus: z.string().nullable(),
222
+ notes: z.string().nullable(),
223
+ createdAt: timestampString,
224
+ updatedAt: timestampString,
225
+ });
226
+ // ---------- unified-key admin envelopes (list response with adapter fan-out) ----------
227
+ export const adminProductListItemSchema = z.union([
228
+ z.object({
229
+ source: z.literal("local"),
230
+ sourceProvider: z.null(),
231
+ sourceRef: z.null(),
232
+ key: z.string(),
233
+ product: charterProductRecordSchema,
234
+ }),
235
+ z.object({
236
+ source: z.literal("external"),
237
+ sourceProvider: z.string(),
238
+ sourceRef: z.record(z.string(), z.unknown()),
239
+ key: z.string(),
240
+ product: z.unknown(),
241
+ }),
242
+ ]);
243
+ export const adminProductListResponse = z.object({
244
+ data: z.array(adminProductListItemSchema),
245
+ total: z.number().int(),
246
+ localTotal: z.number().int(),
247
+ adapterCount: z.number().int(),
248
+ adapterErrors: z.array(z.object({ adapter: z.string(), error: z.string() })).optional(),
249
+ limit: z.number().int(),
250
+ offset: z.number().int(),
251
+ });
252
+ // ---------- detail envelopes ----------
253
+ // Detail responses come back EITHER as the bare local record (when the unified
254
+ // key parsed as local) OR as `{ source, sourceProvider, sourceRef, product, ...includes }`
255
+ // (external). Hooks union both shapes.
256
+ export const productDetailResponse = z.object({
257
+ data: z.union([
258
+ charterProductRecordSchema.extend({
259
+ voyages: z.array(charterVoyageRecordSchema).optional(),
260
+ yacht: charterYachtRecordSchema.nullable().optional(),
261
+ }),
262
+ z.object({
263
+ source: z.literal("external"),
264
+ sourceProvider: z.string(),
265
+ sourceRef: z.record(z.string(), z.unknown()),
266
+ product: z.record(z.string(), z.unknown()),
267
+ voyages: z.array(z.unknown()).optional(),
268
+ yacht: z.unknown().optional(),
269
+ }),
270
+ ]),
271
+ });
272
+ export const voyageDetailResponse = z.object({
273
+ data: z.union([
274
+ charterVoyageRecordSchema.extend({
275
+ suites: z.array(charterSuiteRecordSchema).optional(),
276
+ schedule: z.array(charterScheduleDayRecordSchema).optional(),
277
+ }),
278
+ z.object({
279
+ source: z.literal("external"),
280
+ sourceProvider: z.string(),
281
+ sourceRef: z.record(z.string(), z.unknown()),
282
+ voyage: z.record(z.string(), z.unknown()),
283
+ suites: z.array(z.unknown()).optional(),
284
+ schedule: z.array(z.unknown()).optional(),
285
+ }),
286
+ ]),
287
+ });
288
+ export const yachtDetailResponse = z.object({
289
+ data: z.union([
290
+ charterYachtRecordSchema,
291
+ z.object({
292
+ source: z.literal("external"),
293
+ sourceProvider: z.string(),
294
+ sourceRef: z.record(z.string(), z.unknown()),
295
+ yacht: z.record(z.string(), z.unknown()),
296
+ }),
297
+ ]),
298
+ });
299
+ // ---------- response wrappers (admin) ----------
300
+ export const productListResponse = paginatedEnvelope(charterProductRecordSchema);
301
+ export const productSingleResponse = singleEnvelope(charterProductRecordSchema);
302
+ export const voyageListResponse = paginatedEnvelope(charterVoyageRecordSchema);
303
+ export const voyageSingleResponse = singleEnvelope(charterVoyageRecordSchema);
304
+ export const yachtListResponse = paginatedEnvelope(charterYachtRecordSchema);
305
+ export const yachtSingleResponse = singleEnvelope(charterYachtRecordSchema);
306
+ export const suiteListResponse = singleEnvelope(z.array(charterSuiteRecordSchema));
307
+ export const scheduleListResponse = singleEnvelope(z.array(charterScheduleDayRecordSchema));
308
+ export const perSuiteQuoteResponse = singleEnvelope(perSuiteQuoteSchema);
309
+ export const wholeYachtQuoteResponse = singleEnvelope(wholeYachtQuoteSchema);
310
+ // ---------- booking + MYBA + APA envelopes ----------
311
+ export const createBookingResponse = singleEnvelope(z.object({
312
+ bookingId: z.string(),
313
+ bookingNumber: z.string(),
314
+ charterDetails: bookingCharterDetailRecordSchema,
315
+ quote: z.union([perSuiteQuoteSchema, wholeYachtQuoteSchema]),
316
+ sourceProvider: z.string().optional(),
317
+ sourceRef: z.record(z.string(), z.unknown()).optional(),
318
+ }));
319
+ export const generateMybaContractResponse = singleEnvelope(z.object({
320
+ contractId: z.string(),
321
+ charterDetails: bookingCharterDetailRecordSchema,
322
+ }));
323
+ export const charterDetailResponse = singleEnvelope(bookingCharterDetailRecordSchema);
package/dist/ui.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export { ApaTracker, type ApaTrackerProps } from "./components/apa-tracker.js";
2
+ export { ExternalCharterBadge, type ExternalCharterBadgeProps, } from "./components/external-badge.js";
3
+ export { VoyageSuiteGrid, type VoyageSuiteGridProps } from "./components/voyage-suite-grid.js";
4
+ export { PerSuiteQuoteCard, type PerSuiteQuoteCardProps, WholeYachtQuoteCard, type WholeYachtQuoteCardProps, } from "./components/whole-yacht-quote-card.js";
5
+ export { type CharterBookingMode, type CharterSuiteAvailability, type CharterSuiteCategory, type ChartersUiMessageOverrides, type ChartersUiMessages, ChartersUiMessagesProvider, chartersUiEn, chartersUiMessageDefinitions, chartersUiRo, getChartersUiI18n, resolveChartersUiMessages, useChartersUiI18n, useChartersUiI18nOrDefault, useChartersUiMessages, useChartersUiMessagesOrDefault, } from "./i18n/index.js";
6
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAC9F,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,0BAA0B,EAC1B,YAAY,EACZ,4BAA4B,EAC5B,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,iBAAiB,CAAA"}
package/dist/ui.js ADDED
@@ -0,0 +1,5 @@
1
+ export { ApaTracker } from "./components/apa-tracker.js";
2
+ export { ExternalCharterBadge, } from "./components/external-badge.js";
3
+ export { VoyageSuiteGrid } from "./components/voyage-suite-grid.js";
4
+ export { PerSuiteQuoteCard, WholeYachtQuoteCard, } from "./components/whole-yacht-quote-card.js";
5
+ export { ChartersUiMessagesProvider, chartersUiEn, chartersUiMessageDefinitions, chartersUiRo, getChartersUiI18n, resolveChartersUiMessages, useChartersUiI18n, useChartersUiI18nOrDefault, useChartersUiMessages, useChartersUiMessagesOrDefault, } from "./i18n/index.js";
package/package.json ADDED
@@ -0,0 +1,121 @@
1
+ {
2
+ "name": "@voyant-travel/charters-react",
3
+ "version": "0.117.2",
4
+ "license": "Apache-2.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/voyant-travel/voyant.git",
8
+ "directory": "packages/charters-react"
9
+ },
10
+ "type": "module",
11
+ "sideEffects": false,
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js",
16
+ "default": "./dist/index.js"
17
+ },
18
+ "./provider": {
19
+ "types": "./dist/provider.d.ts",
20
+ "import": "./dist/provider.js",
21
+ "default": "./dist/provider.js"
22
+ },
23
+ "./hooks": {
24
+ "types": "./dist/hooks/index.d.ts",
25
+ "import": "./dist/hooks/index.js",
26
+ "default": "./dist/hooks/index.js"
27
+ },
28
+ "./client": {
29
+ "types": "./dist/client.d.ts",
30
+ "import": "./dist/client.js",
31
+ "default": "./dist/client.js"
32
+ },
33
+ "./query-keys": {
34
+ "types": "./dist/query-keys.d.ts",
35
+ "import": "./dist/query-keys.js",
36
+ "default": "./dist/query-keys.js"
37
+ },
38
+ "./ui": {
39
+ "types": "./dist/ui.d.ts",
40
+ "import": "./dist/ui.js",
41
+ "default": "./dist/ui.js"
42
+ },
43
+ "./styles.css": {
44
+ "default": "./src/styles.css"
45
+ },
46
+ "./i18n": {
47
+ "types": "./dist/i18n/index.d.ts",
48
+ "import": "./dist/i18n/index.js",
49
+ "default": "./dist/i18n/index.js"
50
+ },
51
+ "./i18n/en": {
52
+ "types": "./dist/i18n/en.d.ts",
53
+ "import": "./dist/i18n/en.js",
54
+ "default": "./dist/i18n/en.js"
55
+ },
56
+ "./i18n/ro": {
57
+ "types": "./dist/i18n/ro.d.ts",
58
+ "import": "./dist/i18n/ro.js",
59
+ "default": "./dist/i18n/ro.js"
60
+ },
61
+ "./components/*": {
62
+ "types": "./dist/components/*.d.ts",
63
+ "import": "./dist/components/*.js",
64
+ "default": "./dist/components/*.js"
65
+ }
66
+ },
67
+ "peerDependencies": {
68
+ "@tanstack/react-query": "^5.0.0",
69
+ "react": "^19.0.0",
70
+ "react-dom": "^19.0.0",
71
+ "zod": "^4.0.0",
72
+ "@voyant-travel/catalog-react": "^0.117.2",
73
+ "@voyant-travel/charters": "^0.117.2",
74
+ "@voyant-travel/ui": "^0.106.1"
75
+ },
76
+ "peerDependenciesMeta": {
77
+ "@voyant-travel/catalog-react": {
78
+ "optional": true
79
+ },
80
+ "@voyant-travel/ui": {
81
+ "optional": true
82
+ }
83
+ },
84
+ "dependencies": {
85
+ "@voyant-travel/i18n": "^0.106.1",
86
+ "@voyant-travel/react": "^0.104.1"
87
+ },
88
+ "devDependencies": {
89
+ "@tanstack/react-query": "^5.100.11",
90
+ "@types/react": "^19.2.14",
91
+ "@types/react-dom": "^19.2.3",
92
+ "lucide-react": "^0.475.0",
93
+ "react": "^19.2.4",
94
+ "react-dom": "^19.2.4",
95
+ "typescript": "^6.0.2",
96
+ "vitest": "^4.1.2",
97
+ "zod": "^4.3.6",
98
+ "@voyant-travel/i18n": "^0.106.1",
99
+ "@voyant-travel/catalog-react": "^0.117.2",
100
+ "@voyant-travel/react": "^0.104.1",
101
+ "@voyant-travel/ui": "^0.106.1",
102
+ "@voyant-travel/voyant-typescript-config": "^0.1.0",
103
+ "@voyant-travel/charters": "^0.117.2"
104
+ },
105
+ "files": [
106
+ "dist",
107
+ "src/styles.css"
108
+ ],
109
+ "publishConfig": {
110
+ "access": "public"
111
+ },
112
+ "scripts": {
113
+ "build": "tsc -p tsconfig.build.json",
114
+ "clean": "rm -rf dist tsconfig.tsbuildinfo tsconfig.build.tsbuildinfo",
115
+ "typecheck": "tsc --noEmit",
116
+ "lint": "biome check src/",
117
+ "test": "vitest run --passWithNoTests"
118
+ },
119
+ "main": "./dist/index.js",
120
+ "types": "./dist/index.d.ts"
121
+ }
package/src/styles.css ADDED
@@ -0,0 +1,11 @@
1
+ /* Tailwind v4 source-detection helper.
2
+ *
3
+ * Templates that consume this package should `@import` this CSS so Tailwind
4
+ * scans these component files for utility classes:
5
+ *
6
+ * @import "@voyant-travel/<domain>-ui/styles.css";
7
+ *
8
+ * Without it, classes that only appear inside this package (e.g. data-attr
9
+ * variants on primitives) won't be compiled into the final bundle.
10
+ */
11
+ @source "./components/**/*.{ts,tsx}";