@openspecui/web 3.5.0 → 3.5.2

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 (70) hide show
  1. package/dist/assets/CanvasRenderer-D7DGGDQU.js +1 -0
  2. package/dist/assets/WebGLRenderer-CjDeBZzX.js +1 -0
  3. package/dist/assets/WebGPURenderer-BEzco9Ka.js +1 -0
  4. package/dist/assets/browserAll-DkGrhjFB.js +1 -0
  5. package/dist/assets/{dist-8NRfes3A.js → dist-4Q-3H32Y.js} +1 -1
  6. package/dist/assets/{dist-C93bxB4D.js → dist-Bw7c0_jc.js} +1 -1
  7. package/dist/assets/dist-C1SIv52I.js +1 -0
  8. package/dist/assets/{dist-Bt9L_Nqg.js → dist-C2CZRWaX.js} +1 -1
  9. package/dist/assets/{dist-BJoJLpoD.js → dist-C87gRqf_.js} +1 -1
  10. package/dist/assets/{dist-CFN2ObFF.js → dist-CFABLsEW.js} +1 -1
  11. package/dist/assets/{dist-BHok5tKv.js → dist-CV0FPhgu.js} +1 -1
  12. package/dist/assets/dist-CrPybnRq.js +1 -0
  13. package/dist/assets/{dist-BsbQTBj9.js → dist-DAT_ScNa.js} +1 -1
  14. package/dist/assets/{dist-BmXzljTn.js → dist-DDkSOHP1.js} +1 -1
  15. package/dist/assets/{dist-CkfQmrP4.js → dist-LUCFMJ0H.js} +1 -1
  16. package/dist/assets/dist-PzWhymM8.js +1 -0
  17. package/dist/assets/{ghostty-web-tgKhUe7Z.js → ghostty-web-CCC3Geb4.js} +1 -1
  18. package/dist/assets/index-DHDRgs_i.css +1 -0
  19. package/dist/assets/index-DQNMhAvr.js +1619 -0
  20. package/dist/assets/{init-nrsssPRF.js → init-YHF-o1HV.js} +1 -1
  21. package/dist/assets/trpc-q0DFddsK.js +1 -0
  22. package/dist/assets/webworkerAll-CKlnpVkj.js +1 -0
  23. package/dist/index.html +2 -2
  24. package/dist-ssg/client/.vite/ssr-manifest.json +18 -15
  25. package/dist-ssg/client/assets/CanvasRenderer-ByUXbKXl.js +1 -0
  26. package/dist-ssg/client/assets/WebGLRenderer-ChYLzDCd.js +1 -0
  27. package/dist-ssg/client/assets/WebGPURenderer-BobKBO0x.js +1 -0
  28. package/dist-ssg/client/assets/browserAll-UN3GPOPc.js +1 -0
  29. package/dist-ssg/client/assets/{dist-DNEbnFKc.js → dist-10DRfH0N.js} +1 -1
  30. package/dist-ssg/client/assets/{dist-C0YgE3lp.js → dist-605X54ro.js} +1 -1
  31. package/dist-ssg/client/assets/{dist-uuReRNC-.js → dist-BqMeFwto.js} +1 -1
  32. package/dist-ssg/client/assets/dist-BuDT5pXI.js +1 -0
  33. package/dist-ssg/client/assets/dist-BxaDOJmU.js +1 -0
  34. package/dist-ssg/client/assets/{dist-v4ayJ_bz.js → dist-BzIh3dSQ.js} +1 -1
  35. package/dist-ssg/client/assets/{dist-CW2olo-9.js → dist-CF5IRlgL.js} +1 -1
  36. package/dist-ssg/client/assets/{dist-C8kk-UJI.js → dist-Cq0edT--.js} +1 -1
  37. package/dist-ssg/client/assets/{dist-DtxQ5voT.js → dist-D2UdxWFE.js} +1 -1
  38. package/dist-ssg/client/assets/{dist-BfzZD9UO.js → dist-Df67DVWO.js} +1 -1
  39. package/dist-ssg/client/assets/{dist-BZJfR7eh.js → dist-IUx13mN_.js} +1 -1
  40. package/dist-ssg/client/assets/dist-ScSFKyoF.js +1 -0
  41. package/dist-ssg/client/assets/{ghostty-web-BbLQ67li.js → ghostty-web-DzvBtNVX.js} +1 -1
  42. package/dist-ssg/client/assets/index-14LuyayW.css +1 -0
  43. package/dist-ssg/client/assets/{index.ssg-DXy3R2iH.js → index.ssg-BEtxTyFQ.js} +152 -92
  44. package/dist-ssg/client/assets/{init-_JOkHWu-.js → init-BJbVbp-i.js} +1 -1
  45. package/dist-ssg/client/assets/trpc-bHbo3cKe.js +1 -0
  46. package/dist-ssg/client/assets/webworkerAll-BeYUBsxP.js +1 -0
  47. package/dist-ssg/client/index.ssg.html +2 -2
  48. package/dist-ssg/server/entry-server.js +198 -38
  49. package/package.json +1 -1
  50. package/dist/assets/CanvasRenderer-CmnvR8Gr.js +0 -1
  51. package/dist/assets/WebGLRenderer-5eXMpF1z.js +0 -1
  52. package/dist/assets/WebGPURenderer-Vea1ovaN.js +0 -1
  53. package/dist/assets/browserAll-CvzI3xL_.js +0 -1
  54. package/dist/assets/dist-Bijj14CE.js +0 -1
  55. package/dist/assets/dist-CR9rQI_B.js +0 -1
  56. package/dist/assets/dist-CTEkXR9h.js +0 -1
  57. package/dist/assets/index-BbZP3-SK.js +0 -1559
  58. package/dist/assets/index-CiTq1NTV.css +0 -1
  59. package/dist/assets/trpc-B7EKcsQU.js +0 -1
  60. package/dist/assets/webworkerAll-g1RF5EzF.js +0 -1
  61. package/dist-ssg/client/assets/CanvasRenderer-fkryBDsc.js +0 -1
  62. package/dist-ssg/client/assets/WebGLRenderer-9a3extRo.js +0 -1
  63. package/dist-ssg/client/assets/WebGPURenderer-BvVd3SI-.js +0 -1
  64. package/dist-ssg/client/assets/browserAll-C9rt7SfY.js +0 -1
  65. package/dist-ssg/client/assets/dist-CE0-ZIMY.js +0 -1
  66. package/dist-ssg/client/assets/dist-CPrch2pS.js +0 -1
  67. package/dist-ssg/client/assets/dist-iqZn-PJ-.js +0 -1
  68. package/dist-ssg/client/assets/index-e7T9ImLQ.css +0 -1
  69. package/dist-ssg/client/assets/trpc-DfCk117g.js +0 -1
  70. package/dist-ssg/client/assets/webworkerAll-xF0Rbwq0.js +0 -1
