@burdenoff/website-sdk 2026.1102.2 → 2026.1104.1

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.
Files changed (48) hide show
  1. package/README.md +63 -8
  2. package/dist/avatar-live-view/index.d.mts +29 -5
  3. package/dist/avatar-live-view/index.d.ts +29 -5
  4. package/dist/avatar-live-view/index.js +1319 -271
  5. package/dist/avatar-live-view/index.js.map +1 -1
  6. package/dist/avatar-live-view/index.mjs +1317 -269
  7. package/dist/avatar-live-view/index.mjs.map +1 -1
  8. package/dist/{chunk-R742FS5E.js → chunk-22OT6E26.js} +61 -27
  9. package/dist/chunk-22OT6E26.js.map +1 -0
  10. package/dist/{chunk-ETI2HQEC.mjs → chunk-5JQGE3XI.mjs} +46 -14
  11. package/dist/chunk-5JQGE3XI.mjs.map +1 -0
  12. package/dist/{chunk-FQH3AJN3.js → chunk-7O2I32ZN.js} +2 -2
  13. package/dist/chunk-7O2I32ZN.js.map +1 -0
  14. package/dist/{chunk-SFT3WHN5.mjs → chunk-K3QZGJEH.mjs} +2 -2
  15. package/dist/chunk-K3QZGJEH.mjs.map +1 -0
  16. package/dist/{chunk-SK5UGG6A.js → chunk-P5GMVPR6.js} +76 -20
  17. package/dist/chunk-P5GMVPR6.js.map +1 -0
  18. package/dist/{chunk-EUPFS6MZ.mjs → chunk-SMD7MEEA.mjs} +76 -20
  19. package/dist/chunk-SMD7MEEA.mjs.map +1 -0
  20. package/dist/components/explore.d.mts +2 -2
  21. package/dist/components/explore.d.ts +2 -2
  22. package/dist/components/explore.js +14 -14
  23. package/dist/components/explore.mjs +2 -2
  24. package/dist/{explore-DUTNYUOm.d.mts → explore-BV4dRwoC.d.ts} +8 -1
  25. package/dist/{explore-DjQE7Xia.d.ts → explore-BgEeGPvY.d.mts} +8 -1
  26. package/dist/{explore-avatar-live-config-Cetx8-Zu.d.ts → explore-avatar-live-config-CAfN5eAX.d.ts} +6 -3
  27. package/dist/{explore-avatar-live-config-Bp3kQbU2.d.mts → explore-avatar-live-config-N4WhJzgS.d.mts} +6 -3
  28. package/dist/{explore-types-Bb2Ih3d8.d.mts → explore-types-Ol1Mm3dW.d.mts} +12 -1
  29. package/dist/{explore-types-Bb2Ih3d8.d.ts → explore-types-Ol1Mm3dW.d.ts} +12 -1
  30. package/dist/hooks/index.d.mts +2 -2
  31. package/dist/hooks/index.d.ts +2 -2
  32. package/dist/hooks/index.js +9 -9
  33. package/dist/hooks/index.mjs +1 -1
  34. package/dist/index.d.mts +14 -8
  35. package/dist/index.d.ts +14 -8
  36. package/dist/index.js +100 -63
  37. package/dist/index.js.map +1 -1
  38. package/dist/index.mjs +43 -6
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/{use-explore-chat-DunjG-3p.d.ts → use-explore-chat-B3dOOvJN.d.ts} +43 -3
  41. package/dist/{use-explore-chat-zRuoAin6.d.mts → use-explore-chat-CbfohA9O.d.mts} +43 -3
  42. package/package.json +1 -1
  43. package/dist/chunk-ETI2HQEC.mjs.map +0 -1
  44. package/dist/chunk-EUPFS6MZ.mjs.map +0 -1
  45. package/dist/chunk-FQH3AJN3.js.map +0 -1
  46. package/dist/chunk-R742FS5E.js.map +0 -1
  47. package/dist/chunk-SFT3WHN5.mjs.map +0 -1
  48. package/dist/chunk-SK5UGG6A.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { fill } from './chunk-TT3MHN42.mjs';
