@openspecui/web 2.1.4 → 2.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/CanvasRenderer-DvQQ868U.js +1 -0
- package/dist/assets/WebGLRenderer-Btkopy84.js +1 -0
- package/dist/assets/WebGPURenderer-mbRLbuQ3.js +1 -0
- package/dist/assets/browserAll-BN5cmbzO.js +1 -0
- package/dist/assets/{dist-BTVRljcR.js → dist-BVuO0PNY.js} +1 -1
- package/dist/assets/{dist-DgX3giV5.js → dist-BcS7MN40.js} +1 -1
- package/dist/assets/{dist-CmBUS2pv.js → dist-Bqlcw5p5.js} +1 -1
- package/dist/assets/{dist-BrT5ZB4u.js → dist-CQFpUBQu.js} +1 -1
- package/dist/assets/dist-CWn3VEyl.js +1 -0
- package/dist/assets/{dist-D2RwSjME.js → dist-CxW4GGvi.js} +1 -1
- package/dist/assets/{dist-CzSFLuL_.js → dist-DH4wkw64.js} +1 -1
- package/dist/assets/{dist-2NaYosWh.js → dist-DHt45678.js} +1 -1
- package/dist/assets/{dist-C4xLUyJU.js → dist-DZNziC27.js} +1 -1
- package/dist/assets/dist-DgZXq45Q.js +1 -0
- package/dist/assets/{dist-CTInPrv9.js → dist-KeQ1cUcv.js} +1 -1
- package/dist/assets/dist-RktJObPI.js +1 -0
- package/dist/assets/{ghostty-web-D47FqPw6.js → ghostty-web-DhqZ931y.js} +1 -1
- package/dist/assets/index-XY2gI2Cr.js +1541 -0
- package/dist/assets/{init-2-IXz72e.js → init-CUcnIfzq.js} +1 -1
- package/dist/assets/trpc-Bc5K_hrC.js +1 -0
- package/dist/assets/webworkerAll-BeYSpTrq.js +1 -0
- package/dist/index.html +1 -1
- package/dist-ssg/client/.vite/ssr-manifest.json +18 -15
- package/dist-ssg/client/assets/CanvasRenderer-ywGP4ZX6.js +1 -0
- package/dist-ssg/client/assets/WebGLRenderer-BsdWGz4N.js +1 -0
- package/dist-ssg/client/assets/WebGPURenderer-BSYkgdvY.js +1 -0
- package/dist-ssg/client/assets/browserAll-DS5YyFWm.js +1 -0
- package/dist-ssg/client/assets/{dist-BQNvK_3l.js → dist--YumqERH.js} +1 -1
- package/dist-ssg/client/assets/{dist-Y4Qwa-SE.js → dist-87HDXNnV.js} +1 -1
- package/dist-ssg/client/assets/{dist-BEtm8eJw.js → dist-BE-gshiE.js} +1 -1
- package/dist-ssg/client/assets/{dist-BIEfJi38.js → dist-BH-T4fEM.js} +1 -1
- package/dist-ssg/client/assets/{dist-CvcfGJJo.js → dist-BNFBNMFf.js} +1 -1
- package/dist-ssg/client/assets/{dist-DsY2cCQF.js → dist-Ck3PZ8aD.js} +1 -1
- package/dist-ssg/client/assets/{dist-CLDI68tg.js → dist-CwbIrxYE.js} +1 -1
- package/dist-ssg/client/assets/dist-DYgVARNM.js +1 -0
- package/dist-ssg/client/assets/dist-Dn1x1A71.js +1 -0
- package/dist-ssg/client/assets/{dist-D19jF2Jl.js → dist-DnVDd8oU.js} +1 -1
- package/dist-ssg/client/assets/{dist-BJ3y0n4E.js → dist-_UrJdd33.js} +1 -1
- package/dist-ssg/client/assets/dist-qnR3ecSd.js +1 -0
- package/dist-ssg/client/assets/{ghostty-web-BgUruDpm.js → ghostty-web-BOpWV9Ks.js} +1 -1
- package/dist-ssg/client/assets/{index.ssg-B5w5GXyx.js → index.ssg-BbuG-6d1.js} +137 -137
- package/dist-ssg/client/assets/{init-ABBNgqUV.js → init-CVq3lseD.js} +1 -1
- package/dist-ssg/client/assets/trpc-DwwL__SQ.js +1 -0
- package/dist-ssg/client/assets/webworkerAll-B-z6-30P.js +1 -0
- package/dist-ssg/client/index.ssg.html +1 -1
- package/dist-ssg/server/entry-server.js +142 -60
- package/package.json +1 -1
- package/dist/assets/CanvasRenderer-KAAm7LZA.js +0 -1
- package/dist/assets/WebGLRenderer-B9M4OWqi.js +0 -1
- package/dist/assets/WebGPURenderer-DUl1R9TQ.js +0 -1
- package/dist/assets/browserAll-CPLObGbz.js +0 -1
- package/dist/assets/dist-BpNz0wXg.js +0 -1
- package/dist/assets/dist-BwEZ1BjI.js +0 -1
- package/dist/assets/dist-D_Mefl-e.js +0 -1
- package/dist/assets/index-DG_B7CJb.js +0 -1541
- package/dist/assets/trpc-Dmbg5-3U.js +0 -1
- package/dist/assets/webworkerAll-Cslz2r8a.js +0 -1
- package/dist-ssg/client/assets/CanvasRenderer-DbQke82i.js +0 -1
- package/dist-ssg/client/assets/WebGLRenderer-B_XIn5Vk.js +0 -1
- package/dist-ssg/client/assets/WebGPURenderer-DMiifBxH.js +0 -1
- package/dist-ssg/client/assets/browserAll-BOxleJX6.js +0 -1
- package/dist-ssg/client/assets/dist-DSG6al-A.js +0 -1
- package/dist-ssg/client/assets/dist-DauGZ96x.js +0 -1
- package/dist-ssg/client/assets/dist-Isiir4ba.js +0 -1
- package/dist-ssg/client/assets/trpc-D8iiQFhg.js +0 -1
- package/dist-ssg/client/assets/webworkerAll-DAj2DFII.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{it as e}from"./Geometry-CNDxiJq_.js";import{a as t,i as n}from"./index.ssg-
|
|
1
|
+
import{it as e}from"./Geometry-CNDxiJq_.js";import{a as t,i as n}from"./index.ssg-BbuG-6d1.js";e.add(n),e.add(t);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{F as e}from"./index.ssg-BbuG-6d1.js";export{e as trpcClient};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./Geometry-CNDxiJq_.js";import"./index.ssg-BbuG-6d1.js";import"./init-CVq3lseD.js";
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
document.head.append(preconnectApi, preconnectStatic, stylesheet)
|
|
36
36
|
})()
|
|
37
37
|
</script>
|
|
38
|
-
<script type="module" crossorigin src="/assets/index.ssg-
|
|
38
|
+
<script type="module" crossorigin src="/assets/index.ssg-BbuG-6d1.js"></script>
|
|
39
39
|
<link rel="modulepreload" crossorigin href="/assets/chunk-DECur_0Z.js">
|
|
40
40
|
<link rel="modulepreload" crossorigin href="/assets/dist-QUHuPJsA.js">
|
|
41
41
|
<link rel="modulepreload" crossorigin href="/assets/dist-BGaHY1kO.js">
|
|
@@ -27703,6 +27703,46 @@ function getHostedScopedStorageKey(baseKey, locationLike) {
|
|
|
27703
27703
|
return state.hosted && state.sessionId ? `hosted-session:${state.sessionId}:${baseKey}` : baseKey;
|
|
27704
27704
|
}
|
|
27705
27705
|
//#endregion
|
|
27706
|
+
//#region src/lib/api-config.ts
|
|
27707
|
+
function isBrowser$1() {
|
|
27708
|
+
return typeof window !== "undefined" && typeof window.location !== "undefined";
|
|
27709
|
+
}
|
|
27710
|
+
function getHostedApiState() {
|
|
27711
|
+
if (!isBrowser$1()) return {
|
|
27712
|
+
hosted: false,
|
|
27713
|
+
apiBaseUrl: null,
|
|
27714
|
+
sessionId: null
|
|
27715
|
+
};
|
|
27716
|
+
return getHostedApiBootstrapState(window.location);
|
|
27717
|
+
}
|
|
27718
|
+
function getApiBaseUrl() {
|
|
27719
|
+
if (!isBrowser$1()) return "";
|
|
27720
|
+
return getHostedApiState().apiBaseUrl ?? "";
|
|
27721
|
+
}
|
|
27722
|
+
function buildWebSocketUrl(pathname) {
|
|
27723
|
+
if (!isBrowser$1()) return "";
|
|
27724
|
+
const baseUrl = getApiBaseUrl();
|
|
27725
|
+
if (baseUrl) {
|
|
27726
|
+
const url = new URL(baseUrl);
|
|
27727
|
+
return `${url.protocol === "https:" ? "wss:" : "ws:"}//${url.host}${pathname}`;
|
|
27728
|
+
}
|
|
27729
|
+
return `${window.location.protocol === "https:" ? "wss:" : "ws:"}//${window.location.host}${pathname}`;
|
|
27730
|
+
}
|
|
27731
|
+
function getWsUrl() {
|
|
27732
|
+
return buildWebSocketUrl("/trpc");
|
|
27733
|
+
}
|
|
27734
|
+
function getPtyWsUrl() {
|
|
27735
|
+
return buildWebSocketUrl("/ws/pty");
|
|
27736
|
+
}
|
|
27737
|
+
function getTrpcUrl() {
|
|
27738
|
+
const baseUrl = getApiBaseUrl();
|
|
27739
|
+
return baseUrl ? `${baseUrl}/trpc` : "/trpc";
|
|
27740
|
+
}
|
|
27741
|
+
function getHealthUrl() {
|
|
27742
|
+
const baseUrl = getApiBaseUrl();
|
|
27743
|
+
return baseUrl ? `${baseUrl}/api/health` : "/api/health";
|
|
27744
|
+
}
|
|
27745
|
+
//#endregion
|
|
27706
27746
|
//#region src/lib/static-mode.ts
|
|
27707
27747
|
var staticModeDetected = null;
|
|
27708
27748
|
if (typeof window !== "undefined" && window.__OPENSPEC_STATIC_MODE__ === true && true) {
|
|
@@ -27770,12 +27810,12 @@ var POP_ROUTES = [
|
|
|
27770
27810
|
"/opsx-verify",
|
|
27771
27811
|
"/opsx-compose"
|
|
27772
27812
|
];
|
|
27773
|
-
function getRemoteStorageKey() {
|
|
27774
|
-
return getHostedScopedStorageKey("nav-layout", window.location);
|
|
27775
|
-
}
|
|
27776
27813
|
function getLocalStorageKey() {
|
|
27777
27814
|
return getHostedScopedStorageKey("nav-layout", window.location);
|
|
27778
27815
|
}
|
|
27816
|
+
function buildProjectScopedStorageKey(projectDir) {
|
|
27817
|
+
return getHostedScopedStorageKey(`nav-layout:${encodeURIComponent(projectDir)}`, window.location);
|
|
27818
|
+
}
|
|
27779
27819
|
var PERSIST_DEBOUNCE = 300;
|
|
27780
27820
|
function isTabId(value) {
|
|
27781
27821
|
return ALL_TABS.includes(value);
|
|
@@ -27979,11 +28019,27 @@ function readLocalStorage() {
|
|
|
27979
28019
|
return null;
|
|
27980
28020
|
}
|
|
27981
28021
|
}
|
|
27982
|
-
function
|
|
28022
|
+
function readLocalStorageByKey(key) {
|
|
28023
|
+
try {
|
|
28024
|
+
const raw = localStorage.getItem(key);
|
|
28025
|
+
if (!raw) return null;
|
|
28026
|
+
return parsePersistedLayout(JSON.parse(raw));
|
|
28027
|
+
} catch {
|
|
28028
|
+
return null;
|
|
28029
|
+
}
|
|
28030
|
+
}
|
|
28031
|
+
function writeLocalStorage(layout, key = getLocalStorageKey()) {
|
|
27983
28032
|
try {
|
|
27984
|
-
localStorage.setItem(
|
|
28033
|
+
localStorage.setItem(key, JSON.stringify(layout));
|
|
27985
28034
|
} catch {}
|
|
27986
28035
|
}
|
|
28036
|
+
function collapseProjectDetailLocation(location) {
|
|
28037
|
+
const tabId = pathToTabId(location.pathname);
|
|
28038
|
+
if (!tabId) return location;
|
|
28039
|
+
if (location.pathname === tabId) return location;
|
|
28040
|
+
if (tabId === "/changes" || tabId === "/specs" || tabId === "/archive") return parseHref(tabId, location.state);
|
|
28041
|
+
return location;
|
|
28042
|
+
}
|
|
27987
28043
|
var carryActiveOnMovePlugin = ({ prevState, nextState, event }) => {
|
|
27988
28044
|
if (event.type !== "MOVE_TAB") return nextState;
|
|
27989
28045
|
const sourceArea = prevState.bottomTabs.includes(event.tabId) ? "bottom" : "main";
|
|
@@ -28303,6 +28359,7 @@ var NavController = class {
|
|
|
28303
28359
|
persistTimer = null;
|
|
28304
28360
|
kvUnsubscribe = null;
|
|
28305
28361
|
initialized = false;
|
|
28362
|
+
storageKey = typeof window === "undefined" ? "nav-layout" : getHostedScopedStorageKey("nav-layout", window.location);
|
|
28306
28363
|
constructor() {
|
|
28307
28364
|
if (typeof window === "undefined") return;
|
|
28308
28365
|
const local = isStaticMode() ? null : readLocalStorage();
|
|
@@ -28434,15 +28491,20 @@ var NavController = class {
|
|
|
28434
28491
|
if (this.initialized || isStaticMode()) return;
|
|
28435
28492
|
this.initialized = true;
|
|
28436
28493
|
try {
|
|
28494
|
+
const scopedStorageKey = await this.resolveProjectScopedStorageKey();
|
|
28495
|
+
if (scopedStorageKey && scopedStorageKey !== this.storageKey) {
|
|
28496
|
+
this.storageKey = scopedStorageKey;
|
|
28497
|
+
this.rebindProjectScopedLayout(scopedStorageKey);
|
|
28498
|
+
}
|
|
28437
28499
|
const { trpcClient } = await import("./assets/trpc-DtKUcEo0.js");
|
|
28438
|
-
const remote = parsePersistedLayout(await trpcClient.kv.get.query({ key:
|
|
28500
|
+
const remote = parsePersistedLayout(await trpcClient.kv.get.query({ key: this.storageKey }));
|
|
28439
28501
|
if (remote) {
|
|
28440
28502
|
if (remote.updatedAt > this.state.updatedAt) this.dispatch({
|
|
28441
28503
|
type: "APPLY_LAYOUT",
|
|
28442
28504
|
layout: remote
|
|
28443
28505
|
});
|
|
28444
28506
|
else if (this.state.updatedAt > remote.updatedAt) trpcClient.kv.set.mutate({
|
|
28445
|
-
key:
|
|
28507
|
+
key: this.storageKey,
|
|
28446
28508
|
value: {
|
|
28447
28509
|
mainTabs: this.state.mainTabs,
|
|
28448
28510
|
bottomTabs: this.state.bottomTabs,
|
|
@@ -28450,14 +28512,14 @@ var NavController = class {
|
|
|
28450
28512
|
}
|
|
28451
28513
|
}).catch(() => {});
|
|
28452
28514
|
} else if (this.state.updatedAt > 0) trpcClient.kv.set.mutate({
|
|
28453
|
-
key:
|
|
28515
|
+
key: this.storageKey,
|
|
28454
28516
|
value: {
|
|
28455
28517
|
mainTabs: this.state.mainTabs,
|
|
28456
28518
|
bottomTabs: this.state.bottomTabs,
|
|
28457
28519
|
updatedAt: this.state.updatedAt
|
|
28458
28520
|
}
|
|
28459
28521
|
}).catch(() => {});
|
|
28460
|
-
const subscription = trpcClient.kv.subscribe.subscribe({ key:
|
|
28522
|
+
const subscription = trpcClient.kv.subscribe.subscribe({ key: this.storageKey }, { onData: (data) => {
|
|
28461
28523
|
const incoming = parsePersistedLayout(data);
|
|
28462
28524
|
if (!incoming) return;
|
|
28463
28525
|
this.dispatch({
|
|
@@ -28521,7 +28583,7 @@ var NavController = class {
|
|
|
28521
28583
|
mainTabs: this.state.mainTabs,
|
|
28522
28584
|
bottomTabs: this.state.bottomTabs,
|
|
28523
28585
|
updatedAt: this.state.updatedAt
|
|
28524
|
-
});
|
|
28586
|
+
}, this.storageKey);
|
|
28525
28587
|
}
|
|
28526
28588
|
const effectiveUrlAction = transition.urlAction ?? (locationHrefChanged(prevState, this.state, "main") || locationHrefChanged(prevState, this.state, "bottom") || locationHrefChanged(prevState, this.state, "pop") ? "REPLACE" : void 0);
|
|
28527
28589
|
if (effectiveUrlAction) this.syncToUrl(effectiveUrlAction);
|
|
@@ -28573,12 +28635,12 @@ var NavController = class {
|
|
|
28573
28635
|
mainTabs: this.state.mainTabs,
|
|
28574
28636
|
bottomTabs: this.state.bottomTabs,
|
|
28575
28637
|
updatedAt: now
|
|
28576
|
-
});
|
|
28638
|
+
}, this.storageKey);
|
|
28577
28639
|
this.cancelPersistTimer();
|
|
28578
28640
|
this.persistTimer = setTimeout(() => {
|
|
28579
28641
|
this.persistTimer = null;
|
|
28580
28642
|
import("./assets/trpc-DtKUcEo0.js").then(({ trpcClient }) => trpcClient.kv.set.mutate({
|
|
28581
|
-
key:
|
|
28643
|
+
key: this.storageKey,
|
|
28582
28644
|
value: {
|
|
28583
28645
|
mainTabs: this.state.mainTabs,
|
|
28584
28646
|
bottomTabs: this.state.bottomTabs,
|
|
@@ -28587,6 +28649,39 @@ var NavController = class {
|
|
|
28587
28649
|
})).catch(() => {});
|
|
28588
28650
|
}, PERSIST_DEBOUNCE);
|
|
28589
28651
|
}
|
|
28652
|
+
async resolveProjectScopedStorageKey() {
|
|
28653
|
+
try {
|
|
28654
|
+
const response = await fetch(getHealthUrl());
|
|
28655
|
+
if (!response.ok) return null;
|
|
28656
|
+
const payload = await response.json();
|
|
28657
|
+
if (typeof payload.projectDir !== "string" || payload.projectDir.length === 0) return null;
|
|
28658
|
+
return buildProjectScopedStorageKey(payload.projectDir);
|
|
28659
|
+
} catch {
|
|
28660
|
+
return null;
|
|
28661
|
+
}
|
|
28662
|
+
}
|
|
28663
|
+
rebindProjectScopedLayout(storageKey) {
|
|
28664
|
+
const scopedLocal = readLocalStorageByKey(storageKey);
|
|
28665
|
+
if (scopedLocal) {
|
|
28666
|
+
const merged = mergeLayout(scopedLocal);
|
|
28667
|
+
this.state = normalizeState({
|
|
28668
|
+
...this.state,
|
|
28669
|
+
mainTabs: merged.mainTabs,
|
|
28670
|
+
bottomTabs: merged.bottomTabs,
|
|
28671
|
+
updatedAt: scopedLocal.updatedAt
|
|
28672
|
+
});
|
|
28673
|
+
this.normalizeUrl();
|
|
28674
|
+
return;
|
|
28675
|
+
}
|
|
28676
|
+
this.state = normalizeState({
|
|
28677
|
+
...this.state,
|
|
28678
|
+
mainLocation: collapseProjectDetailLocation(this.state.mainLocation),
|
|
28679
|
+
bottomLocation: collapseProjectDetailLocation(this.state.bottomLocation),
|
|
28680
|
+
updatedAt: 0
|
|
28681
|
+
});
|
|
28682
|
+
this.normalizeUrl();
|
|
28683
|
+
this.notifyListeners();
|
|
28684
|
+
}
|
|
28590
28685
|
};
|
|
28591
28686
|
var navController = new NavController();
|
|
28592
28687
|
if (typeof window !== "undefined" && !isStaticMode()) navController.init();
|
|
@@ -32209,42 +32304,6 @@ function createTRPCOptionsProxy(opts) {
|
|
|
32209
32304
|
});
|
|
32210
32305
|
}
|
|
32211
32306
|
//#endregion
|
|
32212
|
-
//#region src/lib/api-config.ts
|
|
32213
|
-
function isBrowser$1() {
|
|
32214
|
-
return typeof window !== "undefined" && typeof window.location !== "undefined";
|
|
32215
|
-
}
|
|
32216
|
-
function getHostedApiState() {
|
|
32217
|
-
if (!isBrowser$1()) return {
|
|
32218
|
-
hosted: false,
|
|
32219
|
-
apiBaseUrl: null,
|
|
32220
|
-
sessionId: null
|
|
32221
|
-
};
|
|
32222
|
-
return getHostedApiBootstrapState(window.location);
|
|
32223
|
-
}
|
|
32224
|
-
function getApiBaseUrl() {
|
|
32225
|
-
if (!isBrowser$1()) return "";
|
|
32226
|
-
return getHostedApiState().apiBaseUrl ?? "";
|
|
32227
|
-
}
|
|
32228
|
-
function buildWebSocketUrl(pathname) {
|
|
32229
|
-
if (!isBrowser$1()) return "";
|
|
32230
|
-
const baseUrl = getApiBaseUrl();
|
|
32231
|
-
if (baseUrl) {
|
|
32232
|
-
const url = new URL(baseUrl);
|
|
32233
|
-
return `${url.protocol === "https:" ? "wss:" : "ws:"}//${url.host}${pathname}`;
|
|
32234
|
-
}
|
|
32235
|
-
return `${window.location.protocol === "https:" ? "wss:" : "ws:"}//${window.location.host}${pathname}`;
|
|
32236
|
-
}
|
|
32237
|
-
function getWsUrl() {
|
|
32238
|
-
return buildWebSocketUrl("/trpc");
|
|
32239
|
-
}
|
|
32240
|
-
function getPtyWsUrl() {
|
|
32241
|
-
return buildWebSocketUrl("/ws/pty");
|
|
32242
|
-
}
|
|
32243
|
-
function getTrpcUrl() {
|
|
32244
|
-
const baseUrl = getApiBaseUrl();
|
|
32245
|
-
return baseUrl ? `${baseUrl}/trpc` : "/trpc";
|
|
32246
|
-
}
|
|
32247
|
-
//#endregion
|
|
32248
32307
|
//#region src/lib/trpc.ts
|
|
32249
32308
|
var isBrowser = typeof window !== "undefined";
|
|
32250
32309
|
var queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 60 * 1e3 } } });
|
|
@@ -32472,6 +32531,15 @@ function PathMarquee({ children: path, maxWidth = 300, duration = 10, gap = 20,
|
|
|
32472
32531
|
})]
|
|
32473
32532
|
});
|
|
32474
32533
|
}
|
|
32534
|
+
function compareDashboardItemsByUpdatedAt(left, right) {
|
|
32535
|
+
return right.updatedAt - left.updatedAt || left.id.localeCompare(right.id);
|
|
32536
|
+
}
|
|
32537
|
+
function sortDashboardItemsByUpdatedAt(items) {
|
|
32538
|
+
return [...items].sort(compareDashboardItemsByUpdatedAt);
|
|
32539
|
+
}
|
|
32540
|
+
function selectRecentDashboardItems(items, limit = 10) {
|
|
32541
|
+
return sortDashboardItemsByUpdatedAt(items).slice(0, Math.max(0, Math.trunc(limit)));
|
|
32542
|
+
}
|
|
32475
32543
|
//#endregion
|
|
32476
32544
|
//#region ../core/src/opsx-display-path.ts
|
|
32477
32545
|
var VIRTUAL_PROJECT_DIRNAME = "project";
|
|
@@ -39590,33 +39658,35 @@ async function getDashboardOverview() {
|
|
|
39590
39658
|
}
|
|
39591
39659
|
const trendPointLimit = Math.max(20, Math.min(500, Math.trunc(snapshot.config?.dashboard?.trendPointLimit ?? DASHBOARD_TREND_POINT_LIMIT)));
|
|
39592
39660
|
const rightEdgeTs = snapshot.git?.latestCommitTs ?? null;
|
|
39593
|
-
const
|
|
39661
|
+
const allSpecifications = snapshot.specs.map((spec) => ({
|
|
39594
39662
|
id: spec.id,
|
|
39595
39663
|
name: spec.name,
|
|
39596
39664
|
requirements: spec.requirements.length,
|
|
39597
39665
|
updatedAt: spec.updatedAt
|
|
39598
|
-
}))
|
|
39599
|
-
const
|
|
39666
|
+
}));
|
|
39667
|
+
const specifications = selectRecentDashboardItems(allSpecifications);
|
|
39668
|
+
const allActiveChanges = snapshot.changes.map((change) => ({
|
|
39600
39669
|
id: change.id,
|
|
39601
39670
|
name: change.name,
|
|
39602
39671
|
progress: change.progress,
|
|
39603
39672
|
updatedAt: change.updatedAt
|
|
39604
|
-
}))
|
|
39605
|
-
const
|
|
39606
|
-
const
|
|
39607
|
-
const
|
|
39673
|
+
}));
|
|
39674
|
+
const activeChanges = selectRecentDashboardItems(allActiveChanges);
|
|
39675
|
+
const requirements = allSpecifications.reduce((sum, spec) => sum + spec.requirements, 0);
|
|
39676
|
+
const tasksTotal = allActiveChanges.reduce((sum, change) => sum + change.progress.total, 0);
|
|
39677
|
+
const tasksCompleted = allActiveChanges.reduce((sum, change) => sum + change.progress.completed, 0);
|
|
39608
39678
|
const archivedTasksCompleted = snapshot.archives.reduce((sum, archive) => sum + archive.parsedTasks.length, 0);
|
|
39609
39679
|
const taskCompletionPercent = tasksTotal > 0 ? Math.round(tasksCompleted / tasksTotal * 100) : null;
|
|
39610
|
-
const inProgressChanges =
|
|
39680
|
+
const inProgressChanges = allActiveChanges.filter((change) => change.progress.total > 0 && change.progress.completed < change.progress.total).length;
|
|
39611
39681
|
const trends = buildStaticObjectiveTrends(snapshot, trendPointLimit, rightEdgeTs);
|
|
39612
|
-
const hasObjectiveSpecificationTrend = trends.specifications.length > 0 ||
|
|
39682
|
+
const hasObjectiveSpecificationTrend = trends.specifications.length > 0 || allSpecifications.length === 0;
|
|
39613
39683
|
const hasObjectiveRequirementTrend = trends.requirements.length > 0 || requirements === 0;
|
|
39614
39684
|
const hasObjectiveCompletedTrend = trends.completedChanges.length > 0 || snapshot.archives.length === 0;
|
|
39615
39685
|
return {
|
|
39616
39686
|
summary: {
|
|
39617
|
-
specifications:
|
|
39687
|
+
specifications: allSpecifications.length,
|
|
39618
39688
|
requirements,
|
|
39619
|
-
activeChanges:
|
|
39689
|
+
activeChanges: allActiveChanges.length,
|
|
39620
39690
|
inProgressChanges,
|
|
39621
39691
|
completedChanges: snapshot.archives.length,
|
|
39622
39692
|
archivedTasksCompleted,
|
|
@@ -91277,10 +91347,22 @@ function ChangeView() {
|
|
|
91277
91347
|
});
|
|
91278
91348
|
const doneCount = status?.artifacts.filter((a) => a.status === "done").length ?? 0;
|
|
91279
91349
|
const totalCount = status?.artifacts.length ?? 0;
|
|
91350
|
+
const isMissingChangeError = error?.message.includes(`Change '${changeId}' not found`) || error?.message.includes(`Change "${changeId}" not found`);
|
|
91280
91351
|
if (isLoading && !status) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
91281
91352
|
className: "route-loading animate-pulse",
|
|
91282
91353
|
children: "Loading change status..."
|
|
91283
91354
|
});
|
|
91355
|
+
if (isMissingChangeError && !status) return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
91356
|
+
className: "flex flex-col gap-3 p-4",
|
|
91357
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
91358
|
+
className: "text-muted-foreground flex items-center gap-2 text-sm",
|
|
91359
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CircleAlert, { className: "h-4 w-4" }), "Change not found in the current project."]
|
|
91360
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
|
|
91361
|
+
to: "/changes",
|
|
91362
|
+
className: "text-primary hover:underline",
|
|
91363
|
+
children: "Back to Changes"
|
|
91364
|
+
}) })]
|
|
91365
|
+
});
|
|
91284
91366
|
if (error && !status) return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
91285
91367
|
className: "text-destructive flex items-center gap-2",
|
|
91286
91368
|
children: [
|
|
@@ -136504,7 +136586,7 @@ function Dashboard() {
|
|
|
136504
136586
|
renderExecutionSnapshot(),
|
|
136505
136587
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
136506
136588
|
className: "grid gap-3 xl:grid-cols-2",
|
|
136507
|
-
children: [
|
|
136589
|
+
children: [renderActiveChangesSection(), renderSpecificationsSection()]
|
|
136508
136590
|
})
|
|
136509
136591
|
]
|
|
136510
136592
|
});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./Geometry-CNDxiJq_.js";import{r as e}from"./index-DG_B7CJb.js";export{e as CanvasRenderer};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./Geometry-CNDxiJq_.js";import{n as e}from"./index-DG_B7CJb.js";export{e as WebGLRenderer};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./Geometry-CNDxiJq_.js";import{t as e}from"./index-DG_B7CJb.js";export{e as WebGPURenderer};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{it as e,x as t}from"./Geometry-CNDxiJq_.js";import{c as n,l as r,o as i,s as a}from"./index-DG_B7CJb.js";import"./init-2-IXz72e.js";e.add(r),e.mixin(t,n),e.add(a),e.mixin(t,i);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./dist-QUHuPJsA.js";import{T as e}from"./index-DG_B7CJb.js";export{e as css};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./dist-QUHuPJsA.js";import{k as e}from"./index-DG_B7CJb.js";export{e as json};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./dist-QUHuPJsA.js";import{u as e}from"./index-DG_B7CJb.js";export{e as yaml};
|