@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.
- package/README.md +9 -4
- package/dist/index.cjs +1 -2737
- package/dist/index.mjs +1 -2714
- package/dist/react/index.cjs +1 -44
- package/dist/react/index.mjs +1 -21
- package/dist/surface-forms-sdk.min.js +21 -2
- package/dist/types/bind/bindForm.d.ts +2 -36
- package/dist/types/bind/bookingWidget.d.ts +29 -17
- package/dist/types/bind/scheduler/embedUtils.d.ts +50 -0
- package/dist/types/bind/scheduler/mountScheduler.d.ts +2 -0
- package/dist/types/bind/scheduler/providers/cal.d.ts +3 -0
- package/dist/types/bind/scheduler/providers/calendly.d.ts +3 -0
- package/dist/types/bind/scheduler/providers/chilical.d.ts +3 -0
- package/dist/types/bind/scheduler/providers/clari.d.ts +3 -0
- package/dist/types/bind/scheduler/providers/hubspot.d.ts +3 -0
- package/dist/types/bind/scheduler/providers/index.d.ts +4 -0
- package/dist/types/bind/scheduler/providers/reclaimai.d.ts +3 -0
- package/dist/types/bind/scheduler/providers/revenuehero.d.ts +3 -0
- package/dist/types/bind/scheduler/providers/savvycal.d.ts +3 -0
- package/dist/types/bind/scheduler/providers/surface.d.ts +3 -0
- package/dist/types/bind/scheduler/providers/zoom.d.ts +3 -0
- package/dist/types/bind/scheduler/styles.d.ts +3 -0
- package/dist/types/bind/scheduler/types.d.ts +65 -0
- package/dist/types/core/client/emailValidation.d.ts +3 -4
- package/dist/types/core/client/responses.d.ts +3 -15
- package/dist/types/core/client/runtimeConfig.d.ts +40 -32
- package/dist/types/core/client/scheduler.d.ts +4 -27
- package/dist/types/core/client/transport.d.ts +4 -28
- package/dist/types/core/engine/answerAudit.d.ts +3 -12
- package/dist/types/core/engine/answerStates.d.ts +4 -17
- package/dist/types/core/engine/formEngine.d.ts +16 -53
- package/dist/types/core/engine/redirect.d.ts +1 -23
- package/dist/types/core/engine/responsePayload.d.ts +4 -28
- package/dist/types/core/engine/schedulerEvents.d.ts +40 -0
- package/dist/types/core/engine/urlData.d.ts +2 -17
- package/dist/types/core/engine/urlPrefill.d.ts +1 -9
- package/dist/types/core/events/dropoffDetection.d.ts +1 -14
- package/dist/types/core/events/emitter.d.ts +1 -17
- package/dist/types/core/events/formJourneyTracker.d.ts +1 -19
- package/dist/types/core/events/pushEvents.d.ts +2 -16
- package/dist/types/core/events/startedDetection.d.ts +1 -10
- package/dist/types/core/events/viewDetection.d.ts +1 -14
- package/dist/types/core/identity/browserFingerprint.d.ts +3 -19
- package/dist/types/core/identity/ensureIdentified.d.ts +1 -16
- package/dist/types/core/identity/identify.d.ts +1 -15
- package/dist/types/core/identity/journey.d.ts +3 -16
- package/dist/types/core/identity/journey.testStubs.d.ts +1 -2
- package/dist/types/core/identity/leadDataCache.d.ts +1 -16
- package/dist/types/enrichment/attachEnrichment.d.ts +1 -21
- package/dist/types/index.d.ts +5 -3
- package/dist/types/react/index.d.ts +0 -1
- package/dist/types/react/useSurfaceForm.d.ts +1 -11
- package/dist/types/surfaceForms.d.ts +28 -73
- package/dist/types/tracking/attachTracking.d.ts +1 -22
- package/dist/types/tracking/conversionRules.d.ts +3 -12
- package/dist/types/tracking/vendors.d.ts +3 -22
- package/dist/types/validation/attachEmailValidation.d.ts +0 -1
- package/docs/api.md +51 -39
- package/docs/reference/binding.md +86 -13
- package/docs/reference/clients.md +21 -1
- package/docs/reference/engine.md +5 -1
- package/docs/reference/events.md +4 -1
- package/docs/reference/identity.md +2 -3
- package/llms.txt +58 -10
- package/package.json +1 -1
- package/skills/surface-forms-sdk/SKILL.md +19 -6
- package/skills/surface-forms-sdk/patterns.md +30 -5
- package/dist/index.cjs.map +0 -7
- package/dist/index.mjs.map +0 -7
- package/dist/react/index.cjs.map +0 -7
- package/dist/react/index.mjs.map +0 -7
- package/dist/surface-forms-sdk.min.js.map +0 -7
- package/dist/types/bind/bindForm.d.ts.map +0 -1
- package/dist/types/bind/bindForm.test.d.ts +0 -2
- package/dist/types/bind/bindForm.test.d.ts.map +0 -1
- package/dist/types/bind/bookingWidget.d.ts.map +0 -1
- package/dist/types/bind/bookingWidget.test.d.ts +0 -2
- package/dist/types/bind/bookingWidget.test.d.ts.map +0 -1
- package/dist/types/core/client/emailValidation.d.ts.map +0 -1
- package/dist/types/core/client/emailValidation.test.d.ts +0 -2
- package/dist/types/core/client/emailValidation.test.d.ts.map +0 -1
- package/dist/types/core/client/responses.d.ts.map +0 -1
- package/dist/types/core/client/responses.test.d.ts +0 -2
- package/dist/types/core/client/responses.test.d.ts.map +0 -1
- package/dist/types/core/client/runtimeConfig.contract.test.d.ts +0 -2
- package/dist/types/core/client/runtimeConfig.contract.test.d.ts.map +0 -1
- package/dist/types/core/client/runtimeConfig.d.ts.map +0 -1
- package/dist/types/core/client/runtimeConfig.test.d.ts +0 -2
- package/dist/types/core/client/runtimeConfig.test.d.ts.map +0 -1
- package/dist/types/core/client/scheduler.contract.test.d.ts +0 -2
- package/dist/types/core/client/scheduler.contract.test.d.ts.map +0 -1
- package/dist/types/core/client/scheduler.d.ts.map +0 -1
- package/dist/types/core/client/scheduler.test.d.ts +0 -2
- package/dist/types/core/client/scheduler.test.d.ts.map +0 -1
- package/dist/types/core/client/transport.d.ts.map +0 -1
- package/dist/types/core/client/transport.test.d.ts +0 -2
- package/dist/types/core/client/transport.test.d.ts.map +0 -1
- package/dist/types/core/engine/answerAudit.d.ts.map +0 -1
- package/dist/types/core/engine/answerAudit.test.d.ts +0 -2
- package/dist/types/core/engine/answerAudit.test.d.ts.map +0 -1
- package/dist/types/core/engine/answerStates.contract.test.d.ts +0 -2
- package/dist/types/core/engine/answerStates.contract.test.d.ts.map +0 -1
- package/dist/types/core/engine/answerStates.d.ts.map +0 -1
- package/dist/types/core/engine/formEngine.d.ts.map +0 -1
- package/dist/types/core/engine/formEngine.test.d.ts +0 -2
- package/dist/types/core/engine/formEngine.test.d.ts.map +0 -1
- package/dist/types/core/engine/redirect.d.ts.map +0 -1
- package/dist/types/core/engine/redirect.test.d.ts +0 -2
- package/dist/types/core/engine/redirect.test.d.ts.map +0 -1
- package/dist/types/core/engine/responsePayload.contract.test.d.ts +0 -2
- package/dist/types/core/engine/responsePayload.contract.test.d.ts.map +0 -1
- package/dist/types/core/engine/responsePayload.d.ts.map +0 -1
- package/dist/types/core/engine/responsePayload.test.d.ts +0 -2
- package/dist/types/core/engine/responsePayload.test.d.ts.map +0 -1
- package/dist/types/core/engine/urlData.contract.test.d.ts +0 -2
- package/dist/types/core/engine/urlData.contract.test.d.ts.map +0 -1
- package/dist/types/core/engine/urlData.d.ts.map +0 -1
- package/dist/types/core/engine/urlData.test.d.ts +0 -2
- package/dist/types/core/engine/urlData.test.d.ts.map +0 -1
- package/dist/types/core/engine/urlPrefill.d.ts.map +0 -1
- package/dist/types/core/engine/urlPrefill.test.d.ts +0 -2
- package/dist/types/core/engine/urlPrefill.test.d.ts.map +0 -1
- package/dist/types/core/events/dropoffDetection.d.ts.map +0 -1
- package/dist/types/core/events/dropoffDetection.test.d.ts +0 -2
- package/dist/types/core/events/dropoffDetection.test.d.ts.map +0 -1
- package/dist/types/core/events/emitter.d.ts.map +0 -1
- package/dist/types/core/events/emitter.test.d.ts +0 -2
- package/dist/types/core/events/emitter.test.d.ts.map +0 -1
- package/dist/types/core/events/formJourneyTracker.contract.test.d.ts +0 -2
- package/dist/types/core/events/formJourneyTracker.contract.test.d.ts.map +0 -1
- package/dist/types/core/events/formJourneyTracker.d.ts.map +0 -1
- package/dist/types/core/events/formJourneyTracker.test.d.ts +0 -2
- package/dist/types/core/events/formJourneyTracker.test.d.ts.map +0 -1
- package/dist/types/core/events/pushEvents.contract.test.d.ts +0 -2
- package/dist/types/core/events/pushEvents.contract.test.d.ts.map +0 -1
- package/dist/types/core/events/pushEvents.d.ts.map +0 -1
- package/dist/types/core/events/pushEvents.test.d.ts +0 -2
- package/dist/types/core/events/pushEvents.test.d.ts.map +0 -1
- package/dist/types/core/events/startedDetection.d.ts.map +0 -1
- package/dist/types/core/events/startedDetection.test.d.ts +0 -2
- package/dist/types/core/events/startedDetection.test.d.ts.map +0 -1
- package/dist/types/core/events/viewDetection.d.ts.map +0 -1
- package/dist/types/core/events/viewDetection.test.d.ts +0 -2
- package/dist/types/core/events/viewDetection.test.d.ts.map +0 -1
- package/dist/types/core/identity/browserFingerprint.d.ts.map +0 -1
- package/dist/types/core/identity/browserFingerprint.test.d.ts +0 -2
- package/dist/types/core/identity/browserFingerprint.test.d.ts.map +0 -1
- package/dist/types/core/identity/ensureIdentified.d.ts.map +0 -1
- package/dist/types/core/identity/ensureIdentified.test.d.ts +0 -2
- package/dist/types/core/identity/ensureIdentified.test.d.ts.map +0 -1
- package/dist/types/core/identity/identify.contract.test.d.ts +0 -2
- package/dist/types/core/identity/identify.contract.test.d.ts.map +0 -1
- package/dist/types/core/identity/identify.d.ts.map +0 -1
- package/dist/types/core/identity/identify.test.d.ts +0 -2
- package/dist/types/core/identity/identify.test.d.ts.map +0 -1
- package/dist/types/core/identity/journey.contract.test.d.ts +0 -2
- package/dist/types/core/identity/journey.contract.test.d.ts.map +0 -1
- package/dist/types/core/identity/journey.d.ts.map +0 -1
- package/dist/types/core/identity/journey.test.d.ts +0 -2
- package/dist/types/core/identity/journey.test.d.ts.map +0 -1
- package/dist/types/core/identity/journey.testStubs.d.ts.map +0 -1
- package/dist/types/core/identity/leadDataCache.d.ts.map +0 -1
- package/dist/types/core/identity/leadDataCache.test.d.ts +0 -2
- package/dist/types/core/identity/leadDataCache.test.d.ts.map +0 -1
- package/dist/types/enrichment/attachEnrichment.d.ts.map +0 -1
- package/dist/types/enrichment/attachEnrichment.test.d.ts +0 -2
- package/dist/types/enrichment/attachEnrichment.test.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/react/index.d.ts.map +0 -1
- package/dist/types/react/ssr.test.d.ts +0 -2
- package/dist/types/react/ssr.test.d.ts.map +0 -1
- package/dist/types/react/useSurfaceForm.d.ts.map +0 -1
- package/dist/types/react/useSurfaceForm.test.d.ts +0 -2
- package/dist/types/react/useSurfaceForm.test.d.ts.map +0 -1
- package/dist/types/surfaceForms.d.ts.map +0 -1
- package/dist/types/surfaceForms.test.d.ts +0 -2
- package/dist/types/surfaceForms.test.d.ts.map +0 -1
- package/dist/types/tracking/attachTracking.d.ts.map +0 -1
- package/dist/types/tracking/attachTracking.test.d.ts +0 -2
- package/dist/types/tracking/attachTracking.test.d.ts.map +0 -1
- package/dist/types/tracking/conversionRules.contract.test.d.ts +0 -2
- package/dist/types/tracking/conversionRules.contract.test.d.ts.map +0 -1
- package/dist/types/tracking/conversionRules.d.ts.map +0 -1
- package/dist/types/tracking/conversionRules.test.d.ts +0 -2
- package/dist/types/tracking/conversionRules.test.d.ts.map +0 -1
- package/dist/types/tracking/vendors.d.ts.map +0 -1
- package/dist/types/tracking/vendors.test.d.ts +0 -2
- package/dist/types/tracking/vendors.test.d.ts.map +0 -1
- package/dist/types/validation/attachEmailValidation.d.ts.map +0 -1
- package/dist/types/validation/attachEmailValidation.test.d.ts +0 -2
- 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
|
|
119
|
+
## Scheduler step
|
|
120
120
|
|
|
121
|
-
|
|
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.
|
|
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
|
|
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
|
|