@parag.more.withsurface.com/forms-sdk 0.1.4 → 0.1.6

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 (191) hide show
  1. package/README.md +9 -4
  2. package/dist/index.cjs +1 -2737
  3. package/dist/index.mjs +1 -2714
  4. package/dist/react/index.cjs +1 -44
  5. package/dist/react/index.mjs +1 -21
  6. package/dist/surface-forms-sdk.min.js +21 -2
  7. package/dist/types/bind/bindForm.d.ts +2 -36
  8. package/dist/types/bind/bookingWidget.d.ts +29 -17
  9. package/dist/types/bind/scheduler/embedUtils.d.ts +50 -0
  10. package/dist/types/bind/scheduler/mountScheduler.d.ts +2 -0
  11. package/dist/types/bind/scheduler/providers/cal.d.ts +3 -0
  12. package/dist/types/bind/scheduler/providers/calendly.d.ts +3 -0
  13. package/dist/types/bind/scheduler/providers/chilical.d.ts +3 -0
  14. package/dist/types/bind/scheduler/providers/clari.d.ts +3 -0
  15. package/dist/types/bind/scheduler/providers/hubspot.d.ts +3 -0
  16. package/dist/types/bind/scheduler/providers/index.d.ts +4 -0
  17. package/dist/types/bind/scheduler/providers/reclaimai.d.ts +3 -0
  18. package/dist/types/bind/scheduler/providers/revenuehero.d.ts +3 -0
  19. package/dist/types/bind/scheduler/providers/savvycal.d.ts +3 -0
  20. package/dist/types/bind/scheduler/providers/surface.d.ts +3 -0
  21. package/dist/types/bind/scheduler/providers/zoom.d.ts +3 -0
  22. package/dist/types/bind/scheduler/styles.d.ts +3 -0
  23. package/dist/types/bind/scheduler/types.d.ts +65 -0
  24. package/dist/types/core/client/emailValidation.d.ts +3 -4
  25. package/dist/types/core/client/responses.d.ts +3 -15
  26. package/dist/types/core/client/runtimeConfig.d.ts +40 -32
  27. package/dist/types/core/client/scheduler.d.ts +4 -27
  28. package/dist/types/core/client/transport.d.ts +4 -28
  29. package/dist/types/core/engine/answerAudit.d.ts +3 -12
  30. package/dist/types/core/engine/answerStates.d.ts +4 -17
  31. package/dist/types/core/engine/formEngine.d.ts +16 -53
  32. package/dist/types/core/engine/redirect.d.ts +1 -23
  33. package/dist/types/core/engine/responsePayload.d.ts +4 -28
  34. package/dist/types/core/engine/schedulerEvents.d.ts +40 -0
  35. package/dist/types/core/engine/urlData.d.ts +2 -17
  36. package/dist/types/core/engine/urlPrefill.d.ts +1 -9
  37. package/dist/types/core/events/dropoffDetection.d.ts +1 -14
  38. package/dist/types/core/events/emitter.d.ts +1 -17
  39. package/dist/types/core/events/formJourneyTracker.d.ts +1 -19
  40. package/dist/types/core/events/pushEvents.d.ts +2 -16
  41. package/dist/types/core/events/startedDetection.d.ts +1 -10
  42. package/dist/types/core/events/viewDetection.d.ts +1 -14
  43. package/dist/types/core/identity/browserFingerprint.d.ts +3 -19
  44. package/dist/types/core/identity/ensureIdentified.d.ts +1 -16
  45. package/dist/types/core/identity/identify.d.ts +1 -15
  46. package/dist/types/core/identity/journey.d.ts +3 -16
  47. package/dist/types/core/identity/journey.testStubs.d.ts +1 -2
  48. package/dist/types/core/identity/leadDataCache.d.ts +1 -16
  49. package/dist/types/enrichment/attachEnrichment.d.ts +1 -21
  50. package/dist/types/index.d.ts +5 -3
  51. package/dist/types/react/index.d.ts +0 -1
  52. package/dist/types/react/useSurfaceForm.d.ts +1 -11
  53. package/dist/types/surfaceForms.d.ts +28 -73
  54. package/dist/types/tracking/attachTracking.d.ts +1 -22
  55. package/dist/types/tracking/conversionRules.d.ts +3 -12
  56. package/dist/types/tracking/vendors.d.ts +3 -22
  57. package/dist/types/validation/attachEmailValidation.d.ts +0 -1
  58. package/docs/api.md +51 -39
  59. package/docs/reference/binding.md +86 -13
  60. package/docs/reference/clients.md +21 -1
  61. package/docs/reference/engine.md +5 -1
  62. package/docs/reference/events.md +4 -1
  63. package/docs/reference/identity.md +2 -3
  64. package/llms.txt +58 -10
  65. package/package.json +1 -1
  66. package/skills/surface-forms-sdk/SKILL.md +19 -6
  67. package/skills/surface-forms-sdk/patterns.md +30 -5
  68. package/dist/index.cjs.map +0 -7
  69. package/dist/index.mjs.map +0 -7
  70. package/dist/react/index.cjs.map +0 -7
  71. package/dist/react/index.mjs.map +0 -7
  72. package/dist/surface-forms-sdk.min.js.map +0 -7
  73. package/dist/types/bind/bindForm.d.ts.map +0 -1
  74. package/dist/types/bind/bindForm.test.d.ts +0 -2
  75. package/dist/types/bind/bindForm.test.d.ts.map +0 -1
  76. package/dist/types/bind/bookingWidget.d.ts.map +0 -1
  77. package/dist/types/bind/bookingWidget.test.d.ts +0 -2
  78. package/dist/types/bind/bookingWidget.test.d.ts.map +0 -1
  79. package/dist/types/core/client/emailValidation.d.ts.map +0 -1
  80. package/dist/types/core/client/emailValidation.test.d.ts +0 -2
  81. package/dist/types/core/client/emailValidation.test.d.ts.map +0 -1
  82. package/dist/types/core/client/responses.d.ts.map +0 -1
  83. package/dist/types/core/client/responses.test.d.ts +0 -2
  84. package/dist/types/core/client/responses.test.d.ts.map +0 -1
  85. package/dist/types/core/client/runtimeConfig.contract.test.d.ts +0 -2
  86. package/dist/types/core/client/runtimeConfig.contract.test.d.ts.map +0 -1
  87. package/dist/types/core/client/runtimeConfig.d.ts.map +0 -1
  88. package/dist/types/core/client/runtimeConfig.test.d.ts +0 -2
  89. package/dist/types/core/client/runtimeConfig.test.d.ts.map +0 -1
  90. package/dist/types/core/client/scheduler.contract.test.d.ts +0 -2
  91. package/dist/types/core/client/scheduler.contract.test.d.ts.map +0 -1
  92. package/dist/types/core/client/scheduler.d.ts.map +0 -1
  93. package/dist/types/core/client/scheduler.test.d.ts +0 -2
  94. package/dist/types/core/client/scheduler.test.d.ts.map +0 -1
  95. package/dist/types/core/client/transport.d.ts.map +0 -1
  96. package/dist/types/core/client/transport.test.d.ts +0 -2
  97. package/dist/types/core/client/transport.test.d.ts.map +0 -1
  98. package/dist/types/core/engine/answerAudit.d.ts.map +0 -1
  99. package/dist/types/core/engine/answerAudit.test.d.ts +0 -2
  100. package/dist/types/core/engine/answerAudit.test.d.ts.map +0 -1
  101. package/dist/types/core/engine/answerStates.contract.test.d.ts +0 -2
  102. package/dist/types/core/engine/answerStates.contract.test.d.ts.map +0 -1
  103. package/dist/types/core/engine/answerStates.d.ts.map +0 -1
  104. package/dist/types/core/engine/formEngine.d.ts.map +0 -1
  105. package/dist/types/core/engine/formEngine.test.d.ts +0 -2
  106. package/dist/types/core/engine/formEngine.test.d.ts.map +0 -1
  107. package/dist/types/core/engine/redirect.d.ts.map +0 -1
  108. package/dist/types/core/engine/redirect.test.d.ts +0 -2
  109. package/dist/types/core/engine/redirect.test.d.ts.map +0 -1
  110. package/dist/types/core/engine/responsePayload.contract.test.d.ts +0 -2
  111. package/dist/types/core/engine/responsePayload.contract.test.d.ts.map +0 -1
  112. package/dist/types/core/engine/responsePayload.d.ts.map +0 -1
  113. package/dist/types/core/engine/responsePayload.test.d.ts +0 -2
  114. package/dist/types/core/engine/responsePayload.test.d.ts.map +0 -1
  115. package/dist/types/core/engine/urlData.contract.test.d.ts +0 -2
  116. package/dist/types/core/engine/urlData.contract.test.d.ts.map +0 -1
  117. package/dist/types/core/engine/urlData.d.ts.map +0 -1
  118. package/dist/types/core/engine/urlData.test.d.ts +0 -2
  119. package/dist/types/core/engine/urlData.test.d.ts.map +0 -1
  120. package/dist/types/core/engine/urlPrefill.d.ts.map +0 -1
  121. package/dist/types/core/engine/urlPrefill.test.d.ts +0 -2
  122. package/dist/types/core/engine/urlPrefill.test.d.ts.map +0 -1
  123. package/dist/types/core/events/dropoffDetection.d.ts.map +0 -1
  124. package/dist/types/core/events/dropoffDetection.test.d.ts +0 -2
  125. package/dist/types/core/events/dropoffDetection.test.d.ts.map +0 -1
  126. package/dist/types/core/events/emitter.d.ts.map +0 -1
  127. package/dist/types/core/events/emitter.test.d.ts +0 -2
  128. package/dist/types/core/events/emitter.test.d.ts.map +0 -1
  129. package/dist/types/core/events/formJourneyTracker.contract.test.d.ts +0 -2
  130. package/dist/types/core/events/formJourneyTracker.contract.test.d.ts.map +0 -1
  131. package/dist/types/core/events/formJourneyTracker.d.ts.map +0 -1
  132. package/dist/types/core/events/formJourneyTracker.test.d.ts +0 -2
  133. package/dist/types/core/events/formJourneyTracker.test.d.ts.map +0 -1
  134. package/dist/types/core/events/pushEvents.contract.test.d.ts +0 -2
  135. package/dist/types/core/events/pushEvents.contract.test.d.ts.map +0 -1
  136. package/dist/types/core/events/pushEvents.d.ts.map +0 -1
  137. package/dist/types/core/events/pushEvents.test.d.ts +0 -2
  138. package/dist/types/core/events/pushEvents.test.d.ts.map +0 -1
  139. package/dist/types/core/events/startedDetection.d.ts.map +0 -1
  140. package/dist/types/core/events/startedDetection.test.d.ts +0 -2
  141. package/dist/types/core/events/startedDetection.test.d.ts.map +0 -1
  142. package/dist/types/core/events/viewDetection.d.ts.map +0 -1
  143. package/dist/types/core/events/viewDetection.test.d.ts +0 -2
  144. package/dist/types/core/events/viewDetection.test.d.ts.map +0 -1
  145. package/dist/types/core/identity/browserFingerprint.d.ts.map +0 -1
  146. package/dist/types/core/identity/browserFingerprint.test.d.ts +0 -2
  147. package/dist/types/core/identity/browserFingerprint.test.d.ts.map +0 -1
  148. package/dist/types/core/identity/ensureIdentified.d.ts.map +0 -1
  149. package/dist/types/core/identity/ensureIdentified.test.d.ts +0 -2
  150. package/dist/types/core/identity/ensureIdentified.test.d.ts.map +0 -1
  151. package/dist/types/core/identity/identify.contract.test.d.ts +0 -2
  152. package/dist/types/core/identity/identify.contract.test.d.ts.map +0 -1
  153. package/dist/types/core/identity/identify.d.ts.map +0 -1
  154. package/dist/types/core/identity/identify.test.d.ts +0 -2
  155. package/dist/types/core/identity/identify.test.d.ts.map +0 -1
  156. package/dist/types/core/identity/journey.contract.test.d.ts +0 -2
  157. package/dist/types/core/identity/journey.contract.test.d.ts.map +0 -1
  158. package/dist/types/core/identity/journey.d.ts.map +0 -1
  159. package/dist/types/core/identity/journey.test.d.ts +0 -2
  160. package/dist/types/core/identity/journey.test.d.ts.map +0 -1
  161. package/dist/types/core/identity/journey.testStubs.d.ts.map +0 -1
  162. package/dist/types/core/identity/leadDataCache.d.ts.map +0 -1
  163. package/dist/types/core/identity/leadDataCache.test.d.ts +0 -2
  164. package/dist/types/core/identity/leadDataCache.test.d.ts.map +0 -1
  165. package/dist/types/enrichment/attachEnrichment.d.ts.map +0 -1
  166. package/dist/types/enrichment/attachEnrichment.test.d.ts +0 -2
  167. package/dist/types/enrichment/attachEnrichment.test.d.ts.map +0 -1
  168. package/dist/types/index.d.ts.map +0 -1
  169. package/dist/types/react/index.d.ts.map +0 -1
  170. package/dist/types/react/ssr.test.d.ts +0 -2
  171. package/dist/types/react/ssr.test.d.ts.map +0 -1
  172. package/dist/types/react/useSurfaceForm.d.ts.map +0 -1
  173. package/dist/types/react/useSurfaceForm.test.d.ts +0 -2
  174. package/dist/types/react/useSurfaceForm.test.d.ts.map +0 -1
  175. package/dist/types/surfaceForms.d.ts.map +0 -1
  176. package/dist/types/surfaceForms.test.d.ts +0 -2
  177. package/dist/types/surfaceForms.test.d.ts.map +0 -1
  178. package/dist/types/tracking/attachTracking.d.ts.map +0 -1
  179. package/dist/types/tracking/attachTracking.test.d.ts +0 -2
  180. package/dist/types/tracking/attachTracking.test.d.ts.map +0 -1
  181. package/dist/types/tracking/conversionRules.contract.test.d.ts +0 -2
  182. package/dist/types/tracking/conversionRules.contract.test.d.ts.map +0 -1
  183. package/dist/types/tracking/conversionRules.d.ts.map +0 -1
  184. package/dist/types/tracking/conversionRules.test.d.ts +0 -2
  185. package/dist/types/tracking/conversionRules.test.d.ts.map +0 -1
  186. package/dist/types/tracking/vendors.d.ts.map +0 -1
  187. package/dist/types/tracking/vendors.test.d.ts +0 -2
  188. package/dist/types/tracking/vendors.test.d.ts.map +0 -1
  189. package/dist/types/validation/attachEmailValidation.d.ts.map +0 -1
  190. package/dist/types/validation/attachEmailValidation.test.d.ts +0 -2
  191. package/dist/types/validation/attachEmailValidation.test.d.ts.map +0 -1