2
- import { useExploreChat, useSpeechInput, stopSpeaking, serializeBakedCatalog, BAKED_CATALOG_ELEMENT_ID, bakedCatalogLocale, useProgressiveReveal, EXPLORE_FEEDBACK_REASONS, EXPLORE_FEEDBACK_COMMENT_SOFT_MAX, looksLikeDeliverableEmail, EXPLORE_ESCALATION_NOTE_SOFT_MAX, useSpeechOutput } from './chunk-EUPFS6MZ.mjs';
2
+ import { useExploreChat, useSpeechInput, stopSpeaking, serializeBakedCatalog, BAKED_CATALOG_ELEMENT_ID, bakedCatalogLocale, useProgressiveReveal, EXPLORE_FEEDBACK_REASONS, EXPLORE_FEEDBACK_COMMENT_SOFT_MAX, looksLikeDeliverableEmail, EXPLORE_ESCALATION_NOTE_SOFT_MAX, useSpeechOutput } from './chunk-SMD7MEEA.mjs';
3
3
  import { ProseStyles } from './chunk-6VJT3SM4.mjs';
4
4
  import { Markdown, MarkdownLink } from './chunk-EBZ2HGJ2.mjs';
5
5
  import { Textarea } from './chunk-VZLDSNH4.mjs';
