@ai-ecoverse/slicc-spectrum 1.107.2 → 1.108.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/{chunk-7O5TLOZV.js → chunk-CQDLADJZ.js} +105 -4
- package/dist/chunk-CQDLADJZ.js.map +7 -0
- package/dist/{chunk-AI3R2QZY.js → chunk-FPDH5YML.js} +2409 -2273
- package/dist/chunk-FPDH5YML.js.map +7 -0
- package/dist/slicc-dummy.js +7 -3
- package/dist/slicc-dummy.js.map +2 -2
- package/dist/slicc-kernel-model.js +1 -1
- package/dist/slicc-ui.js +350 -59
- package/dist/slicc-ui.js.map +3 -3
- package/dist/types/app/settings.d.ts +30 -1
- package/dist/types/dummy/fixtures.d.ts +3 -1
- package/dist/types/dummy/index.d.ts +4 -3
- package/dist/types/dummy/settings.d.ts +15 -2
- package/dist/types/dummy.d.ts +1 -1
- package/dist/types/model/types.d.ts +17 -0
- package/package.json +13 -13
- package/dist/chunk-7O5TLOZV.js.map +0 -7
- package/dist/chunk-AI3R2QZY.js.map +0 -7
package/dist/slicc-ui.js
CHANGED
|
@@ -51747,7 +51747,7 @@ var SliccDiffPanel = class extends ThemedElement {
|
|
|
51747
51747
|
// src/app/lucide.ts
|
|
51748
51748
|
var library = null;
|
|
51749
51749
|
function load2() {
|
|
51750
|
-
library ??= import("./chunk-
|
|
51750
|
+
library ??= import("./chunk-FPDH5YML.js");
|
|
51751
51751
|
return library;
|
|
51752
51752
|
}
|
|
51753
51753
|
function pascal(name) {
|
|
@@ -53808,7 +53808,21 @@ var accountStatus = {
|
|
|
53808
53808
|
rejected: ["notice", "Rejected"],
|
|
53809
53809
|
"needs-sign-in": ["neutral", "Needs sign-in"],
|
|
53810
53810
|
"sign-in-expired": ["notice", "Sign-in expired"],
|
|
53811
|
-
unreachable: ["notice", "Unreachable"]
|
|
53811
|
+
unreachable: ["notice", "Unreachable"],
|
|
53812
|
+
connecting: ["info", "Connecting\u2026"],
|
|
53813
|
+
"needs-token": ["neutral", "Needs a token"],
|
|
53814
|
+
failed: ["negative", "Couldn\u2019t connect"],
|
|
53815
|
+
disabled: ["neutral", "Disabled"],
|
|
53816
|
+
refused: ["negative", "Refused"],
|
|
53817
|
+
removing: ["info", "Removing\u2026"]
|
|
53818
|
+
};
|
|
53819
|
+
var serverStatus = {
|
|
53820
|
+
connecting: "connecting",
|
|
53821
|
+
"needs-secret": "needs-token",
|
|
53822
|
+
"needs-auth": "needs-sign-in",
|
|
53823
|
+
failed: "failed",
|
|
53824
|
+
disabled: "disabled",
|
|
53825
|
+
refused: "refused"
|
|
53812
53826
|
};
|
|
53813
53827
|
var authHints = {
|
|
53814
53828
|
"api-key": "API key",
|
|
@@ -53830,6 +53844,15 @@ var removeBodies = {
|
|
|
53830
53844
|
oauth: "Its sign-in is deleted from the vault. Models from it stop working.",
|
|
53831
53845
|
local: "Models from it stop working."
|
|
53832
53846
|
};
|
|
53847
|
+
var serverGone = "Agents can\u2019t use it any more.";
|
|
53848
|
+
var refusedEntry = "This entry was refused. Remove it and add it again here.";
|
|
53849
|
+
var urlSecret = "This URL contains a secret. Remove it, turn on Uses a token, and paste the token when you connect.";
|
|
53850
|
+
var sentence2 = (text4) => text4.charAt(0).toUpperCase() + text4.slice(1);
|
|
53851
|
+
function serverRefusal(edit) {
|
|
53852
|
+
if (edit.code === "url-secret") return { field: "url", message: urlSecret };
|
|
53853
|
+
return { field: "form", message: sentence2(edit.reason) };
|
|
53854
|
+
}
|
|
53855
|
+
var serverName = /^[A-Za-z0-9_-]+$/;
|
|
53833
53856
|
function draft(option) {
|
|
53834
53857
|
return {
|
|
53835
53858
|
id: option.id,
|
|
@@ -53874,6 +53897,7 @@ function words(message, word2) {
|
|
|
53874
53897
|
return new RegExp(`\\b${word2.replace(/[^a-z0-9 ]/gi, "\\$&")}\\b`, "i").test(message);
|
|
53875
53898
|
}
|
|
53876
53899
|
var popup = (account) => account.group === "mcp" && account.auth === "oauth";
|
|
53900
|
+
var signsIn = (account) => account.group !== "mcp" || !(account.auth === "local" || account.state === "disabled" || account.state === "refused");
|
|
53877
53901
|
var dual = (account) => account.auth === "oauth" && account.secret === "api-key";
|
|
53878
53902
|
var signInMethod = (account) => dual(account) ? { method: "sign-in" } : void 0;
|
|
53879
53903
|
var start = (options2, value) => options2.some((option) => option.value === value) ? value : options2[0]?.value ?? "";
|
|
@@ -53902,7 +53926,13 @@ var SliccSettings = class extends ThemedElement {
|
|
|
53902
53926
|
query: { state: true },
|
|
53903
53927
|
filled: { state: true },
|
|
53904
53928
|
developing: { state: true },
|
|
53905
|
-
developerError: { state: true }
|
|
53929
|
+
developerError: { state: true },
|
|
53930
|
+
serverOpen: { state: true },
|
|
53931
|
+
serverBusy: { state: true },
|
|
53932
|
+
serverProblem: { state: true },
|
|
53933
|
+
serverToken: { state: true },
|
|
53934
|
+
refusals: { state: true },
|
|
53935
|
+
removing: { state: true }
|
|
53906
53936
|
};
|
|
53907
53937
|
#waits = new SignInWaits(() => this.requestUpdate());
|
|
53908
53938
|
#copies = new SignInCopies(() => this.requestUpdate());
|
|
@@ -53912,6 +53942,7 @@ var SliccSettings = class extends ThemedElement {
|
|
|
53912
53942
|
#wanted = null;
|
|
53913
53943
|
#developerPort;
|
|
53914
53944
|
#call = 0;
|
|
53945
|
+
#refusalCall = 0;
|
|
53915
53946
|
#scroll = new ViewScroll(this, "settings:scroll", { scroller: () => this, rows: "[data-id]" });
|
|
53916
53947
|
constructor() {
|
|
53917
53948
|
super();
|
|
@@ -53926,6 +53957,12 @@ var SliccSettings = class extends ThemedElement {
|
|
|
53926
53957
|
this.filled = /* @__PURE__ */ new Set();
|
|
53927
53958
|
this.developing = false;
|
|
53928
53959
|
this.developerError = null;
|
|
53960
|
+
this.serverOpen = false;
|
|
53961
|
+
this.serverBusy = false;
|
|
53962
|
+
this.serverProblem = null;
|
|
53963
|
+
this.serverToken = false;
|
|
53964
|
+
this.refusals = {};
|
|
53965
|
+
this.removing = /* @__PURE__ */ new Set();
|
|
53929
53966
|
}
|
|
53930
53967
|
static styles = [
|
|
53931
53968
|
fieldStyles,
|
|
@@ -54089,6 +54126,9 @@ var SliccSettings = class extends ThemedElement {
|
|
|
54089
54126
|
align-items: center;
|
|
54090
54127
|
gap: var(--swc-spacing-75);
|
|
54091
54128
|
}
|
|
54129
|
+
[data-group='mcp'] .actions {
|
|
54130
|
+
justify-content: flex-end;
|
|
54131
|
+
}
|
|
54092
54132
|
.notes {
|
|
54093
54133
|
grid-column: 1 / -1;
|
|
54094
54134
|
display: grid;
|
|
@@ -54109,6 +54149,16 @@ var SliccSettings = class extends ThemedElement {
|
|
|
54109
54149
|
flex: none;
|
|
54110
54150
|
margin-block-start: var(--swc-spacing-50);
|
|
54111
54151
|
}
|
|
54152
|
+
.server {
|
|
54153
|
+
display: grid;
|
|
54154
|
+
gap: var(--swc-spacing-200);
|
|
54155
|
+
max-width: 420px;
|
|
54156
|
+
margin-block-start: var(--swc-spacing-300);
|
|
54157
|
+
}
|
|
54158
|
+
.entry {
|
|
54159
|
+
display: grid;
|
|
54160
|
+
gap: var(--swc-spacing-75);
|
|
54161
|
+
}
|
|
54112
54162
|
.other-way {
|
|
54113
54163
|
justify-self: start;
|
|
54114
54164
|
padding: 0;
|
|
@@ -54287,6 +54337,9 @@ var SliccSettings = class extends ThemedElement {
|
|
|
54287
54337
|
update();
|
|
54288
54338
|
};
|
|
54289
54339
|
queueMicrotask(() => settleModels(model));
|
|
54340
|
+
this.removing = /* @__PURE__ */ new Set();
|
|
54341
|
+
this.refusals = {};
|
|
54342
|
+
void this.#readRefusals(model);
|
|
54290
54343
|
if (model.updates !== this.#developerPort) {
|
|
54291
54344
|
this.#developerPort = model.updates;
|
|
54292
54345
|
this.#call += 1;
|
|
@@ -54299,7 +54352,11 @@ var SliccSettings = class extends ThemedElement {
|
|
|
54299
54352
|
...super.subscribe(model),
|
|
54300
54353
|
...developer && model.updates ? [model.updates.on("items", update)] : [],
|
|
54301
54354
|
model.settings.on("settings", settle3),
|
|
54302
|
-
model.settings.on("accounts",
|
|
54355
|
+
model.settings.on("accounts", () => {
|
|
54356
|
+
this.#settleRemoved(model);
|
|
54357
|
+
void this.#readRefusals(model);
|
|
54358
|
+
settle3();
|
|
54359
|
+
}),
|
|
54303
54360
|
model.settings.on("providers", update),
|
|
54304
54361
|
...model.vault ? [model.vault.on("status", update), model.vault.on("list", update)] : []
|
|
54305
54362
|
];
|
|
@@ -54671,7 +54728,7 @@ var SliccSettings = class extends ThemedElement {
|
|
|
54671
54728
|
#moved(account) {
|
|
54672
54729
|
const url = this.#mcpUrl(account);
|
|
54673
54730
|
const old = registrations2()[serverOf(account)] ?? this.#pinned(account);
|
|
54674
|
-
return url && old && old !== url ? url : null;
|
|
54731
|
+
return signsIn(account) && url && old && old !== url ? url : null;
|
|
54675
54732
|
}
|
|
54676
54733
|
async #reconnectMcp(account, url) {
|
|
54677
54734
|
const model = this.model;
|
|
@@ -54935,12 +54992,14 @@ var SliccSettings = class extends ThemedElement {
|
|
|
54935
54992
|
const accounts = this.model?.settings.accounts() ?? [];
|
|
54936
54993
|
if (accounts.some((account) => this.#signingIn(account))) return "signing in";
|
|
54937
54994
|
if (this.entering !== null) return "a key is being entered";
|
|
54995
|
+
if (this.serverOpen) return "a server is being added";
|
|
54938
54996
|
return this.picking ? "a provider is being added" : null;
|
|
54939
54997
|
}
|
|
54940
54998
|
#signingIn(account) {
|
|
54941
54999
|
return account.status === "signing-in" || account.auth !== "api-key" && account.status !== "connected" && this.entering !== account.id && this.pending.has(account.id);
|
|
54942
55000
|
}
|
|
54943
55001
|
#action(account) {
|
|
55002
|
+
if (!signsIn(account)) return A;
|
|
54944
55003
|
if (this.#signingIn(account) && this.model?.settings.cancel) {
|
|
54945
55004
|
return b`<swc-button
|
|
54946
55005
|
size="m"
|
|
@@ -54957,6 +55016,7 @@ var SliccSettings = class extends ThemedElement {
|
|
|
54957
55016
|
data-action="disconnect"
|
|
54958
55017
|
accessible-label=${`Disconnect ${account.provider}`}
|
|
54959
55018
|
?pending=${this.pending.has(account.id)}
|
|
55019
|
+
?disabled=${this.removing.has(account.id)}
|
|
54960
55020
|
@click=${() => this.#disconnect(account)}
|
|
54961
55021
|
>Disconnect</swc-button>`;
|
|
54962
55022
|
}
|
|
@@ -54970,16 +55030,19 @@ var SliccSettings = class extends ThemedElement {
|
|
|
54970
55030
|
data-action="connect"
|
|
54971
55031
|
accessible-label=${signs ? `Sign in to ${account.provider}` : `${label} ${account.provider}`}
|
|
54972
55032
|
?pending=${busy}
|
|
54973
|
-
?disabled=${entering || !!account.blocked}
|
|
55033
|
+
?disabled=${entering || !!account.blocked || this.removing.has(account.id)}
|
|
54974
55034
|
@click=${() => this.#start(account)}
|
|
54975
55035
|
>${label}</swc-button>`;
|
|
54976
55036
|
}
|
|
54977
55037
|
#status(account) {
|
|
55038
|
+
if (this.removing.has(account.id)) return "removing";
|
|
54978
55039
|
if (this.#signingIn(account)) return "signing-in";
|
|
54979
55040
|
if (account.status === "connected" && account.blocked) return "unreachable";
|
|
54980
55041
|
if (account.status === "expired" && account.auth === "api-key") return "rejected";
|
|
54981
|
-
if (popup(account) && account.status === "disconnected") return "needs-sign-in";
|
|
54982
55042
|
if (popup(account) && account.status === "expired") return "sign-in-expired";
|
|
55043
|
+
const server = account.state && serverStatus[account.state];
|
|
55044
|
+
if (server) return server;
|
|
55045
|
+
if (popup(account) && account.status === "disconnected") return "needs-sign-in";
|
|
54983
55046
|
return account.status;
|
|
54984
55047
|
}
|
|
54985
55048
|
#account(account) {
|
|
@@ -54992,7 +55055,7 @@ var SliccSettings = class extends ThemedElement {
|
|
|
54992
55055
|
</div>` : A;
|
|
54993
55056
|
return b`<div class="account" data-id=${account.id}>
|
|
54994
55057
|
<span class="provider">${account.provider}</span>
|
|
54995
|
-
<span class="identity">${account.identity}${this.#inVault(account) ? b`<span class="kept" data-store="vault">${account.identity ? " \xB7 " : ""}${kept2(account)}</span>` : A}</span>
|
|
55058
|
+
<span class="identity">${account.identity}${this.#inVault(account) ? b`<span class="kept" data-store="vault">${account.identity ? " \xB7 " : ""}${kept2(account)}</span>` : A}${this.#refusedNote(account)}</span>
|
|
54996
55059
|
<swc-status-light class="state" variant=${variant}>${label}</swc-status-light>
|
|
54997
55060
|
${this.#actions(account)}
|
|
54998
55061
|
</div>
|
|
@@ -55000,6 +55063,11 @@ var SliccSettings = class extends ThemedElement {
|
|
|
55000
55063
|
${this.#movedNote(account)}
|
|
55001
55064
|
${this.adding?.id === account.id ? A : b`${this.#key(account)}${this.#otherKey(account)}${failure2}`}`;
|
|
55002
55065
|
}
|
|
55066
|
+
#refusedNote(account) {
|
|
55067
|
+
if (account.state !== "refused") return A;
|
|
55068
|
+
const reason = this.refusals[serverOf(account)]?.reason;
|
|
55069
|
+
return b`<span data-refusal>${account.identity ? " \xB7 " : ""}${reason ? sentence2(reason) : refusedEntry}</span>`;
|
|
55070
|
+
}
|
|
55003
55071
|
#otherKey(account) {
|
|
55004
55072
|
if (this.entering !== account.id) return A;
|
|
55005
55073
|
const other = this.#otherWay(account);
|
|
@@ -55007,35 +55075,41 @@ var SliccSettings = class extends ThemedElement {
|
|
|
55007
55075
|
}
|
|
55008
55076
|
#actions(account) {
|
|
55009
55077
|
const moved2 = account.status === "connected" ? this.#moved(account) : null;
|
|
55010
|
-
|
|
55011
|
-
|
|
55012
|
-
|
|
55013
|
-
|
|
55014
|
-
|
|
55015
|
-
|
|
55016
|
-
|
|
55017
|
-
|
|
55018
|
-
|
|
55019
|
-
|
|
55020
|
-
|
|
55021
|
-
|
|
55078
|
+
const removable = this.#removable(account);
|
|
55079
|
+
if (!moved2 && !removable) return this.#action(account);
|
|
55080
|
+
return b`<div class="actions">${moved2 ? this.#reconnect(account, moved2) : A}${this.#action(account)}${removable ? this.#removeButton(account) : A}</div>`;
|
|
55081
|
+
}
|
|
55082
|
+
#reconnect(account, url) {
|
|
55083
|
+
return b`<swc-button
|
|
55084
|
+
size="m"
|
|
55085
|
+
variant="accent"
|
|
55086
|
+
data-action="reconnect-mcp"
|
|
55087
|
+
accessible-label=${`Reconnect ${account.provider}`}
|
|
55088
|
+
?pending=${this.pending.has(account.id)}
|
|
55089
|
+
?disabled=${this.removing.has(account.id)}
|
|
55090
|
+
@click=${() => this.#reconnectMcp(account, url)}
|
|
55091
|
+
>Reconnect</swc-button>`;
|
|
55022
55092
|
}
|
|
55023
55093
|
#removable(account) {
|
|
55024
|
-
|
|
55094
|
+
const settings = this.model?.settings;
|
|
55095
|
+
if (account.group === "mcp") return !!settings?.removeServer;
|
|
55096
|
+
return !!this.#offered() && !!settings?.remove;
|
|
55025
55097
|
}
|
|
55026
55098
|
#removeButton(account) {
|
|
55027
55099
|
const id = `remove-${account.id}`;
|
|
55028
55100
|
const label = `Remove ${account.provider}`;
|
|
55101
|
+
const server = account.group === "mcp";
|
|
55102
|
+
const removing = this.removing.has(account.id);
|
|
55029
55103
|
return b`<swc-action-button
|
|
55030
55104
|
id=${id}
|
|
55031
55105
|
size="m"
|
|
55032
55106
|
quiet
|
|
55033
|
-
data-action
|
|
55107
|
+
data-action=${server ? "remove-server" : "remove-account"}
|
|
55034
55108
|
accessible-label=${label}
|
|
55035
|
-
?disabled=${this.pending.has(account.id)}
|
|
55036
|
-
@click=${() => this.#remove(account)}
|
|
55109
|
+
?disabled=${this.pending.has(account.id) || removing}
|
|
55110
|
+
@click=${() => server ? this.#removeServer(account) : this.#remove(account)}
|
|
55037
55111
|
><swc-icon-delete slot="icon"></swc-icon-delete></swc-action-button
|
|
55038
|
-
|
|
55112
|
+
>${removing ? A : b`<swc-tooltip for=${id} placement="top">${label}</swc-tooltip>`}`;
|
|
55039
55113
|
}
|
|
55040
55114
|
async #closeTip(id) {
|
|
55041
55115
|
const tip = this.renderRoot.querySelector(
|
|
@@ -55071,6 +55145,187 @@ var SliccSettings = class extends ThemedElement {
|
|
|
55071
55145
|
this.focusOn("[data-action=add-provider]");
|
|
55072
55146
|
for (const field of account.fields ?? []) this.#bases.delete(`${account.id} ${field.name}`);
|
|
55073
55147
|
}
|
|
55148
|
+
#heldRecords(account, vault) {
|
|
55149
|
+
const server = serverOf(account);
|
|
55150
|
+
const name = recordName(account);
|
|
55151
|
+
return (vault.list()?.secrets ?? []).filter(
|
|
55152
|
+
(secret) => secret.kind === "mcp" && secret.state !== "removed" && (secret.server === server || secret.name === name)
|
|
55153
|
+
).map((secret) => secret.name);
|
|
55154
|
+
}
|
|
55155
|
+
#serverRecords(account, vault) {
|
|
55156
|
+
const token = account.auth === "api-key" ? [recordName(account)] : [];
|
|
55157
|
+
const names2 = /* @__PURE__ */ new Set([...token, ...this.#heldRecords(account, vault)]);
|
|
55158
|
+
return [...names2].map((name) => [name, "mcp"]);
|
|
55159
|
+
}
|
|
55160
|
+
#removeServerBody(account) {
|
|
55161
|
+
const vault = this.model?.vault;
|
|
55162
|
+
if (!vault?.remove || !this.#heldRecords(account, vault).length) return serverGone;
|
|
55163
|
+
const held2 = account.auth === "oauth" ? "sign-in" : "token";
|
|
55164
|
+
return `Its ${held2} is deleted from the vault. ${serverGone}`;
|
|
55165
|
+
}
|
|
55166
|
+
async #clearServer(model, account) {
|
|
55167
|
+
const vault = model.vault;
|
|
55168
|
+
const server = serverOf(account);
|
|
55169
|
+
const records = vault?.remove ? this.#serverRecords(account, vault) : [];
|
|
55170
|
+
const held2 = !!vault?.remove && this.#heldRecords(account, vault).length > 0;
|
|
55171
|
+
const pinned = !!this.#pinned(account);
|
|
55172
|
+
const url = registrations2()[server] ?? (held2 && !pinned && this.#mcpUrl(account));
|
|
55173
|
+
for (const [name, kind] of records) await gone2(vault, name, kind);
|
|
55174
|
+
if (url) await vault?.endpoints?.({ remove: { mcp: [{ server, url }] } });
|
|
55175
|
+
register(server, void 0);
|
|
55176
|
+
}
|
|
55177
|
+
#markRemoving(id, on2) {
|
|
55178
|
+
const rest = [...this.removing].filter((candidate) => candidate !== id);
|
|
55179
|
+
this.removing = new Set(on2 ? [...rest, id] : rest);
|
|
55180
|
+
}
|
|
55181
|
+
async #readRefusals(model) {
|
|
55182
|
+
const call = ++this.#refusalCall;
|
|
55183
|
+
const refused3 = model.settings.accounts().some((account) => account.state === "refused");
|
|
55184
|
+
if (!(refused3 && model.settings.refusals)) {
|
|
55185
|
+
this.refusals = {};
|
|
55186
|
+
return;
|
|
55187
|
+
}
|
|
55188
|
+
const refusals = await model.settings.refusals().catch(() => ({}));
|
|
55189
|
+
if (call === this.#refusalCall && this.model === model) this.refusals = refusals;
|
|
55190
|
+
}
|
|
55191
|
+
#settleRemoved(model) {
|
|
55192
|
+
const listed2 = new Set(model.settings.accounts().map((account) => account.id));
|
|
55193
|
+
const left = [...this.removing].filter((id) => listed2.has(id));
|
|
55194
|
+
if (left.length !== this.removing.size) this.removing = new Set(left);
|
|
55195
|
+
}
|
|
55196
|
+
async #removeServer(account) {
|
|
55197
|
+
const model = this.model;
|
|
55198
|
+
const { id } = account;
|
|
55199
|
+
const title2 = `Remove ${account.provider}?`;
|
|
55200
|
+
const body2 = this.#removeServerBody(account);
|
|
55201
|
+
if (!await confirm({ title: title2, body: body2, action: "Remove" })) return;
|
|
55202
|
+
if (this.model !== model) return;
|
|
55203
|
+
clearValues(this.renderRoot);
|
|
55204
|
+
if (this.entering === id) this.entering = null;
|
|
55205
|
+
await this.#closeTip(`remove-${id}`);
|
|
55206
|
+
this.#markRemoving(id, true);
|
|
55207
|
+
this.failure = null;
|
|
55208
|
+
const refused3 = (message) => {
|
|
55209
|
+
this.#markRemoving(id, false);
|
|
55210
|
+
if (this.model === model) this.failure = { id, message };
|
|
55211
|
+
};
|
|
55212
|
+
try {
|
|
55213
|
+
await this.#clearServer(model, account);
|
|
55214
|
+
const edit = await model.settings.removeServer?.(id);
|
|
55215
|
+
if (!edit.ok) refused3(sentence2(edit.reason));
|
|
55216
|
+
else if (this.model === model) this.focusOn("[data-action=add-server]");
|
|
55217
|
+
} catch (error) {
|
|
55218
|
+
refused3(failureText(error));
|
|
55219
|
+
}
|
|
55220
|
+
}
|
|
55221
|
+
#openServerForm() {
|
|
55222
|
+
this.serverProblem = null;
|
|
55223
|
+
this.serverToken = false;
|
|
55224
|
+
this.serverOpen = true;
|
|
55225
|
+
void this.updateComplete.then(() => this.focusOn("[data-server-field=name]"));
|
|
55226
|
+
}
|
|
55227
|
+
#closeServerForm() {
|
|
55228
|
+
this.serverProblem = null;
|
|
55229
|
+
this.serverOpen = false;
|
|
55230
|
+
void this.updateComplete.then(() => this.focusOn("[data-action=add-server]"));
|
|
55231
|
+
}
|
|
55232
|
+
#checkServer(name, url) {
|
|
55233
|
+
if (!name) return { field: "name", message: "Name can\u2019t be empty" };
|
|
55234
|
+
if (!serverName.test(name))
|
|
55235
|
+
return { field: "name", message: "Use only letters, digits, _ and - in the name." };
|
|
55236
|
+
if (!url) return { field: "url", message: "URL can\u2019t be empty" };
|
|
55237
|
+
if (!this.#baseOf(url)) return { field: "url", message: "The URL must use https://." };
|
|
55238
|
+
return null;
|
|
55239
|
+
}
|
|
55240
|
+
#submitServer(event2) {
|
|
55241
|
+
event2.preventDefault();
|
|
55242
|
+
if (this.serverBusy) return;
|
|
55243
|
+
const form = event2.currentTarget;
|
|
55244
|
+
const text4 = (field) => form.querySelector(`[data-server-field=${field}]`)?.value.trim();
|
|
55245
|
+
const name = text4("name");
|
|
55246
|
+
const url = text4("url");
|
|
55247
|
+
const problem = this.#checkServer(name, url);
|
|
55248
|
+
this.serverProblem = problem;
|
|
55249
|
+
if (problem) {
|
|
55250
|
+
this.focusOn(`[data-server-field=${problem.field}]`);
|
|
55251
|
+
return;
|
|
55252
|
+
}
|
|
55253
|
+
void this.#addServer(name, this.serverToken ? { url, token: true } : { url });
|
|
55254
|
+
}
|
|
55255
|
+
async #addServer(name, entry) {
|
|
55256
|
+
const model = this.model;
|
|
55257
|
+
this.serverBusy = true;
|
|
55258
|
+
try {
|
|
55259
|
+
const edit = await model.settings.addServer?.(name, entry);
|
|
55260
|
+
if (this.model !== model) return;
|
|
55261
|
+
if (edit.ok) this.#closeServerForm();
|
|
55262
|
+
else this.#refuseServer(serverRefusal(edit));
|
|
55263
|
+
} catch (error) {
|
|
55264
|
+
if (this.model === model) this.serverProblem = { field: "form", message: failureText(error) };
|
|
55265
|
+
} finally {
|
|
55266
|
+
this.serverBusy = false;
|
|
55267
|
+
}
|
|
55268
|
+
}
|
|
55269
|
+
#refuseServer(problem) {
|
|
55270
|
+
this.serverProblem = problem;
|
|
55271
|
+
if (problem.field !== "form") this.focusOn(`[data-server-field=${problem.field}]`);
|
|
55272
|
+
}
|
|
55273
|
+
#serverNote(field) {
|
|
55274
|
+
if (this.serverProblem?.field !== field) return A;
|
|
55275
|
+
return b`<div class="problem" id=${`server-${field}-problem`} role="alert" data-problem=${field}>
|
|
55276
|
+
<swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle>
|
|
55277
|
+
<span>${this.serverProblem.message}</span>
|
|
55278
|
+
</div>`;
|
|
55279
|
+
}
|
|
55280
|
+
#serverInput(field, type, help2) {
|
|
55281
|
+
const invalid = this.serverProblem?.field === field;
|
|
55282
|
+
const problem = invalid ? `server-${field}-problem ` : "";
|
|
55283
|
+
return b`<input
|
|
55284
|
+
type=${type}
|
|
55285
|
+
autocomplete="off"
|
|
55286
|
+
spellcheck="false"
|
|
55287
|
+
data-server-field=${field}
|
|
55288
|
+
aria-required="true"
|
|
55289
|
+
aria-invalid=${invalid ? "true" : A}
|
|
55290
|
+
aria-describedby=${`${problem}${help2}`}
|
|
55291
|
+
/>`;
|
|
55292
|
+
}
|
|
55293
|
+
#serverForm() {
|
|
55294
|
+
return b`<form class="server" data-form="add-server" novalidate @submit=${(event2) => this.#submitServer(event2)} @keydown=${(event2) => this.#submitOnEnter(event2)}>
|
|
55295
|
+
<div class="entry">
|
|
55296
|
+
<label class="field"><span>Name</span>${this.#serverInput("name", "text", "server-name-help")}</label>
|
|
55297
|
+
<p class="hint" id="server-name-help">Letters, digits, _ and -</p>
|
|
55298
|
+
${this.#serverNote("name")}
|
|
55299
|
+
</div>
|
|
55300
|
+
<div class="entry">
|
|
55301
|
+
<label class="field"><span>URL</span>${this.#serverInput("url", "url", "server-url-help")}</label>
|
|
55302
|
+
<p class="hint" id="server-url-help">The server’s https:// address</p>
|
|
55303
|
+
${this.#serverNote("url")}
|
|
55304
|
+
</div>
|
|
55305
|
+
<div class="entry">
|
|
55306
|
+
<sp-switch data-server-field="token" @change=${(event2) => {
|
|
55307
|
+
this.serverToken = this.#checked(event2);
|
|
55308
|
+
}}>Uses a token</sp-switch>
|
|
55309
|
+
${this.serverToken ? b`<p class="hint" data-token-help>You paste the token when you connect the server. It stays in the vault.</p>` : A}
|
|
55310
|
+
</div>
|
|
55311
|
+
${this.#serverNote("form")}
|
|
55312
|
+
<div class="buttons">
|
|
55313
|
+
<swc-button size="m" variant="accent" data-action="save" ?pending=${this.serverBusy} @click=${(event2) => this.#send(event2)}>Add</swc-button>
|
|
55314
|
+
<swc-button size="m" variant="secondary" data-action="cancel" ?disabled=${this.serverBusy} @click=${() => this.#closeServerForm()}>Cancel</swc-button>
|
|
55315
|
+
</div>
|
|
55316
|
+
</form>`;
|
|
55317
|
+
}
|
|
55318
|
+
#serverList(servers) {
|
|
55319
|
+
const add = !!this.model?.settings.addServer;
|
|
55320
|
+
if (!(servers.length || add)) return A;
|
|
55321
|
+
return b`<h2>MCP servers</h2>
|
|
55322
|
+
<div class="accounts" data-group="mcp">${c(
|
|
55323
|
+
servers,
|
|
55324
|
+
(account) => account.id,
|
|
55325
|
+
(account) => this.#account(account)
|
|
55326
|
+
)}</div>
|
|
55327
|
+
${add && this.serverOpen ? this.#serverForm() : add ? b`<div class="add"><swc-action-button size="m" quiet data-action="add-server" @click=${() => this.#openServerForm()}><swc-icon-add slot="icon"></swc-icon-add>Add server</swc-action-button></div>` : A}`;
|
|
55328
|
+
}
|
|
55074
55329
|
#notice(row, size4 = "long") {
|
|
55075
55330
|
const needs = row.blocked;
|
|
55076
55331
|
if (needs !== "cors-free-transport") return A;
|
|
@@ -55375,15 +55630,14 @@ var SliccSettings = class extends ThemedElement {
|
|
|
55375
55630
|
</div>
|
|
55376
55631
|
<h2 data-section="accounts">Accounts</h2>
|
|
55377
55632
|
${this.#providerList(providers)}
|
|
55378
|
-
${servers
|
|
55379
|
-
<div class="accounts" data-group="mcp">${servers.map((account) => this.#account(account))}</div>` : A}
|
|
55633
|
+
${this.#serverList(servers)}
|
|
55380
55634
|
${this.model?.vault ? b`<slicc-secrets .model=${this.model}></slicc-secrets>` : A}
|
|
55381
55635
|
</div>`;
|
|
55382
55636
|
}
|
|
55383
55637
|
};
|
|
55384
55638
|
|
|
55385
55639
|
// src/app/sprinkle-theme.css
|
|
55386
|
-
var sprinkle_theme_default = ':root {\n --s2-gray-25: var(--swc-gray-25);\n --s2-gray-50: var(--swc-gray-50);\n --s2-gray-75: var(--swc-gray-75);\n --s2-gray-100: var(--swc-gray-100);\n --s2-gray-200: var(--swc-gray-200);\n --s2-gray-300: var(--swc-gray-300);\n --s2-gray-400: var(--swc-gray-400);\n --s2-gray-500: var(--swc-gray-500);\n --s2-gray-600: var(--swc-gray-600);\n --s2-gray-700: var(--swc-gray-700);\n --s2-gray-800: var(--swc-gray-800);\n --s2-gray-900: var(--swc-gray-900);\n --s2-gray-1000: var(--swc-gray-1000);\n\n --s2-bg-base: var(--swc-background-base-color);\n --s2-bg-layer-1: var(--swc-background-layer-1-color);\n --s2-bg-layer-2: var(--swc-background-layer-2-color);\n --s2-bg-elevated: var(--swc-background-elevated-color);\n --s2-bg-sunken: var(--swc-background-pasteboard-color);\n\n --s2-content-default: var(--swc-neutral-content-color-default);\n --s2-content-secondary: var(--swc-neutral-subdued-content-color-default);\n --s2-content-tertiary: var(--swc-gray-600);\n --s2-content-disabled: var(--swc-disabled-content-color);\n --s2-content-accent: var(--swc-accent-content-color-default);\n --s2-content-negative: var(--swc-negative-content-color-default);\n --s2-content-positive: var(--swc-positive-color-900);\n --s2-content-notice: var(--swc-notice-color-900);\n --s2-content-informative: var(--swc-informative-color-900);\n\n --slicc-cone: #ef7000;\n --slicc-scoop-blue: #3562ff;\n --slicc-scoop-purple: #a962e8;\n --slicc-scoop-teal: #2db9be;\n --slicc-accent: #15d675;\n\n --s2-accent: var(--swc-accent-background-color-default);\n --s2-accent-hover: var(--swc-accent-background-color-hover);\n --s2-accent-down: var(--swc-accent-background-color-down);\n\n --s2-negative: var(--swc-negative-background-color-default);\n --s2-positive: var(--swc-positive-background-color-default);\n --s2-informative: var(--swc-informative-background-color-default);\n --s2-notice: var(--swc-notice-background-color-default);\n\n --s2-border-default: var(--swc-gray-300);\n --s2-border-subtle: var(--swc-gray-200);\n --s2-border-focus: var(--swc-focus-indicator-color);\n\n --s2-font-family:\n adobe-clean-spectrum-vf, "Adobe Clean Spectrum VF", adobe-clean, "Adobe Clean",\n var(--swc-sans-font-family-stack);\n --s2-font-mono: var(--swc-code-font-family-stack);\n\n --s2-font-size-50: var(--swc-font-size-50);\n --s2-font-size-75: var(--swc-font-size-75);\n --s2-font-size-100: var(--swc-font-size-100);\n --s2-font-size-200: var(--swc-font-size-200);\n --s2-font-size-300: var(--swc-font-size-300);\n --s2-font-size-400: var(--swc-font-size-400);\n --s2-font-size-500: var(--swc-font-size-500);\n --s2-font-size-600: var(--swc-font-size-600);\n\n --s2-line-height-50: var(--swc-line-height-font-size-50);\n --s2-line-height-75: var(--swc-line-height-font-size-75);\n --s2-line-height-100: var(--swc-line-height-font-size-100);\n --s2-line-height-200: var(--swc-line-height-font-size-200);\n --s2-line-height-300: var(--swc-line-height-font-size-300);\n\n --s2-spacing-50: var(--swc-spacing-75);\n --s2-spacing-75: var(--swc-spacing-85);\n --s2-spacing-100: var(--swc-spacing-100);\n --s2-spacing-200: var(--swc-spacing-200);\n --s2-spacing-300: var(--swc-spacing-300);\n --s2-spacing-400: var(--swc-spacing-400);\n --s2-spacing-500: var(--swc-spacing-500);\n --s2-spacing-600: var(--swc-spacing-600);\n\n --s2-radius-s: var(--swc-corner-radius-small-default);\n --s2-radius-default: var(--swc-corner-radius-medium-default);\n --s2-radius-l: var(--swc-corner-radius-large-default);\n --s2-radius-xl: var(--swc-corner-radius-extra-large-default);\n --s2-radius-pill: 9999px;\n\n --s2-shadow-elevated: var(--swc-drop-shadow-elevated);\n --s2-shadow-container: var(--swc-drop-shadow-emphasized);\n\n --s2-transition-default: var(--swc-animation-duration-100) var(--swc-animation-ease-in-out);\n\n --s2-header-height: var(--swc-component-height-400);\n\n --uxc-yellow-subtle-bg: var(--swc-yellow-subtle-background-color-default);\n --uxc-yellow-subtle-text: var(--swc-yellow-1000);\n --uxc-purple-subtle-bg: var(--swc-purple-subtle-background-color-default);\n --uxc-purple-subtle-text: var(--swc-purple-1000);\n --uxc-cyan-subtle-bg: var(--swc-cyan-subtle-background-color-default);\n --uxc-cyan-subtle-text: var(--swc-cyan-1000);\n --uxc-magenta-subtle-bg: var(--swc-magenta-subtle-background-color-default);\n --uxc-magenta-subtle-text: var(--swc-magenta-1000);\n --uxc-indigo-subtle-bg: var(--swc-indigo-subtle-background-color-default);\n --uxc-indigo-subtle-text: var(--swc-indigo-1000);\n --uxc-gray-subtle-bg: var(--swc-gray-subtle-background-color-default);\n --uxc-gray-subtle-text: var(--swc-neutral-content-color-default);\n --uxc-positive-subtle-bg: var(--swc-positive-subtle-background-color-default);\n --uxc-positive-subtle-text: var(--swc-positive-color-1000);\n --uxc-notice-subtle-bg: var(--swc-notice-subtle-background-color-default);\n --uxc-notice-subtle-text: var(--swc-notice-color-1000);\n --uxc-negative-subtle-bg: var(--swc-negative-subtle-background-color-default);\n --uxc-negative-subtle-text: var(--swc-negative-color-1000);\n --uxc-accent-subtle-bg: var(--swc-accent-subtle-background-color-default);\n --uxc-accent-subtle-text: var(--swc-accent-color-1000);\n --uxc-neutral-subtle-bg: var(--swc-neutral-subtle-background-color-default);\n\n --uxc-positive-text: var(--s2-content-positive);\n --uxc-notice-text: var(--s2-content-notice);\n --uxc-negative-text: var(--s2-content-negative);\n --uxc-informative-text: var(--s2-content-informative);\n --uxc-accent-text: var(--s2-content-accent);\n\n --uxc-nav-rail-width: 58px;\n --uxc-thread-header-height: var(--swc-component-height-400);\n --uxc-content-max-width: 800px;\n\n --slicc-warm-bg: color-mix(in oklch, var(--s2-gray-50) 94%, var(--slicc-cone) 6%);\n --slicc-brand-gradient: linear-gradient(\n 90deg,\n var(--slicc-cone) 0%,\n var(--slicc-scoop-blue) 50%,\n var(--slicc-scoop-purple) 100%\n );\n}\n\n:where(:root) {\n color-scheme: dark;\n}\n:where(:root.theme-light, :root:has(body[data-theme="light"])) {\n color-scheme: light;\n}\n\n.theme-light .tok-keyword,\n:root:where(:has(body[data-theme="light"])) .tok-keyword {\n color: var(--swc-purple-1000);\n}\n.theme-light .tok-string,\n:root:where(:has(body[data-theme="light"])) .tok-string {\n color: var(--swc-green-1000);\n}\n.theme-light .tok-number,\n:root:where(:has(body[data-theme="light"])) .tok-number {\n color: var(--swc-orange-1000);\n}\n.theme-light .tok-comment,\n:root:where(:has(body[data-theme="light"])) .tok-comment {\n color: var(--s2-content-secondary);\n}\n.theme-light .tok-punct,\n:root:where(:has(body[data-theme="light"])) .tok-punct {\n color: var(--swc-blue-1000);\n}\n.theme-light .tok-fn,\n:root:where(:has(body[data-theme="light"])) .tok-fn {\n color: var(--swc-cyan-1000);\n}\n\n.theme-light .s2-tooltip,\n:root:where(:has(body[data-theme="light"])) .s2-tooltip {\n background: var(--s2-gray-900);\n color: var(--s2-gray-25);\n}\n\n.theme-light ::-webkit-scrollbar-thumb,\n:root:where(:has(body[data-theme="light"])) ::-webkit-scrollbar-thumb {\n background: var(--s2-gray-300);\n}\n.theme-light ::-webkit-scrollbar-thumb:hover,\n:root:where(:has(body[data-theme="light"])) ::-webkit-scrollbar-thumb:hover {\n background: var(--s2-gray-400);\n}\n\n.sprinkle-content {\n padding: var(--s2-spacing-200);\n}\n\n.sprinkle-heading {\n font-size: var(--s2-font-size-300);\n font-weight: 700;\n color: var(--s2-gray-900);\n margin: 0 0 var(--s2-spacing-100);\n line-height: 1.3;\n letter-spacing: 0;\n}\n.sprinkle-heading--m {\n font-size: var(--s2-font-size-200);\n}\n.sprinkle-heading--s {\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-label {\n font-size: var(--s2-font-size-75);\n font-weight: 600;\n color: var(--s2-gray-600);\n line-height: 1.3;\n margin: 0;\n}\n.sprinkle-body {\n font-size: var(--s2-font-size-100);\n font-weight: 400;\n color: var(--s2-content-default);\n line-height: 1.5;\n}\n.sprinkle-detail {\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-600);\n line-height: 1.3;\n}\n\n.sprinkle-icon {\n display: inline-block;\n width: 16px;\n height: 16px;\n stroke-width: 2;\n vertical-align: middle;\n}\n.sprinkle-icon svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n.sprinkle-icon--xs {\n width: 12px;\n height: 12px;\n}\n.sprinkle-icon--s {\n width: 14px;\n height: 14px;\n}\n.sprinkle-icon--m {\n width: 16px;\n height: 16px;\n}\n.sprinkle-icon--l {\n width: 20px;\n height: 20px;\n}\n.sprinkle-icon--xl {\n width: 24px;\n height: var(--swc-component-height-75);\n}\n\n.sprinkle-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--s2-spacing-75);\n height: var(--swc-component-height-100);\n padding: 0 var(--s2-spacing-300);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-xl);\n background: var(--s2-gray-50);\n color: var(--s2-gray-800);\n font-size: var(--s2-font-size-100);\n font-weight: 700;\n font-family: var(--s2-font-family);\n cursor: default;\n box-shadow: var(--s2-shadow-container);\n transition:\n background var(--s2-transition-default),\n border-color var(--s2-transition-default),\n transform var(--s2-transition-default);\n}\n.sprinkle-btn:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-btn:active {\n transform: scale(0.98);\n}\n.sprinkle-btn:disabled,\n.sprinkle-btn[disabled] {\n opacity: 0.4;\n pointer-events: none;\n}\n\n.sprinkle-btn--primary {\n background: var(--s2-accent);\n color: var(--swc-white);\n border-color: transparent;\n border-radius: var(--s2-radius-pill);\n box-shadow: none;\n}\n.sprinkle-btn--primary:hover {\n background: var(--s2-accent-hover);\n}\n.sprinkle-btn--primary:active {\n background: var(--s2-accent-down);\n transform: scale(0.98);\n}\n\n.sprinkle-btn--secondary {\n background: var(--s2-gray-50);\n border-color: var(--s2-gray-200);\n color: var(--s2-gray-800);\n}\n.sprinkle-btn--secondary:hover {\n background: var(--s2-gray-100);\n}\n\n.sprinkle-btn--negative {\n background: var(--s2-negative);\n color: var(--swc-white);\n border-color: transparent;\n border-radius: var(--s2-radius-pill);\n box-shadow: none;\n}\n.sprinkle-btn--negative:hover {\n background: var(--swc-negative-background-color-hover);\n}\n\n.sprinkle-btn--quiet {\n background: transparent;\n border-color: transparent;\n box-shadow: none;\n color: var(--s2-gray-800);\n}\n.sprinkle-btn--quiet:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-btn-group {\n display: inline-flex;\n gap: var(--s2-spacing-100);\n}\n\n.sprinkle-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-50);\n padding: var(--s2-spacing-50) var(--s2-spacing-100);\n border-radius: var(--s2-radius-default);\n font-size: var(--s2-font-size-75);\n font-weight: 700;\n line-height: var(--s2-line-height-75);\n white-space: nowrap;\n background: var(--s2-gray-800);\n color: var(--s2-gray-25);\n}\n\n.sprinkle-badge--positive {\n background: var(--s2-positive);\n color: var(--swc-white);\n}\n.sprinkle-badge--negative {\n background: var(--s2-negative);\n color: var(--swc-white);\n}\n.sprinkle-badge--notice {\n background: var(--s2-notice);\n color: var(--swc-black);\n}\n.sprinkle-badge--informative {\n background: var(--s2-informative);\n color: var(--swc-white);\n}\n.sprinkle-badge--accent {\n background: var(--s2-accent);\n color: var(--swc-white);\n}\n\n.sprinkle-badge--subtle {\n background: var(--uxc-neutral-subtle-bg);\n color: var(--s2-gray-700);\n}\n.sprinkle-badge--subtle.sprinkle-badge--positive {\n background: var(--uxc-positive-subtle-bg);\n color: var(--uxc-positive-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--negative {\n background: var(--uxc-negative-subtle-bg);\n color: var(--uxc-negative-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--notice {\n background: var(--uxc-notice-subtle-bg);\n color: var(--uxc-notice-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--informative {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--accent {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n\n.sprinkle-badge--yellow {\n background: var(--uxc-yellow-subtle-bg);\n color: var(--uxc-yellow-subtle-text);\n}\n.sprinkle-badge--purple {\n background: var(--uxc-purple-subtle-bg);\n color: var(--uxc-purple-subtle-text);\n}\n.sprinkle-badge--cyan {\n background: var(--uxc-cyan-subtle-bg);\n color: var(--uxc-cyan-subtle-text);\n}\n.sprinkle-badge--magenta {\n background: var(--uxc-magenta-subtle-bg);\n color: var(--uxc-magenta-subtle-text);\n}\n.sprinkle-badge--indigo {\n background: var(--uxc-indigo-subtle-bg);\n color: var(--uxc-indigo-subtle-text);\n}\n.sprinkle-badge--gray {\n background: var(--uxc-gray-subtle-bg);\n color: var(--uxc-gray-subtle-text);\n}\n\n.sprinkle-badge--outline {\n background: transparent;\n color: var(--s2-content-secondary);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--s2-border-default);\n}\n.sprinkle-badge--outline.sprinkle-badge--positive {\n color: var(--s2-content-positive);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-positive-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--negative {\n color: var(--s2-content-negative);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-negative-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--notice {\n color: var(--s2-content-notice);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-notice-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--informative {\n color: var(--s2-content-informative);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-informative-visual-color);\n}\n\n.sprinkle-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-pill);\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-800);\n background: var(--s2-bg-layer-1);\n cursor: default;\n transition: background var(--s2-transition-default);\n}\n.sprinkle-chip:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-chip svg {\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n}\n\n.sprinkle-status-light {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-status-light::before {\n content: "";\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--s2-content-tertiary);\n flex-shrink: 0;\n}\n.sprinkle-status-light--positive::before {\n background: var(--swc-positive-visual-color);\n}\n.sprinkle-status-light--negative::before {\n background: var(--swc-negative-visual-color);\n}\n.sprinkle-status-light--notice::before {\n background: var(--swc-notice-visual-color);\n}\n.sprinkle-status-light--informative::before {\n background: var(--swc-informative-visual-color);\n}\n\n.sprinkle-status-light--m {\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-600);\n}\n.sprinkle-status-light--m::before {\n width: 10px;\n height: 10px;\n}\n\n.sprinkle-card {\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-300);\n border-radius: var(--s2-radius-xl);\n padding: var(--s2-spacing-400);\n box-shadow: var(--s2-shadow-container);\n transition: box-shadow var(--s2-transition-default);\n}\n.sprinkle-card:hover {\n box-shadow: var(--s2-shadow-elevated);\n}\n\n.sprinkle-stat-card {\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-300);\n border-radius: var(--s2-radius-xl);\n padding: var(--s2-spacing-200) var(--s2-spacing-300);\n text-align: center;\n box-shadow: var(--s2-shadow-container);\n transition: box-shadow var(--s2-transition-default);\n}\n.sprinkle-stat-card:hover {\n box-shadow: var(--s2-shadow-elevated);\n}\n.sprinkle-stat-card .value {\n font-size: var(--s2-font-size-500);\n font-weight: 700;\n color: var(--s2-content-default);\n line-height: 1.2;\n}\n.sprinkle-stat-card .label {\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-600);\n margin-top: var(--s2-spacing-50);\n}\n\n.sprinkle-action-card {\n display: flex;\n flex-direction: column;\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-xl);\n overflow: hidden;\n box-shadow: var(--s2-shadow-container);\n}\n.sprinkle-action-card__header {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n padding: var(--s2-spacing-300) var(--s2-spacing-400);\n font-weight: 700;\n font-size: var(--s2-font-size-200);\n line-height: 1.3;\n color: var(--s2-gray-900);\n}\n.sprinkle-action-card__header .sprinkle-badge {\n margin-left: auto;\n}\n.sprinkle-action-card__title-group {\n display: flex;\n flex-direction: column;\n gap: var(--swc-spacing-50);\n min-width: 0;\n}\n\n.sprinkle-action-card__icon {\n width: var(--swc-component-height-200);\n height: var(--swc-component-height-200);\n min-width: var(--swc-component-height-200);\n border-radius: var(--s2-radius-default);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-300);\n flex-shrink: 0;\n}\n.sprinkle-action-card__icon--yellow {\n background: var(--uxc-yellow-subtle-bg);\n color: var(--uxc-yellow-subtle-text);\n}\n.sprinkle-action-card__icon--blue {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n.sprinkle-action-card__icon--green {\n background: var(--uxc-positive-subtle-bg);\n color: var(--uxc-positive-subtle-text);\n}\n.sprinkle-action-card__icon--indigo {\n background: var(--uxc-indigo-subtle-bg);\n color: var(--uxc-indigo-subtle-text);\n}\n\n.sprinkle-action-card__meta {\n font-size: var(--s2-font-size-75);\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n\n.sprinkle-action-card__header-actions {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n margin-left: auto;\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-800);\n}\n.sprinkle-action-card__header-actions a {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-50);\n color: var(--s2-gray-800);\n text-decoration: none;\n}\n.sprinkle-action-card__body {\n padding: 0 var(--s2-spacing-400) var(--s2-spacing-300);\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-700);\n line-height: 1.5;\n}\n.sprinkle-action-card__actions {\n display: flex;\n gap: var(--s2-spacing-100);\n justify-content: flex-end;\n padding: var(--s2-spacing-200) var(--s2-spacing-400);\n border-top: var(--swc-border-width-100) solid var(--s2-gray-200);\n}\n\nbody\n > :is(.sprinkle-card, .sprinkle-stat-card, .sprinkle-action-card):not(\n :has(~ :not(script, style, template)),\n :not(script, style, template) ~ *\n ),\nbody\n > :is(.sprinkle-card, .sprinkle-stat-card, .sprinkle-action-card):not(\n :has(~ :not(script, style, template)),\n :not(script, style, template) ~ *\n ):hover {\n background: transparent;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n}\n\n.sprinkle-list-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-300);\n padding: var(--s2-spacing-300) var(--s2-spacing-400);\n border-top: var(--swc-border-width-100) solid var(--s2-gray-100);\n min-height: var(--swc-component-height-400);\n}\n.sprinkle-list-item__icon {\n width: var(--swc-component-height-200);\n height: var(--swc-component-height-200);\n min-width: var(--swc-component-height-200);\n border-radius: var(--s2-radius-default);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-200);\n flex-shrink: 0;\n background: var(--s2-gray-75);\n}\n.sprinkle-list-item__content {\n flex: 1;\n min-width: 0;\n}\n.sprinkle-list-item__title {\n font-size: var(--s2-font-size-100);\n font-weight: 700;\n color: var(--s2-gray-900);\n line-height: 1.3;\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n}\n.sprinkle-list-item__subtitle {\n font-size: var(--s2-font-size-100);\n font-weight: 400;\n color: var(--s2-gray-600);\n line-height: 1.5;\n margin-top: var(--swc-spacing-50);\n}\n.sprinkle-list-item__end {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n flex-shrink: 0;\n}\n\n.sprinkle-table {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--s2-font-size-100);\n border: var(--swc-border-width-100) solid var(--s2-gray-100);\n border-radius: var(--s2-radius-default);\n overflow: hidden;\n}\n.sprinkle-table th {\n text-align: left;\n padding: var(--s2-spacing-75) var(--s2-spacing-300);\n background: transparent;\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-100);\n color: var(--s2-gray-700);\n font-weight: 700;\n font-size: var(--s2-font-size-100);\n line-height: 1.3;\n height: var(--swc-component-height-100);\n box-sizing: border-box;\n}\n.sprinkle-table td {\n padding: var(--s2-spacing-200) var(--s2-spacing-300);\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-100);\n color: var(--s2-content-default);\n font-size: var(--s2-font-size-100);\n line-height: 1.5;\n box-sizing: border-box;\n}\n.sprinkle-table tr:last-child td {\n border-bottom: none;\n}\n.sprinkle-table tr:hover td {\n background: var(--s2-gray-50);\n}\n\n.sprinkle-task-group {\n background: var(--s2-gray-50);\n border-radius: var(--s2-radius-default);\n padding: var(--s2-spacing-300);\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-100);\n}\n.sprinkle-task-group__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.sprinkle-task-group__title {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n font-size: var(--s2-font-size-200);\n font-weight: 700;\n color: var(--s2-gray-1000);\n}\n.sprinkle-task-group__title svg {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n}\n.sprinkle-task-group__meta {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-300);\n font-size: var(--s2-font-size-75);\n color: var(--s2-gray-600);\n}\n.sprinkle-task-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n height: var(--swc-component-height-75);\n padding-left: var(--s2-spacing-50);\n font-size: var(--s2-font-size-100);\n line-height: var(--s2-line-height-100);\n}\n.sprinkle-task-item--done {\n color: var(--s2-gray-600);\n}\n.sprinkle-task-item--pending {\n color: var(--s2-gray-800);\n}\n.sprinkle-task-item__check {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border-radius: 50%;\n border: var(--swc-border-width-200) solid var(--s2-gray-400);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.sprinkle-task-item--done .sprinkle-task-item__check {\n background: var(--s2-positive);\n border-color: var(--s2-positive);\n}\n.sprinkle-task-item--done .sprinkle-task-item__check::after {\n content: "";\n width: 8px;\n height: 5px;\n border-left: var(--swc-border-width-200) solid var(--swc-white);\n border-bottom: var(--swc-border-width-200) solid var(--swc-white);\n transform: rotate(-45deg) translateY(-1px);\n}\n\n.sprinkle-progress-bar {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-75);\n --_bar-color: var(--swc-accent-visual-color);\n}\n.sprinkle-progress-bar--positive {\n --_bar-color: var(--swc-positive-visual-color);\n}\n.sprinkle-progress-bar--negative {\n --_bar-color: var(--swc-negative-visual-color);\n}\n.sprinkle-progress-bar--notice {\n --_bar-color: var(--swc-notice-visual-color);\n}\n.sprinkle-progress-bar--informative {\n --_bar-color: var(--swc-informative-visual-color);\n}\n.sprinkle-progress-bar__header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-progress-bar__header .label {\n font-weight: 400;\n}\n.sprinkle-progress-bar__header .value {\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n.sprinkle-progress-bar__track {\n height: var(--swc-progress-bar-thickness-small);\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n position: relative;\n}\n.sprinkle-progress-bar__track .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n\n.sprinkle-progress-bar__track::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-progress-bar__track:has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)) {\n height: var(--swc-progress-bar-thickness-small);\n width: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n flex-direction: row;\n position: relative;\n}\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)) > .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track))::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)):has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-meter {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-75);\n --_meter-color: var(--swc-informative-visual-color);\n}\n.sprinkle-meter--positive {\n --_meter-color: var(--swc-positive-visual-color);\n}\n.sprinkle-meter--notice {\n --_meter-color: var(--swc-notice-visual-color);\n}\n.sprinkle-meter--negative {\n --_meter-color: var(--swc-negative-visual-color);\n}\n.sprinkle-meter__header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-meter__header .label {\n font-weight: 400;\n}\n.sprinkle-meter__header .value {\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n.sprinkle-meter__track {\n height: var(--swc-progress-bar-thickness-small);\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n position: relative;\n}\n.sprinkle-meter__track .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter__track::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter__track:has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-meter:not(:has(.sprinkle-meter__track)) {\n height: var(--swc-progress-bar-thickness-small);\n width: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n flex-direction: row;\n position: relative;\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track)) > .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track))::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track)):has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-kv-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.sprinkle-kv-list li {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--s2-spacing-100) 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-subtle);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-kv-list li:last-child {\n border-bottom: none;\n}\n.sprinkle-kv-list .key {\n color: var(--s2-gray-600);\n font-weight: 400;\n}\n.sprinkle-kv-list .value {\n color: var(--s2-content-default);\n font-weight: 700;\n}\ndl.sprinkle-kv-list {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0;\n font-size: var(--s2-font-size-75);\n}\ndl.sprinkle-kv-list dt,\ndl.sprinkle-kv-list dd {\n padding: var(--s2-spacing-100) 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-subtle);\n margin: 0;\n}\ndl.sprinkle-kv-list dt {\n color: var(--s2-gray-600);\n font-weight: 400;\n padding-right: var(--s2-spacing-300);\n}\ndl.sprinkle-kv-list dd {\n color: var(--s2-content-default);\n font-weight: 700;\n text-align: right;\n}\ndl.sprinkle-kv-list dt:last-of-type,\ndl.sprinkle-kv-list dd:last-of-type {\n border-bottom: none;\n}\n\n.sprinkle-text-field {\n width: 100%;\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n font-family: var(--s2-font-family);\n color: var(--s2-content-default);\n background: var(--s2-bg-layer-1);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-default);\n transition: border-color var(--s2-transition-default);\n box-sizing: border-box;\n}\n.sprinkle-text-field::placeholder {\n color: var(--s2-content-secondary);\n}\n.sprinkle-text-field:hover {\n border-color: var(--s2-gray-700);\n}\n.sprinkle-text-field:focus {\n border-color: var(--s2-gray-800);\n}\n\n.sprinkle-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: var(--s2-spacing-200);\n}\n.sprinkle-stack {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-200);\n}\n.sprinkle-row {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n}\n\n.sprinkle-divider {\n border: none;\n border-top: var(--swc-border-width-100) solid var(--s2-border-subtle);\n margin: var(--s2-spacing-200) 0;\n}\n.sprinkle-divider--medium {\n border-top-width: var(--swc-border-width-200);\n border-top-color: var(--s2-border-default);\n margin: var(--s2-spacing-300) 0;\n}\n\n.sprinkle-empty-state {\n text-align: center;\n padding: var(--s2-spacing-500) var(--s2-spacing-300);\n color: var(--s2-content-tertiary);\n font-size: var(--s2-font-size-100);\n}\n\n.sprinkle-toolbar {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n min-height: var(--swc-component-height-200);\n flex-shrink: 0;\n}\n.sprinkle-toolbar__start {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n}\n.sprinkle-toolbar__center {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n flex: 1;\n justify-content: center;\n}\n.sprinkle-toolbar__end {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n margin-left: auto;\n}\n\n.sprinkle-tabs {\n display: flex;\n gap: 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n flex-shrink: 0;\n overflow-x: auto;\n}\n.sprinkle-tabs__tab {\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n font-weight: 500;\n color: var(--s2-gray-600);\n background: none;\n border: none;\n border-bottom: var(--swc-border-width-200) solid transparent;\n cursor: default;\n white-space: nowrap;\n transition:\n color var(--s2-transition-default),\n border-color var(--s2-transition-default);\n font-family: var(--s2-font-family);\n}\n.sprinkle-tabs__tab:hover {\n color: var(--s2-gray-800);\n}\n.sprinkle-tabs__tab--active {\n color: var(--s2-gray-900);\n border-bottom-color: var(--s2-gray-900);\n font-weight: 700;\n}\n.sprinkle-tabs__panel {\n display: none;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n.sprinkle-tabs__panel--active {\n display: flex;\n flex-direction: column;\n}\n\n.sprinkle-sidebar {\n display: flex;\n gap: 0;\n min-height: 0;\n flex: 1;\n}\n.sprinkle-sidebar__nav {\n width: 240px;\n min-width: 240px;\n overflow-y: auto;\n border-right: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n padding: var(--s2-spacing-200) 0;\n}\n.sprinkle-sidebar__nav-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-700);\n cursor: default;\n border-radius: 0;\n transition: background var(--s2-transition-default);\n}\n.sprinkle-sidebar__nav-item:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-sidebar__nav-item--active {\n background: var(--s2-gray-800);\n color: var(--s2-gray-25);\n font-weight: 600;\n}\n.sprinkle-sidebar__nav-label {\n padding: var(--s2-spacing-200) var(--s2-spacing-200) var(--s2-spacing-50);\n font-size: var(--s2-font-size-75);\n font-weight: 700;\n color: var(--s2-gray-600);\n}\n.sprinkle-sidebar__main {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n padding: var(--s2-spacing-200);\n}\n\n.sprinkle-dialog {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n}\n.sprinkle-dialog[hidden] {\n display: none;\n}\n.sprinkle-dialog__backdrop {\n position: absolute;\n inset: 0;\n background: var(--swc-overlay-color);\n opacity: var(--swc-overlay-opacity-light);\n}\n.sprinkle-dialog__content {\n position: relative;\n background: var(--s2-gray-25);\n border-radius: var(--s2-radius-xl);\n box-shadow: var(--s2-shadow-elevated);\n padding: var(--s2-spacing-400);\n max-width: min(560px, calc(100% - 32px));\n max-height: calc(100% - 64px);\n overflow-y: auto;\n min-width: 280px;\n}\n.sprinkle-dialog__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--s2-spacing-300);\n}\n.sprinkle-dialog__title {\n font-size: var(--s2-font-size-200);\n font-weight: 700;\n color: var(--s2-content-default);\n}\n.sprinkle-dialog__close {\n width: var(--swc-component-height-100);\n height: var(--swc-component-height-100);\n border-radius: var(--s2-radius-pill);\n border: none;\n background: none;\n color: var(--s2-gray-600);\n cursor: default;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-300);\n transition: background var(--s2-transition-default);\n}\n.sprinkle-dialog__close:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-dialog__footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--s2-spacing-100);\n margin-top: var(--s2-spacing-300);\n}\n\n.sprinkle-collapsible__header {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n cursor: default;\n font-size: var(--s2-font-size-100);\n font-weight: 600;\n color: var(--s2-content-default);\n background: none;\n border: none;\n width: 100%;\n text-align: left;\n border-radius: var(--s2-radius-default);\n transition: background var(--s2-transition-default);\n font-family: var(--s2-font-family);\n}\n.sprinkle-collapsible__header:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-collapsible__chevron {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n transition: transform var(--swc-animation-duration-200) var(--swc-animation-ease-in-out);\n flex-shrink: 0;\n}\n.sprinkle-collapsible__chevron::before {\n content: "";\n width: var(--s2-spacing-75);\n height: var(--s2-spacing-75);\n border-right: var(--swc-border-width-200) solid var(--s2-content-tertiary);\n border-bottom: var(--swc-border-width-200) solid var(--s2-content-tertiary);\n transform: translateX(calc(-1 * var(--swc-spacing-50))) rotate(-45deg);\n}\n.sprinkle-collapsible--open .sprinkle-collapsible__chevron {\n transform: rotate(90deg);\n}\n.sprinkle-collapsible__body {\n display: none;\n padding: var(--s2-spacing-100) var(--s2-spacing-200) var(--s2-spacing-200)\n calc(var(--s2-spacing-200) + 16px + var(--s2-spacing-100));\n}\n.sprinkle-collapsible--open .sprinkle-collapsible__body {\n display: block;\n}\n\n.sprinkle-split {\n display: flex;\n gap: 0;\n min-height: 0;\n flex: 1;\n}\n.sprinkle-split > * {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n}\n.sprinkle-split > :not(:last-child) {\n border-right: var(--swc-border-width-100) solid var(--s2-border-default);\n}\n.sprinkle-split--vertical {\n flex-direction: column;\n}\n.sprinkle-split--vertical > :not(:last-child) {\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n}\n\n.sprinkle-canvas {\n position: relative;\n width: 100%;\n overflow: hidden;\n border-radius: var(--s2-radius-l);\n background: var(--s2-bg-layer-1);\n}\n.sprinkle-canvas--16x9 {\n aspect-ratio: 16 / 9;\n}\n.sprinkle-canvas--4x3 {\n aspect-ratio: 4 / 3;\n}\n.sprinkle-canvas--1x1 {\n aspect-ratio: 1 / 1;\n}\n.sprinkle-canvas svg,\n.sprinkle-canvas canvas {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.sprinkle-density-compact .sprinkle-content {\n padding: var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-heading {\n font-size: var(--s2-font-size-100);\n margin-bottom: var(--s2-spacing-50);\n}\n.sprinkle-density-compact .sprinkle-heading--m {\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-density-compact .sprinkle-body {\n font-size: var(--s2-font-size-75);\n line-height: 1.4;\n}\n.sprinkle-density-compact .sprinkle-detail {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-table th {\n padding: var(--s2-spacing-50) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n height: var(--swc-component-height-75);\n}\n.sprinkle-density-compact .sprinkle-table td {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-btn {\n height: var(--swc-component-height-75);\n font-size: var(--s2-font-size-75);\n padding: 0 var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-badge {\n font-size: var(--s2-font-size-75);\n padding: var(--swc-spacing-50) var(--s2-spacing-75);\n}\n.sprinkle-density-compact .sprinkle-card {\n padding: var(--s2-spacing-200);\n}\n.sprinkle-density-compact .sprinkle-list-item {\n padding: var(--s2-spacing-100) var(--s2-spacing-300);\n min-height: var(--swc-component-height-200);\n gap: var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-list-item__icon {\n width: var(--swc-component-height-75);\n height: var(--swc-component-height-75);\n min-width: var(--swc-component-height-75);\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-density-compact .sprinkle-list-item__title {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-list-item__subtitle {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-sidebar__nav-item {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-text-field {\n height: var(--swc-component-height-75);\n font-size: var(--s2-font-size-75);\n padding: var(--s2-spacing-50) var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-tabs__tab {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-kv-list li {\n padding: var(--s2-spacing-75) 0;\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-chip {\n padding: var(--swc-spacing-50) var(--s2-spacing-100);\n font-size: var(--s2-font-size-75);\n}\n\n.sprinkle-density-spacious .sprinkle-content {\n padding: var(--s2-spacing-400);\n}\n.sprinkle-density-spacious .sprinkle-heading {\n font-size: var(--s2-font-size-500);\n margin-bottom: var(--s2-spacing-200);\n}\n.sprinkle-density-spacious .sprinkle-heading--m {\n font-size: var(--s2-font-size-300);\n}\n.sprinkle-density-spacious .sprinkle-body {\n font-size: var(--s2-font-size-200);\n line-height: 1.65;\n}\n.sprinkle-density-spacious .sprinkle-card {\n padding: var(--s2-spacing-500);\n}\n.sprinkle-density-spacious .sprinkle-btn {\n height: var(--swc-component-height-200);\n padding: 0 var(--swc-spacing-350);\n}\n.sprinkle-density-spacious .sprinkle-action-card__body {\n padding: 0 var(--s2-spacing-500) var(--s2-spacing-400);\n font-size: var(--s2-font-size-200);\n}\n\n:is(\n .sprinkle-btn,\n .sprinkle-chip,\n .sprinkle-text-field,\n .sprinkle-tabs__tab,\n .sprinkle-sidebar__nav-item,\n .sprinkle-dialog__close,\n .sprinkle-collapsible__header,\n .sprinkle-action-card__header-actions a\n):focus-visible {\n outline: var(--swc-focus-indicator-thickness) solid var(--s2-border-focus);\n outline-offset: var(--swc-focus-ring-gap);\n}\n\n@media (forced-colors: active) {\n :is(\n .sprinkle-btn,\n .sprinkle-chip,\n .sprinkle-text-field,\n .sprinkle-tabs__tab,\n .sprinkle-sidebar__nav-item,\n .sprinkle-dialog__close,\n .sprinkle-collapsible__header,\n .sprinkle-action-card__header-actions a\n ):focus-visible {\n outline-color: Highlight;\n }\n}\n\n.sprinkle-panel {\n container-type: inline-size;\n}\n\n@container (max-width: 400px) {\n .sprinkle-sidebar {\n flex-direction: column;\n }\n .sprinkle-sidebar__nav {\n width: 100%;\n min-width: 0;\n max-height: 200px;\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n }\n .sprinkle-grid {\n grid-template-columns: 1fr;\n }\n .sprinkle-split:not(.sprinkle-split--vertical) {\n flex-direction: column;\n }\n .sprinkle-split:not(.sprinkle-split--vertical) > :not(:last-child) {\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n }\n .sprinkle-toolbar {\n flex-wrap: wrap;\n }\n}\n\n@container (min-width: 600px) {\n .sprinkle-sidebar__nav {\n width: 240px;\n min-width: 240px;\n }\n .sprinkle-grid {\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n }\n}\n';
|
|
55640
|
+
var sprinkle_theme_default = ':root {\n --s2-gray-25: var(--swc-gray-25);\n --s2-gray-50: var(--swc-gray-50);\n --s2-gray-75: var(--swc-gray-75);\n --s2-gray-100: var(--swc-gray-100);\n --s2-gray-200: var(--swc-gray-200);\n --s2-gray-300: var(--swc-gray-300);\n --s2-gray-400: var(--swc-gray-400);\n --s2-gray-500: var(--swc-gray-500);\n --s2-gray-600: var(--swc-gray-600);\n --s2-gray-700: var(--swc-gray-700);\n --s2-gray-800: var(--swc-gray-800);\n --s2-gray-900: var(--swc-gray-900);\n --s2-gray-1000: var(--swc-gray-1000);\n\n --s2-bg-base: var(--swc-background-base-color);\n --s2-bg-layer-1: var(--swc-background-layer-1-color);\n --s2-bg-layer-2: var(--swc-background-layer-2-color);\n --s2-bg-elevated: var(--swc-background-elevated-color);\n --s2-bg-sunken: var(--swc-background-pasteboard-color);\n\n --s2-content-default: var(--swc-neutral-content-color-default);\n --s2-content-secondary: var(--swc-neutral-subdued-content-color-default);\n --s2-content-tertiary: var(--swc-gray-600);\n --s2-content-disabled: var(--swc-disabled-content-color);\n --s2-content-accent: var(--swc-accent-content-color-default);\n --s2-content-negative: var(--swc-negative-content-color-default);\n --s2-content-positive: var(--swc-positive-color-900);\n --s2-content-notice: var(--swc-notice-color-900);\n --s2-content-informative: var(--swc-informative-color-900);\n\n --slicc-cone: #ef7000;\n --slicc-scoop-blue: #3562ff;\n --slicc-scoop-purple: #a962e8;\n --slicc-scoop-teal: #2db9be;\n --slicc-accent: #15d675;\n\n --s2-accent: var(--swc-accent-background-color-default);\n --s2-accent-hover: var(--swc-accent-background-color-hover);\n --s2-accent-down: var(--swc-accent-background-color-down);\n\n --s2-negative: var(--swc-negative-background-color-default);\n --s2-positive: var(--swc-positive-background-color-default);\n --s2-informative: var(--swc-informative-background-color-default);\n --s2-notice: var(--swc-notice-background-color-default);\n\n --s2-border-default: var(--swc-gray-300);\n --s2-border-subtle: var(--swc-gray-200);\n --s2-border-focus: var(--swc-focus-indicator-color);\n\n --s2-font-family:\n adobe-clean-spectrum-vf, "Adobe Clean Spectrum VF", adobe-clean, "Adobe Clean",\n var(--swc-sans-font-family-stack);\n --s2-font-mono: var(--swc-code-font-family-stack);\n\n --s2-font-size-50: var(--swc-font-size-50);\n --s2-font-size-75: var(--swc-font-size-75);\n --s2-font-size-100: var(--swc-font-size-100);\n --s2-font-size-200: var(--swc-font-size-200);\n --s2-font-size-300: var(--swc-font-size-300);\n --s2-font-size-400: var(--swc-font-size-400);\n --s2-font-size-500: var(--swc-font-size-500);\n --s2-font-size-600: var(--swc-font-size-600);\n\n --s2-line-height-50: var(--swc-line-height-font-size-50);\n --s2-line-height-75: var(--swc-line-height-font-size-75);\n --s2-line-height-100: var(--swc-line-height-font-size-100);\n --s2-line-height-200: var(--swc-line-height-font-size-200);\n --s2-line-height-300: var(--swc-line-height-font-size-300);\n\n --s2-spacing-50: var(--swc-spacing-75);\n --s2-spacing-75: var(--swc-spacing-85);\n --s2-spacing-100: var(--swc-spacing-100);\n --s2-spacing-200: var(--swc-spacing-200);\n --s2-spacing-300: var(--swc-spacing-300);\n --s2-spacing-400: var(--swc-spacing-400);\n --s2-spacing-500: var(--swc-spacing-500);\n --s2-spacing-600: var(--swc-spacing-600);\n\n --s2-radius-s: var(--swc-corner-radius-small-default);\n --s2-radius-default: var(--swc-corner-radius-medium-default);\n --s2-radius-l: var(--swc-corner-radius-large-default);\n --s2-radius-xl: var(--swc-corner-radius-extra-large-default);\n --s2-radius-pill: 9999px;\n\n --s2-shadow-elevated: var(--swc-drop-shadow-elevated);\n --s2-shadow-container: var(--swc-drop-shadow-emphasized);\n\n --s2-transition-default: var(--swc-animation-duration-100) var(--swc-animation-ease-in-out);\n\n --s2-header-height: var(--swc-component-height-400);\n\n --uxc-yellow-subtle-bg: var(--swc-yellow-subtle-background-color-default);\n --uxc-yellow-subtle-text: var(--swc-yellow-1000);\n --uxc-purple-subtle-bg: var(--swc-purple-subtle-background-color-default);\n --uxc-purple-subtle-text: var(--swc-purple-1000);\n --uxc-cyan-subtle-bg: var(--swc-cyan-subtle-background-color-default);\n --uxc-cyan-subtle-text: var(--swc-cyan-1000);\n --uxc-magenta-subtle-bg: var(--swc-magenta-subtle-background-color-default);\n --uxc-magenta-subtle-text: var(--swc-magenta-1000);\n --uxc-indigo-subtle-bg: var(--swc-indigo-subtle-background-color-default);\n --uxc-indigo-subtle-text: var(--swc-indigo-1000);\n --uxc-gray-subtle-bg: var(--swc-gray-subtle-background-color-default);\n --uxc-gray-subtle-text: var(--swc-neutral-content-color-default);\n --uxc-positive-subtle-bg: var(--swc-positive-subtle-background-color-default);\n --uxc-positive-subtle-text: var(--swc-positive-color-1000);\n --uxc-notice-subtle-bg: var(--swc-notice-subtle-background-color-default);\n --uxc-notice-subtle-text: var(--swc-notice-color-1000);\n --uxc-negative-subtle-bg: var(--swc-negative-subtle-background-color-default);\n --uxc-negative-subtle-text: var(--swc-negative-color-1000);\n --uxc-accent-subtle-bg: var(--swc-accent-subtle-background-color-default);\n --uxc-accent-subtle-text: var(--swc-accent-color-1000);\n --uxc-neutral-subtle-bg: var(--swc-neutral-subtle-background-color-default);\n\n --uxc-positive-text: var(--s2-content-positive);\n --uxc-notice-text: var(--s2-content-notice);\n --uxc-negative-text: var(--s2-content-negative);\n --uxc-informative-text: var(--s2-content-informative);\n --uxc-accent-text: var(--s2-content-accent);\n\n --uxc-nav-rail-width: 58px;\n --uxc-thread-header-height: var(--swc-component-height-400);\n --uxc-content-max-width: 800px;\n\n --slicc-warm-bg: color-mix(in oklch, var(--s2-gray-50) 94%, var(--slicc-cone) 6%);\n --slicc-brand-gradient: linear-gradient(\n 90deg,\n var(--slicc-cone) 0%,\n var(--slicc-scoop-blue) 50%,\n var(--slicc-scoop-purple) 100%\n );\n}\n\n:where(:root) {\n color-scheme: dark;\n}\n:where(:root.theme-light, :root:has(body[data-theme="light"])) {\n color-scheme: light;\n}\n\n.theme-light .tok-keyword,\n:root:where(:has(body[data-theme="light"])) .tok-keyword {\n color: var(--swc-purple-1000);\n}\n.theme-light .tok-string,\n:root:where(:has(body[data-theme="light"])) .tok-string {\n color: var(--swc-green-1000);\n}\n.theme-light .tok-number,\n:root:where(:has(body[data-theme="light"])) .tok-number {\n color: var(--swc-orange-1000);\n}\n.theme-light .tok-comment,\n:root:where(:has(body[data-theme="light"])) .tok-comment {\n color: var(--s2-content-secondary);\n}\n.theme-light .tok-punct,\n:root:where(:has(body[data-theme="light"])) .tok-punct {\n color: var(--swc-blue-1000);\n}\n.theme-light .tok-fn,\n:root:where(:has(body[data-theme="light"])) .tok-fn {\n color: var(--swc-cyan-1000);\n}\n\n.theme-light .s2-tooltip,\n:root:where(:has(body[data-theme="light"])) .s2-tooltip {\n background: var(--s2-gray-900);\n color: var(--s2-gray-25);\n}\n\n.theme-light ::-webkit-scrollbar-thumb,\n:root:where(:has(body[data-theme="light"])) ::-webkit-scrollbar-thumb {\n background: var(--s2-gray-300);\n}\n.theme-light ::-webkit-scrollbar-thumb:hover,\n:root:where(:has(body[data-theme="light"])) ::-webkit-scrollbar-thumb:hover {\n background: var(--s2-gray-400);\n}\n\n.sprinkle-content {\n padding: var(--s2-spacing-200);\n}\n\n.sprinkle-heading {\n font-size: var(--s2-font-size-300);\n font-weight: 700;\n color: var(--s2-gray-900);\n margin: 0 0 var(--s2-spacing-100);\n line-height: 1.3;\n letter-spacing: 0;\n}\n.sprinkle-heading--m {\n font-size: var(--s2-font-size-200);\n}\n.sprinkle-heading--s {\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-label {\n font-size: var(--s2-font-size-75);\n font-weight: 600;\n color: var(--s2-gray-600);\n line-height: 1.3;\n margin: 0;\n}\n.sprinkle-body {\n font-size: var(--s2-font-size-100);\n font-weight: 400;\n color: var(--s2-content-default);\n line-height: 1.5;\n}\n.sprinkle-detail {\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-600);\n line-height: 1.3;\n}\n\n.sprinkle-icon {\n display: inline-block;\n width: 16px;\n height: 16px;\n stroke-width: 2;\n vertical-align: middle;\n}\n.sprinkle-icon svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n.sprinkle-icon--xs {\n width: 12px;\n height: 12px;\n}\n.sprinkle-icon--s {\n width: 14px;\n height: 14px;\n}\n.sprinkle-icon--m {\n width: 16px;\n height: 16px;\n}\n.sprinkle-icon--l {\n width: 20px;\n height: 20px;\n}\n.sprinkle-icon--xl {\n width: 24px;\n height: var(--swc-component-height-75);\n}\n\n.sprinkle-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--s2-spacing-75);\n height: var(--swc-component-height-100);\n padding: 0 var(--s2-spacing-300);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-xl);\n background: var(--s2-gray-50);\n color: var(--s2-gray-800);\n font-size: var(--s2-font-size-100);\n font-weight: 700;\n font-family: var(--s2-font-family);\n cursor: default;\n box-shadow: var(--s2-shadow-container);\n transition:\n background var(--s2-transition-default),\n border-color var(--s2-transition-default),\n transform var(--s2-transition-default);\n}\n.sprinkle-btn:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-btn:active {\n transform: scale(0.98);\n}\n.sprinkle-btn:disabled,\n.sprinkle-btn[disabled] {\n opacity: 0.4;\n pointer-events: none;\n}\n\n.sprinkle-btn--primary {\n background: var(--s2-accent);\n color: var(--swc-white);\n border-color: transparent;\n border-radius: var(--s2-radius-pill);\n box-shadow: none;\n}\n.sprinkle-btn--primary:hover {\n background: var(--s2-accent-hover);\n}\n.sprinkle-btn--primary:active {\n background: var(--s2-accent-down);\n transform: scale(0.98);\n}\n\n.sprinkle-btn--secondary {\n background: var(--s2-gray-50);\n border-color: var(--s2-gray-200);\n color: var(--s2-gray-800);\n}\n.sprinkle-btn--secondary:hover {\n background: var(--s2-gray-100);\n}\n\n.sprinkle-btn--negative {\n background: var(--s2-negative);\n color: var(--swc-white);\n border-color: transparent;\n border-radius: var(--s2-radius-pill);\n box-shadow: none;\n}\n.sprinkle-btn--negative:hover {\n background: var(--swc-negative-background-color-hover);\n}\n\n.sprinkle-btn--quiet {\n background: transparent;\n border-color: transparent;\n box-shadow: none;\n color: var(--s2-gray-800);\n}\n.sprinkle-btn--quiet:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-btn-group {\n display: inline-flex;\n gap: var(--s2-spacing-100);\n}\n\n.sprinkle-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-50);\n padding: var(--s2-spacing-50) var(--s2-spacing-100);\n border-radius: var(--s2-radius-default);\n font-size: var(--s2-font-size-75);\n font-weight: 700;\n line-height: var(--s2-line-height-75);\n white-space: nowrap;\n background: var(--s2-gray-800);\n color: var(--s2-gray-25);\n}\n\n.sprinkle-badge--positive {\n background: var(--s2-positive);\n color: var(--swc-white);\n}\n.sprinkle-badge--negative {\n background: var(--s2-negative);\n color: var(--swc-white);\n}\n.sprinkle-badge--notice {\n background: var(--s2-notice);\n color: var(--swc-black);\n}\n.sprinkle-badge--informative {\n background: var(--s2-informative);\n color: var(--swc-white);\n}\n.sprinkle-badge--accent {\n background: var(--s2-accent);\n color: var(--swc-white);\n}\n\n.sprinkle-badge--subtle {\n background: var(--uxc-neutral-subtle-bg);\n color: var(--s2-gray-700);\n}\n.sprinkle-badge--subtle.sprinkle-badge--positive {\n background: var(--uxc-positive-subtle-bg);\n color: var(--uxc-positive-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--negative {\n background: var(--uxc-negative-subtle-bg);\n color: var(--uxc-negative-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--notice {\n background: var(--uxc-notice-subtle-bg);\n color: var(--uxc-notice-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--informative {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--accent {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n\n.sprinkle-badge--yellow {\n background: var(--uxc-yellow-subtle-bg);\n color: var(--uxc-yellow-subtle-text);\n}\n.sprinkle-badge--purple {\n background: var(--uxc-purple-subtle-bg);\n color: var(--uxc-purple-subtle-text);\n}\n.sprinkle-badge--cyan {\n background: var(--uxc-cyan-subtle-bg);\n color: var(--uxc-cyan-subtle-text);\n}\n.sprinkle-badge--magenta {\n background: var(--uxc-magenta-subtle-bg);\n color: var(--uxc-magenta-subtle-text);\n}\n.sprinkle-badge--indigo {\n background: var(--uxc-indigo-subtle-bg);\n color: var(--uxc-indigo-subtle-text);\n}\n.sprinkle-badge--gray {\n background: var(--uxc-gray-subtle-bg);\n color: var(--uxc-gray-subtle-text);\n}\n\n.sprinkle-badge--outline {\n background: transparent;\n color: var(--s2-content-secondary);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--s2-border-default);\n}\n.sprinkle-badge--outline.sprinkle-badge--positive {\n color: var(--s2-content-positive);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-positive-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--negative {\n color: var(--s2-content-negative);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-negative-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--notice {\n color: var(--s2-content-notice);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-notice-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--informative {\n color: var(--s2-content-informative);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-informative-visual-color);\n}\n\n.sprinkle-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-pill);\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-800);\n background: var(--s2-bg-layer-1);\n cursor: default;\n transition: background var(--s2-transition-default);\n}\n.sprinkle-chip:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-chip svg {\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n}\n\n.sprinkle-status-light {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-status-light::before {\n content: "";\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--s2-content-tertiary);\n flex-shrink: 0;\n}\n.sprinkle-status-light--positive::before {\n background: var(--swc-positive-visual-color);\n}\n.sprinkle-status-light--negative::before {\n background: var(--swc-negative-visual-color);\n}\n.sprinkle-status-light--notice::before {\n background: var(--swc-notice-visual-color);\n}\n.sprinkle-status-light--informative::before {\n background: var(--swc-informative-visual-color);\n}\n\n.sprinkle-status-light--m {\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-600);\n}\n.sprinkle-status-light--m::before {\n width: 10px;\n height: 10px;\n}\n\n.sprinkle-card {\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-300);\n border-radius: var(--s2-radius-xl);\n padding: var(--s2-spacing-400);\n box-shadow: var(--s2-shadow-container);\n transition: box-shadow var(--s2-transition-default);\n}\n.sprinkle-card:hover {\n box-shadow: var(--s2-shadow-elevated);\n}\n\n.sprinkle-stat-card {\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-300);\n border-radius: var(--s2-radius-xl);\n padding: var(--s2-spacing-200) var(--s2-spacing-300);\n text-align: center;\n box-shadow: var(--s2-shadow-container);\n transition: box-shadow var(--s2-transition-default);\n}\n.sprinkle-stat-card:hover {\n box-shadow: var(--s2-shadow-elevated);\n}\n.sprinkle-stat-card .value {\n font-size: var(--s2-font-size-500);\n font-weight: 700;\n color: var(--s2-content-default);\n line-height: 1.2;\n}\n.sprinkle-stat-card .label {\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-600);\n margin-top: var(--s2-spacing-50);\n}\n\n.sprinkle-action-card {\n display: flex;\n flex-direction: column;\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-xl);\n overflow: hidden;\n box-shadow: var(--s2-shadow-container);\n}\n.sprinkle-action-card__header {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n padding: var(--s2-spacing-300) var(--s2-spacing-400);\n font-weight: 700;\n font-size: var(--s2-font-size-200);\n line-height: 1.3;\n color: var(--s2-gray-900);\n}\n.sprinkle-action-card__header .sprinkle-badge {\n margin-left: auto;\n}\n.sprinkle-action-card__title-group {\n display: flex;\n flex-direction: column;\n gap: var(--swc-spacing-50);\n min-width: 0;\n}\n\n.sprinkle-action-card__icon {\n width: var(--swc-component-height-200);\n height: var(--swc-component-height-200);\n min-width: var(--swc-component-height-200);\n border-radius: var(--s2-radius-default);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-300);\n flex-shrink: 0;\n}\n.sprinkle-action-card__icon--yellow {\n background: var(--uxc-yellow-subtle-bg);\n color: var(--uxc-yellow-subtle-text);\n}\n.sprinkle-action-card__icon--blue {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n.sprinkle-action-card__icon--green {\n background: var(--uxc-positive-subtle-bg);\n color: var(--uxc-positive-subtle-text);\n}\n.sprinkle-action-card__icon--indigo {\n background: var(--uxc-indigo-subtle-bg);\n color: var(--uxc-indigo-subtle-text);\n}\n\n.sprinkle-action-card__meta {\n font-size: var(--s2-font-size-75);\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n\n.sprinkle-action-card__header-actions {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n margin-left: auto;\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-800);\n}\n.sprinkle-action-card__header-actions a {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-50);\n color: var(--s2-gray-800);\n text-decoration: none;\n}\n.sprinkle-action-card__body {\n padding: 0 var(--s2-spacing-400) var(--s2-spacing-300);\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-700);\n line-height: 1.5;\n}\n.sprinkle-action-card__actions {\n display: flex;\n gap: var(--s2-spacing-100);\n justify-content: flex-end;\n padding: var(--s2-spacing-200) var(--s2-spacing-400);\n border-top: var(--swc-border-width-100) solid var(--s2-gray-200);\n}\n\nbody\n > :is(.sprinkle-card, .sprinkle-stat-card, .sprinkle-action-card):not(\n :has(~ :not(script, style, template)),\n :not(script, style, template) ~ *\n ),\nbody\n > :is(.sprinkle-card, .sprinkle-stat-card, .sprinkle-action-card):not(\n :has(~ :not(script, style, template)),\n :not(script, style, template) ~ *\n ):hover {\n background: transparent;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n}\n\n.sprinkle-list-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-300);\n padding: var(--s2-spacing-300) var(--s2-spacing-400);\n border-top: var(--swc-border-width-100) solid var(--s2-gray-100);\n min-height: var(--swc-component-height-400);\n}\n.sprinkle-list-item__icon {\n width: var(--swc-component-height-200);\n height: var(--swc-component-height-200);\n min-width: var(--swc-component-height-200);\n border-radius: var(--s2-radius-default);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-200);\n flex-shrink: 0;\n background: var(--s2-gray-75);\n}\n.sprinkle-list-item__content {\n flex: 1;\n min-width: 0;\n}\n.sprinkle-list-item__title {\n font-size: var(--s2-font-size-100);\n font-weight: 700;\n color: var(--s2-gray-900);\n line-height: 1.3;\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n}\n.sprinkle-list-item__subtitle {\n font-size: var(--s2-font-size-100);\n font-weight: 400;\n color: var(--s2-gray-600);\n line-height: 1.5;\n margin-top: var(--swc-spacing-50);\n}\n.sprinkle-list-item__end {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n flex-shrink: 0;\n}\n\n.sprinkle-table {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--s2-font-size-100);\n border: var(--swc-border-width-100) solid var(--s2-gray-100);\n border-radius: var(--s2-radius-default);\n overflow: hidden;\n}\n.sprinkle-table th {\n text-align: left;\n padding: var(--s2-spacing-75) var(--s2-spacing-300);\n background: transparent;\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-100);\n color: var(--s2-gray-700);\n font-weight: 700;\n font-size: var(--s2-font-size-100);\n line-height: 1.3;\n height: var(--swc-component-height-100);\n box-sizing: border-box;\n}\n.sprinkle-table td {\n padding: var(--s2-spacing-200) var(--s2-spacing-300);\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-100);\n color: var(--s2-content-default);\n font-size: var(--s2-font-size-100);\n line-height: 1.5;\n box-sizing: border-box;\n}\n.sprinkle-density-compact .sprinkle-table th {\n padding: var(--s2-spacing-50) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n height: var(--swc-component-height-75);\n}\n.sprinkle-density-compact .sprinkle-table td {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-table tr:last-child td {\n border-bottom: none;\n}\n.sprinkle-table tr:hover td {\n background: var(--s2-gray-50);\n}\n\n.sprinkle-task-group {\n background: var(--s2-gray-50);\n border-radius: var(--s2-radius-default);\n padding: var(--s2-spacing-300);\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-100);\n}\n.sprinkle-task-group__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.sprinkle-task-group__title {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n font-size: var(--s2-font-size-200);\n font-weight: 700;\n color: var(--s2-gray-1000);\n}\n.sprinkle-task-group__title svg {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n}\n.sprinkle-task-group__meta {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-300);\n font-size: var(--s2-font-size-75);\n color: var(--s2-gray-600);\n}\n.sprinkle-task-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n height: var(--swc-component-height-75);\n padding-left: var(--s2-spacing-50);\n font-size: var(--s2-font-size-100);\n line-height: var(--s2-line-height-100);\n}\n.sprinkle-task-item--done {\n color: var(--s2-gray-600);\n}\n.sprinkle-task-item--pending {\n color: var(--s2-gray-800);\n}\n.sprinkle-task-item__check {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border-radius: 50%;\n border: var(--swc-border-width-200) solid var(--s2-gray-400);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.sprinkle-task-item--done .sprinkle-task-item__check {\n background: var(--s2-positive);\n border-color: var(--s2-positive);\n}\n.sprinkle-task-item--done .sprinkle-task-item__check::after {\n content: "";\n width: 8px;\n height: 5px;\n border-left: var(--swc-border-width-200) solid var(--swc-white);\n border-bottom: var(--swc-border-width-200) solid var(--swc-white);\n transform: rotate(-45deg) translateY(-1px);\n}\n\n.sprinkle-progress-bar {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-75);\n --_bar-color: var(--swc-accent-visual-color);\n}\n.sprinkle-progress-bar--positive {\n --_bar-color: var(--swc-positive-visual-color);\n}\n.sprinkle-progress-bar--negative {\n --_bar-color: var(--swc-negative-visual-color);\n}\n.sprinkle-progress-bar--notice {\n --_bar-color: var(--swc-notice-visual-color);\n}\n.sprinkle-progress-bar--informative {\n --_bar-color: var(--swc-informative-visual-color);\n}\n.sprinkle-progress-bar__header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-progress-bar__header .label {\n font-weight: 400;\n}\n.sprinkle-progress-bar__header .value {\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n.sprinkle-progress-bar__track {\n height: var(--swc-progress-bar-thickness-small);\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n position: relative;\n}\n.sprinkle-progress-bar__track .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n\n.sprinkle-progress-bar__track::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-progress-bar__track:has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)) {\n height: var(--swc-progress-bar-thickness-small);\n width: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n flex-direction: row;\n position: relative;\n}\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track))::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)):has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-meter {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-75);\n --_meter-color: var(--swc-informative-visual-color);\n}\n.sprinkle-meter--positive {\n --_meter-color: var(--swc-positive-visual-color);\n}\n.sprinkle-meter--notice {\n --_meter-color: var(--swc-notice-visual-color);\n}\n.sprinkle-meter--negative {\n --_meter-color: var(--swc-negative-visual-color);\n}\n.sprinkle-meter__header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-meter__header .label {\n font-weight: 400;\n}\n.sprinkle-meter__header .value {\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n.sprinkle-meter__track {\n height: var(--swc-progress-bar-thickness-small);\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n position: relative;\n}\n.sprinkle-meter__track .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter__track::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter__track:has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)) > .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n\n.sprinkle-meter:not(:has(.sprinkle-meter__track)) {\n height: var(--swc-progress-bar-thickness-small);\n width: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n flex-direction: row;\n position: relative;\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track)) > .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track))::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track)):has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-kv-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.sprinkle-kv-list li {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--s2-spacing-100) 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-subtle);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-kv-list li:last-child {\n border-bottom: none;\n}\n.sprinkle-kv-list .key {\n color: var(--s2-gray-600);\n font-weight: 400;\n}\n.sprinkle-kv-list .value {\n color: var(--s2-content-default);\n font-weight: 700;\n}\ndl.sprinkle-kv-list {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0;\n font-size: var(--s2-font-size-75);\n}\ndl.sprinkle-kv-list dt,\ndl.sprinkle-kv-list dd {\n padding: var(--s2-spacing-100) 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-subtle);\n margin: 0;\n}\ndl.sprinkle-kv-list dt {\n color: var(--s2-gray-600);\n font-weight: 400;\n padding-right: var(--s2-spacing-300);\n}\ndl.sprinkle-kv-list dd {\n color: var(--s2-content-default);\n font-weight: 700;\n text-align: right;\n}\ndl.sprinkle-kv-list dt:last-of-type,\ndl.sprinkle-kv-list dd:last-of-type {\n border-bottom: none;\n}\n\n.sprinkle-text-field {\n width: 100%;\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n font-family: var(--s2-font-family);\n color: var(--s2-content-default);\n background: var(--s2-bg-layer-1);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-default);\n transition: border-color var(--s2-transition-default);\n box-sizing: border-box;\n}\n.sprinkle-text-field::placeholder {\n color: var(--s2-content-secondary);\n}\n.sprinkle-text-field:hover {\n border-color: var(--s2-gray-700);\n}\n.sprinkle-text-field:focus {\n border-color: var(--s2-gray-800);\n}\n\n.sprinkle-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: var(--s2-spacing-200);\n}\n.sprinkle-stack {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-200);\n}\n.sprinkle-row {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n}\n\n.sprinkle-divider {\n border: none;\n border-top: var(--swc-border-width-100) solid var(--s2-border-subtle);\n margin: var(--s2-spacing-200) 0;\n}\n.sprinkle-divider--medium {\n border-top-width: var(--swc-border-width-200);\n border-top-color: var(--s2-border-default);\n margin: var(--s2-spacing-300) 0;\n}\n\n.sprinkle-empty-state {\n text-align: center;\n padding: var(--s2-spacing-500) var(--s2-spacing-300);\n color: var(--s2-content-tertiary);\n font-size: var(--s2-font-size-100);\n}\n\n.sprinkle-toolbar {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n min-height: var(--swc-component-height-200);\n flex-shrink: 0;\n}\n.sprinkle-toolbar__start {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n}\n.sprinkle-toolbar__center {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n flex: 1;\n justify-content: center;\n}\n.sprinkle-toolbar__end {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n margin-left: auto;\n}\n\n.sprinkle-tabs {\n display: flex;\n gap: 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n flex-shrink: 0;\n overflow-x: auto;\n}\n.sprinkle-tabs__tab {\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n font-weight: 500;\n color: var(--s2-gray-600);\n background: none;\n border: none;\n border-bottom: var(--swc-border-width-200) solid transparent;\n cursor: default;\n white-space: nowrap;\n transition:\n color var(--s2-transition-default),\n border-color var(--s2-transition-default);\n font-family: var(--s2-font-family);\n}\n.sprinkle-tabs__tab:hover {\n color: var(--s2-gray-800);\n}\n.sprinkle-tabs__tab--active {\n color: var(--s2-gray-900);\n border-bottom-color: var(--s2-gray-900);\n font-weight: 700;\n}\n.sprinkle-tabs__panel {\n display: none;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n.sprinkle-tabs__panel--active {\n display: flex;\n flex-direction: column;\n}\n\n.sprinkle-sidebar {\n display: flex;\n gap: 0;\n min-height: 0;\n flex: 1;\n}\n.sprinkle-sidebar__nav {\n width: 240px;\n min-width: 240px;\n overflow-y: auto;\n border-right: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n padding: var(--s2-spacing-200) 0;\n}\n.sprinkle-sidebar__nav-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-700);\n cursor: default;\n border-radius: 0;\n transition: background var(--s2-transition-default);\n}\n.sprinkle-sidebar__nav-item:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-sidebar__nav-item--active {\n background: var(--s2-gray-800);\n color: var(--s2-gray-25);\n font-weight: 600;\n}\n.sprinkle-sidebar__nav-label {\n padding: var(--s2-spacing-200) var(--s2-spacing-200) var(--s2-spacing-50);\n font-size: var(--s2-font-size-75);\n font-weight: 700;\n color: var(--s2-gray-600);\n}\n.sprinkle-sidebar__main {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n padding: var(--s2-spacing-200);\n}\n\n.sprinkle-dialog {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n}\n.sprinkle-dialog[hidden] {\n display: none;\n}\n.sprinkle-dialog__backdrop {\n position: absolute;\n inset: 0;\n background: var(--swc-overlay-color);\n opacity: var(--swc-overlay-opacity-light);\n}\n.sprinkle-dialog__content {\n position: relative;\n background: var(--s2-gray-25);\n border-radius: var(--s2-radius-xl);\n box-shadow: var(--s2-shadow-elevated);\n padding: var(--s2-spacing-400);\n max-width: min(560px, calc(100% - 32px));\n max-height: calc(100% - 64px);\n overflow-y: auto;\n min-width: 280px;\n}\n.sprinkle-dialog__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--s2-spacing-300);\n}\n.sprinkle-dialog__title {\n font-size: var(--s2-font-size-200);\n font-weight: 700;\n color: var(--s2-content-default);\n}\n.sprinkle-dialog__close {\n width: var(--swc-component-height-100);\n height: var(--swc-component-height-100);\n border-radius: var(--s2-radius-pill);\n border: none;\n background: none;\n color: var(--s2-gray-600);\n cursor: default;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-300);\n transition: background var(--s2-transition-default);\n}\n.sprinkle-dialog__close:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-dialog__footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--s2-spacing-100);\n margin-top: var(--s2-spacing-300);\n}\n\n.sprinkle-collapsible__header {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n cursor: default;\n font-size: var(--s2-font-size-100);\n font-weight: 600;\n color: var(--s2-content-default);\n background: none;\n border: none;\n width: 100%;\n text-align: left;\n border-radius: var(--s2-radius-default);\n transition: background var(--s2-transition-default);\n font-family: var(--s2-font-family);\n}\n.sprinkle-collapsible__header:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-collapsible__chevron {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n transition: transform var(--swc-animation-duration-200) var(--swc-animation-ease-in-out);\n flex-shrink: 0;\n}\n.sprinkle-collapsible__chevron::before {\n content: "";\n width: var(--s2-spacing-75);\n height: var(--s2-spacing-75);\n border-right: var(--swc-border-width-200) solid var(--s2-content-tertiary);\n border-bottom: var(--swc-border-width-200) solid var(--s2-content-tertiary);\n transform: translateX(calc(-1 * var(--swc-spacing-50))) rotate(-45deg);\n}\n.sprinkle-collapsible--open .sprinkle-collapsible__chevron {\n transform: rotate(90deg);\n}\n.sprinkle-collapsible__body {\n display: none;\n padding: var(--s2-spacing-100) var(--s2-spacing-200) var(--s2-spacing-200)\n calc(var(--s2-spacing-200) + 16px + var(--s2-spacing-100));\n}\n.sprinkle-collapsible--open .sprinkle-collapsible__body {\n display: block;\n}\n\n.sprinkle-split {\n display: flex;\n gap: 0;\n min-height: 0;\n flex: 1;\n}\n.sprinkle-split > * {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n}\n.sprinkle-split > :not(:last-child) {\n border-right: var(--swc-border-width-100) solid var(--s2-border-default);\n}\n.sprinkle-split--vertical {\n flex-direction: column;\n}\n.sprinkle-split--vertical > :not(:last-child) {\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n}\n\n.sprinkle-canvas {\n position: relative;\n width: 100%;\n overflow: hidden;\n border-radius: var(--s2-radius-l);\n background: var(--s2-bg-layer-1);\n}\n.sprinkle-canvas--16x9 {\n aspect-ratio: 16 / 9;\n}\n.sprinkle-canvas--4x3 {\n aspect-ratio: 4 / 3;\n}\n.sprinkle-canvas--1x1 {\n aspect-ratio: 1 / 1;\n}\n.sprinkle-canvas svg,\n.sprinkle-canvas canvas {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.sprinkle-density-compact .sprinkle-content {\n padding: var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-heading {\n font-size: var(--s2-font-size-100);\n margin-bottom: var(--s2-spacing-50);\n}\n.sprinkle-density-compact .sprinkle-heading--m {\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-density-compact .sprinkle-body {\n font-size: var(--s2-font-size-75);\n line-height: 1.4;\n}\n.sprinkle-density-compact .sprinkle-detail {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-btn {\n height: var(--swc-component-height-75);\n font-size: var(--s2-font-size-75);\n padding: 0 var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-badge {\n font-size: var(--s2-font-size-75);\n padding: var(--swc-spacing-50) var(--s2-spacing-75);\n}\n.sprinkle-density-compact .sprinkle-card {\n padding: var(--s2-spacing-200);\n}\n.sprinkle-density-compact .sprinkle-list-item {\n padding: var(--s2-spacing-100) var(--s2-spacing-300);\n min-height: var(--swc-component-height-200);\n gap: var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-list-item__icon {\n width: var(--swc-component-height-75);\n height: var(--swc-component-height-75);\n min-width: var(--swc-component-height-75);\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-density-compact .sprinkle-list-item__title {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-list-item__subtitle {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-sidebar__nav-item {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-text-field {\n height: var(--swc-component-height-75);\n font-size: var(--s2-font-size-75);\n padding: var(--s2-spacing-50) var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-tabs__tab {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-kv-list li {\n padding: var(--s2-spacing-75) 0;\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-chip {\n padding: var(--swc-spacing-50) var(--s2-spacing-100);\n font-size: var(--s2-font-size-75);\n}\n\n.sprinkle-density-spacious .sprinkle-content {\n padding: var(--s2-spacing-400);\n}\n.sprinkle-density-spacious .sprinkle-heading {\n font-size: var(--s2-font-size-500);\n margin-bottom: var(--s2-spacing-200);\n}\n.sprinkle-density-spacious .sprinkle-heading--m {\n font-size: var(--s2-font-size-300);\n}\n.sprinkle-density-spacious .sprinkle-body {\n font-size: var(--s2-font-size-200);\n line-height: 1.65;\n}\n.sprinkle-density-spacious .sprinkle-card {\n padding: var(--s2-spacing-500);\n}\n.sprinkle-density-spacious .sprinkle-btn {\n height: var(--swc-component-height-200);\n padding: 0 var(--swc-spacing-350);\n}\n.sprinkle-density-spacious .sprinkle-action-card__body {\n padding: 0 var(--s2-spacing-500) var(--s2-spacing-400);\n font-size: var(--s2-font-size-200);\n}\n\n:is(\n .sprinkle-btn,\n .sprinkle-chip,\n .sprinkle-text-field,\n .sprinkle-tabs__tab,\n .sprinkle-sidebar__nav-item,\n .sprinkle-dialog__close,\n .sprinkle-collapsible__header,\n .sprinkle-action-card__header-actions a\n):focus-visible {\n outline: var(--swc-focus-indicator-thickness) solid var(--s2-border-focus);\n outline-offset: var(--swc-focus-ring-gap);\n}\n\n@media (forced-colors: active) {\n :is(\n .sprinkle-btn,\n .sprinkle-chip,\n .sprinkle-text-field,\n .sprinkle-tabs__tab,\n .sprinkle-sidebar__nav-item,\n .sprinkle-dialog__close,\n .sprinkle-collapsible__header,\n .sprinkle-action-card__header-actions a\n ):focus-visible {\n outline-color: Highlight;\n }\n}\n\n.sprinkle-panel {\n container-type: inline-size;\n}\n\n@container (max-width: 400px) {\n .sprinkle-sidebar {\n flex-direction: column;\n }\n .sprinkle-sidebar__nav {\n width: 100%;\n min-width: 0;\n max-height: 200px;\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n }\n .sprinkle-grid {\n grid-template-columns: 1fr;\n }\n .sprinkle-split:not(.sprinkle-split--vertical) {\n flex-direction: column;\n }\n .sprinkle-split:not(.sprinkle-split--vertical) > :not(:last-child) {\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n }\n .sprinkle-toolbar {\n flex-wrap: wrap;\n }\n}\n\n@container (min-width: 600px) {\n .sprinkle-sidebar__nav {\n width: 240px;\n min-width: 240px;\n }\n .sprinkle-grid {\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n }\n}\n';
|
|
55387
55641
|
|
|
55388
55642
|
// src/app/sprinkle-tokens.ts
|
|
55389
55643
|
var reference = /--swc-[\w-]+/g;
|
|
@@ -58289,12 +58543,16 @@ function findLeaf(candiateNode, last) {
|
|
|
58289
58543
|
if (candiateNode instanceof BranchNode) return findLeaf(candiateNode.children[last ? candiateNode.children.length - 1 : 0], last);
|
|
58290
58544
|
throw new Error("invalid node");
|
|
58291
58545
|
}
|
|
58546
|
+
function childSizing(node2, index2, size4, scale = 1) {
|
|
58547
|
+
const cachedVisibleSize = node2.getChildCachedVisibleSize(index2);
|
|
58548
|
+
return cachedVisibleSize === void 0 ? size4 : Sizing.Invisible(Math.round(cachedVisibleSize * scale));
|
|
58549
|
+
}
|
|
58292
58550
|
function cloneNode(node2, size4, orthogonalSize) {
|
|
58293
58551
|
if (node2 instanceof BranchNode) {
|
|
58294
58552
|
const result = new BranchNode(node2.orientation, node2.proportionalLayout, node2.styles, size4, orthogonalSize, node2.disabled, node2.margin);
|
|
58295
58553
|
for (let i25 = node2.children.length - 1; i25 >= 0; i25--) {
|
|
58296
58554
|
const child = node2.children[i25];
|
|
58297
|
-
result.addChild(cloneNode(child, child.size, child.orthogonalSize), child.size, 0, true);
|
|
58555
|
+
result.addChild(cloneNode(child, child.size, child.orthogonalSize), childSizing(node2, i25, child.size), 0, true);
|
|
58298
58556
|
}
|
|
58299
58557
|
return result;
|
|
58300
58558
|
} else return new LeafNode(node2.view, node2.orientation, orthogonalSize);
|
|
@@ -58303,13 +58561,14 @@ function flipNode(node2, size4, orthogonalSize) {
|
|
|
58303
58561
|
if (node2 instanceof BranchNode) {
|
|
58304
58562
|
const result = new BranchNode(orthogonal(node2.orientation), node2.proportionalLayout, node2.styles, size4, orthogonalSize, node2.disabled, node2.margin);
|
|
58305
58563
|
let totalSize = 0;
|
|
58564
|
+
const cachedSizeScale = node2.size === 0 ? 1 : size4 / node2.size;
|
|
58306
58565
|
for (let i25 = node2.children.length - 1; i25 >= 0; i25--) {
|
|
58307
58566
|
const child = node2.children[i25];
|
|
58308
58567
|
const childSize = child instanceof BranchNode ? child.orthogonalSize : child.size;
|
|
58309
58568
|
let newSize = node2.size === 0 ? 0 : Math.round(size4 * childSize / node2.size);
|
|
58310
58569
|
totalSize += newSize;
|
|
58311
58570
|
if (i25 === 0) newSize += size4 - totalSize;
|
|
58312
|
-
result.addChild(flipNode(child, orthogonalSize, newSize), newSize, 0, true);
|
|
58571
|
+
result.addChild(flipNode(child, orthogonalSize, newSize), childSizing(node2, i25, newSize, cachedSizeScale), 0, true);
|
|
58313
58572
|
}
|
|
58314
58573
|
return result;
|
|
58315
58574
|
} else return new LeafNode(node2.view, orthogonal(node2.orientation), orthogonalSize);
|
|
@@ -58764,7 +59023,8 @@ var Gridview = class {
|
|
|
58764
59023
|
sizes.splice(parentIndex, 1, ...sibling.children.map((c28) => c28.size));
|
|
58765
59024
|
for (let i25 = 0; i25 < sibling.children.length; i25++) {
|
|
58766
59025
|
const child = sibling.children[i25];
|
|
58767
|
-
|
|
59026
|
+
const childSize = childSizing(sibling, i25, child.size);
|
|
59027
|
+
grandParent.addChild(child, !isSiblingVisible && typeof childSize === "number" ? Sizing.Invisible(childSize) : childSize, parentIndex + i25);
|
|
58768
59028
|
}
|
|
58769
59029
|
while (sibling.children.length > 0) sibling.removeChild(0);
|
|
58770
59030
|
} else {
|
|
@@ -61159,6 +61419,9 @@ var ContentContainer = class extends CompositeDisposable {
|
|
|
61159
61419
|
get element() {
|
|
61160
61420
|
return this._element;
|
|
61161
61421
|
}
|
|
61422
|
+
get dimensions() {
|
|
61423
|
+
return this._dimensions;
|
|
61424
|
+
}
|
|
61162
61425
|
constructor(accessor, group) {
|
|
61163
61426
|
var _this$accessor$resolv, _this$accessor, _this$accessor$resolv2, _this$accessor2, _this$accessor$onDidO, _this$accessor$onDidO2, _this$accessor3;
|
|
61164
61427
|
super();
|
|
@@ -61169,12 +61432,14 @@ var ContentContainer = class extends CompositeDisposable {
|
|
|
61169
61432
|
this.onDidFocus = this._onDidFocus.event;
|
|
61170
61433
|
this._onDidBlur = new Emitter2();
|
|
61171
61434
|
this.onDidBlur = this._onDidBlur.event;
|
|
61435
|
+
this._onDidDimensionsChange = new Emitter2();
|
|
61436
|
+
this.onDidDimensionsChange = this._onDidDimensionsChange.event;
|
|
61172
61437
|
this._element = document.createElement("div");
|
|
61173
61438
|
this._element.className = "dv-content-container";
|
|
61174
61439
|
this._element.tabIndex = -1;
|
|
61175
61440
|
this._element.id = nextContentId();
|
|
61176
61441
|
this._element.setAttribute("role", "tabpanel");
|
|
61177
|
-
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
61442
|
+
this.addDisposables(this._onDidFocus, this._onDidBlur, this._onDidDimensionsChange);
|
|
61178
61443
|
const getOverrideTarget = () => {
|
|
61179
61444
|
var _group$dropTargetCont;
|
|
61180
61445
|
return (_group$dropTargetCont = group.dropTargetContainer) === null || _group$dropTargetCont === void 0 ? void 0 : _group$dropTargetCont.model;
|
|
@@ -61284,7 +61549,14 @@ var ContentContainer = class extends CompositeDisposable {
|
|
|
61284
61549
|
if (this.panel === panel) return;
|
|
61285
61550
|
this.renderPanel(panel);
|
|
61286
61551
|
}
|
|
61287
|
-
layout(
|
|
61552
|
+
layout(width, height) {
|
|
61553
|
+
var _this$_dimensions;
|
|
61554
|
+
if (((_this$_dimensions = this._dimensions) === null || _this$_dimensions === void 0 ? void 0 : _this$_dimensions.width) === width && this._dimensions.height === height) return;
|
|
61555
|
+
this._dimensions = {
|
|
61556
|
+
width,
|
|
61557
|
+
height
|
|
61558
|
+
};
|
|
61559
|
+
this._onDidDimensionsChange.fire(this._dimensions);
|
|
61288
61560
|
}
|
|
61289
61561
|
closePanel() {
|
|
61290
61562
|
if (this.panel) {
|
|
@@ -65635,7 +65907,6 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
|
|
|
65635
65907
|
return (_this$_headerPosition = this._headerPosition) !== null && _this$_headerPosition !== void 0 ? _this$_headerPosition : "top";
|
|
65636
65908
|
}
|
|
65637
65909
|
set headerPosition(value) {
|
|
65638
|
-
var _this$_activePanel;
|
|
65639
65910
|
this._headerPosition = value;
|
|
65640
65911
|
this.invalidateHeaderSize();
|
|
65641
65912
|
removeClasses(this.container, "dv-groupview-header-top", "dv-groupview-header-bottom", "dv-groupview-header-left", "dv-groupview-header-right");
|
|
@@ -65645,10 +65916,7 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
|
|
|
65645
65916
|
this._headerDirection = direction;
|
|
65646
65917
|
this.tabsContainer.direction = direction;
|
|
65647
65918
|
this.header.direction = direction;
|
|
65648
|
-
if (
|
|
65649
|
-
const { width, height } = this.contentDimensions();
|
|
65650
|
-
this._activePanel.layout(width, height);
|
|
65651
|
-
}
|
|
65919
|
+
if (this.panels.length > 0) this.layoutContent();
|
|
65652
65920
|
this.updateHeaderActions();
|
|
65653
65921
|
if (previousDirection !== void 0 && previousDirection !== direction) {
|
|
65654
65922
|
var _this$groupPanel;
|
|
@@ -66152,10 +66420,7 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
|
|
|
66152
66420
|
this.panels.forEach((panel) => {
|
|
66153
66421
|
this.rerender(panel);
|
|
66154
66422
|
});
|
|
66155
|
-
if (this.
|
|
66156
|
-
const { width, height } = this.contentDimensions();
|
|
66157
|
-
this._activePanel.layout(width, height);
|
|
66158
|
-
}
|
|
66423
|
+
if (this.panels.length > 0) this.layoutContent();
|
|
66159
66424
|
}
|
|
66160
66425
|
get renderContainer() {
|
|
66161
66426
|
var _this$_overwriteRende;
|
|
@@ -66202,10 +66467,10 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
|
|
|
66202
66467
|
return this.tabsContainer.indexOf(panel.id);
|
|
66203
66468
|
}
|
|
66204
66469
|
toJSON() {
|
|
66205
|
-
var _this$
|
|
66470
|
+
var _this$_activePanel;
|
|
66206
66471
|
const result = {
|
|
66207
66472
|
views: this.tabsContainer.panels,
|
|
66208
|
-
activeView: (_this$
|
|
66473
|
+
activeView: (_this$_activePanel = this._activePanel) === null || _this$_activePanel === void 0 ? void 0 : _this$_activePanel.id,
|
|
66209
66474
|
id: this.id
|
|
66210
66475
|
};
|
|
66211
66476
|
if (this.locked !== false) result.locked = this.locked;
|
|
@@ -66245,8 +66510,8 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
|
|
|
66245
66510
|
update(_params) {
|
|
66246
66511
|
}
|
|
66247
66512
|
focus() {
|
|
66248
|
-
var _this$
|
|
66249
|
-
(_this$
|
|
66513
|
+
var _this$_activePanel2;
|
|
66514
|
+
(_this$_activePanel2 = this._activePanel) === null || _this$_activePanel2 === void 0 || _this$_activePanel2.focus();
|
|
66250
66515
|
}
|
|
66251
66516
|
openPanel(panel, options2 = {}) {
|
|
66252
66517
|
if (typeof options2.index !== "number" || options2.index > this.panels.length) options2.index = this.panels.length;
|
|
@@ -66304,12 +66569,24 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
|
|
|
66304
66569
|
this.updateContainer();
|
|
66305
66570
|
}
|
|
66306
66571
|
layout(width, height) {
|
|
66307
|
-
var _this$_activePanel4;
|
|
66308
66572
|
this._width = width;
|
|
66309
66573
|
this._height = height;
|
|
66310
|
-
|
|
66311
|
-
|
|
66312
|
-
|
|
66574
|
+
this.layoutContent();
|
|
66575
|
+
}
|
|
66576
|
+
/**
|
|
66577
|
+
* Apply the current content box (group box minus header extent) to the
|
|
66578
|
+
* content container and the active panel. Every path that can change that
|
|
66579
|
+
* box goes through here so the container's recorded dimensions, which size
|
|
66580
|
+
* overlay-rendered panels, never lag the active panel's. Callers other
|
|
66581
|
+
* than `layout()` skip it for a group with no panels: there is nothing to
|
|
66582
|
+
* size, and measuring the header of a group that is not in the document
|
|
66583
|
+
* yet (the constructor sets `headerPosition`) would cache a zero extent.
|
|
66584
|
+
*/
|
|
66585
|
+
layoutContent() {
|
|
66586
|
+
var _this$_activePanel3;
|
|
66587
|
+
const { width, height } = this.contentDimensions();
|
|
66588
|
+
this.contentContainer.layout(width, height);
|
|
66589
|
+
if ((_this$_activePanel3 = this._activePanel) === null || _this$_activePanel3 === void 0 ? void 0 : _this$_activePanel3.layout) this._activePanel.layout(width, height);
|
|
66313
66590
|
}
|
|
66314
66591
|
/**
|
|
66315
66592
|
* Re-run the group's layout with its current dimensions. Used to propagate a
|
|
@@ -66402,8 +66679,7 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
|
|
|
66402
66679
|
this.tabsContainer.setActivePanel(panel);
|
|
66403
66680
|
this.contentContainer.setLabelledBy(this.tabsContainer.getTabId(panel.id));
|
|
66404
66681
|
this.contentContainer.openPanel(panel);
|
|
66405
|
-
|
|
66406
|
-
panel.layout(width, height);
|
|
66682
|
+
this.layoutContent();
|
|
66407
66683
|
this.updateMru(panel);
|
|
66408
66684
|
this.contentContainer.refreshFocusState();
|
|
66409
66685
|
this._onDidActivePanelChange.fire({
|
|
@@ -66415,8 +66691,8 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
|
|
|
66415
66691
|
}
|
|
66416
66692
|
/** Label the group region with its active panel's title (the WAI-ARIA region name). */
|
|
66417
66693
|
updateAccessibleLabel() {
|
|
66418
|
-
var _this$
|
|
66419
|
-
const title2 = (_this$
|
|
66694
|
+
var _this$_activePanel4;
|
|
66695
|
+
const title2 = (_this$_activePanel4 = this._activePanel) === null || _this$_activePanel4 === void 0 ? void 0 : _this$_activePanel4.title;
|
|
66420
66696
|
if (title2) this.container.setAttribute("aria-label", title2);
|
|
66421
66697
|
else this.container.removeAttribute("aria-label");
|
|
66422
66698
|
}
|
|
@@ -69149,6 +69425,10 @@ function createFocusableElement() {
|
|
|
69149
69425
|
element2.tabIndex = -1;
|
|
69150
69426
|
return element2;
|
|
69151
69427
|
}
|
|
69428
|
+
function setPixels(style2, property, value) {
|
|
69429
|
+
const next = `${value}px`;
|
|
69430
|
+
if (style2[property] !== next) style2[property] = next;
|
|
69431
|
+
}
|
|
69152
69432
|
var OverlayRenderContainer = class extends CompositeDisposable {
|
|
69153
69433
|
constructor(element2, accessor) {
|
|
69154
69434
|
super();
|
|
@@ -69238,6 +69518,14 @@ var OverlayRenderContainer = class extends CompositeDisposable {
|
|
|
69238
69518
|
const generation = mapEntry.generation;
|
|
69239
69519
|
const focusContainer = mapEntry.element;
|
|
69240
69520
|
const contentElement = panel.view.content.element;
|
|
69521
|
+
const applySize = (size4) => {
|
|
69522
|
+
if (!size4 || size4.width <= 0 || size4.height <= 0) return;
|
|
69523
|
+
const entry = this.map[panel.api.id];
|
|
69524
|
+
if (!entry || entry.forceVisible || entry.positioned && panel.api.isVisible) return;
|
|
69525
|
+
setPixels(focusContainer.style, "width", size4.width);
|
|
69526
|
+
setPixels(focusContainer.style, "height", size4.height);
|
|
69527
|
+
};
|
|
69528
|
+
applySize(referenceContainer.dimensions);
|
|
69241
69529
|
if (contentElement.parentElement !== focusContainer) focusContainer.appendChild(contentElement);
|
|
69242
69530
|
if (focusContainer.parentElement !== this.element) this.element.appendChild(focusContainer);
|
|
69243
69531
|
const resize = () => {
|
|
@@ -69268,10 +69556,10 @@ var OverlayRenderContainer = class extends CompositeDisposable {
|
|
|
69268
69556
|
}
|
|
69269
69557
|
entry.retainPreviousGeometry = false;
|
|
69270
69558
|
entry.positioned = true;
|
|
69271
|
-
focusContainer.style
|
|
69272
|
-
focusContainer.style
|
|
69273
|
-
focusContainer.style
|
|
69274
|
-
focusContainer.style
|
|
69559
|
+
setPixels(focusContainer.style, "left", left);
|
|
69560
|
+
setPixels(focusContainer.style, "top", top);
|
|
69561
|
+
setPixels(focusContainer.style, "width", width);
|
|
69562
|
+
setPixels(focusContainer.style, "height", height);
|
|
69275
69563
|
if (panel.api.isVisible || forceVisible) {
|
|
69276
69564
|
focusContainer.style.visibility = "";
|
|
69277
69565
|
focusContainer.style.pointerEvents = "";
|
|
@@ -69366,6 +69654,9 @@ var OverlayRenderContainer = class extends CompositeDisposable {
|
|
|
69366
69654
|
if (!panel.api.isVisible) return;
|
|
69367
69655
|
resize();
|
|
69368
69656
|
}),
|
|
69657
|
+
referenceContainer.onDidDimensionsChange((size4) => {
|
|
69658
|
+
applySize(size4);
|
|
69659
|
+
}),
|
|
69369
69660
|
panel.api.onDidLocationChange(() => {
|
|
69370
69661
|
correctLayerPosition();
|
|
69371
69662
|
})
|
|
@@ -83260,7 +83551,7 @@ lit-html/static.js:
|
|
|
83260
83551
|
dockview-core/dist/package/main.esm.mjs:
|
|
83261
83552
|
(**
|
|
83262
83553
|
* dockview-core
|
|
83263
|
-
* @version 8.6.
|
|
83554
|
+
* @version 8.6.1
|
|
83264
83555
|
* @link https://github.com/dockview/dockview
|
|
83265
83556
|
* @license MIT
|
|
83266
83557
|
*)
|