@linxin666/dsh-remote-web-ui 0.3.10 → 0.3.12

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 +1 @@
1
- {"version":3,"file":"UpdateEntry.d.ts","sourceRoot":"","sources":["../../../src/client/UpdateEntry.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAOnE,wEAAwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,IAAI,EAAE,OAAO,CAAA;IACb,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;CACzB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,gBAAgB,+BA+GxD"}
1
+ {"version":3,"file":"UpdateEntry.d.ts","sourceRoot":"","sources":["../../../src/client/UpdateEntry.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAOnE,wEAAwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,IAAI,EAAE,OAAO,CAAA;IACb,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;CACzB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,gBAAgB,+BAkHxD"}
@@ -108,5 +108,5 @@ export function UpdateEntry({ wide, t }) {
108
108
  };
109
109
  }, [probeAvailability]);
110
110
  const updateLabel = updateAvailable ? t("update.availableLabel") : t("update.label");
111
- return (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: css.trigger, "data-wide": wide ? undefined : "rail", "data-update-available": updateAvailable ? "true" : undefined, "aria-label": updateLabel, "aria-expanded": open, title: updateLabel, onClick: openPanel, children: _jsx(IconDownloadOutline16, { size: wide ? 16 : 18 }) }), open && createPortal((_jsxs("div", { className: css.overlay, role: "presentation", children: [_jsx("div", { className: css.mask, "aria-hidden": "true", onClick: closePanel }), _jsx(UpdatePanel, { t: t, view: view, onClose: closePanel, onRecheck: () => { void check(); }, onStartUpdate: (status) => { void startUpdate(status); } })] })), document.body)] }));
111
+ return (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: css.trigger, "data-wide": wide ? (updateAvailable ? "wide" : undefined) : "rail", "data-update-available": updateAvailable ? "true" : undefined, "aria-label": updateLabel, "aria-expanded": open, title: updateLabel, onClick: openPanel, children: [_jsx(IconDownloadOutline16, { size: wide ? 16 : 18 }), updateAvailable && wide && (_jsx("span", { className: css.updateBadgeText, children: t("update.badge") }))] }), open && createPortal((_jsxs("div", { className: css.overlay, role: "presentation", children: [_jsx("div", { className: css.mask, "aria-hidden": "true", onClick: closePanel }), _jsx(UpdatePanel, { t: t, view: view, onClose: closePanel, onRecheck: () => { void check(); }, onStartUpdate: (status) => { void startUpdate(status); } })] })), document.body)] }));
112
112
  }
