@burdenoff/fe-libs 2026.925.5 → 2026.925.7

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 (56) hide show
  1. package/dist/chrome/MobileTabBar.js +6 -6
  2. package/dist/chrome/ProductSideNav.js +9 -9
  3. package/dist/chrome/sideNavigation/useSideNavigationState.js +3 -3
  4. package/dist/chrome.js +8 -8
  5. package/dist/shared/assistant/autoRouting.d.ts +3 -0
  6. package/dist/shared/assistant/autoRouting.d.ts.map +1 -1
  7. package/dist/shared/assistant/autoRouting.js +1 -1
  8. package/dist/shared/assistant/conversation.d.ts +20 -0
  9. package/dist/shared/assistant/conversation.d.ts.map +1 -1
  10. package/dist/shared/assistant/i18nManifest.d.ts +11 -0
  11. package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
  12. package/dist/shared/assistant/i18nManifest.js +11 -0
  13. package/dist/shared/assistant/index.d.ts +3 -0
  14. package/dist/shared/assistant/index.d.ts.map +1 -1
  15. package/dist/shared/assistant/localUiCommandCopy.d.ts +26 -0
  16. package/dist/shared/assistant/localUiCommandCopy.d.ts.map +1 -0
  17. package/dist/shared/assistant/localUiCommandCopy.js +37 -0
  18. package/dist/shared/assistant/localUiCommands.d.ts +124 -0
  19. package/dist/shared/assistant/localUiCommands.d.ts.map +1 -0
  20. package/dist/shared/assistant/localUiCommands.js +173 -0
  21. package/dist/shared/assistant/prewarm.d.ts +139 -0
  22. package/dist/shared/assistant/prewarm.d.ts.map +1 -0
  23. package/dist/shared/assistant/prewarm.js +96 -0
  24. package/dist/shared/assistant/product.d.ts +13 -1
  25. package/dist/shared/assistant/product.d.ts.map +1 -1
  26. package/dist/shared/assistant/product.js +8 -6
  27. package/dist/shared/assistant/turnTimeline.d.ts +7 -0
  28. package/dist/shared/assistant/turnTimeline.d.ts.map +1 -1
  29. package/dist/shared/assistant/turnTimeline.js +2 -2
  30. package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
  31. package/dist/shared/assistant/ui/AssistantChatArea.js +663 -482
  32. package/dist/shared/assistant/ui/AssistantMessageItem.d.ts +6 -0
  33. package/dist/shared/assistant/ui/AssistantMessageItem.d.ts.map +1 -1
  34. package/dist/shared/assistant/ui/AssistantMessageItem.js +3 -3
  35. package/dist/shared/assistant/ui/AssistantMessageList.d.ts.map +1 -1
  36. package/dist/shared/assistant/ui/AssistantMessageList.js +14 -7
  37. package/dist/shared/assistant/ui/AssistantSpeechProvider.d.ts +9 -0
  38. package/dist/shared/assistant/ui/AssistantSpeechProvider.d.ts.map +1 -1
  39. package/dist/shared/assistant/ui/AssistantSpeechProvider.js +243 -196
  40. package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts +6 -0
  41. package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts.map +1 -1
  42. package/dist/shared/assistant/ui/composer/AssistantComposer.js +110 -106
  43. package/dist/shared/assistant/ui/useVoiceSession.d.ts.map +1 -1
  44. package/dist/shared/assistant/ui/useVoiceSession.js +44 -43
  45. package/dist/shared/assistant/voice/captionText.d.ts.map +1 -1
  46. package/dist/shared/assistant/voice/captionText.js +1 -1
  47. package/dist/shared/assistant/voice/speakableText.d.ts.map +1 -1
  48. package/dist/shared/assistant/voice/speakableText.js +63 -62
  49. package/dist/shared/hooks/shell/index.d.ts +1 -1
  50. package/dist/shared/hooks/shell/index.d.ts.map +1 -1
  51. package/dist/shared/providers/shell/ThemeProvider.d.ts +6 -0
  52. package/dist/shared/providers/shell/ThemeProvider.d.ts.map +1 -1
  53. package/dist/shared/providers/shell/ThemeProvider.js +28 -25
  54. package/dist/shared-assistant.js +17 -14
  55. package/dist/shared-hooks-shell.js +12 -12
  56. package/package.json +1 -1
