@ai-ecoverse/slicc-spectrum 1.74.0 → 1.76.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/slicc-ui.js CHANGED
@@ -8837,6 +8837,10 @@ var shared = i`
8837
8837
  padding: 0 var(--swc-spacing-75);
8838
8838
  }
8839
8839
  `;
8840
+ function speech() {
8841
+ const scope = globalThis;
8842
+ return scope.SpeechRecognition ?? scope.webkitSpeechRecognition;
8843
+ }
8840
8844
 
8841
8845
  // node_modules/@adobe/spectrum-wc/dist/components/button/button.js
8842
8846
  var t42 = i`.swc-Button{--_swc-button-border-width: 2px;--_swc-button-min-block-size: var(--swc-button-min-block-size, var(--swc-component-height-100));gap:var(--swc-button-gap, 6px);max-inline-size:var(--swc-button-max-inline-size, inherit);min-block-size:var(--_swc-button-min-block-size);padding-block:calc(var(--swc-button-padding-vertical, 7px) - var(--_swc-button-border-width));padding-inline:calc(var(--swc-button-edge-to-text, var(--swc-base-padding-horizontal-medium)) - var(--_swc-button-border-width));font-family:var(--swc-sans-font-family-stack);font-size:var(--swc-button-font-size, var(--swc-font-size-100));font-weight:700;line-height:round(down,1.3em,1px);color:var(--swc-button-content-color-default, var(--swc-gray-25));background-color:var(--swc-button-background-color-default, var(--swc-gray-800));border-color:var(--swc-button-border-color-default, transparent);border-width:var(--_swc-button-border-width);border-radius:var(--swc-button-border-radius, calc(var(--_swc-button-min-block-size) / 2));transition-timing-function:cubic-bezier(.45,0,.4,1);transition-duration:.13s;transition-property:outline,border-color,color,background-color,transform}.swc-Button:hover{color:var(--swc-button-content-color-hover, var(--swc-gray-25));background-color:var(--swc-button-background-color-hover, var(--swc-gray-900));border-color:var(--swc-button-border-color-hover, transparent)}.swc-Button:focus-visible{color:var(--swc-button-content-color-focus, var(--swc-gray-25));background-color:var(--swc-button-background-color-focus, var(--swc-gray-900));border-color:var(--swc-button-border-color-focus, transparent)}.swc-Button:active{color:var(--swc-button-content-color-down, var(--swc-gray-25));background-color:var(--swc-button-background-color-down, var(--swc-gray-900));border-color:var(--swc-button-border-color-down, transparent);transform:var(--swc-button-down-state-transform, perspective(var(--_swc-button-min-block-size)) translate3d(0, 0, -2px));will-change:transform}.swc-Button-label{text-align:center}.swc-Button--hasIcon .swc-Button-label{text-align:start}slot[name=icon]::slotted(*),.swc-PendingSpinner{--_swc-button-icon-size: var(--swc-button-icon-size, var(--swc-workflow-icon-medium));--_swc-button-icon-block-size: var(--swc-button-icon-block-size, var(--_swc-button-icon-size));--_swc-pending-spinner-size: var(--_swc-button-icon-size);box-sizing:border-box;flex-shrink:0;align-self:flex-start;inline-size:var(--swc-button-icon-inline-size, var(--_swc-button-icon-size));block-size:var(--_swc-button-icon-block-size);margin-block:calc((var(--_swc-button-icon-block-size) - 1lh) / 2 * -1);margin-inline-start:calc(var(--swc-button-edge-to-visual, var(--swc-base-padding-horizontal-medium)) - var(--swc-button-edge-to-text, var(--swc-base-padding-horizontal-medium)))}slot[name=icon]::slotted(*){color:inherit;fill:currentcolor}:host([size=\"s\"]){--swc-button-min-block-size: var(--swc-component-height-75);--swc-button-font-size: var(--swc-font-size-75);--swc-button-gap: 4px;--swc-button-edge-to-text: var(--swc-base-padding-horizontal-small);--swc-button-edge-to-visual: var(--swc-base-padding-horizontal-small);--swc-button-edge-to-visual-only: 4px;--swc-button-padding-vertical: 4px;--swc-button-icon-size: var(--swc-workflow-icon-small)}:host([size=\"l\"]){--swc-button-min-block-size: var(--swc-component-height-200);--swc-button-font-size: var(--swc-font-size-200);--swc-button-gap: 6px;--swc-button-edge-to-text: var(--swc-base-padding-horizontal-large);--swc-button-edge-to-visual: var(--swc-base-padding-horizontal-large);--swc-button-edge-to-visual-only: 7px;--swc-button-padding-vertical: 10px;--swc-button-icon-size: var(--swc-workflow-icon-large)}:host([size=\"xl\"]){--swc-button-min-block-size: var(--swc-component-height-300);--swc-button-font-size: var(--swc-font-size-300);--swc-button-gap: 6px;--swc-button-edge-to-text: var(--swc-base-padding-horizontal-extra-large);--swc-button-edge-to-visual: var(--swc-base-padding-horizontal-extra-large);--swc-button-edge-to-visual-only: 9px;--swc-button-padding-vertical: 13px;--swc-button-icon-size: var(--swc-workflow-icon-extra-large)}:host([variant=\"accent\"]){--swc-button-content-color-default: rgb(255, 255, 255);--swc-button-content-color-hover: rgb(255, 255, 255);--swc-button-content-color-down: rgb(255, 255, 255);--swc-button-content-color-focus: rgb(255, 255, 255);--swc-button-background-color-default: var(--swc-accent-background-color-default);--swc-button-background-color-hover: var(--swc-accent-background-color-hover);--swc-button-background-color-down: var(--swc-accent-background-color-down);--swc-button-background-color-focus: var(--swc-accent-background-color-key-focus)}:host([variant=\"negative\"]){--swc-button-content-color-default: rgb(255, 255, 255);--swc-button-content-color-hover: rgb(255, 255, 255);--swc-button-content-color-down: rgb(255, 255, 255);--swc-button-content-color-focus: rgb(255, 255, 255);--swc-button-background-color-default: var(--swc-negative-background-color-default);--swc-button-background-color-hover: var(--swc-negative-background-color-hover);--swc-button-background-color-down: var(--swc-negative-background-color-down);--swc-button-background-color-focus: var(--swc-negative-background-color-key-focus)}:host([variant=\"secondary\"]){--swc-button-content-color-default: var(--swc-gray-800);--swc-button-content-color-hover: var(--swc-gray-900);--swc-button-content-color-down: var(--swc-gray-900);--swc-button-content-color-focus: var(--swc-gray-900);--swc-button-background-color-default: var(--swc-gray-100);--swc-button-background-color-hover: var(--swc-gray-200);--swc-button-background-color-down: var(--swc-gray-200);--swc-button-background-color-focus: var(--swc-gray-200)}:host([variant=\"primary\"][fill-style=\"outline\"]){--swc-button-background-color-default: transparent;--swc-button-background-color-hover: var(--swc-gray-100);--swc-button-background-color-down: var(--swc-gray-100);--swc-button-background-color-focus: var(--swc-gray-100);--swc-button-border-color-default: var(--swc-gray-800);--swc-button-border-color-hover: var(--swc-gray-900);--swc-button-border-color-down: var(--swc-gray-900);--swc-button-border-color-focus: var(--swc-gray-900);--swc-button-content-color-default: var(--swc-gray-800);--swc-button-content-color-hover: var(--swc-gray-900);--swc-button-content-color-down: var(--swc-gray-900);--swc-button-content-color-focus: var(--swc-gray-900);--swc-button-background-color-disabled: transparent;--swc-button-border-color-disabled: var(--swc-gray-300)}:host([variant=\"secondary\"][fill-style=\"outline\"]){--swc-button-background-color-default: transparent;--swc-button-background-color-hover: var(--swc-gray-100);--swc-button-background-color-down: var(--swc-gray-100);--swc-button-background-color-focus: var(--swc-gray-100);--swc-button-border-color-default: var(--swc-gray-300);--swc-button-border-color-hover: var(--swc-gray-400);--swc-button-border-color-down: var(--swc-gray-400);--swc-button-border-color-focus: var(--swc-gray-400);--swc-button-background-color-disabled: transparent;--swc-button-border-color-disabled: var(--swc-gray-300)}:host([static-color=\"white\"]){--swc-button-focus-indicator-color: var(--swc-white);--swc-button-background-color-default: rgba(255, 255, 255, .85);--swc-button-background-color-hover: rgba(255, 255, 255, .94);--swc-button-background-color-down: rgba(255, 255, 255, .94);--swc-button-background-color-focus: rgba(255, 255, 255, .94);--swc-button-content-color-default: rgb(0, 0, 0);--swc-button-content-color-hover: rgb(0, 0, 0);--swc-button-content-color-down: rgb(0, 0, 0);--swc-button-content-color-focus: rgb(0, 0, 0);--swc-button-background-color-disabled: var(--swc-transparent-white-100);--swc-button-border-color-disabled: transparent;--swc-button-content-color-disabled: var(--swc-transparent-white-400)}:host([static-color=\"white\"][variant=\"secondary\"]){--swc-button-background-color-default: rgba(255, 255, 255, .11);--swc-button-background-color-hover: rgba(255, 255, 255, .14);--swc-button-background-color-down: rgba(255, 255, 255, .14);--swc-button-background-color-focus: rgba(255, 255, 255, .14);--swc-button-content-color-default: rgba(255, 255, 255, .85);--swc-button-content-color-hover: rgba(255, 255, 255, .94);--swc-button-content-color-down: rgba(255, 255, 255, .94);--swc-button-content-color-focus: rgba(255, 255, 255, .94)}:host([static-color=\"white\"][fill-style=\"outline\"]){--swc-button-background-color-default: rgba(255, 255, 255, 0);--swc-button-background-color-hover: rgba(255, 255, 255, .11);--swc-button-background-color-down: rgba(255, 255, 255, .11);--swc-button-background-color-focus: rgba(255, 255, 255, .11);--swc-button-border-color-default: rgba(255, 255, 255, .85);--swc-button-border-color-hover: rgba(255, 255, 255, .94);--swc-button-border-color-down: rgba(255, 255, 255, .94);--swc-button-border-color-focus: rgba(255, 255, 255, .94);--swc-button-content-color-default: rgba(255, 255, 255, .85);--swc-button-content-color-hover: rgba(255, 255, 255, .94);--swc-button-content-color-down: rgba(255, 255, 255, .94);--swc-button-content-color-focus: rgba(255, 255, 255, .94);--swc-button-background-color-disabled: rgba(255, 255, 255, 0);--swc-button-border-color-disabled: var(--swc-transparent-white-300);--swc-button-content-color-disabled: var(--swc-transparent-white-400)}:host([static-color=\"white\"][variant=\"secondary\"][fill-style=\"outline\"]){--swc-button-background-color-default: rgba(255, 255, 255, 0);--swc-button-background-color-hover: rgba(255, 255, 255, .11);--swc-button-background-color-down: rgba(255, 255, 255, .11);--swc-button-background-color-focus: rgba(255, 255, 255, .11);--swc-button-border-color-default: rgba(255, 255, 255, .17);--swc-button-border-color-hover: rgba(255, 255, 255, .21);--swc-button-border-color-down: rgba(255, 255, 255, .21);--swc-button-border-color-focus: rgba(255, 255, 255, .21)}:host([static-color=\"black\"]){--swc-button-focus-indicator-color: var(--swc-black);--swc-button-background-color-default: rgba(0, 0, 0, .84);--swc-button-background-color-hover: rgba(0, 0, 0, .93);--swc-button-background-color-down: rgba(0, 0, 0, .93);--swc-button-background-color-focus: rgba(0, 0, 0, .93);--swc-button-content-color-default: rgb(255, 255, 255);--swc-button-content-color-hover: rgb(255, 255, 255);--swc-button-content-color-down: rgb(255, 255, 255);--swc-button-content-color-focus: rgb(255, 255, 255);--swc-button-background-color-disabled: var(--swc-transparent-black-100);--swc-button-border-color-disabled: transparent;--swc-button-content-color-disabled: var(--swc-transparent-black-400)}:host([static-color=\"black\"][variant=\"secondary\"]){--swc-button-background-color-default: rgba(0, 0, 0, .09);--swc-button-background-color-hover: rgba(0, 0, 0, .12);--swc-button-background-color-down: rgba(0, 0, 0, .12);--swc-button-background-color-focus: rgba(0, 0, 0, .12);--swc-button-content-color-default: rgba(0, 0, 0, .84);--swc-button-content-color-hover: rgba(0, 0, 0, .93);--swc-button-content-color-down: rgba(0, 0, 0, .93);--swc-button-content-color-focus: rgba(0, 0, 0, .93)}:host([static-color=\"black\"][fill-style=\"outline\"]){--swc-button-background-color-default: rgba(0, 0, 0, 0);--swc-button-background-color-hover: rgba(0, 0, 0, .09);--swc-button-background-color-down: rgba(0, 0, 0, .09);--swc-button-background-color-focus: rgba(0, 0, 0, .09);--swc-button-border-color-default: rgba(0, 0, 0, .84);--swc-button-border-color-hover: rgba(0, 0, 0, .93);--swc-button-border-color-down: rgba(0, 0, 0, .93);--swc-button-border-color-focus: rgba(0, 0, 0, .93);--swc-button-content-color-default: rgba(0, 0, 0, .84);--swc-button-content-color-hover: rgba(0, 0, 0, .93);--swc-button-content-color-down: rgba(0, 0, 0, .93);--swc-button-content-color-focus: rgba(0, 0, 0, .93);--swc-button-background-color-disabled: rgba(0, 0, 0, 0);--swc-button-border-color-disabled: var(--swc-transparent-black-300);--swc-button-content-color-disabled: var(--swc-transparent-black-400)}:host([static-color=\"black\"][variant=\"secondary\"][fill-style=\"outline\"]){--swc-button-background-color-default: rgba(0, 0, 0, 0);--swc-button-background-color-hover: rgba(0, 0, 0, .09);--swc-button-background-color-down: rgba(0, 0, 0, .09);--swc-button-background-color-focus: rgba(0, 0, 0, .09);--swc-button-border-color-default: rgba(0, 0, 0, .15);--swc-button-border-color-hover: rgba(0, 0, 0, .22);--swc-button-border-color-down: rgba(0, 0, 0, .22);--swc-button-border-color-focus: rgba(0, 0, 0, .22)}.swc-Button--iconOnly{--swc-button-border-radius: 50%;--swc-button-gap: 0;inline-size:var(--_swc-button-min-block-size);padding-inline:calc(var(--swc-button-edge-to-visual-only, 5px) - var(--_swc-button-border-width))}.swc-Button--iconOnly slot[name=icon]::slotted(*){--swc-button-edge-to-visual: 0;align-self:center}:host([pending]) .swc-Button{cursor:default}.swc-Button--pendingActive{--swc-button-down-state-transform: none;justify-content:center;inline-size:var(--swc-pending-inline-size);transition:none;--swc-button-background-color-default: var(--swc-button-background-color-disabled, var(--swc-gray-100));--swc-button-background-color-hover: var(--swc-button-background-color-disabled, var(--swc-gray-100));--swc-button-background-color-down: var(--swc-button-background-color-disabled, var(--swc-gray-100));--swc-button-background-color-focus: var(--swc-button-background-color-disabled, var(--swc-gray-100));--swc-button-border-color-default: var(--swc-button-border-color-disabled, transparent);--swc-button-border-color-hover: var(--swc-button-border-color-disabled, transparent);--swc-button-border-color-down: var(--swc-button-border-color-disabled, transparent);--swc-button-border-color-focus: var(--swc-button-border-color-disabled, transparent);--swc-button-content-color-default: var(--swc-button-content-color-disabled, var(--swc-gray-400));--swc-button-content-color-hover: var(--swc-button-content-color-disabled, var(--swc-gray-400));--swc-button-content-color-down: var(--swc-button-content-color-disabled, var(--swc-gray-400));--swc-button-content-color-focus: var(--swc-button-content-color-disabled, var(--swc-gray-400))}.swc-Button--pendingActive .swc-Button-label,.swc-Button--pendingActive slot[name=icon]::slotted(*){display:none}:host([truncate]) .swc-Button-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host([justified]){flex-grow:1;justify-self:stretch;inline-size:100%}:host([justified]) .swc-Button{inline-size:100%}@media(prefers-reduced-motion:reduce){.swc-Button{transition-duration:0ms}}@media(forced-colors:active){.swc-Button--pendingActive{--swc-button-background-color-default: ButtonFace;--swc-button-background-color-hover: ButtonFace;--swc-button-background-color-down: ButtonFace;--swc-button-background-color-focus: ButtonFace;--swc-button-border-color-default: GrayText;--swc-button-border-color-hover: GrayText;--swc-button-border-color-down: GrayText;--swc-button-border-color-focus: GrayText;--swc-button-content-color-default: GrayText;--swc-button-content-color-hover: GrayText;--swc-button-content-color-down: GrayText;--swc-button-content-color-focus: GrayText}}`;