@@ -3113,23 +3113,29 @@ var ANSWER_ACTION_ACTIVE = "border-primary/40 bg-accent text-primary";
3113
3113
  function ReadAloudButton({
3114
3114
  strings: T,
3115
3115
  text,
3116
- lang
3116
+ lang,
3117
+ hold
3117
3118
  }) {
3118
3119
  const speech = useSpeechOutput({ lang });
3119
3120
  if (!speech.supported) return null;
3120
3121
  const label = speech.speaking ? T.stopReading : T.readAloud;
3122
+ const held = hold !== null && !speech.speaking;
3121
3123
  return /* @__PURE__ */ jsxs(
3122
3124
  "button",
3123
3125
  {
3124
3126
  "data-boff-explore": "read-aloud",
3125
3127
  "data-speaking": speech.speaking ? "true" : "false",
3126
3128
  type: "button",
3127
- title: label,
3129
+ title: held ? hold : label,
3128
3130
  "aria-pressed": speech.speaking,
3129
- onClick: () => speech.toggle(text),
3131
+ "aria-disabled": held ? "true" : void 0,
3132
+ onClick: () => {
3133
+ if (!held) speech.toggle(text);
3134
+ },
3130
3135
  className: cn(
3131
3136
  ANSWER_ACTION_PILL,
3132
- speech.speaking ? ANSWER_ACTION_ACTIVE : ANSWER_ACTION_IDLE
3137
+ speech.speaking ? ANSWER_ACTION_ACTIVE : ANSWER_ACTION_IDLE,
3138
+ held && "cursor-not-allowed opacity-50"
3133
3139
  ),
3134
3140
  children: [
3135
3141
  /* @__PURE__ */ jsx(Volume2, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }),
@@ -3142,7 +3148,8 @@ function AnswerActions({
3142
3148
  strings: T,
3143
3149
  text,
3144
3150
  speechText,
3145
- speechLang
3151
+ speechLang,
3152
+ voiceHold
3146
3153
  }) {
3147
3154
  const [outcome, setOutcome] = useState("idle");
3148
3155
  const resetRef = useRef(null);
@@ -3194,7 +3201,15 @@ function AnswerActions({
3194
3201
  ]
3195
3202
  }
3196
3203
  ),
3197
- /* @__PURE__ */ jsx(ReadAloudButton, { strings: T, text: speechText, lang: speechLang }),
3204
+ /* @__PURE__ */ jsx(
3205
+ ReadAloudButton,
3206
+ {
3207
+ strings: T,
3208
+ text: speechText,
3209
+ lang: speechLang,
3210
+ hold: voiceHold
3211
+ }
3212
+ ),
3198
3213
  /* @__PURE__ */ jsx("span", { "data-boff-explore": "copy-status", role: "status", className: "sr-only", children: outcome === "idle" ? "" : label })
3199
3214
  ]
3200
3215
  }
@@ -3248,6 +3263,7 @@ function AssistantBubble({
3248
3263
  productSlugs,
3249
3264
  productNames,
3250
3265
  speechLang,
3266
+ voiceHold,
3251
3267
  onNavigate,
3252
3268
  anchorRef,
3253
3269
  onFollow,
@@ -3414,7 +3430,8 @@ function AssistantBubble({
3414
3430
  strings: T,
3415
3431
  text: copyText,
3416
3432
  speechText,
3417
- speechLang
3433
+ speechLang,
3434
+ voiceHold
3418
3435
  }
3419
3436
  ) : null,
3420
3437
  completed && onFeedback ? /* @__PURE__ */ jsx(
@@ -4034,6 +4051,7 @@ function ExploreView({
4034
4051
  locale,
4035
4052
  presentation = "page",
4036
4053
  active = true,
4054
+ voiceHold = null,
4037
4055
  explorePath = "/explore",
4038
4056
  examplePrompts,
4039
4057
  scope,
@@ -4112,6 +4130,12 @@ function ExploreView({
4112
4130
  stopDictation();
4113
4131
  stopSpeaking();
4114
4132
  }, [active, stopDictation]);
4133
+ const voiceHeld = voiceHold !== null;
4134
+ useEffect(() => {
4135
+ if (!voiceHeld) return;
4136
+ stopDictation();
4137
+ stopSpeaking();
4138
+ }, [voiceHeld, stopDictation]);
4115
4139
  const [disclaimerOpen, setDisclaimerOpen] = useState(false);
4116
4140
  const [attachmentNotice, setAttachmentNotice] = useState(null);
4117
4141
  const fileInputRef = useRef(null);
@@ -4791,6 +4815,7 @@ function ExploreView({
4791
4815
  productSlugs,
4792
4816
  productNames,
4793
4817
  speechLang,
4818
+ voiceHold,
4794
4819
  onNavigate,
4795
4820
  anchorRef: message.id === latestAssistantId ? latestAssistantRef : void 0,
4796
4821
  onFollow: (kind, url) => recordClick(message.id, kind, url),
@@ -5001,9 +5026,16 @@ function ExploreView({
5001
5026
  disabled: composerDisabled,
5002
5027
  "aria-label": speech.listening ? T.stopDictating : T.dictate,
5003
5028
  "aria-pressed": speech.listening,
5004
- title: speech.listening ? T.stopDictating : T.dictate,
5005
- onClick: speech.toggle,
5006
- className: cn(speech.listening && "animate-pulse"),
5029
+ "aria-disabled": voiceHeld && !speech.listening ? "true" : void 0,
5030
+ title: speech.listening ? T.stopDictating : voiceHold ?? T.dictate,
5031
+ onClick: () => {
5032
+ if (voiceHeld && !speech.listening) return;
5033
+ speech.toggle();
5034
+ },
5035
+ className: cn(
5036
+ speech.listening && "animate-pulse",
5037
+ voiceHeld && !speech.listening && "cursor-not-allowed opacity-50"
5038
+ ),
5007
5039
  children: /* @__PURE__ */ jsx(Mic, { className: "h-4 w-4" })
5008
5040
  }
5009
5041
  ) : null,
@@ -5124,6 +5156,6 @@ function ExploreView({
5124
5156
  );
5125
5157
  }
5126
5158
 
5127
- export { EXPLORE_LOCALES, EXPLORE_PREFILL_MAX_LENGTH, ExploreAnswerBody, ExploreAnswerStyles, ExploreCatalogProductsContext, ExploreChatProvider, ExploreConversationContext, ExploreConversationStartContext, ExplorePage, answerPlainText, answerSpeechText, exploreQuestionHref, exploreStrings, inlineImageOrigins, isDevelopmentBuild, isInlineImageAllowed, isInlineVideoAllowed, isRtlLocale, logoUrlOf, pinnedProductSlug, productNameFor, productNamesByOrigin, productSlugsByOrigin, referenceKindOf, resolveExploreLocale, speechLocaleOf, summariseReferences, useExploreConversation };
5128
- //# sourceMappingURL=chunk-ETI2HQEC.mjs.map
5129
- //# sourceMappingURL=chunk-ETI2HQEC.mjs.map
5159
+ export { EXPLORE_LOCALES, EXPLORE_PREFILL_MAX_LENGTH, ExploreAnswerBody, ExploreAnswerStyles, ExploreCatalogProductsContext, ExploreChatProvider, ExploreConversationContext, ExploreConversationStartContext, ExplorePage, anotherProductMatcher, answerPlainText, answerSpeechText, exploreQuestionHref, exploreStrings, inlineImageOrigins, isDevelopmentBuild, isInlineImageAllowed, isInlineVideoAllowed, isRtlLocale, logoUrlOf, pinnedProductSlug, productNameFor, productNamesByOrigin, productScopedPrompts, productSlugsByOrigin, referenceKindOf, resolveExploreLocale, speechLocaleOf, summariseReferences, useExploreConversation };
5160
+ //# sourceMappingURL=chunk-5JQGE3XI.mjs.map
5161
+ //# sourceMappingURL=chunk-5JQGE3XI.mjs.map