@helpai/elements 1.12.7 → 1.12.9

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/llms.txt CHANGED
@@ -1,11 +1,11 @@
1
1
  # Help AI Elements
2
2
 
3
- > Help AI's AI chat widget for any website: an AI agent that answers visitors from the customer's own help content, can hand the chat to a person, and shows Help articles and News. Install it with one script tag, the `<web-ai-chat>` element, the npm API or the React kit. These docs match @helpai/elements@1.12.7.
3
+ > Help AI's AI chat widget for any website: an AI agent that answers visitors from the customer's own help content, can hand the chat to a person, and shows Help articles and News. Install it with one script tag, the `<web-ai-chat>` element, the npm API or the React kit. These docs match @helpai/elements@1.12.9.
4
4
 
5
5
  What a coding agent needs to install it right the first time:
6
6
 
7
7
  - Two values come from the deployment's Install page in the Help AI dashboard: the public key (`agent_pk_…`) and the AI agent deployment id (a UUID). Both belong in browser code. The deployment's secret key never does.
8
- - Plain HTML, WordPress or any CMS: `<script src="https://cdn.help.ai/sdk/js/elements/1.12.7/elements.js" data-public-key="agent_pk_…" data-ai-agent-deployment-id="…" defer></script>`.
8
+ - Plain HTML, WordPress or any CMS: `<script src="https://cdn.help.ai/sdk/js/elements/1.12.9/elements.js" data-public-key="agent_pk_…" data-ai-agent-deployment-id="…" defer></script>`.
9
9
  - React, Next.js, Remix: install `@helpai/elements` and render `<HelpAI publicKey="…" aiAgentDeploymentId="…" />` from `@helpai/elements/react` once, in the root layout. `useHelpAI()` in any component returns `{ state, ask, open, close, reset }`. It is server-render safe; import everything from `@helpai/elements/react`.
10
10
  - Vue, Svelte, Angular and other bundlers: `import '@helpai/elements/web-component'`, then `<web-ai-chat public-key="…" ai-agent-deployment-id="…"></web-ai-chat>`. JSX typings: `@helpai/elements/jsx/react`, `/jsx/vue`, `/jsx/svelte`.
11
11
  - Site buttons need no JavaScript: `data-helpai-ask="Which plan fits a team of 10?"` puts the question in the chat, `data-helpai-open="help"` opens a tab (`home`, `chats`, `help`, `news`). In code, `ask(text)` fills the composer and sends only with `{ send: true }`.
@@ -18,23 +18,23 @@ What a coding agent needs to install it right the first time:
18
18
 
19
19
  ## Docs
20
20
 
