flowchart TB
subgraph Parent["Parent Page (embed.ts)"]
direction TB
CalAPI["Cal API
(Cal.inline, Cal.modal, Cal.ui)"]
ActionMgr["ActionManager
(Event Listener)"]
DoInIframe["doInIframe()
(Command Sender)"]
Queue["iframeDoQueue[]
(Command Buffer)"]
CalAPI --> DoInIframe
DoInIframe -->|"if !iframeReady"| Queue
Queue -->|"flush on ready"| DoInIframe
end
subgraph Transport["postMessage Transport"]
direction TB
ToIframe["parent.postMessage()
{originator: 'CAL', method, arg}"]
ToParent["iframe.postMessage()
{originator: 'CAL', type, data}"]
end
subgraph Iframe["Iframe (embed-iframe.ts)"]
direction TB
MsgListener["window.addEventListener('message')"]
Interface["interfaceWithParent
{ui, parentKnowsIframeReady, connect}"]
SDKAction["sdkActionManager
(Event Emitter)"]
EmbedStore["embedStore
(State)"]
MsgListener --> Interface
Interface --> EmbedStore
SDKAction -->|"fire()"| ToParent
end
DoInIframe -->|"Commands"| ToIframe
ToIframe --> MsgListener
ToParent --> ActionMgr
style Parent fill:#e1f5fe,stroke:#01579b
style Iframe fill:#fff3e0,stroke:#e65100
style Transport fill:#f3e5f5,stroke:#7b1fa2