@@ -116,14 +116,38 @@ code-driven. Full event list for your own listeners: `viewed`, `started`, `stepC
116
116
  </div>
117
117
  ```
118
118
 
119
- ## Scheduler step (Surface scheduler)
119
+ ## Scheduler step
120
120
 
121
- A `CalendlyScreen` with `calendarType: "Surface"` renders through the SDK's own unstyled widget — never iframe the hosted booking page, and never bind the question in HTML (the `onComplete` writes the answer):
121
+ Default: one call. `mountScheduler` renders the record's scheduler question for ANY supported
122
+ provider (Surface's widget default-styled, or the record's third-party embed — Calendly,
123
+ Cal.com, SavvyCal, Chili Piper, HubSpot, RevenueHero, Zoom, Reclaim.ai, Clari), emits the
124
+ lifecycle on `form.on("scheduler")`, and persists the booking into the response by itself.
125
+ Never iframe the hosted booking page, and never bind the question in HTML:
122
126
 
123
127
  ```html
124
128
  <section data-step-id="step_book" hidden>
125
129
  <div id="booking"></div>
126
130
  </section>
131
+ <script>
132
+ const teardown = SurfaceFormsSDK.mountScheduler({
133
+ form,
134
+ container: document.querySelector("#booking"),
135
+ onEvent(e) {
136
+ if (e.type === "booking_confirmed") form.submit(); // or next()/goToStep, per your flow
137
+ },
138
+ });
139
+ </script>
140
+ ```
141
+
142
+ Note the booking itself needs no wiring — persistence is automatic (`persist: false` opts out);
143
+ `onEvent` here only drives navigation. `styled: false` skips the injected scoped stylesheet
144
+ (Surface provider). Clari is embed-only (no booking signal → drive navigation yourself).
145
+ In preview mode the Surface path books synthetically and nothing is written.
146
+
147
+ Custom booking UI (only when asked): mount the unstyled widget directly and write the answer
148
+ yourself —
149
+
150
+ ```html
127
151
  <script>
128
152
  const { createSchedulerClient, createTransport, mountBookingWidget, toSchedulerAnswerState } =
129
153
  SurfaceFormsSDK;
@@ -144,8 +168,7 @@ A `CalendlyScreen` with `calendarType: "Surface"` renders through the SDK's own
144
168
  The widget emits semantic markup under stable `surface-booking-*` classes (full DOM tree in
145
169
  `llms.txt`) and injects no CSS — style from the page. Labels are locale-formatted by default
146
170
  with the raw value on each element's `data-value`; pass `formatters: { month?, date?, time? }`
147
- to override the copy. In preview mode the client returns a synthetic booking, so the flow is
148
- testable offline.
171
+ to override the copy.
149
172
 
150
173
  ## React adapter (SPA)
151
174
 
@@ -209,7 +232,9 @@ function QualifySteps({ form }: { form: SurfaceForm }) {
209
232
  }
210
233
  ```