@@ -1 +1 @@
1
- import{it as e}from"./Geometry-DYOOLchf.js";import{E as t,T as n}from"./index.ssg-DXy3R2iH.js";e.add(n),e.add(t);
1
+ import{it as e}from"./Geometry-DYOOLchf.js";import{E as t,T as n}from"./index.ssg-BEtxTyFQ.js";e.add(n),e.add(t);
@@ -0,0 +1 @@
1
+ import{F as e}from"./index.ssg-BEtxTyFQ.js";export{e as trpcClient};
@@ -0,0 +1 @@
1
+ import"./Geometry-DYOOLchf.js";import"./index.ssg-BEtxTyFQ.js";import"./init-BJbVbp-i.js";
@@ -35,7 +35,7 @@
35
35
  document.head.append(preconnectApi, preconnectStatic, stylesheet)
36
36
  })()
37
37
  </script>
38
- <script type="module" crossorigin src="/assets/index.ssg-DXy3R2iH.js"></script>
38
+ <script type="module" crossorigin src="/assets/index.ssg-BEtxTyFQ.js"></script>
39
39
  <link rel="modulepreload" crossorigin href="/assets/chunk-DECur_0Z.js">
40
40
  <link rel="modulepreload" crossorigin href="/assets/dist-UN0VvTJo.js">