@@ -26,6 +26,12 @@ interface Props {
26
26
  * without ever tripping `isFailed`, and the user still needs a way to re-run.
27
27
  */
28
28
  isLastAssistant?: boolean;
29
+ /**
30
+ * The newest assistant message of ANY kind — including one the panel wrote
31
+ * for a UI command it carried out itself, which `isLastAssistant` skips
32
+ * (BOFF-7802). The speak-disabled reason belongs under the newest bubble.
33
+ */
34
+ isNewestAssistant?: boolean;
29
35
  /** Re-send the last user prompt (wired by AssistantChatArea). */
30
36
  onRetry?: () => void;
31
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantMessageItem.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMessageItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAwBnD,OAAO,KAAK,EACV,+BAA+B,EAG/B,OAAO,EACR,MAAM,iBAAiB,CAAC;AAIzB,UAAU,KAAK;IACb,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAyCD,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,CA6U1C,CAAC"}
1
+ {"version":3,"file":"AssistantMessageItem.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMessageItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAwBnD,OAAO,KAAK,EACV,+BAA+B,EAG/B,OAAO,EACR,MAAM,iBAAiB,CAAC;AAIzB,UAAU,KAAK;IACb,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAyCD,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,CAiV1C,CAAC"}
@@ -34,7 +34,7 @@ function D(e, t, n) {
34
34
  let a = new Blob([i], { type: n }), o = URL.createObjectURL(a), s = document.createElement("a");
35
35
  s.href = o, s.download = t, document.body.appendChild(s), s.click(), document.body.removeChild(s), URL.revokeObjectURL(o);
36
36
  }
37
- var O = ({ onApprovePendingWrite: E, approvingWriteRef: O = null, message: k, processing: A, isStreaming: j, isFailed: M, isLastAssistant: N, onRetry: P }) => {
37
+ var O = ({ onApprovePendingWrite: E, approvingWriteRef: O = null, message: k, processing: A, isStreaming: j, isFailed: M, isLastAssistant: N, isNewestAssistant: ee, onRetry: P }) => {
38
38
  let F = n(), I = t(), { getAccessToken: L, getWorkspaceToken: R } = e(), z = u(), [B, V] = _(null), [H, U] = _(!1), W = k.role === "user", G = g(() => w(k), [k]), K = g(() => T(G), [G]), q = A === void 0 ? j ? {
39
39
  status: "streaming",
40
40
  messageId: k.id,
@@ -169,7 +169,7 @@ var O = ({ onApprovePendingWrite: E, approvingWriteRef: O = null, message: k, pr
169
169
  children: H ? /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(v, { className: "size-3 text-status-success-text" }), /* @__PURE__ */ S("span", { children: F("message.copied", "Copied") })] }) : /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(y, { className: "size-3" }), /* @__PURE__ */ S("span", { children: F("message.copyShort", "Copy") })] })
170
170
  }),
171
171
  X && z.isSupported && (() => {
172
- let e = z.blockedFor(k.id) ?? z.disabledReason, t = !!e && !!N, n = t ? `speak-reason-${k.id}` : void 0;
172
+ let e = z.blockedFor(k.id) ?? z.disabledReason, t = !!e && !!ee, n = t ? `speak-reason-${k.id}` : void 0;
173
173
  return /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(p, {
174
174
  isSpeaking: z.isSpeaking(k.id),
175
175
  disabled: e !== null,
@@ -183,7 +183,7 @@ var O = ({ onApprovePendingWrite: E, approvingWriteRef: O = null, message: k, pr
183
183
  children: e
184
184
  })] });
185
185
  })(),
