@forgebuild/hotal-ui 0.23.152 → 0.23.201

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 (47) hide show
  1. package/dist/components/ai-chat-widget.js +75 -0
  2. package/dist/components/availability-calendar.js +7 -0
  3. package/dist/components/booking-card.js +30 -0
  4. package/dist/components/booking-checkout.js +40 -0
  5. package/dist/components/booking-confirmed.js +1 -0
  6. package/dist/components/booking-flow.js +26 -0
  7. package/dist/components/booking-progress-bar.js +1 -0
  8. package/dist/components/booking-summary.js +14 -0
  9. package/dist/components/chunks/ably-5cVT4knS.js +9 -0
  10. package/dist/components/chunks/calendar-B8eNjUm2.js +1 -0
  11. package/dist/components/chunks/client-BDk8LqGN.js +3 -0
  12. package/dist/components/chunks/floating-ui.dom-DY3dGoEq.js +1 -0
  13. package/dist/components/chunks/gsap-DWxn8li7.js +1 -0
  14. package/dist/components/chunks/lib-Bd4dedte.js +1 -0
  15. package/dist/components/chunks/min-DdO-yBwh.js +17 -0
  16. package/dist/components/chunks/preload-helper-Czpn1I53.js +1 -0
  17. package/dist/components/chunks/rolldown-runtime-CbXtAM7H.js +1 -0
  18. package/dist/components/confirmation-card.js +3 -0
  19. package/dist/components/dining-teaser.js +19 -0
  20. package/dist/components/event-contact-form.js +33 -0
  21. package/dist/components/event-inquiries-feed.js +29 -0
  22. package/dist/components/extras-catalogue.js +25 -0
  23. package/dist/components/floor-plan-hero.js +2 -0
  24. package/dist/components/google-reviews.js +31 -0
  25. package/dist/components/instagram-feed.js +16 -0
  26. package/dist/components/island-map.js +1 -0
  27. package/dist/components/live-dining-orders-feed.js +37 -0
  28. package/dist/components/live-golf-bookings-feed.js +18 -0
  29. package/dist/components/live-reservations-feed.js +18 -0
  30. package/dist/components/live-room-bookings-feed.js +18 -0
  31. package/dist/components/live-shop-orders-feed.js +37 -0
  32. package/dist/components/live-spa-bookings-feed.js +55 -0
  33. package/dist/components/menu-section.js +90 -0
  34. package/dist/components/proshop-catalogue.js +20 -0
  35. package/dist/components/reservation-bar.js +5 -0
  36. package/dist/components/reservation-cancel.js +4 -0
  37. package/dist/components/restaurant-order-form.js +9 -0
  38. package/dist/components/room-grid.js +26 -0
  39. package/dist/components/searchable-select.js +20 -0
  40. package/dist/components/service-booking-bar.js +14 -0
  41. package/dist/components/spa-booking-widget.js +179 -0
  42. package/dist/components/stay-search.js +31 -0
  43. package/dist/components/tripadvisor-reviews.js +38 -0
  44. package/dist/components/venue-carousel.js +18 -0
  45. package/dist/hotal-ui.js +5032 -4708
  46. package/dist/index.d.ts +40 -2
  47. package/package.json +6 -2
