@burdenoff/website-sdk 2026.1101.2 → 2026.1101.4

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.
@@ -28,6 +28,13 @@ interface ExploreCtaProps {
28
28
  expanded?: boolean;
29
29
  /** BOFF-9697. The id of the panel the button opens; used only together with `expanded`. */
30
30
  controls?: string;
31
+ /**
32
+ * BOFF-9797. `floating` only: a CSS length to lift the bubble by, the site's cookie banner's height (say
33
+ * `var(--hb-cookie-banner-height, 0px)`), so a banner on screen does not cover it. The bubble then sits at
34
+ * `calc(1.25rem + bottomOffset)` from the bottom, set inline, so it wins over a `bottom-*` class in `className`.
35
+ * Unset: the bubble's usual place (`bottom-5`), exactly as before.
36
+ */
37
+ bottomOffset?: string;
31
38
  }
32
39
  /** The rendered `<a>` is forwarded, so a panel can return focus to the button that opened it (BOFF-9697). */
33
40
  declare const ExploreCta: react.ForwardRefExoticComponent<ExploreCtaProps & react.RefAttributes<HTMLAnchorElement>>;
@@ -28,6 +28,13 @@ interface ExploreCtaProps {
28
28
  expanded?: boolean;
29
29
  /** BOFF-9697. The id of the panel the button opens; used only together with `expanded`. */
30
30
  controls?: string;
31
+ /**
32
+ * BOFF-9797. `floating` only: a CSS length to lift the bubble by, the site's cookie banner's height (say
33
+ * `var(--hb-cookie-banner-height, 0px)`), so a banner on screen does not cover it. The bubble then sits at
34
+ * `calc(1.25rem + bottomOffset)` from the bottom, set inline, so it wins over a `bottom-*` class in `className`.
35
+ * Unset: the bubble's usual place (`bottom-5`), exactly as before.
36
+ */
37
+ bottomOffset?: string;
31
38
  }
32
39
  /** The rendered `<a>` is forwarded, so a panel can return focus to the button that opened it (BOFF-9697). */
33
40
  declare const ExploreCta: react.ForwardRefExoticComponent<ExploreCtaProps & react.RefAttributes<HTMLAnchorElement>>;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkOYEUNZJY_js = require('../chunk-OYEUNZJY.js');
3
+ var chunkPIXTBL63_js = require('../chunk-PIXTBL63.js');
4
4
  require('../chunk-C6OJIHNO.js');
5
5
  require('../chunk-ZSTFX7FV.js');
6
6
 
@@ -8,7 +8,7 @@ require('../chunk-ZSTFX7FV.js');
8
8
 
9
9
  Object.defineProperty(exports, "ExploreCta", {
10
10
  enumerable: true,
11
- get: function () { return chunkOYEUNZJY_js.ExploreCta; }
11
+ get: function () { return chunkPIXTBL63_js.ExploreCta; }
12
12
  });
13
13
  //# sourceMappingURL=explore-cta.js.map
14
14
  //# sourceMappingURL=explore-cta.js.map
@@ -1,4 +1,4 @@
1
- export { ExploreCta } from '../chunk-Y4V5CEWD.mjs';
1
+ export { ExploreCta } from '../chunk-2LPDCXQH.mjs';
2
2
  import '../chunk-R7G6TWIS.mjs';
3
3
  import '../chunk-VNS5WDWO.mjs';
4
4
  //# sourceMappingURL=explore-cta.mjs.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkO76QDGRM_js = require('../chunk-O76QDGRM.js');
3
+ var chunkR742FS5E_js = require('../chunk-R742FS5E.js');
4
4
  require('../chunk-O4GS3XPZ.js');
5
5
  require('../chunk-SK5UGG6A.js');
6
6
  require('../chunk-PHXAGQNB.js');
@@ -18,51 +18,51 @@ require('../chunk-ZSTFX7FV.js');
18
18
 
19
19
  Object.defineProperty(exports, "EXPLORE_PREFILL_MAX_LENGTH", {
20
20
  enumerable: true,
21
- get: function () { return chunkO76QDGRM_js.EXPLORE_PREFILL_MAX_LENGTH; }
21
+ get: function () { return chunkR742FS5E_js.EXPLORE_PREFILL_MAX_LENGTH; }
22
22
  });
