specsmd 0.1.68 → 0.1.69
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.
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
(function () {
|
|
2
|
+
var themeKey = 'specsmd:webview-state';
|
|
3
|
+
|
|
4
|
+
function readTheme() {
|
|
5
|
+
try {
|
|
6
|
+
var stored = localStorage.getItem(themeKey);
|
|
7
|
+
if (stored === '"dark"' || stored === 'dark') {
|
|
8
|
+
return 'dark';
|
|
9
|
+
}
|
|
10
|
+
if (stored === '"light"' || stored === 'light') {
|
|
11
|
+
return 'light';
|
|
12
|
+
}
|
|
13
|
+
var parsed = JSON.parse(stored);
|
|
14
|
+
if (parsed === 'dark' || parsed === 'light') {
|
|
15
|
+
return parsed;
|
|
16
|
+
}
|
|
17
|
+
} catch (error) {
|
|
18
|
+
return 'dark';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches
|
|
22
|
+
? 'light'
|
|
23
|
+
: 'dark';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function applyTheme(theme) {
|
|
27
|
+
document.documentElement.dataset.theme = theme;
|
|
28
|
+
document.documentElement.style.colorScheme = theme;
|
|
29
|
+
}
|
|
30
|
+
|
|
2
31
|
document.documentElement.dataset.host = 'dashboard-web';
|
|
32
|
+
applyTheme(readTheme());
|
|
33
|
+
|
|
34
|
+
window.addEventListener('storage', function (event) {
|
|
35
|
+
if (event.key !== themeKey) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
applyTheme(readTheme());
|
|
40
|
+
});
|
|
3
41
|
|
|
4
42
|
window.addEventListener('message', function (event) {
|
|
5
43
|
if (event.data && event.data.type === 'setData') {
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
:root {
|
|
2
|
-
color-scheme: dark;
|
|
2
|
+
color-scheme: var(--specsmd-color-scheme, dark);
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
:root[data-theme="dark"] {
|
|
3
6
|
--vscode-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
4
7
|
--vscode-font-size: 13px;
|
|
5
8
|
--vscode-foreground: #cccccc;
|
|
@@ -9,9 +12,36 @@
|
|
|
9
12
|
--vscode-sideBarSectionHeader-background: #2d2d30;
|
|
10
13
|
--vscode-sideBarSectionHeader-border: #454545;
|
|
11
14
|
--vscode-input-background: #3c3c3c;
|
|
15
|
+
--vscode-input-border: #3f3f46;
|
|
12
16
|
--vscode-list-hoverBackground: #2a2d2e;
|
|
17
|
+
--vscode-list-activeSelectionBackground: #094771;
|
|
18
|
+
--vscode-badge-background: #4d4d4d;
|
|
19
|
+
--vscode-badge-foreground: #ffffff;
|
|
20
|
+
--vscode-button-background: #0e639c;
|
|
21
|
+
--vscode-button-foreground: #ffffff;
|
|
22
|
+
--vscode-scrollbarSlider-background: #686868;
|
|
23
|
+
--specsmd-color-scheme: dark;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
:root[data-theme="light"] {
|
|
27
|
+
--vscode-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
28
|
+
--vscode-font-size: 13px;
|
|
29
|
+
--vscode-foreground: #1f2328;
|
|
30
|
+
--vscode-descriptionForeground: #57606a;
|
|
31
|
+
--vscode-sideBar-background: #f6f8fa;
|
|
32
|
+
--vscode-editor-background: #ffffff;
|
|
33
|
+
--vscode-sideBarSectionHeader-background: #eef2f7;
|
|
34
|
+
--vscode-sideBarSectionHeader-border: #d0d7de;
|
|
35
|
+
--vscode-input-background: #ffffff;
|
|
36
|
+
--vscode-input-border: #d0d7de;
|
|
37
|
+
--vscode-list-hoverBackground: #eef2f7;
|
|
38
|
+
--vscode-list-activeSelectionBackground: #dbeafe;
|
|
39
|
+
--vscode-badge-background: #d0d7de;
|
|
40
|
+
--vscode-badge-foreground: #24292f;
|
|
13
41
|
--vscode-button-background: #0e639c;
|
|
14
42
|
--vscode-button-foreground: #ffffff;
|
|
43
|
+
--vscode-scrollbarSlider-background: #b6c2cf;
|
|
44
|
+
--specsmd-color-scheme: light;
|
|
15
45
|
}
|
|
16
46
|
|
|
17
47
|
html,
|
|
@@ -604,6 +604,114 @@
|
|
|
604
604
|
}
|
|
605
605
|
|
|
606
606
|
// src/webview/styles/theme.ts
|
|
607
|
+
var THEME_STORAGE_KEY = "specsmd:webview-theme";
|
|
608
|
+
var THEME_PALETTES = {
|
|
609
|
+
dark: {
|
|
610
|
+
"--vscode-foreground": "#cccccc",
|
|
611
|
+
"--vscode-descriptionForeground": "#8b8b8b",
|
|
612
|
+
"--vscode-sideBar-background": "#252526",
|
|
613
|
+
"--vscode-editor-background": "#1e1e1e",
|
|
614
|
+
"--vscode-sideBarSectionHeader-background": "#2d2d30",
|
|
615
|
+
"--vscode-sideBarSectionHeader-border": "#454545",
|
|
616
|
+
"--vscode-input-background": "#3c3c3c",
|
|
617
|
+
"--vscode-input-border": "#3f3f46",
|
|
618
|
+
"--vscode-list-hoverBackground": "#2a2d2e",
|
|
619
|
+
"--vscode-list-activeSelectionBackground": "#094771",
|
|
620
|
+
"--vscode-badge-background": "#4d4d4d",
|
|
621
|
+
"--vscode-badge-foreground": "#ffffff",
|
|
622
|
+
"--vscode-button-background": "#0e639c",
|
|
623
|
+
"--vscode-button-foreground": "#ffffff",
|
|
624
|
+
"--vscode-scrollbarSlider-background": "#686868",
|
|
625
|
+
"--vscode-font-family": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
|
|
626
|
+
"--vscode-font-size": "13px",
|
|
627
|
+
"--specsmd-color-scheme": "dark",
|
|
628
|
+
"--specsmd-surface-glow": "rgba(249, 115, 22, 0.05)"
|
|
629
|
+
},
|
|
630
|
+
light: {
|
|
631
|
+
"--vscode-foreground": "#1f2328",
|
|
632
|
+
"--vscode-descriptionForeground": "#57606a",
|
|
633
|
+
"--vscode-sideBar-background": "#f6f8fa",
|
|
634
|
+
"--vscode-editor-background": "#ffffff",
|
|
635
|
+
"--vscode-sideBarSectionHeader-background": "#eef2f7",
|
|
636
|
+
"--vscode-sideBarSectionHeader-border": "#d0d7de",
|
|
637
|
+
"--vscode-input-background": "#ffffff",
|
|
638
|
+
"--vscode-input-border": "#d0d7de",
|
|
639
|
+
"--vscode-list-hoverBackground": "#eef2f7",
|
|
640
|
+
"--vscode-list-activeSelectionBackground": "#dbeafe",
|
|
641
|
+
"--vscode-badge-background": "#d0d7de",
|
|
642
|
+
"--vscode-badge-foreground": "#24292f",
|
|
643
|
+
"--vscode-button-background": "#0e639c",
|
|
644
|
+
"--vscode-button-foreground": "#ffffff",
|
|
645
|
+
"--vscode-scrollbarSlider-background": "#b6c2cf",
|
|
646
|
+
"--vscode-font-family": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
|
|
647
|
+
"--vscode-font-size": "13px",
|
|
648
|
+
"--specsmd-color-scheme": "light",
|
|
649
|
+
"--specsmd-surface-glow": "rgba(14, 99, 156, 0.06)"
|
|
650
|
+
}
|
|
651
|
+
};
|
|
652
|
+
function isThemeMode(value) {
|
|
653
|
+
return value === "dark" || value === "light";
|
|
654
|
+
}
|
|
655
|
+
function getThemeRoot(target) {
|
|
656
|
+
if (typeof document === "undefined") {
|
|
657
|
+
return null;
|
|
658
|
+
}
|
|
659
|
+
if (!target) {
|
|
660
|
+
return document.documentElement;
|
|
661
|
+
}
|
|
662
|
+
if (target instanceof Document) {
|
|
663
|
+
return target.documentElement;
|
|
664
|
+
}
|
|
665
|
+
return target;
|
|
666
|
+
}
|
|
667
|
+
function readStoredTheme() {
|
|
668
|
+
if (typeof window === "undefined" || typeof localStorage === "undefined") {
|
|
669
|
+
return null;
|
|
670
|
+
}
|
|
671
|
+
try {
|
|
672
|
+
const stored = localStorage.getItem(THEME_STORAGE_KEY);
|
|
673
|
+
return isThemeMode(stored) ? stored : null;
|
|
674
|
+
} catch {
|
|
675
|
+
return null;
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
function getSystemTheme() {
|
|
679
|
+
if (typeof window !== "undefined" && typeof window.matchMedia === "function") {
|
|
680
|
+
return window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
|
|
681
|
+
}
|
|
682
|
+
return "dark";
|
|
683
|
+
}
|
|
684
|
+
function getInitialTheme(state2) {
|
|
685
|
+
if (isThemeMode(state2)) {
|
|
686
|
+
return state2;
|
|
687
|
+
}
|
|
688
|
+
const stored = readStoredTheme();
|
|
689
|
+
if (stored) {
|
|
690
|
+
return stored;
|
|
691
|
+
}
|
|
692
|
+
return getSystemTheme();
|
|
693
|
+
}
|
|
694
|
+
function persistTheme(theme) {
|
|
695
|
+
if (typeof window === "undefined" || typeof localStorage === "undefined") {
|
|
696
|
+
return;
|
|
697
|
+
}
|
|
698
|
+
try {
|
|
699
|
+
localStorage.setItem(THEME_STORAGE_KEY, theme);
|
|
700
|
+
} catch {
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
function applyTheme(theme, target) {
|
|
704
|
+
const root = getThemeRoot(target);
|
|
705
|
+
if (!root) {
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
const palette = THEME_PALETTES[theme];
|
|
709
|
+
for (const [name, value] of Object.entries(palette)) {
|
|
710
|
+
root.style.setProperty(name, value);
|
|
711
|
+
}
|
|
712
|
+
root.dataset.theme = theme;
|
|
713
|
+
root.style.setProperty("color-scheme", palette["--specsmd-color-scheme"]);
|
|
714
|
+
}
|
|
607
715
|
var themeStyles = i`
|
|
608
716
|
:host {
|
|
609
717
|
/* VS Code font */
|
|
@@ -623,6 +731,8 @@
|
|
|
623
731
|
--status-active: #f97316;
|
|
624
732
|
--status-pending: #6b7280;
|
|
625
733
|
--status-blocked: #ef4444;
|
|
734
|
+
|
|
735
|
+
color-scheme: var(--specsmd-color-scheme, dark);
|
|
626
736
|
}
|
|
627
737
|
`;
|
|
628
738
|
var resetStyles = i`
|
|
@@ -6497,8 +6607,17 @@
|
|
|
6497
6607
|
|
|
6498
6608
|
// src/webview/vscode-api.ts
|
|
6499
6609
|
function createStandaloneApi() {
|
|
6610
|
+
const stateKey = "specsmd:webview-state";
|
|
6500
6611
|
let state2 = null;
|
|
6501
6612
|
let eventsConnected = false;
|
|
6613
|
+
try {
|
|
6614
|
+
const stored = typeof localStorage !== "undefined" ? localStorage.getItem(stateKey) : null;
|
|
6615
|
+
if (stored !== null) {
|
|
6616
|
+
state2 = JSON.parse(stored);
|
|
6617
|
+
}
|
|
6618
|
+
} catch {
|
|
6619
|
+
state2 = null;
|
|
6620
|
+
}
|
|
6502
6621
|
const connectEvents = () => {
|
|
6503
6622
|
if (eventsConnected || typeof EventSource !== "function") {
|
|
6504
6623
|
return;
|
|
@@ -6537,6 +6656,12 @@
|
|
|
6537
6656
|
},
|
|
6538
6657
|
setState(nextState) {
|
|
6539
6658
|
state2 = nextState;
|
|
6659
|
+
try {
|
|
6660
|
+
if (typeof localStorage !== "undefined") {
|
|
6661
|
+
localStorage.setItem(stateKey, JSON.stringify(nextState));
|
|
6662
|
+
}
|
|
6663
|
+
} catch {
|
|
6664
|
+
}
|
|
6540
6665
|
}
|
|
6541
6666
|
};
|
|
6542
6667
|
}
|
|
@@ -6555,6 +6680,7 @@
|
|
|
6555
6680
|
this._availableFlows = [];
|
|
6556
6681
|
this._fireData = null;
|
|
6557
6682
|
this._fireActiveTab = "runs";
|
|
6683
|
+
this._theme = "dark";
|
|
6558
6684
|
/**
|
|
6559
6685
|
* Version counter for specs HTML to track when handlers need reattachment.
|
|
6560
6686
|
* Incremented each time _specsHtml changes.
|
|
@@ -6650,6 +6776,9 @@
|
|
|
6650
6776
|
}
|
|
6651
6777
|
connectedCallback() {
|
|
6652
6778
|
super.connectedCallback();
|
|
6779
|
+
this._theme = getInitialTheme(vscode.getState());
|
|
6780
|
+
this._applyTheme(this._theme);
|
|
6781
|
+
vscode.setState(this._theme);
|
|
6653
6782
|
window.addEventListener("message", this._handleMessage);
|
|
6654
6783
|
vscode.postMessage({ type: "ready" });
|
|
6655
6784
|
}
|
|
@@ -6799,11 +6928,44 @@
|
|
|
6799
6928
|
}
|
|
6800
6929
|
render() {
|
|
6801
6930
|
if (!this._loaded) {
|
|
6802
|
-
return b2
|
|
6931
|
+
return b2`
|
|
6932
|
+
<div class="shell">
|
|
6933
|
+
<div class="shell-chrome">
|
|
6934
|
+
<div class="shell-brand">
|
|
6935
|
+
<span class="shell-mark">⚡</span>
|
|
6936
|
+
<div class="shell-brand-copy">
|
|
6937
|
+
<div class="shell-title">SpecsMD</div>
|
|
6938
|
+
<div class="shell-subtitle">Loading dashboard</div>
|
|
6939
|
+
</div>
|
|
6940
|
+
</div>
|
|
6941
|
+
<div class="shell-actions">
|
|
6942
|
+
${this._renderThemeToggle()}
|
|
6943
|
+
</div>
|
|
6944
|
+
</div>
|
|
6945
|
+
<div class="loading">Loading...</div>
|
|
6946
|
+
</div>
|
|
6947
|
+
`;
|
|
6803
6948
|
}
|
|
6804
6949
|
const isFireFlow = this._activeFlow?.id === "fire";
|
|
6805
6950
|
return b2`
|
|
6806
|
-
|
|
6951
|
+
<div class="shell">
|
|
6952
|
+
<div class="shell-chrome">
|
|
6953
|
+
<div class="shell-brand">
|
|
6954
|
+
<span class="shell-mark">⚡</span>
|
|
6955
|
+
<div class="shell-brand-copy">
|
|
6956
|
+
<div class="shell-title">SpecsMD</div>
|
|
6957
|
+
<div class="shell-subtitle">${isFireFlow ? "FIRE dashboard" : "AI-DLC dashboard"}</div>
|
|
6958
|
+
</div>
|
|
6959
|
+
</div>
|
|
6960
|
+
<div class="shell-actions">
|
|
6961
|
+
${this._renderThemeToggle()}
|
|
6962
|
+
</div>
|
|
6963
|
+
</div>
|
|
6964
|
+
|
|
6965
|
+
<div class="app-body">
|
|
6966
|
+
${isFireFlow ? this._renderFireApp() : this._renderAidlcApp()}
|
|
6967
|
+
</div>
|
|
6968
|
+
</div>
|
|
6807
6969
|
`;
|
|
6808
6970
|
}
|
|
6809
6971
|
/**
|
|
@@ -6893,6 +7055,28 @@
|
|
|
6893
7055
|
></fire-view>
|
|
6894
7056
|
`;
|
|
6895
7057
|
}
|
|
7058
|
+
/**
|
|
7059
|
+
* Render the theme toggle control.
|
|
7060
|
+
*/
|
|
7061
|
+
_renderThemeToggle() {
|
|
7062
|
+
const isDark = this._theme === "dark";
|
|
7063
|
+
const nextTheme = isDark ? "light" : "dark";
|
|
7064
|
+
const label = isDark ? "Light" : "Dark";
|
|
7065
|
+
const title = `Switch to ${nextTheme} mode`;
|
|
7066
|
+
const icon = isDark ? w`<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 8.25A3.75 3.75 0 1 0 12 15.75 3.75 3.75 0 0 0 12 8.25Zm0-6a1 1 0 0 1 1 1.06l-.05 1.94a1 1 0 1 1-2 0l-.05-1.94A1 1 0 0 1 12 2.25Zm0 16.5a1 1 0 0 1 1 1.06l-.05 1.94a1 1 0 1 1-2 0l-.05-1.94a1 1 0 0 1 1.05-1.06Zm10.5-6a1 1 0 0 1-1.06 1l-1.94-.05a1 1 0 1 1 0-2l1.94-.05a1 1 0 0 1 1.06 1.1ZM4.5 12a1 1 0 0 1-1.06 1l-1.94-.05a1 1 0 1 1 0-2l1.94-.05A1 1 0 0 1 4.5 12Zm14.45-7.95a1 1 0 0 1 .04 1.41l-1.37 1.37a1 1 0 1 1-1.41-1.41l1.37-1.37a1 1 0 0 1 1.37 0Zm-11.14 11.1a1 1 0 0 1 .04 1.41l-1.37 1.37a1 1 0 1 1-1.41-1.41l1.37-1.37a1 1 0 0 1 1.37 0Zm11.14 2.78a1 1 0 0 1-1.41.04l-1.37-1.37a1 1 0 1 1 1.41-1.41l1.37 1.37a1 1 0 0 1 0 1.37ZM7.81 7.81a1 1 0 0 1-1.41.04L5.03 6.48a1 1 0 1 1 1.41-1.41l1.37 1.37a1 1 0 0 1 0 1.37Z"/></svg>` : w`<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M21.75 14.2A9.7 9.7 0 0 1 9.8 2.25a1 1 0 0 0-1.16 1.16 8.5 8.5 0 1 0 12.95 11.95 1 1 0 0 0 .16-1.16Z"/></svg>`;
|
|
7067
|
+
return b2`
|
|
7068
|
+
<button
|
|
7069
|
+
class="theme-toggle"
|
|
7070
|
+
type="button"
|
|
7071
|
+
title=${title}
|
|
7072
|
+
aria-label=${title}
|
|
7073
|
+
@click=${this._toggleTheme}
|
|
7074
|
+
>
|
|
7075
|
+
<span class="theme-toggle-icon">${icon}</span>
|
|
7076
|
+
<span class="theme-toggle-text">${label}</span>
|
|
7077
|
+
</button>
|
|
7078
|
+
`;
|
|
7079
|
+
}
|
|
6896
7080
|
// ==================== FIRE Event Handlers ====================
|
|
6897
7081
|
_handleFireTabChange(e7) {
|
|
6898
7082
|
this._fireActiveTab = e7.detail.tab;
|
|
@@ -6932,6 +7116,21 @@
|
|
|
6932
7116
|
_handleFlowSwitch(e7) {
|
|
6933
7117
|
vscode.postMessage({ type: "switchFlow" });
|
|
6934
7118
|
}
|
|
7119
|
+
/**
|
|
7120
|
+
* Toggle the dashboard theme and persist it locally.
|
|
7121
|
+
*/
|
|
7122
|
+
_toggleTheme() {
|
|
7123
|
+
this._theme = this._theme === "dark" ? "light" : "dark";
|
|
7124
|
+
this._applyTheme(this._theme);
|
|
7125
|
+
vscode.setState(this._theme);
|
|
7126
|
+
persistTheme(this._theme);
|
|
7127
|
+
}
|
|
7128
|
+
/**
|
|
7129
|
+
* Apply the selected theme to the document root.
|
|
7130
|
+
*/
|
|
7131
|
+
_applyTheme(theme) {
|
|
7132
|
+
applyTheme(theme, document.documentElement);
|
|
7133
|
+
}
|
|
6935
7134
|
/**
|
|
6936
7135
|
* Handle tab change from the tabs component.
|
|
6937
7136
|
*/
|
|
@@ -7008,6 +7207,111 @@
|
|
|
7008
7207
|
background: var(--background);
|
|
7009
7208
|
}
|
|
7010
7209
|
|
|
7210
|
+
.shell {
|
|
7211
|
+
display: flex;
|
|
7212
|
+
flex-direction: column;
|
|
7213
|
+
flex: 1;
|
|
7214
|
+
min-height: 0;
|
|
7215
|
+
}
|
|
7216
|
+
|
|
7217
|
+
.shell-chrome {
|
|
7218
|
+
display: flex;
|
|
7219
|
+
align-items: center;
|
|
7220
|
+
justify-content: space-between;
|
|
7221
|
+
gap: 12px;
|
|
7222
|
+
padding: 10px 12px;
|
|
7223
|
+
background: linear-gradient(180deg, var(--editor-background) 0%, var(--vscode-sideBarSectionHeader-background) 100%);
|
|
7224
|
+
border-bottom: 1px solid var(--border-color);
|
|
7225
|
+
}
|
|
7226
|
+
|
|
7227
|
+
.shell-brand {
|
|
7228
|
+
display: flex;
|
|
7229
|
+
align-items: center;
|
|
7230
|
+
gap: 10px;
|
|
7231
|
+
min-width: 0;
|
|
7232
|
+
}
|
|
7233
|
+
|
|
7234
|
+
.shell-mark {
|
|
7235
|
+
width: 24px;
|
|
7236
|
+
height: 24px;
|
|
7237
|
+
border-radius: 6px;
|
|
7238
|
+
display: inline-flex;
|
|
7239
|
+
align-items: center;
|
|
7240
|
+
justify-content: center;
|
|
7241
|
+
background: var(--accent-primary);
|
|
7242
|
+
color: #ffffff;
|
|
7243
|
+
font-size: 13px;
|
|
7244
|
+
flex-shrink: 0;
|
|
7245
|
+
}
|
|
7246
|
+
|
|
7247
|
+
.shell-brand-copy {
|
|
7248
|
+
min-width: 0;
|
|
7249
|
+
}
|
|
7250
|
+
|
|
7251
|
+
.shell-title {
|
|
7252
|
+
font-size: 12px;
|
|
7253
|
+
font-weight: 600;
|
|
7254
|
+
line-height: 1.2;
|
|
7255
|
+
}
|
|
7256
|
+
|
|
7257
|
+
.shell-subtitle {
|
|
7258
|
+
font-size: 10px;
|
|
7259
|
+
color: var(--description-foreground);
|
|
7260
|
+
line-height: 1.2;
|
|
7261
|
+
}
|
|
7262
|
+
|
|
7263
|
+
.shell-actions {
|
|
7264
|
+
display: flex;
|
|
7265
|
+
align-items: center;
|
|
7266
|
+
gap: 8px;
|
|
7267
|
+
flex-shrink: 0;
|
|
7268
|
+
}
|
|
7269
|
+
|
|
7270
|
+
.theme-toggle {
|
|
7271
|
+
display: inline-flex;
|
|
7272
|
+
align-items: center;
|
|
7273
|
+
gap: 6px;
|
|
7274
|
+
padding: 6px 10px;
|
|
7275
|
+
border-radius: 6px;
|
|
7276
|
+
border: 1px solid var(--border-color);
|
|
7277
|
+
background: var(--vscode-input-background);
|
|
7278
|
+
color: var(--foreground);
|
|
7279
|
+
font-size: 11px;
|
|
7280
|
+
font-weight: 500;
|
|
7281
|
+
transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
|
|
7282
|
+
}
|
|
7283
|
+
|
|
7284
|
+
.theme-toggle:hover {
|
|
7285
|
+
background: var(--vscode-list-hoverBackground);
|
|
7286
|
+
border-color: var(--accent-primary);
|
|
7287
|
+
}
|
|
7288
|
+
|
|
7289
|
+
.theme-toggle-icon {
|
|
7290
|
+
display: inline-flex;
|
|
7291
|
+
align-items: center;
|
|
7292
|
+
justify-content: center;
|
|
7293
|
+
width: 14px;
|
|
7294
|
+
height: 14px;
|
|
7295
|
+
flex-shrink: 0;
|
|
7296
|
+
}
|
|
7297
|
+
|
|
7298
|
+
.theme-toggle-icon svg {
|
|
7299
|
+
width: 14px;
|
|
7300
|
+
height: 14px;
|
|
7301
|
+
fill: currentColor;
|
|
7302
|
+
}
|
|
7303
|
+
|
|
7304
|
+
.theme-toggle-text {
|
|
7305
|
+
min-width: 0;
|
|
7306
|
+
}
|
|
7307
|
+
|
|
7308
|
+
.app-body {
|
|
7309
|
+
display: flex;
|
|
7310
|
+
flex-direction: column;
|
|
7311
|
+
flex: 1;
|
|
7312
|
+
min-height: 0;
|
|
7313
|
+
}
|
|
7314
|
+
|
|
7011
7315
|
.view-container {
|
|
7012
7316
|
flex: 1;
|
|
7013
7317
|
overflow-y: auto;
|
|
@@ -7546,6 +7850,9 @@
|
|
|
7546
7850
|
__decorateClass([
|
|
7547
7851
|
r5()
|
|
7548
7852
|
], SpecsmdApp.prototype, "_fireActiveTab", 2);
|
|
7853
|
+
__decorateClass([
|
|
7854
|
+
r5()
|
|
7855
|
+
], SpecsmdApp.prototype, "_theme", 2);
|
|
7549
7856
|
SpecsmdApp = __decorateClass([
|
|
7550
7857
|
t3("specsmd-app")
|
|
7551
7858
|
], SpecsmdApp);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specsmd",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.69",
|
|
4
4
|
"description": "Multi-agent orchestration system for AI-native software development. Delivers AI-DLC, Agile, and custom SDLC flows as markdown-based agent systems.",
|
|
5
5
|
"main": "lib/installer.js",
|
|
6
6
|
"bin": {
|