package/dist/index.d.ts CHANGED
@@ -193,7 +193,15 @@ export interface EventInquiry {
193
193
  email: string;
194
194
  phone?: string | null;
195
195
  restaurant_id?: string | null;
196
- event_date: string;
196
+ /** Null on enquiries that aren't about a specific date -- the feed drops
197
+ * the date row rather than printing one. */
198
+ event_date?: string | null;
199
+ /** When the guest last wrote -- null until they reply to the opening
200
+ * message. The card's "Received" prefers this over created_at. */
201
+ last_inbound_at?: string | null;
202
+ /** Set when an AI-drafted reply is waiting for approval -- the card shows
203
+ * an "AI draft" badge, and reads as waiting rather than answered. */
204
+ pending_ai_draft_id?: string | null;
197
205
  guests?: number | null;
198
206
  event_type?: string | null;
199
207
  format?: string | null;
@@ -384,7 +392,12 @@ export interface SpaTreatment {
384
392
  id: string;
385
393
  name: string;
386
394
  durationMins: number;
387
- price: number;
395
+ /** null = only bookable at the regulars' rate (memberPrice). */
396
+ price: number | null;
397
+ /** The regulars' rate, charged on dates the widget's memberUntil covers. */
398
+ memberPrice?: number | null;
399
+ /** The regulars' booking length, when it differs from durationMins. */
400
+ memberDurationMins?: number | null;
388
401
  }
389
402
 
390
403
  export interface SpaTherapist {
@@ -423,6 +436,7 @@ export interface SpaBookingWidgetStrings {
423
436
  eveningLabel: string;
424
437
  pickDayHint: string;
425
438
  noSlotsForDay: string;
439
+ noChangeHint: string;
426
440
  therapistFilterLabel: string;
427
441
  anyTherapistLabel: string;
428
442
  staffRowLabel: string;
@@ -445,6 +459,9 @@ export interface SpaBookingWidgetStrings {
445
459
  notWiredError: string;
446
460
  genericSubmitError: string;
447
461
  successMessage: string;
462
+ memberRateLabel: string;
463
+ membersOnlyLabel: string;
464
+ membersOnlyHint: string;
448
465
  }
449
466
 
450
467
  export interface SpaBookingWidgetElement extends HTMLElement {
@@ -475,6 +492,13 @@ export interface SpaBookingWidgetElement extends HTMLElement {
475
492
  * treatment's name matches this, once treatments have loaded. Re-fires on
476
493
  * every change, even mid-flow on a different service or step. */
477
494
  initialTreatmentTitle?: string;
495
+ /** The booking's *current* date (YYYY-MM-DD) and time (HH:MM), for
496
+ * skipDetailsStep/reschedule mode only -- disables the confirm button
497
+ * when the visitor lands back on the exact slot this booking already
498
+ * has, instead of letting them submit a no-op change. No effect
499
+ * without skipDetailsStep. */
500
+ initialDate?: string;
501
+ initialTime?: string;
478
502
  /** Pre-fills the matching contact-details field once a (truthy) value is
479
503
  * available, but only while that field is still empty -- never overwrites
480
504
  * something the visitor already typed. Applied once per field, no re-fire
@@ -482,6 +506,12 @@ export interface SpaBookingWidgetElement extends HTMLElement {
482
506
  initialName?: string;
483
507
  initialEmail?: string;
484
508
  initialPhone?: string;
509
+ /** Last appointment date (YYYY-MM-DD) the visitor gets the regulars' rate
510
+ * (memberPrice) for, set by a host that has identified the visitor.
511
+ * Unset = not a regular: regulars-only treatments are disabled. Display
512
+ * only -- the backend decides the price charged. Changing it refetches
513
+ * the open month. */
514
+ memberUntil?: string;
485
515
  strings?: Partial<SpaBookingWidgetStrings>;
486
516
  fetchTreatments?: () => Promise<SpaTreatment[]>;
487
517
  /** Optional therapist list for the datetime step's "Therapist" filter.
@@ -1458,6 +1488,14 @@ export interface AiChatWidgetElement extends HTMLElement {
1458
1488
  greeting?: string;
1459
1489
  /** Shown in the error message so a visitor can call instead. Omit to leave it out. */
1460
1490
  phone?: string;
1491
+ /** Sweeps a light band across the launcher on hover. Default false. */
1492
+ ctaShimmer?: boolean;
1493
+ /** 'icon' shows a speech bubble in a circle instead of the wording. */
1494
+ launcher?: 'label' | 'icon';
1495
+ /** Whether the panel is open. Set it to open the chat from your own CTA --
1496
+ * including a static launcher you render yourself, so this element can stay
1497
+ * unloaded until a visitor asks for it. Reflects their own open/close too. */
1498
+ open?: boolean;
1461
1499
  }
1462
1500
 
1463
1501
  /** One purchasable combination within a variant group -- a real, distinct
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgebuild/hotal-ui",
3
- "version": "0.23.152",
3
+ "version": "0.23.201",
4
4
  "description": "Reusable Svelte UI components for booking and reservation experiences.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -14,6 +14,10 @@
14
14
  ".": {
15
15
  "types": "./dist/index.d.ts",
16
16
  "import": "./dist/hotal-ui.js"
17
+ },
18
+ "./*": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/components/*.js"
17
21
  }
18
22
  },
19
23
  "publishConfig": {
@@ -40,7 +44,7 @@
40
44
  },
41
45
  "scripts": {
42
46
  "dev": "vite",
43
- "build": "vite build && node scripts/copy-types.mjs",
47
+ "build": "vite build && vite build --config vite.components.config.ts && node scripts/copy-types.mjs",
44
48
  "prepublishOnly": "npm run build",
45
49
  "preview": "vite preview",
46
50
  "check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json"