23
23
  Object.defineProperty(exports, "ExplorePage", {
24
24
  enumerable: true,
25
- get: function () { return chunkO76QDGRM_js.ExplorePage; }
25
+ get: function () { return chunkR742FS5E_js.ExplorePage; }
26
26
  });
27
27
  Object.defineProperty(exports, "answerPlainText", {
28
28
  enumerable: true,
29
- get: function () { return chunkO76QDGRM_js.answerPlainText; }
29
+ get: function () { return chunkR742FS5E_js.answerPlainText; }
30
30
  });
31
31
  Object.defineProperty(exports, "answerSpeechText", {
32
32
  enumerable: true,
33
- get: function () { return chunkO76QDGRM_js.answerSpeechText; }
33
+ get: function () { return chunkR742FS5E_js.answerSpeechText; }
34
34
  });
35
35
  Object.defineProperty(exports, "exploreQuestionHref", {
36
36
  enumerable: true,
37
- get: function () { return chunkO76QDGRM_js.exploreQuestionHref; }
37
+ get: function () { return chunkR742FS5E_js.exploreQuestionHref; }
38
38
  });
39
39
  Object.defineProperty(exports, "inlineImageOrigins", {
40
40
  enumerable: true,
41
- get: function () { return chunkO76QDGRM_js.inlineImageOrigins; }
41
+ get: function () { return chunkR742FS5E_js.inlineImageOrigins; }
42
42
  });
43
43
  Object.defineProperty(exports, "isInlineImageAllowed", {
44
44
  enumerable: true,
45
- get: function () { return chunkO76QDGRM_js.isInlineImageAllowed; }
45
+ get: function () { return chunkR742FS5E_js.isInlineImageAllowed; }
46
46
  });
47
47
  Object.defineProperty(exports, "isInlineVideoAllowed", {
48
48
  enumerable: true,
49
- get: function () { return chunkO76QDGRM_js.isInlineVideoAllowed; }
49
+ get: function () { return chunkR742FS5E_js.isInlineVideoAllowed; }
50
50
  });
51
51
  Object.defineProperty(exports, "logoUrlOf", {
52
52
  enumerable: true,
53
- get: function () { return chunkO76QDGRM_js.logoUrlOf; }
53
+ get: function () { return chunkR742FS5E_js.logoUrlOf; }
54
54
  });
55
55
  Object.defineProperty(exports, "productNamesByOrigin", {
56
56
  enumerable: true,
57
- get: function () { return chunkO76QDGRM_js.productNamesByOrigin; }
57
+ get: function () { return chunkR742FS5E_js.productNamesByOrigin; }
58
58
  });
59
59
  Object.defineProperty(exports, "referenceKindOf", {
60
60
  enumerable: true,
61
- get: function () { return chunkO76QDGRM_js.referenceKindOf; }
61
+ get: function () { return chunkR742FS5E_js.referenceKindOf; }
62
62
  });
63
63
  Object.defineProperty(exports, "summariseReferences", {
64
64
  enumerable: true,
65
- get: function () { return chunkO76QDGRM_js.summariseReferences; }
65
+ get: function () { return chunkR742FS5E_js.summariseReferences; }
66
66
  });
67
67
  //# sourceMappingURL=explore.js.map
68
68
  //# sourceMappingURL=explore.js.map
@@ -1,4 +1,4 @@
1
- export { EXPLORE_PREFILL_MAX_LENGTH, ExplorePage, answerPlainText, answerSpeechText, exploreQuestionHref, inlineImageOrigins, isInlineImageAllowed, isInlineVideoAllowed, logoUrlOf, productNamesByOrigin, referenceKindOf, summariseReferences } from '../chunk-FFADMVIK.mjs';
1
+ export { EXPLORE_PREFILL_MAX_LENGTH, ExplorePage, answerPlainText, answerSpeechText, exploreQuestionHref, inlineImageOrigins, isInlineImageAllowed, isInlineVideoAllowed, logoUrlOf, productNamesByOrigin, referenceKindOf, summariseReferences } from '../chunk-ETI2HQEC.mjs';
2
2
  import '../chunk-TT3MHN42.mjs';
3
3
  import '../chunk-EUPFS6MZ.mjs';