@@ -9777,10 +9781,18 @@ function following(model) {
9777
9781
  return state2 && !followPage(state2) ? state2 : null;
9778
9782
  }
9779
9783
  function watchOnly(model) {
9784
+ const text2 = model?.agent?.readOnly?.();
9785
+ if (text2) return text2;
9780
9786
  const state2 = following(model);
9781
9787
  if (!state2 || state2.access.control) return "";
9782
9788
  return `Watch only. To send prompts from this device, allow Control for it on ${state2.owner}.`;
9783
9789
  }
9790
+ function onWatch(model, listener) {
9791
+ return [
9792
+ ...model.agent.readOnly ? [model.agent.on("readOnly", listener)] : [],
9793
+ ...model.follow ? [model.follow.on("follow", listener)] : []
9794
+ ];
9795
+ }
9784
9796
  function terminalsAllowed(model) {
9785
9797
  const state2 = model?.follow?.state();
9786
9798
  return !state2 || !!state2.access.terminal;
@@ -10745,7 +10757,7 @@ var SliccFreezer = class extends ModelElement {
10745
10757
  model.agent.on("frozen", update),
10746
10758
  model.agent.on("active", update),
10747
10759
  model.agent.on("agents", update),
10748
- ...model.follow ? [model.follow.on("follow", update)] : []
10760
+ ...onWatch(model, update)
10749
10761
  ];
10750
10762
  }
