@flamingo-stack/openframe-frontend-core 0.0.596-2034.5684.1 → 0.0.596-2034.5686.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.
- package/dist/__tests__/fixtures/meeting-booking.d.ts +21 -0
- package/dist/__tests__/fixtures/meeting-booking.d.ts.map +1 -1
- package/dist/{chunk-NE3SHUIJ.cjs → chunk-25LZZY6E.cjs} +3 -3
- package/dist/{chunk-NE3SHUIJ.cjs.map → chunk-25LZZY6E.cjs.map} +1 -1
- package/dist/{chunk-CBR4H6JJ.cjs → chunk-3IT35YDV.cjs} +53 -53
- package/dist/{chunk-CBR4H6JJ.cjs.map → chunk-3IT35YDV.cjs.map} +1 -1
- package/dist/{chunk-WTK5YZYU.js → chunk-A6YERC4N.js} +2 -2
- package/dist/{chunk-XNZMKCA4.js → chunk-AGKFT4FA.js} +5 -5
- package/dist/{chunk-QAJXIOK2.js → chunk-AYMBMVOD.js} +2 -2
- package/dist/{chunk-7XHONLYQ.js → chunk-BLYQD3PG.js} +2 -2
- package/dist/{chunk-WDOERQZK.cjs → chunk-D3Q3VYRU.cjs} +16 -16
- package/dist/{chunk-WDOERQZK.cjs.map → chunk-D3Q3VYRU.cjs.map} +1 -1
- package/dist/{chunk-DD64DQHM.cjs → chunk-E4YWJY3A.cjs} +4 -4
- package/dist/{chunk-DD64DQHM.cjs.map → chunk-E4YWJY3A.cjs.map} +1 -1
- package/dist/{chunk-E7FDTOJ6.js → chunk-FGHJ3BC7.js} +3 -3
- package/dist/{chunk-E6NN7MAN.js → chunk-FIQIT6HX.js} +2 -2
- package/dist/{chunk-J2OCCRFC.js → chunk-GZ76RASF.js} +4 -4
- package/dist/{chunk-BC73KAXX.cjs → chunk-HPUD7X67.cjs} +4 -4
- package/dist/{chunk-BC73KAXX.cjs.map → chunk-HPUD7X67.cjs.map} +1 -1
- package/dist/{chunk-B3446RB6.cjs → chunk-IDDGXYES.cjs} +17 -17
- package/dist/{chunk-B3446RB6.cjs.map → chunk-IDDGXYES.cjs.map} +1 -1
- package/dist/{chunk-ESHCKTES.js → chunk-J5EA7PMY.js} +4 -4
- package/dist/{chunk-3PUXHFC4.js → chunk-JVYNMMNE.js} +3 -3
- package/dist/{chunk-QT6Q6SUK.js → chunk-KOLVBEW5.js} +1 -1
- package/dist/{chunk-QT6Q6SUK.js.map → chunk-KOLVBEW5.js.map} +1 -1
- package/dist/{chunk-NBJELHZE.cjs → chunk-MN4TFBRA.cjs} +3 -3
- package/dist/{chunk-NBJELHZE.cjs.map → chunk-MN4TFBRA.cjs.map} +1 -1
- package/dist/{chunk-C2UBAAGD.cjs → chunk-N6HNK25A.cjs} +1 -1
- package/dist/{chunk-C2UBAAGD.cjs.map → chunk-N6HNK25A.cjs.map} +1 -1
- package/dist/{chunk-NTJGRZ7G.cjs → chunk-OI7RNQAS.cjs} +33 -33
- package/dist/{chunk-NTJGRZ7G.cjs.map → chunk-OI7RNQAS.cjs.map} +1 -1
- package/dist/{chunk-OKCGXXEK.js → chunk-PO4ATWE4.js} +2 -2
- package/dist/{chunk-X6TLDYMG.js → chunk-QNZM43HU.js} +3 -3
- package/dist/{chunk-6RISTRR3.cjs → chunk-QVOGALQE.cjs} +3 -3
- package/dist/{chunk-6RISTRR3.cjs.map → chunk-QVOGALQE.cjs.map} +1 -1
- package/dist/{chunk-IJ4SGRAN.js → chunk-S7LV66HD.js} +6 -6
- package/dist/{chunk-6X63WX5D.cjs → chunk-SLIUM3VO.cjs} +34 -34
- package/dist/{chunk-6X63WX5D.cjs.map → chunk-SLIUM3VO.cjs.map} +1 -1
- package/dist/{chunk-XTZECFMT.cjs → chunk-TDLETTI4.cjs} +10 -10
- package/dist/{chunk-XTZECFMT.cjs.map → chunk-TDLETTI4.cjs.map} +1 -1
- package/dist/{chunk-S2WP7ELW.js → chunk-TYURDSIN.js} +34 -32
- package/dist/chunk-TYURDSIN.js.map +1 -0
- package/dist/{chunk-DR4WXTKP.cjs → chunk-TZK5N6AH.cjs} +83 -81
- package/dist/chunk-TZK5N6AH.cjs.map +1 -0
- package/dist/{chunk-EM3T7YXE.js → chunk-Y6JB7X5Y.js} +2 -2
- package/dist/{chunk-HCHTKE6I.cjs → chunk-YP56SX7C.cjs} +3 -3
- package/dist/{chunk-HCHTKE6I.cjs.map → chunk-YP56SX7C.cjs.map} +1 -1
- package/dist/{chunk-UG43WQ2C.cjs → chunk-YQYOEGAT.cjs} +23 -23
- package/dist/{chunk-UG43WQ2C.cjs.map → chunk-YQYOEGAT.cjs.map} +1 -1
- package/dist/{chunk-YZALGXOM.js → chunk-ZVBYWM5Z.js} +2 -2
- package/dist/{chunk-ANGSMT5Q.cjs → chunk-ZXEYS2XP.cjs} +17 -17
- package/dist/{chunk-ANGSMT5Q.cjs.map → chunk-ZXEYS2XP.cjs.map} +1 -1
- package/dist/components/case-studies/index.cjs +9 -9
- package/dist/components/case-studies/index.js +3 -3
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/docs/index.cjs +7 -7
- package/dist/components/docs/index.js +6 -6
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/index.js +3 -3
- package/dist/components/faq/index.cjs +4 -4
- package/dist/components/faq/index.js +3 -3
- package/dist/components/features/index.cjs +3 -3
- package/dist/components/features/index.js +2 -2
- package/dist/components/help-center-pages/index.cjs +23 -23
- package/dist/components/help-center-pages/index.js +14 -14
- package/dist/components/index.cjs +35 -33
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +15 -13
- package/dist/components/index.js.map +1 -1
- package/dist/components/meeting-scheduler/booking-form.d.ts +15 -3
- package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.cjs +81 -89
- package/dist/components/meeting-scheduler/index.cjs.map +1 -1
- package/dist/components/meeting-scheduler/index.d.ts +2 -0
- package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.js +56 -64
- package/dist/components/meeting-scheduler/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +6 -6
- package/dist/components/navigation/index.js +5 -5
- package/dist/components/onboarding-guides/index.cjs +6 -6
- package/dist/components/onboarding-guides/index.js +5 -5
- package/dist/components/tickets/index.cjs +7 -7
- package/dist/components/tickets/index.js +6 -6
- package/dist/components/ui/benefit-card.d.ts +7 -0
- package/dist/components/ui/benefit-card.d.ts.map +1 -1
- package/dist/components/ui/field-wrapper.d.ts +4 -4
- package/dist/components/ui/file-manager/index.cjs +4 -4
- package/dist/components/ui/file-manager/index.js +1 -1
- package/dist/components/ui/index.cjs +5 -3
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.js +4 -2
- package/dist/index.cjs +9 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +8 -6
- package/dist/index.js.map +1 -1
- package/dist/schemas/meeting-booking-schema.cjs.map +1 -1
- package/dist/schemas/meeting-booking-schema.d.ts.map +1 -1
- package/dist/schemas/meeting-booking-schema.js.map +1 -1
- package/dist/utils/hubspot-meetings-convention.d.ts +1 -1
- package/dist/utils/hubspot-meetings-convention.d.ts.map +1 -1
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/benefit-card-border.test.ts +29 -0
- package/src/__tests__/booking-form-field-rows.test.tsx +9 -47
- package/src/__tests__/booking-form-number-field.test.tsx +14 -44
- package/src/__tests__/fixtures/meeting-booking.tsx +61 -0
- package/src/__tests__/meeting-scheduler-details-first.test.tsx +3 -6
- package/src/components/meeting-scheduler/booking-form.tsx +96 -70
- package/src/components/meeting-scheduler/index.tsx +24 -14
- package/src/components/ui/benefit-card.tsx +45 -39
- package/src/components/ui/field-wrapper.tsx +4 -4
- package/src/schemas/meeting-booking-schema.ts +1 -0
- package/src/utils/hubspot-meetings-convention.ts +1 -1
- package/dist/chunk-DR4WXTKP.cjs.map +0 -1
- package/dist/chunk-S2WP7ELW.js.map +0 -1
- package/src/__tests__/fixtures/meeting-booking.ts +0 -27
- /package/dist/{chunk-WTK5YZYU.js.map → chunk-A6YERC4N.js.map} +0 -0
- /package/dist/{chunk-XNZMKCA4.js.map → chunk-AGKFT4FA.js.map} +0 -0
- /package/dist/{chunk-QAJXIOK2.js.map → chunk-AYMBMVOD.js.map} +0 -0
- /package/dist/{chunk-7XHONLYQ.js.map → chunk-BLYQD3PG.js.map} +0 -0
- /package/dist/{chunk-E7FDTOJ6.js.map → chunk-FGHJ3BC7.js.map} +0 -0
- /package/dist/{chunk-E6NN7MAN.js.map → chunk-FIQIT6HX.js.map} +0 -0
- /package/dist/{chunk-J2OCCRFC.js.map → chunk-GZ76RASF.js.map} +0 -0
- /package/dist/{chunk-ESHCKTES.js.map → chunk-J5EA7PMY.js.map} +0 -0
- /package/dist/{chunk-3PUXHFC4.js.map → chunk-JVYNMMNE.js.map} +0 -0
- /package/dist/{chunk-OKCGXXEK.js.map → chunk-PO4ATWE4.js.map} +0 -0
- /package/dist/{chunk-X6TLDYMG.js.map → chunk-QNZM43HU.js.map} +0 -0
- /package/dist/{chunk-IJ4SGRAN.js.map → chunk-S7LV66HD.js.map} +0 -0
- /package/dist/{chunk-EM3T7YXE.js.map → chunk-Y6JB7X5Y.js.map} +0 -0
- /package/dist/{chunk-YZALGXOM.js.map → chunk-ZVBYWM5Z.js.map} +0 -0
|
@@ -10,8 +10,8 @@ export interface BookingFieldSlot {
|
|
|
10
10
|
/** Columns out of four at `md` and up. Defaults to an even split of the row. */
|
|
11
11
|
span?: BookingFieldSpan;
|
|
12
12
|
}
|
|
13
|
-
/** Columns out of
|
|
14
|
-
export type BookingFieldSpan =
|
|
13
|
+
/** Columns out of `GRID_COLUMNS` at `md` and up — the keys of `SPAN_CLASS`. */
|
|
14
|
+
export type BookingFieldSpan = keyof typeof SPAN_CLASS;
|
|
15
15
|
export type BookingFieldRow = BookingFieldSlot[];
|
|
16
16
|
/**
|
|
17
17
|
* A HOST-supplied consent row — the block the waitlist form draws for its SMS
|
|
@@ -31,6 +31,16 @@ export interface BookingFormConsent {
|
|
|
31
31
|
/** Shown under the row when Continue is pressed unticked. */
|
|
32
32
|
errorMessage?: string;
|
|
33
33
|
}
|
|
34
|
+
/** Static so Tailwind's scanner sees every class — a template built from a
|
|
35
|
+
* runtime span would compile to nothing. */
|
|
36
|
+
declare const SPAN_CLASS: {
|
|
37
|
+
readonly 1: "md:col-span-1";
|
|
38
|
+
readonly 2: "md:col-span-2";
|
|
39
|
+
readonly 3: "md:col-span-3";
|
|
40
|
+
readonly 4: "md:col-span-4";
|
|
41
|
+
};
|
|
42
|
+
/** The submit copy every standalone `BookingForm` gets; the slot-first preset reads the same constant. */
|
|
43
|
+
export declare const DEFAULT_SUBMIT_LABEL = "Confirm Booking";
|
|
34
44
|
/** The even split of four columns over `count` slots; a remainder goes to the
|
|
35
45
|
* leading slots (three slots → 2/1/1), so a row never leaves a trailing gap. */
|
|
36
46
|
export declare const evenSpan: (count: number, index: number) => BookingFieldSpan;
|
|
@@ -100,7 +110,9 @@ export declare function BookingForm({ availability, meetingId, startTimeMs, dura
|
|
|
100
110
|
* this card. Same footprint discipline as its sibling: fixed heights, no shift
|
|
101
111
|
* when the real form swaps in.
|
|
102
112
|
*/
|
|
103
|
-
export declare function BookingFormSkeleton({ fieldRows }: {
|
|
113
|
+
export declare function BookingFormSkeleton({ fieldRows, footerNote }: {
|
|
104
114
|
fieldRows?: BookingFieldRow[];
|
|
115
|
+
footerNote?: string;
|
|
105
116
|
}): import("react").JSX.Element;
|
|
117
|
+
export {};
|
|
106
118
|
//# sourceMappingURL=booking-form.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booking-form.d.ts","sourceRoot":"","sources":["../../../src/components/meeting-scheduler/booking-form.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAO,EAEL,KAAK,uBAAuB,EAM5B,KAAK,mBAAmB,EAIzB,MAAM,sCAAsC,CAAC;AAqB9C;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yFAAyF;IACzF,IAAI,EAAE,uBAAuB,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,gFAAgF;IAChF,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED
|
|
1
|
+
{"version":3,"file":"booking-form.d.ts","sourceRoot":"","sources":["../../../src/components/meeting-scheduler/booking-form.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAO,EAEL,KAAK,uBAAuB,EAM5B,KAAK,mBAAmB,EAIzB,MAAM,sCAAsC,CAAC;AAqB9C;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yFAAyF;IACzF,IAAI,EAAE,uBAAuB,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,gFAAgF;IAChF,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,UAAU,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG,gBAAgB,EAAE,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAiBD;6CAC6C;AAC7C,QAAA,MAAM,UAAU;;;;;CAKN,CAAC;AAKX,0GAA0G;AAC1G,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AAYtD;iFACiF;AACjF,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM,KAAG,gBAIvD,CAAC;AAoJF,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;qEACiE;IACjE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,uFAAuF;IACvF,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,mFAAmF;IACnF,kBAAkB,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CACnD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,EAC1B,YAAY,EACZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,QAAQ,EACR,SAAiB,EACjB,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,kBAAkB,EAClB,UAAU,GACX,EAAE,gBAAgB,+BAmTlB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,+BA2BpH"}
|
|
@@ -23,7 +23,7 @@ var _chunkO4VZOA2Qcjs = require('../../chunk-O4VZOA2Q.cjs');
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
var
|
|
26
|
+
var _chunkTZK5N6AHcjs = require('../../chunk-TZK5N6AH.cjs');
|
|
27
27
|
require('../../chunk-GQWM3ECA.cjs');
|
|
28
28
|
require('../../chunk-TON3YCCW.cjs');
|
|
29
29
|
|
|
@@ -40,7 +40,7 @@ var _chunkH64ZHSYRcjs = require('../../chunk-H64ZHSYR.cjs');
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
var
|
|
43
|
+
var _chunkN6HNK25Acjs = require('../../chunk-N6HNK25A.cjs');
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
var _chunkL7GNBUXFcjs = require('../../chunk-L7GNBUXF.cjs');
|
|
@@ -252,7 +252,7 @@ function useMeetingBooking(options) {
|
|
|
252
252
|
const seededOffset = _optionalChain([initialAvailability, 'optionalAccess', _3 => _3.meetingId]) === meetingId ? initialAvailability.monthOffset : void 0;
|
|
253
253
|
const [monthOffset, setMonthOffsetState] = _react.useState.call(void 0, _nullishCoalesce(seededOffset, () => ( 0)));
|
|
254
254
|
const setMonthOffset = _react.useCallback.call(void 0, (offset) => {
|
|
255
|
-
setMonthOffsetState(Math.max(0, Math.min(
|
|
255
|
+
setMonthOffsetState(Math.max(0, Math.min(_chunkTZK5N6AHcjs.MAX_MONTH_OFFSET, offset)));
|
|
256
256
|
}, []);
|
|
257
257
|
const prevMeetingIdRef = _react.useRef.call(void 0, meetingId);
|
|
258
258
|
_react.useLayoutEffect.call(void 0, () => {
|
|
@@ -337,17 +337,25 @@ var _jsxruntime = require('react/jsx-runtime');
|
|
|
337
337
|
var FORM_STACK = "flex flex-col gap-[var(--spacing-system-l)]";
|
|
338
338
|
var ROW_GRID = "grid grid-cols-2 gap-x-[var(--spacing-system-m)] gap-y-[var(--spacing-system-lf)] md:grid-cols-4";
|
|
339
339
|
var HOST_CONSENT_KEY = "hostConsent";
|
|
340
|
+
var GRID_COLUMNS = 4;
|
|
340
341
|
var SPAN_CLASS = {
|
|
341
342
|
1: "md:col-span-1",
|
|
342
343
|
2: "md:col-span-2",
|
|
343
344
|
3: "md:col-span-3",
|
|
344
345
|
4: "md:col-span-4"
|
|
345
346
|
};
|
|
347
|
+
var FIELD_SKELETON_CLASS = "h-[4.75rem] w-full";
|
|
348
|
+
var DEFAULT_SUBMIT_LABEL = "Confirm Booking";
|
|
349
|
+
var FOOTER_ROW_CLASS = "flex flex-wrap items-center justify-between gap-[var(--spacing-system-m)]";
|
|
350
|
+
var FOOTER_BARE_CLASS = "flex";
|
|
351
|
+
var SUBMIT_WIDE_CLASS = "md:w-60";
|
|
352
|
+
var DEFAULT_FIELD_ROWS = [[{ name: "email" }], [{ name: "firstName" }, { name: "lastName" }]];
|
|
346
353
|
var evenSpan = (count, index) => {
|
|
347
|
-
const base = Math.floor(
|
|
348
|
-
const extra =
|
|
349
|
-
return Math.min(
|
|
354
|
+
const base = Math.floor(GRID_COLUMNS / Math.max(1, count));
|
|
355
|
+
const extra = GRID_COLUMNS - base * count;
|
|
356
|
+
return Math.min(GRID_COLUMNS, Math.max(1, index < extra ? base + 1 : base));
|
|
350
357
|
};
|
|
358
|
+
var slotColumnClass = (row, slot, index) => _chunk23V5BSHDcjs.cn.call(void 0, row.length === 2 ? "col-span-1" : "col-span-2", SPAN_CLASS[_nullishCoalesce(slot.span, () => ( evenSpan(row.length, index)))]);
|
|
351
359
|
var placeholderFor = (field) => _nullishCoalesce(field.placeholder, () => ( _optionalChain([fieldTypeSpec, 'call', _5 => _5(field.type), 'access', _6 => _6.placeholder, 'optionalCall', _7 => _7(field)])));
|
|
352
360
|
var canonicalNumber = (v) => {
|
|
353
361
|
const s = String(_nullishCoalesce(v, () => ( ""))).trim();
|
|
@@ -359,7 +367,7 @@ var canonicalNumber = (v) => {
|
|
|
359
367
|
};
|
|
360
368
|
var FIELD_CONTROLS = {
|
|
361
369
|
text: ({ field, id, registerName, error, register }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
362
|
-
|
|
370
|
+
_chunkN6HNK25Acjs.Input,
|
|
363
371
|
{
|
|
364
372
|
id,
|
|
365
373
|
type: _nullishCoalesce(field.inputType, () => ( "text")),
|
|
@@ -371,7 +379,7 @@ var FIELD_CONTROLS = {
|
|
|
371
379
|
}
|
|
372
380
|
),
|
|
373
381
|
textarea: ({ field, id, registerName, error, register }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
374
|
-
|
|
382
|
+
_chunkTZK5N6AHcjs.Textarea,
|
|
375
383
|
{
|
|
376
384
|
id,
|
|
377
385
|
required: field.required,
|
|
@@ -381,7 +389,7 @@ var FIELD_CONTROLS = {
|
|
|
381
389
|
}
|
|
382
390
|
),
|
|
383
391
|
number: ({ field, id, registerName, error, register }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
384
|
-
|
|
392
|
+
_chunkN6HNK25Acjs.Input,
|
|
385
393
|
{
|
|
386
394
|
id,
|
|
387
395
|
type: "number",
|
|
@@ -397,9 +405,9 @@ var FIELD_CONTROLS = {
|
|
|
397
405
|
{
|
|
398
406
|
control,
|
|
399
407
|
name: registerName,
|
|
400
|
-
render: ({ field: rhf }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
401
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
402
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
408
|
+
render: ({ field: rhf }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkTZK5N6AHcjs.Select, { value: _nullishCoalesce(rhf.value, () => ( "")), onValueChange: rhf.onChange, children: [
|
|
409
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTZK5N6AHcjs.SelectTrigger, { id, "aria-required": field.required || void 0, "aria-invalid": Boolean(error), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTZK5N6AHcjs.SelectValue, { placeholder: "Select\u2026" }) }),
|
|
410
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTZK5N6AHcjs.SelectContent, { children: (_nullishCoalesce(field.options, () => ( []))).map((opt) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTZK5N6AHcjs.SelectItem, { value: opt, children: opt }, opt)) })
|
|
403
411
|
] })
|
|
404
412
|
}
|
|
405
413
|
),
|
|
@@ -409,14 +417,14 @@ var FIELD_CONTROLS = {
|
|
|
409
417
|
control,
|
|
410
418
|
name: registerName,
|
|
411
419
|
render: ({ field: rhf }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
412
|
-
|
|
420
|
+
_chunkTZK5N6AHcjs.RadioGroup,
|
|
413
421
|
{
|
|
414
422
|
value: _nullishCoalesce(rhf.value, () => ( "")),
|
|
415
423
|
onValueChange: rhf.onChange,
|
|
416
424
|
"aria-required": field.required || void 0,
|
|
417
425
|
"aria-invalid": Boolean(error),
|
|
418
426
|
children: (_nullishCoalesce(field.options, () => ( []))).map((opt) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
|
|
419
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
427
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTZK5N6AHcjs.RadioGroupItem, { id: `${id}-${opt}`, value: opt }),
|
|
420
428
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCHIHYC7Qcjs.Label, { htmlFor: `${id}-${opt}`, children: opt })
|
|
421
429
|
] }, opt))
|
|
422
430
|
}
|
|
@@ -433,7 +441,7 @@ var FIELD_CONTROLS = {
|
|
|
433
441
|
// this id — a second inline label would double the visible text AND
|
|
434
442
|
// the accessible name.
|
|
435
443
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
436
|
-
|
|
444
|
+
_chunkN6HNK25Acjs.Checkbox,
|
|
437
445
|
{
|
|
438
446
|
id,
|
|
439
447
|
checked: Boolean(rhf.value),
|
|
@@ -541,7 +549,7 @@ function BookingForm({
|
|
|
541
549
|
const err = _optionalChain([errors, 'access', _15 => _15.formFields, 'optionalAccess', _16 => _16[name]]);
|
|
542
550
|
return _optionalChain([err, 'optionalAccess', _17 => _17.message]);
|
|
543
551
|
};
|
|
544
|
-
const renderField = (field, where) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
552
|
+
const renderField = (field, where) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN6HNK25Acjs.FieldWrapper, { label: field.label, htmlFor: where.id, required: field.required, error: where.error, children: FIELD_CONTROLS[field.type]({
|
|
545
553
|
field,
|
|
546
554
|
id: where.id,
|
|
547
555
|
registerName: where.registerName,
|
|
@@ -568,42 +576,22 @@ function BookingForm({
|
|
|
568
576
|
const declared = declaredByName.get(name);
|
|
569
577
|
return declared ? renderDeclaredField(declared) : null;
|
|
570
578
|
};
|
|
571
|
-
const placedNames =
|
|
572
|
-
const unplacedBuiltIns = fieldRows ? BUILT_IN_BOOKING_FIELDS.filter((f) => !placedNames.has(f.name)) : [];
|
|
579
|
+
const { rows: placedRows, unplacedBuiltIns, named: placedNames } = normalizeFieldRows(_nullishCoalesce(fieldRows, () => ( [])), slotResolves);
|
|
573
580
|
const unplacedFields = fieldRows ? supportedFields.filter((f) => !placedNames.has(f.name)) : [];
|
|
574
|
-
const seen = /* @__PURE__ */ new Set();
|
|
575
|
-
const placedRows = (_nullishCoalesce(fieldRows, () => ( []))).map((row) => {
|
|
576
|
-
const kept = row.filter((slot) => slotResolves(slot.name) && !seen.has(slot.name) && Boolean(seen.add(slot.name)));
|
|
577
|
-
return kept.length === row.length ? kept : kept.map((slot) => ({ name: slot.name }));
|
|
578
|
-
}).filter((row) => row.length > 0);
|
|
579
581
|
const submitButton = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
580
582
|
_chunkCJBSU3XBcjs.Button,
|
|
581
583
|
{
|
|
582
584
|
type: "submit",
|
|
583
585
|
loading: isSubmitting,
|
|
584
586
|
disabled: isSubmitting,
|
|
585
|
-
className: footerNote ?
|
|
586
|
-
children: _nullishCoalesce(submitLabel, () => (
|
|
587
|
+
className: footerNote ? SUBMIT_WIDE_CLASS : void 0,
|
|
588
|
+
children: _nullishCoalesce(submitLabel, () => ( DEFAULT_SUBMIT_LABEL))
|
|
587
589
|
}
|
|
588
590
|
);
|
|
589
591
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "form", { onSubmit: submit, className: FORM_STACK, noValidate: true, children: [
|
|
590
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
592
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTZK5N6AHcjs.HoneypotField, { ...honeypotInputProps }),
|
|
591
593
|
fieldRows ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
592
|
-
placedRows.map((row
|
|
593
|
-
"div",
|
|
594
|
-
{
|
|
595
|
-
className: _chunk23V5BSHDcjs.cn.call(void 0,
|
|
596
|
-
// A two-field row stays side by side on a phone — the rule
|
|
597
|
-
// the built-in name pair has always followed: two short
|
|
598
|
-
// fields cost one line instead of two on the layout that can
|
|
599
|
-
// least afford them.
|
|
600
|
-
row.length === 2 ? "col-span-1" : "col-span-2",
|
|
601
|
-
SPAN_CLASS[_nullishCoalesce(slot.span, () => ( evenSpan(row.length, slotIndex)))]
|
|
602
|
-
),
|
|
603
|
-
children: slotNode(slot.name)
|
|
604
|
-
},
|
|
605
|
-
slot.name
|
|
606
|
-
)) }, row.map((s) => s.name).join("|") || rowIndex)),
|
|
594
|
+
placedRows.map((row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: ROW_GRID, children: row.map((slot, slotIndex) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: slotColumnClass(row, slot, slotIndex), children: slotNode(slot.name) }, slot.name)) }, row.map((s) => s.name).join("|"))),
|
|
607
595
|
[...unplacedBuiltIns, ...unplacedFields].map((field) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react.Fragment, { children: slotNode(field.name) }, field.name))
|
|
608
596
|
] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
609
597
|
builtInFields.email,
|
|
@@ -614,7 +602,7 @@ function BookingForm({
|
|
|
614
602
|
supportedFields.map((field) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react.Fragment, { children: renderDeclaredField(field) }, field.name))
|
|
615
603
|
] }),
|
|
616
604
|
consent && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
617
|
-
|
|
605
|
+
_chunkTZK5N6AHcjs.CheckboxBlock,
|
|
618
606
|
{
|
|
619
607
|
id: "ms-host-consent",
|
|
620
608
|
checked: consented,
|
|
@@ -633,7 +621,7 @@ function BookingForm({
|
|
|
633
621
|
// box doesn't shove the submit button down the card. With no error the
|
|
634
622
|
// wrapper is `display:contents` and the panel below is the flex item,
|
|
635
623
|
// exactly as it was.
|
|
636
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
624
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN6HNK25Acjs.FieldWrapper, { error: _optionalChain([errors, 'access', _20 => _20.legalConsentResponses, 'optionalAccess', _21 => _21.message]), children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
637
625
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h6", children: legalConsent.processingConsentText }),
|
|
638
626
|
legalConsent.communicationConsentText && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h6", children: legalConsent.communicationConsentText }),
|
|
639
627
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
@@ -649,7 +637,7 @@ function BookingForm({
|
|
|
649
637
|
// same block the waitlist form uses): box + label in one
|
|
650
638
|
// bordered row.
|
|
651
639
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
652
|
-
|
|
640
|
+
_chunkTZK5N6AHcjs.CheckboxBlock,
|
|
653
641
|
{
|
|
654
642
|
id: `ms-consent-${box.communicationTypeId}`,
|
|
655
643
|
checked: _nullishCoalesce(_optionalChain([current, 'optionalAccess', _22 => _22.consented]), () => ( false)),
|
|
@@ -669,39 +657,37 @@ function BookingForm({
|
|
|
669
657
|
),
|
|
670
658
|
legalConsent.privacyPolicyText && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h6", children: legalConsent.privacyPolicyText })
|
|
671
659
|
] }) }),
|
|
672
|
-
footerNote ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className:
|
|
660
|
+
footerNote ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: FOOTER_ROW_CLASS, children: [
|
|
673
661
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h6", children: footerNote }),
|
|
674
662
|
submitButton
|
|
675
|
-
] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className:
|
|
663
|
+
] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: FOOTER_BARE_CLASS, children: submitButton })
|
|
676
664
|
] });
|
|
677
665
|
}
|
|
678
|
-
function BookingFormSkeleton({ fieldRows }) {
|
|
666
|
+
function BookingFormSkeleton({ fieldRows, footerNote }) {
|
|
679
667
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk23V5BSHDcjs.cn.call(void 0, "flex-1", FORM_STACK), children: [
|
|
680
|
-
fieldRows
|
|
681
|
-
|
|
682
|
-
fieldRows.map((row, rowIndex) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: ROW_GRID, children: row.map((slot, slotIndex) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
683
|
-
_chunkCHIHYC7Qcjs.Skeleton,
|
|
684
|
-
{
|
|
685
|
-
className: _chunk23V5BSHDcjs.cn.call(void 0,
|
|
686
|
-
"h-[4.75rem] w-full",
|
|
687
|
-
row.length === 2 ? "col-span-1" : "col-span-2",
|
|
688
|
-
SPAN_CLASS[_nullishCoalesce(slot.span, () => ( evenSpan(row.length, slotIndex)))]
|
|
689
|
-
)
|
|
690
|
-
},
|
|
691
|
-
slot.name
|
|
692
|
-
)) }, rowIndex))
|
|
693
|
-
) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
694
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-[var(--spacing-system-m)] md:grid-cols-2", children: [
|
|
695
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCHIHYC7Qcjs.Skeleton, { className: "h-[4.75rem] w-full" }),
|
|
696
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCHIHYC7Qcjs.Skeleton, { className: "h-[4.75rem] w-full" })
|
|
697
|
-
] }),
|
|
698
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCHIHYC7Qcjs.Skeleton, { className: "h-[4.75rem] w-full" }),
|
|
699
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCHIHYC7Qcjs.Skeleton, { className: "h-[7.75rem] w-full" })
|
|
700
|
-
] }),
|
|
668
|
+
skeletonRows(_nullishCoalesce(fieldRows, () => ( DEFAULT_FIELD_ROWS))).map((row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: ROW_GRID, children: row.map((slot, slotIndex) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCHIHYC7Qcjs.Skeleton, { className: _chunk23V5BSHDcjs.cn.call(void 0, FIELD_SKELETON_CLASS, slotColumnClass(row, slot, slotIndex)) }, slot.name)) }, row.map((s) => s.name).join("|"))),
|
|
669
|
+
!fieldRows && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCHIHYC7Qcjs.Skeleton, { className: "h-[7.75rem] w-full" }),
|
|
701
670
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCHIHYC7Qcjs.Skeleton, { className: "h-[4.25rem] w-full" }),
|
|
702
|
-
/* @__PURE__ */ _jsxruntime.
|
|
671
|
+
footerNote ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: FOOTER_ROW_CLASS, children: [
|
|
672
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCHIHYC7Qcjs.Skeleton, { className: "h-5 min-w-40 flex-1" }),
|
|
673
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCHIHYC7Qcjs.Skeleton, { className: _chunk23V5BSHDcjs.cn.call(void 0, "h-12 w-full", SUBMIT_WIDE_CLASS) })
|
|
674
|
+
] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: FOOTER_BARE_CLASS, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCHIHYC7Qcjs.Skeleton, { className: "h-12 w-40" }) })
|
|
703
675
|
] });
|
|
704
676
|
}
|
|
677
|
+
function normalizeFieldRows(fieldRows, resolves = () => true) {
|
|
678
|
+
const seen = /* @__PURE__ */ new Set();
|
|
679
|
+
const rows = fieldRows.map((row) => {
|
|
680
|
+
const kept = row.filter((slot) => resolves(slot.name) && !seen.has(slot.name) && Boolean(seen.add(slot.name)));
|
|
681
|
+
return kept.length === row.length ? kept : kept.map((slot) => ({ name: slot.name }));
|
|
682
|
+
}).filter((row) => row.length > 0);
|
|
683
|
+
const named = new Set(fieldRows.flat().map((slot) => slot.name));
|
|
684
|
+
const unplacedBuiltIns = BUILT_IN_BOOKING_FIELDS.filter((f) => !named.has(f.name));
|
|
685
|
+
return { rows, unplacedBuiltIns, named };
|
|
686
|
+
}
|
|
687
|
+
function skeletonRows(fieldRows) {
|
|
688
|
+
const { rows, unplacedBuiltIns } = normalizeFieldRows(fieldRows);
|
|
689
|
+
return [...rows, ...unplacedBuiltIns.map((f) => [{ name: f.name }])];
|
|
690
|
+
}
|
|
705
691
|
|
|
706
692
|
// src/components/meeting-scheduler/confirmation.tsx
|
|
707
693
|
|
|
@@ -756,7 +742,7 @@ function ContextPanelSkeleton({
|
|
|
756
742
|
backLabel = "Back"
|
|
757
743
|
}) {
|
|
758
744
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk23V5BSHDcjs.cn.call(void 0, PANEL_STACK, className), children: [
|
|
759
|
-
onBack && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
745
|
+
onBack && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTZK5N6AHcjs.BackButton, { label: backLabel, onClick: onBack, className: BACK_BUTTON_CLASS }),
|
|
760
746
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: STRIP_BODY, children: [
|
|
761
747
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: STRIP_MAIN, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: IDENTITY_ROW, children: [
|
|
762
748
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xs)] lg:flex-none", children: [
|
|
@@ -804,7 +790,7 @@ function SchedulerContextPanel({
|
|
|
804
790
|
return zones.map((tz) => ({ value: tz, label: zoneLabel(tz) }));
|
|
805
791
|
}, [timezone]);
|
|
806
792
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk23V5BSHDcjs.cn.call(void 0, PANEL_STACK, className), children: [
|
|
807
|
-
onBack && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
793
|
+
onBack && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTZK5N6AHcjs.BackButton, { label: backLabel, onClick: onBack, className: BACK_BUTTON_CLASS }),
|
|
808
794
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: STRIP_BODY, children: [
|
|
809
795
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: STRIP_MAIN, children: [
|
|
810
796
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: IDENTITY_ROW, children: [
|
|
@@ -866,7 +852,7 @@ function SchedulerContextPanel({
|
|
|
866
852
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk23V5BSHDcjs.cn.call(void 0, STRIP_ASIDE, locked && "max-lg:hidden"), children: [
|
|
867
853
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: FIELD_LABEL_CLASS, children: "Timezone" }),
|
|
868
854
|
timezone ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
869
|
-
|
|
855
|
+
_chunkTZK5N6AHcjs.Autocomplete,
|
|
870
856
|
{
|
|
871
857
|
value: timezone,
|
|
872
858
|
disabled,
|
|
@@ -953,18 +939,18 @@ var NOOP = () => void 0;
|
|
|
953
939
|
function DayCalendar({ monthOffset, onMonthOffsetChange, selectedDay, onSelectDay, slotsByDay }) {
|
|
954
940
|
const now = /* @__PURE__ */ new Date();
|
|
955
941
|
const startMonth = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
956
|
-
const endMonth = new Date(now.getFullYear(), now.getMonth() +
|
|
942
|
+
const endMonth = new Date(now.getFullYear(), now.getMonth() + _chunkTZK5N6AHcjs.MAX_MONTH_OFFSET + 1, 0);
|
|
957
943
|
const visibleMonth = new Date(now.getFullYear(), now.getMonth() + monthOffset, 1);
|
|
958
944
|
const dayHasNoSlots = _react.useCallback.call(void 0, (day) => !_optionalChain([slotsByDay, 'optionalAccess', _27 => _27.has, 'call', _28 => _28(calendarDayKey(day))]), [slotsByDay]);
|
|
959
945
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-h-0 flex-1 flex-col", "aria-busy": slotsByDay === null, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
960
|
-
|
|
946
|
+
_chunkTZK5N6AHcjs.DatePickerCalendar,
|
|
961
947
|
{
|
|
962
948
|
mode: "single",
|
|
963
949
|
bare: true,
|
|
964
950
|
month: visibleMonth,
|
|
965
951
|
onMonthChange: (month) => {
|
|
966
952
|
const offset = (month.getFullYear() - now.getFullYear()) * 12 + (month.getMonth() - now.getMonth());
|
|
967
|
-
onMonthOffsetChange(Math.max(0, Math.min(
|
|
953
|
+
onMonthOffsetChange(Math.max(0, Math.min(_chunkTZK5N6AHcjs.MAX_MONTH_OFFSET, offset)));
|
|
968
954
|
},
|
|
969
955
|
fromDate: startMonth,
|
|
970
956
|
toDate: endMonth,
|
|
@@ -1084,7 +1070,7 @@ function SlotPicker({
|
|
|
1084
1070
|
monthLabelFor(monthOffset),
|
|
1085
1071
|
"."
|
|
1086
1072
|
] }),
|
|
1087
|
-
monthOffset <
|
|
1073
|
+
monthOffset < _chunkTZK5N6AHcjs.MAX_MONTH_OFFSET && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1088
1074
|
_chunkCJBSU3XBcjs.Button,
|
|
1089
1075
|
{
|
|
1090
1076
|
variant: "outline",
|
|
@@ -1272,10 +1258,12 @@ var BOOKING_ERROR_COPY = {
|
|
|
1272
1258
|
var CONTEXT_PANEL_CLASS = "p-[var(--spacing-system-l)] shrink-0 lg:w-[280px] border-b lg:border-b-0 lg:border-r border-ods-border lg:min-h-0 lg:overflow-y-auto";
|
|
1273
1259
|
var ACTION_PANEL_CLASS = "flex-1 min-w-0 flex flex-col md:min-h-0 lg:p-[var(--spacing-system-l)]";
|
|
1274
1260
|
var PANEL_STEP_CLASS = "p-[var(--spacing-system-l)] md:min-h-0 md:overflow-y-auto lg:p-0";
|
|
1261
|
+
var STEP_PANEL_CLASS = _chunk23V5BSHDcjs.cn.call(void 0, "flex flex-1 flex-col", PANEL_STEP_CLASS);
|
|
1275
1262
|
var MEETING_SCHEDULER_H = "md:h-[34.375rem] lg:h-[23.75rem]";
|
|
1276
1263
|
var MEETING_SCHEDULER_DETAILS_FIRST_H = "md:h-[39.875rem]";
|
|
1264
|
+
var DEFAULT_SCHEDULER_FLOW = "slot-first";
|
|
1277
1265
|
var SCHEDULER_FLOW_PRESETS = {
|
|
1278
|
-
"slot-first": { initialStep: "slot", height: MEETING_SCHEDULER_H, submitLabel:
|
|
1266
|
+
"slot-first": { initialStep: "slot", height: MEETING_SCHEDULER_H, submitLabel: DEFAULT_SUBMIT_LABEL },
|
|
1279
1267
|
"details-first": {
|
|
1280
1268
|
initialStep: "details",
|
|
1281
1269
|
height: MEETING_SCHEDULER_DETAILS_FIRST_H,
|
|
@@ -1296,7 +1284,7 @@ var CARD_DEGRADED_CLASS = _chunk23V5BSHDcjs.cn.call(void 0,
|
|
|
1296
1284
|
"md:justify-center md:overflow-y-auto"
|
|
1297
1285
|
);
|
|
1298
1286
|
function SchedulerDegradedCard({
|
|
1299
|
-
flow =
|
|
1287
|
+
flow = DEFAULT_SCHEDULER_FLOW,
|
|
1300
1288
|
className,
|
|
1301
1289
|
message,
|
|
1302
1290
|
action,
|
|
@@ -1329,7 +1317,7 @@ function HubSpotMeetingScheduler({
|
|
|
1329
1317
|
onBack,
|
|
1330
1318
|
onBooked,
|
|
1331
1319
|
className,
|
|
1332
|
-
flow =
|
|
1320
|
+
flow = DEFAULT_SCHEDULER_FLOW,
|
|
1333
1321
|
detailsForm: DetailsForm = BookingForm,
|
|
1334
1322
|
detailsFormProps
|
|
1335
1323
|
}) {
|
|
@@ -1472,16 +1460,17 @@ function HubSpotMeetingScheduler({
|
|
|
1472
1460
|
[book, bookingError, detailsFirst, onBooked, refetchAvailability, resetSignals, toast]
|
|
1473
1461
|
);
|
|
1474
1462
|
const escapeHatch = fallbackUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCJBSU3XBcjs.Button, { variant: "outline", size: "small-legacy", href: fallbackUrl, openInNewTab: true, children: "Open in HubSpot" }) : null;
|
|
1463
|
+
const backEdge = detailsFirst ? step === "slot" ? backToDetails : onBack : step === "details" ? backToSlot : onBack;
|
|
1475
1464
|
const cardClass = _chunk23V5BSHDcjs.cn.call(void 0, CARD_CLASS, preset.height, formOnly && "bg-ods-bg", className);
|
|
1476
1465
|
const degraded = (message) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SchedulerDegradedCard, { flow, className, message, action: escapeHatch });
|
|
1477
1466
|
const degradedCard = degraded("We couldn't load available call times. Please try again shortly.");
|
|
1478
1467
|
if (isLoadingAvailability && !availability) {
|
|
1479
1468
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: cardClass, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: CARD_INNER_CLASS, children: [
|
|
1480
|
-
!formOnly && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ContextPanelSkeleton, { onBack, className: CONTEXT_PANEL_CLASS }),
|
|
1469
|
+
!formOnly && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ContextPanelSkeleton, { onBack: backEdge, className: CONTEXT_PANEL_CLASS }),
|
|
1481
1470
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: ACTION_PANEL_CLASS, children: detailsFirst && step === "details" ? (
|
|
1482
1471
|
// The SAME wrapper the loaded form gets, so the skeleton never
|
|
1483
1472
|
// states its own inset.
|
|
1484
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className:
|
|
1473
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: STEP_PANEL_CLASS, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BookingFormSkeleton, { fieldRows: _optionalChain([detailsFormProps, 'optionalAccess', _36 => _36.fieldRows]), footerNote: preset.footerNote }) })
|
|
1485
1474
|
) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SlotPickerSkeleton, { monthOffset }) })
|
|
1486
1475
|
] }) });
|
|
1487
1476
|
}
|
|
@@ -1506,19 +1495,21 @@ function HubSpotMeetingScheduler({
|
|
|
1506
1495
|
},
|
|
1507
1496
|
timezone,
|
|
1508
1497
|
onTimezoneChange: setTimezone,
|
|
1509
|
-
onBack:
|
|
1498
|
+
onBack: backEdge,
|
|
1510
1499
|
locked: detailsFirst ? step === "confirmed" : step !== "slot",
|
|
1511
1500
|
disabled: detailsFirst && isSubmitting,
|
|
1512
1501
|
showTimezone: step !== "confirmed",
|
|
1513
1502
|
className: CONTEXT_PANEL_CLASS
|
|
1514
1503
|
}
|
|
1515
1504
|
),
|
|
1516
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: ACTION_PANEL_CLASS, children: step === "confirmed" && confirmation && timezone ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className:
|
|
1505
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: ACTION_PANEL_CLASS, children: step === "confirmed" && confirmation && timezone ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: STEP_PANEL_CLASS, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Confirmation, { confirmation, timezone }) }) : step === "details" && (detailsFirst ? (
|
|
1517
1506
|
// The form is step ONE here: no slot yet, and `timezone` is null
|
|
1518
1507
|
// on the server render, so neither may gate the PANEL. A link
|
|
1519
|
-
// publishing no durations has no form worth showing
|
|
1520
|
-
|
|
1521
|
-
|
|
1508
|
+
// publishing no durations has no form worth showing — but while a
|
|
1509
|
+
// refetch is in flight the form stays (a calendar skeleton is
|
|
1510
|
+
// the wrong shape here).
|
|
1511
|
+
durations.length > 0 || isFetchingAvailability
|
|
1512
|
+
) : durationMs != null && selectedSlot != null && timezone) ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk23V5BSHDcjs.cn.call(void 0, STEP_PANEL_CLASS, "gap-[var(--spacing-system-m)]"), children: [
|
|
1522
1513
|
selectedSlot != null && durationMs != null && timezone != null && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "text-ods-text-primary text-h4", children: [
|
|
1523
1514
|
new Intl.DateTimeFormat(void 0, {
|
|
1524
1515
|
timeZone: timezone,
|
|
@@ -1554,11 +1545,11 @@ function HubSpotMeetingScheduler({
|
|
|
1554
1545
|
)
|
|
1555
1546
|
] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-[var(--spacing-system-m)] md:min-h-0 md:flex-1", children: [
|
|
1556
1547
|
bookingError === "SLOT_TAKEN" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1557
|
-
|
|
1548
|
+
_chunkTZK5N6AHcjs.Alert,
|
|
1558
1549
|
{
|
|
1559
1550
|
variant: "warning",
|
|
1560
1551
|
className: "mx-[var(--spacing-system-l)] mt-[var(--spacing-system-l)] w-auto lg:m-0 lg:w-full",
|
|
1561
|
-
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1552
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTZK5N6AHcjs.AlertDescription, { children: "That time was just taken \u2014 pick another slot below. (If you already submitted, check your email for a confirmation before rebooking.)" })
|
|
1562
1553
|
}
|
|
1563
1554
|
),
|
|
1564
1555
|
timezone && durationMs != null ? (
|
|
@@ -1639,5 +1630,6 @@ function HubSpotMeetingScheduler({
|
|
|
1639
1630
|
|
|
1640
1631
|
|
|
1641
1632
|
|
|
1642
|
-
|
|
1633
|
+
|
|
1634
|
+
exports.BookingForm = BookingForm; exports.BookingFormSkeleton = BookingFormSkeleton; exports.DEFAULT_SCHEDULER_FLOW = DEFAULT_SCHEDULER_FLOW; exports.HubSpotMeetingScheduler = HubSpotMeetingScheduler; exports.MEETING_SCHEDULER_DETAILS_FIRST_H = MEETING_SCHEDULER_DETAILS_FIRST_H; exports.MEETING_SCHEDULER_H = MEETING_SCHEDULER_H; exports.MeetingSchedulerDirectory = MeetingSchedulerDirectory; exports.MeetingSchedulerDirectoryRowSkeleton = MeetingSchedulerDirectoryRowSkeleton; exports.SCHEDULER_FLOW_PRESETS = SCHEDULER_FLOW_PRESETS; exports.SchedulerDegradedCard = SchedulerDegradedCard;
|
|
1643
1635
|
//# sourceMappingURL=index.cjs.map
|