@ag2/weave 0.12.0 → 0.14.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/dist/index.js CHANGED
@@ -4947,7 +4947,7 @@ const e$x = /* @__PURE__ */ new Map([
4947
4947
  const e$w = a$T.forwardRef((r2, t2) => /* @__PURE__ */ a$T.createElement(p$5, { ref: t2, ...r2, weights: e$x }));
4948
4948
  e$w.displayName = "SunIcon";
4949
4949
  const s$4 = e$w;
4950
- const H = /* @__PURE__ */ new Map([
4950
+ const H$1 = /* @__PURE__ */ new Map([
4951
4951
  [
4952
4952
  "bold",
4953
4953
  /* @__PURE__ */ a$T.createElement(a$T.Fragment, null, /* @__PURE__ */ a$T.createElement("path", { d: "M224,44H32A12,12,0,0,0,20,56V192a20,20,0,0,0,20,20H216a20,20,0,0,0,20-20V56A12,12,0,0,0,224,44ZM44,116H76v24H44Zm56,0H212v24H100ZM212,68V92H44V68ZM44,164H76v24H44Zm56,24V164H212v24Z" }))
@@ -4973,7 +4973,7 @@ const H = /* @__PURE__ */ new Map([
4973
4973
  /* @__PURE__ */ a$T.createElement(a$T.Fragment, null, /* @__PURE__ */ a$T.createElement("path", { d: "M224,52H32a4,4,0,0,0-4,4V192a12,12,0,0,0,12,12H216a12,12,0,0,0,12-12V56A4,4,0,0,0,224,52ZM36,108H84v40H36Zm56,0H220v40H92ZM220,60v40H36V60ZM36,192V156H84v40H40A4,4,0,0,1,36,192Zm180,4H92V156H220v36A4,4,0,0,1,216,196Z" }))
4974
4974
  ]
4975
4975
  ]);
4976
- const o$a = a$T.forwardRef((a2, r2) => /* @__PURE__ */ a$T.createElement(p$5, { ref: r2, ...a2, weights: H }));
4976
+ const o$a = a$T.forwardRef((a2, r2) => /* @__PURE__ */ a$T.createElement(p$5, { ref: r2, ...a2, weights: H$1 }));
4977
4977
  o$a.displayName = "TableIcon";
4978
4978
  const n$e = o$a;
4979
4979
  const e$v = /* @__PURE__ */ new Map([
@@ -8251,8 +8251,8 @@ const containRe = /paint|layout|strict|content/;
8251
8251
  const isNotNone = (value) => !!value && value !== "none";
8252
8252
  let isWebKitValue;
8253
8253
  function isContainingBlock(elementOrCss) {
8254
- const css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
8255
- return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || "") || containRe.test(css.contain || "");
8254
+ const css2 = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
8255
+ return isNotNone(css2.transform) || isNotNone(css2.translate) || isNotNone(css2.scale) || isNotNone(css2.rotate) || isNotNone(css2.perspective) || !isWebKit() && (isNotNone(css2.backdropFilter) || isNotNone(css2.filter)) || willChangeRe.test(css2.willChange || "") || containRe.test(css2.contain || "");
8256
8256
  }
8257
8257
  function getContainingBlock(element) {
8258
8258
  let currentNode = getParentNode(element);
@@ -8335,9 +8335,9 @@ function getFrameElement(win) {
8335
8335
  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
8336
8336
  }
8337
8337
  function getCssDimensions(element) {
8338
- const css = getComputedStyle$1(element);
8339
- let width = parseFloat(css.width) || 0;
8340
- let height = parseFloat(css.height) || 0;
8338
+ const css2 = getComputedStyle$1(element);
8339
+ let width = parseFloat(css2.width) || 0;
8340
+ let height = parseFloat(css2.height) || 0;
8341
8341
  const hasOffset = isHTMLElement(element);
8342
8342
  const offsetWidth = hasOffset ? element.offsetWidth : width;
8343
8343
  const offsetHeight = hasOffset ? element.offsetHeight : height;
@@ -8428,9 +8428,9 @@ function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetPar
8428
8428
  while (currentIFrame && offsetWin !== currentWin) {
8429
8429
  const iframeScale = getScale(currentIFrame);
8430
8430
  const iframeRect = currentIFrame.getBoundingClientRect();
8431
- const css = getComputedStyle$1(currentIFrame);
8432
- const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
8433
- const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
8431
+ const css2 = getComputedStyle$1(currentIFrame);
8432
+ const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css2.paddingLeft)) * iframeScale.x;
8433
+ const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css2.paddingTop)) * iframeScale.y;
8434
8434
  x *= iframeScale.x;
8435
8435
  y *= iframeScale.y;
8436
8436
  width *= iframeScale.x;
@@ -10834,11 +10834,11 @@ function makeStyleTag() {
10834
10834
  }
10835
10835
  return tag;
10836
10836
  }
10837
- function injectStyles(tag, css) {
10837
+ function injectStyles(tag, css2) {
10838
10838
  if (tag.styleSheet) {
10839
- tag.styleSheet.cssText = css;
10839
+ tag.styleSheet.cssText = css2;
10840
10840
  } else {
10841
- tag.appendChild(document.createTextNode(css));
10841
+ tag.appendChild(document.createTextNode(css2));
10842
10842
  }
10843
10843
  }
10844
10844
  function insertStyleTag(tag) {
@@ -15493,7 +15493,7 @@ function mountAliveMark(container, opts) {
15493
15493
  function now() {
15494
15494
  return window.performance && performance.now ? performance.now() : Date.now();
15495
15495
  }
15496
- function rnd(a2, b) {
15496
+ function rnd2(a2, b) {
15497
15497
  return a2 + Math.random() * (b - a2);
15498
15498
  }
15499
15499
  function setA(el, name, val) {
@@ -15527,7 +15527,7 @@ function mountAliveMark(container, opts) {
15527
15527
  if (!sleeping)
15528
15528
  doBlink(Math.random() < o2.doubleBlinkChance);
15529
15529
  scheduleBlink();
15530
- }, rnd(o2.blinkMin, o2.blinkMax) * 1e3 * mult);
15530
+ }, rnd2(o2.blinkMin, o2.blinkMax) * 1e3 * mult);
15531
15531
  }
15532
15532
  function doBlink(dbl) {
15533
15533
  var t2 = now();
@@ -15561,18 +15561,18 @@ function mountAliveMark(container, opts) {
15561
15561
  clearTimeout(driftT);
15562
15562
  driftT = setTimeout(function() {
15563
15563
  if (!reduced && !sleeping && !gazing) {
15564
- tgtX = rnd(-o2.driftX, o2.driftX);
15565
- tgtY = rnd(-o2.driftY, o2.driftY);
15564
+ tgtX = rnd2(-o2.driftX, o2.driftX);
15565
+ tgtY = rnd2(-o2.driftY, o2.driftY);
15566
15566
  }
15567
15567
  scheduleDrift();
15568
- }, rnd(o2.driftMin, o2.driftMax) * 1e3);
15568
+ }, rnd2(o2.driftMin, o2.driftMax) * 1e3);
15569
15569
  }
15570
15570
  function frame(t2) {
15571
15571
  if (!running)
15572
15572
  return;
15573
15573
  var dt = last ? Math.min(0.05, (t2 - last) / 1e3) : 0.016;
15574
15574
  last = t2;
15575
- var ease = function(tau) {
15575
+ var ease2 = function(tau) {
15576
15576
  return reduced ? 1 : 1 - Math.exp(-dt / tau);
15577
15577
  };
15578
15578
  if (t2 - rectAt > 250) {
@@ -15589,7 +15589,7 @@ function mountAliveMark(container, opts) {
15589
15589
  tgtY = 0;
15590
15590
  }
15591
15591
  }
15592
- dreamAmt += ((sleeping ? 1 : 0) - dreamAmt) * ease(0.12);
15592
+ dreamAmt += ((sleeping ? 1 : 0) - dreamAmt) * ease2(0.12);
15593
15593
  if (dreamAmt < 1e-3)
15594
15594
  dreamAmt = 0;
15595
15595
  if (dreamAmt > 0.999)
@@ -15632,8 +15632,8 @@ function mountAliveMark(container, opts) {
15632
15632
  tgtX = 0;
15633
15633
  tgtY = 0;
15634
15634
  }
15635
- curX += (tgtX - curX) * ease(0.18);
15636
- curY += (tgtY - curY) * ease(0.18);
15635
+ curX += (tgtX - curX) * ease2(0.18);
15636
+ curY += (tgtY - curY) * ease2(0.18);
15637
15637
  setA(look, "transform", "translate(" + curX.toFixed(3) + " " + curY.toFixed(3) + ")");
15638
15638
  var sl = lidAt(animL, t2), sr = lidAt(animR, t2);
15639
15639
  if (animL && t2 - animL.t0 >= animL.dur)
@@ -15650,7 +15650,7 @@ function mountAliveMark(container, opts) {
15650
15650
  "transform",
15651
15651
  "translate(" + rx + " " + y + ") scale(1 " + sr.toFixed(3) + ") translate(" + -rx + " " + -y + ")"
15652
15652
  );
15653
- tiltCur += (c2.tilt - tiltCur) * ease(0.22);
15653
+ tiltCur += (c2.tilt - tiltCur) * ease2(0.22);
15654
15654
  var tstr = pillT(tiltCur.toFixed(3));
15655
15655
  setA(swipe, "transform", tstr);
15656
15656
  setA(clip, "transform", tstr);
@@ -15781,6 +15781,353 @@ const StackedAvatar = as(
15781
15781
  )
15782
15782
  );
15783
15783
  const ComposeIcon = Icons.Compose;
15784
+ const PAL = {
15785
+ ember: { c: [249, 163, 88], r: [242, 102, 30] },
15786
+ pink: { c: [248, 206, 254], r: [229, 138, 240] },
15787
+ sky: { c: [173, 219, 255], r: [74, 95, 208] },
15788
+ mint: { c: [160, 226, 191], r: [46, 143, 94] },
15789
+ lemon: { c: [240, 227, 69], r: [141, 191, 58] },
15790
+ lilac: { c: [242, 212, 255], r: [154, 166, 255] },
15791
+ forest: { c: [10, 138, 68], r: [4, 90, 44] },
15792
+ cream: { c: [244, 246, 186], r: [201, 161, 74] }
15793
+ };
15794
+ const W = 1200;
15795
+ const H = 800;
15796
+ const TILT = -46.7 * Math.PI / 180;
15797
+ const RATIO = 0.5;
15798
+ const MAXR = 300;
15799
+ const rnd = (a2, b) => a2 + Math.random() * (b - a2);
15800
+ const lerp = (a2, b, t2) => a2 + (b - a2) * t2;
15801
+ const mix = (a2, b, t2) => a2.map((v, i2) => lerp(v, b[i2], t2));
15802
+ const css = (a2) => `rgb(${a2.map(Math.round).join(",")})`;
15803
+ const ease = (t2) => t2 < 0.5 ? 2 * t2 * t2 : 1 - (-2 * t2 + 2) ** 2 / 2;
15804
+ const make = (x, y, vx, vy, r2, name, from) => ({
15805
+ x,
15806
+ y,
15807
+ vx,
15808
+ vy,
15809
+ r: r2,
15810
+ rd: from ? from.rd : r2,
15811
+ name,
15812
+ c0: from ? from.c : PAL[name].c.slice(),
15813
+ r0: from ? from.rr : PAL[name].r.slice(),
15814
+ c: PAL[name].c.slice(),
15815
+ rr: PAL[name].r.slice(),
15816
+ ct: from ? 0 : 1,
15817
+ age: 0,
15818
+ wob: from ? 1 : 0
15819
+ });
15820
+ const cur = (o2) => ({ c: mix(o2.c0, o2.c, ease(o2.ct)), r: mix(o2.r0, o2.rr, ease(o2.ct)) });
15821
+ function startOrbField(element) {
15822
+ const canvas = element;
15823
+ const ctx = canvas.getContext("2d");
15824
+ if (!ctx)
15825
+ return () => void 0;
15826
+ let orbs = [];
15827
+ let target = 3;
15828
+ let targetTime = 0;
15829
+ let spawnTime = 0;
15830
+ let last = performance.now();
15831
+ let raf = 0;
15832
+ const motion2 = window.matchMedia("(prefers-reduced-motion: reduce)");
15833
+ const pickName = (exclude = []) => {
15834
+ const taken = /* @__PURE__ */ new Set([...exclude, ...orbs.filter((o2) => !o2.leaving).map((o2) => o2.name)]);
15835
+ let pool = Object.keys(PAL).filter((n2) => !taken.has(n2) && n2 !== "ember");
15836
+ if (!pool.length)
15837
+ pool = Object.keys(PAL).filter((n2) => !exclude.includes(n2) && n2 !== "ember");
15838
+ return pool[Math.floor(Math.random() * pool.length)];
15839
+ };
15840
+ [
15841
+ [0.2, 0.25],
15842
+ [0.82, 0.78],
15843
+ [0.85, 0.2]
15844
+ ].forEach(([px, py]) => {
15845
+ const o2 = make(
15846
+ W * px + rnd(-60, 60),
15847
+ H * py + rnd(-50, 50),
15848
+ rnd(-0.6, 0.6),
15849
+ rnd(-0.6, 0.6),
15850
+ rnd(150, 210),
15851
+ pickName()
15852
+ );
15853
+ o2.age = 2;
15854
+ orbs.push(o2);
15855
+ });
15856
+ const spawn = () => {
15857
+ const side = Math.floor(Math.random() * 4);
15858
+ const r2 = rnd(120, 180);
15859
+ const speed = rnd(0.9, 1.7);
15860
+ let x = rnd(80, W - 80);
15861
+ let y = rnd(80, H - 80);
15862
+ if (side === 0)
15863
+ x = -r2;
15864
+ else if (side === 1)
15865
+ x = W + r2;
15866
+ else if (side === 2)
15867
+ y = -r2;
15868
+ else
15869
+ y = H + r2;
15870
+ const tx = rnd(W * 0.25, W * 0.75);
15871
+ const ty = rnd(H * 0.25, H * 0.75);
15872
+ const d = Math.hypot(tx - x, ty - y);
15873
+ orbs.push(make(x, y, (tx - x) / d * speed, (ty - y) / d * speed, r2, pickName()));
15874
+ };
15875
+ const collide = (dt) => {
15876
+ for (let i2 = 0; i2 < orbs.length; i2 += 1) {
15877
+ for (let j = i2 + 1; j < orbs.length; j += 1) {
15878
+ const a2 = orbs[i2];
15879
+ const b = orbs[j];
15880
+ if (a2.age >= 0.8 && b.age >= 0.8) {
15881
+ const dx = b.x - a2.x;
15882
+ const dy = b.y - a2.y;
15883
+ const u = dx * Math.cos(TILT) + dy * Math.sin(TILT);
15884
+ const v = -dx * Math.sin(TILT) + dy * Math.cos(TILT);
15885
+ const R = (a2.rd + b.rd) * 0.92;
15886
+ if (u * u / (R * R) + v * v / (R * R * RATIO * RATIO) < 1) {
15887
+ const big = a2.r >= b.r ? a2 : b;
15888
+ const small = big === a2 ? b : a2;
15889
+ const da = Math.min(small.r * small.r, 14e3 * dt);
15890
+ small.r = Math.sqrt(Math.max(0, small.r * small.r - da));
15891
+ small.rd = Math.min(small.rd, small.r + 6);
15892
+ big.r = Math.sqrt(big.r * big.r + da);
15893
+ const cs = cur(small);
15894
+ const cb = cur(big);
15895
+ const k = Math.min(0.08, da / (big.r * big.r));
15896
+ big.c0 = mix(cb.c, cs.c, k * 3);
15897
+ big.r0 = mix(cb.r, cs.r, k * 3);
15898
+ big.c = mix(big.c, cs.c, k * 3);
15899
+ big.rr = mix(big.rr, cs.r, k * 3);
15900
+ small.x += (big.x - small.x) * 0.05;
15901
+ small.y += (big.y - small.y) * 0.05;
15902
+ if (small.r < 10) {
15903
+ orbs.splice(orbs.indexOf(small), 1);
15904
+ big.wob = 1;
15905
+ const c2 = cur(big);
15906
+ big.name = pickName([big.name]);
15907
+ big.c0 = c2.c;
15908
+ big.r0 = c2.r;
15909
+ big.c = PAL[big.name].c.slice();
15910
+ big.rr = PAL[big.name].r.slice();
15911
+ big.ct = 0;
15912
+ if (big.r > MAXR) {
15913
+ const from = cur(big);
15914
+ orbs.splice(orbs.indexOf(big), 1);
15915
+ for (let n2 = 0; n2 < 2; n2 += 1) {
15916
+ const angle = n2 * Math.PI + rnd(-0.4, 0.4);
15917
+ const speed = rnd(1.4, 2.2);
15918
+ orbs.push(
15919
+ make(
15920
+ big.x,
15921
+ big.y,
15922
+ Math.cos(angle) * speed + big.vx,
15923
+ Math.sin(angle) * speed + big.vy,
15924
+ big.r * 0.42,
15925
+ pickName(),
15926
+ { rd: big.r * 0.5, c: from.c, rr: from.r }
15927
+ )
15928
+ );
15929
+ }
15930
+ }
15931
+ return;
15932
+ }
15933
+ }
15934
+ }
15935
+ }
15936
+ }
15937
+ };
15938
+ const step = (dt) => {
15939
+ spawnTime += dt;
15940
+ targetTime += dt;
15941
+ if (targetTime > (target === 3 ? 8 : 11)) {
15942
+ targetTime = 0;
15943
+ target = target === 3 ? 2 : 3;
15944
+ if (target === 2 && orbs.length > 2) {
15945
+ const oldest = orbs.filter((o2) => !o2.leaving).sort((a2, b) => b.age - a2.age)[0];
15946
+ if (oldest) {
15947
+ oldest.leaving = true;
15948
+ const d = Math.hypot(oldest.x - W / 2, oldest.y - H / 2) || 1;
15949
+ oldest.lx = (oldest.x - W / 2) / d;
15950
+ oldest.ly = (oldest.y - H / 2) / d;
15951
+ }
15952
+ }
15953
+ }
15954
+ if (spawnTime > 2.4 && orbs.filter((o2) => !o2.leaving).length < target) {
15955
+ spawnTime = 0;
15956
+ spawn();
15957
+ }
15958
+ orbs.forEach((orb) => {
15959
+ const o2 = orb;
15960
+ o2.age += dt;
15961
+ o2.x += o2.vx * dt * 60;
15962
+ o2.y += o2.vy * dt * 60;
15963
+ o2.vx *= 0.999;
15964
+ o2.vy *= 0.999;
15965
+ const k = 0.03 * dt * 60;
15966
+ if (o2.leaving) {
15967
+ o2.vx += (o2.lx ?? 0) * k;
15968
+ o2.vy += (o2.ly ?? 0) * k;
15969
+ } else if (o2.age > 3) {
15970
+ if (o2.x < W * 0.08)
15971
+ o2.vx += k;
15972
+ if (o2.x > W * 0.92)
15973
+ o2.vx -= k;
15974
+ if (o2.y < H * 0.1)
15975
+ o2.vy += k;
15976
+ if (o2.y > H * 0.9)
15977
+ o2.vy -= k;
15978
+ orbs.forEach((q) => {
15979
+ if (q !== o2 && !q.leaving) {
15980
+ const dx = o2.x - q.x;
15981
+ const dy = o2.y - q.y;
15982
+ const d = Math.hypot(dx, dy) || 1;
15983
+ if (d < 420) {
15984
+ o2.vx += dx / d * 6e-3 * dt * 60;
15985
+ o2.vy += dy / d * 6e-3 * dt * 60;
15986
+ }
15987
+ }
15988
+ });
15989
+ }
15990
+ const speed = Math.hypot(o2.vx, o2.vy);
15991
+ const cap = o2.leaving ? 4 : 2.2;
15992
+ if (speed > cap) {
15993
+ o2.vx *= cap / speed;
15994
+ o2.vy *= cap / speed;
15995
+ }
15996
+ o2.rd = lerp(o2.rd, o2.r, 1 - Math.exp(-dt * 5));
15997
+ o2.ct = Math.min(1, o2.ct + dt * 1.4);
15998
+ o2.wob = Math.max(0, o2.wob - dt * 1.1);
15999
+ });
16000
+ collide(dt);
16001
+ orbs = orbs.filter((o2) => {
16002
+ const m2 = o2.leaving ? o2.rd * 1.6 : 400;
16003
+ return o2.x > -m2 && o2.x < W + m2 && o2.y > -m2 && o2.y < H + m2;
16004
+ });
16005
+ };
16006
+ const draw = () => {
16007
+ ctx.clearRect(0, 0, W, H);
16008
+ orbs.forEach((o2) => {
16009
+ const c2 = cur(o2);
16010
+ const w2 = o2.rd * 1.35;
16011
+ const wob = o2.wob > 0 ? Math.sin((1 - o2.wob) * 20) * 0.16 * o2.wob : 0;
16012
+ ctx.save();
16013
+ ctx.translate(o2.x, o2.y);
16014
+ ctx.rotate(TILT);
16015
+ ctx.scale(1 + wob, (1 - wob) * RATIO);
16016
+ const gradient = ctx.createRadialGradient(0, 0, 0, 0, 0, w2);
16017
+ gradient.addColorStop(0, css(c2.c));
16018
+ gradient.addColorStop(0.62, css(c2.c));
16019
+ gradient.addColorStop(1, css(c2.r));
16020
+ ctx.fillStyle = gradient;
16021
+ ctx.beginPath();
16022
+ ctx.arc(0, 0, w2, 0, Math.PI * 2);
16023
+ ctx.fill();
16024
+ ctx.restore();
16025
+ });
16026
+ };
16027
+ const resize = () => {
16028
+ const dpr = Math.min(window.devicePixelRatio || 1, 2);
16029
+ const width = Math.max(1, canvas.clientWidth);
16030
+ const height = Math.max(1, canvas.clientHeight);
16031
+ canvas.width = Math.round(width * dpr);
16032
+ canvas.height = Math.round(height * dpr);
16033
+ const scale = Math.max(width / W, height / H);
16034
+ ctx.setTransform(
16035
+ dpr * scale,
16036
+ 0,
16037
+ 0,
16038
+ dpr * scale,
16039
+ dpr * (width - W * scale) / 2,
16040
+ dpr * (height - H * scale) / 2
16041
+ );
16042
+ draw();
16043
+ };
16044
+ const tick = (now) => {
16045
+ step(Math.min(0.05, (now - last) / 1e3));
16046
+ last = now;
16047
+ draw();
16048
+ raf = window.requestAnimationFrame(tick);
16049
+ };
16050
+ const syncMotion = () => {
16051
+ window.cancelAnimationFrame(raf);
16052
+ last = performance.now();
16053
+ if (!motion2.matches && !document.hidden)
16054
+ raf = window.requestAnimationFrame(tick);
16055
+ };
16056
+ resize();
16057
+ syncMotion();
16058
+ const observer = new ResizeObserver(resize);
16059
+ observer.observe(canvas);
16060
+ motion2.addEventListener("change", syncMotion);
16061
+ document.addEventListener("visibilitychange", syncMotion);
16062
+ return () => {
16063
+ window.cancelAnimationFrame(raf);
16064
+ observer.disconnect();
16065
+ motion2.removeEventListener("change", syncMotion);
16066
+ document.removeEventListener("visibilitychange", syncMotion);
16067
+ };
16068
+ }
16069
+ const orbOpacityForSurface = (surface, prefersDark) => {
16070
+ const perceptual = surface.match(/^okl(?:ab|ch)\(\s*([\d.]+)(%?)/);
16071
+ if (perceptual) {
16072
+ const lightness = Number(perceptual[1]) / (perceptual[2] ? 100 : 1);
16073
+ return lightness < 0.6 ? 0.35 : 0.85;
16074
+ }
16075
+ const srgb = surface.match(/^color\(srgb\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)/);
16076
+ if (srgb) {
16077
+ const brightness2 = Number(srgb[1]) * 0.2126 + Number(srgb[2]) * 0.7152 + Number(srgb[3]) * 0.0722;
16078
+ return brightness2 < 0.5 ? 0.35 : 0.85;
16079
+ }
16080
+ const channels = surface.match(/^rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)/);
16081
+ if (!channels)
16082
+ return prefersDark ? 0.35 : 0.85;
16083
+ const brightness = Number(channels[1]) * 0.2126 + Number(channels[2]) * 0.7152 + Number(channels[3]) * 0.0722;
16084
+ return brightness < 128 ? 0.35 : 0.85;
16085
+ };
16086
+ const OrbBackground_css_ts_vanilla = "";
16087
+ var OrbBackground$1 = "gde17n1";
16088
+ var OrbBackgroundHost = "gde17n0";
16089
+ const OrbBackground = ({ className, appearance }) => {
16090
+ const ref = useRef(null);
16091
+ useEffect(() => {
16092
+ if (!ref.current)
16093
+ return void 0;
16094
+ return startOrbField(ref.current);
16095
+ }, []);
16096
+ useEffect(() => {
16097
+ var _a;
16098
+ const canvas = ref.current;
16099
+ if (!canvas)
16100
+ return void 0;
16101
+ const scheme = (_a = window.matchMedia) == null ? void 0 : _a.call(window, "(prefers-color-scheme: dark)");
16102
+ const sync = () => {
16103
+ let opacity = orbOpacityForSurface(getComputedStyle(canvas).color, (scheme == null ? void 0 : scheme.matches) ?? false);
16104
+ if (appearance)
16105
+ opacity = appearance === "dark" ? 0.35 : 0.85;
16106
+ canvas.style.opacity = String(opacity);
16107
+ };
16108
+ sync();
16109
+ const observer = new MutationObserver(sync);
16110
+ let ancestor = canvas.parentElement;
16111
+ while (ancestor) {
16112
+ observer.observe(ancestor, { attributes: true, attributeFilter: ["class", "style"] });
16113
+ ancestor = ancestor.parentElement;
16114
+ }
16115
+ scheme == null ? void 0 : scheme.addEventListener("change", sync);
16116
+ return () => {
16117
+ observer.disconnect();
16118
+ scheme == null ? void 0 : scheme.removeEventListener("change", sync);
16119
+ };
16120
+ }, [appearance]);
16121
+ return /* @__PURE__ */ jsx("canvas", { ref, className: classNames(OrbBackground$1, className), "aria-hidden": "true" });
16122
+ };
16123
+ const SplashScreen_css_ts_vanilla = "";
16124
+ var SplashScreen$1 = "wf38060";
16125
+ var SplashScreenFooter = "wf38061";
16126
+ const SplashScreen = ({ children }) => /* @__PURE__ */ jsxs(Box, { className: classNames(SplashScreen$1, OrbBackgroundHost), direction: "Column", children: [
16127
+ /* @__PURE__ */ jsx(OrbBackground, {}),
16128
+ children,
16129
+ /* @__PURE__ */ jsx(Box, { className: SplashScreenFooter, shrink: "No", alignItems: "Center", justifyContent: "Center", children: /* @__PURE__ */ jsx(Text, { size: "H2", align: "Center", children: "AG2 Space" }) })
16130
+ ] });
15784
16131
  const Starfield_css_ts_vanilla = "";
15785
16132
  var Starfield$1 = "_4j0z2c1";
15786
16133
  var StarfieldHost = "_4j0z2c0";
@@ -15888,14 +16235,6 @@ const Starfield = ({ className }) => {
15888
16235
  }, []);
15889
16236
  return /* @__PURE__ */ jsx("canvas", { ref: canvasRef, className: classNames(Starfield$1, className), "aria-hidden": true });
15890
16237
  };
15891
- const SplashScreen_css_ts_vanilla = "";
15892
- var SplashScreen$1 = "wf38060";
15893
- var SplashScreenFooter = "wf38061";
15894
- const SplashScreen = ({ children }) => /* @__PURE__ */ jsxs(Box, { className: classNames(SplashScreen$1, StarfieldHost), direction: "Column", children: [
15895
- /* @__PURE__ */ jsx(Starfield, {}),
15896
- children,
15897
- /* @__PURE__ */ jsx(Box, { className: SplashScreenFooter, shrink: "No", alignItems: "Center", justifyContent: "Center", children: /* @__PURE__ */ jsx(Text, { size: "H2", align: "Center", children: "AG2 Space" }) })
15898
- ] });
15899
16238
  const style_css_ts_vanilla = "";
15900
16239
  var PageCanvas$1 = "_18hg0vg1";
15901
16240
  var PageContent$1 = "_18hg0vge _8nex5a1 _8nex5a0";
@@ -15989,39 +16328,85 @@ function beginDragOverlay(cursor) {
15989
16328
  document.body.appendChild(overlay);
15990
16329
  return () => overlay.remove();
15991
16330
  }
16331
+ const ROOM_NAV_COLLAPSED_KEY = "roomNavCollapsed";
16332
+ const createRoomNavCollapseStore = (storage) => {
16333
+ const listeners = /* @__PURE__ */ new Set();
16334
+ const requests = /* @__PURE__ */ new Map();
16335
+ let preference = false;
16336
+ let unsavedPreference = false;
16337
+ const readPreference = () => {
16338
+ if (unsavedPreference)
16339
+ return preference;
16340
+ try {
16341
+ preference = storage().getItem(ROOM_NAV_COLLAPSED_KEY) === "1";
16342
+ } catch {
16343
+ }
16344
+ return preference;
16345
+ };
16346
+ const getSnapshot = () => readPreference() || Array.from(requests.values()).some(Boolean);
16347
+ const emit = () => listeners.forEach((listener) => listener());
16348
+ return {
16349
+ getSnapshot,
16350
+ subscribe: (listener) => {
16351
+ listeners.add(listener);
16352
+ return () => {
16353
+ listeners.delete(listener);
16354
+ };
16355
+ },
16356
+ toggle: () => {
16357
+ preference = !getSnapshot();
16358
+ try {
16359
+ storage().setItem(ROOM_NAV_COLLAPSED_KEY, preference ? "1" : "0");
16360
+ unsavedPreference = false;
16361
+ } catch {
16362
+ unsavedPreference = true;
16363
+ }
16364
+ requests.forEach((_, token) => requests.set(token, false));
16365
+ emit();
16366
+ },
16367
+ requestCollapse: () => {
16368
+ const token = Symbol("auto-collapse");
16369
+ requests.set(token, true);
16370
+ emit();
16371
+ return () => {
16372
+ requests.delete(token);
16373
+ emit();
16374
+ };
16375
+ }
16376
+ };
16377
+ };
15992
16378
  const PageRoot = ({ nav, children }) => /* @__PURE__ */ jsxs(Box, { grow: "Yes", className: PageRoot$1, children: [
15993
16379
  nav,
15994
16380
  children
15995
16381
  ] });
15996
- const ROOM_NAV_COLLAPSED_KEY = "roomNavCollapsed";
15997
- const navCollapseListeners = /* @__PURE__ */ new Set();
16382
+ const navCollapseStore = createRoomNavCollapseStore(() => localStorage);
15998
16383
  let animateNavChange = false;
15999
- const readNavCollapsed = () => {
16000
- try {
16001
- return localStorage.getItem(ROOM_NAV_COLLAPSED_KEY) === "1";
16002
- } catch {
16003
- return false;
16004
- }
16005
- };
16006
16384
  function useRoomNavCollapsed() {
16007
- const [collapsed, set] = useState(readNavCollapsed);
16008
- useEffect(() => {
16009
- const cb = () => set(readNavCollapsed());
16010
- navCollapseListeners.add(cb);
16011
- return () => {
16012
- navCollapseListeners.delete(cb);
16013
- };
16385
+ const [collapsed, set] = useState(navCollapseStore.getSnapshot);
16386
+ useLayoutEffect(() => {
16387
+ const cb = () => set(navCollapseStore.getSnapshot());
16388
+ const unsubscribe = navCollapseStore.subscribe(cb);
16389
+ cb();
16390
+ return unsubscribe;
16014
16391
  }, []);
16015
16392
  const toggle = useCallback((options) => {
16016
16393
  animateNavChange = (options == null ? void 0 : options.animate) ?? false;
16017
- try {
16018
- localStorage.setItem(ROOM_NAV_COLLAPSED_KEY, readNavCollapsed() ? "0" : "1");
16019
- } catch {
16020
- }
16021
- navCollapseListeners.forEach((cb) => cb());
16394
+ navCollapseStore.toggle();
16022
16395
  }, []);
16023
16396
  return [collapsed, toggle];
16024
16397
  }
16398
+ function useRoomNavAutoCollapse(active, scope) {
16399
+ useLayoutEffect(() => {
16400
+ if (!active)
16401
+ return void 0;
16402
+ animateNavChange = false;
16403
+ const release = navCollapseStore.requestCollapse();
16404
+ return () => {
16405
+ animateNavChange = false;
16406
+ release();
16407
+ };
16408
+ }, [active, scope]);
16409
+ }
16025
16410
  const ROOM_NAV_WIDTH_KEY = "roomNavWidth";
16026
16411
  const NAV_MIN_WIDTH = 180;
16027
16412
  const NAV_MAX_WIDTH = 480;
@@ -16068,16 +16453,16 @@ const PageNav = ({ size: size2, children, collapsedMark }) => {
16068
16453
  duration = closed ? NAV_EXIT_MS : NAV_ENTER_MS;
16069
16454
  }
16070
16455
  useLayoutEffect(() => {
16071
- var _a, _b, _c, _d, _e;
16456
+ var _a, _b, _c, _d, _e, _f;
16072
16457
  const before = previousExtent.current;
16073
16458
  const wasClosed = previousClosed.current;
16074
16459
  previousExtent.current = extent;
16075
16460
  previousClosed.current = closed;
16076
16461
  if (before !== void 0 && wasClosed !== closed) {
16077
- if (closed)
16078
- (_a = showButtonRef.current) == null ? void 0 : _a.focus({ preventScroll: true });
16079
- else if (document.activeElement === showButtonRef.current) {
16080
- const target = ((_b = drawerRef.current) == null ? void 0 : _b.querySelector("[data-nav-collapse]")) ?? ((_c = drawerRef.current) == null ? void 0 : _c.querySelector("button, a"));
16462
+ if (closed && ((_a = drawerRef.current) == null ? void 0 : _a.contains(document.activeElement))) {
16463
+ (_b = showButtonRef.current) == null ? void 0 : _b.focus({ preventScroll: true });
16464
+ } else if (!closed && document.activeElement === showButtonRef.current) {
16465
+ const target = ((_c = drawerRef.current) == null ? void 0 : _c.querySelector("[data-nav-collapse]")) ?? ((_d = drawerRef.current) == null ? void 0 : _d.querySelector("button, a"));
16081
16466
  target == null ? void 0 : target.focus({ preventScroll: true });
16082
16467
  }
16083
16468
  }
@@ -16097,13 +16482,13 @@ const PageNav = ({ size: size2, children, collapsedMark }) => {
16097
16482
  }
16098
16483
  if (before === void 0 || before === extent)
16099
16484
  return;
16100
- const main = (_d = rootRef.current) == null ? void 0 : _d.nextElementSibling;
16485
+ const main = (_e = rootRef.current) == null ? void 0 : _e.nextElementSibling;
16101
16486
  if (!main)
16102
16487
  return;
16103
16488
  const matrix = getComputedStyle(main).transform;
16104
16489
  const values = matrix.match(/matrix(3d)?\((.+)\)/);
16105
16490
  const currentX = values ? Number(values[2].split(",")[values[1] ? 12 : 4]) || 0 : 0;
16106
- (_e = mainMotion.current) == null ? void 0 : _e.cleanup();
16491
+ (_f = mainMotion.current) == null ? void 0 : _f.cleanup();
16107
16492
  main.style.transition = "none";
16108
16493
  main.style.transform = `translateX(${currentX + before - extent}px)`;
16109
16494
  main.getBoundingClientRect();
@@ -17899,6 +18284,8 @@ export {
17899
18284
  MenuItem,
17900
18285
  Modal,
17901
18286
  NavCollapseRow,
18287
+ OrbBackground,
18288
+ OrbBackgroundHost,
17902
18289
  Overlay,
17903
18290
  OverlayBackdrop,
17904
18291
  OverlayCenter,
@@ -18025,6 +18412,7 @@ export {
18025
18412
  useOverlayContainer,
18026
18413
  usePopOutContainer,
18027
18414
  useResizeObserver,
18415
+ useRoomNavAutoCollapse,
18028
18416
  useRoomNavCollapsed,
18029
18417
  useScreenSize,
18030
18418
  useScreenSizeContext,