@smooai/chat-widget 0.10.2 → 0.12.0

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/index.d.ts CHANGED
@@ -99,6 +99,12 @@ interface ChatWidgetConfig {
99
99
  * Clicking one sends it. Capped at 5 for layout.
100
100
  */
101
101
  examplePrompts?: string[];
102
+ /**
103
+ * Show mid-conversation suggested-reply chips ("quick replies") under the
104
+ * latest assistant message when the agent returns follow-up suggestions.
105
+ * Clicking one sends it. Defaults to `true` (shown unless explicitly `false`).
106
+ */
107
+ showSuggestedReplies?: boolean;
102
108
  /** Require the visitor's name before chatting. */
103
109
  requireName?: boolean;
104
110
  /** Require the visitor's email before chatting. */
@@ -132,229 +138,6 @@ interface ChatWidgetConfig {
132
138
  theme?: ChatWidgetTheme;
133
139
  }
134
140
  //#endregion
135
- //#region src/element.d.ts
136
- declare const ELEMENT_TAG = "smooth-agent-chat";
137
- declare class SmoothAgentChatElement extends HTMLElement {
138
- static get observedAttributes(): readonly string[];
139
- private readonly root;
140
- private controller;
141
- private overrides;
142
- private open;
143
- private messages;
144
- private status;
145
- private mounted;
146
- /** True once the visitor has cleared the pre-chat identity gate (or it's not needed). */
147
- private userInfoSatisfied;
148
- /** True after the visitor has sent their first message (hides starter chips). */
149
- private hasSent;
150
- /** Starter prompts shown as chips in the empty state. */
151
- private examplePrompts;
152
- /** Resolved greeting text, cached so async (rAF) renders can reuse it. */
153
- private greeting;
154
- /** Current mid-turn interrupt (OTP / tool-confirmation), or null. */
155
- private interrupt;
156
- private interruptEl;
157
- /** Cross-device "restore my chats" flow state (ADR-048 §c). */
158
- private identityRestore;
159
- /** Whether the cross-device restore affordance is offered (config). */
160
- private allowChatRestore;
161
- /** True while the pre-chat identity gate is showing (blocks premature connect). */
162
- private gating;
163
- private panelEl;
164
- private launcherEl;
165
- private messagesEl;
166
- private statusEl;
167
- private dotEl;
168
- private inputEl;
169
- private sendBtn;
170
- /** The live streaming assistant bubble whose textContent the rAF loop drives. */
171
- private streamBubbleEl;
172
- /** Message id the reveal is bound to (guards against stale frames after rebuilds). */
173
- private streamMsgId;
174
- /** Full buffered target text for the streaming message (grows as tokens arrive). */
175
- private streamTarget;
176
- /** How many chars of {@link streamTarget} are currently shown. */
177
- private displayedLength;
178
- private rafId;
179
- constructor();
180
- connectedCallback(): void;
181
- disconnectedCallback(): void;
182
- attributeChangedCallback(): void;
183
- /**
184
- * Programmatically merge config overrides (endpoint, agentId, theme, …). Values
185
- * set here take precedence over HTML attributes. Re-renders the widget.
186
- */
187
- configure(config: Partial<ChatWidgetConfig>): void;
188
- /** Open the chat panel. */
189
- openChat(): void;
190
- /** Collapse the chat panel back to the launcher. */
191
- closeChat(): void;
192
- private readConfig;
193
- private render;
194
- /**
195
- * Render (or clear) the mid-turn interrupt overlay above the composer:
196
- * an OTP code prompt or a tool-write confirmation. Server-supplied text is
197
- * set via `textContent` (never innerHTML); only static icons use innerHTML.
198
- */
199
- private renderInterrupt;
200
- /**
201
- * Build the cross-device "Restore my chats" card (ADR-048 §c). Reuses the
202
- * same overlay slot + visual language as the OTP interrupt. All server-supplied
203
- * strings (masked destination, conversation previews) are set via `textContent`
204
- * — never innerHTML — so they can't inject markup; only the static lock icon
205
- * uses innerHTML.
206
- */
207
- private buildRestoreCard;
208
- /** Format an ISO timestamp as a short, locale-aware label (best-effort). */
209
- private formatWhen;
210
- /**
211
- * Wire as-you-type formatting + an inline validity hint onto the pre-chat
212
- * phone input (libphonenumber-js, US default region). Autofill is preserved:
213
- * the input keeps its `type="tel"` + `autocomplete="tel"` + implicit <label>,
214
- * and we also reformat on `change` so a browser-autofilled value gets
215
- * formatted/validated too.
216
- *
217
- * As-you-type caret note: `AsYouType` reformats the entire string, which
218
- * moves the caret to the end on a mid-string edit. To avoid fighting the
219
- * user, we only rewrite the value when the caret is at the end (the typical
220
- * append-a-digit case) and never on a deletion — so backspacing the
221
- * formatting characters works naturally.
222
- */
223
- private wirePhoneField;
224
- /** Collect identity + consent from the pre-chat form, then drop into the chat view. */
225
- private handlePrechatSubmit;
226
- /** Send a starter prompt (from a chip click). */
227
- private submitPrompt;
228
- private syncOpenState;
229
- /** Grow the textarea with its content, up to the CSS max-height. */
230
- private autosize;
231
- /**
232
- * Receive a new message snapshot from the controller and update the view.
233
- *
234
- * `onMessages` fires on *every* `stream_token` delta. Rebuilding the whole
235
- * list each frame is wasteful and fights the smooth reveal, so we take the
236
- * cheap path when the only change is the trailing streaming assistant message
237
- * growing: just bump the reveal *target* (the rAF loop drains it). Any
238
- * structural change (new message, finalize, citations) triggers a full
239
- * rebuild via {@link renderMessages}.
240
- */
241
- private handleMessages;
242
- private renderMessages;
243
- /** True when the host/user prefers reduced motion (snap, no typewriter). */
244
- private prefersReducedMotion;
245
- /**
246
- * Bind the rAF typewriter to a freshly built streaming bubble. Preserves the
247
- * already-revealed prefix across rebuilds (so a structural rebuild mid-stream
248
- * doesn't restart the reveal from zero), then resumes the loop.
249
- */
250
- private bindReveal;
251
- /** Start the rAF loop if it isn't already running. */
252
- private ensureRevealLoop;
253
- /**
254
- * One animation frame of the reveal. Advances `displayedLength` toward the
255
- * buffered target at an ADAPTIVE rate — the deeper the backlog, the more
256
- * chars per frame — so the reveal stays smooth yet never falls behind the
257
- * network. Updates ONLY the bound bubble's textContent (no list rebuild).
258
- */
259
- private tickReveal;
260
- /** Snap the bound bubble to the full buffered text immediately (reduced-motion / no-rAF). */
261
- private snapReveal;
262
- /**
263
- * Full-page sizing probe: decide whether the host's container gives it a
264
- * real box. With the `.wrap` flex chain hidden, `height: 100%` of a SIZED
265
- * container still resolves (clientHeight > 0), while an auto-height parent
266
- * (e.g. mounted straight into `<body>`) collapses to ~0. Only the latter
267
- * gets `data-viewport-fallback`, whose CSS applies `min-height: 100dvh` —
268
- * so an embed inside a fixed-height box never overflows it (the composer
269
- * stays visible), and a bare full-page route still fills the viewport.
270
- */
271
- private syncViewportFallback;
272
- /** Cancel any in-flight reveal loop and clear its state (called on full rebuild). */
273
- private resetReveal;
274
- /**
275
- * Auto-scroll the message list to the bottom — but don't fight a visitor who
276
- * has scrolled up to read history. When `force` (a structural rebuild) we
277
- * always pin to bottom; during the streaming reveal we only follow if the
278
- * viewport is already near the bottom.
279
- */
280
- private scrollToBottom;
281
- /** Wrap a bubble in a `.row`, prefixing assistant rows with a mini avatar. */
282
- private buildRow;
283
- private greetingBubble;
284
- private typingDot;
285
- /**
286
- * Build the collapsible "Sources (N)" block for an assistant message's
287
- * citations. Title/snippet are set via `textContent` (never innerHTML) so
288
- * citation text can't inject markup; only the static chevron + numeric count
289
- * use innerHTML.
290
- */
291
- private renderSources;
292
- private renderStatus;
293
- private renderComposerState;
294
- private submit;
295
- }
296
- /** Register the custom element once. Safe to call multiple times. */
297
- declare function defineChatWidget(): void;
298
- /**
299
- * Programmatically create, configure, and append a widget to the page.
300
- * Returns the element so the host can drive `openChat()` / `closeChat()`.
301
- */
302
- declare function mountChatWidget(config: ChatWidgetConfig, target?: HTMLElement): SmoothAgentChatElement;
303
- /**
304
- * Ergonomic helper for the full-page layout: mounts a `<smooth-agent-chat>` in
305
- * `mode: "fullpage"` (no launcher — the chat fills its container/viewport with a
306
- * Smooth-branded header, a scrollable message list, and an input bar) and
307
- * returns the element.
308
- *
309
- * `target` defaults to `document.body`; pass a sized container to embed the
310
- * full-page chat inside a layout region (e.g. a `/chat` route shell or an
311
- * iframe). The `mode` is forced to `"fullpage"` regardless of the passed config.
312
- *
313
- * ```ts
314
- * mountFullPageChat({ endpoint: 'wss://…/ws', agentId: '…', agentName: 'Support' });
315
- * ```
316
- */
317
- declare function mountFullPageChat(config: Omit<ChatWidgetConfig, 'mode'>, target?: HTMLElement): SmoothAgentChatElement;
318
- //#endregion
319
- //#region src/loader-core.d.ts
320
- /**
321
- * Tiny, dependency-free deferred loader for `@smooai/chat-widget`.
322
- *
323
- * The recommended embed: a host includes this *small* script eagerly, and it
324
- * defers injecting the real (heavier) `chat-widget.global.js` module until the
325
- * page is past its critical render — so the widget never competes with the host
326
- * page's LCP/TBT. It triggers the real load on the **first** of:
327
- *
328
- * - `window` `load` → `requestIdleCallback` (idle time), or
329
- * - user intent (`pointerdown` / `keydown` / `scroll`), or
330
- * - an 8s fallback.
331
- *
332
- * After the module loads (which registers `<smooth-agent-chat>` and exposes
333
- * `window.SmoothAgentChat`), it mounts the widget with the host's config.
334
- *
335
- * Deliberately imports nothing from the widget itself — this file must stay a
336
- * few hundred bytes so including it eagerly is free.
337
- *
338
- * ## Config
339
- * Set a global before/with the loader (any `ChatWidgetConfig`, plus an optional
340
- * `src` pointing at the module bundle):
341
- *
342
- * ```html
343
- * <script>window.SmoothAgentChatConfig = { endpoint: 'wss://…/ws', agentId: '…' };</script>
344
- * <script src="https://cdn/…/chat-widget-loader.global.js" async></script>
345
- * ```
346
- *
347
- * Or, for the simplest installs, `data-*` attributes on the loader's own tag
348
- * (`data-endpoint`, `data-agent-id`, `data-primary`, `data-mode`, `data-src`).
349
- * If no config is found, the module is still loaded (registering the element) so
350
- * a `<smooth-agent-chat …>` placed directly in markup upgrades itself.
351
- */
352
- /**
353
- * Install the deferred loader. Idempotent per call; the IIFE entry
354
- * (`loader.ts`) invokes it once on script execution.
355
- */
356
- declare function initChatWidgetLoader(): void;
357
- //#endregion
358
141
  //#region src/persistence.d.ts
359
142
  /** Current persisted-shape version. Bump when the shape below changes incompatibly. */
360
143
  declare const PERSIST_VERSION: 1;
@@ -450,6 +233,13 @@ interface ChatMessage {
450
233
  * defensively off the terminal event — see {@link extractCitations}.
451
234
  */
452
235
  citations?: Citation[];
236
+ /**
237
+ * Suggested follow-up replies ("quick replies") the agent offered on the
238
+ * terminal `eventual_response`. Set ONLY on the finalized assistant message —
239
+ * never mid-stream. Read defensively (see {@link extractSuggestions}); capped
240
+ * at 4 for layout. Absent when the turn offered none.
241
+ */
242
+ suggestions?: string[];
453
243
  }
454
244
  type ConnectionStatus = 'idle' | 'connecting' | 'ready' | 'error' | 'closed';
455
245
  /**
@@ -459,6 +249,9 @@ type ConnectionStatus = 'idle' | 'connecting' | 'ready' | 'error' | 'closed';
459
249
  * Resume with {@link ConversationController.verifyOtp}.
460
250
  * - `confirm` — the agent wants to run a state-mutating tool and needs approval.
461
251
  * Resume with {@link ConversationController.confirmTool}.
252
+ * - `interaction` — the agent raised a Rich Interaction (structured card, e.g.
253
+ * identity intake). Resume with {@link ConversationController.submitInteraction}
254
+ * or {@link ConversationController.declineInteraction}.
462
255
  */
463
256
  type Interrupt = {
464
257
  kind: 'otp';
@@ -475,6 +268,16 @@ type Interrupt = {
475
268
  kind: 'confirm';
476
269
  toolId?: string;
477
270
  actionDescription?: string;
271
+ } | {
272
+ kind: 'interaction'; /** Server-generated interaction instance id (echoed on submit). */
273
+ interactionId: string; /** The Rich Interaction kind (e.g. `identity_intake`) — selects the card. */
274
+ interactionKind: string; /** Kind-specific render spec (identity_intake: `{ fields: [...] }`). */
275
+ spec: Record<string, unknown>; /** Why the agent raised it (card header copy). */
276
+ reason?: string; /** Per-field server-side validation errors (from `interaction_invalid`). */
277
+ errors?: {
278
+ field: string;
279
+ message: string;
280
+ }[];
478
281
  };
479
282
  interface UserInfo {
480
283
  name?: string;
@@ -552,6 +355,9 @@ declare class ConversationController {
552
355
  /** requestId of the in-flight turn — used to resume OTP / tool confirmations. */
553
356
  private activeRequestId;
554
357
  private interrupt;
358
+ /** Values from the last interaction submit, merged into the persisted
359
+ * identity (identity_intake only) once the server acks them. */
360
+ private pendingInteractionValues;
555
361
  private identityRestore;
556
362
  /**
557
363
  * True once the resume probe (persisted-pointer get_session OR the
@@ -586,6 +392,16 @@ declare class ConversationController {
586
392
  verifyOtp(code: string): void;
587
393
  /** Approve or reject a pending tool write to resume the paused turn. */
588
394
  confirmTool(approved: boolean): void;
395
+ /**
396
+ * Submit a Rich Interaction card to resume the parked turn. The server
397
+ * routes to the kind's validator: invalid values come back as an
398
+ * `interaction_invalid` event (the card re-renders with per-field errors —
399
+ * the turn stays parked); a valid submit is acked and the turn resumes.
400
+ * No-op if not awaiting an interaction.
401
+ */
402
+ submitInteraction(values: Record<string, unknown>): void;
403
+ /** Decline the pending Rich Interaction; the agent continues without it. */
404
+ declineInteraction(): void;
589
405
  private nextId;
590
406
  private setStatus;
591
407
  private emitMessages;
@@ -679,6 +495,242 @@ declare class ConversationController {
679
495
  disconnect(): void;
680
496
  }
681
497
  //#endregion
498
+ //#region src/element.d.ts
499
+ declare const ELEMENT_TAG = "smooth-agent-chat";
500
+ declare class SmoothAgentChatElement extends HTMLElement {
501
+ static get observedAttributes(): readonly string[];
502
+ private readonly root;
503
+ private controller;
504
+ private overrides;
505
+ private open;
506
+ private messages;
507
+ private status;
508
+ private mounted;
509
+ /** True once the visitor has cleared the pre-chat identity gate (or it's not needed). */
510
+ private userInfoSatisfied;
511
+ /** True after the visitor has sent their first message (hides starter chips). */
512
+ private hasSent;
513
+ /** Starter prompts shown as chips in the empty state. */
514
+ private examplePrompts;
515
+ /** Whether mid-conversation suggested-reply chips are shown (config). */
516
+ private showSuggestedReplies;
517
+ /** Resolved greeting text, cached so async (rAF) renders can reuse it. */
518
+ private greeting;
519
+ /** Current mid-turn interrupt (OTP / tool-confirmation), or null. */
520
+ private interrupt;
521
+ private interruptEl;
522
+ /** Cross-device "restore my chats" flow state (ADR-048 §c). */
523
+ private identityRestore;
524
+ /** Whether the cross-device restore affordance is offered (config). */
525
+ private allowChatRestore;
526
+ /** True while the pre-chat identity gate is showing (blocks premature connect). */
527
+ private gating;
528
+ private panelEl;
529
+ private launcherEl;
530
+ private messagesEl;
531
+ private statusEl;
532
+ private dotEl;
533
+ private inputEl;
534
+ private sendBtn;
535
+ private suggestionsEl;
536
+ /** The live streaming assistant bubble whose textContent the rAF loop drives. */
537
+ private streamBubbleEl;
538
+ /** Message id the reveal is bound to (guards against stale frames after rebuilds). */
539
+ private streamMsgId;
540
+ /** Full buffered target text for the streaming message (grows as tokens arrive). */
541
+ private streamTarget;
542
+ /** How many chars of {@link streamTarget} are currently shown. */
543
+ private displayedLength;
544
+ private rafId;
545
+ constructor();
546
+ connectedCallback(): void;
547
+ disconnectedCallback(): void;
548
+ attributeChangedCallback(): void;
549
+ /**
550
+ * Programmatically merge config overrides (endpoint, agentId, theme, …). Values
551
+ * set here take precedence over HTML attributes. Re-renders the widget.
552
+ */
553
+ configure(config: Partial<ChatWidgetConfig>): void;
554
+ /** Open the chat panel. */
555
+ openChat(): void;
556
+ /** Collapse the chat panel back to the launcher. */
557
+ closeChat(): void;
558
+ private readConfig;
559
+ private render;
560
+ /**
561
+ * Render (or clear) the mid-turn interrupt overlay above the composer:
562
+ * an OTP code prompt or a tool-write confirmation. Server-supplied text is
563
+ * set via `textContent` (never innerHTML); only static icons use innerHTML.
564
+ */
565
+ private renderInterrupt;
566
+ /**
567
+ * Build the cross-device "Restore my chats" card (ADR-048 §c). Reuses the
568
+ * same overlay slot + visual language as the OTP interrupt. All server-supplied
569
+ * strings (masked destination, conversation previews) are set via `textContent`
570
+ * — never innerHTML — so they can't inject markup; only the static lock icon
571
+ * uses innerHTML.
572
+ */
573
+ private buildRestoreCard;
574
+ /** Format an ISO timestamp as a short, locale-aware label (best-effort). */
575
+ private formatWhen;
576
+ /**
577
+ * Wire as-you-type formatting + an inline validity hint onto the pre-chat
578
+ * phone input (libphonenumber-js, US default region). Autofill is preserved:
579
+ * the input keeps its `type="tel"` + `autocomplete="tel"` + implicit <label>,
580
+ * and we also reformat on `change` so a browser-autofilled value gets
581
+ * formatted/validated too.
582
+ *
583
+ * As-you-type caret note: `AsYouType` reformats the entire string, which
584
+ * moves the caret to the end on a mid-string edit. To avoid fighting the
585
+ * user, we only rewrite the value when the caret is at the end (the typical
586
+ * append-a-digit case) and never on a deletion — so backspacing the
587
+ * formatting characters works naturally.
588
+ */
589
+ private wirePhoneField;
590
+ /** Collect identity + consent from the pre-chat form, then drop into the chat view. */
591
+ private handlePrechatSubmit;
592
+ /** Send a starter prompt (from a chip click). */
593
+ private submitPrompt;
594
+ private syncOpenState;
595
+ /** Grow the textarea with its content, up to the CSS max-height. */
596
+ private autosize;
597
+ /**
598
+ * Receive a new message snapshot from the controller and update the view.
599
+ *
600
+ * `onMessages` fires on *every* `stream_token` delta. Rebuilding the whole
601
+ * list each frame is wasteful and fights the smooth reveal, so we take the
602
+ * cheap path when the only change is the trailing streaming assistant message
603
+ * growing: just bump the reveal *target* (the rAF loop drains it). Any
604
+ * structural change (new message, finalize, citations) triggers a full
605
+ * rebuild via {@link renderMessages}.
606
+ */
607
+ private handleMessages;
608
+ private renderMessages;
609
+ /**
610
+ * Render (or clear) the mid-conversation suggested-reply chips under the
611
+ * composer. Shown ONLY when: the feature is enabled, no interrupt / restore
612
+ * overlay is active (those reuse the slot above the composer), and the LATEST
613
+ * message is a finalized assistant turn that carried suggestions. A new turn
614
+ * (agent or the visitor typing) appends messages, so the latest is no longer
615
+ * that assistant message and the chips clear on the next render. Chips reuse
616
+ * the empty-state `.prompts`/`.chip` styling and send via the same path.
617
+ */
618
+ private renderSuggestions;
619
+ /** True when the host/user prefers reduced motion (snap, no typewriter). */
620
+ private prefersReducedMotion;
621
+ /**
622
+ * Bind the rAF typewriter to a freshly built streaming bubble. Preserves the
623
+ * already-revealed prefix across rebuilds (so a structural rebuild mid-stream
624
+ * doesn't restart the reveal from zero), then resumes the loop.
625
+ */
626
+ private bindReveal;
627
+ /** Start the rAF loop if it isn't already running. */
628
+ private ensureRevealLoop;
629
+ /**
630
+ * One animation frame of the reveal. Advances `displayedLength` toward the
631
+ * buffered target at an ADAPTIVE rate — the deeper the backlog, the more
632
+ * chars per frame — so the reveal stays smooth yet never falls behind the
633
+ * network. Updates ONLY the bound bubble's textContent (no list rebuild).
634
+ */
635
+ private tickReveal;
636
+ /** Snap the bound bubble to the full buffered text immediately (reduced-motion / no-rAF). */
637
+ private snapReveal;
638
+ /**
639
+ * Full-page sizing probe: decide whether the host's container gives it a
640
+ * real box. With the `.wrap` flex chain hidden, `height: 100%` of a SIZED
641
+ * container still resolves (clientHeight > 0), while an auto-height parent
642
+ * (e.g. mounted straight into `<body>`) collapses to ~0. Only the latter
643
+ * gets `data-viewport-fallback`, whose CSS applies `min-height: 100dvh` —
644
+ * so an embed inside a fixed-height box never overflows it (the composer
645
+ * stays visible), and a bare full-page route still fills the viewport.
646
+ */
647
+ private syncViewportFallback;
648
+ /** Cancel any in-flight reveal loop and clear its state (called on full rebuild). */
649
+ private resetReveal;
650
+ /**
651
+ * Auto-scroll the message list to the bottom — but don't fight a visitor who
652
+ * has scrolled up to read history. When `force` (a structural rebuild) we
653
+ * always pin to bottom; during the streaming reveal we only follow if the
654
+ * viewport is already near the bottom.
655
+ */
656
+ private scrollToBottom;
657
+ /** Wrap a bubble in a `.row`, prefixing assistant rows with a mini avatar. */
658
+ private buildRow;
659
+ private greetingBubble;
660
+ private typingDot;
661
+ /**
662
+ * Build the collapsible "Sources (N)" block for an assistant message's
663
+ * citations. Title/snippet are set via `textContent` (never innerHTML) so
664
+ * citation text can't inject markup; only the static chevron + numeric count
665
+ * use innerHTML.
666
+ */
667
+ private renderSources;
668
+ private renderStatus;
669
+ private renderComposerState;
670
+ private submit;
671
+ }
672
+ /** Register the custom element once. Safe to call multiple times. */
673
+ declare function defineChatWidget(): void;
674
+ /**
675
+ * Programmatically create, configure, and append a widget to the page.
676
+ * Returns the element so the host can drive `openChat()` / `closeChat()`.
677
+ */
678
+ declare function mountChatWidget(config: ChatWidgetConfig, target?: HTMLElement): SmoothAgentChatElement;
679
+ /**
680
+ * Ergonomic helper for the full-page layout: mounts a `<smooth-agent-chat>` in
681
+ * `mode: "fullpage"` (no launcher — the chat fills its container/viewport with a
682
+ * Smooth-branded header, a scrollable message list, and an input bar) and
683
+ * returns the element.
684
+ *
685
+ * `target` defaults to `document.body`; pass a sized container to embed the
686
+ * full-page chat inside a layout region (e.g. a `/chat` route shell or an
687
+ * iframe). The `mode` is forced to `"fullpage"` regardless of the passed config.
688
+ *
689
+ * ```ts
690
+ * mountFullPageChat({ endpoint: 'wss://…/ws', agentId: '…', agentName: 'Support' });
691
+ * ```
692
+ */
693
+ declare function mountFullPageChat(config: Omit<ChatWidgetConfig, 'mode'>, target?: HTMLElement): SmoothAgentChatElement;
694
+ //#endregion
695
+ //#region src/loader-core.d.ts
696
+ /**
697
+ * Tiny, dependency-free deferred loader for `@smooai/chat-widget`.
698
+ *
699
+ * The recommended embed: a host includes this *small* script eagerly, and it
700
+ * defers injecting the real (heavier) `chat-widget.global.js` module until the
701
+ * page is past its critical render — so the widget never competes with the host
702
+ * page's LCP/TBT. It triggers the real load on the **first** of:
703
+ *
704
+ * - `window` `load` → `requestIdleCallback` (idle time), or
705
+ * - user intent (`pointerdown` / `keydown` / `scroll`), or
706
+ * - an 8s fallback.
707
+ *
708
+ * After the module loads (which registers `<smooth-agent-chat>` and exposes
709
+ * `window.SmoothAgentChat`), it mounts the widget with the host's config.
710
+ *
711
+ * Deliberately imports nothing from the widget itself — this file must stay a
712
+ * few hundred bytes so including it eagerly is free.
713
+ *
714
+ * ## Config
715
+ * Set a global before/with the loader (any `ChatWidgetConfig`, plus an optional
716
+ * `src` pointing at the module bundle):
717
+ *
718
+ * ```html
719
+ * <script>window.SmoothAgentChatConfig = { endpoint: 'wss://…/ws', agentId: '…' };</script>
720
+ * <script src="https://cdn/…/chat-widget-loader.global.js" async></script>
721
+ * ```
722
+ *
723
+ * Or, for the simplest installs, `data-*` attributes on the loader's own tag
724
+ * (`data-endpoint`, `data-agent-id`, `data-primary`, `data-mode`, `data-src`).
725
+ * If no config is found, the module is still loaded (registering the element) so
726
+ * a `<smooth-agent-chat …>` placed directly in markup upgrades itself.
727
+ */
728
+ /**
729
+ * Install the deferred loader. Idempotent per call; the IIFE entry
730
+ * (`loader.ts`) invokes it once on script execution.
731
+ */
732
+ declare function initChatWidgetLoader(): void;
733
+ //#endregion
682
734
  //#region src/fingerprint.d.ts
683
735
  /**
684
736
  * Browser fingerprint — a stable, privacy-light identifier used by the
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/config.ts","../src/element.ts","../src/loader-core.ts","../src/persistence.ts","../src/conversation.ts","../src/fingerprint.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/config.ts","../src/persistence.ts","../src/conversation.ts","../src/element.ts","../src/loader-core.ts","../src/fingerprint.ts"],"mappings":"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"}