sequenceDiagram participant Parent as Parent (User Page) participant Embed as Embed (iframe) participant Store as EmbedStore(iframe) participant UI as UI Components(iframe) Note over Parent: embed.js loads alt CTA clicked or Cal.modal() called Parent->>Parent: Check for existing modal alt Modal exists & can reuse Parent->>Parent: Reopen modal (state: "reopened") Note over Parent: May use connect() or reload else Create new modal Parent->>Parent: Create cal-modal-box Parent->>Parent: Create iframe (hidden) Parent->>Parent: Set state="loading" Parent->>Parent: Show loader end end Note over Embed: background: transparent Note over Embed: body tag hidden Note over Embed: iframe webpage starts rendering Note over Store: EmbedStore pre-initialized
State: NOT_INITIALIZED Store->>Store: Initialize UI config & theme Note over Parent: Process URL params for prefill Parent->>Store: Set prefill data from URL Embed->>Parent: __iframeReady event Note right of Embed: Purpose: Signals iframe is ready
to receive messages from parent
Action: Makes iframe visible
(unless prerendering),
processes queued commands Note over Parent: Sets iframeReady flag Note over Parent: Makes iframe visible (unless prerendering) Note over Store: Set state to INITIALIZED Store->>UI: Apply theme & cssVarsPerTheme Embed->>Parent: __dimensionChanged event Note right of Embed: Purpose: Keeps iframe size
matched to content
Triggers: Content size changes,
page finishes loading Note over Parent: Adjust iframe dimensions Note over Store: Update providedCorrectHeightToParent Embed->>Parent: __windowLoadComplete event Note right of Embed: Purpose: Signals page fully loaded
Ensures dimension calculations
are reliable alt isBookerPage with skeleton Note over Embed: Wait for slotsDone state end Embed->>Parent: linkReady event Note right of Embed: Purpose: Signals iframe content
is fully ready for interaction
Requirements: Height known,
slots loaded (if skeleton) Note over Parent: Remove loader Note over Parent: Set state="loaded" Note over Parent: Make iframe visible Parent->>Embed: parentKnowsIframeReady event Note right of Parent: Purpose: Parent acknowledges
iframe readiness
Action: Makes body visible,
sets renderState completed Note over Embed: Makes body visible Note over Store: renderState: "completed" loop Dimension Monitoring Embed->>Embed: Monitor content size changes alt Dimensions Changed Embed->>Parent: __dimensionChanged event Note right of Embed: Purpose: Maintain proper sizing
as content changes Parent->>Parent: Adjust iframe size end end alt Route Changes UI->>Store: Update UI state Store->>Parent: __routeChanged event Note right of Store: Purpose: Notifies parent of
navigation within embed
Action: Handle navigation Note over Parent: Handle navigation end alt Booker Events (Tracking) UI->>Store: Update viewId on linkReady UI->>Parent: bookerViewed event Note right of UI: Purpose: Tracks first view of booker
on first modal open
Includes: Event info, slots status
Not fired during prerendering UI->>Parent: bookerReady event Note right of UI: Purpose: Signals booker view is loaded
and slots are ready for interaction
Includes: Event identification
Only fires for booker pages alt User closes and reopens modal UI->>Parent: bookerReopened event Note right of UI: Purpose: Tracks when booker is
reopened after being closed
Distinguishes from first view end alt Full reload scenario Parent->>Embed: __reloadInitiated method Note right of Parent: Purpose: Notify iframe that
fullReload is happening
Action: Set reloadInitiated flag Note over Store: reloadInitiated: true UI->>Parent: bookerReloaded event Note right of UI: Purpose: Tracks when booker is
reloaded (full page reload)
Distinguishes from reopen Note over Store: Reset reloadInitiated flag end end alt Close Request Embed->>Parent: __closeIframe event Note right of Embed: Purpose: Request to close modal
from within iframe
Action: Set state="closed" Note over Parent: Set state="closed" end alt Error Handling Embed->>Parent: linkFailed event Note right of Embed: Purpose: Signals page load error
Includes: Error code, URL info
Action: Show error state Note over Parent: Set state="failed" end