@ai-ecoverse/slicc-spectrum 2.3.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/slicc-ui.js +19 -6
- package/dist/slicc-ui.js.map +2 -2
- package/dist/types/app/composer.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -354,7 +354,7 @@ Renders nothing without the port.
|
|
|
354
354
|
The message box uses Spectrum Web Components 2.0.0-beta.6. Its explicit accessible names stay "Message" for the textarea, "Send" ("Steer" while busy) for send, "Add" for upload and "Stop" for stop, using `accessible-label`, `send-accessible-label`, `upload-accessible-label` and `stop-accessible-label`. Attachment navigation stays "Show previous attachments" / "Show more attachments", and the strip stays "Uploaded assets strip", through their `*-accessible-label` attributes.
|
|
355
355
|
<kbd>Enter</kbd> sends, or steers a running reply: the message joins after the current tool round, without interrupting; <kbd>Ctrl</kbd>/<kbd>⌘</kbd>+<kbd>Enter</kbd> queues a follow-up that runs after the reply and can be withdrawn; <kbd>Shift</kbd>+<kbd>Enter</kbd> adds a line; <kbd>Tab</kbd> takes the suggested follow-up; <kbd>↑</kbd>/<kbd>↓</kbd> at the start or end walk this agent's history; <kbd>Esc</kbd> stops.
|
|
356
356
|
`/` completes commands (`/clear`, `/compact`, `/model`, `/thinking`, `/scoop`, `/stop`, `/freeze` when the port can freeze, `/theme`) and their arguments, `@` mentions agents and files.
|
|
357
|
-
Attach from the computer, from SLICC's files, a browser screenshot or a shared secret (with a `vault.put`, the popup takes the value too, checks it like Settings › Secrets, puts it in the vault and attaches the name, showing errors inline and clearing the field; an empty value shares a name the vault already has, and a new value for one asks before it replaces it; while the vault is away (`availability()` `connecting` or `waiting`) or locked, it takes no value and says so; without one, it attaches the name and says to add the value in Settings › Secrets), or paste and drop files (25 MB each; a dropped folder, told apart by its drag entry, becomes a “Folders can’t be attached” chip, and a file that can't be read a “Could not read the file” chip, instead of an attachment).
|
|
357
|
+
Attach from the computer, from SLICC's files, a browser screenshot or a shared secret (with a `vault.put`, the popup takes the value too, checks it like Settings › Secrets, puts it in the vault and attaches the name, showing errors inline and clearing the field; an empty value shares a name the vault already has, and a new value for one asks before it replaces it; while the vault is away (`availability()` `connecting` or `waiting`) or locked, it takes no value and says so; without one, it attaches the name and says to add the value in Settings › Secrets; the popup closes on Cancel (`data-action="cancel-secret"`, disabled while a share is pending), on a press outside the form (ignored while a share is pending) and on Escape, each clearing the typed value), or paste and drop files (25 MB each; a dropped folder, told apart by its drag entry, becomes a “Folders can’t be attached” chip, and a file that can't be read a “Could not read the file” chip, instead of an attachment).
|
|
358
358
|
<kbd>Esc</kbd> in the `+` menu closes it, from any item, and puts focus back on `+`; it goes no further, so it doesn't also stop a reply.
|
|
359
359
|
Queued messages wait above it in a dashed box (`--swc-neutral-visual-color`, 3:1 or more against the composer in both themes), to send now or drop; a steer the agent still holds (`mode: 'steer'`, `li.queued[data-mode=steer]`) reads "Sends at the next step" and can only be dropped.
|
|
360
360
|
Model and thinking pickers.
|
package/dist/slicc-ui.js
CHANGED
|
@@ -35601,6 +35601,10 @@ var SliccComposer = class extends ThemedElement {
|
|
|
35601
35601
|
const released = event2 instanceof KeyboardEvent && (event2.code === "KeyM" || event2.key === "Alt");
|
|
35602
35602
|
if (this.dictating && (released || event2.type === "blur")) this.dictate();
|
|
35603
35603
|
};
|
|
35604
|
+
#outside = (event2) => {
|
|
35605
|
+
const form = this.renderRoot.querySelector("form.secret");
|
|
35606
|
+
if (form && !this.sharing && !event2.composedPath().includes(form)) this.closeSecret();
|
|
35607
|
+
};
|
|
35604
35608
|
#keys = { capture: true, handleEvent: (event2) => this.#keydown(event2) };
|
|
35605
35609
|
constructor() {
|
|
35606
35610
|
super();
|
|
@@ -35894,8 +35898,10 @@ var SliccComposer = class extends ThemedElement {
|
|
|
35894
35898
|
outline: var(--swc-focus-indicator-thickness) solid var(--swc-focus-indicator-color);
|
|
35895
35899
|
outline-offset: var(--swc-focus-ring-gap);
|
|
35896
35900
|
}
|
|
35897
|
-
.secret
|
|
35898
|
-
|
|
35901
|
+
.secret .buttons {
|
|
35902
|
+
display: flex;
|
|
35903
|
+
flex-wrap: wrap;
|
|
35904
|
+
gap: var(--swc-spacing-100);
|
|
35899
35905
|
}
|
|
35900
35906
|
.secret-error {
|
|
35901
35907
|
display: flex;
|
|
@@ -35933,6 +35939,7 @@ var SliccComposer = class extends ThemedElement {
|
|
|
35933
35939
|
clearTimeout(this.#abandon);
|
|
35934
35940
|
globalThis.addEventListener("keyup", this.#release);
|
|
35935
35941
|
globalThis.addEventListener("blur", this.#release);
|
|
35942
|
+
globalThis.addEventListener("pointerdown", this.#outside, true);
|
|
35936
35943
|
if (this.hasUpdated) this.#wire();
|
|
35937
35944
|
}
|
|
35938
35945
|
firstUpdated() {
|
|
@@ -35942,6 +35949,7 @@ var SliccComposer = class extends ThemedElement {
|
|
|
35942
35949
|
super.disconnectedCallback();
|
|
35943
35950
|
globalThis.removeEventListener("keyup", this.#release);
|
|
35944
35951
|
globalThis.removeEventListener("blur", this.#release);
|
|
35952
|
+
globalThis.removeEventListener("pointerdown", this.#outside, true);
|
|
35945
35953
|
clearValues(this.renderRoot);
|
|
35946
35954
|
const kept3 = this.#waiting.draft?.attachments;
|
|
35947
35955
|
const held2 = [
|
|
@@ -36288,6 +36296,10 @@ ${this.value}` : text4;
|
|
|
36288
36296
|
const takes = commands.some((command2) => command2.name === name && command2.args);
|
|
36289
36297
|
this.popup = found && (found.kind !== "argument" || takes) ? { ...found, items: this.#choices(found.kind, found.query), index: 0 } : null;
|
|
36290
36298
|
}
|
|
36299
|
+
closeSecret() {
|
|
36300
|
+
clearValues(this.renderRoot);
|
|
36301
|
+
this.popup = null;
|
|
36302
|
+
}
|
|
36291
36303
|
openPopup(kind) {
|
|
36292
36304
|
clearValues(this.renderRoot);
|
|
36293
36305
|
this.secretError = null;
|
|
@@ -36531,9 +36543,7 @@ ${this.value}` : text4;
|
|
|
36531
36543
|
);
|
|
36532
36544
|
};
|
|
36533
36545
|
const close = (event2) => {
|
|
36534
|
-
if (event2.key
|
|
36535
|
-
clearValues(this.renderRoot);
|
|
36536
|
-
this.popup = null;
|
|
36546
|
+
if (event2.key === "Escape") this.closeSecret();
|
|
36537
36547
|
};
|
|
36538
36548
|
const bad = (name) => this.secretField === name ? "true" : A;
|
|
36539
36549
|
const described2 = (name) => this.secretField === name ? "secret-error" : A;
|
|
@@ -36543,7 +36553,10 @@ ${this.value}` : text4;
|
|
|
36543
36553
|
<label class="field"><span>Name</span><input name="name" placeholder="API_TOKEN" autocomplete="off" spellcheck="false" aria-invalid=${bad("name")} aria-describedby=${described2("name")} /></label>
|
|
36544
36554
|
${valued ? b`<label class="field"><span>Value</span><input name="value" type="password" autocomplete="off" spellcheck="false" aria-invalid=${bad("value")} aria-describedby=${described2("value")} /></label>` : A}
|
|
36545
36555
|
${this.secretError ? b`<span class="secret-error" role="alert" id="secret-error" data-error><swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle><span>${this.secretError}</span></span>` : A}
|
|
36546
|
-
<
|
|
36556
|
+
<span class="buttons">
|
|
36557
|
+
<swc-button size="s" variant="accent" data-action="share-secret" ?pending=${this.sharing} @click=${(event2) => event2.currentTarget.closest("form")?.requestSubmit()}>Share</swc-button>
|
|
36558
|
+
<swc-button size="s" variant="secondary" fill-style="outline" data-action="cancel-secret" ?disabled=${this.sharing} @click=${() => this.closeSecret()}>Cancel</swc-button>
|
|
36559
|
+
</span>
|
|
36547
36560
|
</form>`;
|
|
36548
36561
|
}
|
|
36549
36562
|
const title2 = {
|