@openspecui/web 4.0.2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/assets/CanvasRenderer-Dx4xVdfy.js +1 -0
  2. package/dist/assets/WebGLRenderer-CwZIBrob.js +1 -0
  3. package/dist/assets/WebGPURenderer-qz6qqQJ0.js +1 -0
  4. package/dist/assets/browserAll-B9F2S6Aa.js +1 -0
  5. package/dist/assets/{dist-CPFLO-yi.js → dist-B8JV-KcU.js} +1 -1
  6. package/dist/assets/{dist-DRiSrLHT.js → dist-BO0i-vgR.js} +1 -1
  7. package/dist/assets/{dist-C0OY-Erd.js → dist-BVgv9ipK.js} +1 -1
  8. package/dist/assets/{dist-2mhTOMs1.js → dist-C1XhTdJW.js} +1 -1
  9. package/dist/assets/{dist-NfrRIiOr.js → dist-C6rBLLnx.js} +1 -1
  10. package/dist/assets/{dist-CixnKWn9.js → dist-CDmilqpo.js} +1 -1
  11. package/dist/assets/dist-CLCeJrnV.js +1 -0
  12. package/dist/assets/dist-CqgSLpac.js +1 -0
  13. package/dist/assets/{dist-CgWPcytT.js → dist-Cr9Muhbd.js} +1 -1
  14. package/dist/assets/{dist-BFxk34vc.js → dist-DC4t0xCN.js} +1 -1
  15. package/dist/assets/dist-DX86MtvQ.js +1 -0
  16. package/dist/assets/{dist-CIK5btNW.js → dist-xHYbWHkl.js} +1 -1
  17. package/dist/assets/{init-LF9R19PZ.js → init-b6bkJcYr.js} +1 -1
  18. package/dist/assets/main-CMPxyg9r.css +1 -0
  19. package/dist/assets/main-CZiJZKxr.js +1670 -0
  20. package/dist/assets/trpc-D8YzegLg.js +1 -0
  21. package/dist/assets/webworkerAll-DOgohAUJ.js +1 -0
  22. package/dist/index.html +2 -2
  23. package/dist-ssg/client/.vite/ssr-manifest.json +55 -25
  24. package/dist-ssg/client/assets/CanvasRenderer-Doj4tjGf.js +1 -0
  25. package/dist-ssg/client/assets/WebGLRenderer-ByGZn78G.js +1 -0
  26. package/dist-ssg/client/assets/WebGPURenderer-Cs9L3lrG.js +1 -0
  27. package/dist-ssg/client/assets/browserAll-DRqZPced.js +1 -0
  28. package/dist-ssg/client/assets/{dist-CXv36Obr.js → dist-4zwKcl_z.js} +1 -1
  29. package/dist-ssg/client/assets/dist-BAF4iEe9.js +1 -0
  30. package/dist-ssg/client/assets/{dist-YDX6FzSq.js → dist-Bbz4L9At.js} +1 -1
  31. package/dist-ssg/client/assets/{dist-jE3tcFdw.js → dist-C7GrFhNR.js} +1 -1
  32. package/dist-ssg/client/assets/{dist-CJnh--bu.js → dist-C9N9aj3N.js} +1 -1
  33. package/dist-ssg/client/assets/{dist-K3e0mmyn.js → dist-C9RhSDVj.js} +1 -1
  34. package/dist-ssg/client/assets/{dist-B6mIe0-0.js → dist-CNwo1r4w.js} +1 -1
  35. package/dist-ssg/client/assets/{dist-Crlgo9mu.js → dist-DSsSrJmr.js} +1 -1
  36. package/dist-ssg/client/assets/{dist-BULL9JeE.js → dist-DdaCSeCf.js} +1 -1
  37. package/dist-ssg/client/assets/{dist-kqeTKJHx.js → dist-Dg8gueKk.js} +1 -1
  38. package/dist-ssg/client/assets/dist-NF8ereYK.js +1 -0
  39. package/dist-ssg/client/assets/dist-VCf-jvYs.js +1 -0
  40. package/dist-ssg/client/assets/{ghostty-web-Hzfuk2rA.js → ghostty-web-BwwWyxga.js} +1 -1
  41. package/dist-ssg/client/assets/index-Dhcf-jP8.css +1 -0
  42. package/dist-ssg/client/assets/index.ssg-Bo5oM1-D.js +1640 -0
  43. package/dist-ssg/client/assets/{init-KoSSb0zr.js → init-C8MYeq6S.js} +1 -1
  44. package/dist-ssg/client/assets/trpc-D2x4KW8G.js +1 -0
  45. package/dist-ssg/client/assets/webworkerAll-T9CEt8gw.js +1 -0
  46. package/dist-ssg/client/index.ssg.html +2 -2
  47. package/dist-ssg/server/entry-server.js +177 -69
  48. package/package.json +3 -3
  49. package/dist/assets/CanvasRenderer-Cqsg_Hhx.js +0 -1
  50. package/dist/assets/WebGLRenderer-AVKFvevh.js +0 -1
  51. package/dist/assets/WebGPURenderer-BYYbOh6g.js +0 -1
  52. package/dist/assets/browserAll-4CbZpEBZ.js +0 -1
  53. package/dist/assets/dist-CmTu1GVZ.js +0 -1
  54. package/dist/assets/dist-D5RvpUPq.js +0 -1
  55. package/dist/assets/dist-nKRYccD4.js +0 -1
  56. package/dist/assets/main-7r4nPUqE.css +0 -1
  57. package/dist/assets/main-pbJDyuSP.js +0 -1670
  58. package/dist/assets/trpc-Dl4z81gg.js +0 -1
  59. package/dist/assets/webworkerAll-DkNLztCR.js +0 -1
  60. package/dist-ssg/client/assets/CanvasRenderer-C4qkVeqQ.js +0 -1
  61. package/dist-ssg/client/assets/WebGLRenderer-BFFqBsKf.js +0 -1
  62. package/dist-ssg/client/assets/WebGPURenderer-DEoZLzdx.js +0 -1
  63. package/dist-ssg/client/assets/browserAll-1kJcZbQa.js +0 -1
  64. package/dist-ssg/client/assets/dist-CvY7DIWJ.js +0 -1
  65. package/dist-ssg/client/assets/dist-DZC3PfdU.js +0 -1
  66. package/dist-ssg/client/assets/dist-Iwe5X3ea.js +0 -1
  67. package/dist-ssg/client/assets/index-BvSCuFWG.css +0 -1
  68. package/dist-ssg/client/assets/index.ssg-C1OyaFSd.js +0 -1640
  69. package/dist-ssg/client/assets/trpc-BplJlFRT.js +0 -1
  70. package/dist-ssg/client/assets/webworkerAll-D6lGUBpH.js +0 -1