10751
10763
  focus() {
@@ -11633,7 +11645,7 @@ var SliccAgents = class extends ModelElement {
11633
11645
  this.requestUpdate();
11634
11646
  }),
11635
11647
  watchTitles(model, () => this.requestUpdate()),
11636
- ...model.follow ? [model.follow.on("follow", () => this.requestUpdate())] : [],
11648
+ ...onWatch(model, () => this.requestUpdate()),
11637
11649
  this.#watchPointer()
11638
11650
  ];
11639
11651
  }
@@ -12035,6 +12047,7 @@ function fallbackModel(options) {
12035
12047
  return offered.find((option2) => option2.default) ?? offered[0];
12036
12048
  }
12037
12049
  function controls(model) {
12050
+ if (model.agent.readOnly?.()) return false;
12038
12051
  const state2 = model.follow?.state();
12039
12052
  return !state2 || !!state2.access.control && state2.link === "connected";
12040
12053
  }
@@ -30999,7 +31012,7 @@ function user(message, stamp = true) {
30999
31012
  ${byline(message, who2, stamp)}${stamp ? A : unseen(message.createdAt)}
31000
31013
  ${message.text ? b`<swc-user-message class="body"><span class="text">${message.text}</span></swc-user-message>` : A}
31001
31014
  ${message.attachments?.length ? b`<div class="attachments">${message.attachments.map(attachment)}</div>` : A}
31002
- ${remote ? b`<span class="reaction" aria-hidden="true">🤖</span>` : A}
31015
+ ${remote ? b`<span class="reactions"><span class="reaction" aria-hidden="true">🤖</span></span>` : A}
31003
31016
  </div>
31004
31017
  </swc-conversation-turn>`;
31005
31018
  }
@@ -31097,6 +31110,9 @@ var compactionTitles = {
31097
31110
  function event(label, content) {
31098
31111
  return b`<swc-conversation-turn type="system" class="event" accessible-label=${label}>${content}</swc-conversation-turn>`;
31099
31112
  }
31113
+ function outside(label, byline2, content) {
31114
+ return b`<swc-conversation-turn type="user" class="event lick-turn" accessible-label=${label}><div class="bubble">${byline2}${content}</div></swc-conversation-turn>`;
31115
+ }
31100
31116
  function system(message, handlers) {
31101
31117
  if (message.kind === "compaction") {
31102
31118
  const failed2 = message.state === "fallback" || message.state === "discarded";
@@ -31145,37 +31161,57 @@ var severities = {
31145
31161
  icon: b`<swc-icon-alert-triangle slot="icon" size="s" aria-hidden="true"></swc-icon-alert-triangle>`
31146
31162
  }
31147
31163
  };
31148
- function severityBadge(message, label) {
31149
- if (!message.severity) return null;
31150
- const { prefix, variant, icon } = severities[message.severity];
31151
- return b`<span class="sr">${prefix}</span><swc-badge class="severity" size="s" variant=${variant} subtle>${icon}${label}</swc-badge>`;
31152
- }
31164
+ var lickIcons = {
31165
+ webhook: "\u{1FA9D}",
31166
+ cron: "\u23F0",
31167
+ sprinkle: "\u2728",
31168
+ fswatch: "\u{1F440}",
31169
+ "session-reload": "\u{1F504}",
31170
+ navigate: "\u{1F9ED}",
31171
+ discovery: "\u{1F50E}",
31172
+ upgrade: "\u2B06\uFE0F",
31173
+ workflow: "\u{1F4CB}",
31174
+ bash: "\u{1F4BB}",
31175
+ jshd: "\u{1F4DC}",
31176
+ preview: "\u{1F441}\uFE0F",
31177
+ cherry: "\u{1F352}",
31178
+ "scoop-notify": "\u2705",
31179
+ "scoop-idle": "\u{1F4A4}",
31180
+ "scoop-wait": "\u23F3",
31181
+ "sudo-request": "\u{1F510}"
31182
+ };
31153
31183
  function lick(message, handlers, stamp = true) {
31154
- const [label, variant] = lickLabels[message.channel];
31184
+ const [label] = lickLabels[message.channel];
31155
31185
  const decide = message.channel === "sudo-request" && message.state === "pending";
31156
31186
  const outcome = message.state === "confirmed" ? "Allowed" : message.state === "dismissed" ? "Denied" : "";
31157
- const head2 = b`${severityBadge(message, label) ?? b`<swc-badge class="channel" size="s" variant=${variant} subtle>${label}</swc-badge>`}
31158
- <strong>${message.title}</strong>
31187
+ const head2 = b`${message.severity ? b`<span class="sr">${severities[message.severity].prefix}</span>` : A}
31188
+ ${outcome ? b`<span class="sr">${outcome}. </span>` : A}
31159
31189
  <span class="text">${message.text}</span>
31160
- ${message.count && message.count > 1 ? b`<span class="times" title="Coalesced events">×${message.count}</span>` : A}
31161
- ${outcome ? b`<swc-badge class="tag" size="s" variant=${message.state === "confirmed" ? "positive" : "neutral"} subtle>${outcome}</swc-badge>` : A}
31162
- <span class=${stamp ? "when" : "sr"}>${time(message.createdAt)}</span>`;
31190
+ ${message.count && message.count > 1 ? b`<span class="times" title="Coalesced events">×${message.count}</span>` : A}`;
31191
+ const outcomeIcon = message.state === "confirmed" ? "\u{1F44D}" : message.state === "dismissed" ? "\u{1F44E}" : "";
31192
+ const reaction = b`<span class="reactions"><span class="reaction" title=${label} aria-hidden="true">${lickIcons[message.channel]}</span>${outcomeIcon ? b`<span class="reaction" title=${outcome} aria-hidden="true">${outcomeIcon}</span>` : A}</span>`;
31163
31193
  const actions2 = decide ? b`<div class="decide">
31164
31194
  <swc-button size="s" variant="accent" data-action="allow" ?disabled=${handlers.readOnly} @click=${() => handlers.resolve(message.id, "confirmed")}>Allow</swc-button>
31165
31195
  <swc-button size="s" variant="secondary" fill-style="outline" data-action="deny" ?disabled=${handlers.readOnly} @click=${() => handlers.resolve(message.id, "dismissed")}>Deny</swc-button>
31166
31196
  </div>` : A;
31167
31197
  const name = `${message.severity ? severities[message.severity].prefix : ""}${label} event`;
31198
+ const byline2 = b`<div class="meta">${message.severity ? b`<span class="severity-icon">${severities[message.severity].icon}</span>` : A}<span class="who">${message.title}</span>${stamp ? when(message.createdAt) : unseen(message.createdAt)}</div>`;
31168
31199
  if (!message.body) {
31169
- return event(
31200
+ return outside(
31170
31201
  name,
31171
- b`<div class="lick" data-id=${message.id} data-channel=${message.channel} data-severity=${message.severity ?? A}><div class="lick-head">${head2}</div>${actions2}</div>`
31202
+ byline2,
31203
+ b`<div class="lick-frame"><div class="lick" data-id=${message.id} data-channel=${message.channel} data-severity=${message.severity ?? A}><div class="lick-head">${head2}</div>${actions2}</div>${reaction}</div>`
31172
31204
  );
31173
31205
  }
31174
31206
  const details = b`<details class="lick" data-id=${message.id} data-channel=${message.channel} data-severity=${message.severity ?? A}>
31175
- <summary class="lick-head"><span class="chevron" aria-hidden="true">▸</span>${head2}</summary>
31207
+ <summary class="lick-head">${head2}<swc-icon-chevron-right class="chevron" size="s" aria-hidden="true"></swc-icon-chevron-right></summary>
31176
31208
  <pre class="output">${message.body}</pre>
31177
31209
  </details>`;
31178
- return event(name, decide ? b`<div class="pending">${details}${actions2}</div>` : details);
31210
+ return outside(
31211
+ name,
31212
+ byline2,
31213
+ b`<div class="lick-frame">${decide ? b`<div class="pending">${details}${actions2}</div>` : details}${reaction}</div>`
31214
+ );
31179
31215
  }
31180
31216
  var messageCss = i`
31181
31217
  swc-conversation-thread > .message,
@@ -31245,10 +31281,14 @@ var messageCss = i`
31245
31281
  position: relative;
31246
31282
  margin-block-end: var(--swc-spacing-300);
31247
31283
  }
31248
- .reaction {
31284
+ .reactions {
31249
31285
  position: absolute;
31250
31286
  inset-block-end: calc(var(--swc-spacing-300) * -1);
31251
31287
  inset-inline-end: var(--swc-spacing-200);
31288
+ display: inline-flex;
31289
+ gap: var(--swc-spacing-50);
31290
+ }
31291
+ .reaction {
31252
31292
  display: inline-flex;
31253
31293
  align-items: center;
31254
31294
  justify-content: center;
@@ -31395,9 +31435,9 @@ var messageCss = i`
31395
31435
  }