4
4
  import '../chunk-SKIYDKIS.mjs';
package/dist/index.d.mts CHANGED
@@ -658,7 +658,8 @@ interface ExploreChatProviderProps extends Omit<ExploreConversationOptions, "ena
658
658
  /**
659
659
  * Start the conversation. Pass `true` from the visitor's first opening of the assistant, or while the `/explore`
660
660
  * route is shown; until then the provider asks nothing (no catalog request, no restore). Latched: once it has been
661
- * `true` the conversation stays live, so a running answer is never cut by the host flipping it back.
661
+ * `true` the conversation stays live, so a running answer is never cut by the host flipping it back. Under a
662
+ * `SiteAssistantDock` the dock starts it on its first opening (BOFF-9797): pass `true` on the `/explore` route only.
662
663
  */
663
664
  enabled: boolean;
664
665
  /**
@@ -743,6 +744,98 @@ interface ExplorePanelProps {
743
744
  }
744
745
  declare function ExplorePanel({ open, onOpenChange, id, productSlug, locale, scope, productName, examplePrompts, onNavigate, welcomeTitle, welcomeBody, explorePath, avatar, bottomOffset, zIndex, returnFocusRef, className, }: ExplorePanelProps): react.JSX.Element | null;
745
746
 
747
+ interface SiteAssistantDockProps {
748
+ /** The site's product, as the platform knows it (`healthybowl`). Passed to the panel's chat. */
749
+ productSlug?: string;
750
+ /** `product` (with `productSlug`) makes the panel this product's own assistant. See `ExplorePanelProps.scope`. */
751
+ scope?: ExploreScope;
752
+ /** The product's display name in the `product` scope ("Healthy Bowl"). See `ExplorePanelProps.productName`. */
753
+ productName?: string;
754
+ /** The panel's example prompts; in the `product` scope the only ones it shows. See `ExplorePanelProps`. */
755
+ examplePrompts?: string[];
756
+ /** The assistant's locale. Default: the SDK's own resolution, as on `ExplorePanel`. */
757
+ locale?: string;
758
+ /**
759
+ * The Avatar view: the approved still picture, plus `live` to opt in to the live avatar (see `websiteAvatarLive`).
760
+ * Absent: the panel has no Avatar view and no tabs.
761
+ */
762
+ avatar?: ExplorePanelAvatar;
763
+ /**
764
+ * The host router's navigate, for links in the conversation (and, without a provider in production, for the
765
+ * button's link to `/explore`). Absent: links load the page normally.
766
+ */
767
+ onNavigate?: (path: string) => void;
768
+ /**
769
+ * A CSS length kept clear at the bottom of the window: the site's own cookie banner's height, from the CSS variable
770
+ * that banner publishes (HealthyBowl's is `var(--hb-cookie-banner-height, 0px)`; there is no SDK-wide variable). The
771
+ * panel keeps it clear and the floating button sits that much higher, so a banner still on screen covers neither.
772
+ * Default `0px`: the button at its usual place.
773
+ */
774
+ bottomOffset?: string;
775
+ /** Extra classes for the floating button (the launcher). */
776
+ className?: string;
777
+ /** Extra classes for the panel. */
778
+ panelClassName?: string;
779
+ /**
780
+ * The current route, from the host's router (`useLocation().pathname`). Falls back to `window.location.pathname`,
781
+ * which cannot see a router's `pushState` navigations: pass it.
782
+ */
783
+ currentPath?: string;
784
+ /**
785
+ * The site's Explore route. Default `/explore`. The button links there, the dock hides on it (matched as the router
786
+ * does: ignoring case and a trailing slash), and the panel makes its share links to it.
787
+ */
788
+ explorePath?: string;
789
+ /** The button's visible label and accessible name. Default `Ask AI`. */
790
+ label?: string;
791
+ /** The panel's id, for the button's `aria-controls`. Default `boff-explore-panel`. */
792
+ id?: string;
793
+ /** The panel's `z-index`. Default 50 (see `ExplorePanelProps.zIndex`). */
794
+ zIndex?: number;
795
+ }
796
+ declare function SiteAssistantDock(props: SiteAssistantDockProps): react.JSX.Element | null;
797
+
798
+ /**
799
+ * BOFF-9797. A product website's live-avatar opt-in (`avatar.live` on `ExplorePanel` / `SiteAssistantDock`), decided
800
+ * from its build: which environment it is built for, and the Cloudflare Turnstile site key it was given.
801
+ *
802
+ * Pure: no React, no network, no globals. A site calls it once, at module scope, with its build's values:
803
+ *
804
+ * ```ts
805
+ * export const AVATAR_LIVE = websiteAvatarLive({
806
+ * deployEnv: import.meta.env.VITE_DEPLOY_ENV,
807
+ * siteKey: import.meta.env.VITE_AVATAR_TURNSTILE_SITE_KEY,
808
+ * site: 'healthybowl',
809
+ * manifestVersion: manifest.version,
810
+ * load: () => import('@burdenoff/website-sdk/avatar-live'),
811
+ * })
812
+ * ```
813
+ *
814
+ * The rule, so that a misconfigured build shows the still picture instead of a live avatar whose bot check can never
815
+ * pass, or always passes:
816
+ *
817
+ * - No key, or an empty one: `undefined` (the still picture, "Live avatar coming soon").
818
+ * - Alpha (`deployEnv` `alpha`): Cloudflare's always-pass test key `1x00000000000000000000AA` (the alpha gateway runs
819
+ * Turnstile in dummy mode with the matching test secret), or a real-looking key.
820
+ * - Every other environment, production included, and an unset one: a real-looking key only. Cloudflare's test keys
821
+ * (`1x…AA`, `2x…AB`, `1x…BB`, `2x…BB`, `3x…FF`, and anything of their shape) are refused.
822
+ */
823
+
824
+ interface WebsiteAvatarLiveOptions {
825
+ /** The environment the site is built for: `import.meta.env.VITE_DEPLOY_ENV` (`alpha`, `production`, …). */
826
+ deployEnv: string | null | undefined;
827
+ /** The site's Turnstile site key: `import.meta.env.VITE_AVATAR_TURNSTILE_SITE_KEY`. Unset or empty: no live avatar. */
828
+ siteKey: string | null | undefined;
829
+ /** The site, as the live avatar service knows it (`healthybowl`). */
830
+ site: string;
831
+ /** The version of the suggested-question list the panel shows (its `examplePrompts`), such as `hb-en-1`. */
832
+ manifestVersion: string;
833
+ /** Loads the live avatar's room module: `() => import('@burdenoff/website-sdk/avatar-live')`. */
834
+ load: ExplorePanelAvatarLive["load"];
835
+ }
836
+ /** The `avatar.live` prop for this build, or `undefined` for the still picture only. */
837
+ declare function websiteAvatarLive({ deployEnv, siteKey, site, manifestVersion, load, }: WebsiteAvatarLiveOptions): ExplorePanelAvatarLive | undefined;
838
+
746
839
  declare const buttonVariants: (props?: ({
747
840
  variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
748
841
  size?: "icon" | "default" | "sm" | "lg" | null | undefined;
@@ -769,4 +862,4 @@ declare const Textarea: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLP
769
862
  */
770
863
  declare const ECOSYSTEM_PRODUCTS: WebsiteSwitcherProduct[];
771
864
 
772
- export { ANSWERS_PATH, ANSWER_HEADING_SHIFT, ANSWER_PATH_PREFIX, AnswerDetailPage, type AnswerDetailPageProps, type AnswerLinkComponent, type AnswerLinkProps, AnswerRendererStrings, type AnswerStrings, AnswersPage, type AnswersPageProps, Button, type ButtonProps, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CONCEPT_WORKFLOW_NOTICE, CareersPostingOption, CareersSubmissionForm, type CareersSubmissionFormProps, type Concept, type ConceptCategory, ConceptDetailPage, type ConceptDetailPageProps, type ConceptDevice, type ConceptImage, type ConceptLinkComponent, type ConceptLinkProps, type ConceptSolution, ConceptsPage, type ConceptsPageProps, DOMAINS_URL, ECOSYSTEM_PRODUCTS, ExploreChatProvider, type ExploreChatProviderProps, type ExploreConversationOptions, type ExploreConversationState, ExploreLocale, ExplorePanel, type ExplorePanelAvatar, ExplorePanelAvatarLive, type ExplorePanelProps, ExploreScope, Input, Label, PUBLISHED_ANSWER_FIELDS, type PublishedAnswer, type PublishedAnswerSource, type PublishedAnswerTopic, Select, Textarea, UseExploreChatResult, WebsiteSwitcherProduct, answerPath, answerSourceHost, answerStrings, buttonVariants, conceptPath, formatAnswerDate, getAnswerBySlug, getConceptBySlug, isPublishedSourceUrl, isValidUrl, useExploreConversation };
865
+ export { ANSWERS_PATH, ANSWER_HEADING_SHIFT, ANSWER_PATH_PREFIX, AnswerDetailPage, type AnswerDetailPageProps, type AnswerLinkComponent, type AnswerLinkProps, AnswerRendererStrings, type AnswerStrings, AnswersPage, type AnswersPageProps, Button, type ButtonProps, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CONCEPT_WORKFLOW_NOTICE, CareersPostingOption, CareersSubmissionForm, type CareersSubmissionFormProps, type Concept, type ConceptCategory, ConceptDetailPage, type ConceptDetailPageProps, type ConceptDevice, type ConceptImage, type ConceptLinkComponent, type ConceptLinkProps, type ConceptSolution, ConceptsPage, type ConceptsPageProps, DOMAINS_URL, ECOSYSTEM_PRODUCTS, ExploreChatProvider, type ExploreChatProviderProps, type ExploreConversationOptions, type ExploreConversationState, ExploreLocale, ExplorePanel, type ExplorePanelAvatar, ExplorePanelAvatarLive, type ExplorePanelProps, ExploreScope, Input, Label, PUBLISHED_ANSWER_FIELDS, type PublishedAnswer, type PublishedAnswerSource, type PublishedAnswerTopic, Select, SiteAssistantDock, type SiteAssistantDockProps, Textarea, UseExploreChatResult, type WebsiteAvatarLiveOptions, WebsiteSwitcherProduct, answerPath, answerSourceHost, answerStrings, buttonVariants, conceptPath, formatAnswerDate, getAnswerBySlug, getConceptBySlug, isPublishedSourceUrl, isValidUrl, useExploreConversation, websiteAvatarLive };
package/dist/index.d.ts CHANGED
@@ -658,7 +658,8 @@ interface ExploreChatProviderProps extends Omit<ExploreConversationOptions, "ena
658
658
  /**
659
659
  * Start the conversation. Pass `true` from the visitor's first opening of the assistant, or while the `/explore`
660
660
  * route is shown; until then the provider asks nothing (no catalog request, no restore). Latched: once it has been
661
- * `true` the conversation stays live, so a running answer is never cut by the host flipping it back.
661
+ * `true` the conversation stays live, so a running answer is never cut by the host flipping it back. Under a
662
+ * `SiteAssistantDock` the dock starts it on its first opening (BOFF-9797): pass `true` on the `/explore` route only.
662
663
  */
663
664
  enabled: boolean;
664
665
  /**
@@ -743,6 +744,98 @@ interface ExplorePanelProps {
743
744
  }
744
745
  declare function ExplorePanel({ open, onOpenChange, id, productSlug, locale, scope, productName, examplePrompts, onNavigate, welcomeTitle, welcomeBody, explorePath, avatar, bottomOffset, zIndex, returnFocusRef, className, }: ExplorePanelProps): react.JSX.Element | null;
745
746
 
747
+ interface SiteAssistantDockProps {
748
+ /** The site's product, as the platform knows it (`healthybowl`). Passed to the panel's chat. */
749
+ productSlug?: string;
750
+ /** `product` (with `productSlug`) makes the panel this product's own assistant. See `ExplorePanelProps.scope`. */
751
+ scope?: ExploreScope;
752
+ /** The product's display name in the `product` scope ("Healthy Bowl"). See `ExplorePanelProps.productName`. */
753
+ productName?: string;
754
+ /** The panel's example prompts; in the `product` scope the only ones it shows. See `ExplorePanelProps`. */
755
+ examplePrompts?: string[];
756
+ /** The assistant's locale. Default: the SDK's own resolution, as on `ExplorePanel`. */
757
+ locale?: string;
758
+ /**
759
+ * The Avatar view: the approved still picture, plus `live` to opt in to the live avatar (see `websiteAvatarLive`).
760
+ * Absent: the panel has no Avatar view and no tabs.
761
+ */
762
+ avatar?: ExplorePanelAvatar;
763
+ /**
764
+ * The host router's navigate, for links in the conversation (and, without a provider in production, for the
765
+ * button's link to `/explore`). Absent: links load the page normally.
766
+ */
767
+ onNavigate?: (path: string) => void;
768
+ /**
769
+ * A CSS length kept clear at the bottom of the window: the site's own cookie banner's height, from the CSS variable
770
+ * that banner publishes (HealthyBowl's is `var(--hb-cookie-banner-height, 0px)`; there is no SDK-wide variable). The
771
+ * panel keeps it clear and the floating button sits that much higher, so a banner still on screen covers neither.
772
+ * Default `0px`: the button at its usual place.
773
+ */
774
+ bottomOffset?: string;
775
+ /** Extra classes for the floating button (the launcher). */
776
+ className?: string;
777
+ /** Extra classes for the panel. */
778
+ panelClassName?: string;
779
+ /**
780
+ * The current route, from the host's router (`useLocation().pathname`). Falls back to `window.location.pathname`,
781
+ * which cannot see a router's `pushState` navigations: pass it.
782
+ */
783
+ currentPath?: string;
784
+ /**
785
+ * The site's Explore route. Default `/explore`. The button links there, the dock hides on it (matched as the router
786
+ * does: ignoring case and a trailing slash), and the panel makes its share links to it.
787
+ */
788
+ explorePath?: string;
789
+ /** The button's visible label and accessible name. Default `Ask AI`. */
790
+ label?: string;
791
+ /** The panel's id, for the button's `aria-controls`. Default `boff-explore-panel`. */
792
+ id?: string;
793
+ /** The panel's `z-index`. Default 50 (see `ExplorePanelProps.zIndex`). */
794
+ zIndex?: number;
795
+ }
796
+ declare function SiteAssistantDock(props: SiteAssistantDockProps): react.JSX.Element | null;
797
+
798
+ /**
799
+ * BOFF-9797. A product website's live-avatar opt-in (`avatar.live` on `ExplorePanel` / `SiteAssistantDock`), decided
800
+ * from its build: which environment it is built for, and the Cloudflare Turnstile site key it was given.
801
+ *
802
+ * Pure: no React, no network, no globals. A site calls it once, at module scope, with its build's values:
803
+ *
804
+ * ```ts
805
+ * export const AVATAR_LIVE = websiteAvatarLive({
806
+ * deployEnv: import.meta.env.VITE_DEPLOY_ENV,
807
+ * siteKey: import.meta.env.VITE_AVATAR_TURNSTILE_SITE_KEY,
808
+ * site: 'healthybowl',
809
+ * manifestVersion: manifest.version,
810
+ * load: () => import('@burdenoff/website-sdk/avatar-live'),
811
+ * })
812
+ * ```
813
+ *
814
+ * The rule, so that a misconfigured build shows the still picture instead of a live avatar whose bot check can never
815
+ * pass, or always passes:
816
+ *
817
+ * - No key, or an empty one: `undefined` (the still picture, "Live avatar coming soon").
818
+ * - Alpha (`deployEnv` `alpha`): Cloudflare's always-pass test key `1x00000000000000000000AA` (the alpha gateway runs
819
+ * Turnstile in dummy mode with the matching test secret), or a real-looking key.
820
+ * - Every other environment, production included, and an unset one: a real-looking key only. Cloudflare's test keys
821
+ * (`1x…AA`, `2x…AB`, `1x…BB`, `2x…BB`, `3x…FF`, and anything of their shape) are refused.
822
+ */
823
+
824
+ interface WebsiteAvatarLiveOptions {
825
+ /** The environment the site is built for: `import.meta.env.VITE_DEPLOY_ENV` (`alpha`, `production`, …). */
826
+ deployEnv: string | null | undefined;
827
+ /** The site's Turnstile site key: `import.meta.env.VITE_AVATAR_TURNSTILE_SITE_KEY`. Unset or empty: no live avatar. */
828
+ siteKey: string | null | undefined;
829
+ /** The site, as the live avatar service knows it (`healthybowl`). */
830
+ site: string;
831
+ /** The version of the suggested-question list the panel shows (its `examplePrompts`), such as `hb-en-1`. */
832
+ manifestVersion: string;
833
+ /** Loads the live avatar's room module: `() => import('@burdenoff/website-sdk/avatar-live')`. */
834
+ load: ExplorePanelAvatarLive["load"];
835
+ }
836
+ /** The `avatar.live` prop for this build, or `undefined` for the still picture only. */
837
+ declare function websiteAvatarLive({ deployEnv, siteKey, site, manifestVersion, load, }: WebsiteAvatarLiveOptions): ExplorePanelAvatarLive | undefined;
838
+
746
839
  declare const buttonVariants: (props?: ({
747
840
  variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
748
841
  size?: "icon" | "default" | "sm" | "lg" | null | undefined;
@@ -769,4 +862,4 @@ declare const Textarea: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLP
769
862
  */
770
863
  declare const ECOSYSTEM_PRODUCTS: WebsiteSwitcherProduct[];
771
864
 
772
- export { ANSWERS_PATH, ANSWER_HEADING_SHIFT, ANSWER_PATH_PREFIX, AnswerDetailPage, type AnswerDetailPageProps, type AnswerLinkComponent, type AnswerLinkProps, AnswerRendererStrings, type AnswerStrings, AnswersPage, type AnswersPageProps, Button, type ButtonProps, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CONCEPT_WORKFLOW_NOTICE, CareersPostingOption, CareersSubmissionForm, type CareersSubmissionFormProps, type Concept, type ConceptCategory, ConceptDetailPage, type ConceptDetailPageProps, type ConceptDevice, type ConceptImage, type ConceptLinkComponent, type ConceptLinkProps, type ConceptSolution, ConceptsPage, type ConceptsPageProps, DOMAINS_URL, ECOSYSTEM_PRODUCTS, ExploreChatProvider, type ExploreChatProviderProps, type ExploreConversationOptions, type ExploreConversationState, ExploreLocale, ExplorePanel, type ExplorePanelAvatar, ExplorePanelAvatarLive, type ExplorePanelProps, ExploreScope, Input, Label, PUBLISHED_ANSWER_FIELDS, type PublishedAnswer, type PublishedAnswerSource, type PublishedAnswerTopic, Select, Textarea, UseExploreChatResult, WebsiteSwitcherProduct, answerPath, answerSourceHost, answerStrings, buttonVariants, conceptPath, formatAnswerDate, getAnswerBySlug, getConceptBySlug, isPublishedSourceUrl, isValidUrl, useExploreConversation };
865
+ export { ANSWERS_PATH, ANSWER_HEADING_SHIFT, ANSWER_PATH_PREFIX, AnswerDetailPage, type AnswerDetailPageProps, type AnswerLinkComponent, type AnswerLinkProps, AnswerRendererStrings, type AnswerStrings, AnswersPage, type AnswersPageProps, Button, type ButtonProps, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CONCEPT_WORKFLOW_NOTICE, CareersPostingOption, CareersSubmissionForm, type CareersSubmissionFormProps, type Concept, type ConceptCategory, ConceptDetailPage, type ConceptDetailPageProps, type ConceptDevice, type ConceptImage, type ConceptLinkComponent, type ConceptLinkProps, type ConceptSolution, ConceptsPage, type ConceptsPageProps, DOMAINS_URL, ECOSYSTEM_PRODUCTS, ExploreChatProvider, type ExploreChatProviderProps, type ExploreConversationOptions, type ExploreConversationState, ExploreLocale, ExplorePanel, type ExplorePanelAvatar, ExplorePanelAvatarLive, type ExplorePanelProps, ExploreScope, Input, Label, PUBLISHED_ANSWER_FIELDS, type PublishedAnswer, type PublishedAnswerSource, type PublishedAnswerTopic, Select, SiteAssistantDock, type SiteAssistantDockProps, Textarea, UseExploreChatResult, type WebsiteAvatarLiveOptions, WebsiteSwitcherProduct, answerPath, answerSourceHost, answerStrings, buttonVariants, conceptPath, formatAnswerDate, getAnswerBySlug, getConceptBySlug, isPublishedSourceUrl, isValidUrl, useExploreConversation, websiteAvatarLive };