@@ -1 +1 @@
1
- import{it as e}from"./Geometry-DYOOLchf.js";import{E as t,T as n}from"./index.ssg-C1OyaFSd.js";e.add(n),e.add(t);
1
+ import{it as e}from"./Geometry-DYOOLchf.js";import{E as t,T as n}from"./index.ssg-Bo5oM1-D.js";e.add(n),e.add(t);
@@ -0,0 +1 @@
1
+ import{F as e}from"./index.ssg-Bo5oM1-D.js";export{e as trpcClient};
@@ -0,0 +1 @@
1
+ import"./Geometry-DYOOLchf.js";import"./index.ssg-Bo5oM1-D.js";import"./init-C8MYeq6S.js";
@@ -8,7 +8,7 @@
8
8
  <script>
9
9
  window.__OPENSPEC_BASE_PATH__ = '/'
10
10
  </script>
11
- <script type="module" crossorigin src="/assets/index.ssg-C1OyaFSd.js"></script>
11
+ <script type="module" crossorigin src="/assets/index.ssg-Bo5oM1-D.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="/assets/chunk-DECur_0Z.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/dist-UN0VvTJo.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/dist-DK_X22KS.js">
@@ -18,7 +18,7 @@
18
18
  <link rel="modulepreload" crossorigin href="/assets/getTextureBatchBindGroup-BZ3pD2UV.js">
19
19
  <link rel="modulepreload" crossorigin href="/assets/BufferResource-4Jl_6qej.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/ImageSource-_DLFcjTj.js">
21
- <link rel="stylesheet" crossorigin href="/assets/index-BvSCuFWG.css">
21
+ <link rel="stylesheet" crossorigin href="/assets/index-Dhcf-jP8.css">
22
22
  </head>
23
23
  <body>
24
24
  <div id="root"><!--app-html--></div>
@@ -27812,6 +27812,7 @@ var ALL_TABS = [
27812
27812
  "/specs",
27813
27813
  "/changes",
27814
27814
  "/archive",
27815
+ "/stores",
27815
27816
  "/settings",
27816
27817
  "/terminal"
27817
27818
  ];
