@flamingo-stack/openframe-frontend-core 0.0.742 → 0.0.744
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/build/export-map.json +1 -1
- package/dist/{chunk-54EA4RLX.cjs → chunk-2JRCJV3M.cjs} +3 -3
- package/dist/{chunk-ZIFYSLIM.cjs → chunk-2UBR53AN.cjs} +4 -4
- package/dist/{chunk-Z2DQYKZA.cjs → chunk-35IQLGV3.cjs} +69 -69
- package/dist/{chunk-WIHHA54J.cjs → chunk-4A6OF4HI.cjs} +44 -44
- package/dist/{chunk-OBODY7F3.cjs → chunk-4N7KGOBS.cjs} +3 -3
- package/dist/{chunk-HIRVNBX5.cjs → chunk-65LJNDR2.cjs} +16 -16
- package/dist/{chunk-32Q7K5OP.cjs → chunk-7YDF3QBN.cjs} +116 -115
- package/dist/{chunk-DNFSMVXJ.cjs → chunk-AT6ZI4CO.cjs} +12 -12
- package/dist/{chunk-UWHCRIQQ.cjs → chunk-FTYQS6VI.cjs} +13 -13
- package/dist/{chunk-YQGDXH3M.cjs → chunk-GAGNKWOC.cjs} +2 -2
- package/dist/{chunk-L34TKFTS.cjs → chunk-H62FNZGG.cjs} +16 -16
- package/dist/{chunk-T433HSL6.cjs → chunk-HHL23RFC.cjs} +33 -33
- package/dist/{chunk-4PKORVOX.cjs → chunk-HJ4KGA2M.cjs} +441 -406
- package/dist/{chunk-4LDU32OB.cjs → chunk-HMSUYWSB.cjs} +4 -4
- package/dist/{chunk-UZLRSFGG.cjs → chunk-HTQJYN47.cjs} +30 -30
- package/dist/{chunk-XAA5EZ5T.cjs → chunk-JGZEHBBD.cjs} +6 -6
- package/dist/{chunk-5MH6BRPY.cjs → chunk-LJ46XYYP.cjs} +24 -12
- package/dist/{chunk-ISJXKKYW.cjs → chunk-NURAL5HD.cjs} +11 -11
- package/dist/{chunk-PS6T65KA.cjs → chunk-OC2LBQQJ.cjs} +90 -66
- package/dist/{chunk-HDBY2URA.cjs → chunk-PYWHDPVC.cjs} +31 -31
- package/dist/{chunk-R6SCSV2I.cjs → chunk-QSO56JZ2.cjs} +81 -81
- package/dist/{chunk-3LW43GIJ.cjs → chunk-QZYF2YQ3.cjs} +4 -4
- package/dist/{chunk-BI3XBCQX.cjs → chunk-YIOWV7LS.cjs} +2 -2
- package/dist/{chunk-H3UA7UY5.cjs → chunk-YJRMCFX3.cjs} +2 -2
- package/dist/{cloud-tenants-6ICAL3HO.cjs → cloud-tenants-JPXAXSPE.cjs} +7 -7
- package/dist/components/case-studies/index.cjs +19 -19
- package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/onboarding-guide-card.js +22 -12
- package/dist/components/chat/index.cjs +5 -5
- package/dist/components/chat/tool-execution-display.d.ts.map +1 -1
- package/dist/components/chat/tool-execution-display.js +5 -4
- package/dist/components/chat/utils/history-merge.d.ts.map +1 -1
- package/dist/components/chat/utils/history-merge.js +25 -1
- package/dist/components/contact/index.cjs +8 -8
- package/dist/components/docs/index.cjs +11 -11
- package/dist/components/embeds/index.cjs +8 -8
- package/dist/components/faq/index.cjs +9 -9
- package/dist/components/features/index.cjs +7 -7
- package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts +1 -1
- package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts.map +1 -1
- package/dist/components/features/scripts/schedule-form/schedule-interval-input.js +15 -13
- package/dist/components/features/scripts/schedule-form/schedule-offline-fields.d.ts.map +1 -1
- package/dist/components/features/scripts/schedule-form/schedule-offline-fields.js +9 -7
- package/dist/components/help-center-pages/index.cjs +101 -101
- package/dist/components/index.cjs +59 -57
- package/dist/components/meeting-scheduler/booking-form.d.ts +11 -1
- package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/booking-form.js +15 -3
- package/dist/components/meeting-scheduler/index.cjs +408 -114
- package/dist/components/meeting-scheduler/index.d.ts +16 -1
- package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.js +157 -5
- package/dist/components/meeting-scheduler/modal-header.d.ts +27 -0
- package/dist/components/meeting-scheduler/modal-header.d.ts.map +1 -0
- package/dist/components/meeting-scheduler/modal-header.js +104 -0
- package/dist/components/meeting-scheduler/slot-picker.d.ts +13 -2
- package/dist/components/meeting-scheduler/slot-picker.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/slot-picker.js +112 -73
- package/dist/components/navigation/index.cjs +10 -10
- package/dist/components/onboarding-guides/index.cjs +10 -10
- package/dist/components/product-demo/index.cjs +7 -7
- package/dist/components/related-content/index.cjs +5 -5
- package/dist/components/shared/product-release/product-release-card.d.ts.map +1 -1
- package/dist/components/shared/product-release/product-release-card.js +2 -0
- package/dist/components/tickets/index.cjs +13 -13
- package/dist/components/ui/index.cjs +9 -7
- package/dist/components/ui/radio-group.d.ts +6 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/radio-group.js +65 -58
- package/dist/components/ui/tab-navigation.d.ts +19 -1
- package/dist/components/ui/tab-navigation.d.ts.map +1 -1
- package/dist/components/ui/tab-navigation.js +32 -8
- package/dist/{devices-OFP2IBKN.cjs → devices-ONC4JOVH.cjs} +8 -8
- package/dist/{embeddable-chat-4C22MGNC.cjs → embeddable-chat-7ZEGCDVF.cjs} +71 -71
- package/dist/index.cjs +13 -11
- package/dist/{knowledge-KKBCSNUA.cjs → knowledge-G7XU5YST.cjs} +8 -8
- package/dist/{logs-X2GRNO57.cjs → logs-5B7NY4G6.cjs} +15 -15
- package/dist/{policies-35BXKB6P.cjs → policies-OYR3SLJN.cjs} +11 -11
- package/dist/{scripts-KQYVQOLU.cjs → scripts-6CWHTY6U.cjs} +12 -12
- package/dist/{software-update-ED33WSKT.cjs → software-update-AJPIY4SQ.cjs} +10 -10
- package/package.json +1 -1
- package/src/components/chat/entity-cards/onboarding-guide-card.tsx +8 -1
- package/src/components/chat/tool-execution-display.tsx +21 -10
- package/src/components/chat/utils/history-merge.ts +46 -1
- package/src/components/features/scripts/schedule-form/schedule-interval-input.tsx +20 -13
- package/src/components/features/scripts/schedule-form/schedule-offline-fields.tsx +9 -5
- package/src/components/meeting-scheduler/booking-form.tsx +29 -3
- package/src/components/meeting-scheduler/index.tsx +224 -3
- package/src/components/meeting-scheduler/modal-header.tsx +145 -0
- package/src/components/meeting-scheduler/slot-picker.tsx +72 -8
- package/src/components/shared/product-release/product-release-card.tsx +2 -0
- package/src/components/ui/radio-group.tsx +51 -36
- package/src/components/ui/tab-navigation.tsx +54 -5
|
@@ -77,7 +77,22 @@ export interface HubSpotMeetingSchedulerProps {
|
|
|
77
77
|
/** Form rescue for the details form (`RESCUE_FORMS.meetingBooking`). OPT-IN:
|
|
78
78
|
* omitted or `null` saves nothing. */
|
|
79
79
|
rescue?: FormRescueDefinition | null;
|
|
80
|
+
/**
|
|
81
|
+
* How the card is drawn.
|
|
82
|
+
*
|
|
83
|
+
* `'card'` (default, unchanged): the scheduler card - context panel beside
|
|
84
|
+
* (or over) the calendar, as every page embed has it.
|
|
85
|
+
* `'modal'`: the onboarding "Book an Onboarding Call" window: the host strip
|
|
86
|
+
* with the length on its right, the timezone row, then the calendar beside
|
|
87
|
+
* a single column of times, and Continue in a footer under the card (with
|
|
88
|
+
* Cancel beside it on a phone, where the window has no X). A time is
|
|
89
|
+
* CHOSEN, not submitted: Continue moves to the details form. Opt-in, so
|
|
90
|
+
* every existing embed keeps the card byte for byte; `details-first` has
|
|
91
|
+
* no modal arrangement and ignores it.
|
|
92
|
+
*/
|
|
93
|
+
layout?: SchedulerLayout;
|
|
80
94
|
}
|
|
95
|
+
export type SchedulerLayout = 'card' | 'modal';
|
|
81
96
|
type Step = 'slot' | 'details' | 'confirmed';
|
|
82
97
|
/** `onStageChange`'s value: a step, or the degraded box that replaces the flow. */
|
|
83
98
|
export type SchedulerStage = Step | 'unavailable';
|
|
@@ -174,7 +189,7 @@ export declare function SchedulerDegradedCard({ flow, className, message, action
|
|
|
174
189
|
action?: ReactNode;
|
|
175
190
|
children?: ReactNode;
|
|
176
191
|
}): import("react").JSX.Element;
|
|
177
|
-
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;
|
|
192
|
+
export declare function HubSpotMeetingScheduler({ meetingId, apiBaseUrl, initialAvailability, title, description, hosts, displayTimezone, fallbackUrl, onBack, onBooked, onStageChange, className, flow, detailsForm: DetailsForm, detailsFormProps, rescue, layout, }: HubSpotMeetingSchedulerProps): import("react").JSX.Element;
|
|
178
193
|
export { BookingForm, BookingFormSkeleton, type BookingFormProps, type BookingFieldRow, type BookingFieldSlot, type BookingFieldCopy, type BookingFormConsent, } from './booking-form';
|
|
179
194
|
export { MeetingSchedulerDirectory, MeetingSchedulerDirectoryRowSkeleton, type MeetingSchedulerDirectoryProps, } from './directory';
|
|
180
195
|
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":"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;
|
|
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;AAI/F,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAyBxB,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;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,oBAAoB,CAAC,CAAC;IACxG;2CACuC;IACvC,MAAM,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrC;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/C,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,qDAAqD,CAAC;AAEtF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iCAAiC,0CAA0C,CAAC;AAEzF,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;AAwDD,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,EACb,MAAe,GAChB,EAAE,4BAA4B,+BAutB9B;AAKD,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,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,kBAAkB,EAAE,MAAM,sCAAsC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { useIsHydrated } from "../../hooks/ui/use-is-hydrated.js";
|
|
5
5
|
import { completeFormRescue } from "../../hooks/use-form-rescue.js";
|
|
6
6
|
import { useHumanitySignals } from "../../hooks/use-humanity-signals.js";
|
|
@@ -12,10 +12,16 @@ import {
|
|
|
12
12
|
import { cn } from "../../utils/cn.js";
|
|
13
13
|
import { FORM_RESCUE_ATTEMPT_FIELD } from "../../utils/form-rescue.js";
|
|
14
14
|
import { formatDurationCompact, formatDateWithTimezone } from "../../utils/format.js";
|
|
15
|
+
import { BackButton } from "../layout/back-button.js";
|
|
15
16
|
import { Alert, AlertDescription, Button } from "../ui/index.js";
|
|
16
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
BookingForm,
|
|
19
|
+
BookingFormSkeleton,
|
|
20
|
+
DEFAULT_SUBMIT_LABEL
|
|
21
|
+
} from "./booking-form.js";
|
|
17
22
|
import { Confirmation } from "./confirmation.js";
|
|
18
23
|
import { SchedulerContextPanel, ContextPanelSkeleton } from "./context-panel.js";
|
|
24
|
+
import { SchedulerModalHeader, SchedulerModalHeaderSkeleton } from "./modal-header.js";
|
|
19
25
|
import { SlotPicker, SlotPickerSkeleton, dayKeyInZone } from "./slot-picker.js";
|
|
20
26
|
const BOOKING_ERROR_COPY = {
|
|
21
27
|
INVALID_EMAIL: "That email address was rejected by our scheduling system \u2014 please use a real, reachable address (work email works best).",
|
|
@@ -74,6 +80,18 @@ function isNativelyBookable(availability) {
|
|
|
74
80
|
}
|
|
75
81
|
return true;
|
|
76
82
|
}
|
|
83
|
+
const MODAL_STACK_CLASS = "flex flex-col gap-[var(--spacing-system-l)]";
|
|
84
|
+
const MODAL_CARD_CLASS = "flex flex-col overflow-hidden rounded-md border border-ods-border bg-ods-card";
|
|
85
|
+
const MODAL_STEP_CLASS = "flex flex-col p-[var(--spacing-system-m)]";
|
|
86
|
+
const NOOP = () => void 0;
|
|
87
|
+
const MODAL_FIELD_ROWS = [[{ name: "firstName" }, { name: "lastName" }], [{ name: "email" }]];
|
|
88
|
+
const MODAL_PRIMARY_CLASS = "flex-1 content-md:min-w-[15.5rem] content-md:flex-none";
|
|
89
|
+
function ModalFooter({ onCancel, primary }) {
|
|
90
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex gap-[var(--spacing-system-l)] content-md:justify-end", children: [
|
|
91
|
+
onCancel && /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: onCancel, className: "flex-1 content-md:hidden", children: "Cancel" }),
|
|
92
|
+
primary
|
|
93
|
+
] });
|
|
94
|
+
}
|
|
77
95
|
function HubSpotMeetingScheduler({
|
|
78
96
|
meetingId,
|
|
79
97
|
apiBaseUrl = "",
|
|
@@ -90,7 +108,8 @@ function HubSpotMeetingScheduler({
|
|
|
90
108
|
flow = DEFAULT_SCHEDULER_FLOW,
|
|
91
109
|
detailsForm: DetailsForm = BookingForm,
|
|
92
110
|
detailsFormProps,
|
|
93
|
-
rescue = null
|
|
111
|
+
rescue = null,
|
|
112
|
+
layout = "card"
|
|
94
113
|
}) {
|
|
95
114
|
const {
|
|
96
115
|
availability,
|
|
@@ -104,6 +123,9 @@ function HubSpotMeetingScheduler({
|
|
|
104
123
|
isSubmitting
|
|
105
124
|
} = useMeetingBooking({ meetingId, apiBaseUrl, initialAvailability });
|
|
106
125
|
const detailsFirst = flow === "details-first";
|
|
126
|
+
const modal = layout === "modal" && !detailsFirst;
|
|
127
|
+
const modalFormId = useId();
|
|
128
|
+
const [modalFormValid, setModalFormValid] = useState(false);
|
|
107
129
|
const hydrated = useIsHydrated();
|
|
108
130
|
const [pickedTimezone, setTimezone] = useState(null);
|
|
109
131
|
const resolvedLocalTimezone = useMemo(() => {
|
|
@@ -254,6 +276,21 @@ function HubSpotMeetingScheduler({
|
|
|
254
276
|
const stepPanelClass = cn(STEP_PANEL_CLASS, detailsFirst && boxed && "min-h-0 overflow-y-auto");
|
|
255
277
|
const degraded = (message) => /* @__PURE__ */ jsx(SchedulerDegradedCard, { flow, className, message, action: escapeHatch });
|
|
256
278
|
const degradedCard = degraded("We couldn't load available call times. Please try again shortly.");
|
|
279
|
+
if (modal && isLoadingAvailability && !availability) {
|
|
280
|
+
return /* @__PURE__ */ jsxs("div", { className: cn(MODAL_STACK_CLASS, className), children: [
|
|
281
|
+
/* @__PURE__ */ jsxs("div", { className: MODAL_CARD_CLASS, children: [
|
|
282
|
+
/* @__PURE__ */ jsx(SchedulerModalHeaderSkeleton, {}),
|
|
283
|
+
/* @__PURE__ */ jsx(SlotPickerSkeleton, { monthOffset, layout: "modal" })
|
|
284
|
+
] }),
|
|
285
|
+
/* @__PURE__ */ jsx(
|
|
286
|
+
ModalFooter,
|
|
287
|
+
{
|
|
288
|
+
onCancel: onBack,
|
|
289
|
+
primary: /* @__PURE__ */ jsx(Button, { disabled: true, onClick: NOOP, className: MODAL_PRIMARY_CLASS, children: "Continue" })
|
|
290
|
+
}
|
|
291
|
+
)
|
|
292
|
+
] });
|
|
293
|
+
}
|
|
257
294
|
if (isLoadingAvailability && !availability) {
|
|
258
295
|
return /* @__PURE__ */ jsx("div", { className: cardClass, children: /* @__PURE__ */ jsxs("div", { className: innerClass, children: [
|
|
259
296
|
!formOnly && /* @__PURE__ */ jsx(ContextPanelSkeleton, { onBack: backEdge, className: CONTEXT_PANEL_CLASS }),
|
|
@@ -275,6 +312,121 @@ function HubSpotMeetingScheduler({
|
|
|
275
312
|
if (!isNativelyBookable(availability)) {
|
|
276
313
|
return degraded("This meeting type is booked directly on HubSpot.");
|
|
277
314
|
}
|
|
315
|
+
if (modal) {
|
|
316
|
+
const modalBack = step === "details" ? backToSlot : onBack;
|
|
317
|
+
const onSelectDuration = (ms) => {
|
|
318
|
+
setDurationMs(ms);
|
|
319
|
+
setSelectedDay(null);
|
|
320
|
+
setSelectedSlot(null);
|
|
321
|
+
};
|
|
322
|
+
const summary = selectedSlot != null && durationMs != null && timezone != null ? `${formatDateWithTimezone(selectedSlot, timezone, "weekdayDateTimeZoned", { viewerLocale: true })} \xB7 ${formatDurationCompact(durationMs / 1e3)}` : null;
|
|
323
|
+
return /* @__PURE__ */ jsxs("div", { className: cn(MODAL_STACK_CLASS, className), children: [
|
|
324
|
+
/* @__PURE__ */ jsxs("div", { className: MODAL_CARD_CLASS, children: [
|
|
325
|
+
modalBack && /* @__PURE__ */ jsx(
|
|
326
|
+
BackButton,
|
|
327
|
+
{
|
|
328
|
+
onClick: modalBack,
|
|
329
|
+
className: cn(
|
|
330
|
+
"px-[var(--spacing-system-m)] pt-[var(--spacing-system-m)]",
|
|
331
|
+
step === "slot" && "content-md:hidden"
|
|
332
|
+
)
|
|
333
|
+
}
|
|
334
|
+
),
|
|
335
|
+
/* @__PURE__ */ jsx(
|
|
336
|
+
SchedulerModalHeader,
|
|
337
|
+
{
|
|
338
|
+
hosts: shownHosts,
|
|
339
|
+
durationsMs: durations,
|
|
340
|
+
selectedDurationMs: durationMs,
|
|
341
|
+
onSelectDuration,
|
|
342
|
+
timezone,
|
|
343
|
+
onTimezoneChange: setTimezone,
|
|
344
|
+
locked: step !== "slot",
|
|
345
|
+
showTimezone: step === "slot"
|
|
346
|
+
}
|
|
347
|
+
),
|
|
348
|
+
step === "confirmed" && confirmation && timezone ? /* @__PURE__ */ jsx("div", { className: MODAL_STEP_CLASS, children: /* @__PURE__ */ jsx(Confirmation, { confirmation, timezone }) }) : step === "details" && durationMs != null && selectedSlot != null && timezone ? /* @__PURE__ */ jsxs("div", { className: cn(MODAL_STEP_CLASS, "gap-[var(--spacing-system-m)]"), children: [
|
|
349
|
+
summary && /* @__PURE__ */ jsx("p", { className: "text-ods-text-primary text-h4", children: summary }),
|
|
350
|
+
/* @__PURE__ */ jsx(
|
|
351
|
+
DetailsForm,
|
|
352
|
+
{
|
|
353
|
+
fieldRows: MODAL_FIELD_ROWS,
|
|
354
|
+
...detailsFormProps,
|
|
355
|
+
availability,
|
|
356
|
+
meetingId,
|
|
357
|
+
startTimeMs: selectedSlot,
|
|
358
|
+
durationMs,
|
|
359
|
+
timezone,
|
|
360
|
+
formId: modalFormId,
|
|
361
|
+
hideSubmit: true,
|
|
362
|
+
onValidityChange: setModalFormValid,
|
|
363
|
+
isSubmitting,
|
|
364
|
+
onSubmit: handleSubmit,
|
|
365
|
+
honeypotInputProps,
|
|
366
|
+
getSignals,
|
|
367
|
+
rescue
|
|
368
|
+
}
|
|
369
|
+
)
|
|
370
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
371
|
+
bookingError === "SLOT_TAKEN" && /* @__PURE__ */ jsx(Alert, { variant: "warning", className: "mx-[var(--spacing-system-m)] mt-[var(--spacing-system-m)] w-auto", children: /* @__PURE__ */ jsx(AlertDescription, { children: "That time was just taken \u2014 pick another slot below. (If you already submitted, check your email for a confirmation before rebooking.)" }) }),
|
|
372
|
+
timezone && durationMs != null ? /* @__PURE__ */ jsx(
|
|
373
|
+
SlotPicker,
|
|
374
|
+
{
|
|
375
|
+
layout: "modal",
|
|
376
|
+
slots,
|
|
377
|
+
timezone,
|
|
378
|
+
monthOffset,
|
|
379
|
+
onMonthOffsetChange: (o) => {
|
|
380
|
+
setSelectedDay(null);
|
|
381
|
+
setSelectedSlot(null);
|
|
382
|
+
setMonthOffset(o);
|
|
383
|
+
},
|
|
384
|
+
selectedSlot,
|
|
385
|
+
onSelectSlot: setSelectedSlot,
|
|
386
|
+
selectedDay,
|
|
387
|
+
onSelectDay: setSelectedDay,
|
|
388
|
+
isLoading: isLoadingAvailability
|
|
389
|
+
}
|
|
390
|
+
) : durations.length === 0 && !isFetchingAvailability ? /* @__PURE__ */ jsxs("div", { className: cn(MODAL_STEP_CLASS, "items-start gap-[var(--spacing-system-m)]"), children: [
|
|
391
|
+
/* @__PURE__ */ jsx("p", { className: "text-ods-text-secondary text-h6", children: "No call times are published right now." }),
|
|
392
|
+
escapeHatch
|
|
393
|
+
] }) : /* @__PURE__ */ jsx(SlotPickerSkeleton, { monthOffset, layout: "modal" })
|
|
394
|
+
] })
|
|
395
|
+
] }),
|
|
396
|
+
step === "slot" && /* @__PURE__ */ jsx(
|
|
397
|
+
ModalFooter,
|
|
398
|
+
{
|
|
399
|
+
onCancel: onBack,
|
|
400
|
+
primary: /* @__PURE__ */ jsx(
|
|
401
|
+
Button,
|
|
402
|
+
{
|
|
403
|
+
disabled: selectedSlot == null || durationMs == null,
|
|
404
|
+
onClick: () => setStep("details"),
|
|
405
|
+
className: MODAL_PRIMARY_CLASS,
|
|
406
|
+
children: "Continue"
|
|
407
|
+
}
|
|
408
|
+
)
|
|
409
|
+
}
|
|
410
|
+
),
|
|
411
|
+
step === "details" && /* @__PURE__ */ jsx(
|
|
412
|
+
ModalFooter,
|
|
413
|
+
{
|
|
414
|
+
onCancel: onBack,
|
|
415
|
+
primary: /* @__PURE__ */ jsx(
|
|
416
|
+
Button,
|
|
417
|
+
{
|
|
418
|
+
type: "submit",
|
|
419
|
+
form: modalFormId,
|
|
420
|
+
loading: isSubmitting,
|
|
421
|
+
disabled: isSubmitting || !modalFormValid,
|
|
422
|
+
className: MODAL_PRIMARY_CLASS,
|
|
423
|
+
children: preset.submitLabel
|
|
424
|
+
}
|
|
425
|
+
)
|
|
426
|
+
}
|
|
427
|
+
)
|
|
428
|
+
] });
|
|
429
|
+
}
|
|
278
430
|
return /* @__PURE__ */ jsx("div", { className: cardClass, children: /* @__PURE__ */ jsxs("div", { className: innerClass, children: [
|
|
279
431
|
!formOnly && /* @__PURE__ */ jsx(
|
|
280
432
|
SchedulerContextPanel,
|
|
@@ -362,7 +514,7 @@ function HubSpotMeetingScheduler({
|
|
|
362
514
|
onSelectSlot: (ms) => {
|
|
363
515
|
if (!detailsFirst) {
|
|
364
516
|
setSelectedSlot(ms);
|
|
365
|
-
setStep("details");
|
|
517
|
+
if (!modal) setStep("details");
|
|
366
518
|
return;
|
|
367
519
|
}
|
|
368
520
|
if (postInFlight() || !stash) return;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { MeetingHost } from '../../schemas/meeting-booking-schema';
|
|
2
|
+
/**
|
|
3
|
+
* The head of the scheduler's MODAL layout: the host strip (who, and how long
|
|
4
|
+
* on its right - chips when the link offers several lengths, the length alone
|
|
5
|
+
* otherwise) and the timezone row under it, each cut off by a rule. The
|
|
6
|
+
* context panel's facts in the window's own arrangement: there is no side
|
|
7
|
+
* column in a 600px box, so the strip sits over the calendar and the zone
|
|
8
|
+
* picker spans the width above it, at every size.
|
|
9
|
+
*/
|
|
10
|
+
export interface SchedulerModalHeaderProps {
|
|
11
|
+
hosts: MeetingHost[];
|
|
12
|
+
durationsMs: number[];
|
|
13
|
+
selectedDurationMs: number | null;
|
|
14
|
+
onSelectDuration: (ms: number) => void;
|
|
15
|
+
/** Resolved IANA zone (null until the client resolves it). */
|
|
16
|
+
timezone: string | null;
|
|
17
|
+
onTimezoneChange?: (tz: string) => void;
|
|
18
|
+
/** A slot is chosen: the length is settled, the chips give way to the line. */
|
|
19
|
+
locked?: boolean;
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
/** Whether the timezone row renders (not on the confirmation). */
|
|
22
|
+
showTimezone?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function SchedulerModalHeader({ hosts, durationsMs, selectedDurationMs, onSelectDuration, timezone, onTimezoneChange, locked, disabled, showTimezone, }: SchedulerModalHeaderProps): import("react").JSX.Element;
|
|
25
|
+
/** Same footprint as the loaded header, for the cold load. */
|
|
26
|
+
export declare function SchedulerModalHeaderSkeleton(): import("react").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=modal-header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal-header.d.ts","sourceRoot":"","sources":["../../../src/components/meeting-scheduler/modal-header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAMxE;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAqCD,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,YAAmB,GACpB,EAAE,yBAAyB,+BA8C3B;AAED,8DAA8D;AAC9D,wBAAgB,4BAA4B,gCAmB3C"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from "../../utils/cn.js";
|
|
4
|
+
import { formatDurationCompact } from "../../utils/format.js";
|
|
5
|
+
import { SquareAvatar, AvatarStack, Button, Skeleton } from "../ui/index.js";
|
|
6
|
+
import { TimezoneSelect } from "../ui/timezone-select.js";
|
|
7
|
+
const ROW_CLASS = "border-b border-ods-border p-[var(--spacing-system-m)]";
|
|
8
|
+
const STRIP_CLASS = cn(ROW_CLASS, "flex items-center justify-between gap-[var(--spacing-system-m)]");
|
|
9
|
+
const FIELD_LABEL_CLASS = "text-h4 text-ods-text-primary";
|
|
10
|
+
function HostIdentity({ hosts }) {
|
|
11
|
+
if (hosts.length === 0) return null;
|
|
12
|
+
if (hosts.length > 3) {
|
|
13
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
14
|
+
/* @__PURE__ */ jsx(AvatarStack, { people: hosts, max: 4, size: "lg", label: "Hosts" }),
|
|
15
|
+
/* @__PURE__ */ jsxs("p", { className: "text-ods-text-secondary text-h6", children: [
|
|
16
|
+
hosts.length,
|
|
17
|
+
" hosts on this calendar"
|
|
18
|
+
] })
|
|
19
|
+
] });
|
|
20
|
+
}
|
|
21
|
+
return /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-s)]", children: hosts.map((host) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
|
|
22
|
+
/* @__PURE__ */ jsx(
|
|
23
|
+
SquareAvatar,
|
|
24
|
+
{
|
|
25
|
+
variant: "round",
|
|
26
|
+
size: "sm",
|
|
27
|
+
src: host.avatarUrl ?? void 0,
|
|
28
|
+
alt: host.name,
|
|
29
|
+
fallback: host.name
|
|
30
|
+
}
|
|
31
|
+
),
|
|
32
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col", children: [
|
|
33
|
+
/* @__PURE__ */ jsx("p", { className: "truncate text-ods-text-primary text-h4", children: host.name }),
|
|
34
|
+
host.title && /* @__PURE__ */ jsx("p", { className: "truncate text-ods-text-secondary text-h6", children: host.title })
|
|
35
|
+
] })
|
|
36
|
+
] }, host.name)) });
|
|
37
|
+
}
|
|
38
|
+
function SchedulerModalHeader({
|
|
39
|
+
hosts,
|
|
40
|
+
durationsMs,
|
|
41
|
+
selectedDurationMs,
|
|
42
|
+
onSelectDuration,
|
|
43
|
+
timezone,
|
|
44
|
+
onTimezoneChange,
|
|
45
|
+
locked = false,
|
|
46
|
+
disabled = false,
|
|
47
|
+
showTimezone = true
|
|
48
|
+
}) {
|
|
49
|
+
const chips = !locked && durationsMs.length > 1;
|
|
50
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
51
|
+
/* @__PURE__ */ jsxs("div", { className: STRIP_CLASS, children: [
|
|
52
|
+
/* @__PURE__ */ jsx(HostIdentity, { hosts }),
|
|
53
|
+
chips ? /* @__PURE__ */ jsx("div", { className: "flex shrink-0 flex-wrap justify-end gap-[var(--spacing-system-xs)]", children: durationsMs.map((ms) => /* @__PURE__ */ jsx(
|
|
54
|
+
Button,
|
|
55
|
+
{
|
|
56
|
+
variant: selectedDurationMs === ms ? void 0 : "outline",
|
|
57
|
+
size: "small-legacy",
|
|
58
|
+
disabled,
|
|
59
|
+
onClick: () => onSelectDuration(ms),
|
|
60
|
+
children: formatDurationCompact(ms / 1e3)
|
|
61
|
+
},
|
|
62
|
+
ms
|
|
63
|
+
)) }) : selectedDurationMs != null && /* @__PURE__ */ jsxs("p", { className: "shrink-0 text-ods-text-secondary text-h6", children: [
|
|
64
|
+
formatDurationCompact(selectedDurationMs / 1e3),
|
|
65
|
+
" call"
|
|
66
|
+
] })
|
|
67
|
+
] }),
|
|
68
|
+
showTimezone && /* @__PURE__ */ jsxs("div", { className: cn(ROW_CLASS, "flex flex-col gap-[var(--spacing-system-xxs)]"), children: [
|
|
69
|
+
/* @__PURE__ */ jsx("p", { className: FIELD_LABEL_CLASS, children: "Timezone" }),
|
|
70
|
+
timezone ? /* @__PURE__ */ jsx(
|
|
71
|
+
TimezoneSelect,
|
|
72
|
+
{
|
|
73
|
+
value: timezone,
|
|
74
|
+
disabled,
|
|
75
|
+
onChange: (tz) => {
|
|
76
|
+
if (tz) onTimezoneChange?.(tz);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
) : /* @__PURE__ */ jsx(Skeleton, { className: "h-12 w-full" })
|
|
80
|
+
] })
|
|
81
|
+
] });
|
|
82
|
+
}
|
|
83
|
+
function SchedulerModalHeaderSkeleton() {
|
|
84
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
85
|
+
/* @__PURE__ */ jsxs("div", { className: STRIP_CLASS, children: [
|
|
86
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
|
|
87
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-8 shrink-0 rounded-full" }),
|
|
88
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
89
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-32" }),
|
|
90
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" })
|
|
91
|
+
] })
|
|
92
|
+
] }),
|
|
93
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-20 shrink-0" })
|
|
94
|
+
] }),
|
|
95
|
+
/* @__PURE__ */ jsxs("div", { className: cn(ROW_CLASS, "flex flex-col gap-[var(--spacing-system-xxs)]"), children: [
|
|
96
|
+
/* @__PURE__ */ jsx("p", { className: FIELD_LABEL_CLASS, children: "Timezone" }),
|
|
97
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-12 w-full" })
|
|
98
|
+
] })
|
|
99
|
+
] });
|
|
100
|
+
}
|
|
101
|
+
export {
|
|
102
|
+
SchedulerModalHeader,
|
|
103
|
+
SchedulerModalHeaderSkeleton
|
|
104
|
+
};
|
|
@@ -34,9 +34,19 @@
|
|
|
34
34
|
* (resolved by the parent AFTER mount — this component never reads Intl
|
|
35
35
|
* itself, keeping SSR output deterministic).
|
|
36
36
|
*/
|
|
37
|
+
/**
|
|
38
|
+
* How the two columns sit. `card` is the scheduler card's own (the module
|
|
39
|
+
* docblock). `modal` is the onboarding "Book an Onboarding Call" window: a
|
|
40
|
+
* 600px box where the calendar keeps its width and the times run down ONE
|
|
41
|
+
* column beside it, scrolling inside the calendar's height - on a phone the
|
|
42
|
+
* times are four across, as that design draws them.
|
|
43
|
+
*/
|
|
44
|
+
export type SlotPickerLayout = 'card' | 'modal';
|
|
37
45
|
export interface SlotPickerProps {
|
|
38
46
|
/** Bookable slot start times (epoch ms) for the selected duration. */
|
|
39
47
|
slots: number[];
|
|
48
|
+
/** Column layout; `card` unless the host says otherwise. */
|
|
49
|
+
layout?: SlotPickerLayout;
|
|
40
50
|
/** IANA zone every label renders in (parent resolves post-mount). */
|
|
41
51
|
timezone: string;
|
|
42
52
|
monthOffset: number;
|
|
@@ -72,10 +82,11 @@ export declare function monthLabelFor(offset: number): string;
|
|
|
72
82
|
* the times column is a skeleton, and it is the same one the loaded picker
|
|
73
83
|
* shows while a month loads, so there is no swap between the two.
|
|
74
84
|
*/
|
|
75
|
-
export declare function SlotPickerSkeleton({ monthOffset }: {
|
|
85
|
+
export declare function SlotPickerSkeleton({ monthOffset, layout, }: {
|
|
76
86
|
monthOffset?: number;
|
|
87
|
+
layout?: SlotPickerLayout;
|
|
77
88
|
}): import("react").JSX.Element;
|
|
78
89
|
/** Same-footprint skeleton for the time-chip column. */
|
|
79
90
|
export declare function TimeChipsSkeleton(): import("react").JSX.Element;
|
|
80
|
-
export declare function SlotPicker({ slots, timezone, monthOffset, onMonthOffsetChange, selectedSlot, onSelectSlot, selectedDay, onSelectDay, isLoading, isSubmitting, }: SlotPickerProps): import("react").JSX.Element;
|
|
91
|
+
export declare function SlotPicker({ slots, layout, timezone, monthOffset, onMonthOffsetChange, selectedSlot, onSelectSlot, selectedDay, onSelectDay, isLoading, isSubmitting, }: SlotPickerProps): import("react").JSX.Element;
|
|
81
92
|
//# sourceMappingURL=slot-picker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot-picker.d.ts","sourceRoot":"","sources":["../../../src/components/meeting-scheduler/slot-picker.tsx"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;8DAC8D;AAC9D,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIjE;AA6CD;yDACyD;AACzD,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"slot-picker.d.ts","sourceRoot":"","sources":["../../../src/components/meeting-scheduler/slot-picker.tsx"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;8DAC8D;AAC9D,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIjE;AA6CD;yDACyD;AACzD,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;AA4GxD;kEACkE;AAClE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIpD;AAgED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,WAAe,EACf,MAAe,GAChB,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B,+BAgCA;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,gCAmBhC;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,MAAe,EACf,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAiB,EACjB,YAAoB,GACrB,EAAE,eAAe,+BA6GjB"}
|