31396
31436
  .lick {
31397
31437
  border: var(--swc-border-width-100) solid var(--swc-gray-200);
31398
- border-radius: var(--swc-corner-radius-100);
31438
+ border-radius: var(--swc-corner-radius-700);
31399
31439
  background: var(--swc-background-layer-1-color);
31400
- font-size: var(--swc-font-size-100);
31440
+ font-size: var(--swc-font-size-200);
31401
31441
  }
31402
31442
  summary,
31403
31443
  .lick-head {
@@ -31928,15 +31968,25 @@ var messageCss = i`
31928
31968
  color: var(--swc-neutral-subdued-content-color-default);
31929
31969
  text-align: center;
31930
31970
  }
31971
+ .lick-frame {
31972
+ position: relative;
31973
+ min-inline-size: 0;
31974
+ max-inline-size: 100%;
31975
+ margin-block-end: var(--swc-spacing-300);
31976
+ }
31931
31977
  .lick {
31932
31978
  border-style: dashed;
31933
31979
  }
31934
- .channel,
31935
- .lick .severity {
31936
- flex: none;
31980
+ .severity-icon {
31981
+ display: inline-flex;
31982
+ align-self: center;
31983
+ color: var(--severity);
31937
31984
  }
31938
- .lick strong {
31939
- white-space: nowrap;
31985
+ .lick-turn:has(.lick[data-severity='error']) {
31986
+ --severity: var(--swc-negative-visual-color);
31987
+ }
31988
+ .lick-turn:has(.lick[data-severity='warn']) {
31989
+ --severity: var(--swc-notice-visual-color);
31940
31990
  }
31941
31991
  .lick[data-severity] {
31942
31992
  border-inline-start: var(--swc-border-width-400) solid var(--severity);
@@ -31955,8 +32005,7 @@ var messageCss = i`
31955
32005
  clip-path: inset(50%);
31956
32006
  white-space: nowrap;
31957
32007
  }