@@ -27821,6 +27822,7 @@ var DEFAULT_MAIN_TABS = [
27821
27822
  "/specs",
27822
27823
  "/changes",
27823
27824
  "/archive",
27825
+ "/stores",
27824
27826
  "/settings"
27825
27827
  ];
27826
27828
  var DEFAULT_BOTTOM_TABS = isStaticMode() ? [] : ["/git", "/terminal"];
@@ -43157,6 +43159,36 @@ function useGlobalSettingsSubscription() {
43157
43159
  onError: callbacks.onError
43158
43160
  }), void 0, [], "globalSettings.subscribe");
43159
43161
  }
43162
+ /**
43163
+ * Stores 订阅(beta)。
43164
+ *
43165
+ * 底层由 server 端轮询 registry 并推送(registry 在 projectDir 之外,watcher 不可达),
43166
+ * 前端只消费推送结果,不感知轮询细节。无静态加载器——stores 仅 live 模式可见。
43167
+ */
43168
+ function useStoresSubscription() {
43169
+ return useSubscription((callbacks) => trpcClient.stores.subscribe.subscribe(void 0, {
43170
+ onData: callbacks.onData,
43171
+ onError: callbacks.onError
43172
+ }), void 0, [], "stores.subscribe");
43173
+ }
43174
+ //#endregion
43175
+ //#region src/lib/use-stores-visibility.ts
43176
+ /**
43177
+ * 控制 Stores 入口的可见性(beta 功能容错范式的一部分)。
43178
+ *
43179
+ * 异常二(command-unavailable):指令用法变了/指令缺失,直接隐藏入口。
43180
+ * 异常一(data-incompatible):数据不兼容,不隐藏入口(面板内客观显示错误 + 版本信息)。
43181
+ *
43182
+ * 数据由 server 端轮询 registry 并推送(订阅),与 StoresList 共享同一订阅缓存。
43183
+ */
43184
+ function useStoresVisibility() {
43185
+ const staticMode = isStaticMode();
43186
+ const { data } = useStoresSubscription();
43187
+ if (staticMode) return { visible: false };
43188
+ if (data === void 0) return { visible: true };
43189
+ const result = data;
43190
+ return { visible: !(result.available === false && result.error?.kind === "command-unavailable") };
43191
+ }
43160
43192
  //#endregion
43161
43193
  //#region src/lib/use-opsx.ts