@@ -112,6 +112,7 @@ export declare const zh: {
112
112
  'settings.saveFailed': string;
113
113
  'settings.invalidNumber': string;
114
114
  'update.label': string;
115
+ 'update.badge': string;
115
116
  'update.availableLabel': string;
116
117
  'update.title': string;
117
118
  'update.checking': string;
@@ -270,6 +271,7 @@ export declare const en: {
270
271
  'settings.saveFailed': string;
271
272
  'settings.invalidNumber': string;
272
273
  'update.label': string;
274
+ 'update.badge': string;
273
275
  'update.availableLabel': string;
274
276
  'update.title': string;
275
277
  'update.checking': string;
@@ -1 +1 @@
1
- {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,mEAAmE;AACnE,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0JmB,CAAA;AAElC,sCAAsC;AACtC,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,EAAE,CAAA;AAEvC,wDAAwD;AACxD,MAAM,MAAM,eAAe,GAAG,SAAS,CAAA;AAEvC,mEAAmE;AACnE,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0JsB,CAAA"}
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,mEAAmE;AACnE,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2JmB,CAAA;AAElC,sCAAsC;AACtC,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,EAAE,CAAA;AAEvC,wDAAwD;AACxD,MAAM,MAAM,eAAe,GAAG,SAAS,CAAA;AAEvC,mEAAmE;AACnE,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2JsB,CAAA"}
@@ -114,6 +114,7 @@ export const zh = {
114
114
  'settings.invalidNumber': '请输入数字,留空则使用默认值。',
115
115
  // 更新面板(侧边栏更新按钮)。
116
116
  'update.label': '检查更新',
117
+ 'update.badge': '有更新',
117
118
  'update.availableLabel': '发现新版本,检查更新',
118
119
  'update.title': '检查更新',
119
120
  'update.checking': '正在检查远程仓库中的新版本…',
@@ -270,6 +271,7 @@ export const en = {
270
271
  'settings.invalidNumber': 'Enter a number, or leave blank to use the default.',
271
272
  // Update panel (the sidebar update trigger).
272
273
  'update.label': 'Check for updates',
274
+ 'update.badge': 'Update available',
273
275
  'update.availableLabel': 'New version available. Check for updates',
274
276
  'update.title': 'Check for updates',
275
277
  'update.checking': 'Checking the remote repository for newer releases…',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@linxin666/dsh-remote-web-ui",
3
3
  "description": "Scan-to-pair remote access for the dsh web GUI that shares one official interface: a QR beside the settings button pairs phones and PCs into the same Web GUI (a portrait-touch adaptation layer for phones, full desktop on PCs) through one-time tokens and revocable device sessions, with a LAN bind toggle, optional Cloudflare tunnel, and one-click family self-update",
4
- "version": "0.3.10",
4
+ "version": "0.3.12",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": "^22.19.0 || >=24.0.0"
@@ -36,7 +36,7 @@
36
36
  "license": "Apache-2.0",
37
37
  "dsh": {
38
38
  "engines": {
39
- "dsh": ">=0.1.2-alpha.1"
39
+ "dsh": ">=0.1.2-alpha.4"
40
40
  },
41
41
  "bundle": {
42
42
  "patch": "./cordis.patch.yml"
@@ -63,22 +63,22 @@
63
63
  },
64
64
  "devDependencies": {
65
65
  "@deepseek-ai/cordis": "^4.0.2",
66
- "@deepseek-ai/dsh-agent": "^0.1.2-alpha.2",
67
- "@deepseek-ai/dsh-api-remotes": "^0.1.2-alpha.2",
68
- "@deepseek-ai/dsh-api-session-controller": "^0.1.2-alpha.2",
69
- "@deepseek-ai/dsh-api-workspace-controller": "^0.1.2-alpha.2",
70
- "@deepseek-ai/dsh-client-connection": "^0.1.2-alpha.2",
71
- "@deepseek-ai/dsh-client-locale": "^0.1.2-alpha.2",
72
- "@deepseek-ai/dsh-client-store": "^0.1.2-alpha.2",
73
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.2-alpha.2",
74
- "@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-alpha.2",
75
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.2-alpha.2",
76
- "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.2-alpha.2",
77
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.2-alpha.2",
78
- "@deepseek-ai/dsh-commands": "^0.1.2-alpha.2",
79
- "@deepseek-ai/dsh-host-webserver": "^0.1.2-alpha.2",
80
- "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
81
- "@deepseek-ai/dsh-settings": "^0.1.2-alpha.2",
66
+ "@deepseek-ai/dsh-agent": "^0.1.2-alpha.4",
67
+ "@deepseek-ai/dsh-api-remotes": "^0.1.2-alpha.4",
68
+ "@deepseek-ai/dsh-api-session-controller": "^0.1.2-alpha.4",
69
+ "@deepseek-ai/dsh-api-workspace-controller": "^0.1.2-alpha.4",
70
+ "@deepseek-ai/dsh-client-connection": "^0.1.2-alpha.4",
71
+ "@deepseek-ai/dsh-client-locale": "^0.1.2-alpha.4",
72
+ "@deepseek-ai/dsh-client-store": "^0.1.2-alpha.4",
73
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.2-alpha.4",
74
+ "@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-alpha.4",
75
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.2-alpha.4",
76
+ "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.2-alpha.4",
77
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.2-alpha.4",
78
+ "@deepseek-ai/dsh-commands": "^0.1.2-alpha.4",
79
+ "@deepseek-ai/dsh-host-webserver": "^0.1.2-alpha.4",
80
+ "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.4",
81
+ "@deepseek-ai/dsh-settings": "^0.1.2-alpha.4",
82
82
  "@testing-library/dom": "^10.4.1",
83
83
  "@testing-library/react": "^16.3.2",
84
84
  "@types/node": "^22.20.0",
@@ -121,7 +121,7 @@ export function UpdateEntry({ wide, t }: UpdateEntryProps) {
121
121
  <button
122
122
  type="button"
123
123
  className={css.trigger}
124
- data-wide={wide ? undefined : "rail"}
124
+ data-wide={wide ? (updateAvailable ? "wide" : undefined) : "rail"}
125
125
  data-update-available={updateAvailable ? "true" : undefined}
126
126
  aria-label={updateLabel}
127
127
  aria-expanded={open}
@@ -129,6 +129,9 @@ export function UpdateEntry({ wide, t }: UpdateEntryProps) {
129
129
  onClick={openPanel}
130
130
  >
131
131
  <IconDownloadOutline16 size={wide ? 16 : 18} />
132
+ {updateAvailable && wide && (
133
+ <span className={css.updateBadgeText}>{t("update.badge")}</span>
134
+ )}
132
135
  </button>
133
136
  {open && createPortal((
134
137
  <div className={css.overlay} role="presentation">
@@ -115,6 +115,7 @@ export const zh = {
115
115
  'settings.invalidNumber': '请输入数字,留空则使用默认值。',
116
116
  // 更新面板(侧边栏更新按钮)。
117
117
  'update.label': '检查更新',
118
+ 'update.badge': '有更新',
118
119
  'update.availableLabel': '发现新版本,检查更新',
119
120
  'update.title': '检查更新',
120
121
  'update.checking': '正在检查远程仓库中的新版本…',
@@ -278,6 +279,7 @@ export const en = {
278
279
  'settings.invalidNumber': 'Enter a number, or leave blank to use the default.',
279
280
  // Update panel (the sidebar update trigger).
280
281
  'update.label': 'Check for updates',
282
+ 'update.badge': 'Update available',
281
283
  'update.availableLabel': 'New version available. Check for updates',
282
284
  'update.title': 'Check for updates',
283
285
  'update.checking': 'Checking the remote repository for newer releases…',
@@ -40,6 +40,10 @@
40
40
  transition: background-color 120ms ease, color 120ms ease, box-shadow 120ms ease;
41
41
  }
42
42
 
43
+ .trigger[data-update-available] {
44
+ color: var(--dsw-alias-brand-primary);
45
+ }
46
+
43
47
  .trigger[data-update-available]::after {
44
48
  position: absolute;
45
49
  top: 4px;
@@ -66,6 +70,22 @@
66
70
  padding: 0 10px;
67
71
  }
68
72
 
73
+ .trigger[data-update-available][data-wide='wide'] {
74
+ flex: none;
75
+ gap: 6px;
76
+ }
77
+
78
+ .trigger[data-update-available][data-wide='wide']::after {
79
+ display: none;
80
+ }
81
+
82
+ .updateBadgeText {
83
+ font-size: 13px;
84
+ font-weight: 500;
85
+ line-height: 1;
86
+ white-space: nowrap;
87
+ }
88
+
69
89
  .trigger:hover:not(:disabled) {
70
90
  background: var(--dsw-alias-interactive-bg-hover);
71
91
  color: var(--dsw-alias-label-primary);