@flamingo-stack/openframe-frontend-core 0.0.676-snapshot.20260928181831 → 0.0.676
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/dist/components/meeting-scheduler/booking-form.d.ts +2 -21
- package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.cjs +38 -92
- package/dist/components/meeting-scheduler/index.cjs.map +1 -1
- package/dist/components/meeting-scheduler/index.d.ts +6 -7
- package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.js +12 -66
- package/dist/components/meeting-scheduler/index.js.map +1 -1
- package/dist/schemas/meeting-booking-schema.cjs +0 -16
- package/dist/schemas/meeting-booking-schema.cjs.map +1 -1
- package/dist/schemas/meeting-booking-schema.d.ts +0 -34
- package/dist/schemas/meeting-booking-schema.d.ts.map +1 -1
- package/dist/schemas/meeting-booking-schema.js +1 -15
- package/dist/schemas/meeting-booking-schema.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/meeting-scheduler-details-first.test.tsx +1 -42
- package/src/components/meeting-scheduler/booking-form.tsx +17 -91
- package/src/components/meeting-scheduler/index.tsx +5 -7
- package/src/schemas/meeting-booking-schema.ts +0 -34
|
@@ -68,12 +68,11 @@ export interface HubSpotMeetingSchedulerProps {
|
|
|
68
68
|
*/
|
|
69
69
|
detailsForm?: ComponentType<BookingFormProps>;
|
|
70
70
|
/**
|
|
71
|
-
* The DATA form of the same override: `fieldRows
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* cannot.
|
|
71
|
+
* The DATA form of the same override: `fieldRows` and a host consent row,
|
|
72
|
+
* spread onto whichever form renders. Serialisable, so a Server Component
|
|
73
|
+
* can pass it across the RSC boundary where a component cannot.
|
|
75
74
|
*/
|
|
76
|
-
detailsFormProps?: Pick<BookingFormProps, 'fieldRows' | 'consent'
|
|
75
|
+
detailsFormProps?: Pick<BookingFormProps, 'fieldRows' | 'consent'>;
|
|
77
76
|
/** Form rescue for the details form (`RESCUE_FORMS.meetingBooking`). OPT-IN:
|
|
78
77
|
* omitted or `null` saves nothing. */
|
|
79
78
|
rescue?: FormRescueDefinition | null;
|
|
@@ -175,8 +174,8 @@ export declare function SchedulerDegradedCard({ flow, className, message, action
|
|
|
175
174
|
children?: ReactNode;
|
|
176
175
|
}): import("react").JSX.Element;
|
|
177
176
|
export declare function HubSpotMeetingScheduler({ meetingId, apiBaseUrl, initialAvailability, title, description, hosts, displayTimezone, fallbackUrl, onBack, onBooked, onStageChange, className, flow, detailsForm: DetailsForm, detailsFormProps, rescue, }: HubSpotMeetingSchedulerProps): import("react").JSX.Element;
|
|
178
|
-
export { BookingForm, BookingFormSkeleton, type BookingFormProps, type BookingFieldRow, type BookingFieldSlot, type
|
|
177
|
+
export { BookingForm, BookingFormSkeleton, type BookingFormProps, type BookingFieldRow, type BookingFieldSlot, type BookingFormConsent, } from './booking-form';
|
|
179
178
|
export { MeetingSchedulerDirectory, MeetingSchedulerDirectoryRowSkeleton, type MeetingSchedulerDirectoryProps, } from './directory';
|
|
180
179
|
export type { MeetingAvailability, BookingConfirmation, MeetingBookingErrorCode, MeetingHost };
|
|
181
|
-
export type { SchedulingLink, SchedulingLinksPayload
|
|
180
|
+
export type { SchedulingLink, SchedulingLinksPayload } from '../../schemas/meeting-booking-schema';
|
|
182
181
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/meeting-scheduler/index.tsx"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMtD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EACjB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAA6B,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/F,OAAO,EAA0D,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAwB/G,MAAM,WAAW,4BAA4B;IAC3C,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mEAAmE;IACnE,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC9C
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/meeting-scheduler/index.tsx"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMtD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EACjB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAA6B,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/F,OAAO,EAA0D,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAwB/G,MAAM,WAAW,4BAA4B;IAC3C,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mEAAmE;IACnE,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC9C;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;IACnE;2CACuC;IACvC,MAAM,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACtC;AAED,KAAK,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;AAC7C,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,aAAa,CAAC;AA4ClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AAEtE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iCAAiC,kCAAkC,CAAC;AAEjF,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,eAAe,CAAC;AAE3D,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,EAAE,aAA4B,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CACzC,aAAa,EACb;IAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAStG,CAAC;AAqDF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,IAA6B,EAC7B,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GACT,EAAE;IACD,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gHAAgH;IAChH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAQA;AAqBD,wBAAgB,uBAAuB,CAAC,EACtC,SAAS,EACT,UAAe,EACf,mBAAmB,EACnB,KAAK,EACL,WAAW,EACX,KAAK,EACL,eAAe,EACf,WAAW,EACX,MAAM,EACN,QAAQ,EACR,aAAa,EACb,SAAS,EACT,IAA6B,EAC7B,WAAW,EAAE,WAAyB,EACtC,gBAAgB,EAChB,MAAa,GACd,EAAE,4BAA4B,+BAsjB9B;AAKD,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,yBAAyB,EACzB,oCAAoC,EACpC,KAAK,8BAA8B,GACpC,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,WAAW,EAAE,CAAC;AAC/F,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC"}
|
|
@@ -331,20 +331,6 @@ function makeDeferredBookingSchema(formFields, legalConsent) {
|
|
|
331
331
|
timezone: TIMEZONE.nullish()
|
|
332
332
|
});
|
|
333
333
|
}
|
|
334
|
-
function emailDomainDenied(email, rule) {
|
|
335
|
-
if (typeof email !== "string") return false;
|
|
336
|
-
const domain = email.split("@")[1]?.trim().toLowerCase();
|
|
337
|
-
if (domain === void 0 || domain === "") return false;
|
|
338
|
-
return rule.domains.includes(domain);
|
|
339
|
-
}
|
|
340
|
-
function withDeniedEmailDomains(schema, rule) {
|
|
341
|
-
if (!rule) return schema;
|
|
342
|
-
return schema.superRefine((values, ctx) => {
|
|
343
|
-
if (emailDomainDenied(values.email, rule)) {
|
|
344
|
-
ctx.addIssue({ code: "custom", path: ["email"], message: rule.message });
|
|
345
|
-
}
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
334
|
|
|
349
335
|
// src/hooks/use-meeting-booking.ts
|
|
350
336
|
var AVAILABILITY_STALE_MS = 0;
|
|
@@ -481,7 +467,6 @@ var FIELD_CONTROLS = {
|
|
|
481
467
|
type: field.inputType ?? "text",
|
|
482
468
|
required: field.required,
|
|
483
469
|
"aria-invalid": Boolean(error),
|
|
484
|
-
invalid: Boolean(error),
|
|
485
470
|
autoComplete: field.autoComplete,
|
|
486
471
|
placeholder: placeholderFor(field),
|
|
487
472
|
...register(registerName)
|
|
@@ -493,7 +478,6 @@ var FIELD_CONTROLS = {
|
|
|
493
478
|
id,
|
|
494
479
|
required: field.required,
|
|
495
480
|
"aria-invalid": Boolean(error),
|
|
496
|
-
invalid: Boolean(error),
|
|
497
481
|
placeholder: placeholderFor(field),
|
|
498
482
|
...register(registerName)
|
|
499
483
|
}
|
|
@@ -507,7 +491,6 @@ var FIELD_CONTROLS = {
|
|
|
507
491
|
step: "any",
|
|
508
492
|
required: field.required,
|
|
509
493
|
"aria-invalid": Boolean(error),
|
|
510
|
-
invalid: Boolean(error),
|
|
511
494
|
...register(registerName, { setValueAs: canonicalNumber })
|
|
512
495
|
}
|
|
513
496
|
),
|
|
@@ -520,7 +503,6 @@ var FIELD_CONTROLS = {
|
|
|
520
503
|
autoComplete: "tel",
|
|
521
504
|
required: field.required,
|
|
522
505
|
"aria-invalid": Boolean(error),
|
|
523
|
-
invalid: Boolean(error),
|
|
524
506
|
placeholder: placeholderFor(field),
|
|
525
507
|
...register(registerName, { setValueAs: trimmed })
|
|
526
508
|
}
|
|
@@ -534,7 +516,6 @@ var FIELD_CONTROLS = {
|
|
|
534
516
|
type: "date",
|
|
535
517
|
required: field.required,
|
|
536
518
|
"aria-invalid": Boolean(error),
|
|
537
|
-
invalid: Boolean(error),
|
|
538
519
|
...register(registerName)
|
|
539
520
|
}
|
|
540
521
|
)
|
|
@@ -545,16 +526,7 @@ var FIELD_CONTROLS = {
|
|
|
545
526
|
control,
|
|
546
527
|
name: registerName,
|
|
547
528
|
render: ({ field: rhf }) => /* @__PURE__ */ jsxs(Select, { value: rhf.value ?? "", onValueChange: rhf.onChange, children: [
|
|
548
|
-
/* @__PURE__ */ jsx(
|
|
549
|
-
SelectTrigger,
|
|
550
|
-
{
|
|
551
|
-
id,
|
|
552
|
-
"aria-required": field.required || void 0,
|
|
553
|
-
"aria-invalid": Boolean(error),
|
|
554
|
-
invalid: Boolean(error),
|
|
555
|
-
children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select\u2026" })
|
|
556
|
-
}
|
|
557
|
-
),
|
|
529
|
+
/* @__PURE__ */ jsx(SelectTrigger, { id, "aria-required": field.required || void 0, "aria-invalid": Boolean(error), children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select\u2026" }) }),
|
|
558
530
|
/* @__PURE__ */ jsx(SelectContent, { children: (field.options ?? []).map((opt) => /* @__PURE__ */ jsx(SelectItem, { value: opt, children: optionLabel(field, opt) }, opt)) })
|
|
559
531
|
] })
|
|
560
532
|
}
|
|
@@ -644,8 +616,6 @@ function BookingForm({
|
|
|
644
616
|
submitLabel,
|
|
645
617
|
footerNote,
|
|
646
618
|
fieldRows,
|
|
647
|
-
fieldCopy,
|
|
648
|
-
deniedEmailDomains,
|
|
649
619
|
consent,
|
|
650
620
|
isSubmitting,
|
|
651
621
|
onSubmit,
|
|
@@ -656,8 +626,8 @@ function BookingForm({
|
|
|
656
626
|
const { formFields, legalConsent } = availability;
|
|
657
627
|
const supportedFields = useMemo(() => normalizeFormFields(formFields), [formFields]);
|
|
658
628
|
const schema = useMemo(
|
|
659
|
-
() =>
|
|
660
|
-
[supportedFields, legalConsent
|
|
629
|
+
() => makeDeferredBookingSchema(supportedFields, legalConsent),
|
|
630
|
+
[supportedFields, legalConsent]
|
|
661
631
|
);
|
|
662
632
|
const consentDefaults = useMemo(
|
|
663
633
|
() => (legalConsent?.communicationConsentCheckboxes ?? []).map((c) => ({
|
|
@@ -720,16 +690,6 @@ function BookingForm({
|
|
|
720
690
|
fieldPath: (name) => BUILT_IN_BOOKING_FIELDS.some((field) => field.name === name) ? name : `formFields.${name}`
|
|
721
691
|
}
|
|
722
692
|
);
|
|
723
|
-
const { toast } = useToast();
|
|
724
|
-
const onInvalid = () => {
|
|
725
|
-
if (deniedEmailDomains && emailDomainDenied(getValues("email"), deniedEmailDomains)) {
|
|
726
|
-
toast({
|
|
727
|
-
variant: "error",
|
|
728
|
-
title: "Check your email address",
|
|
729
|
-
description: deniedEmailDomains.message
|
|
730
|
-
});
|
|
731
|
-
}
|
|
732
|
-
};
|
|
733
693
|
const submitValid = handleSubmit(async (data) => {
|
|
734
694
|
if (consentMissing) return;
|
|
735
695
|
if (deferSlot) {
|
|
@@ -746,7 +706,7 @@ function BookingForm({
|
|
|
746
706
|
...getSignals(),
|
|
747
707
|
...formRescue.submitFields()
|
|
748
708
|
});
|
|
749
|
-
}
|
|
709
|
+
});
|
|
750
710
|
const submit = (event) => {
|
|
751
711
|
if (consentMissing) setConsentError(consent?.errorMessage ?? "Please agree to continue.");
|
|
752
712
|
return submitValid(event);
|
|
@@ -755,28 +715,14 @@ function BookingForm({
|
|
|
755
715
|
const err = errors.formFields?.[name];
|
|
756
716
|
return err?.message;
|
|
757
717
|
};
|
|
758
|
-
const renderField = (field, where) => {
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
required: shown.required,
|
|
767
|
-
error: where.error,
|
|
768
|
-
children: FIELD_CONTROLS[shown.type]({
|
|
769
|
-
field: shown,
|
|
770
|
-
id: where.id,
|
|
771
|
-
registerName: where.registerName,
|
|
772
|
-
error: where.error,
|
|
773
|
-
register,
|
|
774
|
-
control
|
|
775
|
-
})
|
|
776
|
-
},
|
|
777
|
-
shown.name
|
|
778
|
-
);
|
|
779
|
-
};
|
|
718
|
+
const renderField = (field, where) => /* @__PURE__ */ jsx(FieldWrapper, { label: field.label, htmlFor: where.id, required: field.required, error: where.error, children: FIELD_CONTROLS[field.type]({
|
|
719
|
+
field,
|
|
720
|
+
id: where.id,
|
|
721
|
+
registerName: where.registerName,
|
|
722
|
+
error: where.error,
|
|
723
|
+
register,
|
|
724
|
+
control
|
|
725
|
+
}) }, field.name);
|
|
780
726
|
const builtInFields = Object.fromEntries(
|
|
781
727
|
BUILT_IN_BOOKING_FIELDS.map((field) => [
|
|
782
728
|
field.name,
|