43162
43194
  function getOpsxStatusSubscriptionCacheKey(input) {
@@ -44469,24 +44501,6 @@ var Eye = createLucideIcon("Eye", [["path", {
44469
44501
  r: "3",
44470
44502
  key: "1v7zrd"
44471
44503
  }]]);
44472
- var FileCode2 = createLucideIcon("FileCode2", [
44473
- ["path", {
44474
- d: "M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4",
44475
- key: "1pf5j1"
44476
- }],
44477
- ["path", {
44478
- d: "M14 2v4a2 2 0 0 0 2 2h4",
44479
- key: "tnqrlb"
44480
- }],
44481
- ["path", {
44482
- d: "m5 12-3 3 3 3",
44483
- key: "oke12k"
44484
- }],
44485
- ["path", {
44486
- d: "m9 18 3-3-3-3",
44487
- key: "112psh"
44488
- }]
44489
- ]);
44490
44504
  var FilePenLine = createLucideIcon("FilePenLine", [
44491
44505
  ["path", {
44492
44506
  d: "m18 5-2.414-2.414A2 2 0 0 0 14.172 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2",
@@ -44796,6 +44810,32 @@ var Link2 = createLucideIcon("Link2", [
44796
44810
  key: "1jonct"
44797
44811
  }]
44798
44812
  ]);
44813
+ var ListTodo = createLucideIcon("ListTodo", [
44814
+ ["rect", {
44815
+ x: "3",
44816
+ y: "5",
44817
+ width: "6",
44818
+ height: "6",
44819
+ rx: "1",
44820
+ key: "1defrl"
44821
+ }],
44822
+ ["path", {
44823
+ d: "m3 17 2 2 4-4",
44824
+ key: "1jhpwq"
44825
+ }],
44826
+ ["path", {
44827
+ d: "M13 6h8",
44828
+ key: "15sg57"
44829
+ }],
44830
+ ["path", {
44831
+ d: "M13 12h8",
44832
+ key: "h98zly"
44833
+ }],
44834
+ ["path", {
44835
+ d: "M13 18h8",
44836
+ key: "oe0vm4"
44837
+ }]
44838
+ ]);
44799
44839
  var List = createLucideIcon("List", [
44800
44840
  ["path", {
44801
44841
  d: "M3 12h.01",
@@ -45286,6 +45326,27 @@ var Unlink2 = createLucideIcon("Unlink2", [["path", {
45286
45326
  d: "M15 7h2a5 5 0 0 1 0 10h-2m-6 0H7A5 5 0 0 1 7 7h2",
45287
45327
  key: "1re2ne"
45288
45328
  }]]);
45329
+ var Warehouse = createLucideIcon("Warehouse", [
45330
+ ["path", {
45331
+ d: "M22 8.35V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8.35A2 2 0 0 1 3.26 6.5l8-3.2a2 2 0 0 1 1.48 0l8 3.2A2 2 0 0 1 22 8.35Z",
45332
+ key: "gksnxg"
45333
+ }],
45334
+ ["path", {
45335
+ d: "M6 18h12",
45336
+ key: "9pbo8z"
45337
+ }],
45338
+ ["path", {
45339
+ d: "M6 14h12",
45340
+ key: "4cwo0f"
45341
+ }],
45342
+ ["rect", {
45343
+ width: "12",
45344
+ height: "12",
45345
+ x: "6",
45346
+ y: "10",
45347
+ key: "apd30q"
45348
+ }]
45349
+ ]);
45289
45350
  var X$2 = createLucideIcon("X", [["path", {
45290
45351
  d: "M18 6 6 18",
45291
45352
  key: "1bl5f8"
@@ -55669,6 +55730,69 @@ function Tooltip({ content, children, delay = 180, sideOffset = 8, className })
55669
55730
  }) })] });
55670
55731
  }
55671
55732
  //#endregion
55733
+ //#region src/components/badge.tsx
55734
+ var toneClassNames = {
55735
+ primary: "bg-primary text-primary-foreground",
55736
+ subtle: "border border-primary/35 bg-primary/10 text-primary",
55737
+ muted: "border border-border bg-muted text-muted-foreground",
55738
+ custom: ""
55739
+ };
55740
+ var sizeClassNames$2 = {
55741
+ dot: "h-1.5 w-1.5 min-w-0 p-0",
55742
+ xs: "h-4 min-w-4 px-1 text-[10px] leading-none",
55743
+ sm: "h-5 min-w-5 px-1.5 text-[11px] leading-none"
55744
+ };
55745
+ var shapeClassNames = {
55746
+ pill: "rounded-full",
55747
+ box: "rounded"
55748
+ };
55749
+ function Badge({ tone = "primary", size = "xs", shape = "pill", className, ...props }) {
55750
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
55751
+ "data-ui-badge": "true",
55752
+ className: cn$1("inline-flex shrink-0 items-center justify-center gap-0.5 whitespace-nowrap font-semibold", toneClassNames[tone], sizeClassNames$2[size], shapeClassNames[shape], className),
55753
+ ...props
55754
+ });
55755
+ }
55756
+ function formatCountBadgeValue(count, max = 99) {
55757
+ return count > max ? `${max}+` : String(count);
55758
+ }
55759
+ function CountBadge({ count, max = 99, hideWhenZero = false, title, ...props }) {
55760
+ if (hideWhenZero && count <= 0) return null;
55761
+ const value = formatCountBadgeValue(count, max);
55762
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
55763
+ title,
55764
+ ...props,
55765
+ children: value
55766
+ });
55767
+ }
55768
+ //#endregion
55769
+ //#region src/components/layout/beta-mark.tsx
55770
+ /**
55771
+ * 展开态的 beta pill:放在导航项文字之后,与面板内标题的 Badge 保持一致的视觉语言。
55772
+ */
55773
+ function BetaPill() {
55774
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
55775
+ tone: "subtle",
55776
+ size: "xs",
55777
+ className: "ml-auto",
55778
+ title: "Beta feature",
55779
+ children: "Beta"
55780
+ });
55781
+ }
55782
+ /**
55783
+ * 折叠态(icon-only)的 beta 角标:贴在图标右上角的一个小 "β"。
55784
+ * 信息量高于纯圆点,明确表达 beta;比斜向 ribbon 更适合窄长的侧边栏列表项。
55785
+ *
55786
+ * 父元素需为 `position: relative`。
55787
+ */
55788
+ function BetaCornerMark() {
55789
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
55790
+ className: "bg-primary text-primary-foreground absolute -right-1 -top-1 flex h-3 w-3 items-center justify-center rounded-full text-[8px] font-bold italic leading-none",
55791
+ "aria-label": "Beta feature",
55792
+ children: "β"
55793
+ });
55794
+ }
55795
+ //#endregion
55672
55796
  //#region src/components/layout/nav-items.ts