41
41
  <link rel="modulepreload" crossorigin href="/assets/dist-DK_X22KS.js">
@@ -45,7 +45,7 @@
45
45
  <link rel="modulepreload" crossorigin href="/assets/getTextureBatchBindGroup-BZ3pD2UV.js">
46
46
  <link rel="modulepreload" crossorigin href="/assets/BufferResource-4Jl_6qej.js">
47
47
  <link rel="modulepreload" crossorigin href="/assets/ImageSource-_DLFcjTj.js">
48
- <link rel="stylesheet" crossorigin href="/assets/index-e7T9ImLQ.css">
48
+ <link rel="stylesheet" crossorigin href="/assets/index-14LuyayW.css">
49
49
  </head>
50
50
  <body>
51
51
  <div id="root"><!--app-html--></div>
@@ -67053,6 +67053,7 @@ var MIN_WIDTH_PX = 300;
67053
67053
  var MIN_HEIGHT_PX = 150;
67054
67054
  var MAX_WIDTH_PCT = 95;
67055
67055
  var MAX_HEIGHT_PCT = 85;
67056
+ var MOVE_BAR_PROTRUSION_PX = 10;
67056
67057
  var SETTINGS_KEY$1 = "xtermInputPanelSettings";
67057
67058
  function mergeSettings(updates) {
67058
67059
  try {
@@ -67129,6 +67130,8 @@ var InputPanel = class extends i {
67129
67130
  --muted-foreground: var(--_ip-muted-fg);
67130
67131
  --terminal: var(--_ip-bg);
67131
67132
  --terminal-foreground: var(--_ip-fg);
67133
+ --move-bar-height: 10px;
67134
+ --move-bar-protrusion: 10px;
67132
67135
  font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
67133
67136
  font-size: 13px;
67134
67137
  color: var(--foreground, #fff);
@@ -67251,7 +67254,7 @@ var InputPanel = class extends i {
67251
67254
  border-radius: 8px;
67252
67255
  background: var(--background, #1a1a1a);
67253
67256
  color: var(--foreground, #fff);
67254
- overflow: hidden;
67257
+ overflow: visible;
67255
67258
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
67256
67259
  display: flex;
67257
67260
  flex-direction: column;
@@ -67263,6 +67266,54 @@ var InputPanel = class extends i {
67263
67266
  z-index: 9999;
67264
67267
  }
67265
67268
 
67269
+ .panel-body {
67270
+ width: 100%;
67271
+ height: 100%;
67272
+ display: flex;
67273
+ flex-direction: column;
67274
+ overflow: hidden;
67275
+ border-radius: inherit;
67276
+ }
67277
+
67278
+ .move-bar {
67279
+ position: absolute;
67280
+ top: calc(-1 * var(--move-bar-protrusion));
67281
+ left: 50%;
67282
+ width: 68px;
67283
+ height: var(--move-bar-height);
67284
+ transform: translateX(-50%);
67285
+ border: 1px solid var(--primary, #e04a2f);
67286
+ border-bottom: 0;
67287
+ border-radius: 10px 10px 0 0;
67288
+ background: var(--background, #1a1a1a);
67289
+ color: var(--muted-foreground, #888);
67290
+ touch-action: none;
67291
+ cursor: grab;
67292
+ z-index: 12;
67293
+ display: flex;
67294
+ align-items: center;
67295
+ justify-content: center;
67296
+ box-shadow: 0 -6px 12px rgba(0, 0, 0, 0.12);
67297
+ }
67298
+
67299
+ .move-bar::before {
67300
+ content: '';
67301
+ width: 34px;
67302
+ height: 4px;
67303
+ border-radius: 999px;
67304
+ background: currentColor;
67305
+ opacity: 0.72;
67306
+ }
67307
+
67308
+ .move-bar:hover,
67309
+ :host([data-interacting]) .move-bar {
67310
+ color: var(--primary, #e04a2f);
67311
+ }
67312
+
67313
+ :host([data-interacting]) .move-bar {
67314
+ cursor: grabbing;
67315
+ }
67316
+
67266
67317
  /* --- Resize handles --- */
67267
67318
  .resize-handle {
67268
67319
  position: absolute;
@@ -67360,6 +67411,7 @@ var InputPanel = class extends i {
67360
67411
  }
67361
67412
  disconnectedCallback() {
67362
67413
  super.disconnectedCallback();
67414
+ this._closeFloatingDialog();
67363
67415
  this.dispatchEvent(new CustomEvent("input-panel:disconnected", {
67364
67416
  bubbles: true,
67365
67417
  composed: true
@@ -67416,7 +67468,7 @@ var InputPanel = class extends i {
67416
67468
  const maxOverX = wPx / 3, maxOverY = hPx / 3;
67417
67469
  return {
67418
67470
  left: Math.max(-maxOverX, Math.min(vw - wPx + maxOverX, leftPx)),
67419
- top: Math.max(0, Math.min(vh - hPx + maxOverY, topPx))
67471
+ top: Math.max(MOVE_BAR_PROTRUSION_PX, Math.min(vh - hPx + maxOverY, topPx))
67420
67472
  };
67421
67473
  }
67422
67474
  _applyGeometry(dialog) {
@@ -67444,6 +67496,43 @@ var InputPanel = class extends i {
67444
67496
  const dialog = this.shadowRoot?.querySelector(".panel-dialog");
67445
67497
  if (dialog) this._applyGeometry(dialog);
67446
67498
  }
67499
+ _isPopoverOpen(dialog) {
67500
+ try {
67501
+ return dialog.matches(":popover-open");
67502
+ } catch {
67503
+ return false;
67504
+ }
67505
+ }
67506
+ _isFloatingDialogOpen(dialog) {
67507
+ return dialog.open || this._isPopoverOpen(dialog);
67508
+ }
67509
+ _showFloatingDialog(dialog) {
67510
+ if (this._isFloatingDialogOpen(dialog)) return;
67511
+ if (!dialog.isConnected) {
67512
+ requestAnimationFrame(() => {
67513
+ if (this.layout === "floating" && dialog.isConnected && !this._isFloatingDialogOpen(dialog)) {
67514
+ this._showFloatingDialog(dialog);
67515
+ this._applyGeometry(dialog);
67516
+ }
67517
+ });
67518
+ return;
67519
+ }
67520
+ const popoverDialog = dialog;
67521
+ if (typeof popoverDialog.showPopover === "function") {
67522
+ popoverDialog.showPopover();
67523
+ return;
67524
+ }
67525
+ dialog.show();
67526
+ }
67527
+ _closeFloatingDialog() {
67528
+ const dialog = this.shadowRoot?.querySelector(".panel-dialog");
67529
+ if (!dialog) return;
67530
+ if (this._isPopoverOpen(dialog) && typeof dialog.hidePopover === "function") {
67531
+ dialog.hidePopover();
67532
+ return;
67533
+ }
67534
+ if (dialog.open) dialog.close();
67535
+ }
67447
67536
  _switchTab(tab) {
67448
67537
  this.activeTab = tab;
67449
67538
  this.dispatchEvent(new CustomEvent("input-panel:tab-change", {
@@ -67455,6 +67544,7 @@ var InputPanel = class extends i {
67455
67544
  }
67456
67545
  _toggleLayout() {
67457
67546
  this.layout = this.layout === "fixed" ? "floating" : "fixed";
67547
+ if (this.layout === "fixed") this._closeFloatingDialog();
67458
67548
  this.dispatchEvent(new CustomEvent("input-panel:layout-change", {
67459
67549
  detail: { layout: this.layout },
67460
67550
  bubbles: true,
@@ -67463,8 +67553,7 @@ var InputPanel = class extends i {
67463
67553
  this.requestUpdate();
67464
67554
  }
67465
67555
  _close() {
67466
- const dialog = this.shadowRoot?.querySelector(".panel-dialog");
67467
- if (dialog?.open) dialog.close();
67556
+ this._closeFloatingDialog();
67468
67557
  this.dispatchEvent(new CustomEvent("input-panel:close", {
67469
67558
  bubbles: true,
67470
67559
  composed: true
@@ -67474,8 +67563,8 @@ var InputPanel = class extends i {
67474
67563
  super.firstUpdated(changed);
67475
67564
  if (this.layout === "floating") {
67476
67565
  const dialog = this.shadowRoot?.querySelector(".panel-dialog");
67477
- if (dialog && !dialog.open) {
67478
- dialog.show();
67566
+ if (dialog && !this._isFloatingDialogOpen(dialog)) {
67567
+ this._showFloatingDialog(dialog);
67479
67568
  this._applyGeometry(dialog);
67480
67569
  }
67481
67570
  }
@@ -67486,14 +67575,17 @@ var InputPanel = class extends i {
67486
67575
  if (this.layout === "floating") {
67487
67576
  const dialog = this.shadowRoot?.querySelector(".panel-dialog");
67488
67577
  if (dialog) {
67489
- if (changed.has("layout") && !dialog.open) dialog.show();
67490
- if (dialog.open) this._applyGeometry(dialog);
67578
+ if (changed.has("layout") && !this._isFloatingDialogOpen(dialog)) this._showFloatingDialog(dialog);
67579
+ if (this._isFloatingDialogOpen(dialog)) this._applyGeometry(dialog);
67491
67580
  }
67492
67581
  }
67493
67582
  }
67494
67583
  _onToolbarPointerDown(e) {
67495
- if (this.layout !== "floating") return;
67496
67584
  if (e.target.closest("button")) return;
67585
+ this._onDragPointerDown(e);
67586
+ }
67587
+ _onDragPointerDown(e) {
67588
+ if (this.layout !== "floating") return;
67497
67589
  const dialog = this.shadowRoot?.querySelector(".panel-dialog");
67498
67590
  if (!dialog) return;
67499
67591
  e.stopPropagation();
@@ -67506,9 +67598,12 @@ var InputPanel = class extends i {
67506
67598
  origTop: rect.top
67507
67599
  };
67508
67600
  this.setAttribute("data-interacting", "");
67509
- e.target.setPointerCapture(e.pointerId);
67601
+ const handle = e.currentTarget;
67602
+ try {
67603
+ handle.setPointerCapture(e.pointerId);
67604
+ } catch {}
67510
67605
  }
67511
- _onToolbarPointerMove(e) {
67606
+ _onDragPointerMove(e) {
67512
67607
  if (!this._dragState) return;
67513
67608
  e.stopPropagation();
67514
67609
  e.preventDefault();
@@ -67524,8 +67619,10 @@ var InputPanel = class extends i {
67524
67619
  dialog.style.top = `${top}px`;
67525
67620
  dialog.style.bottom = "auto";
67526
67621
  }
67527
- _onToolbarPointerUp() {
67622
+ _onDragPointerUp(e) {
67528
67623
  if (!this._dragState) return;
67624
+ e.stopPropagation();
67625
+ e.preventDefault();
67529
67626
  this._dragState = null;
67530
67627
  this.removeAttribute("data-interacting");
67531
67628
  const dialog = this.shadowRoot?.querySelector(".panel-dialog");
@@ -67645,8 +67742,9 @@ var InputPanel = class extends i {
67645
67742
  class="toolbar"
67646
67743
  part="toolbar"
67647
67744
  @pointerdown=${(e) => this._onToolbarPointerDown(e)}
67648
- @pointermove=${(e) => this._onToolbarPointerMove(e)}
67649
- @pointerup=${() => this._onToolbarPointerUp()}
67745
+ @pointermove=${(e) => this._onDragPointerMove(e)}
67746
+ @pointerup=${(e) => this._onDragPointerUp(e)}
67747
+ @pointercancel=${(e) => this._onDragPointerUp(e)}
67650
67748
  >
67651
67749
  <div class="tab-group">
67652
67750
  ${[
@@ -67706,7 +67804,16 @@ var InputPanel = class extends i {
67706
67804
  ></input-panel-settings>` : T`<slot name=${this.activeTab}></slot>`}
67707
67805
  </div>
67708
67806
  `;
67709
- if (this.layout === "floating") return T` <dialog class="panel-dialog">
67807
+ if (this.layout === "floating") return T` <dialog class="panel-dialog" popover="manual">
67808
+ <div
67809
+ class="move-bar"
67810
+ part="move-bar"
67811
+ aria-label="Move input panel"
67812
+ @pointerdown=${(e) => this._onDragPointerDown(e)}
67813
+ @pointermove=${(e) => this._onDragPointerMove(e)}
67814
+ @pointerup=${(e) => this._onDragPointerUp(e)}
67815
+ @pointercancel=${(e) => this._onDragPointerUp(e)}
67816
+ ></div>
67710
67817
  <div
67711
67818
  class="resize-handle resize-tl"
67712
67819
  @pointerdown=${(e) => this._onResizeStart(e, "tl")}
@@ -67723,7 +67830,7 @@ var InputPanel = class extends i {
67723
67830
  class="resize-handle resize-br"
67724
67831
  @pointerdown=${(e) => this._onResizeStart(e, "br")}
67725
67832
  ></div>
67726
- ${inner}
67833
+ <div class="panel-body">${inner}</div>
67727
67834
  </dialog>`;
67728
67835
  return inner;
67729
67836
  }
@@ -92529,33 +92636,89 @@ var InputPanelAddon = class InputPanelAddon {
92529
92636
  }
92530
92637
  };
92531
92638
  //#endregion
92532
- //#region src/lib/audio-cue-engine.ts
92639
+ //#region src/lib/user-gesture-audio-context.ts
92640
+ var audioContext = null;
92641
+ var audioContextPromise = null;
92642
+ var userGesturePromise = null;
92643
+ var resolveUserGesturePromise = null;
92644
+ var userGestureResolved = false;
92645
+ var userGestureListenersActive = false;
92533
92646
  function getAudioContextConstructor() {
92534
92647
  if (typeof window === "undefined") return null;
92535
92648
  return window.AudioContext ?? window.webkitAudioContext ?? null;
92536
92649
  }
92650
+ function hasUserActivation() {
92651
+ if (userGestureResolved) return true;
92652
+ if (typeof navigator === "undefined") return false;
92653
+ return navigator.userActivation?.hasBeenActive === true || navigator.userActivation?.isActive === true;
92654
+ }
92655
+ function removeUserGestureListeners() {
92656
+ if (typeof window === "undefined" || !userGestureListenersActive) return;
92657
+ window.removeEventListener("pointerdown", resolveUserGesture, true);
92658
+ window.removeEventListener("keydown", resolveUserGesture, true);
92659
+ userGestureListenersActive = false;
92660
+ }
92661
+ function resolveUserGesture() {
92662
+ userGestureResolved = true;
92663
+ removeUserGestureListeners();
92664
+ resolveUserGesturePromise?.();
92665
+ resolveUserGesturePromise = null;
92666
+ userGesturePromise = null;
92667
+ }
92668
+ function addUserGestureListeners() {
92669
+ if (typeof window === "undefined" || userGestureListenersActive || hasUserActivation()) return;
92670
+ window.addEventListener("pointerdown", resolveUserGesture, {
92671
+ capture: true,
92672
+ once: true,
92673
+ passive: true
92674
+ });
92675
+ window.addEventListener("keydown", resolveUserGesture, {
92676
+ capture: true,
92677
+ once: true
92678
+ });
92679
+ userGestureListenersActive = true;
92680
+ }
92681
+ function prepareAudioContextAfterUserGesture() {
92682
+ addUserGestureListeners();
92683
+ }
92684
+ function waitForUserGesture() {
92685
+ if (typeof window === "undefined" || hasUserActivation()) return Promise.resolve();
92686
+ if (userGesturePromise) return userGesturePromise;
92687
+ userGesturePromise = new Promise((resolve) => {
92688
+ resolveUserGesturePromise = resolve;
92689
+ addUserGestureListeners();
92690
+ });
92691
+ return userGesturePromise;
92692
+ }
92693
+ async function createAudioContextAfterUserGesture() {
92694
+ if (audioContext) return audioContext;
92695
+ if (audioContextPromise) return audioContextPromise;
92696
+ if (!getAudioContextConstructor()) return null;
92697
+ audioContextPromise = waitForUserGesture().then(async () => {
92698
+ const AudioContextCtor = getAudioContextConstructor();
92699
+ if (!AudioContextCtor) return null;
92700
+ const context = audioContext ?? new AudioContextCtor();
92701
+ audioContext = context;
92702
+ if (context.state === "suspended") await context.resume();
92703
+ return context;
92704
+ }).finally(() => {
92705
+ audioContextPromise = null;
92706
+ });
92707
+ return audioContextPromise;
92708
+ }
92709
+ //#endregion
92710
+ //#region src/lib/audio-cue-engine.ts
92537
92711
  var AudioCueEngine = class {
92538
92712
  fallbackSound;
92539
92713
  unlocked = false;
92540
92714
  unlockPromise = null;
92541
- audioContext = null;
92542
92715
  silentAudio = null;
92543
92716
  activeAudios = /* @__PURE__ */ new Set();
92544
92717
  constructor(fallback) {
92545
92718
  this.fallbackSound = fallback === "bell" ? DEFAULT_BELL_SOUND_ID : DEFAULT_NOTIFICATION_SOUND_ID;
92546
92719
  }
92547
92720
  init() {
92548
- if (typeof window === "undefined") return;
92549
- const unlock = () => {
92550
- this.unlock();
92551
- window.removeEventListener("pointerdown", unlock);
92552
- window.removeEventListener("keydown", unlock);
92553
- };
92554
- window.addEventListener("pointerdown", unlock, {
92555
- once: true,
92556
- passive: true
92557
- });
92558
- window.addEventListener("keydown", unlock, { once: true });
92721
+ prepareAudioContextAfterUserGesture();
92559
92722
  }
92560
92723
  async unlock() {
92561
92724
  if (this.unlocked) return;
@@ -92571,17 +92734,13 @@ var AudioCueEngine = class {
92571
92734
  await this.playAudio(sound, volume);
92572
92735
  }
92573
92736
  async unlockAudioContext() {
92574
- const AudioContextCtor = getAudioContextConstructor();
92575
- if (!AudioContextCtor) {
92737
+ if (!await createAudioContextAfterUserGesture()) {
92576
92738
  this.unlocked = true;
92577
92739
  return;
92578
92740
  }
92579
- const context = this.audioContext ?? new AudioContextCtor();
92580
- this.audioContext = context;
92581
92741
  this.silentAudio ??= new Audio("data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEAESsAACJWAAACABAAZGF0YQAAAAA=");
92582
92742
  this.silentAudio.volume = 0;
92583
92743
  await this.silentAudio.play().catch(() => {});
92584
- if (context.state === "suspended") await context.resume();
92585
92744
  this.unlocked = true;
92586
92745
  }
92587
92746
  async playAudio(sound, volume) {
@@ -93584,6 +93743,7 @@ var TerminalController = class {
93584
93743
  }
93585
93744
  this.flushPendingOutput(instance);
93586
93745
  this.applyGhosttyBackground(instance, container);
93746
+ instance.inputPanelAddon.attachListeners();
93587
93747
  }
93588
93748
  instance.mountedContainer = container;
93589
93749
  requestAnimationFrame(() => {
@@ -94478,11 +94638,11 @@ function MobileHeader() {
94478
94638
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
94479
94639
  type: "button",
94480
94640
  onClick: () => vtNavController.activatePop("/search"),
94481
- className: "hover:bg-muted border-primary rounded-md border p-1.5",
94641
+ className: "hover:bg-muted border-primary h-7.5 w-7.5 inline-flex items-center justify-center rounded-md border",
94482
94642
  "aria-label": "Open search",
94483
94643
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Search, { className: "h-4 w-4" })
94484
94644
  }),
94485
- !isStatic && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NotificationEntryButton, { className: "h-8 w-8" }),
94645
+ !isStatic && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NotificationEntryButton, { className: "border-primary hover:bg-muted h-7.5 w-7.5" }),
94486
94646
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(StatusIndicator, { compact: true })
94487
94647
  ]
94488
94648
  })]
@@ -126763,7 +126923,7 @@ var tabsStyleText = (id) => {
126763
126923
  border: 0;
126764
126924
  font-size: 1.2rem;
126765
126925
  background: none;
126766
- z-index: 2;
126926
+ z-index: 100;
126767
126927
  color: currentColor;
126768
126928
  }
126769
126929
 
@@ -149453,7 +149613,7 @@ function Select({ value, options = [], groups, onValueChange, ariaLabel, id, nam
149453
149613
  container: portalContainer ?? void 0,
149454
149614
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectPositioner, {
149455
149615
  sideOffset,
149456
- className: cn$1("z-50 select-none outline-none", positionerClassName),
149616
+ className: cn$1("z-50 select-none outline-none data-[anchor-hidden]:opacity-0", positionerClassName),
149457
149617
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectPopup, {
149458
149618
  className: cn$1("bg-card text-foreground border-border min-w-(--anchor-width) max-w-[min(24rem,calc(100vw-2rem))] rounded-md border p-1 shadow-lg", "origin-(--transform-origin) transition-[transform,opacity] duration-150", "data-[ending-style]:translate-y-0.5 data-[ending-style]:opacity-0", "data-[starting-style]:translate-y-0.5 data-[starting-style]:opacity-0", popupClassName),
149459
149619
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectList, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openspecui/web",
3
- "version": "3.5.0",
3
+ "version": "3.5.2",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "openspecui-ssg": "./dist-ssg/ssg-cli.mjs"
@@ -1 +0,0 @@
1
- import"./Geometry-C-MCm9EO.js";import{w as e}from"./index-BbZP3-SK.js";export{e as CanvasRenderer};
@@ -1 +0,0 @@
1
- import"./Geometry-C-MCm9EO.js";import{C as e}from"./index-BbZP3-SK.js";export{e as WebGLRenderer};
@@ -1 +0,0 @@
1
- import"./Geometry-C-MCm9EO.js";import{S as e}from"./index-BbZP3-SK.js";export{e as WebGPURenderer};
@@ -1 +0,0 @@
1
- import{it as e,x as t}from"./Geometry-C-MCm9EO.js";import{A as n,D as r,O as i,k as a}from"./index-BbZP3-SK.js";import"./init-nrsssPRF.js";e.add(n),e.mixin(t,a),e.add(i),e.mixin(t,r);
@@ -1 +0,0 @@
1
- import"./dist-UN0VvTJo.js";import{b as e}from"./index-BbZP3-SK.js";export{e as json};
@@ -1 +0,0 @@
1
- import"./dist-UN0VvTJo.js";import{g as e}from"./index-BbZP3-SK.js";export{e as css};
@@ -1 +0,0 @@
1
- import"./dist-UN0VvTJo.js";import{t as e}from"./index-BbZP3-SK.js";export{e as yaml};