@flamingo-stack/openframe-frontend-core 0.0.672 → 0.0.673-2406.7238.1

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 (160) hide show
  1. package/dist/{chunk-PSL2WBEO.cjs → chunk-26NSIJMT.cjs} +33 -33
  2. package/dist/{chunk-PSL2WBEO.cjs.map → chunk-26NSIJMT.cjs.map} +1 -1
  3. package/dist/{chunk-UOQRNZIB.cjs → chunk-6QUKYN4K.cjs} +17 -17
  4. package/dist/{chunk-UOQRNZIB.cjs.map → chunk-6QUKYN4K.cjs.map} +1 -1
  5. package/dist/{chunk-AL4I5HHB.js → chunk-BF7GZ6BS.js} +4 -4
  6. package/dist/{chunk-CBCETEB4.cjs → chunk-DRURJCEY.cjs} +6 -6
  7. package/dist/{chunk-CBCETEB4.cjs.map → chunk-DRURJCEY.cjs.map} +1 -1
  8. package/dist/{chunk-GV7R2NTS.cjs → chunk-G262S3Q5.cjs} +23 -23
  9. package/dist/{chunk-GV7R2NTS.cjs.map → chunk-G262S3Q5.cjs.map} +1 -1
  10. package/dist/{chunk-HVEX4BSC.cjs → chunk-HJ532KQR.cjs} +60 -45
  11. package/dist/chunk-HJ532KQR.cjs.map +1 -0
  12. package/dist/{chunk-TQPKNG2E.js → chunk-HRM6242Y.js} +3 -3
  13. package/dist/{chunk-HOEVEB7N.cjs → chunk-IFQMIYFO.cjs} +50 -23
  14. package/dist/chunk-IFQMIYFO.cjs.map +1 -0
  15. package/dist/{chunk-Z6E45TJM.js → chunk-IG7M3XKX.js} +5 -5
  16. package/dist/{chunk-EKABOXNB.js → chunk-II6ABVLK.js} +2 -2
  17. package/dist/{chunk-ZRIVCLPR.js → chunk-JD5TKRCU.js} +1 -1
  18. package/dist/chunk-JD5TKRCU.js.map +1 -0
  19. package/dist/{chunk-SNWAN52K.cjs → chunk-K365MY6G.cjs} +3 -3
  20. package/dist/{chunk-SNWAN52K.cjs.map → chunk-K365MY6G.cjs.map} +1 -1
  21. package/dist/{chunk-NETIHUEY.cjs → chunk-KV7W5T6U.cjs} +10 -10
  22. package/dist/{chunk-NETIHUEY.cjs.map → chunk-KV7W5T6U.cjs.map} +1 -1
  23. package/dist/{chunk-H54F476P.cjs → chunk-KYF5EONP.cjs} +3 -3
  24. package/dist/{chunk-H54F476P.cjs.map → chunk-KYF5EONP.cjs.map} +1 -1
  25. package/dist/{chunk-D55IENZJ.cjs → chunk-LCMT2GZK.cjs} +1 -1
  26. package/dist/chunk-LCMT2GZK.cjs.map +1 -0
  27. package/dist/{chunk-TFSGYKWG.js → chunk-LMUZZUYC.js} +34 -7
  28. package/dist/chunk-LMUZZUYC.js.map +1 -0
  29. package/dist/{chunk-XLJNYTUW.cjs → chunk-N6TC6IPV.cjs} +56 -55
  30. package/dist/chunk-N6TC6IPV.cjs.map +1 -0
  31. package/dist/{chunk-IBGHJLNT.js → chunk-OGOMAK7B.js} +2 -2
  32. package/dist/{chunk-PWPYCJ33.js → chunk-P4GUIOLP.js} +2 -2
  33. package/dist/{chunk-7KM34VWL.js → chunk-RRU46J3N.js} +3 -3
  34. package/dist/{chunk-RD3I5PBB.cjs → chunk-THSIFQGS.cjs} +15 -15
  35. package/dist/{chunk-RD3I5PBB.cjs.map → chunk-THSIFQGS.cjs.map} +1 -1
  36. package/dist/{chunk-4AZWVS7F.js → chunk-TTHBFT7Q.js} +7 -6
  37. package/dist/{chunk-4AZWVS7F.js.map → chunk-TTHBFT7Q.js.map} +1 -1
  38. package/dist/{chunk-YNGAJGYB.cjs → chunk-TZP2OXHG.cjs} +346 -6
  39. package/dist/chunk-TZP2OXHG.cjs.map +1 -0
  40. package/dist/{chunk-VZRVQEMT.cjs → chunk-U2H3C4NT.cjs} +7 -7
  41. package/dist/{chunk-VZRVQEMT.cjs.map → chunk-U2H3C4NT.cjs.map} +1 -1
  42. package/dist/{chunk-KSBDARII.js → chunk-UFMXQKVT.js} +5 -5
  43. package/dist/{chunk-42OVTTOM.js → chunk-UMTXGEPU.js} +18 -3
  44. package/dist/{chunk-42OVTTOM.js.map → chunk-UMTXGEPU.js.map} +1 -1
  45. package/dist/{chunk-3PVOF3IB.js → chunk-UTHZ7DLN.js} +343 -3
  46. package/dist/{chunk-3PVOF3IB.js.map → chunk-UTHZ7DLN.js.map} +1 -1
  47. package/dist/{chunk-UUOBCUHW.cjs → chunk-UXT5EK27.cjs} +3 -3
  48. package/dist/{chunk-UUOBCUHW.cjs.map → chunk-UXT5EK27.cjs.map} +1 -1
  49. package/dist/{chunk-T3KXCOB2.js → chunk-VK5737GE.js} +2 -2
  50. package/dist/{chunk-O5PYXQ6H.js → chunk-VKLM5UKG.js} +3 -3
  51. package/dist/{chunk-6S2KLT7O.js → chunk-X2DR3XNN.js} +4 -4
  52. package/dist/{chunk-JREG4T6K.cjs → chunk-YCYOZAB5.cjs} +3 -3
  53. package/dist/{chunk-JREG4T6K.cjs.map → chunk-YCYOZAB5.cjs.map} +1 -1
  54. package/dist/{chunk-XDTU23P4.js → chunk-YWQVL5VJ.js} +2 -2
  55. package/dist/{chunk-BODMICIH.cjs → chunk-Z5K4IQZU.cjs} +40 -40
  56. package/dist/{chunk-BODMICIH.cjs.map → chunk-Z5K4IQZU.cjs.map} +1 -1
  57. package/dist/components/case-studies/index.cjs +15 -14
  58. package/dist/components/case-studies/index.cjs.map +1 -1
  59. package/dist/components/case-studies/index.js +6 -5
  60. package/dist/components/case-studies/index.js.map +1 -1
  61. package/dist/components/case-studies/share-experience-section.d.ts.map +1 -1
  62. package/dist/components/contact/contact-form.d.ts +6 -1
  63. package/dist/components/contact/contact-form.d.ts.map +1 -1
  64. package/dist/components/contact/index.cjs +5 -5
  65. package/dist/components/contact/index.js +4 -4
  66. package/dist/components/docs/index.cjs +8 -8
  67. package/dist/components/docs/index.js +7 -7
  68. package/dist/components/embeds/index.cjs +5 -5
  69. package/dist/components/embeds/index.js +4 -4
  70. package/dist/components/faq/index.cjs +5 -5
  71. package/dist/components/faq/index.js +4 -4
  72. package/dist/components/features/index.cjs +4 -4
  73. package/dist/components/features/index.js +3 -3
  74. package/dist/components/features/waitlist-form.d.ts +7 -2
  75. package/dist/components/features/waitlist-form.d.ts.map +1 -1
  76. package/dist/components/help-center-pages/index.cjs +53 -52
  77. package/dist/components/help-center-pages/index.cjs.map +1 -1
  78. package/dist/components/help-center-pages/index.js +16 -15
  79. package/dist/components/help-center-pages/index.js.map +1 -1
  80. package/dist/components/help-center-pages/trust-center-sections.d.ts.map +1 -1
  81. package/dist/components/index.cjs +35 -35
  82. package/dist/components/index.js +14 -14
  83. package/dist/components/meeting-scheduler/booking-form.d.ts +4 -1
  84. package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
  85. package/dist/components/meeting-scheduler/index.cjs +72 -37
  86. package/dist/components/meeting-scheduler/index.cjs.map +1 -1
  87. package/dist/components/meeting-scheduler/index.d.ts +5 -1
  88. package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
  89. package/dist/components/meeting-scheduler/index.js +45 -10
  90. package/dist/components/meeting-scheduler/index.js.map +1 -1
  91. package/dist/components/navigation/index.cjs +7 -7
  92. package/dist/components/navigation/index.js +6 -6
  93. package/dist/components/onboarding-guides/index.cjs +7 -7
  94. package/dist/components/onboarding-guides/index.js +6 -6
  95. package/dist/components/tickets/help-center-create-form.d.ts.map +1 -1
  96. package/dist/components/tickets/index.cjs +8 -8
  97. package/dist/components/tickets/index.js +7 -7
  98. package/dist/components/ui/index.cjs +4 -4
  99. package/dist/components/ui/index.js +3 -3
  100. package/dist/contexts/endpoints-runtime-context.d.ts +5 -0
  101. package/dist/contexts/endpoints-runtime-context.d.ts.map +1 -1
  102. package/dist/contexts/index.cjs +2 -2
  103. package/dist/contexts/index.js +1 -1
  104. package/dist/hooks/index.cjs +5 -3
  105. package/dist/hooks/index.cjs.map +1 -1
  106. package/dist/hooks/index.d.ts +1 -0
  107. package/dist/hooks/index.d.ts.map +1 -1
  108. package/dist/hooks/index.js +4 -2
  109. package/dist/hooks/use-form-rescue.d.ts +37 -0
  110. package/dist/hooks/use-form-rescue.d.ts.map +1 -0
  111. package/dist/index.cjs +52 -8
  112. package/dist/index.cjs.map +1 -1
  113. package/dist/index.js +51 -7
  114. package/dist/index.js.map +1 -1
  115. package/dist/utils/form-rescue.cjs +123 -0
  116. package/dist/utils/form-rescue.cjs.map +1 -0
  117. package/dist/utils/form-rescue.d.ts +105 -0
  118. package/dist/utils/form-rescue.d.ts.map +1 -0
  119. package/dist/utils/form-rescue.js +101 -0
  120. package/dist/utils/form-rescue.js.map +1 -0
  121. package/dist/utils/index.cjs +119 -0
  122. package/dist/utils/index.cjs.map +1 -1
  123. package/dist/utils/index.d.ts +1 -0
  124. package/dist/utils/index.d.ts.map +1 -1
  125. package/dist/utils/index.js +99 -1
  126. package/dist/utils/index.js.map +1 -1
  127. package/package.json +7 -1
  128. package/src/components/case-studies/share-experience-section.tsx +1 -0
  129. package/src/components/contact/contact-form.tsx +38 -2
  130. package/src/components/features/waitlist-form.tsx +27 -2
  131. package/src/components/help-center-pages/trust-center-sections.tsx +1 -0
  132. package/src/components/meeting-scheduler/booking-form.tsx +14 -0
  133. package/src/components/meeting-scheduler/index.tsx +38 -3
  134. package/src/components/tickets/help-center-create-form.tsx +2 -0
  135. package/src/contexts/endpoints-runtime-context.tsx +5 -0
  136. package/src/hooks/__tests__/use-form-rescue.test.tsx +189 -0
  137. package/src/hooks/index.ts +3 -0
  138. package/src/hooks/use-form-rescue.ts +315 -0
  139. package/src/utils/__tests__/form-rescue.test.ts +106 -0
  140. package/src/utils/form-rescue.ts +198 -0
  141. package/src/utils/index.ts +5 -0
  142. package/dist/chunk-D55IENZJ.cjs.map +0 -1
  143. package/dist/chunk-HOEVEB7N.cjs.map +0 -1
  144. package/dist/chunk-HVEX4BSC.cjs.map +0 -1
  145. package/dist/chunk-TFSGYKWG.js.map +0 -1
  146. package/dist/chunk-XLJNYTUW.cjs.map +0 -1
  147. package/dist/chunk-YNGAJGYB.cjs.map +0 -1
  148. package/dist/chunk-ZRIVCLPR.js.map +0 -1
  149. /package/dist/{chunk-AL4I5HHB.js.map → chunk-BF7GZ6BS.js.map} +0 -0
  150. /package/dist/{chunk-TQPKNG2E.js.map → chunk-HRM6242Y.js.map} +0 -0
  151. /package/dist/{chunk-Z6E45TJM.js.map → chunk-IG7M3XKX.js.map} +0 -0
  152. /package/dist/{chunk-EKABOXNB.js.map → chunk-II6ABVLK.js.map} +0 -0
  153. /package/dist/{chunk-IBGHJLNT.js.map → chunk-OGOMAK7B.js.map} +0 -0
  154. /package/dist/{chunk-PWPYCJ33.js.map → chunk-P4GUIOLP.js.map} +0 -0
  155. /package/dist/{chunk-7KM34VWL.js.map → chunk-RRU46J3N.js.map} +0 -0
  156. /package/dist/{chunk-KSBDARII.js.map → chunk-UFMXQKVT.js.map} +0 -0
  157. /package/dist/{chunk-T3KXCOB2.js.map → chunk-VK5737GE.js.map} +0 -0
  158. /package/dist/{chunk-O5PYXQ6H.js.map → chunk-VKLM5UKG.js.map} +0 -0
  159. /package/dist/{chunk-6S2KLT7O.js.map → chunk-X2DR3XNN.js.map} +0 -0
  160. /package/dist/{chunk-XDTU23P4.js.map → chunk-YWQVL5VJ.js.map} +0 -0