21
- - [Quickstart](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/quickstart.md): credentials, the install paths and a first check, in five minutes
22
- - [Installation](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/installation.md): every install path in depth: script tag, async loader, npm, web component, CDN URLs and version pinning
23
- - [Frameworks](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/frameworks.md): the React kit (`<HelpAI />`, `useHelpAI()`), Next.js, Remix, Vue, Nuxt, Svelte, Astro, Angular, WordPress, Shopify, Webflow
24
- - [Configuration](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/configuration.md): every option by group, with examples
25
- - [Option reference](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/options.md): the table of every option, generated from the schemas; authoritative
26
- - [API reference](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/api-reference.md): exports, instance methods (`ask`, `open`, `state`, `ready`, `reset`, …), the global API, no-script triggers, deep links, JSX typings
27
- - [Events and hooks](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/events-and-hooks.md): every event and its payload, `on()` and `hook()`
28
- - [Page tools](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/page-tools.md): WebMCP-shaped tools the AI agent calls on your page (`registerTool`, `tools`, `useHelpAITool`, `<form toolname>`), run once in the browser
29
- - [Theming](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/theming.md): colors, shapes, fonts, launcher styles, `theme: "host"` and `::part()` styling
30
- - [Recipes](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/recipes.md): copy-paste solutions for common integrations
31
- - [Analytics](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/analytics.md): sending widget activity to Google Analytics, Segment, PostHog and other trackers
32
- - [Security and privacy](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/security-privacy.md): isolation, CSP, what the widget stores and sends
33
- - [Browser support](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/browser-support.md): supported browsers and fallbacks
34
- - [Troubleshooting](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/troubleshooting.md): an install that does not show, connect or answer
35
- - [FAQ](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/faq.md): short answers to common questions
36
- - [Overview](https://cdn.help.ai/sdk/js/elements/1.12.7/docs/README.md): the whole SDK on one page
21
+ - [Quickstart](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/quickstart.md): credentials, the install paths and a first check, in five minutes
22
+ - [Installation](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/installation.md): every install path in depth: script tag, async loader, npm, web component, CDN URLs and version pinning
23
+ - [Frameworks](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/frameworks.md): the React kit (`<HelpAI />`, `useHelpAI()`), Next.js, Remix, Vue, Nuxt, Svelte, Astro, Angular, WordPress, Shopify, Webflow
24
+ - [Configuration](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/configuration.md): every option by group, with examples
25
+ - [Option reference](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/options.md): the table of every option, generated from the schemas; authoritative
26
+ - [API reference](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/api-reference.md): exports, instance methods (`ask`, `open`, `state`, `ready`, `reset`, …), the global API, no-script triggers, deep links, JSX typings
27
+ - [Events and hooks](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/events-and-hooks.md): every event and its payload, `on()` and `hook()`
28
+ - [Page tools](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/page-tools.md): WebMCP-shaped tools the AI agent calls on your page (`registerTool`, `tools`, `useHelpAITool`, `<form toolname>`), run once in the browser
29
+ - [Theming](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/theming.md): colors, shapes, fonts, launcher styles, `theme: "host"` and `::part()` styling
30
+ - [Recipes](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/recipes.md): copy-paste solutions for common integrations
31
+ - [Analytics](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/analytics.md): sending widget activity to Google Analytics, Segment, PostHog and other trackers
32
+ - [Security and privacy](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/security-privacy.md): isolation, CSP, what the widget stores and sends
33
+ - [Browser support](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/browser-support.md): supported browsers and fallbacks
34
+ - [Troubleshooting](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/troubleshooting.md): an install that does not show, connect or answer
35
+ - [FAQ](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/faq.md): short answers to common questions
36
+ - [Overview](https://cdn.help.ai/sdk/js/elements/1.12.9/docs/README.md): the whole SDK on one page
37
37
 
38
38
  ## Optional
39
39
 
40
- - [Every doc in one file](https://cdn.help.ai/sdk/js/elements/1.12.7/llms-full.txt): the docs above, concatenated
40
+ - [Every doc in one file](https://cdn.help.ai/sdk/js/elements/1.12.9/llms-full.txt): the docs above, concatenated
package/package.json CHANGED
@@ -117,5 +117,5 @@
117
117
  ],
118
118
  "type": "module",
119
119
  "types": "./index.d.ts",
120
- "version": "1.12.7"
120
+ "version": "1.12.9"
121
121
  }
package/react.d.ts CHANGED
@@ -39,7 +39,7 @@ interface ClientStorage {
39
39
  * populated {@link Strings} map. UI components then read `strings.send` as a
40
40
  * normal property access — no per-render lookup, no per-render allocation.
41
41
  */
42
- type StringKey = 'launcherOpen' | 'launcherLabel' | 'panelTitle' | 'composerPlaceholder' | 'send' | 'stop' | 'queueMessage' | 'removeQueuedMessage' | 'compactingContext' | 'attach' | 'micStart' | 'micStop' | 'micUnsupported' | 'expand' | 'collapse' | 'fullscreen' | 'exitFullscreen' | 'popOut' | 'resizeHandle' | 'scrollToBottom' | 'close' | 'moreActions' | 'soundOn' | 'soundOff' | 'language' | 'theme' | 'themeAuto' | 'themeLight' | 'themeDark' | 'textSize' | 'textSizeSmall' | 'textSizeNormal' | 'textSizeLarge' | 'history' | 'historyTitle' | 'historyEmpty' | 'historyLoading' | 'historyBack' | 'historyContinue' | 'loadMoreConversations' | 'conversationLoading' | 'loadPreviousMessages' | 'conversationClosed' | 'startNewConversation' | 'talkToOperator' | 'connectingOperator' | 'noOperatorAvailable' | 'chattingWithOperator' | 'cancelOperatorRequest' | 'dateToday' | 'dateYesterday' | 'dateLastWeek' | 'dateOlder' | 'newConversation' | 'dropZone' | 'attachmentTooLarge' | 'attachmentTooMany' | 'attachmentMimeRejected' | 'errorRetry' | 'errorGeneric' | 'errorRateLimited' | 'loading' | 'visualPreparing' | 'visualError' | 'visualPartial' | 'thinking' | 'thoughts' | 'toolResult' | 'sources' | 'feedbackUp' | 'feedbackDown' | 'feedbackThanks' | 'copy' | 'copied' | 'collapseSidebar' | 'expandSidebar' | 'formSubmit' | 'formSkip' | 'formSubmitted' | 'formSkipped' | 'formFillOut' | 'formRequired' | 'formInvalidEmail' | 'formInvalidTel' | 'formInvalidUrl' | 'formInvalidNumber' | 'formTooShort' | 'formTooLong' | 'formNumberTooSmall' | 'formNumberTooLarge' | 'formPatternMismatch' | 'formChooseAtLeast' | 'formChooseAtMost' | 'formOther' | 'formOtherPlaceholder' | 'inputRequired' | 'inputBadge' | 'inputAnswered' | 'inputSkipped' | 'inputSubmit' | 'inputSubmitHint' | 'inputSkip' | 'showOptions' | 'hideOptions' | 'qtypeText' | 'qtypeEmail' | 'qtypePhone' | 'qtypeNumber' | 'qtypeDate' | 'qtypeChooseOne' | 'qtypeChooseAny' | 'qtypeBoolean' | 'confirmYes' | 'confirmNo' | 'approve' | 'reject' | 'approvalPrompt' | 'approvalBody' | 'approvalYourResponse' | 'approvalEditHint' | 'approvalSubmitting' | 'edit' | 'toolParameters' | 'statusAwaiting' | 'statusResponded' | 'statusCompleted' | 'statusDenied' | 'statusError' | 'statusRunning' | 'statusSuperseded' | 'statusIncomplete' | 'tabHome' | 'tabConversations' | 'tabHelp' | 'tabNews' | 'modulesEmpty' | 'moduleBack' | 'contentLoading' | 'contentHelpful' | 'homeGreeting' | 'homeGreetingNamed' | 'homeGreetingLead' | 'homeSearchPlaceholder' | 'homeAskPlaceholder' | 'homeWhatsNew' | 'homeContentTitle' | 'homeStatus' | 'helpTitle' | 'helpSearchPlaceholder' | 'helpEmpty' | 'helpLoading' | 'helpSearchEmpty' | 'helpShowMore' | 'newsTitle' | 'newsEmpty' | 'newsLoading' | 'newsBack' | 'newsPublishedAt' | 'newsShowMore' | 'newsUnseen';
42
+ type StringKey = 'launcherOpen' | 'launcherLabel' | 'panelTitle' | 'composerPlaceholder' | 'send' | 'stop' | 'queueMessage' | 'removeQueuedMessage' | 'compactingContext' | 'attach' | 'file' | 'micStart' | 'micStop' | 'micUnsupported' | 'expand' | 'collapse' | 'fullscreen' | 'exitFullscreen' | 'popOut' | 'resizeHandle' | 'scrollToBottom' | 'close' | 'moreActions' | 'soundOn' | 'soundOff' | 'language' | 'theme' | 'themeAuto' | 'themeLight' | 'themeDark' | 'textSize' | 'textSizeSmall' | 'textSizeNormal' | 'textSizeLarge' | 'history' | 'historyTitle' | 'historyEmpty' | 'historyLoading' | 'historyBack' | 'historyContinue' | 'loadMoreConversations' | 'conversationLoading' | 'loadPreviousMessages' | 'conversationClosed' | 'startNewConversation' | 'talkToOperator' | 'connectingOperator' | 'noOperatorAvailable' | 'chattingWithOperator' | 'cancelOperatorRequest' | 'dateToday' | 'dateYesterday' | 'dateLastWeek' | 'dateOlder' | 'newConversation' | 'dropZone' | 'attachmentTooLarge' | 'attachmentTooMany' | 'attachmentMimeRejected' | 'errorRetry' | 'errorGeneric' | 'errorRateLimited' | 'loading' | 'visualPreparing' | 'visualError' | 'visualPartial' | 'thinking' | 'thoughts' | 'toolResult' | 'sources' | 'feedbackUp' | 'feedbackDown' | 'feedbackThanks' | 'copy' | 'copied' | 'collapseSidebar' | 'expandSidebar' | 'formSubmit' | 'formSkip' | 'formSubmitted' | 'formSkipped' | 'formFillOut' | 'formRequired' | 'formInvalidEmail' | 'formInvalidTel' | 'formInvalidUrl' | 'formInvalidNumber' | 'formTooShort' | 'formTooLong' | 'formNumberTooSmall' | 'formNumberTooLarge' | 'formPatternMismatch' | 'formChooseAtLeast' | 'formChooseAtMost' | 'formOther' | 'formOtherPlaceholder' | 'inputRequired' | 'inputBadge' | 'inputAnswered' | 'inputSkipped' | 'inputSubmit' | 'inputSubmitHint' | 'inputSkip' | 'showOptions' | 'hideOptions' | 'qtypeText' | 'qtypeEmail' | 'qtypePhone' | 'qtypeNumber' | 'qtypeDate' | 'qtypeChooseOne' | 'qtypeChooseAny' | 'qtypeBoolean' | 'confirmYes' | 'confirmNo' | 'approve' | 'reject' | 'approvalPrompt' | 'approvalBody' | 'approvalYourResponse' | 'approvalEditHint' | 'approvalSubmitting' | 'edit' | 'toolParameters' | 'statusAwaiting' | 'statusResponded' | 'statusCompleted' | 'statusDenied' | 'statusError' | 'statusRunning' | 'statusSuperseded' | 'statusIncomplete' | 'tabHome' | 'tabConversations' | 'tabHelp' | 'tabNews' | 'modulesEmpty' | 'moduleBack' | 'contentLoading' | 'contentHelpful' | 'homeGreeting' | 'homeGreetingNamed' | 'homeGreetingLead' | 'homeSearchPlaceholder' | 'homeAskPlaceholder' | 'homeWhatsNew' | 'homeContentTitle' | 'homeStatus' | 'helpTitle' | 'helpSearchPlaceholder' | 'helpEmpty' | 'helpLoading' | 'helpSearchEmpty' | 'helpShowMore' | 'newsTitle' | 'newsEmpty' | 'newsLoading' | 'newsBack' | 'newsPublishedAt' | 'newsShowMore' | 'newsUnseen';
43
43
  /** A partial map for one locale — what overrides look like on the wire. */
44
44
  type LocaleStrings = Partial<Record<StringKey, string>>;
45
45
  /**
@@ -259,8 +259,9 @@ interface FeedbackOptions {
259
259
  * interfaces are what the resolver, controller, and form UI consume.
260
260
  *
261
261
  * A deployment declares an array of {@link FormDef}s; each is bound to trigger
262
- * event(s) and shown as a gate that replaces the composer (locking the chat
263
- * until submit/skip). Its answers are recorded via one shared submit endpoint.
262
+ * event(s) and shown as the last conversation row; a `blocking` one also locks
263
+ * the message box until submit/skip. Its answers are recorded via one shared
264
+ * submit endpoint.
264
265
  * Generic across verticals — there is NO industry logic; a clinic intake, an
265
266
  * insurance claim form, a CSAT survey, and a sales signal capture are all just
266
267
  * different config.
@@ -349,6 +350,8 @@ interface FormDef {
349
350
  description?: string;
350
351
  submitLabel?: string;
351
352
  skippable?: boolean;
353
+ /** Lock the message box until the visitor submits or skips. Default `false`. */
354
+ blocking?: boolean;
352
355
  /** Default `once`. */
353
356
  frequency?: FormFrequency;
354
357
  /**
@@ -425,6 +428,8 @@ interface ResolvedForm {
425
428
  description?: string;
426
429
  submitLabel?: string;
427
430
  skippable: boolean;
431
+ /** Locks the message box until submit/skip (false → the visitor keeps chatting). */
432
+ blocking: boolean;
428
433
  frequency: FormFrequency;
429
434
  /** Mirror answers into `userContext` (false → PII, endpoint only). */
430
435
  mirrorToContext: boolean;
@@ -1459,6 +1464,7 @@ declare const widgetSettingsSchema: z.ZodObject<{
1459
1464
  description: z.ZodOptional<z.ZodString>;
1460
1465
  submitLabel: z.ZodOptional<z.ZodString>;
1461
1466
  skippable: z.ZodDefault<z.ZodBoolean>;
1467
+ blocking: z.ZodDefault<z.ZodBoolean>;
1462
1468
  frequency: z.ZodDefault<z.ZodEnum<{
1463
1469
  always: "always";
1464
1470
  conversation: "conversation";
@@ -1801,6 +1807,7 @@ declare const widgetConfigSchema: z.ZodObject<{
1801
1807
  description: z.ZodOptional<z.ZodString>;
1802
1808
  submitLabel: z.ZodOptional<z.ZodString>;
1803
1809
  skippable: z.ZodDefault<z.ZodBoolean>;
1810
+ blocking: z.ZodDefault<z.ZodBoolean>;
1804
1811
  frequency: z.ZodDefault<z.ZodEnum<{
1805
1812
  always: "always";
1806
1813
  conversation: "conversation";
@@ -2144,6 +2151,7 @@ declare const widgetConfigPartialSchema: z.ZodObject<{
2144
2151
  description: z.ZodOptional<z.ZodString>;
2145
2152
  submitLabel: z.ZodOptional<z.ZodString>;
2146
2153
  skippable: z.ZodDefault<z.ZodBoolean>;
2154
+ blocking: z.ZodDefault<z.ZodBoolean>;
2147
2155
  frequency: z.ZodDefault<z.ZodEnum<{
2148
2156
  always: "always";
2149
2157
  conversation: "conversation";
@@ -2449,6 +2457,7 @@ declare const widgetSettingsPartialSchema: z.ZodObject<{
2449
2457
  description: z.ZodOptional<z.ZodString>;
2450
2458
  submitLabel: z.ZodOptional<z.ZodString>;
2451
2459
  skippable: z.ZodDefault<z.ZodBoolean>;
2460
+ blocking: z.ZodDefault<z.ZodBoolean>;
2452
2461
  frequency: z.ZodDefault<z.ZodEnum<{
2453
2462
  always: "always";
2454
2463
  conversation: "conversation";