31958
- .lick .times,
31959
- .lick .when {
32008
+ .lick .times {
31960
32009
  color: var(--swc-neutral-subdued-content-color-default);
31961
32010
  white-space: nowrap;
31962
32011
  }
@@ -31967,7 +32016,7 @@ var messageCss = i`
31967
32016
  }
31968
32017
  .pending {
31969
32018
  border: var(--swc-border-width-100) solid var(--swc-notice-visual-color);
31970
- border-radius: var(--swc-corner-radius-100);
32019
+ border-radius: var(--swc-corner-radius-700);
31971
32020
  }
31972
32021
  .pending > details.lick {
31973
32022
  border: 0;
@@ -32946,6 +32995,12 @@ var SliccApp = class extends ThemedElement {
32946
32995
  ...model.updates ? [model.updates.on("items", update)] : [],
32947
32996
  ...model.network ? [model.network.on("network", update)] : [],
32948
32997
  ...model.tabs ? [model.tabs.on("tabs", update)] : [],
32998
+ ...model.agent.readOnly ? [
32999
+ model.agent.on("readOnly", () => {
33000
+ settle2();
33001
+ update();
33002
+ })
33003
+ ] : [],
32949
33004
  ...model.follow ? [
32950
33005
  model.follow.on("follow", () => {
32951
33006
  settle2();
@@ -34916,7 +34971,7 @@ var SliccBrowser = class extends ModelElement {
34916
34971
  this.requestUpdate();
34917
34972
  }),
34918
34973
  ...model.network ? [model.network.on("network", () => this.requestUpdate())] : [],
34919
- ...model.follow ? [model.follow.on("follow", () => this.requestUpdate())] : [],
34974
+ ...onWatch(model, () => this.requestUpdate()),
34920
34975
  () => clearInterval(timer),
34921
34976
  () => resize.disconnect(),
34922
34977
  () => document.removeEventListener("visibilitychange", visibility),
@@ -35585,7 +35640,10 @@ var SliccChanges = class extends ModelElement {
35585
35640
  `
35586
35641
  ];
35587
35642
  subscribe(model) {
35588
- return [changesOf(model).on("changes", () => this.requestUpdate())];
35643
+ return [
35644
+ changesOf(model).on("changes", () => this.requestUpdate()),
35645
+ ...onWatch(model, () => this.requestUpdate())
35646
+ ];
35589
35647
  }