@@ -1,5 +1,6 @@
1
1
  import type { ComponentType, ReactNode } from 'react';
2
2
  import { type BookingConfirmation, type MeetingAvailability, type MeetingBookingErrorCode, type MeetingHost } from '../../schemas/meeting-booking-schema';
3
+ import type { FormRescueFormId } from '../../utils/form-rescue';
3
4
  import { type BookingFormProps } from './booking-form';
4
5
  export interface HubSpotMeetingSchedulerProps {
5
6
  /** Directory id of the meeting link (from the host's `/api/meetings` payload). */
@@ -72,6 +73,9 @@ export interface HubSpotMeetingSchedulerProps {
72
73
  * can pass it across the RSC boundary where a component cannot.
73
74
  */
74
75
  detailsFormProps?: Pick<BookingFormProps, 'fieldRows' | 'consent'>;
76
+ /** Form rescue (save the half-filled booking form for follow-up). OPT-IN:
77
+ * omitted or `null` saves nothing. */
78
+ rescueFormId?: FormRescueFormId | null;
75
79
  }
76
80
  type Step = 'slot' | 'details' | 'confirmed';
77
81
  /** `onStageChange`'s value: a step, or the degraded box that replaces the flow. */
@@ -169,7 +173,7 @@ export declare function SchedulerDegradedCard({ flow, className, message, action
169
173
  action?: ReactNode;
170
174
  children?: ReactNode;
171
175
  }): import("react").JSX.Element;
172
- export declare function HubSpotMeetingScheduler({ meetingId, apiBaseUrl, initialAvailability, title, description, hosts, displayTimezone, fallbackUrl, onBack, onBooked, onStageChange, className, flow, detailsForm: DetailsForm, detailsFormProps, }: HubSpotMeetingSchedulerProps): import("react").JSX.Element;
176
+ export declare function HubSpotMeetingScheduler({ meetingId, apiBaseUrl, initialAvailability, title, description, hosts, displayTimezone, fallbackUrl, onBack, onBooked, onStageChange, className, flow, detailsForm: DetailsForm, detailsFormProps, rescueFormId, }: HubSpotMeetingSchedulerProps): import("react").JSX.Element;
173
177
  export { BookingForm, BookingFormSkeleton, type BookingFormProps, type BookingFieldRow, type BookingFieldSlot, type BookingFormConsent, } from './booking-form';
174
178
  export { MeetingSchedulerDirectory, MeetingSchedulerDirectoryRowSkeleton, type MeetingSchedulerDirectoryProps, } from './directory';
175
179
  export type { MeetingAvailability, BookingConfirmation, MeetingBookingErrorCode, MeetingHost };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/meeting-scheduler/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/meeting-scheduler/index.tsx"],"names":[],"mappings":"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"}
@@ -24,14 +24,15 @@ import {
24
24
  SelectTrigger,
25
25
  SelectValue,
26
26
  Textarea
27
- } from "../../chunk-42OVTTOM.js";
27
+ } from "../../chunk-UMTXGEPU.js";
28
28
  import "../../chunk-L2SLFCXP.js";