55673
55797
  /** All navigation items — single source of truth */
55674
55798
  var allNavItems = [
@@ -55686,7 +55810,7 @@ var allNavItems = [
55686
55810
  },
55687
55811
  {
55688
55812
  to: "/git",
55689
- icon: FileCode2,
55813
+ icon: GitBranch,
55690
55814
  label: "Git",
55691
55815
  defaultArea: "bottom"
55692
55816
  },
@@ -55698,7 +55822,7 @@ var allNavItems = [
55698
55822
  },
55699
55823
  {
55700
55824
  to: "/changes",
55701
- icon: GitBranch,
55825
+ icon: ListTodo,
55702
55826
  label: "Changes",
55703
55827
  defaultArea: "main"
55704
55828
  },
@@ -55708,6 +55832,13 @@ var allNavItems = [
55708
55832
  label: "Archive",
55709
55833
  defaultArea: "main"
55710
55834
  },
55835
+ {
55836
+ to: "/stores",
55837
+ icon: Warehouse,
55838
+ label: "Stores",
55839
+ defaultArea: "main",
55840
+ beta: true
55841
+ },
55711
55842
  {
55712
55843
  to: "/settings",
55713
55844
  icon: Settings,
@@ -55837,11 +55968,14 @@ function AreaNav({ area, tabs, className, useLinks, onNavigate, collapsed }) {
55837
55968
  className: `hover:bg-muted [&.active]:bg-primary [&.active]:text-primary-foreground flex items-center gap-2 rounded-md py-2 ${iconOnly ? "justify-center px-2" : "px-3"}`,
55838
55969
  children: [
55839
55970
  !iconOnly ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GripVertical, { className: "-ml-2.5 -mr-1.5 h-3 w-3 shrink-0 opacity-0 group-hover:opacity-40" }) : null,
55840
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(item.icon, { className: "h-4 w-4 shrink-0" }),
55841
- !iconOnly ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
55971
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
55972
+ className: "relative",
55973
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(item.icon, { className: "h-4 w-4 shrink-0" }), item.beta && iconOnly ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BetaCornerMark, {}) : null]
55974
+ }),
55975
+ !iconOnly ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
55842
55976
  className: "font-nav text-base tracking-[0.04em]",
55843
55977
  children: item.label
55844
- }) : null
55978
+ }), item.beta ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BetaPill, {}) : null] }) : null
55845
55979
  ]
55846
55980
  })
55847
55981
  }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Tooltip, {
@@ -55859,11 +55993,14 @@ function AreaNav({ area, tabs, className, useLinks, onNavigate, collapsed }) {
55859
55993
  className: `flex w-full items-center gap-2 rounded-md py-2 ${iconOnly ? "justify-center px-2" : "px-3 text-left"} ${isActiveBottom ? "bg-primary text-primary-foreground" : "hover:bg-muted"}`,
55860
55994
  children: [
55861
55995
  !iconOnly ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GripVertical, { className: "-ml-2.5 -mr-1.5 h-3 w-3 shrink-0 opacity-0 group-hover:opacity-40" }) : null,
55862
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(item.icon, { className: "h-4 w-4 shrink-0" }),
55863
- !iconOnly ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
55996
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
55997
+ className: "relative",
55998
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(item.icon, { className: "h-4 w-4 shrink-0" }), item.beta && iconOnly ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BetaCornerMark, {}) : null]
55999
+ }),
56000
+ !iconOnly ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
55864
56001
  className: "font-nav text-base tracking-[0.04em]",
55865
56002
  children: item.label
55866
- }) : null
56003
+ }), item.beta ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BetaPill, {}) : null] }) : null
55867
56004
  ]
55868
56005
  })
55869
56006
  }),
@@ -55875,7 +56012,7 @@ function AreaNav({ area, tabs, className, useLinks, onNavigate, collapsed }) {
55875
56012
  }
55876
56013
  //#endregion
