@termix-ssh/plugin-sdk 1.0.17 → 1.0.19
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/CHANGELOG.md +16 -0
- package/PLUGIN-GUIDE.md +2 -1
- package/dist/backend.d.ts +13 -2
- package/dist/desktop.d.ts +9 -0
- package/dist/frontend.d.ts +29 -0
- package/dist/frontend.js +7 -0
- package/dist/host/{chunk-J2AILBXM.js → chunk-MYBONEWZ.js} +134 -87
- package/dist/host/core-classes.json +1 -1
- package/dist/host/testing-host.js +1 -1
- package/dist/host/types/src/ui/shell/companions.d.ts +20 -0
- package/dist/host/ui.js +1 -1
- package/dist/manifest.d.ts +1 -1
- package/dist/manifest.js +1 -1
- package/dist/testing/setup.js +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.0.19
|
|
4
|
+
|
|
5
|
+
Plugin API 1.11.0.
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- `app.registerCompanionLayout` and `useCompanions`, so a plugin can let each host turn the panel bar on or off, move it and choose which panels show and in what order
|
|
10
|
+
|
|
11
|
+
## 1.0.18
|
|
12
|
+
|
|
13
|
+
Plugin API 1.10.0.
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- `clientCert` on the sync link, link patch and remote target, and the `client_cert` remote error kind, so a sync plugin can link to a server that needs mutual TLS
|
|
18
|
+
|
|
3
19
|
## 1.0.17
|
|
4
20
|
|
|
5
21
|
Plugin API 1.9.0.
|
package/PLUGIN-GUIDE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Termix plugin guide
|
|
2
2
|
|
|
3
|
-
SDK 1.0.
|
|
3
|
+
SDK 1.0.19 | Plugin API 1.11.0
|
|
4
4
|
|
|
5
5
|
This guide is for anyone, person or AI coding tool, building a Termix plugin. It ships inside
|
|
6
6
|
`@termix-ssh/plugin-sdk`, so the copy in your `node_modules` always matches the SDK you have installed.
|
|
@@ -496,6 +496,7 @@ your plugin's error boundary and Suspense.
|
|
|
496
496
|
| `registerRailItem` | A sidebar rail button |
|
|
497
497
|
| `registerTab`, `registerPanel` | A tab type or sidebar panel (id in `contributes.tabs` / `panels`) |
|
|
498
498
|
| `registerCompanion`, `toggleCompanion` | A panel beside any host tab, bound to its host and handle |
|
|
499
|
+
| `registerCompanionLayout` | Per host on/off, side, order and hidden panels for a tab type |
|
|
499
500
|
| `registerDashboardCard` | A dashboard card (`contributes.dashboardCards`) |
|
|
500
501
|
| `registerHostAction` | A host button, palette entry or default connect |
|
|
501
502
|
| `registerHostEditorSection` | Your own host editor section (host settings get one for free) |
|
package/dist/backend.d.ts
CHANGED
|
@@ -260,6 +260,14 @@ export interface SyncBasicAuth {
|
|
|
260
260
|
username: string;
|
|
261
261
|
password: string;
|
|
262
262
|
}
|
|
263
|
+
/** A client certificate for a server that asks for mutual TLS. */
|
|
264
|
+
export interface SyncClientCert {
|
|
265
|
+
/** Base64 of the PFX/P12 file. */
|
|
266
|
+
pfx: string;
|
|
267
|
+
passphrase: string;
|
|
268
|
+
/** The file name, to show which certificate is saved. */
|
|
269
|
+
name: string | null;
|
|
270
|
+
}
|
|
263
271
|
/** Extra per server connection options. Kept open so new ones need no migration. */
|
|
264
272
|
export type SyncLinkOptions = Record<string, unknown>;
|
|
265
273
|
/** One server a desktop is linked to, with a replica of its data. */
|
|
@@ -274,6 +282,7 @@ export interface SyncLinkInfo {
|
|
|
274
282
|
customHeaders: SyncProxyHeader[];
|
|
275
283
|
basicAuth: SyncBasicAuth | null;
|
|
276
284
|
allowInvalidCertificate: boolean;
|
|
285
|
+
clientCert: SyncClientCert | null;
|
|
277
286
|
remoteUserId: string | null;
|
|
278
287
|
remoteUsername: string | null;
|
|
279
288
|
account: {
|
|
@@ -302,11 +311,12 @@ export interface SyncLinkCreate {
|
|
|
302
311
|
customHeaders?: SyncProxyHeader[];
|
|
303
312
|
basicAuth?: SyncBasicAuth | null;
|
|
304
313
|
allowInvalidCertificate?: boolean;
|
|
314
|
+
clientCert?: SyncClientCert | null;
|
|
305
315
|
remoteUserId?: string | null;
|
|
306
316
|
remoteUsername?: string | null;
|
|
307
317
|
}
|
|
308
|
-
export type SyncLinkPatch = Partial<Pick<SyncLinkInfo, "serverName" | "serverVersion" | "sessionToken" | "customHeaders" | "basicAuth" | "allowInvalidCertificate" | "remoteUserId" | "remoteUsername" | "account" | "disabledTypes" | "options" | "knownTypes" | "cursor" | "status" | "lastError" | "lastSyncAt">>;
|
|
309
|
-
export type SyncRemoteErrorKind = "offline" | "tls" | "proxy" | "basic_auth" | "signed_out" | "server";
|
|
318
|
+
export type SyncLinkPatch = Partial<Pick<SyncLinkInfo, "serverName" | "serverVersion" | "sessionToken" | "customHeaders" | "basicAuth" | "allowInvalidCertificate" | "clientCert" | "remoteUserId" | "remoteUsername" | "account" | "disabledTypes" | "options" | "knownTypes" | "cursor" | "status" | "lastError" | "lastSyncAt">>;
|
|
319
|
+
export type SyncRemoteErrorKind = "offline" | "tls" | "client_cert" | "proxy" | "basic_auth" | "signed_out" | "server";
|
|
310
320
|
export interface SyncRemoteError extends Error {
|
|
311
321
|
readonly kind: SyncRemoteErrorKind;
|
|
312
322
|
readonly status?: number;
|
|
@@ -317,6 +327,7 @@ export interface SyncRemoteTarget {
|
|
|
317
327
|
customHeaders?: SyncProxyHeader[];
|
|
318
328
|
basicAuth?: SyncBasicAuth | null;
|
|
319
329
|
allowInvalidCertificate?: boolean;
|
|
330
|
+
clientCert?: SyncClientCert | null;
|
|
320
331
|
}
|
|
321
332
|
export interface SyncRemoteRequest {
|
|
322
333
|
method?: string;
|
package/dist/desktop.d.ts
CHANGED
|
@@ -33,6 +33,15 @@ export interface ElectronAPI {
|
|
|
33
33
|
getAppVersion: () => Promise<string>;
|
|
34
34
|
setZoomFactor?: (factor: number) => void;
|
|
35
35
|
getPlatform: () => Promise<string>;
|
|
36
|
+
/** Whether the app-drawn title bar shows in this window. */
|
|
37
|
+
getTitleBarVisible?: () => Promise<boolean>;
|
|
38
|
+
/** Calls back when the title bar shows or hides; returns an unsubscribe. */
|
|
39
|
+
onTitleBarVisibleChange?: (callback: (visible: boolean) => void) => () => void;
|
|
40
|
+
/** Keeps the window controls the system draws in the colors of the theme. */
|
|
41
|
+
setTitleBarOverlay?: (colors: {
|
|
42
|
+
color?: string;
|
|
43
|
+
symbolColor?: string;
|
|
44
|
+
}) => Promise<void>;
|
|
36
45
|
getSetting?: (key: string) => Promise<string | null | undefined>;
|
|
37
46
|
setSetting?: (key: string, value: string) => Promise<void>;
|
|
38
47
|
getServerConfig: () => Promise<ServerConfig>;
|
package/dist/frontend.d.ts
CHANGED
|
@@ -783,6 +783,24 @@ export interface CompanionDefaults {
|
|
|
783
783
|
/** Show the edge button that opens and closes it. Default true. */
|
|
784
784
|
edgeButton?: boolean;
|
|
785
785
|
}
|
|
786
|
+
/** A panel a tab type can show beside it, for a picker. */
|
|
787
|
+
export interface CompanionInfo {
|
|
788
|
+
/** The id registerCompanionLayout's hidden and order lists use. */
|
|
789
|
+
id: string;
|
|
790
|
+
titleKey: string;
|
|
791
|
+
icon?: IconComponent;
|
|
792
|
+
}
|
|
793
|
+
/** How a host wants the panel bar beside a tab. */
|
|
794
|
+
export interface CompanionLayout {
|
|
795
|
+
/** False removes the bar and its panels. */
|
|
796
|
+
enabled?: boolean;
|
|
797
|
+
/** Where a panel opens until the user moves it. */
|
|
798
|
+
side?: "left" | "right" | "bottom";
|
|
799
|
+
/** Companion ids in bar order. */
|
|
800
|
+
order?: string[];
|
|
801
|
+
/** Companion ids left out. */
|
|
802
|
+
hidden?: string[];
|
|
803
|
+
}
|
|
786
804
|
export interface CompanionProps {
|
|
787
805
|
/** The tab it sits beside. */
|
|
788
806
|
tab: PluginTabRecord;
|
|
@@ -1044,6 +1062,11 @@ export interface TermixApp extends TermixAppInfo {
|
|
|
1044
1062
|
* it; the tab keeps running underneath.
|
|
1045
1063
|
*/
|
|
1046
1064
|
registerCompanion: (id: string, component: ComponentType<CompanionProps>, options?: CompanionOptions) => Disposer;
|
|
1065
|
+
/**
|
|
1066
|
+
* Lets a plugin decide, per host, how the panel bar looks on one tab type.
|
|
1067
|
+
* Read from the host payload, so it must not call hooks.
|
|
1068
|
+
*/
|
|
1069
|
+
registerCompanionLayout: (tabType: string, resolve: (host: PluginHostRecord | undefined) => CompanionLayout) => Disposer;
|
|
1047
1070
|
/** Opens a companion on a tab, or closes it when it is showing. */
|
|
1048
1071
|
toggleCompanion: (tab: PluginTabRecord, id?: string) => void;
|
|
1049
1072
|
registerHostEditorSection: (section: HostEditorSectionContribution) => Disposer;
|
|
@@ -1220,6 +1243,7 @@ export interface PluginHostBridge {
|
|
|
1220
1243
|
hostProtocols: (host: PluginHostRecord) => string[];
|
|
1221
1244
|
useHostStatus: (hostId: number | undefined) => HostStatusInfo | null;
|
|
1222
1245
|
useHostActions: () => HostActionContribution[];
|
|
1246
|
+
useCompanions: (tabType: string) => CompanionInfo[];
|
|
1223
1247
|
useActivityTypes: () => string[];
|
|
1224
1248
|
activityTarget: (type: string) => ActivityTargetInfo | undefined;
|
|
1225
1249
|
useExtensions: (pointId: string) => ExtensionContribution[];
|
|
@@ -1445,6 +1469,11 @@ export declare function useSlotContributions(slotId: string, context?: Record<st
|
|
|
1445
1469
|
* connect widget, say. Reactive: it re-renders as plugins enable and disable.
|
|
1446
1470
|
*/
|
|
1447
1471
|
export declare function useHostActions(): HostActionContribution[];
|
|
1472
|
+
/**
|
|
1473
|
+
* Every panel that can open beside a tab of this type, for a settings screen
|
|
1474
|
+
* that lets the user hide or reorder them. Reactive.
|
|
1475
|
+
*/
|
|
1476
|
+
export declare function useCompanions(tabType: string): CompanionInfo[];
|
|
1448
1477
|
/**
|
|
1449
1478
|
* Recent-activity types every registered tab claims (registerTab's
|
|
1450
1479
|
* activityTypes), core's and plugins'. For a filter that lists what a user
|
package/dist/frontend.js
CHANGED
|
@@ -220,6 +220,13 @@ export function useSlotContributions(slotId, context) {
|
|
|
220
220
|
export function useHostActions() {
|
|
221
221
|
return requireHost().useHostActions();
|
|
222
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Every panel that can open beside a tab of this type, for a settings screen
|
|
225
|
+
* that lets the user hide or reorder them. Reactive.
|
|
226
|
+
*/
|
|
227
|
+
export function useCompanions(tabType) {
|
|
228
|
+
return requireHost().useCompanions(tabType);
|
|
229
|
+
}
|
|
223
230
|
/**
|
|
224
231
|
* Recent-activity types every registered tab claims (registerTab's
|
|
225
232
|
* activityTypes), core's and plugins'. For a filter that lists what a user
|
|
@@ -7946,6 +7946,107 @@ function useOptionalHostStatusEntry(hostId) {
|
|
|
7946
7946
|
// src/ui/plugin-host/bridge.ts
|
|
7947
7947
|
init_define_import_meta_env();
|
|
7948
7948
|
import { useCallback as useCallback8, useEffect as useEffect15, useMemo as useMemo8, useState as useState14 } from "react";
|
|
7949
|
+
|
|
7950
|
+
// src/ui/shell/companions.ts
|
|
7951
|
+
init_define_import_meta_env();
|
|
7952
|
+
import { useSyncExternalStore as useSyncExternalStore9 } from "react";
|
|
7953
|
+
var registry5 = createRegistry(byOrderThenId);
|
|
7954
|
+
var registerCompanionDef = registry5.register;
|
|
7955
|
+
var getCompanionDef = registry5.get;
|
|
7956
|
+
var listCompanionDefs = registry5.list;
|
|
7957
|
+
var useCompanionDefs = registry5.useList;
|
|
7958
|
+
var resetCompanions = registry5.reset;
|
|
7959
|
+
var layouts = createRegistry();
|
|
7960
|
+
var registerCompanionLayoutDef = layouts.register;
|
|
7961
|
+
var useCompanionLayoutDefs = layouts.useList;
|
|
7962
|
+
var resetCompanionLayouts = layouts.reset;
|
|
7963
|
+
function resolveCompanionLayout(tabType, host) {
|
|
7964
|
+
const def = layouts.list().find((entry) => entry.tabTypes.includes(tabType));
|
|
7965
|
+
if (!def) return {};
|
|
7966
|
+
try {
|
|
7967
|
+
return def.resolve(host) ?? {};
|
|
7968
|
+
} catch {
|
|
7969
|
+
return {};
|
|
7970
|
+
}
|
|
7971
|
+
}
|
|
7972
|
+
function companionApplies(def, tab) {
|
|
7973
|
+
if (!tab.host) return false;
|
|
7974
|
+
if (def.tabTypes?.length && !def.tabTypes.includes(tab.type)) return false;
|
|
7975
|
+
const layout = resolveCompanionLayout(tab.type, tab.host);
|
|
7976
|
+
if (layout.enabled === false || layout.hidden?.includes(def.id)) return false;
|
|
7977
|
+
return def.when ? def.when(tab, tab.host) : true;
|
|
7978
|
+
}
|
|
7979
|
+
function arrangeCompanions(defs, order2) {
|
|
7980
|
+
if (!order2?.length) return defs;
|
|
7981
|
+
const rank = new Map(order2.map((id, index) => [id, index]));
|
|
7982
|
+
return defs.map((def, index) => ({ def, index })).sort(
|
|
7983
|
+
(a, b) => (rank.get(a.def.id) ?? order2.length + a.index) - (rank.get(b.def.id) ?? order2.length + b.index)
|
|
7984
|
+
).map(({ def }) => def);
|
|
7985
|
+
}
|
|
7986
|
+
var STORAGE_KEY = "termix:companions";
|
|
7987
|
+
var EMPTY3 = { openId: null, seen: false };
|
|
7988
|
+
var states = /* @__PURE__ */ new Map();
|
|
7989
|
+
var listeners7 = /* @__PURE__ */ new Set();
|
|
7990
|
+
var version2 = 0;
|
|
7991
|
+
function load() {
|
|
7992
|
+
try {
|
|
7993
|
+
const raw = localStorage.getItem(STORAGE_KEY);
|
|
7994
|
+
if (!raw) return;
|
|
7995
|
+
const parsed = JSON.parse(raw);
|
|
7996
|
+
states = new Map(Object.entries(parsed));
|
|
7997
|
+
} catch {
|
|
7998
|
+
}
|
|
7999
|
+
}
|
|
8000
|
+
function save() {
|
|
8001
|
+
try {
|
|
8002
|
+
const entries = [...states.entries()].slice(-200);
|
|
8003
|
+
localStorage.setItem(
|
|
8004
|
+
STORAGE_KEY,
|
|
8005
|
+
JSON.stringify(Object.fromEntries(entries))
|
|
8006
|
+
);
|
|
8007
|
+
} catch {
|
|
8008
|
+
}
|
|
8009
|
+
}
|
|
8010
|
+
load();
|
|
8011
|
+
function companionKey(tab) {
|
|
8012
|
+
return tab.instanceId ?? tab.id;
|
|
8013
|
+
}
|
|
8014
|
+
function getCompanionState(key) {
|
|
8015
|
+
return states.get(key) ?? EMPTY3;
|
|
8016
|
+
}
|
|
8017
|
+
function patchCompanionState(key, patch) {
|
|
8018
|
+
const next = { ...getCompanionState(key), ...patch };
|
|
8019
|
+
states = new Map(states);
|
|
8020
|
+
states.delete(key);
|
|
8021
|
+
states.set(key, next);
|
|
8022
|
+
version2 += 1;
|
|
8023
|
+
save();
|
|
8024
|
+
for (const listener of listeners7) listener();
|
|
8025
|
+
}
|
|
8026
|
+
function subscribe4(listener) {
|
|
8027
|
+
listeners7.add(listener);
|
|
8028
|
+
return () => listeners7.delete(listener);
|
|
8029
|
+
}
|
|
8030
|
+
function useCompanionState(key) {
|
|
8031
|
+
useSyncExternalStore9(
|
|
8032
|
+
subscribe4,
|
|
8033
|
+
() => version2,
|
|
8034
|
+
() => version2
|
|
8035
|
+
);
|
|
8036
|
+
return getCompanionState(key);
|
|
8037
|
+
}
|
|
8038
|
+
function toggleCompanion(tab, id) {
|
|
8039
|
+
const key = companionKey(tab);
|
|
8040
|
+
const current2 = getCompanionState(key);
|
|
8041
|
+
const target = id ?? current2.openId ?? listCompanionDefs().find((def) => companionApplies(def, tab))?.id ?? null;
|
|
8042
|
+
if (!target) return;
|
|
8043
|
+
patchCompanionState(key, {
|
|
8044
|
+
seen: true,
|
|
8045
|
+
openId: current2.openId === target ? null : target
|
|
8046
|
+
});
|
|
8047
|
+
}
|
|
8048
|
+
|
|
8049
|
+
// src/ui/plugin-host/bridge.ts
|
|
7949
8050
|
import { useTranslation as useI18nTranslation } from "react-i18next";
|
|
7950
8051
|
import { toast as toast4 } from "sonner";
|
|
7951
8052
|
import {
|
|
@@ -8280,6 +8381,14 @@ var pluginHostBridge = {
|
|
|
8280
8381
|
return useOptionalHostStatusEntry(hostId);
|
|
8281
8382
|
},
|
|
8282
8383
|
useHostActions: () => useHostActions(),
|
|
8384
|
+
useCompanions: (tabType) => {
|
|
8385
|
+
const defs = useCompanionDefs();
|
|
8386
|
+
return defs.filter((def) => !def.tabTypes?.length || def.tabTypes.includes(tabType)).map((def) => ({
|
|
8387
|
+
id: def.id,
|
|
8388
|
+
titleKey: def.titleKey ?? def.id,
|
|
8389
|
+
icon: def.icon
|
|
8390
|
+
}));
|
|
8391
|
+
},
|
|
8283
8392
|
useActivityTypes: () => {
|
|
8284
8393
|
const defs = useTabTypes();
|
|
8285
8394
|
const types = /* @__PURE__ */ new Set();
|
|
@@ -8370,7 +8479,7 @@ function onRemoteServerChange(listener) {
|
|
|
8370
8479
|
|
|
8371
8480
|
// src/ui/look/layout-registry.ts
|
|
8372
8481
|
init_define_import_meta_env();
|
|
8373
|
-
import { useSyncExternalStore as
|
|
8482
|
+
import { useSyncExternalStore as useSyncExternalStore10 } from "react";
|
|
8374
8483
|
var descriptorSnapshot = [];
|
|
8375
8484
|
var descriptorListeners = /* @__PURE__ */ new Set();
|
|
8376
8485
|
var registered = createRegistry();
|
|
@@ -8381,12 +8490,12 @@ var resetRegisteredLayouts = registered.reset;
|
|
|
8381
8490
|
function listLayouts() {
|
|
8382
8491
|
return descriptorSnapshot;
|
|
8383
8492
|
}
|
|
8384
|
-
function setPluginLayouts(
|
|
8493
|
+
function setPluginLayouts(layouts2) {
|
|
8385
8494
|
const key = (list) => JSON.stringify(
|
|
8386
8495
|
list.map((l) => [l.id, l.pluginId, l.label, l.defaultTheme])
|
|
8387
8496
|
);
|
|
8388
|
-
if (key(
|
|
8389
|
-
descriptorSnapshot =
|
|
8497
|
+
if (key(layouts2) === key(descriptorSnapshot)) return;
|
|
8498
|
+
descriptorSnapshot = layouts2;
|
|
8390
8499
|
for (const listener of descriptorListeners) listener();
|
|
8391
8500
|
}
|
|
8392
8501
|
function subscribeDescriptors(listener) {
|
|
@@ -8396,7 +8505,7 @@ function subscribeDescriptors(listener) {
|
|
|
8396
8505
|
};
|
|
8397
8506
|
}
|
|
8398
8507
|
function useLayouts() {
|
|
8399
|
-
return
|
|
8508
|
+
return useSyncExternalStore10(subscribeDescriptors, listLayouts, listLayouts);
|
|
8400
8509
|
}
|
|
8401
8510
|
function layoutLabel(layout, t) {
|
|
8402
8511
|
if (!layout.pluginId) return layout.label;
|
|
@@ -8408,85 +8517,6 @@ function layoutLabel(layout, t) {
|
|
|
8408
8517
|
// src/ui/plugin-host/app.ts
|
|
8409
8518
|
init_define_import_meta_env();
|
|
8410
8519
|
import { useEffect as useEffect16 } from "react";
|
|
8411
|
-
|
|
8412
|
-
// src/ui/shell/companions.ts
|
|
8413
|
-
init_define_import_meta_env();
|
|
8414
|
-
import { useSyncExternalStore as useSyncExternalStore10 } from "react";
|
|
8415
|
-
var registry5 = createRegistry(byOrderThenId);
|
|
8416
|
-
var registerCompanionDef = registry5.register;
|
|
8417
|
-
var getCompanionDef = registry5.get;
|
|
8418
|
-
var listCompanionDefs = registry5.list;
|
|
8419
|
-
var useCompanionDefs = registry5.useList;
|
|
8420
|
-
var resetCompanions = registry5.reset;
|
|
8421
|
-
function companionApplies(def, tab) {
|
|
8422
|
-
if (!tab.host) return false;
|
|
8423
|
-
if (def.tabTypes?.length && !def.tabTypes.includes(tab.type)) return false;
|
|
8424
|
-
return def.when ? def.when(tab, tab.host) : true;
|
|
8425
|
-
}
|
|
8426
|
-
var STORAGE_KEY = "termix:companions";
|
|
8427
|
-
var EMPTY3 = { openId: null, seen: false };
|
|
8428
|
-
var states = /* @__PURE__ */ new Map();
|
|
8429
|
-
var listeners7 = /* @__PURE__ */ new Set();
|
|
8430
|
-
var version2 = 0;
|
|
8431
|
-
function load() {
|
|
8432
|
-
try {
|
|
8433
|
-
const raw = localStorage.getItem(STORAGE_KEY);
|
|
8434
|
-
if (!raw) return;
|
|
8435
|
-
const parsed = JSON.parse(raw);
|
|
8436
|
-
states = new Map(Object.entries(parsed));
|
|
8437
|
-
} catch {
|
|
8438
|
-
}
|
|
8439
|
-
}
|
|
8440
|
-
function save() {
|
|
8441
|
-
try {
|
|
8442
|
-
const entries = [...states.entries()].slice(-200);
|
|
8443
|
-
localStorage.setItem(
|
|
8444
|
-
STORAGE_KEY,
|
|
8445
|
-
JSON.stringify(Object.fromEntries(entries))
|
|
8446
|
-
);
|
|
8447
|
-
} catch {
|
|
8448
|
-
}
|
|
8449
|
-
}
|
|
8450
|
-
load();
|
|
8451
|
-
function companionKey(tab) {
|
|
8452
|
-
return tab.instanceId ?? tab.id;
|
|
8453
|
-
}
|
|
8454
|
-
function getCompanionState(key) {
|
|
8455
|
-
return states.get(key) ?? EMPTY3;
|
|
8456
|
-
}
|
|
8457
|
-
function patchCompanionState(key, patch) {
|
|
8458
|
-
const next = { ...getCompanionState(key), ...patch };
|
|
8459
|
-
states = new Map(states);
|
|
8460
|
-
states.delete(key);
|
|
8461
|
-
states.set(key, next);
|
|
8462
|
-
version2 += 1;
|
|
8463
|
-
save();
|
|
8464
|
-
for (const listener of listeners7) listener();
|
|
8465
|
-
}
|
|
8466
|
-
function subscribe4(listener) {
|
|
8467
|
-
listeners7.add(listener);
|
|
8468
|
-
return () => listeners7.delete(listener);
|
|
8469
|
-
}
|
|
8470
|
-
function useCompanionState(key) {
|
|
8471
|
-
useSyncExternalStore10(
|
|
8472
|
-
subscribe4,
|
|
8473
|
-
() => version2,
|
|
8474
|
-
() => version2
|
|
8475
|
-
);
|
|
8476
|
-
return getCompanionState(key);
|
|
8477
|
-
}
|
|
8478
|
-
function toggleCompanion(tab, id) {
|
|
8479
|
-
const key = companionKey(tab);
|
|
8480
|
-
const current2 = getCompanionState(key);
|
|
8481
|
-
const target = id ?? current2.openId ?? listCompanionDefs().find((def) => companionApplies(def, tab))?.id ?? null;
|
|
8482
|
-
if (!target) return;
|
|
8483
|
-
patchCompanionState(key, {
|
|
8484
|
-
seen: true,
|
|
8485
|
-
openId: current2.openId === target ? null : target
|
|
8486
|
-
});
|
|
8487
|
-
}
|
|
8488
|
-
|
|
8489
|
-
// src/ui/plugin-host/app.ts
|
|
8490
8520
|
var ONBOARDING_ID = /^[a-z0-9][a-z0-9-]{0,63}$/;
|
|
8491
8521
|
function createDocsApi(manifest) {
|
|
8492
8522
|
const url = pluginDocsUrl(manifest?.docs);
|
|
@@ -8609,6 +8639,15 @@ function createPluginApp(pluginId, manifest, contributes, options = {}) {
|
|
|
8609
8639
|
})
|
|
8610
8640
|
);
|
|
8611
8641
|
},
|
|
8642
|
+
registerCompanionLayout(tabType, resolve) {
|
|
8643
|
+
return track(
|
|
8644
|
+
registerCompanionLayoutDef({
|
|
8645
|
+
id: `${pluginId}.${tabType}`,
|
|
8646
|
+
tabTypes: [tabType],
|
|
8647
|
+
resolve
|
|
8648
|
+
})
|
|
8649
|
+
);
|
|
8650
|
+
},
|
|
8612
8651
|
toggleCompanion(tab, id) {
|
|
8613
8652
|
toggleCompanion(
|
|
8614
8653
|
tab,
|
|
@@ -10000,11 +10039,15 @@ var CompanionFrame = memo(function CompanionFrame2({
|
|
|
10000
10039
|
children
|
|
10001
10040
|
}) {
|
|
10002
10041
|
const defs = useCompanionDefs();
|
|
10042
|
+
const layoutDefs = useCompanionLayoutDefs();
|
|
10003
10043
|
const applicable = useMemo10(
|
|
10004
|
-
() =>
|
|
10044
|
+
() => arrangeCompanions(
|
|
10045
|
+
defs.filter((def) => companionApplies(def, tab)),
|
|
10046
|
+
resolveCompanionLayout(tab.type, tab.host).order
|
|
10047
|
+
),
|
|
10005
10048
|
// tab.host and tab.type decide it
|
|
10006
10049
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
10007
|
-
[defs, tab.type, tab.host]
|
|
10050
|
+
[defs, layoutDefs, tab.type, tab.host]
|
|
10008
10051
|
);
|
|
10009
10052
|
if (applicable.length === 0) return /* @__PURE__ */ jsx13(Fragment3, { children });
|
|
10010
10053
|
return /* @__PURE__ */ jsx13(CompanionLayout, { tab, defs: applicable, isVisible, children });
|
|
@@ -10051,7 +10094,11 @@ function CompanionLayout({
|
|
|
10051
10094
|
);
|
|
10052
10095
|
}, [active]);
|
|
10053
10096
|
const activeDefaults = active ? defaults3[active.id] : void 0;
|
|
10054
|
-
const
|
|
10097
|
+
const layout = useMemo10(
|
|
10098
|
+
() => resolveCompanionLayout(tab.type, tab.host),
|
|
10099
|
+
[tab.type, tab.host]
|
|
10100
|
+
);
|
|
10101
|
+
const side = isMobile ? "bottom" : state2.side ?? layout.side ?? activeDefaults?.side ?? "right";
|
|
10055
10102
|
const baseSize = state2.size ?? activeDefaults?.size ?? (side === "bottom" ? DEFAULT_BOTTOM_SIZE : DEFAULT_SIDE_SIZE);
|
|
10056
10103
|
const setSide = useCallback9(
|
|
10057
10104
|
(next) => patchCompanionState(key, { side: next }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
["!running","**:data-[slot=kbd]:isolate","**:data-[slot=kbd]:relative","**:data-[slot=kbd]:rounded-none","**:data-[slot=kbd]:z-50","*:[a]:hover:text-foreground","*:[a]:underline","*:[a]:underline-offset-3","*:[img:first-child]:rounded-none","*:[img:last-child]:rounded-none","*:[span]:last:flex","*:[span]:last:gap-2","*:[span]:last:items-center","*:data-[slot=alert-description]:text-destructive/90","*:data-[slot=select-value]:flex","*:data-[slot=select-value]:gap-2","*:data-[slot=select-value]:items-center","*:data-[slot=select-value]:line-clamp-1","*:flex-1","-bottom-1.5","-left-1","-left-1.5","-mx-1","-mx-3","-my-1","-right-1","-right-1.5","-top-1","-top-1.5","-translate-x-1/2","-translate-x-px","-translate-y-1/2","2xl:flex","3","@3xl:block","@3xl:hidden","@container","@container/card-header","[&::-webkit-inner-spin-button]:appearance-none","[&::-webkit-outer-spin-button]:appearance-none","[&>*:last-child]:border-b-0","[&>*]:h-full","[&>button]:hidden","[&>span:last-child]:truncate","[&>svg]:pointer-events-none","[&>svg]:shrink-0","[&>svg]:size-3","[&>svg]:size-4","[&>svg]:text-current","[&>svg]:text-sidebar-accent-foreground","[&>svg]:translate-y-0.5","[&_[cmdk-group-heading]]:font-medium","[&_[cmdk-group-heading]]:px-2","[&_[cmdk-group-heading]]:py-1.5","[&_[cmdk-group-heading]]:text-muted-foreground","[&_[cmdk-group-heading]]:text-xs","[&_[cmdk-list-sizer]]:flex","[&_[cmdk-list-sizer]]:flex-col","[&_p]:leading-relaxed","[&_svg:not([class*='size-'])]:size-3","[&_svg:not([class*='size-'])]:size-3.5","[&_svg:not([class*='size-'])]:size-4","[&_svg:not([class*='text-'])]:text-muted-foreground","[&_svg]:pointer-events-none","[&_svg]:shrink-0","[&_svg]:size-2.5","[&_svg]:size-3","[&_svg]:size-3.5","[&_svg]:size-4","[.border-b]:pb-4","[.gap-4>&]:border-0","[.gap-4>&]:py-0","[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","[[data-side=left][data-state=collapsed]_&]:cursor-e-resize","[[data-side=right][data-collapsible=offcanvas]_&]:-left-2","[[data-side=right][data-state=collapsed]_&]:cursor-w-resize","[a&]:hover:bg-accent","[a&]:hover:bg-destructive/90","[a&]:hover:bg-primary/90","[a&]:hover:bg-secondary/90","[a&]:hover:text-accent-foreground","[a]:hover:bg-primary/80","[animation-duration:900ms]","[appearance:textfield]","[backend:stderr]","[clip-path:inset(0px_-4px_-4px_-4px)]","[op:http_server_port_conflict]","[op:startup_failed]","absolute","accent-[var(--accent-brand)]","active:bg-sidebar-accent","active:cursor-grabbing","active:not-aria-[haspopup]:translate-y-px","active:text-sidebar-accent-foreground","after:-inset-2","after:absolute","after:inset-y-0","after:start-1/2","after:w-[2px]","animate-pulse","animate-spin","appearance-none","aria-disabled:opacity-50","aria-disabled:pointer-events-none","aria-expanded:bg-muted","aria-expanded:bg-secondary","aria-expanded:opacity-100","aria-expanded:text-foreground","aria-expanded:text-secondary-foreground","aria-invalid:border-destructive","aria-invalid:ring-1","aria-invalid:ring-destructive/20","aspect-square","aspect-video","auto-rows-min","bg-accent","bg-accent-brand","bg-accent-brand/10","bg-accent-brand/15","bg-accent-brand/20","bg-accent-brand/5","bg-accent-brand/60","bg-background","bg-background/85","bg-background/90","bg-black","bg-black/10","bg-blue-500/20","bg-border","bg-canvas","bg-card","bg-clip-padding","bg-destructive","bg-destructive/10","bg-destructive/15","bg-destructive/5","bg-destructive/70","bg-emerald-500","bg-emerald-500/10","bg-foreground","bg-green-500","bg-green-500/10","bg-green-500/70","bg-input","bg-muted","bg-muted-foreground","bg-muted-foreground/20","bg-muted-foreground/25","bg-muted-foreground/30","bg-muted-foreground/40","bg-muted-foreground/50","bg-muted/10","bg-muted/15","bg-muted/20","bg-muted/30","bg-muted/40","bg-muted/50","bg-muted/60","bg-muted/70","bg-muted/[0.08]","bg-overlay","bg-popover","bg-primary","bg-primary/30","bg-red-500","bg-red-500/10","bg-red-500/40","bg-secondary","bg-sidebar","bg-sidebar-border","bg-surface-dim/60","bg-transparent","bg-warning","bg-warning/10","bg-warning/20","bg-warning/40","bg-warning/5","bg-warning/70","block","blur","border","border-0","border-2","border-accent-brand","border-accent-brand/30","border-accent-brand/40","border-accent-brand/50","border-accent-brand/60","border-accent-brand/70","border-b","border-b-2","border-border","border-border/30","border-border/40","border-border/50","border-border/60","border-current","border-dashed","border-destructive/20","border-destructive/30","border-destructive/40","border-destructive/50","border-emerald-500/40","border-foreground/10","border-green-500/30","border-input","border-l","border-l-2","border-l-transparent","border-muted-foreground/30","border-primary","border-r","border-red-500/40","border-sidebar-border","border-t","border-t-0","border-t-border/40","border-t-muted-foreground/70","border-t-transparent","border-transparent","border-warning/30","border-warning/40","border-y","bottom-0","break-all","break-words","col-start-2","collapse","columns-2","columns-3","com","container","contents","cursor-col-resize","cursor-default","cursor-grab","cursor-pointer","cursor-row-resize","dark","dark:aria-invalid:border-destructive/50","dark:aria-invalid:ring-destructive/40","dark:bg-destructive/20","dark:bg-destructive/60","dark:bg-input/30","dark:bg-transparent","dark:border-accent-brand/40","dark:border-input","dark:data-[state=active]:bg-input/30","dark:data-[state=active]:border-input","dark:data-[state=active]:text-foreground","dark:data-[state=checked]:bg-primary","dark:data-[variant=destructive]:focus:bg-destructive/20","dark:disabled:bg-input/80","dark:focus-visible:ring-destructive/40","dark:hover:bg-accent-brand/10","dark:hover:bg-destructive/10","dark:hover:bg-destructive/30","dark:hover:bg-input/50","dark:hover:bg-muted/50","dark:text-muted-foreground","data-[disabled=true]:opacity-50","data-[disabled=true]:pointer-events-none","data-[disabled]:opacity-50","data-[disabled]:pointer-events-none","data-[orientation=horizontal]:h-1.5","data-[orientation=horizontal]:h-full","data-[orientation=horizontal]:h-px","data-[orientation=horizontal]:w-full","data-[orientation=vertical]:flex-col","data-[orientation=vertical]:h-full","data-[orientation=vertical]:min-h-44","data-[orientation=vertical]:self-center","data-[orientation=vertical]:self-stretch","data-[orientation=vertical]:w-1.5","data-[orientation=vertical]:w-auto","data-[orientation=vertical]:w-full","data-[orientation=vertical]:w-px","data-[placeholder]:text-muted-foreground","data-[selected=true]:bg-muted","data-[selected=true]:text-accent-foreground","data-[side=bottom]:border-t","data-[side=bottom]:bottom-0","data-[side=bottom]:data-closed:slide-out-to-bottom-10","data-[side=bottom]:data-open:slide-in-from-bottom-10","data-[side=bottom]:h-auto","data-[side=bottom]:inset-x-0","data-[side=bottom]:slide-in-from-top-2","data-[side=bottom]:translate-y-1","data-[side=left]:-translate-x-1","data-[side=left]:border-r","data-[side=left]:data-closed:slide-out-to-left-10","data-[side=left]:data-open:slide-in-from-left-10","data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]","data-[side=left]:h-full","data-[side=left]:inset-y-0","data-[side=left]:left-0","data-[side=left]:slide-in-from-right-2","data-[side=left]:sm:max-w-sm","data-[side=left]:w-3/4","data-[side=right]:border-l","data-[side=right]:data-closed:slide-out-to-right-10","data-[side=right]:data-open:slide-in-from-right-10","data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]","data-[side=right]:h-full","data-[side=right]:inset-y-0","data-[side=right]:right-0","data-[side=right]:slide-in-from-left-2","data-[side=right]:sm:max-w-sm","data-[side=right]:translate-x-1","data-[side=right]:w-3/4","data-[side=top]:-translate-y-1","data-[side=top]:border-b","data-[side=top]:data-closed:slide-out-to-top-10","data-[side=top]:data-open:slide-in-from-top-10","data-[side=top]:h-auto","data-[side=top]:inset-x-0","data-[side=top]:slide-in-from-bottom-2","data-[side=top]:top-0","data-[size=default]:h-9","data-[size=md]:text-xs","data-[size=sm]:gap-2","data-[size=sm]:h-8","data-[size=sm]:has-data-[slot=card-footer]:pb-0","data-[size=sm]:py-3","data-[size=sm]:text-xs","data-[state=active]:animate-in","data-[state=active]:bg-background","data-[state=active]:fade-in-0","data-[state=active]:shadow-sm","data-[state=checked]:bg-accent-brand","data-[state=checked]:bg-primary","data-[state=checked]:border-accent-brand","data-[state=checked]:border-primary","data-[state=checked]:text-primary-foreground","data-[state=checked]:translate-x-4","data-[state=closed]:animate-out","data-[state=closed]:fade-out-0","data-[state=closed]:overflow-hidden","data-[state=closed]:zoom-out-95","data-[state=delayed-open]:animate-in","data-[state=delayed-open]:fade-in-0","data-[state=delayed-open]:zoom-in-95","data-[state=inactive]:animate-out","data-[state=inactive]:fade-out-0","data-[state=open]:animate-in","data-[state=open]:fade-in-0","data-[state=open]:zoom-in-95","data-[state=unchecked]:bg-muted","data-[state=unchecked]:border-border","data-[state=unchecked]:translate-x-0.5","data-[variant=destructive]:*:[svg]:text-destructive","data-[variant=destructive]:focus:bg-destructive/10","data-[variant=destructive]:focus:text-destructive","data-[variant=destructive]:text-destructive","data-active:bg-sidebar-accent","data-active:font-medium","data-active:text-sidebar-accent-foreground","data-closed:animate-out","data-closed:fade-out-0","data-closed:zoom-out-95","data-disabled:opacity-50","data-disabled:pointer-events-none","data-inset:pl-7","data-open:animate-in","data-open:bg-accent","data-open:fade-in-0","data-open:hover:bg-sidebar-accent","data-open:hover:text-sidebar-accent-foreground","data-open:text-accent-foreground","data-open:zoom-in-95","disabled:bg-input/50","disabled:cursor-not-allowed","disabled:opacity-30","disabled:opacity-40","disabled:opacity-50","disabled:opacity-60","disabled:pointer-events-none","divide-border","divide-y","drop-shadow","duration-100","duration-150","duration-200","duration-500","duration-[450ms]","ease-in-out","ease-linear","enabled:hover:text-accent-brand","fade-in","file:bg-transparent","file:border-0","file:font-medium","file:h-6","file:inline-flex","file:text-foreground","file:text-xs","fill-foreground","filter","fixed","flex","flex-1","flex-col","flex-col-reverse","flex-row","flex-row-reverse","flex-shrink-0","flex-wrap","focus-visible:border-destructive/40","focus-visible:border-ring","focus-visible:outline-1","focus-visible:outline-hidden","focus-visible:outline-none","focus-visible:outline-ring","focus-visible:relative","focus-visible:ring-0","focus-visible:ring-1","focus-visible:ring-2","focus-visible:ring-4","focus-visible:ring-[#f59145]/40","focus-visible:ring-[3px]","focus-visible:ring-destructive/20","focus-visible:ring-inset","focus-visible:ring-ring","focus-visible:ring-ring/50","focus-visible:z-10","focus-within:border-ring","focus-within:opacity-100","focus-within:ring-1","focus-within:ring-ring/50","focus:**:text-accent-foreground","focus:bg-accent","focus:ring-1","focus:ring-ring","focus:text-accent-brand","focus:text-accent-foreground","font-bold","font-heading","font-medium","font-mono","font-normal","font-semibold","fs-lg","fs-md","fs-sm","fs-xl","fs-xs","gap-0","gap-0.5","gap-1","gap-1.5","gap-2","gap-2.5","gap-3","gap-3.5","gap-4","gap-5","gap-6","gap-[1.75px]","gap-[3.5px]","gap-px","gap-x-2","gap-x-4","gap-y-0.5","gap-y-1","gap-y-1.5","grid","grid-cols-1","grid-cols-2","grid-cols-3","grid-cols-4","grid-cols-6","grid-cols-8","grid-cols-[0_1fr]","group","group-[.toast]:!border-accent-brand/30","group-[.toast]:!border-destructive/30","group-[.toast]:!text-accent-brand","group-[.toast]:!text-destructive","group-[.toast]:bg-accent-brand","group-[.toast]:bg-muted","group-[.toast]:font-semibold","group-[.toast]:text-muted-foreground","group-[.toast]:text-white","group-[.toaster]:bg-card","group-[.toaster]:border-border","group-[.toaster]:font-mono","group-[.toaster]:rounded-none!","group-[.toaster]:shadow-lg","group-[.toaster]:text-card-foreground","group-data-[collapsible=icon]:-mt-8","group-data-[collapsible=icon]:hidden","group-data-[collapsible=icon]:opacity-0","group-data-[collapsible=icon]:overflow-hidden","group-data-[collapsible=icon]:p-0!","group-data-[collapsible=icon]:p-2!","group-data-[collapsible=icon]:size-8!","group-data-[collapsible=icon]:w-(--sidebar-width-icon)","group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]","group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]","group-data-[collapsible=offcanvas]:after:left-full","group-data-[collapsible=offcanvas]:translate-x-0","group-data-[collapsible=offcanvas]:w-0","group-data-[disabled=true]:opacity-50","group-data-[disabled=true]:pointer-events-none","group-data-[side=left]:-right-4","group-data-[side=left]:border-r","group-data-[side=right]:border-l","group-data-[side=right]:left-0","group-data-[side=right]:rotate-180","group-data-[size=sm]/card:[.border-b]:pb-3","group-data-[size=sm]/card:p-3","group-data-[size=sm]/card:px-3","group-data-[size=sm]/card:text-sm","group-data-[variant=floating]:ring-1","group-data-[variant=floating]:ring-sidebar-border","group-data-[variant=floating]:rounded-none","group-data-[variant=floating]:shadow-sm","group-focus-within/menu-item:opacity-100","group-focus-within/row:flex","group-focus/dropdown-menu-item:text-accent-foreground","group-has-data-[sidebar=menu-action]/menu-item:pr-8","group-hover/folder:opacity-100","group-hover/menu-item:opacity-100","group-hover/open:text-accent-brand","group-hover/resize:bg-accent-brand/60","group-hover/row:flex","group-hover:bg-accent-brand/60","group-hover:opacity-100","group/card","group/dropdown-menu-item","group/folder","group/menu-item","group/open","group/resize","group/row","grow","h-0.5","h-1","h-1.5","h-10","h-11","h-12","h-12.5","h-14","h-16","h-2","h-2.5","h-3","h-4","h-5","h-6","h-7","h-8","h-9","h-[136px]","h-[46%]","h-[calc(100%-1px)]","h-[var(--radix-select-trigger-height)]","h-dvh","h-full","h-px","h-screen","h-svh","has-[>img:first-child]:pt-0","has-[>svg]:gap-x-3","has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr]","has-[[data-state=open]]:opacity-100","has-data-[icon=inline-end]:pr-1.5","has-data-[icon=inline-end]:pr-2","has-data-[icon=inline-start]:pl-1.5","has-data-[icon=inline-start]:pl-2","has-data-[slot=card-action]:grid-cols-[1fr_auto]","has-data-[slot=card-description]:grid-rows-[auto_auto]","has-data-[slot=card-footer]:pb-0","has-data-[slot=kbd]:pr-1.5","has-data-[variant=inset]:bg-sidebar","hidden","host-status-stripe","hover:after:bg-sidebar-border","hover:bg-accent-brand/10","hover:bg-accent-brand/15","hover:bg-accent-brand/20","hover:bg-accent-brand/5","hover:bg-accent-brand/90","hover:bg-destructive/10","hover:bg-destructive/20","hover:bg-destructive/90","hover:bg-foreground/[0.03]","hover:bg-muted","hover:bg-muted/30","hover:bg-muted/40","hover:bg-muted/50","hover:bg-secondary/80","hover:bg-sidebar-accent","hover:border-accent-brand/40","hover:border-accent-brand/60","hover:border-destructive/40","hover:border-foreground/40","hover:border-muted-foreground","hover:group-data-[collapsible=offcanvas]:bg-sidebar","hover:opacity-100","hover:ring-4","hover:ring-[#f59145]/40","hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]","hover:text-accent-brand","hover:text-accent-brand/70","hover:text-destructive","hover:text-foreground","hover:text-sidebar-accent-foreground","hover:underline","in-data-[side=left]:cursor-w-resize","in-data-[side=right]:cursor-e-resize","inline","inline-block","inline-flex","inset-0","inset-x-0","inset-y-0","invisible","isolate","italic","items-baseline","items-center","items-start","items-stretch","justify-between","justify-center","justify-end","justify-items-start","justify-self-end","justify-start","last:border-0","last:border-b-0","leading-[1.7]","leading-none","leading-relaxed","leading-snug","leading-tight","left-0","left-1/2","left-2","left-2.5","left-[50%]","lg:block","lg:col-span-2","lg:flex","lg:grid-cols-1","lg:grid-cols-2","lg:grid-cols-3","lg:grid-cols-4","lg:grid-cols-5","lg:hidden","line-clamp-2","line-clamp-3","line-clamp-4","line-through","list-disc","lowercase","ltr:-translate-x-1/2","lucide","m-auto","max-h-(--radix-dropdown-menu-content-available-height)","max-h-(--radix-select-content-available-height)","max-h-40","max-h-56","max-h-64","max-h-96","max-h-[300px]","max-w-(--skeleton-width)","max-w-2xl","max-w-32","max-w-3xl","max-w-40","max-w-48","max-w-5xl","max-w-[380px]","max-w-[560px]","max-w-[calc(100%-2rem)]","max-w-lg","max-w-md","max-w-sm","max-w-xl","max-w-xs","mb-1","mb-2","mb-4","md:-mx-4","md:after:hidden","md:block","md:flex","md:flex-row","md:grid-cols-1","md:grid-cols-2","md:grid-cols-3","md:grid-cols-4","md:max-h-none","md:opacity-0","md:peer-data-[variant=inset]:m-2","md:peer-data-[variant=inset]:ml-0","md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2","md:peer-data-[variant=inset]:rounded-none","md:peer-data-[variant=inset]:shadow-sm","md:px-4","md:text-2xl","md:text-xs","md:w-44","md:w-56","min-h-0","min-h-16","min-h-6","min-h-8","min-h-[220px]","min-h-[70vh]","min-h-[80px]","min-h-full","min-h-svh","min-w-0","min-w-16","min-w-32","min-w-4","min-w-40","min-w-5","min-w-52","min-w-[8rem]","min-w-[96px]","min-w-[var(--radix-select-trigger-width)]","min-w-max","ml-0.5","ml-1.5","ml-2","ml-[27px]","ml-auto","motion-context-enter","motion-fade-enter","motion-interactive","motion-meter","motion-panel-enter","motion-transfer-phase","motion-workspace-enter","motion-workspace-layout","mr-1","mr-2","mt-0.5","mt-1","mt-3","mt-4","mt-auto","mt-px","mx-2","mx-3.5","mx-auto","my-1","my-3","my-auto","normal-case","not-data-[variant=destructive]:focus:**:text-accent-foreground","object-contain","opacity-0","opacity-100","opacity-40","opacity-50","opacity-60","opacity-70","opacity-80","origin-(--radix-dropdown-menu-content-transform-origin)","origin-(--radix-popover-content-transform-origin)","origin-(--radix-select-content-transform-origin)","origin-(--radix-tooltip-content-transform-origin)","origin-center","outline","outline-hidden","outline-none","overflow-auto","overflow-hidden","overflow-x-auto","overflow-x-hidden","overflow-y-auto","overline","p-0","p-0.5","p-1","p-1.5","p-10","p-2","p-2.5","p-3","p-4","p-5","p-6","p-[3px]","p-px","paused","pb-1","pb-1.5","pb-2","peer","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","peer-data-[size=sm]/menu-button:top-1","peer-data-active/menu-button:text-sidebar-accent-foreground","peer-disabled:cursor-not-allowed","peer-disabled:opacity-50","peer-hover/menu-button:text-sidebar-accent-foreground","peer/menu-button","pl-1","pl-2","pl-2.5","pl-4","pl-7","pl-8","pl-[8.75px]","placeholder:text-muted-foreground","placeholder:text-muted-foreground/50","pointer-coarse:flex","pointer-coarse:opacity-100","pointer-events-none","pr-0.5","pr-1","pr-1.5","pr-12","pr-2","pr-7","pr-8","pr-9","pr-[7px]","pt-0.5","pt-1","pt-2","pt-2.5","pt-3","pt-4","pt-[3.5px]","px-0","px-1","px-1.5","px-2","px-2.5","px-3","px-4","px-6","py-0","py-0.5","py-1","py-1.5","py-10","py-2","py-2.5","py-3","py-4","py-6","py-8","py-[1px]","py-[7px]","py-px","relative","resize","resize-none","right-0","right-1","right-1.5","right-2","right-2.5","right-3","ring","ring-1","ring-2","ring-accent-brand","ring-border","ring-foreground/10","ring-inset","ring-offset-1","ring-offset-background","ring-sidebar-ring","ring-white/60","rotate-45","rotate-90","rounded","rounded-[inherit]","rounded-full","rounded-none","row-span-2","row-start-1","rtl:-translate-x-1/2","running","safe-bottom","scroll-my-1","scrollbar-none","select-none","self-start","sepia","settings-search-hit","shadow","shadow-[0_0_0_1px_hsl(var(--sidebar-border))]","shadow-lg","shadow-md","shadow-none","shadow-sm","shadow-xl","shadow-xs","shrink-0","size-1.5","size-10","size-12","size-2.5","size-3","size-3.5","size-4","size-5","size-6","size-7","size-8","size-9","size-[22.75px]","size-full","sm:flex","sm:flex-row","sm:grid-cols-12","sm:grid-cols-2","sm:grid-cols-3","sm:grid-cols-4","sm:items-center","sm:justify-end","sm:max-w-lg","sm:max-w-sm","sm:mr-auto","sm:py-14","sm:text-left","space-y-1.5","space-y-2","sr-only","static","sticky","stroke-accent-brand","stroke-border","stroke-muted","supports-backdrop-filter:backdrop-blur-xs","tab-1","tab-2","table","tabular-nums","text-2xl","text-[10px]","text-[11px]","text-[13px]","text-[9px]","text-accent-brand","text-accent-brand/80","text-accent-foreground","text-background","text-base","text-blue-400","text-blue-500","text-card-foreground","text-center","text-current","text-destructive","text-destructive/80","text-emerald-500","text-foreground","text-foreground-secondary","text-green-500","text-left","text-lg","text-muted-foreground","text-muted-foreground/30","text-muted-foreground/40","text-muted-foreground/50","text-muted-foreground/60","text-muted-foreground/70","text-muted-foreground/80","text-popover-foreground","text-primary","text-primary-foreground","text-red-500","text-right","text-secondary-foreground","text-sidebar-foreground","text-sidebar-foreground/70","text-sm","text-warning","text-white","text-xl","text-xs","text-xs/relaxed","thin-scrollbar","toast","toaster","top-0","top-1","top-1.5","top-1/2","top-2","top-3","top-3.5","top-[50%]","touch-none","tracking-[0.35em]","tracking-[0.3em]","tracking-normal","tracking-tight","tracking-wide","tracking-wider","tracking-widest","transfer-progress-fill","transfer-progress-indeterminate","transfer-progress-stalled","transfer-progress-track","transform","transition","transition-[color,background-color,border-color,opacity,box-shadow,transform]","transition-[color,box-shadow]","transition-[height]","transition-[left,right,width]","transition-[left,top,width,height]","transition-[margin,opacity]","transition-[stroke-dasharray]","transition-[width,height,padding]","transition-[width]","transition-all","transition-colors","transition-none","transition-opacity","transition-shadow","transition-transform","translate-x-0.5","translate-x-4","translate-x-[-50%]","translate-x-px","translate-y-[-1px]","translate-y-[-50%]","translate-y-[calc(-50%_-_2px)]","truncate","underline","underline-offset-2","underline-offset-4","uppercase","visible","w-(--radix-dropdown-menu-trigger-width)","w-(--sidebar-width)","w-0.5","w-1/2","w-1/4","w-10","w-11","w-12","w-12.5","w-2","w-2.5","w-2/3","w-28","w-3","w-3/4","w-4","w-40","w-48","w-5","w-5/6","w-52","w-56","w-6","w-60","w-64","w-72","w-9","w-[240px]","w-[3px]","w-[46%]","w-[var(--radix-popover-trigger-width)]","w-auto","w-fit","w-full","w-px","w-screen","whitespace-normal","whitespace-nowrap","whitespace-pre-line","whitespace-pre-wrap","xl:grid-cols-1","xl:grid-cols-2","xl:grid-cols-3","xl:grid-cols-4","z-0","z-10","z-20","z-30","z-40","z-50","z-500","z-[100]","z-[60]","z-[9998]","z-[99999]"]
|
|
1
|
+
["!running","**:data-[slot=kbd]:isolate","**:data-[slot=kbd]:relative","**:data-[slot=kbd]:rounded-none","**:data-[slot=kbd]:z-50","*:[a]:hover:text-foreground","*:[a]:underline","*:[a]:underline-offset-3","*:[img:first-child]:rounded-none","*:[img:last-child]:rounded-none","*:[span]:last:flex","*:[span]:last:gap-2","*:[span]:last:items-center","*:data-[slot=alert-description]:text-destructive/90","*:data-[slot=select-value]:flex","*:data-[slot=select-value]:gap-2","*:data-[slot=select-value]:items-center","*:data-[slot=select-value]:line-clamp-1","*:flex-1","-bottom-1.5","-left-1","-left-1.5","-mx-1","-mx-3","-my-1","-right-1","-right-1.5","-top-1","-top-1.5","-translate-x-1/2","-translate-x-px","-translate-y-1/2","2xl:flex","3","@3xl:block","@3xl:hidden","@container","@container/card-header","[&::-webkit-inner-spin-button]:appearance-none","[&::-webkit-outer-spin-button]:appearance-none","[&>*:last-child]:border-b-0","[&>*]:h-full","[&>button]:hidden","[&>span:last-child]:truncate","[&>svg]:pointer-events-none","[&>svg]:shrink-0","[&>svg]:size-3","[&>svg]:size-4","[&>svg]:text-current","[&>svg]:text-sidebar-accent-foreground","[&>svg]:translate-y-0.5","[&_[cmdk-group-heading]]:font-medium","[&_[cmdk-group-heading]]:px-2","[&_[cmdk-group-heading]]:py-1.5","[&_[cmdk-group-heading]]:text-muted-foreground","[&_[cmdk-group-heading]]:text-xs","[&_[cmdk-list-sizer]]:flex","[&_[cmdk-list-sizer]]:flex-col","[&_p]:leading-relaxed","[&_svg:not([class*='size-'])]:size-3","[&_svg:not([class*='size-'])]:size-3.5","[&_svg:not([class*='size-'])]:size-4","[&_svg:not([class*='text-'])]:text-muted-foreground","[&_svg]:pointer-events-none","[&_svg]:shrink-0","[&_svg]:size-2.5","[&_svg]:size-3","[&_svg]:size-3.5","[&_svg]:size-4","[.border-b]:pb-4","[.gap-4>&]:border-0","[.gap-4>&]:py-0","[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","[[data-side=left][data-state=collapsed]_&]:cursor-e-resize","[[data-side=right][data-collapsible=offcanvas]_&]:-left-2","[[data-side=right][data-state=collapsed]_&]:cursor-w-resize","[a&]:hover:bg-accent","[a&]:hover:bg-destructive/90","[a&]:hover:bg-primary/90","[a&]:hover:bg-secondary/90","[a&]:hover:text-accent-foreground","[a]:hover:bg-primary/80","[animation-duration:900ms]","[appearance:textfield]","[backend:stderr]","[clip-path:inset(0px_-4px_-4px_-4px)]","[op:http_server_port_conflict]","[op:startup_failed]","absolute","accent-[var(--accent-brand)]","active:bg-sidebar-accent","active:cursor-grabbing","active:not-aria-[haspopup]:translate-y-px","active:text-sidebar-accent-foreground","after:-inset-2","after:absolute","after:inset-y-0","after:start-1/2","after:w-[2px]","animate-pulse","animate-spin","appearance-none","aria-disabled:opacity-50","aria-disabled:pointer-events-none","aria-expanded:bg-muted","aria-expanded:bg-secondary","aria-expanded:opacity-100","aria-expanded:text-foreground","aria-expanded:text-secondary-foreground","aria-invalid:border-destructive","aria-invalid:ring-1","aria-invalid:ring-destructive/20","aspect-square","aspect-video","auto-rows-min","bg-accent","bg-accent-brand","bg-accent-brand/10","bg-accent-brand/15","bg-accent-brand/20","bg-accent-brand/5","bg-accent-brand/60","bg-background","bg-background/85","bg-background/90","bg-black","bg-black/10","bg-blue-500/20","bg-border","bg-canvas","bg-card","bg-clip-padding","bg-destructive","bg-destructive/10","bg-destructive/15","bg-destructive/5","bg-destructive/70","bg-emerald-500","bg-emerald-500/10","bg-foreground","bg-green-500","bg-green-500/10","bg-green-500/70","bg-input","bg-muted","bg-muted-foreground","bg-muted-foreground/20","bg-muted-foreground/25","bg-muted-foreground/30","bg-muted-foreground/40","bg-muted-foreground/50","bg-muted/10","bg-muted/15","bg-muted/20","bg-muted/30","bg-muted/40","bg-muted/50","bg-muted/60","bg-muted/70","bg-muted/[0.08]","bg-overlay","bg-popover","bg-primary","bg-primary/30","bg-red-500","bg-red-500/10","bg-red-500/40","bg-secondary","bg-sidebar","bg-sidebar-border","bg-surface-dim/60","bg-transparent","bg-warning","bg-warning/10","bg-warning/20","bg-warning/40","bg-warning/5","bg-warning/70","block","blur","border","border-0","border-2","border-accent-brand","border-accent-brand/30","border-accent-brand/40","border-accent-brand/50","border-accent-brand/60","border-accent-brand/70","border-b","border-b-2","border-border","border-border/30","border-border/40","border-border/50","border-border/60","border-current","border-dashed","border-destructive/20","border-destructive/30","border-destructive/40","border-destructive/50","border-emerald-500/40","border-foreground/10","border-green-500/30","border-input","border-l","border-l-2","border-l-transparent","border-muted-foreground/30","border-primary","border-r","border-red-500/40","border-sidebar-border","border-t","border-t-0","border-t-border/40","border-t-muted-foreground/70","border-t-transparent","border-transparent","border-warning/30","border-warning/40","border-y","bottom-0","break-all","break-words","col-start-2","collapse","columns-2","columns-3","com","container","contents","cursor-col-resize","cursor-default","cursor-grab","cursor-pointer","cursor-row-resize","dark","dark:aria-invalid:border-destructive/50","dark:aria-invalid:ring-destructive/40","dark:bg-destructive/20","dark:bg-destructive/60","dark:bg-input/30","dark:bg-transparent","dark:border-accent-brand/40","dark:border-input","dark:data-[state=active]:bg-input/30","dark:data-[state=active]:border-input","dark:data-[state=active]:text-foreground","dark:data-[state=checked]:bg-primary","dark:data-[variant=destructive]:focus:bg-destructive/20","dark:disabled:bg-input/80","dark:focus-visible:ring-destructive/40","dark:hover:bg-accent-brand/10","dark:hover:bg-destructive/10","dark:hover:bg-destructive/30","dark:hover:bg-input/50","dark:hover:bg-muted/50","dark:text-muted-foreground","data-[disabled=true]:opacity-50","data-[disabled=true]:pointer-events-none","data-[disabled]:opacity-50","data-[disabled]:pointer-events-none","data-[orientation=horizontal]:h-1.5","data-[orientation=horizontal]:h-full","data-[orientation=horizontal]:h-px","data-[orientation=horizontal]:w-full","data-[orientation=vertical]:flex-col","data-[orientation=vertical]:h-full","data-[orientation=vertical]:min-h-44","data-[orientation=vertical]:self-center","data-[orientation=vertical]:self-stretch","data-[orientation=vertical]:w-1.5","data-[orientation=vertical]:w-auto","data-[orientation=vertical]:w-full","data-[orientation=vertical]:w-px","data-[placeholder]:text-muted-foreground","data-[selected=true]:bg-muted","data-[selected=true]:text-accent-foreground","data-[side=bottom]:border-t","data-[side=bottom]:bottom-0","data-[side=bottom]:data-closed:slide-out-to-bottom-10","data-[side=bottom]:data-open:slide-in-from-bottom-10","data-[side=bottom]:h-auto","data-[side=bottom]:inset-x-0","data-[side=bottom]:slide-in-from-top-2","data-[side=bottom]:translate-y-1","data-[side=left]:-translate-x-1","data-[side=left]:border-r","data-[side=left]:data-closed:slide-out-to-left-10","data-[side=left]:data-open:slide-in-from-left-10","data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]","data-[side=left]:h-full","data-[side=left]:inset-y-0","data-[side=left]:left-0","data-[side=left]:slide-in-from-right-2","data-[side=left]:sm:max-w-sm","data-[side=left]:w-3/4","data-[side=right]:border-l","data-[side=right]:data-closed:slide-out-to-right-10","data-[side=right]:data-open:slide-in-from-right-10","data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]","data-[side=right]:h-full","data-[side=right]:inset-y-0","data-[side=right]:right-0","data-[side=right]:slide-in-from-left-2","data-[side=right]:sm:max-w-sm","data-[side=right]:translate-x-1","data-[side=right]:w-3/4","data-[side=top]:-translate-y-1","data-[side=top]:border-b","data-[side=top]:data-closed:slide-out-to-top-10","data-[side=top]:data-open:slide-in-from-top-10","data-[side=top]:h-auto","data-[side=top]:inset-x-0","data-[side=top]:slide-in-from-bottom-2","data-[side=top]:top-0","data-[size=default]:h-9","data-[size=md]:text-xs","data-[size=sm]:gap-2","data-[size=sm]:h-8","data-[size=sm]:has-data-[slot=card-footer]:pb-0","data-[size=sm]:py-3","data-[size=sm]:text-xs","data-[state=active]:animate-in","data-[state=active]:bg-background","data-[state=active]:fade-in-0","data-[state=active]:shadow-sm","data-[state=checked]:bg-accent-brand","data-[state=checked]:bg-primary","data-[state=checked]:border-accent-brand","data-[state=checked]:border-primary","data-[state=checked]:text-primary-foreground","data-[state=checked]:translate-x-4","data-[state=closed]:animate-out","data-[state=closed]:fade-out-0","data-[state=closed]:overflow-hidden","data-[state=closed]:zoom-out-95","data-[state=delayed-open]:animate-in","data-[state=delayed-open]:fade-in-0","data-[state=delayed-open]:zoom-in-95","data-[state=inactive]:animate-out","data-[state=inactive]:fade-out-0","data-[state=open]:animate-in","data-[state=open]:fade-in-0","data-[state=open]:zoom-in-95","data-[state=unchecked]:bg-muted","data-[state=unchecked]:border-border","data-[state=unchecked]:translate-x-0.5","data-[variant=destructive]:*:[svg]:text-destructive","data-[variant=destructive]:focus:bg-destructive/10","data-[variant=destructive]:focus:text-destructive","data-[variant=destructive]:text-destructive","data-active:bg-sidebar-accent","data-active:font-medium","data-active:text-sidebar-accent-foreground","data-closed:animate-out","data-closed:fade-out-0","data-closed:zoom-out-95","data-disabled:opacity-50","data-disabled:pointer-events-none","data-inset:pl-7","data-open:animate-in","data-open:bg-accent","data-open:fade-in-0","data-open:hover:bg-sidebar-accent","data-open:hover:text-sidebar-accent-foreground","data-open:text-accent-foreground","data-open:zoom-in-95","disabled:bg-input/50","disabled:cursor-not-allowed","disabled:opacity-30","disabled:opacity-40","disabled:opacity-50","disabled:opacity-60","disabled:pointer-events-none","divide-border","divide-y","drop-shadow","duration-100","duration-150","duration-200","duration-500","duration-[450ms]","ease-in-out","ease-linear","enabled:hover:text-accent-brand","fade-in","file:bg-transparent","file:border-0","file:font-medium","file:h-6","file:inline-flex","file:text-foreground","file:text-xs","fill-foreground","filter","fixed","flex","flex-1","flex-col","flex-col-reverse","flex-row","flex-row-reverse","flex-shrink-0","flex-wrap","focus-visible:border-destructive/40","focus-visible:border-ring","focus-visible:outline-1","focus-visible:outline-hidden","focus-visible:outline-none","focus-visible:outline-ring","focus-visible:relative","focus-visible:ring-0","focus-visible:ring-1","focus-visible:ring-2","focus-visible:ring-4","focus-visible:ring-[#f59145]/40","focus-visible:ring-[3px]","focus-visible:ring-destructive/20","focus-visible:ring-inset","focus-visible:ring-ring","focus-visible:ring-ring/50","focus-visible:z-10","focus-within:border-ring","focus-within:opacity-100","focus-within:ring-1","focus-within:ring-ring/50","focus:**:text-accent-foreground","focus:bg-accent","focus:ring-1","focus:ring-ring","focus:text-accent-brand","focus:text-accent-foreground","font-bold","font-heading","font-medium","font-mono","font-normal","font-semibold","fs-lg","fs-md","fs-sm","fs-xl","fs-xs","gap-0","gap-0.5","gap-1","gap-1.5","gap-2","gap-2.5","gap-3","gap-3.5","gap-4","gap-5","gap-6","gap-[1.75px]","gap-[3.5px]","gap-px","gap-x-2","gap-x-4","gap-y-0.5","gap-y-1","gap-y-1.5","grid","grid-cols-1","grid-cols-2","grid-cols-3","grid-cols-4","grid-cols-6","grid-cols-8","grid-cols-[0_1fr]","group","group-[.toast]:!border-accent-brand/30","group-[.toast]:!border-destructive/30","group-[.toast]:!text-accent-brand","group-[.toast]:!text-destructive","group-[.toast]:bg-accent-brand","group-[.toast]:bg-muted","group-[.toast]:font-semibold","group-[.toast]:text-muted-foreground","group-[.toast]:text-white","group-[.toaster]:bg-card","group-[.toaster]:border-border","group-[.toaster]:font-mono","group-[.toaster]:rounded-none!","group-[.toaster]:shadow-lg","group-[.toaster]:text-card-foreground","group-data-[collapsible=icon]:-mt-8","group-data-[collapsible=icon]:hidden","group-data-[collapsible=icon]:opacity-0","group-data-[collapsible=icon]:overflow-hidden","group-data-[collapsible=icon]:p-0!","group-data-[collapsible=icon]:p-2!","group-data-[collapsible=icon]:size-8!","group-data-[collapsible=icon]:w-(--sidebar-width-icon)","group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]","group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]","group-data-[collapsible=offcanvas]:after:left-full","group-data-[collapsible=offcanvas]:translate-x-0","group-data-[collapsible=offcanvas]:w-0","group-data-[disabled=true]:opacity-50","group-data-[disabled=true]:pointer-events-none","group-data-[side=left]:-right-4","group-data-[side=left]:border-r","group-data-[side=right]:border-l","group-data-[side=right]:left-0","group-data-[side=right]:rotate-180","group-data-[size=sm]/card:[.border-b]:pb-3","group-data-[size=sm]/card:p-3","group-data-[size=sm]/card:px-3","group-data-[size=sm]/card:text-sm","group-data-[variant=floating]:ring-1","group-data-[variant=floating]:ring-sidebar-border","group-data-[variant=floating]:rounded-none","group-data-[variant=floating]:shadow-sm","group-focus-within/menu-item:opacity-100","group-focus-within/row:flex","group-focus/dropdown-menu-item:text-accent-foreground","group-has-data-[sidebar=menu-action]/menu-item:pr-8","group-hover/folder:opacity-100","group-hover/menu-item:opacity-100","group-hover/open:text-accent-brand","group-hover/resize:bg-accent-brand/60","group-hover/row:flex","group-hover:bg-accent-brand/60","group-hover:opacity-100","group/card","group/dropdown-menu-item","group/folder","group/menu-item","group/open","group/resize","group/row","grow","h-0.5","h-1","h-1.5","h-10","h-11","h-12","h-12.5","h-14","h-16","h-2","h-2.5","h-3","h-4","h-5","h-6","h-7","h-8","h-9","h-[136px]","h-[46%]","h-[calc(100%-1px)]","h-[var(--radix-select-trigger-height)]","h-dvh","h-full","h-px","h-screen","h-svh","has-[>img:first-child]:pt-0","has-[>svg]:gap-x-3","has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr]","has-[[data-state=open]]:opacity-100","has-data-[icon=inline-end]:pr-1.5","has-data-[icon=inline-end]:pr-2","has-data-[icon=inline-start]:pl-1.5","has-data-[icon=inline-start]:pl-2","has-data-[slot=card-action]:grid-cols-[1fr_auto]","has-data-[slot=card-description]:grid-rows-[auto_auto]","has-data-[slot=card-footer]:pb-0","has-data-[slot=kbd]:pr-1.5","has-data-[variant=inset]:bg-sidebar","hidden","host-status-stripe","hover:after:bg-sidebar-border","hover:bg-accent-brand/10","hover:bg-accent-brand/15","hover:bg-accent-brand/20","hover:bg-accent-brand/5","hover:bg-accent-brand/90","hover:bg-destructive/10","hover:bg-destructive/20","hover:bg-destructive/90","hover:bg-foreground/[0.03]","hover:bg-muted","hover:bg-muted/30","hover:bg-muted/40","hover:bg-muted/50","hover:bg-secondary/80","hover:bg-sidebar-accent","hover:border-accent-brand/40","hover:border-accent-brand/60","hover:border-destructive/40","hover:border-foreground/40","hover:border-muted-foreground","hover:group-data-[collapsible=offcanvas]:bg-sidebar","hover:opacity-100","hover:ring-4","hover:ring-[#f59145]/40","hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]","hover:text-accent-brand","hover:text-accent-brand/70","hover:text-destructive","hover:text-foreground","hover:text-sidebar-accent-foreground","hover:underline","in-data-[side=left]:cursor-w-resize","in-data-[side=right]:cursor-e-resize","inline","inline-block","inline-flex","inset-0","inset-x-0","inset-y-0","invisible","isolate","italic","items-baseline","items-center","items-start","items-stretch","justify-between","justify-center","justify-end","justify-items-start","justify-self-end","justify-start","last:border-0","last:border-b-0","leading-[1.7]","leading-none","leading-relaxed","leading-snug","leading-tight","left-0","left-1/2","left-2","left-2.5","left-[50%]","lg:block","lg:col-span-2","lg:flex","lg:grid-cols-1","lg:grid-cols-2","lg:grid-cols-3","lg:grid-cols-4","lg:grid-cols-5","lg:hidden","line-clamp-2","line-clamp-3","line-clamp-4","line-through","list-disc","lowercase","ltr:-translate-x-1/2","lucide","m-auto","max-h-(--radix-dropdown-menu-content-available-height)","max-h-(--radix-select-content-available-height)","max-h-40","max-h-56","max-h-64","max-h-96","max-h-[300px]","max-w-(--skeleton-width)","max-w-2xl","max-w-32","max-w-3xl","max-w-40","max-w-48","max-w-5xl","max-w-[380px]","max-w-[560px]","max-w-[calc(100%-2rem)]","max-w-lg","max-w-md","max-w-sm","max-w-xl","max-w-xs","mb-1","mb-2","mb-4","md:-mx-4","md:after:hidden","md:block","md:flex","md:flex-row","md:grid-cols-1","md:grid-cols-2","md:grid-cols-3","md:grid-cols-4","md:max-h-none","md:opacity-0","md:peer-data-[variant=inset]:m-2","md:peer-data-[variant=inset]:ml-0","md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2","md:peer-data-[variant=inset]:rounded-none","md:peer-data-[variant=inset]:shadow-sm","md:px-4","md:text-2xl","md:text-xs","md:w-44","md:w-56","min-h-0","min-h-16","min-h-6","min-h-8","min-h-[220px]","min-h-[70vh]","min-h-[80px]","min-h-full","min-h-svh","min-w-0","min-w-16","min-w-32","min-w-4","min-w-40","min-w-5","min-w-52","min-w-[8rem]","min-w-[96px]","min-w-[var(--radix-select-trigger-width)]","min-w-max","ml-0.5","ml-1.5","ml-2","ml-[27px]","ml-auto","motion-context-enter","motion-fade-enter","motion-interactive","motion-meter","motion-panel-enter","motion-transfer-phase","motion-workspace-enter","motion-workspace-layout","mr-1","mr-2","mt-0.5","mt-1","mt-3","mt-4","mt-auto","mt-px","mx-2","mx-3.5","mx-auto","my-1","my-3","my-auto","normal-case","not-data-[variant=destructive]:focus:**:text-accent-foreground","object-contain","opacity-0","opacity-100","opacity-40","opacity-50","opacity-60","opacity-70","opacity-80","origin-(--radix-dropdown-menu-content-transform-origin)","origin-(--radix-popover-content-transform-origin)","origin-(--radix-select-content-transform-origin)","origin-(--radix-tooltip-content-transform-origin)","origin-center","outline","outline-hidden","outline-none","overflow-auto","overflow-hidden","overflow-x-auto","overflow-x-hidden","overflow-y-auto","overline","p-0","p-0.5","p-1","p-1.5","p-10","p-2","p-2.5","p-3","p-4","p-5","p-6","p-[3px]","p-px","paused","pb-1","pb-1.5","pb-2","peer","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","peer-data-[size=sm]/menu-button:top-1","peer-data-active/menu-button:text-sidebar-accent-foreground","peer-disabled:cursor-not-allowed","peer-disabled:opacity-50","peer-hover/menu-button:text-sidebar-accent-foreground","peer/menu-button","pl-1","pl-2","pl-2.5","pl-4","pl-7","pl-8","pl-[8.75px]","placeholder:text-muted-foreground","placeholder:text-muted-foreground/50","pointer-coarse:flex","pointer-coarse:opacity-100","pointer-events-none","pr-0.5","pr-1","pr-1.5","pr-12","pr-2","pr-7","pr-8","pr-9","pr-[7px]","pt-0.5","pt-1","pt-2","pt-2.5","pt-3","pt-4","pt-[3.5px]","px-0","px-1","px-1.5","px-2","px-2.5","px-3","px-4","px-6","py-0","py-0.5","py-1","py-1.5","py-10","py-2","py-2.5","py-3","py-4","py-6","py-8","py-[1px]","py-[7px]","py-px","relative","resize","resize-none","right-0","right-1","right-1.5","right-2","right-2.5","right-3","ring","ring-1","ring-2","ring-accent-brand","ring-border","ring-foreground/10","ring-inset","ring-offset-1","ring-offset-background","ring-sidebar-ring","ring-white/60","rotate-45","rotate-90","rounded","rounded-[inherit]","rounded-full","rounded-none","row-span-2","row-start-1","rtl:-translate-x-1/2","running","safe-bottom","scroll-my-1","scrollbar-none","select-none","self-start","sepia","settings-search-hit","shadow","shadow-[0_0_0_1px_hsl(var(--sidebar-border))]","shadow-lg","shadow-md","shadow-none","shadow-sm","shadow-xl","shadow-xs","shrink-0","size-1.5","size-10","size-12","size-2.5","size-3","size-3.5","size-4","size-5","size-6","size-7","size-8","size-9","size-[22.75px]","size-full","sm:flex","sm:flex-row","sm:grid-cols-12","sm:grid-cols-2","sm:grid-cols-3","sm:grid-cols-4","sm:items-center","sm:justify-end","sm:max-w-lg","sm:max-w-sm","sm:mr-auto","sm:py-14","sm:text-left","space-y-1.5","space-y-2","sr-only","static","sticky","stroke-accent-brand","stroke-border","stroke-muted","supports-backdrop-filter:backdrop-blur-xs","tab-1","tab-2","table","tabular-nums","termix-titlebar","text-2xl","text-[10px]","text-[11px]","text-[13px]","text-[9px]","text-accent-brand","text-accent-brand/80","text-accent-foreground","text-background","text-base","text-blue-400","text-blue-500","text-card-foreground","text-center","text-current","text-destructive","text-destructive/80","text-emerald-500","text-foreground","text-foreground-secondary","text-green-500","text-left","text-lg","text-muted-foreground","text-muted-foreground/30","text-muted-foreground/40","text-muted-foreground/50","text-muted-foreground/60","text-muted-foreground/70","text-muted-foreground/80","text-popover-foreground","text-primary","text-primary-foreground","text-red-500","text-right","text-secondary-foreground","text-sidebar-foreground","text-sidebar-foreground/70","text-sm","text-warning","text-white","text-xl","text-xs","text-xs/relaxed","thin-scrollbar","toast","toaster","top-0","top-1","top-1.5","top-1/2","top-2","top-3","top-3.5","top-[50%]","touch-none","tracking-[0.35em]","tracking-[0.3em]","tracking-normal","tracking-tight","tracking-wide","tracking-wider","tracking-widest","transfer-progress-fill","transfer-progress-indeterminate","transfer-progress-stalled","transfer-progress-track","transform","transition","transition-[color,background-color,border-color,opacity,box-shadow,transform]","transition-[color,box-shadow]","transition-[height]","transition-[left,right,width]","transition-[left,top,width,height]","transition-[margin,opacity]","transition-[stroke-dasharray]","transition-[width,height,padding]","transition-[width]","transition-all","transition-colors","transition-none","transition-opacity","transition-shadow","transition-transform","translate-x-0.5","translate-x-4","translate-x-[-50%]","translate-x-px","translate-y-[-1px]","translate-y-[-50%]","translate-y-[calc(-50%_-_2px)]","truncate","underline","underline-offset-2","underline-offset-4","uppercase","visible","w-(--radix-dropdown-menu-trigger-width)","w-(--sidebar-width)","w-0.5","w-1/2","w-1/4","w-10","w-11","w-12","w-12.5","w-2","w-2.5","w-2/3","w-28","w-3","w-3/4","w-4","w-40","w-48","w-5","w-5/6","w-52","w-56","w-6","w-60","w-64","w-72","w-9","w-[240px]","w-[3px]","w-[46%]","w-[var(--radix-popover-trigger-width)]","w-auto","w-fit","w-full","w-px","w-screen","whitespace-normal","whitespace-nowrap","whitespace-pre-line","whitespace-pre-wrap","xl:grid-cols-1","xl:grid-cols-2","xl:grid-cols-3","xl:grid-cols-4","z-0","z-10","z-20","z-30","z-40","z-50","z-500","z-[100]","z-[60]","z-[70]","z-[9998]","z-[99999]"]
|
|
@@ -43,7 +43,27 @@ export declare const getCompanionDef: (id: string) => CompanionDef;
|
|
|
43
43
|
export declare const listCompanionDefs: () => CompanionDef[];
|
|
44
44
|
export declare const useCompanionDefs: () => CompanionDef[];
|
|
45
45
|
export declare const resetCompanions: () => void;
|
|
46
|
+
/** How a host wants its panel bar: on or off, where, which buttons in what order. */
|
|
47
|
+
export interface CompanionLayout {
|
|
48
|
+
enabled?: boolean;
|
|
49
|
+
side?: CompanionSide;
|
|
50
|
+
order?: string[];
|
|
51
|
+
hidden?: string[];
|
|
52
|
+
}
|
|
53
|
+
export interface CompanionLayoutDef {
|
|
54
|
+
id: string;
|
|
55
|
+
tabTypes: string[];
|
|
56
|
+
resolve: (host: Host | undefined) => CompanionLayout;
|
|
57
|
+
}
|
|
58
|
+
export declare const registerCompanionLayoutDef: (item: CompanionLayoutDef) => () => void;
|
|
59
|
+
export declare const useCompanionLayoutDefs: () => CompanionLayoutDef[];
|
|
60
|
+
export declare const resetCompanionLayouts: () => void;
|
|
61
|
+
export declare function resolveCompanionLayout(tabType: string, host: Host | undefined): CompanionLayout;
|
|
46
62
|
export declare function companionApplies(def: CompanionDef, tab: Tab): boolean;
|
|
63
|
+
/** Orders defs by a saved layout. Ones it has not seen keep their place after. */
|
|
64
|
+
export declare function arrangeCompanions<T extends {
|
|
65
|
+
id: string;
|
|
66
|
+
}>(defs: T[], order: string[] | undefined): T[];
|
|
47
67
|
export interface CompanionTabState {
|
|
48
68
|
/** The companion shown, or null when closed. */
|
|
49
69
|
openId: string | null;
|
package/dist/host/ui.js
CHANGED
package/dist/manifest.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export { ENV_NAME_PATTERN, MAX_ENV_DESCRIPTION_LENGTH, pluginDocsPage, pluginDoc
|
|
|
20
20
|
* "^1.2" needs 1.2 or later). engine.termix is checked against the core
|
|
21
21
|
* version by the server.
|
|
22
22
|
*/
|
|
23
|
-
export declare const PLUGIN_API_VERSION = "1.
|
|
23
|
+
export declare const PLUGIN_API_VERSION = "1.11.0";
|
|
24
24
|
/** The API major, the default engine.api for a new plugin. */
|
|
25
25
|
export declare const SUPPORTED_PLUGIN_API_VERSION: string;
|
|
26
26
|
/** Whether this build's plugin API satisfies a manifest's engine.api. */
|
package/dist/manifest.js
CHANGED
|
@@ -22,7 +22,7 @@ export { ENV_NAME_PATTERN, MAX_ENV_DESCRIPTION_LENGTH, pluginDocsPage, pluginDoc
|
|
|
22
22
|
* "^1.2" needs 1.2 or later). engine.termix is checked against the core
|
|
23
23
|
* version by the server.
|
|
24
24
|
*/
|
|
25
|
-
export const PLUGIN_API_VERSION = "1.
|
|
25
|
+
export const PLUGIN_API_VERSION = "1.11.0";
|
|
26
26
|
/** The API major, the default engine.api for a new plugin. */
|
|
27
27
|
export const SUPPORTED_PLUGIN_API_VERSION = String(semver.major(PLUGIN_API_VERSION));
|
|
28
28
|
/** Whether this build's plugin API satisfies a manifest's engine.api. */
|
package/dist/testing/setup.js
CHANGED
package/package.json
CHANGED