35590
35648
  focus() {
35591
35649
  this.focusOn("li[data-path]");
@@ -35600,7 +35658,8 @@ var SliccChanges = class extends ModelElement {
35600
35658
  async #revert(event2, change) {
35601
35659
  event2.stopPropagation();
35602
35660
  this.error = "";
35603
- if (await confirmRevert(change)) this.error = await revertPaths(this.#port(), [change.path]);
35661
+ if (await confirmRevert(change) && !watchOnly(this.model))
35662
+ this.error = await revertPaths(this.#port(), [change.path]);
35604
35663
  }
35605
35664
  async #all(action) {
35606
35665
  const port = this.#port();
@@ -35612,7 +35671,7 @@ var SliccChanges = class extends ModelElement {
35612
35671
  }
35613
35672
  const count = changes2.length;
35614
35673
  const title = `Revert ${count} ${count === 1 ? "change" : "changes"}?`;
35615
- if (await confirm({ title, body: lost(changes2), action: "Revert all" }))
35674
+ if (await confirm({ title, body: lost(changes2), action: "Revert all" }) && !watchOnly(this.model))
35616
35675
  this.error = await revertPaths(
35617
35676
  port,
35618
35677
  changes2.map((change) => change.path)
@@ -35648,7 +35707,7 @@ var SliccChanges = class extends ModelElement {
35648
35707
  ${statusMark(change.status)}
35649
35708
  <span class="name">${basename(change.path)}</span>
35650
35709
  <span class="where"><bdi>${[at, by].filter(Boolean).join(" \xB7 ")}</bdi></span>
35651
- <span class="actions">
35710
+ ${watchOnly(this.model) ? A : b`<span class="actions">
35652
35711
  <swc-action-button
35653
35712
  size="xs"
35654
35713
  quiet
@@ -35667,7 +35726,7 @@ var SliccChanges = class extends ModelElement {
35667
35726
  >
35668
35727
  <swc-icon-revert slot="icon"></swc-icon-revert>
35669
35728
  </swc-action-button>
35670
- </span>
35729
+ </span>`}
35671
35730
  </li>`;
35672
35731
  }
35673
35732
  #list(changes2) {
@@ -35719,8 +35778,8 @@ var SliccChanges = class extends ModelElement {
35719
35778
  return b`<div class="bar">
35720
35779
  <span class="summary">${changes2.length} pending ${changes2.length === 1 ? "change" : "changes"}</span>
35721
35780
  <span class="spacer"></span>
35722
- ${changes2.length ? b`<swc-action-button size="s" quiet @click=${() => this.#all("accept")}>Accept all</swc-action-button>
35723
- <swc-action-button size="s" quiet @click=${() => this.#all("revert")}>Revert all</swc-action-button>` : A}
35781
+ ${changes2.length && !watchOnly(this.model) ? b`<swc-action-button size="s" quiet data-action="accept-all" @click=${() => this.#all("accept")}>Accept all</swc-action-button>
35782
+ <swc-action-button size="s" quiet data-action="revert-all" @click=${() => this.#all("revert")}>Revert all</swc-action-button>` : A}
35724
35783
  </div>
35725
35784
  ${errorLine(this.error)}
35726
35785
  ${changes2.length ? this.#list(changes2) : b`<div class="note">No pending changes. Edits by agents show up here for review.</div>`}`;
@@ -35775,11 +35834,16 @@ var SliccDiffPanel = class extends ThemedElement {
35775
35834
  `
35776
35835
  ];
35777
35836
  subscribe(model) {
35778
- return [...super.subscribe(model), changesOf(model).on("changes", () => this.requestUpdate())];
35837
+ return [
35838
+ ...super.subscribe(model),
35839
+ changesOf(model).on("changes", () => this.requestUpdate()),
35840
+ ...onWatch(model, () => this.requestUpdate())
35841
+ ];
35779
35842
  }
35780
35843
  async #revert(port, change) {
35781
35844
  this.error = "";
35782
- if (await confirmRevert(change)) this.error = await revertPaths(port, [this.path]);
35845
+ if (await confirmRevert(change) && !watchOnly(this.model))
35846
+ this.error = await revertPaths(port, [this.path]);
35783
35847
  }
35784
35848
  #body(change, style) {
35785
35849
  if (change.before === null && change.after === null) {
@@ -35828,12 +35892,12 @@ var SliccDiffPanel = class extends ThemedElement {
35828
35892
  >`
35829
35893
  )}
35830
35894
  </swc-action-group>`}
35831
- <swc-action-button size="s" quiet data-action="accept" accessible-label="Accept" title="Accept" @click=${() => port?.accept(this.path)}>
35895
+ ${watchOnly(model) ? A : b`<swc-action-button size="s" quiet data-action="accept" accessible-label="Accept" title="Accept" @click=${() => port?.accept(this.path)}>
35832
35896
  <swc-icon-checkmark slot="icon"></swc-icon-checkmark><span class="label">Accept</span>
35833
35897
  </swc-action-button>
35834
35898
  <swc-action-button size="s" quiet data-action="revert" accessible-label="Revert" title="Revert" @click=${() => this.#revert(port, change)}>
35835
35899
  <swc-icon-revert slot="icon"></swc-icon-revert><span class="label">Revert</span>
35836
- </swc-action-button>
35900
+ </swc-action-button>`}
35837
35901
  </div>
35838
35902
  ${errorLine(this.error)}
35839
35903
  ${this.#body(change, style)}`;
@@ -36348,7 +36412,7 @@ var SliccChat = class extends ThemedElement {
36348
36412
  }),
36349
36413
  model.agent.on("agents", settle2),
36350
36414
  ...model.tabs ? [model.tabs.on("tabs", () => this.requestUpdate())] : [],
36351
- ...model.follow ? [model.follow.on("follow", settle2)] : [],
36415
+ ...onWatch(model, settle2),
36352
36416
  model.agent.on("messages", (agentId) => {
36353
36417
  if (agentId === this.#id()) this.#refresh(this.#sent(agentId));
36354
36418
  }),
@@ -37925,6 +37989,10 @@ var SliccComposer = class extends ThemedElement {
37925
37989
  #abandon;
37926
37990
  #recognition = null;
37927
37991
  #erase;
37992
+ #release = (event2) => {
37993
+ const released = event2 instanceof KeyboardEvent && (event2.code === "KeyM" || event2.key === "Alt");
37994
+ if (this.dictating && (released || event2.type === "blur")) this.dictate();
37995
+ };
37928
37996
  #keys = { capture: true, handleEvent: (event2) => this.#keydown(event2) };
37929
37997
  constructor() {
37930
37998
  super();
@@ -38086,27 +38154,6 @@ var SliccComposer = class extends ThemedElement {
38086
38154
  .failed {
38087
38155
  color: var(--swc-negative-content-color-default);
38088
38156
  }
38089
- .below {
38090
- display: flex;
38091
- align-items: center;
38092
- gap: var(--swc-spacing-100);
38093
- max-width: 860px;
38094
- margin: var(--swc-spacing-75) auto 0;
38095
- min-height: var(--swc-component-height-75);
38096
- }
38097
- .below swc-action-button {
38098
- margin-inline-start: auto;
38099
- }
38100
- swc-action-button.selected {
38101
- --swc-action-button-background-color-default: var(--swc-neutral-background-color-selected-default);
38102
- --swc-action-button-background-color-hover: var(--swc-neutral-background-color-selected-hover);
38103
- --swc-action-button-background-color-down: var(--swc-neutral-background-color-selected-down);
38104
- --swc-action-button-background-color-focus: var(--swc-neutral-background-color-selected-key-focus);
38105
- --swc-action-button-content-color-default: var(--swc-gray-25);
38106
- --swc-action-button-content-color-hover: var(--swc-gray-25);
38107
- --swc-action-button-content-color-down: var(--swc-gray-25);
38108
- --swc-action-button-content-color-focus: var(--swc-gray-25);
38109
- }
38110
38157
  .popup {
38111
38158
  position: absolute;
38112
38159
  left: 0;
@@ -38212,6 +38259,8 @@ var SliccComposer = class extends ThemedElement {
38212
38259
  connectedCallback() {
38213
38260
  super.connectedCallback();
38214
38261
  clearTimeout(this.#abandon);
38262
+ globalThis.addEventListener("keyup", this.#release);
38263
+ globalThis.addEventListener("blur", this.#release);
38215
38264
  if (this.hasUpdated) this.#wire();
38216
38265
  }
38217
38266
  firstUpdated() {
@@ -38219,6 +38268,8 @@ var SliccComposer = class extends ThemedElement {
38219
38268
  }
38220
38269
  disconnectedCallback() {
38221
38270
  super.disconnectedCallback();
38271
+ globalThis.removeEventListener("keyup", this.#release);
38272
+ globalThis.removeEventListener("blur", this.#release);
38222
38273
  clearValues(this.renderRoot);
38223
38274
  const held = [
38224
38275
  this.attachments,
@@ -38564,10 +38615,21 @@ var SliccComposer = class extends ThemedElement {
38564
38615
  return this.#recall(-1);
38565
38616
  return false;
38566
38617
  }
38618
+ #talking() {
38619
+ return !!this.model?.settings.get().pushToTalk && !!speech();
38620
+ }
38621
+ #shortcut(event2) {
38622
+ if (event2.key === "Backspace" || event2.key === "Delete") this.#flash();
38623
+ const chord = event2.altKey && !event2.ctrlKey && !event2.metaKey && !event2.shiftKey;
38624
+ if (!chord || event2.code !== "KeyM" || !this.#talking()) return false;
38625
+ event2.preventDefault();
38626
+ if (!event2.repeat) this.dictate();
38627
+ return true;
38628
+ }
38567
38629
  #keydown(event2) {
38568
38630
  const area = this.#textarea;
38569
38631
  if (event2.isComposing || !area || event2.composedPath()[0] !== area) return;
38570
- if (event2.key === "Backspace" || event2.key === "Delete") this.#flash();
38632
+ if (this.#shortcut(event2)) return;
38571
38633
  const sendOnEnter = this.model?.settings.get().sendOnEnter ?? true;
38572
38634
  let handled = this.#popupKey(event2) || this.#historyKey(event2, area);
38573
38635
  if (!handled && event2.key === "Tab" && !event2.shiftKey && !this.value) {
@@ -38607,7 +38669,8 @@ var SliccComposer = class extends ThemedElement {
38607
38669
  keys.push(
38608
38670
  `${enter ? "Shift+Enter" : "Enter"} adds a new line`,
38609
38671
  "/ lists commands",
38610
- "@ mentions"
38672
+ "@ mentions",
38673
+ ...this.#talking() ? ["hold Alt+M to dictate"] : []
38611
38674
  );
38612
38675
  return `${keys.join(", ")}.`;
38613
38676
  }
@@ -38641,17 +38704,23 @@ var SliccComposer = class extends ThemedElement {
38641
38704
  );
38642
38705
  }
38643
38706
  }
38707
+ #toggleTalk = (event2) => {
38708
+ event2.stopPropagation();
38709
+ const settings = this.model?.settings;
38710
+ settings?.update({ pushToTalk: !settings.get().pushToTalk });
38711
+ };
38644
38712
  dictate() {
38645
38713
  if (this.#recognition) {
38646
38714
  this.#recognition.stop();
38647
38715
  return;
38648
38716
  }
38649
- const Speech = globalThis.SpeechRecognition ?? globalThis.webkitSpeechRecognition;
38717
+ const Speech = speech();
38650
38718
  if (!Speech) return;
38651
38719
  const recognition = new Speech();
38652
38720
  recognition.interimResults = false;
38721
+ recognition.continuous = true;
38653
38722
  recognition.onresult = (event2) => {
38654
- const text2 = [...event2.results].map((result) => result[0].transcript).join(" ");
38723
+ const text2 = [...event2.results].slice(event2.resultIndex ?? 0).map((result) => result[0].transcript).join(" ");
38655
38724
  this.value = `${this.value}${this.value && !this.value.endsWith(" ") ? " " : ""}${text2}`;
38656
38725
  };
38657
38726
  recognition.onend = () => {
@@ -38797,7 +38866,8 @@ var SliccComposer = class extends ThemedElement {
38797
38866
  const agent = this.model?.agent.list().find((candidate) => candidate.id === this.#agent);
38798
38867
  const suggestion = this.model?.agent.suggestion(this.#agent);
38799
38868
  const canSend = !!this.value.trim() || this.attachments.some((attachment2) => !attachment2.error);
38800
- const speech = "SpeechRecognition" in globalThis || "webkitSpeechRecognition" in globalThis;
38869
+ const pushToTalk = this.model?.settings.get().pushToTalk ?? false;
38870
+ const talk = !!speech();
38801
38871
  const held = this.#held();
38802
38872
  return b`<div class="column">
38803
38873
  <span id="keys" class="sr" aria-hidden="true">${this.#instructions(busy)}</span>
@@ -38835,6 +38905,10 @@ var SliccComposer = class extends ThemedElement {
38835
38905
  <sp-menu-item value="screenshot">Take a screenshot of the browser tab</sp-menu-item>
38836
38906
  <sp-menu-item value="file">Attach a file from SLICC</sp-menu-item>
38837
38907
  <sp-menu-item value="secret">Share a secret</sp-menu-item>
38908
+ ${talk ? b`<sp-menu-divider></sp-menu-divider>
38909
+ <sp-menu-group selects="multiple" data-group="talk" @change=${this.#toggleTalk}>
38910
+ <sp-menu-item value="push-to-talk" data-action="push-to-talk" ?selected=${pushToTalk}>Enable push to talk<span slot="description">Hold Alt+M to dictate</span></sp-menu-item>
38911
+ </sp-menu-group>` : A}
38838
38912
  </sp-menu>
38839
38913
  </swc-popover>
38840
38914
  <input type="file" multiple @change=${(event2) => {
@@ -38842,17 +38916,7 @@ var SliccComposer = class extends ThemedElement {
38842
38916
  void this.addFiles([...input.files ?? []]);
38843
38917
  input.value = "";
38844
38918
  }} />
38845
- </div>
38846
- ${speech ? b`<div class="below">
38847
- <swc-action-button
38848
- size="s"
38849
- quiet
38850
- class=${this.dictating ? "selected" : ""}
38851
- accessible-label=${this.dictating ? "Stop dictation" : "Dictate"}
38852
- data-action="dictate"
38853
- @click=${() => this.dictate()}
38854
- ><swc-icon-microphone slot="icon"></swc-icon-microphone></swc-action-button>
38855
- </div>` : A}`;
38919
+ </div>`;
38856
38920
  }
38857
38921
  };
38858
38922
 
@@ -39407,7 +39471,7 @@ var SliccNotices = class extends ModelElement {
39407
39471
  (action) => b`<swc-button size="s" variant="secondary" fill-style="outline" data-action=${action.id} ?pending=${pending === action.id} ?disabled=${!!pending && pending !== action.id} @click=${() => void this.act(notice.id, action.id)}>${action.label}</swc-button>`
39408
39472
  )}</div>` : A}
39409
39473
  </div>
39410
- <swc-close-button size="m" data-dismiss accessible-label=${`Dismiss: ${notice.title}`} @click=${() => this.dismiss(notice.id)}></swc-close-button>
39474
+ ${notice.dismissible === false ? A : b`<swc-close-button size="m" data-dismiss accessible-label=${`Dismiss: ${notice.title}`} @click=${() => this.dismiss(notice.id)}></swc-close-button>`}
39411
39475
  </div>`;
39412
39476
  }
39413
39477
  #tabs() {
@@ -39434,7 +39498,9 @@ var SliccNotices = class extends ModelElement {
39434
39498
  }
39435
39499
  render() {
39436
39500
  const port = this.model?.notices;
39437
- const notices = (port?.list() ?? []).filter((notice) => !this.dismissed.has(notice.id));
39501
+ const notices = (port?.list() ?? []).filter(
39502
+ (notice) => notice.dismissible === false || !this.dismissed.has(notice.id)
39503
+ );
39438
39504
  const tabs = this.#tabs();
39439
39505
  const approvals = this.model?.approvals?.decide ? [] : waiting(this.model, Date.now());
39440
39506
  if (!notices.length && !approvals.length && tabs === A) return A;
@@ -41154,6 +41220,7 @@ var SliccSettings = class extends ThemedElement {
41154
41220
  <div class="switches">
41155
41221
  <sp-switch ?checked=${value.sendOnEnter} data-setting="sendOnEnter" @change=${(e122) => this.#update({ sendOnEnter: this.#checked(e122) })}>Enter sends, Shift+Enter adds a line</sp-switch>
41156
41222
  <sp-switch ?checked=${value.showThinking} data-setting="showThinking" @change=${(e122) => this.#update({ showThinking: this.#checked(e122) })}>Show thinking</sp-switch>
41223
+ ${speech() ? b`<sp-switch ?checked=${value.pushToTalk ?? false} data-setting="pushToTalk" @change=${(e122) => this.#update({ pushToTalk: this.#checked(e122) })}>Push to talk: hold Alt+M to dictate</sp-switch>` : A}
41157
41224
  </div>
41158
41225
  </div>
41159
41226
  <div class="row">
@@ -41590,7 +41657,7 @@ var SliccSprinkle = class extends ThemedElement {
41590
41657
  () => globalThis.removeEventListener("message", this.#message),
41591
41658
  model.sprinkles.on("sprinkles", () => this.requestUpdate()),
41592
41659
  this.#dips.on("change", () => this.requestUpdate()),
41593
- ...model.follow ? [model.follow.on("follow", () => this.requestUpdate())] : []
41660
+ ...onWatch(model, () => this.requestUpdate())
41594
41661
  ];
41595
41662
  }
41596
41663
  #drag = (event2) => {
@@ -80140,7 +80207,7 @@ function createDismissableLayer(options) {
80140
80207
  const capture = (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : false;
80141
80208
  const escape2 = (_options$escape = options.escape) !== null && _options$escape !== void 0 ? _options$escape : true;
80142
80209
  const keys = (_options$keys = options.keys) !== null && _options$keys !== void 0 ? _options$keys : [];
80143
- const outside = (_options$outsidePoint = options.outsidePointerDown) !== null && _options$outsidePoint !== void 0 ? _options$outsidePoint : true;
80210
+ const outside2 = (_options$outsidePoint = options.outsidePointerDown) !== null && _options$outsidePoint !== void 0 ? _options$outsidePoint : true;
80144
80211
  const grace = (_options$pointerDownG = options.pointerDownGraceMs) !== null && _options$pointerDownG !== void 0 ? _options$pointerDownG : 0;
80145
80212
  const now = (_options$now = options.now) !== null && _options$now !== void 0 ? _options$now : Date.now;
80146
80213
  const openedAt = now();
@@ -80153,13 +80220,13 @@ function createDismissableLayer(options) {
80153
80220
  if (escape2 || keys.length > 0) disposables.addDisposables(addDisposableListener(win, "keydown", (event2) => {
80154
80221
  if (escape2 && event2.key === "Escape" || keys.includes(event2.key)) options.onDismiss();
80155
80222
  }, capture));
80156
- if (outside || options.onInsidePointerDown) disposables.addDisposables(addDisposableListener(win, "pointerdown", (event2) => {
80223
+ if (outside2 || options.onInsidePointerDown) disposables.addDisposables(addDisposableListener(win, "pointerdown", (event2) => {
80157
80224
  if (isInside(event2)) {
80158
80225
  var _options$onInsidePoin;
80159
80226
  (_options$onInsidePoin = options.onInsidePointerDown) === null || _options$onInsidePoin === void 0 || _options$onInsidePoin.call(options, event2);
80160
80227
  return;
80161
80228
  }
80162
- if (!outside || now() - openedAt < grace) return;
80229
+ if (!outside2 || now() - openedAt < grace) return;
80163
80230
  options.onDismiss();
80164
80231
  }, capture));
80165
80232
  if (options.resize) disposables.addDisposables(addDisposableListener(win, "resize", () => {