29
29
  import "../../chunk-BJXDHKUX.js";
30
30
  import {
31
+ useFormRescue,
31
32
  useHumanitySignals,
32
33
  useToast
33
- } from "../../chunk-3PVOF3IB.js";
34
- import "../../chunk-ZRIVCLPR.js";
34
+ } from "../../chunk-UTHZ7DLN.js";
35
+ import "../../chunk-JD5TKRCU.js";
35
36
  import "../../chunk-GRBZC5N3.js";
36
37
  import {
37
38
  contentFetch,
@@ -617,7 +618,8 @@ function BookingForm({
617
618
  isSubmitting,
618
619
  onSubmit,
619
620
  honeypotInputProps,
620
- getSignals
621
+ getSignals,
622
+ onValuesChange
621
623
  }) {
622
624
  const { formFields, legalConsent } = availability;
623
625
  const supportedFields = useMemo(() => normalizeFormFields(formFields), [formFields]);
@@ -638,6 +640,7 @@ function BookingForm({
638
640
  handleSubmit,
639
641
  setValue,
640
642
  getValues,
643
+ watch,
641
644
  formState: { errors }
642
645
  } = useForm({
643
646
  resolver: zodResolver(schema),
@@ -672,6 +675,14 @@ function BookingForm({
672
675
  { shouldDirty: false }
673
676
  );
674
677
  }, [consentDefaults, priorConsents, getValues, setValue]);
678
+ useEffect(() => {
679
+ if (!onValuesChange) return void 0;
680
+ const subscription = watch((values, { name }) => {
681
+ const answers = values.formFields ?? {};
682
+ onValuesChange({ ...values, ...answers }, name ? name.replace(/^formFields\./, "") : null);
683
+ });
684
+ return () => subscription.unsubscribe();
685
+ }, [watch, onValuesChange]);
675
686
  const submitValid = handleSubmit(async (data) => {
676
687
  if (consentMissing) return;
677
688
  if (deferSlot) {
@@ -1458,7 +1469,8 @@ function HubSpotMeetingScheduler({
1458
1469
  className,
1459
1470
  flow = DEFAULT_SCHEDULER_FLOW,
1460
1471
  detailsForm: DetailsForm = BookingForm,
1461
- detailsFormProps
1472
+ detailsFormProps,
1473
+ rescueFormId = null
1462
1474
  }) {
1463
1475
  const {
1464
1476
  availability,
@@ -1507,6 +1519,26 @@ function HubSpotMeetingScheduler({
1507
1519
  const [bookingError, setBookingError] = useState4(null);
1508
1520
  const { honeypotInputProps, getSignals, resetSignals } = useHumanitySignals();
1509
1521
  const { toast } = useToast();
1522
+ const rescueFieldNames = useMemo5(
1523
+ () => [
1524
+ ...BUILT_IN_BOOKING_FIELDS.map((field) => field.name),
1525
+ ...normalizeFormFields(availability?.formFields ?? []).map((field) => field.name)
1526
+ ],
1527
+ [availability?.formFields]
1528
+ );
1529
+ const [restored, setRestored] = useState4(null);
1530
+ const rescue = useFormRescue({
1531
+ formId: rescueFormId,
1532
+ fieldNames: rescueFieldNames,
1533
+ getSignals,
1534
+ onRestore: (values) => {
1535
+ const { email, firstName, lastName, ...answers } = values;
1536
+ setRestored((prev) => ({
1537
+ version: (prev?.version ?? 0) + 1,
1538
+ values: { email: email ?? "", firstName: firstName ?? "", lastName: lastName ?? "", formFields: answers }
1539
+ }));
1540
+ }
1541
+ });
1510
1542
  const autoAdvanceCount = useRef2(0);
1511
1543
  const [machineFor, setMachineFor] = useState4(meetingId);
1512
1544
  if (machineFor !== meetingId) {
@@ -1574,12 +1606,13 @@ function HubSpotMeetingScheduler({
1574
1606
  async (payload) => {
1575
1607
  const priorError = bookingError;
1576
1608
  setBookingError(null);
1577
- const result = await book(payload);
1609
+ const result = await book({ ...payload, ...rescue.submitFields() });
1578
1610
  if (!result.ok && result.message === BOOKING_IN_FLIGHT_MESSAGE) {
1579
1611
  setBookingError(priorError);
1580
1612
  return;
1581
1613
  }
1582
1614
  if (result.ok && result.confirmation) {
1615
+ rescue.complete();
1583
1616
  setConfirmation(result.confirmation);
1584
1617
  setStep("confirmed");
1585
1618
  onBooked?.(result.confirmation);
@@ -1604,7 +1637,7 @@ function HubSpotMeetingScheduler({
1604
1637
  });
1605
1638
  }
1606
1639
  },
1607
- [book, bookingError, detailsFirst, onBooked, refetchAvailability, resetSignals, toast]
1640
+ [book, bookingError, detailsFirst, onBooked, refetchAvailability, rescue, resetSignals, toast]
1608
1641
  );
1609
1642
  const escapeHatch = fallbackUrl ? /* @__PURE__ */ jsx6(Button, { variant: "outline", size: "small-legacy", href: fallbackUrl, openInNewTab: true, children: "Open in HubSpot" }) : null;
1610
1643
  const backEdge = detailsFirst ? step === "slot" ? backToDetails : onBack : step === "details" ? backToSlot : onBack;
@@ -1692,12 +1725,14 @@ function HubSpotMeetingScheduler({
1692
1725
  deferSlot: detailsFirst,
1693
1726
  submitLabel: preset.submitLabel,
1694
1727
  footerNote: preset.footerNote,
1695
- initialValues: detailsFirst ? stash?.payload : void 0,
1728
+ initialValues: (detailsFirst ? stash?.payload : void 0) ?? restored?.values,
1696
1729
  isSubmitting,
1697
1730
  onSubmit: detailsFirst ? stashDetails : handleSubmit,
1698
1731
  honeypotInputProps,
1699
- getSignals
1700
- }
1732
+ getSignals,
1733
+ onValuesChange: rescue.track
1734
+ },
1735
+ restored?.version ?? 0
1701
1736
  )
1702
1737
  ] }) : /* @__PURE__ */ jsxs6("div", { className: "flex flex-col gap-[var(--spacing-system-m)] md:min-h-0 md:flex-1", children: [
1703
1738
  bookingError === "SLOT_TAKEN" && /* @__PURE__ */ jsx6(