211
234
 
212
- `state` is `useSyncExternalStore`-backed: referentially stable between engine mutations, safe to render from directly. `submit()`/`disqualify()` move `state.currentStepId` to the record's matching ending step, so the same step-switch renders the confirmation. On SPA route changes call `form.identify()` to re-attribute the visitor; on programmatic teardown after a submit flow, `await form.flush()` first.
235
+ `state` is `useSyncExternalStore`-backed: referentially stable between engine mutations, safe to render from directly. `state.answers` is keyed by stepId then questionId — the example reads the current step (`state.answers[state.currentStepId]`), but an EARLIER step's answer (booking prefill, a summary screen) is read by that step's id: `state.answers["step_role"]?.["q_role"]`. `submit()`/`disqualify()` move `state.currentStepId` to the record's matching ending step, so the same step-switch renders the confirmation. On SPA route changes call `form.identify()` to re-attribute the visitor.
236
+
237
+ React teardown rule: `destroy()` alone in the effect cleanup is correct — a cleanup cannot await, partial saves are beacons that survive unmount, and the finishing write was already awaited by `submit()` itself before the cleanup can run. Reserve `await form.flush()` for programmatic teardown where the process itself may die with a write still queued (a test harness closing the browser), not for ordinary SPA unmounts.
213
238
 
214
239
  ## Tracking setup
215
240