@alxxsck/ai-assistant 3.1.3 → 3.3.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/README.md CHANGED
@@ -273,17 +273,19 @@ const widget = new ChatWidgetInstance({
273
273
  ```
274
274
 
275
275
  `uiActionPolicies` is trusted host configuration keyed by canonical action
276
- code. `keep` leaves the mobile chat open; `collapseOnSuccess` and `immersive`
277
- collapse only the chat surface after the handler resolves. A
278
- `mobileDisposition` value in command payload is ignored. Unregistered page and
279
- modal actions default to `collapseOnSuccess`.
276
+ code. `keep` leaves the assistant surface open; `collapseOnSuccess` and
277
+ `immersive` minimize it to the compact assistant after the handler resolves,
278
+ on both desktop and mobile. `mobileDisposition` is retained as a compatibility
279
+ field name; a value supplied in command payload is ignored. Unregistered page,
280
+ modal, and element actions default to `collapseOnSuccess`.
280
281
 
281
282
  Navigation and modal handlers should resolve only after the destination is
282
- ready to own focus, or reject on failure. A mobile handoff never returns focus
283
- to Lola's launcher; it preserves host focus while manual collapse still returns
284
- focus to the launcher. `immersive` currently shares the safe surface-collapse
285
- semantics of `collapseOnSuccess`; hiding all assistant chrome is reserved until
286
- the host exposes an explicit destination-exit lifecycle.
283
+ ready to own focus, or reject on failure. A successful handoff never returns
284
+ focus to Lola's launcher; it preserves host focus while manual collapse still
285
+ returns focus to the assistant. `immersive` currently shares the safe
286
+ surface-minimization semantics of `collapseOnSuccess`; hiding all assistant
287
+ chrome is reserved until the host exposes an explicit destination-exit
288
+ lifecycle.
287
289
 
288
290
  `reportActivation()` is the authoritative signal that the product accepted the
289
291
  user activation. Call it synchronously from the product-owned action handler,
@@ -1,4 +1,4 @@
1
- import { l as qs } from "./index-CQ3BM1Cp.js";
1
+ import { l as qs } from "./index-C6_FMpJa.js";
2
2
  var Dr = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
3
3
  const Lc = "182", Nd = 0, Tl = 1, Fd = 2, Ks = 1, Zu = 2, Wr = 3, ti = 0, qt = 1, Ln = 2, $n = 0, lr = 1, Al = 2, El = 3, wl = 4, Ud = 5, Ii = 100, Od = 101, kd = 102, Bd = 103, zd = 104, Hd = 200, Gd = 201, Vd = 202, Wd = 203, yo = 204, Mo = 205, Xd = 206, jd = 207, qd = 208, Kd = 209, Yd = 210, Jd = 211, Zd = 212, Qd = 213, $d = 214, To = 0, Ao = 1, Eo = 2, pr = 3, wo = 4, Ro = 5, Co = 6, Po = 7, Dc = 0, ef = 1, tf = 2, Un = 0, Qu = 1, $u = 2, eh = 3, th = 4, nh = 5, ih = 6, Nc = 7, Rl = "attached", nf = "detached", rh = 300, Bi = 301, mr = 302, Io = 303, Lo = 304, ga = 306, Ft = 1e3, Nn = 1001, ra = 1002, Tt = 1003, sh = 1004, Xr = 1005, At = 1006, Ys = 1007, Zn = 1008, en = 1009, ah = 1010, oh = 1011, ns = 1012, Fc = 1013, kn = 1014, un = 1015, ni = 1016, Uc = 1017, Oc = 1018, is = 1020, ch = 35902, lh = 35899, uh = 1021, hh = 1022, hn = 1023, ii = 1026, Di = 1027, kc = 1028, Bc = 1029, _r = 1030, zc = 1031, Hc = 1033, Js = 33776, Zs = 33777, Qs = 33778, $s = 33779, Do = 35840, No = 35841, Fo = 35842, Uo = 35843, Oo = 36196, ko = 37492, Bo = 37496, zo = 37488, Ho = 37489, Go = 37490, Vo = 37491, Wo = 37808, Xo = 37809, jo = 37810, qo = 37811, Ko = 37812, Yo = 37813, Jo = 37814, Zo = 37815, Qo = 37816, $o = 37817, ec = 37818, tc = 37819, nc = 37820, ic = 37821, rc = 36492, sc = 36494, ac = 36495, oc = 36283, cc = 36284, lc = 36285, uc = 36286, dh = 2200, rf = 2201, sf = 2202, rs = 2300, ss = 2301, Ca = 2302, ar = 2400, or = 2401, sa = 2402, Gc = 2500, af = 2501, of = 0, fh = 1, hc = 2, cf = 3200, Vc = 0, lf = 1, pi = "", nt = "srgb", Wt = "srgb-linear", aa = "linear", $e = "srgb", Wi = 7680, Cl = 519, uf = 512, hf = 513, df = 514, Wc = 515, ff = 516, pf = 517, Xc = 518, mf = 519, dc = 35044, Pl = "300 es", Fn = 2e3, oa = 2001;
4
4
  function ph(s) {
@@ -29425,8 +29425,8 @@ const Wv = [
29425
29425
  function Xv(s) {
29426
29426
  return Wv.filter((e) => !s[e]);
29427
29427
  }
29428
- const jv = 1, qv = 5922928, Kv = 4, Yv = 16773858, Jv = 3.2, Zv = 9357055, Qv = 2, $v = [-120, 150, -130], eS = 16775149, tS = 9e4, nS = 300, iS = 0.52, rS = 0.88, sS = 2, aS = [20, 190, 135], oS = 120, cS = 14674431, lS = 6968672, uS = 0.7;
29429
- class dS extends EventTarget {
29428
+ const jv = 1, qv = 5922928, Kv = 4, Yv = 16773858, Jv = 3.2, Zv = 9357055, Qv = 2, $v = [-120, 150, -130], eS = 16775149, tS = 9e4, nS = 300, iS = 0.52, rS = 0.88, sS = 2, aS = [20, 190, 135], oS = 120, cS = 14674431, lS = 6968672, uS = 0.7, hS = 1e3;
29429
+ class fS extends EventTarget {
29430
29430
  constructor(e, t, n) {
29431
29431
  super(), this.canvas = e, this.videoContainer = t, this.api = n, this.renderer = new K0({
29432
29432
  canvas: this.canvas,
@@ -29464,6 +29464,11 @@ class dS extends EventTarget {
29464
29464
  lookAt: new U(-7, 86, 0),
29465
29465
  fov: 50
29466
29466
  },
29467
+ compactAssistant: {
29468
+ position: new U(0, 145, 180),
29469
+ lookAt: new U(-7, 140, 0),
29470
+ fov: 20
29471
+ },
29467
29472
  video: {
29468
29473
  position: new U(0, 125, 200),
29469
29474
  lookAt: new U(-7, 90, 0),
@@ -29681,7 +29686,7 @@ class dS extends EventTarget {
29681
29686
  }
29682
29687
  setFramingMode(e) {
29683
29688
  if (this.framingMode === e || (this.framingMode = e, !this.camera)) return;
29684
- const t = e === "chat-surface" ? this.cameraParams.chatSurface : this.cameraParams.default, n = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches ?? !1;
29689
+ const t = e === "chat-surface" ? this.cameraParams.chatSurface : e === "compact-assistant" ? this.cameraParams.compactAssistant : this.cameraParams.default, n = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches ?? !1;
29685
29690
  this.setCamera(t, void 0, n ? 0 : 0.28);
29686
29691
  }
29687
29692
  width = 0;
@@ -29733,15 +29738,21 @@ class dS extends EventTarget {
29733
29738
  idleAnimationName = this.IDLE_ANIMATION_NAME_1;
29734
29739
  talkingRequested = !1;
29735
29740
  talkingApplied = !1;
29741
+ lipSyncUnderrunTimer = null;
29736
29742
  reportOptionalAnimationFailure(e) {
29737
29743
  qs.warn("Optional avatar animation failed", e);
29738
29744
  }
29745
+ clearLipSyncUnderrunTimer() {
29746
+ this.lipSyncUnderrunTimer && clearTimeout(this.lipSyncUnderrunTimer), this.lipSyncUnderrunTimer = null;
29747
+ }
29739
29748
  applyLipSyncSnapshot(e) {
29740
29749
  const t = e.phase === "playing";
29741
29750
  t ? this.animationManager?.setLipSyncTarget(
29742
29751
  e.mouthOpen,
29743
29752
  e.activeViseme
29744
- ) : this.animationManager?.resetLipSync(), this.talkingRequested !== t ? this.setTalking(t) : t && !this.talkingApplied && this.applyTalkingWhenReady();
29753
+ ) : this.animationManager?.resetLipSync(), e.phase === "underrun" ? this.lipSyncUnderrunTimer || (this.lipSyncUnderrunTimer = setTimeout(() => {
29754
+ this.lipSyncUnderrunTimer = null, this.talkingRequested && this.setTalking(!1);
29755
+ }, hS)) : this.clearLipSyncUnderrunTimer(), t && !this.talkingRequested ? this.setTalking(!0) : t && !this.talkingApplied ? this.applyTalkingWhenReady() : e.phase === "idle" && this.talkingRequested && this.setTalking(!1);
29745
29756
  }
29746
29757
  setTalking(e) {
29747
29758
  if (this.talkingRequested = e, e) {
@@ -29815,5 +29826,5 @@ class dS extends EventTarget {
29815
29826
  };
29816
29827
  }
29817
29828
  export {
29818
- dS as Avatar
29829
+ fS as Avatar
29819
29830
  };