55877
56014
  //#region src/components/layout/top-layer-entry-button.tsx
55878
- var sizeClassNames$2 = {
56015
+ var sizeClassNames$1 = {
55879
56016
  mobile: "h-7.5 w-7.5 justify-center",
55880
56017
  desktop: "min-h-8 py-2"
55881
56018
  };
@@ -55887,7 +56024,7 @@ function TopLayerEntryButton({ label, icon, text, badge, collapsed = true, size
55887
56024
  type: "button",
55888
56025
  "aria-label": collapsed ? label : props["aria-label"],
55889
56026
  title: collapsed ? label : props.title,
55890
- className: cn$1("top-layer-entry-button border-primary hover:bg-muted relative inline-flex shrink-0 items-center rounded-md border transition-colors", sizeClassNames$2[size], collapsed ? size === "mobile" ? "p-0" : "justify-center px-2" : "justify-start gap-2 px-3 text-left", className),
56027
+ className: cn$1("top-layer-entry-button border-primary hover:bg-muted relative inline-flex shrink-0 items-center rounded-md border transition-colors", sizeClassNames$1[size], collapsed ? size === "mobile" ? "p-0" : "justify-center px-2" : "justify-start gap-2 px-3 text-left", className),
55891
56028
  ...props,
55892
56029
  children: [
55893
56030
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
@@ -55924,6 +56061,7 @@ function DesktopSidebar() {
55924
56061
  const navLayout = useNavLayout();
55925
56062
  const basePath = getBasePath();
55926
56063
  const isStatic = isStaticMode();
56064
+ const { visible: storesVisible } = useStoresVisibility();
55927
56065
  const [collapsed, setCollapsed] = (0, import_react.useState)(readDesktopSidebarCollapsed);
55928
56066
  (0, import_react.useEffect)(() => {
55929
56067
  try {
@@ -55967,7 +56105,7 @@ function DesktopSidebar() {
55967
56105
  className: "flex flex-1 flex-col",
55968
56106
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", {
55969
56107
  className: "flex-1 space-y-1",
55970
- children: navItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Tooltip, {
56108
+ children: navItems.filter((item) => item.to !== "/stores" || storesVisible).map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Tooltip, {
55971
56109
  content: collapsed ? item.label : void 0,
55972
56110
  sideOffset: 12,
55973
56111
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(VTLink, {
@@ -55975,10 +56113,13 @@ function DesktopSidebar() {
55975
56113
  "aria-label": collapsed ? item.label : void 0,
55976
56114
  title: collapsed ? item.label : void 0,
55977
56115
  className: `hover:bg-muted [&.active]:bg-primary [&.active]:text-primary-foreground flex items-center gap-2 rounded-md py-2 ${collapsed ? "justify-center px-2" : "px-3"}`,
55978
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(item.icon, { className: "h-4 w-4 shrink-0" }), !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
56116
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
56117
+ className: "relative",
56118
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(item.icon, { className: "h-4 w-4 shrink-0" }), item.beta && collapsed ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BetaCornerMark, {}) : null]
56119
+ }), !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
55979
56120
  className: "font-nav text-base tracking-[0.04em]",
55980
56121
  children: item.label
55981
- }) : null]
56122
+ }), item.beta ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BetaPill, {}) : null] }) : null]
55982
56123
  })
55983
56124
  }) }, item.to))
55984
56125
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
@@ -56005,7 +56146,7 @@ function DesktopSidebar() {
56005
56146
  className: "flex-1",
56006
56147
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AreaNav, {
56007
56148
  area: "main",
56008
- tabs: navLayout.mainTabs,
56149
+ tabs: navLayout.mainTabs.filter((tab) => tab !== "/stores" || storesVisible),
56009
56150
  className: "h-full",
56010
56151
  collapsed
56011
56152
  })
@@ -56150,42 +56291,6 @@ function useManualReconnect() {
56150
56291
  }, []);
56151
56292
  }
56152
56293
  //#endregion