186
- (M || N) && P && /* @__PURE__ */ C("button", {
186
+ (M || N) && P && !k.metadata?.localAction && /* @__PURE__ */ C("button", {
187
187
  type: "button",
188
188
  onClick: P,
189
189
  className: `flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] transition-colors hover:bg-bg-elevated ${M ? "text-status-error-text" : "text-text-muted hover:text-text-secondary"}`,
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantMessageList.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAGnD,OAAO,KAAK,EAAE,+BAA+B,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGhF,UAAU,KAAK;IACb,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,CAkF1C,CAAC"}
1
+ {"version":3,"file":"AssistantMessageList.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAGnD,OAAO,KAAK,EAAE,+BAA+B,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGhF,UAAU,KAAK;IACb,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,CA+F1C,CAAC"}
@@ -8,17 +8,23 @@ var s = ({ onApprovePendingWrite: s, approvingWriteRef: c = null, messages: l, p
8
8
  let m = e(), h = (() => {
9
9
  for (let e = l.length - 1; e >= 0; --e) if (l[e].role === "assistant") return l[e].id;
10
10
  return null;
11
- })(), g = i(null), _ = i(null);
11
+ })(), g = (() => {
12
+ for (let e = l.length - 1; e >= 0; --e) {
13
+ let t = l[e];
14
+ if (t.role === "assistant" && !t.metadata?.localAction) return t.id;
15
+ }
16
+ return null;
17
+ })(), _ = i(null), v = i(null);
12
18
  return r(() => {
13
- let e = _.current;
19
+ let e = v.current;
14
20
  if (e && e.scrollHeight - e.scrollTop - e.clientHeight < 100) {
15
21
  let e = t();
16
- g.current?.scrollIntoView({ behavior: e ? "auto" : "smooth" });
22
+ _.current?.scrollIntoView({ behavior: e ? "auto" : "smooth" });
17
23
  }
18
24
  }, [l, d]), r(() => {
19
- g.current?.scrollIntoView({ behavior: "instant" });
25
+ _.current?.scrollIntoView({ behavior: "instant" });
20
26
  }, []), /* @__PURE__ */ o("div", {
21
- ref: _,
27
+ ref: v,
22
28
  className: "scrollbar-slim flex-1 space-y-4 overflow-y-auto p-3",
23
29
  role: "log",
24
30
  "aria-live": "polite",
@@ -32,9 +38,10 @@ var s = ({ onApprovePendingWrite: s, approvingWriteRef: c = null, messages: l, p
32
38
  processing: u,
33
39
  isStreaming: e.id === d,
34
40
  isFailed: e.id === f,
35
- isLastAssistant: e.id === h,
41
+ isLastAssistant: e.id === g,
42
+ isNewestAssistant: e.id === h,
36
43
  onRetry: p
37
- }, e.id)), /* @__PURE__ */ a("div", { ref: g })]
44
+ }, e.id)), /* @__PURE__ */ a("div", { ref: _ })]
38
45
  });
39
46
  };
40
47
  //#endregion
@@ -98,6 +98,15 @@ export interface AssistantSpeechContextValue {
98
98
  * in-flight → complete edge the subscription exists to catch.
99
99
  */
100
100
  setSessionMicOpen: (open: boolean) => void;
101
+ /**
102
+ * Speak a reply that completed WITHOUT a model turn — a UI command the panel
103
+ * carried out itself (BOFF-7802) — under exactly the rules the auto-speak
104
+ * subscription applies to a turn that ends (auto-speak or a live session,
105
+ * the reply's channel, never into an open microphone). The subscription
106
+ * cannot see it: there is no in-flight → complete edge, and faking one
107
+ * cleared a failed turn's Retry and opened a product's preview panel.
108
+ */
109
+ speakFinishedReply: (conversationId: string, messageId: string) => void;
101
110
  /** Play a short sample in a named voice. No model call, no message, no tokens. */
102
111
  previewVoice: (voiceName: string) => void;
103
112
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantSpeechProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantSpeechProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAUL,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AA2B/D,OAAO,EAQL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAmB/B,MAAM,WAAW,2BAA2B;IAC1C,gFAAgF;IAChF,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,iBAAiB,CAAC;IAChC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD;;;;OAIG;IACH,YAAY,EAAE,SAAS,eAAe,EAAE,CAAC;IACzC,8EAA8E;IAC9E;;;;;;OAMG;IACH,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;;;OAQG;IACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C;;;;;;;OAOG;IACH,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC;;;;;;;;;;;;;OAaG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C;;;;;;;;;;;;;OAaG;IACH,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,kFAAkF;IAClF,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AA4BD,wBAAgB,kBAAkB,IAAI,2BAA2B,CAEhE;AAED,UAAU,KAAK;IACb,QAAQ,EAAE,SAAS,CAAC;IACpB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,KAAK,CAo4B7C,CAAC"}
1
+ {"version":3,"file":"AssistantSpeechProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantSpeechProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAUL,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AA2B/D,OAAO,EAQL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAoB/B,MAAM,WAAW,2BAA2B;IAC1C,gFAAgF;IAChF,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,iBAAiB,CAAC;IAChC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD;;;;OAIG;IACH,YAAY,EAAE,SAAS,eAAe,EAAE,CAAC;IACzC,8EAA8E;IAC9E;;;;;;OAMG;IACH,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;;;OAQG;IACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C;;;;;;;OAOG;IACH,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC;;;;;;;;;;;;;OAaG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C;;;;;;;;;;;;;OAaG;IACH,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C;;;;;;;OAOG;IACH,kBAAkB,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,kFAAkF;IAClF,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AA6BD,wBAAgB,kBAAkB,IAAI,2BAA2B,CAEhE;AAED,UAAU,KAAK;IACb,QAAQ,EAAE,SAAS,CAAC;IACpB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,KAAK,CAw9B7C,CAAC"}