56153
- //#region src/components/badge.tsx
56154
- var toneClassNames = {
56155
- primary: "bg-primary text-primary-foreground",
56156
- subtle: "border border-primary/35 bg-primary/10 text-primary",
56157
- muted: "border border-border bg-muted text-muted-foreground",
56158
- custom: ""
56159
- };
56160
- var sizeClassNames$1 = {
56161
- dot: "h-1.5 w-1.5 min-w-0 p-0",
56162
- xs: "h-4 min-w-4 px-1 text-[10px] leading-none",
56163
- sm: "h-5 min-w-5 px-1.5 text-[11px] leading-none"
56164
- };
56165
- var shapeClassNames = {
56166
- pill: "rounded-full",
56167
- box: "rounded"
56168
- };
56169
- function Badge({ tone = "primary", size = "xs", shape = "pill", className, ...props }) {
56170
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
56171
- "data-ui-badge": "true",
56172
- className: cn$1("inline-flex shrink-0 items-center justify-center gap-0.5 whitespace-nowrap font-semibold", toneClassNames[tone], sizeClassNames$1[size], shapeClassNames[shape], className),
56173
- ...props
56174
- });
56175
- }
56176
- function formatCountBadgeValue(count, max = 99) {
56177
- return count > max ? `${max}+` : String(count);
56178
- }
56179
- function CountBadge({ count, max = 99, hideWhenZero = false, title, ...props }) {
56180
- if (hideWhenZero && count <= 0) return null;
56181
- const value = formatCountBadgeValue(count, max);
56182
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
56183
- title,
56184
- ...props,
56185
- children: value
56186
- });
56187
- }
56188
- //#endregion
56189
56294
  //#region ../core/src/pty-protocol.ts
56190
56295
  var PositiveInt = numberType().int().positive();
56191
56296
  var PtyPlatformSchema = enumType([
@@ -95774,7 +95879,10 @@ function MobileTabBar() {
95774
95879
  children: (isStaticMode() ? mobileNavItems : navLayout.mainTabs.map((tabId) => allNavItems.find((n) => n.to === tabId)).filter((item) => item != null)).map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(VTLink, {
95775
95880
  to: item.to,
95776
95881
  className: "text-muted-foreground hover:text-foreground [&.active]:text-primary flex flex-1 flex-col items-center justify-center gap-0.5",
95777
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(item.icon, { className: "h-5 w-5 shrink-0" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
95882
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
95883
+ className: "relative",
95884
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(item.icon, { className: "h-5 w-5 shrink-0" }), item.beta ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BetaCornerMark, {}) : null]
95885
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
95778
95886
  className: "font-nav text-[10px] tracking-[0.03em]",
95779
95887
  children: item.label
95780
95888
  })]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openspecui/web",
3
- "version": "4.0.2",
3
+ "version": "5.0.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "openspecui-ssg": "./dist-ssg/ssg-cli.mjs"
@@ -41,8 +41,8 @@
41
41
  "@fontsource/share-tech-mono": "^5.2.7",
42
42
  "@lezer/common": "^1.4.0",
43
43
  "@lezer/highlight": "^1.2.3",
44
- "@openspecui/search": "4.0.2",
45
- "@openspecui/server": "4.0.2",
44
+ "@openspecui/search": "5.0.0",
45
+ "@openspecui/server": "5.0.0",
46
46
  "@storybook/addon-vitest": "^10.2.19",
47
47
  "@storybook/web-components": "^10.2.19",
48
48
  "@storybook/web-components-vite": "^10.2.19",
@@ -1 +0,0 @@
1
- import"./Geometry-Dr8DqqDe.js";import{w as e}from"./main-pbJDyuSP.js";export{e as CanvasRenderer};
@@ -1 +0,0 @@
1
- import"./Geometry-Dr8DqqDe.js";import{C as e}from"./main-pbJDyuSP.js";export{e as WebGLRenderer};
@@ -1 +0,0 @@
1
- import"./Geometry-Dr8DqqDe.js";import{S as e}from"./main-pbJDyuSP.js";export{e as WebGPURenderer};
@@ -1 +0,0 @@
1
- import{it as e,x as t}from"./Geometry-Dr8DqqDe.js";import{A as n,D as r,O as i,k as a}from"./main-pbJDyuSP.js";import"./init-LF9R19PZ.js";e.add(n),e.mixin(t,a),e.add(i),e.mixin(t,r);
@@ -1 +0,0 @@
1
- import"./dist-vqrjFRzf.js";import{g as e}from"./main-pbJDyuSP.js";export{e as css};
@@ -1 +0,0 @@
1
- import"./dist-vqrjFRzf.js";import{b as e}from"./main-pbJDyuSP.js";export{e as json};
@@ -1 +0,0 @@
1
- import"./dist-vqrjFRzf.js";import{t as e}from"./main-pbJDyuSP.js";export{e as yaml};