dsh-zotero 0.7.1 → 0.8.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.
package/README.en.md CHANGED
@@ -10,7 +10,7 @@
10
10
  <a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/v/dsh-zotero" alt="npm version" style="max-width:100%;"></a>
11
11
  <a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/dm/dsh-zotero" alt="npm downloads" style="max-width:100%;"></a>
12
12
  <a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/l/dsh-zotero" alt="license" style="max-width:100%;"></a>
13
- <a href="https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.3-alpha.1"><img src="https://img.shields.io/badge/dsh-%3E%3D0.1.3--alpha.1-blue" alt="minimum dsh version" style="max-width:100%;"></a>
13
+ <a href="https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.5-alpha.1"><img src="https://img.shields.io/badge/dsh-%3E%3D0.1.5--alpha.1-blue" alt="minimum dsh version" style="max-width:100%;"></a>
14
14
  <a href="https://awesome-dsh-plugin.com"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="Awesome DSH Plugin"></a>
15
15
  </p>
16
16
  </div>
@@ -69,7 +69,7 @@ The plugin provides a settings card under **Settings → Plugins** where you can
69
69
 
70
70
  - Zotero ≥ 7 with local API enabled: **Settings → Advanced → "Allow other applications on this computer to communicate with Zotero"**
71
71
  - Node.js ≥ 22.19 (or ≥ 24)
72
- - dsh 0.1.3-alpha.1 host (all `@deepseek-ai/dsh-*` peer dependencies are `^0.1.3-alpha.1`; only the latest alpha is supported until upstream stabilizes, no backward compatibility)
72
+ - dsh 0.1.5-alpha.1 host (all `@deepseek-ai/dsh-*` peer dependencies are `^0.1.5-alpha.1`; only the latest alpha is supported until upstream stabilizes, no backward compatibility)
73
73
  - Local API at `http://127.0.0.1:23119/api`, unauthenticated, read-only
74
74
 
75
75
  ## Usage example
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  <a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/v/dsh-zotero" alt="npm version" style="max-width:100%;"></a>
11
11
  <a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/dm/dsh-zotero" alt="npm downloads" style="max-width:100%;"></a>
12
12
  <a href="https://www.npmjs.com/package/dsh-zotero"><img src="https://img.shields.io/npm/l/dsh-zotero" alt="license" style="max-width:100%;"></a>
13
- <a href="https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.3-alpha.1"><img src="https://img.shields.io/badge/dsh-%3E%3D0.1.3--alpha.1-blue" alt="最低 dsh 版本" style="max-width:100%;"></a>
13
+ <a href="https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.5-alpha.1"><img src="https://img.shields.io/badge/dsh-%3E%3D0.1.5--alpha.1-blue" alt="最低 dsh 版本" style="max-width:100%;"></a>
14
14
  <a href="https://awesome-dsh-plugin.com"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="Awesome DSH Plugin"></a>
15
15
  </p>
16
16
  </div>
@@ -69,7 +69,7 @@ dsh plugin --profile <name> add ./dsh-zotero-*.tgz
69
69
 
70
70
  - Zotero ≥ 7 桌面版,启用本地 API:**设置 → 高级 → "允许其他应用程序与 Zotero 通信"**
71
71
  - Node.js ≥ 22.19(或 ≥ 24)
72
- - 宿主 dsh 0.1.3-alpha.1(`@deepseek-ai/dsh-*` peer 依赖均为 `^0.1.3-alpha.1`;上游稳定前仅支持最新 alpha 版本,不向后兼容)
72
+ - 宿主 dsh 0.1.5-alpha.1(`@deepseek-ai/dsh-*` peer 依赖均为 `^0.1.5-alpha.1`;上游稳定前仅支持最新 alpha 版本,不向后兼容)
73
73
  - 本地 API 地址 `http://127.0.0.1:23119/api`,无认证,只读
74
74
 
75
75
  ## 使用示例
package/lib/client.js CHANGED
@@ -46,37 +46,42 @@ function clsx() {
46
46
  var clsx_default = clsx;
47
47
 
48
48
  // src/client/ZoteroPluginCard.tsx
49
+ var import_dsh_client_ui_primitives2 = require("@deepseek-ai/dsh-client-ui-primitives");
50
+
51
+ // src/client/fields.tsx
49
52
  var import_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
50
53
 
51
54
  // src/client/fields.module.css
52
- var style = `.gONAZG_field{flex-direction:column;gap:6px;padding:12px 0;display:flex}.gONAZG_field+.gONAZG_field{border-top:.5px solid var(--dsw-alias-border-l2)}.gONAZG_head{align-items:center;gap:8px;display:flex}.gONAZG_label{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:13px;font-weight:500;line-height:1.5}.gONAZG_badges{align-items:center;gap:8px;display:inline-flex}.gONAZG_badge{corner-shape:round;white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.gONAZG_reset{font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;line-height:1.5}.gONAZG_reset:hover:not(:disabled){color:var(--dsw-alias-label-primary)}.gONAZG_reset:disabled{cursor:default}.gONAZG_input{border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-3);height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;padding:0 12px;font-size:13px;line-height:1.5}.gONAZG_input:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.gONAZG_input:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.gONAZG_inputInvalid{border-color:var(--dsw-alias-label-error,var(--dsw-alias-state-error-primary));}.gONAZG_invalid{color:var(--dsw-alias-label-error,var(--dsw-alias-state-error-primary));margin:0;font-size:12px;line-height:1.5}.gONAZG_hint{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:1.5}.gONAZG_toggleRow{align-items:center;gap:8px;display:flex}.gONAZG_toggleLabel{min-width:0;color:var(--dsw-alias-label-primary);cursor:pointer;flex:1;font-size:13px;font-weight:500;line-height:1.5}.gONAZG_toggle{width:16px;height:16px;accent-color:var(--dsw-alias-state-business-primary);cursor:pointer;flex:none;margin:0}`;
55
+ var style = `.gONAZG_field{flex-direction:column;gap:6px;padding:12px 0;display:flex}.gONAZG_field+.gONAZG_field{border-top:.5px solid var(--dsw-alias-border-l2)}.gONAZG_head{align-items:center;gap:8px;display:flex}.gONAZG_label{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:13px;font-weight:500;line-height:1.5}.gONAZG_badges{align-items:center;gap:8px;display:inline-flex}.gONAZG_reset{font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;line-height:1.5}.gONAZG_reset:hover:not(:disabled){color:var(--dsw-alias-label-primary)}.gONAZG_reset:disabled{cursor:default}.gONAZG_input{border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-3);height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;padding:0 12px;font-size:13px;line-height:1.5}.gONAZG_input:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.gONAZG_input:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.gONAZG_inputInvalid{border-color:var(--dsw-alias-label-error,var(--dsw-alias-state-error-primary));}.gONAZG_invalid{color:var(--dsw-alias-label-error,var(--dsw-alias-state-error-primary));margin:0;font-size:12px;line-height:1.5}.gONAZG_hint{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:1.5}.gONAZG_toggleRow{align-items:center;gap:8px;display:flex}.gONAZG_toggleLabel{min-width:0;color:var(--dsw-alias-label-primary);cursor:pointer;flex:1;font-size:13px;font-weight:500;line-height:1.5}.gONAZG_toggle{width:16px;height:16px;accent-color:var(--dsw-alias-state-business-primary);cursor:pointer;flex:none;margin:0}`;
53
56
  if (typeof document !== "undefined" && !document.querySelector('style[data-plugin-css="dsh-zotero/fields.module.css"]')) {
54
57
  const tag = document.createElement("style");
55
58
  tag.setAttribute("data-plugin-css", "dsh-zotero/fields.module.css");
56
59
  tag.textContent = style;
57
60
  document.head.appendChild(tag);
58
61
  }
59
- var fields_default = { "reset": "gONAZG_reset", "input": "gONAZG_input", "head": "gONAZG_head", "field": "gONAZG_field", "badge": "gONAZG_badge", "badges": "gONAZG_badges", "label": "gONAZG_label", "invalid": "gONAZG_invalid", "hint": "gONAZG_hint", "toggleRow": "gONAZG_toggleRow", "toggle": "gONAZG_toggle", "inputInvalid": "gONAZG_inputInvalid", "toggleLabel": "gONAZG_toggleLabel" };
62
+ var fields_default = { "label": "gONAZG_label", "toggleRow": "gONAZG_toggleRow", "invalid": "gONAZG_invalid", "toggleLabel": "gONAZG_toggleLabel", "toggle": "gONAZG_toggle", "inputInvalid": "gONAZG_inputInvalid", "field": "gONAZG_field", "reset": "gONAZG_reset", "hint": "gONAZG_hint", "badges": "gONAZG_badges", "input": "gONAZG_input", "head": "gONAZG_head" };
60
63
 
61
64
  // src/client/fields.tsx
62
65
  var import_jsx_runtime = require("react/jsx-runtime");
66
+ function OverrideControls(props) {
67
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: fields_default.badges, children: [
68
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.Tag, { tone: "neutral", children: props.overriddenLabel }),
69
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", className: fields_default.reset, disabled: props.disabled, onClick: props.onReset, children: props.resetLabel })
70
+ ] });
71
+ }
63
72
  function ValueField(props) {
64
73
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: fields_default.field, children: [
65
74
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: fields_default.head, children: [
66
75
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { className: fields_default.label, htmlFor: props.id, children: props.label }),
67
- props.overridden ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: fields_default.badges, children: [
68
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: fields_default.badge, children: props.overriddenLabel }),
69
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
70
- "button",
71
- {
72
- type: "button",
73
- className: fields_default.reset,
74
- disabled: props.disabled,
75
- onClick: props.onReset,
76
- children: props.resetLabel
77
- }
78
- )
79
- ] }) : null
76
+ props.overridden ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
77
+ OverrideControls,
78
+ {
79
+ overriddenLabel: props.overriddenLabel,
80
+ resetLabel: props.resetLabel,
81
+ disabled: props.disabled,
82
+ onReset: props.onReset
83
+ }
84
+ ) : null
80
85
  ] }),
81
86
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
82
87
  "input",
@@ -114,21 +119,17 @@ function BooleanField(props) {
114
119
  }
115
120
  ),
116
121
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { className: fields_default.toggleLabel, htmlFor: props.id, children: props.label }),
117
- props.overridden ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: fields_default.badges, children: [
118
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: fields_default.badge, children: props.overriddenLabel }),
119
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
120
- "button",
121
- {
122
- type: "button",
123
- className: fields_default.reset,
124
- disabled: props.disabled,
125
- onClick: props.onReset,
126
- children: props.resetLabel
127
- }
128
- )
129
- ] }) : null
122
+ props.overridden ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
123
+ OverrideControls,
124
+ {
125
+ overriddenLabel: props.overriddenLabel,
126
+ resetLabel: props.resetLabel,
127
+ disabled: props.disabled,
128
+ onReset: props.onReset
129
+ }
130
+ ) : null
130
131
  ] }),
131
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: fields_default.hint, children: props.hintLabel })
132
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: fields_default.hint, children: props.hint })
132
133
  ] });
133
134
  }
134
135
 
@@ -428,7 +429,7 @@ if (typeof document !== "undefined" && !document.querySelector('style[data-plugi
428
429
  tag.textContent = style2;
429
430
  document.head.appendChild(tag);
430
431
  }
431
- var ZoteroSettingsForm_default = { "groupTitle": "iz3HHa_groupTitle", "group": "iz3HHa_group", "fields": "iz3HHa_fields" };
432
+ var ZoteroSettingsForm_default = { "groupTitle": "iz3HHa_groupTitle", "fields": "iz3HHa_fields", "group": "iz3HHa_group" };
432
433
 
433
434
  // src/client/ZoteroSettingsForm.tsx
434
435
  var import_jsx_runtime2 = require("react/jsx-runtime");
@@ -461,7 +462,7 @@ function field(t, state, actions, key) {
461
462
  {
462
463
  id: `zotero-settings-${key}`,
463
464
  label: t(key),
464
- hintLabel: t(`${key}Hint`),
465
+ hint: t(`${key}Hint`),
465
466
  ...shared
466
467
  },
467
468
  key
@@ -482,14 +483,14 @@ function field(t, state, actions, key) {
482
483
  }
483
484
 
484
485
  // src/client/ZoteroPluginCard.module.css
485
- var style3 = `._2Pv13q_card{border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-3);border-radius:16px;list-style:none;transition:border-color .16s,background .16s}._2Pv13q_card:hover{border-color:var(--dsw-alias-label-dimmed)}._2Pv13q_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}._2Pv13q_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}._2Pv13q_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}._2Pv13q_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}._2Pv13q_name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}._2Pv13q_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}._2Pv13q_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}._2Pv13q_chevronOpen{transform:rotate(180deg)}._2Pv13q_body{border-top:.5px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}._2Pv13q_readOnly{color:var(--dsw-alias-label-tertiary);margin:12px 0 0;font-size:12px;line-height:1.5}._2Pv13q_pending{corner-shape:round;white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}._2Pv13q_footer{border-top:.5px solid var(--dsw-alias-border-l2);justify-content:flex-end;align-items:center;gap:8px;padding:12px 0 4px;display:flex}._2Pv13q_failed{min-width:0;color:var(--dsw-alias-label-error,var(--dsw-alias-state-error-primary));flex:1;margin:0;font-size:12px;line-height:1.5}._2Pv13q_discard,._2Pv13q_save{appearance:none;font:inherit;cursor:pointer;border:1px solid #0000;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}._2Pv13q_discard{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}._2Pv13q_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}._2Pv13q_save{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3)}._2Pv13q_discard:disabled,._2Pv13q_save:disabled{opacity:.4;cursor:default}._2Pv13q_discard:focus-visible,._2Pv13q_save:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}@media (prefers-reduced-motion:reduce){._2Pv13q_card,._2Pv13q_chevron{transition:none}}`;
486
+ var style3 = `._2Pv13q_card{border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-3);border-radius:16px;list-style:none;transition:border-color .16s,background .16s}._2Pv13q_card:hover{border-color:var(--dsw-alias-label-dimmed)}._2Pv13q_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}._2Pv13q_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}._2Pv13q_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}._2Pv13q_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}._2Pv13q_name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}._2Pv13q_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}._2Pv13q_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}._2Pv13q_chevronOpen{transform:rotate(180deg)}._2Pv13q_body{border-top:.5px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}._2Pv13q_readOnly{color:var(--dsw-alias-label-tertiary);margin:12px 0 0;font-size:12px;line-height:1.5}._2Pv13q_pending{flex:none}._2Pv13q_footer{border-top:.5px solid var(--dsw-alias-border-l2);justify-content:flex-end;align-items:center;gap:8px;padding:12px 0 4px;display:flex}._2Pv13q_failed{min-width:0;color:var(--dsw-alias-label-error,var(--dsw-alias-state-error-primary));flex:1;margin:0;font-size:12px;line-height:1.5}._2Pv13q_discard,._2Pv13q_save{appearance:none;font:inherit;cursor:pointer;border:1px solid #0000;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}._2Pv13q_discard{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}._2Pv13q_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}._2Pv13q_save{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3)}._2Pv13q_discard:disabled,._2Pv13q_save:disabled{opacity:.4;cursor:default}._2Pv13q_discard:focus-visible,._2Pv13q_save:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}@media (prefers-reduced-motion:reduce){._2Pv13q_card,._2Pv13q_chevron{transition:none}}`;
486
487
  if (typeof document !== "undefined" && !document.querySelector('style[data-plugin-css="dsh-zotero/ZoteroPluginCard.module.css"]')) {
487
488
  const tag = document.createElement("style");
488
489
  tag.setAttribute("data-plugin-css", "dsh-zotero/ZoteroPluginCard.module.css");
489
490
  tag.textContent = style3;
490
491
  document.head.appendChild(tag);
491
492
  }
492
- var ZoteroPluginCard_default = { "name": "_2Pv13q_name", "save": "_2Pv13q_save", "header": "_2Pv13q_header", "headText": "_2Pv13q_headText", "chevron": "_2Pv13q_chevron", "description": "_2Pv13q_description", "body": "_2Pv13q_body", "chevronOpen": "_2Pv13q_chevronOpen", "pending": "_2Pv13q_pending", "discard": "_2Pv13q_discard", "readOnly": "_2Pv13q_readOnly", "card": "_2Pv13q_card", "failed": "_2Pv13q_failed", "cardOpen": "_2Pv13q_cardOpen", "footer": "_2Pv13q_footer" };
493
+ var ZoteroPluginCard_default = { "description": "_2Pv13q_description", "footer": "_2Pv13q_footer", "pending": "_2Pv13q_pending", "cardOpen": "_2Pv13q_cardOpen", "failed": "_2Pv13q_failed", "discard": "_2Pv13q_discard", "name": "_2Pv13q_name", "chevronOpen": "_2Pv13q_chevronOpen", "body": "_2Pv13q_body", "card": "_2Pv13q_card", "save": "_2Pv13q_save", "headText": "_2Pv13q_headText", "header": "_2Pv13q_header", "chevron": "_2Pv13q_chevron", "readOnly": "_2Pv13q_readOnly" };
493
494
 
494
495
  // src/client/ZoteroPluginCard.tsx
495
496
  var import_jsx_runtime3 = require("react/jsx-runtime");
@@ -526,8 +527,8 @@ function ZoteroPluginCard(props) {
526
527
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: ZoteroPluginCard_default.name, children: title }),
527
528
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: ZoteroPluginCard_default.description, children: t("description") })
528
529
  ] }),
529
- state.dirty ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: ZoteroPluginCard_default.pending, children: t("unsaved") }) : null,
530
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_dsh_client_ui_primitives.IconChevronDownOutline14, { className: clsx_default(ZoteroPluginCard_default.chevron, open && ZoteroPluginCard_default.chevronOpen) })
530
+ state.dirty ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_dsh_client_ui_primitives2.Tag, { tone: "neutral", className: ZoteroPluginCard_default.pending, children: t("unsaved") }) : null,
531
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_dsh_client_ui_primitives2.IconChevronDownOutline14, { className: clsx_default(ZoteroPluginCard_default.chevron, open && ZoteroPluginCard_default.chevronOpen) })
531
532
  ]
532
533
  }
533
534
  ),
@@ -1466,14 +1467,14 @@ function exportedRefCountOf(exports) {
1466
1467
 
1467
1468
  // src/client/components/workspace/WorkspaceToolbar.tsx
1468
1469
  var import_react2 = require("react");
1469
- var import_dsh_client_ui_primitives2 = require("@deepseek-ai/dsh-client-ui-primitives");
1470
+ var import_dsh_client_ui_primitives3 = require("@deepseek-ai/dsh-client-ui-primitives");
1470
1471
 
1471
1472
  // src/client/build-info.ts
1472
1473
  function buildVersion() {
1473
- return true ? "0.7.1" : "unknown";
1474
+ return true ? "0.8.0" : "unknown";
1474
1475
  }
1475
1476
  function buildCommit() {
1476
- return true ? "03c9ba5" : "unknown";
1477
+ return true ? "1aa6e83" : "unknown";
1477
1478
  }
1478
1479
  function buildInfoOf() {
1479
1480
  return `${buildVersion()} \xB7 ${buildCommit()}`;
@@ -1497,7 +1498,7 @@ if (typeof document !== "undefined" && !document.querySelector('style[data-plugi
1497
1498
  tag.textContent = style4;
1498
1499
  document.head.appendChild(tag);
1499
1500
  }
1500
- var workspace_default = { "filterArrow": "_o1AEW_filterArrow", "workspace": "_o1AEW_workspace", "listItemSelected": "_o1AEW_listItemSelected", "statusText": "_o1AEW_statusText", "menuButton": "_o1AEW_menuButton", "inspectorBody": "_o1AEW_inspectorBody", "section": "_o1AEW_section", "exportStack": "_o1AEW_exportStack", "line": "_o1AEW_line", "filterArrowRight": "_o1AEW_filterArrowRight", "inspectorTitle": "_o1AEW_inspectorTitle", "passage": "_o1AEW_passage", "badge": "_o1AEW_badge", "empty": "_o1AEW_empty", "refresh": "_o1AEW_refresh", "filterClear": "_o1AEW_filterClear", "lensBar": "_o1AEW_lensBar", "filterArrowLeft": "_o1AEW_filterArrowLeft", "detailTab": "_o1AEW_detailTab", "view": "_o1AEW_view", "spacer": "_o1AEW_spacer", "inspectorMeta": "_o1AEW_inspectorMeta", "starterRow": "_o1AEW_starterRow", "sourceTag": "_o1AEW_sourceTag", "panel": "_o1AEW_panel", "lensTab": "_o1AEW_lensTab", "filterBar": "_o1AEW_filterBar", "passageHead": "_o1AEW_passageHead", "lensTabActive": "_o1AEW_lensTabActive", "availability": "_o1AEW_availability", "emptyIcon": "_o1AEW_emptyIcon", "inspector": "_o1AEW_inspector", "evidenceEntry": "_o1AEW_evidenceEntry", "sectionLabel": "_o1AEW_sectionLabel", "note": "_o1AEW_note", "inspectorTitleWrap": "_o1AEW_inspectorTitleWrap", "detailTabCount": "_o1AEW_detailTabCount", "emptyNote": "_o1AEW_emptyNote", "listItemMeta": "_o1AEW_listItemMeta", "toolbar": "_o1AEW_toolbar", "inspectorHead": "_o1AEW_inspectorHead", "summaryLine": "_o1AEW_summaryLine", "detailToggle": "_o1AEW_detailToggle", "actionRow": "_o1AEW_actionRow", "exportsPage": "_o1AEW_exportsPage", "diagnosis": "_o1AEW_diagnosis", "listItem": "_o1AEW_listItem", "badges": "_o1AEW_badges", "detailTabActive": "_o1AEW_detailTabActive", "passages": "_o1AEW_passages", "inspectorTabs": "_o1AEW_inspectorTabs", "cardStack": "_o1AEW_cardStack", "sidebar": "_o1AEW_sidebar", "emptyText": "_o1AEW_emptyText", "lensTabCount": "_o1AEW_lensTabCount", "listbox": "_o1AEW_listbox", "emptyWrap": "_o1AEW_emptyWrap", "action": "_o1AEW_action", "listItemTitle": "_o1AEW_listItemTitle", "evidencePage": "_o1AEW_evidencePage", "backAction": "_o1AEW_backAction", "warning": "_o1AEW_warning" };
1501
+ var workspace_default = { "inspector": "_o1AEW_inspector", "filterClear": "_o1AEW_filterClear", "diagnosis": "_o1AEW_diagnosis", "listItemSelected": "_o1AEW_listItemSelected", "lensTab": "_o1AEW_lensTab", "emptyIcon": "_o1AEW_emptyIcon", "exportsPage": "_o1AEW_exportsPage", "backAction": "_o1AEW_backAction", "starterRow": "_o1AEW_starterRow", "detailTabCount": "_o1AEW_detailTabCount", "actionRow": "_o1AEW_actionRow", "toolbar": "_o1AEW_toolbar", "filterArrow": "_o1AEW_filterArrow", "section": "_o1AEW_section", "passageHead": "_o1AEW_passageHead", "evidenceEntry": "_o1AEW_evidenceEntry", "panel": "_o1AEW_panel", "workspace": "_o1AEW_workspace", "menuButton": "_o1AEW_menuButton", "refresh": "_o1AEW_refresh", "passages": "_o1AEW_passages", "badges": "_o1AEW_badges", "inspectorMeta": "_o1AEW_inspectorMeta", "emptyText": "_o1AEW_emptyText", "view": "_o1AEW_view", "inspectorTabs": "_o1AEW_inspectorTabs", "sidebar": "_o1AEW_sidebar", "listItemTitle": "_o1AEW_listItemTitle", "inspectorTitleWrap": "_o1AEW_inspectorTitleWrap", "sectionLabel": "_o1AEW_sectionLabel", "badge": "_o1AEW_badge", "exportStack": "_o1AEW_exportStack", "listbox": "_o1AEW_listbox", "lensTabCount": "_o1AEW_lensTabCount", "detailTabActive": "_o1AEW_detailTabActive", "lensTabActive": "_o1AEW_lensTabActive", "cardStack": "_o1AEW_cardStack", "spacer": "_o1AEW_spacer", "emptyWrap": "_o1AEW_emptyWrap", "inspectorTitle": "_o1AEW_inspectorTitle", "listItem": "_o1AEW_listItem", "filterArrowRight": "_o1AEW_filterArrowRight", "warning": "_o1AEW_warning", "sourceTag": "_o1AEW_sourceTag", "empty": "_o1AEW_empty", "filterBar": "_o1AEW_filterBar", "line": "_o1AEW_line", "detailToggle": "_o1AEW_detailToggle", "emptyNote": "_o1AEW_emptyNote", "detailTab": "_o1AEW_detailTab", "evidencePage": "_o1AEW_evidencePage", "listItemMeta": "_o1AEW_listItemMeta", "statusText": "_o1AEW_statusText", "action": "_o1AEW_action", "inspectorBody": "_o1AEW_inspectorBody", "lensBar": "_o1AEW_lensBar", "availability": "_o1AEW_availability", "summaryLine": "_o1AEW_summaryLine", "passage": "_o1AEW_passage", "inspectorHead": "_o1AEW_inspectorHead", "note": "_o1AEW_note", "filterArrowLeft": "_o1AEW_filterArrowLeft" };
1501
1502
 
1502
1503
  // src/client/components/workspace/WorkspaceToolbar.tsx
1503
1504
  var import_jsx_runtime4 = require("react/jsx-runtime");
@@ -1529,7 +1530,7 @@ function WorkspaceToolbar({ connection, onRefresh, t }) {
1529
1530
  "aria-busy": connection.kind === "loading",
1530
1531
  children: [
1531
1532
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1532
- import_dsh_client_ui_primitives2.StateDot,
1533
+ import_dsh_client_ui_primitives3.StateDot,
1533
1534
  {
1534
1535
  state: connection.kind === "loading" ? "ongoing" : connection.kind === "connected" ? "done" : "error"
1535
1536
  }
@@ -1542,7 +1543,7 @@ function WorkspaceToolbar({ connection, onRefresh, t }) {
1542
1543
  failed && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: workspace_default.diagnosis, title: diagnosis, children: diagnosis }),
1543
1544
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: workspace_default.spacer }),
1544
1545
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1545
- import_dsh_client_ui_primitives2.Menu,
1546
+ import_dsh_client_ui_primitives3.Menu,
1546
1547
  {
1547
1548
  open: menuOpen,
1548
1549
  anchor: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
@@ -1585,7 +1586,7 @@ function WorkspaceToolbar({ connection, onRefresh, t }) {
1585
1586
 
1586
1587
  // src/client/components/workspace/SourceSidebar.tsx
1587
1588
  var import_react3 = require("react");
1588
- var import_dsh_client_ui_primitives3 = require("@deepseek-ai/dsh-client-ui-primitives");
1589
+ var import_dsh_client_ui_primitives4 = require("@deepseek-ai/dsh-client-ui-primitives");
1589
1590
 
1590
1591
  // src/client/components/workspace/SourceListItem.tsx
1591
1592
  var import_jsx_runtime5 = require("react/jsx-runtime");
@@ -1736,13 +1737,13 @@ function SourceSidebar({
1736
1737
  onClick: () => {
1737
1738
  pageFilters(-1);
1738
1739
  },
1739
- children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_dsh_client_ui_primitives3.IconChevronLeftOutline14, {})
1740
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_dsh_client_ui_primitives4.IconChevronLeftOutline14, {})
1740
1741
  }
1741
1742
  ),
1742
1743
  shownFiltersOf(filter, counts).map((entry) => {
1743
1744
  const count = counts[entry.id];
1744
1745
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1745
- import_dsh_client_ui_primitives3.Pill,
1746
+ import_dsh_client_ui_primitives4.Pill,
1746
1747
  {
1747
1748
  active: filter === entry.id,
1748
1749
  "aria-pressed": filter === entry.id,
@@ -1763,7 +1764,7 @@ function SourceSidebar({
1763
1764
  onClick: () => {
1764
1765
  pageFilters(1);
1765
1766
  },
1766
- children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_dsh_client_ui_primitives3.IconChevronRightOutline14, {})
1767
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_dsh_client_ui_primitives4.IconChevronRightOutline14, {})
1767
1768
  }
1768
1769
  )
1769
1770
  ]
@@ -1820,7 +1821,7 @@ var import_react9 = require("react");
1820
1821
 
1821
1822
  // src/client/components/workspace/SourceOverview.tsx
1822
1823
  var import_react5 = require("react");
1823
- var import_dsh_client_ui_primitives6 = require("@deepseek-ai/dsh-client-ui-primitives");
1824
+ var import_dsh_client_ui_primitives7 = require("@deepseek-ai/dsh-client-ui-primitives");
1824
1825
 
1825
1826
  // src/client/actions/source-actions.ts
1826
1827
  function askDraftOf(ref, t) {
@@ -1832,7 +1833,7 @@ function exportDraftOf(ref, t) {
1832
1833
 
1833
1834
  // src/client/components/open/BlockedOpenAction.tsx
1834
1835
  var import_react4 = require("react");
1835
- var import_dsh_client_ui_primitives4 = require("@deepseek-ai/dsh-client-ui-primitives");
1836
+ var import_dsh_client_ui_primitives5 = require("@deepseek-ai/dsh-client-ui-primitives");
1836
1837
 
1837
1838
  // src/client/components/open/open.module.css
1838
1839
  var style5 = `._02bwZG_linkWrap{flex-wrap:wrap;align-items:center;gap:4px;display:inline-flex}._02bwZG_link{color:var(--dsw-alias-link);font-size:12px;font-weight:500;line-height:16px;text-decoration:none}._02bwZG_link:hover,._02bwZG_link:focus-visible{text-underline-offset:3px;text-decoration:underline dotted}._02bwZG_link:focus-visible{outline:1px solid var(--dsw-alias-link);outline-offset:1px}._02bwZG_linkIcon{vertical-align:-.25em;flex:none;width:1.1em;height:1.1em;margin-right:5px}._02bwZG_note{color:var(--dsw-alias-label-caption);font-size:12px;line-height:18px}._02bwZG_button{height:24px;color:var(--dsw-alias-label-secondary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;transition:background .12s var(--ds-ease-in-out), color .12s var(--ds-ease-in-out);background:0 0;border-radius:6px;align-items:center;padding:0 8px;font-family:inherit;font-size:12px;line-height:16px;text-decoration:none;display:inline-flex}._02bwZG_button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._02bwZG_button:focus-visible{outline:1px solid var(--dsw-alias-state-business-primary);outline-offset:1px}._02bwZG_blocked{opacity:.5;cursor:default}._02bwZG_blocked:hover{color:var(--dsw-alias-label-secondary);background:0 0}._02bwZG_srOnly{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){._02bwZG_button{transition:none}}`;
@@ -1842,7 +1843,7 @@ if (typeof document !== "undefined" && !document.querySelector('style[data-plugi
1842
1843
  tag.textContent = style5;
1843
1844
  document.head.appendChild(tag);
1844
1845
  }
1845
- var open_default = { "note": "_02bwZG_note", "blocked": "_02bwZG_blocked", "linkIcon": "_02bwZG_linkIcon", "linkWrap": "_02bwZG_linkWrap", "link": "_02bwZG_link", "button": "_02bwZG_button", "srOnly": "_02bwZG_srOnly" };
1846
+ var open_default = { "blocked": "_02bwZG_blocked", "button": "_02bwZG_button", "note": "_02bwZG_note", "srOnly": "_02bwZG_srOnly", "linkWrap": "_02bwZG_linkWrap", "link": "_02bwZG_link", "linkIcon": "_02bwZG_linkIcon" };
1846
1847
 
1847
1848
  // src/client/components/open/BlockedOpenAction.tsx
1848
1849
  var import_jsx_runtime7 = require("react/jsx-runtime");
@@ -1850,7 +1851,7 @@ function BlockedOpenAction({ label, t, className }) {
1850
1851
  const reason = t("provenanceMismatch");
1851
1852
  const reasonId = (0, import_react4.useId)();
1852
1853
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
1853
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_dsh_client_ui_primitives4.Tooltip, { label: reason, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1854
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_dsh_client_ui_primitives5.Tooltip, { label: reason, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1854
1855
  "button",
1855
1856
  {
1856
1857
  type: "button",
@@ -1868,25 +1869,32 @@ function BlockedOpenAction({ label, t, className }) {
1868
1869
  }
1869
1870
 
1870
1871
  // src/client/components/open/ZoteroOpenButton.tsx
1871
- var import_dsh_client_ui_primitives5 = require("@deepseek-ai/dsh-client-ui-primitives");
1872
- var import_jsx_runtime8 = require("react/jsx-runtime");
1873
- function ZoteroOpenButton({ url: url2, verdict, label, t, className }) {
1874
- let external = false;
1872
+ var import_dsh_client_ui_primitives6 = require("@deepseek-ai/dsh-client-ui-primitives");
1873
+
1874
+ // src/client/components/open/external-href.ts
1875
+ function externalHrefProps(url2) {
1875
1876
  try {
1876
1877
  const protocol = new URL(url2).protocol;
1877
- external = protocol === "http:" || protocol === "https:";
1878
+ if (protocol === "http:" || protocol === "https:") {
1879
+ return { target: "_blank", rel: "noopener noreferrer" };
1880
+ }
1878
1881
  } catch {
1879
- external = false;
1880
1882
  }
1883
+ return {};
1884
+ }
1885
+
1886
+ // src/client/components/open/ZoteroOpenButton.tsx
1887
+ var import_jsx_runtime8 = require("react/jsx-runtime");
1888
+ function ZoteroOpenButton({ url: url2, verdict, label, t, className }) {
1881
1889
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
1882
1890
  "a",
1883
1891
  {
1884
1892
  className: className ?? open_default.button,
1885
1893
  href: url2,
1886
- ...external ? { target: "_blank", rel: "noopener noreferrer" } : {},
1894
+ ...externalHrefProps(url2),
1887
1895
  title: verdict === "unverified" ? t("instanceUnverified") : void 0,
1888
1896
  children: [
1889
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_dsh_client_ui_primitives5.LinkIcon, { kind: "url", className: open_default.linkIcon }),
1897
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_dsh_client_ui_primitives6.LinkIcon, { kind: "url", className: open_default.linkIcon }),
1890
1898
  label
1891
1899
  ]
1892
1900
  }
@@ -1955,7 +1963,7 @@ function SourceOverview({ item, t, setDraft }) {
1955
1963
  }
1956
1964
  ),
1957
1965
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1958
- import_dsh_client_ui_primitives6.Menu,
1966
+ import_dsh_client_ui_primitives7.Menu,
1959
1967
  {
1960
1968
  open: menuOpen,
1961
1969
  anchor: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
@@ -1972,7 +1980,7 @@ function SourceOverview({ item, t, setDraft }) {
1972
1980
  ),
1973
1981
  items: [{ id: "copyRef", label: t("copyRef") }],
1974
1982
  onSelect: () => {
1975
- void (0, import_dsh_client_ui_primitives6.writeClipboard)(item.ref);
1983
+ void (0, import_dsh_client_ui_primitives7.writeClipboard)(item.ref);
1976
1984
  setMenuOpen(false);
1977
1985
  },
1978
1986
  onClose: () => {
@@ -2117,7 +2125,7 @@ function downloadBlob(text, fileName, mime) {
2117
2125
 
2118
2126
  // src/client/components/CopyButton.tsx
2119
2127
  var import_react6 = require("react");
2120
- var import_dsh_client_ui_primitives7 = require("@deepseek-ai/dsh-client-ui-primitives");
2128
+ var import_dsh_client_ui_primitives8 = require("@deepseek-ai/dsh-client-ui-primitives");
2121
2129
 
2122
2130
  // src/client/components/cards.module.css
2123
2131
  var style6 = `._27yOoG_note{color:var(--dsw-alias-label-caption);margin:0;font-size:12px;line-height:18px}._27yOoG_line{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._27yOoG_lineActions{flex:none;align-items:center;gap:4px;margin-left:auto;display:inline-flex}._27yOoG_lineAction{height:24px;color:var(--dsw-alias-label-secondary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;transition:background .12s var(--ds-ease-in-out), color .12s var(--ds-ease-in-out);background:0 0;border-radius:6px;align-items:center;padding:0 8px;font-family:inherit;font-size:12px;line-height:16px;display:inline-flex}._27yOoG_lineAction:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._27yOoG_lineAction:focus-visible{outline:1px solid var(--dsw-alias-state-business-primary);outline-offset:1px}._27yOoG_chevron{color:var(--dsw-alias-label-caption);transition:transform .12s var(--ds-ease-in-out);flex:none}._27yOoG_chevronOpen{transform:rotate(180deg)}._27yOoG_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:8px;flex-direction:column;gap:6px;max-width:900px;padding:10px 12px;display:flex}._27yOoG_cardHead{flex-wrap:wrap;align-items:center;gap:4px 8px;display:flex}._27yOoG_cardTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:20px}._27yOoG_link{color:var(--dsw-alias-link);font-size:12px;font-weight:500;line-height:16px;text-decoration:none}._27yOoG_link:hover,._27yOoG_link:focus-visible{text-underline-offset:3px;text-decoration:underline dotted}._27yOoG_link:focus-visible{outline:1px solid var(--dsw-alias-link);outline-offset:1px}._27yOoG_passages{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}._27yOoG_passage{flex-direction:column;gap:2px;display:flex}._27yOoG_passageHead{flex-wrap:wrap;align-items:center;gap:4px 8px;display:flex}._27yOoG_sourceTag{letter-spacing:.035em;height:18px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);border-radius:4px;align-items:center;padding:0 6px;font-size:10px;font-weight:650;line-height:12px;display:inline-flex}._27yOoG_availability{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}._27yOoG_exportRow{flex-direction:column;gap:4px;padding:6px 0;display:flex}._27yOoG_exportSection{flex-direction:column;gap:2px;display:flex}._27yOoG_exportSectionHead{flex-wrap:wrap;align-items:center;gap:4px 8px;padding:6px 0 4px;display:flex}._27yOoG_exportSectionTitle{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:20px}._27yOoG_exportSectionCount{color:var(--dsw-alias-label-caption);flex:none;font-size:12px;line-height:18px}._27yOoG_exportSectionActions{align-items:center;gap:4px;margin-left:auto;display:inline-flex}._27yOoG_documentKey{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--ds-font-family-code);color:var(--dsw-alias-label-primary);flex:auto;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}._27yOoG_documentTitle{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-caption);margin:0;padding-left:2px;font-size:12px;line-height:18px;overflow:hidden}._27yOoG_exportHead{flex-wrap:wrap;align-items:center;gap:4px 8px;display:flex}._27yOoG_exportToggle{text-align:left;cursor:pointer;background:0 0;border:none;flex:auto;align-items:center;gap:8px;min-width:0;padding:2px 0;font-family:inherit;display:inline-flex}._27yOoG_exportToggle:focus-visible{outline:1px solid var(--dsw-alias-state-business-primary);outline-offset:2px;border-radius:4px}._27yOoG_exportTitle{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:20px}._27yOoG_exportFacts{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-caption);flex:auto;font-size:12px;line-height:18px;overflow:hidden}._27yOoG_exportBody{flex-direction:column;gap:6px;max-width:960px;padding:4px 0 10px;display:flex}._27yOoG_exportCode{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:8px;overflow:hidden}._27yOoG_exportCodeHead{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;min-height:32px;padding:0 10px;display:flex}._27yOoG_exportCodeLabel{min-width:0;color:var(--dsw-alias-label-secondary);flex:auto;font-size:12px;line-height:16px}._27yOoG_exportKeys{flex-wrap:wrap;align-items:center;gap:4px 8px;margin:0;display:flex}._27yOoG_exportKeysText{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:480px;font-family:var(--ds-font-family-code);color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px;overflow:hidden}._27yOoG_exportPre{max-height:280px;font-family:var(--ds-font-family-code);color:var(--dsw-alias-label-secondary);white-space:pre;--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);margin:0;padding:10px 12px;font-size:12px;line-height:18px;overflow:auto}._27yOoG_unresolvedItems{flex-wrap:wrap;align-items:center;gap:4px 8px;padding:4px 0 6px;display:flex}._27yOoG_unresolvedItemsText{color:var(--dsw-alias-label-caption);font-size:12px;line-height:18px}@media (prefers-reduced-motion:reduce){._27yOoG_chevron,._27yOoG_lineAction{transition:none}}`;
@@ -2127,7 +2135,7 @@ if (typeof document !== "undefined" && !document.querySelector('style[data-plugi
2127
2135
  tag.textContent = style6;
2128
2136
  document.head.appendChild(tag);
2129
2137
  }
2130
- var cards_default = { "exportSectionActions": "_27yOoG_exportSectionActions", "chevron": "_27yOoG_chevron", "card": "_27yOoG_card", "sourceTag": "_27yOoG_sourceTag", "note": "_27yOoG_note", "cardTitle": "_27yOoG_cardTitle", "availability": "_27yOoG_availability", "exportBody": "_27yOoG_exportBody", "exportFacts": "_27yOoG_exportFacts", "exportSectionTitle": "_27yOoG_exportSectionTitle", "exportCodeLabel": "_27yOoG_exportCodeLabel", "exportSectionHead": "_27yOoG_exportSectionHead", "exportCode": "_27yOoG_exportCode", "link": "_27yOoG_link", "chevronOpen": "_27yOoG_chevronOpen", "exportToggle": "_27yOoG_exportToggle", "exportTitle": "_27yOoG_exportTitle", "exportKeys": "_27yOoG_exportKeys", "cardHead": "_27yOoG_cardHead", "lineActions": "_27yOoG_lineActions", "exportKeysText": "_27yOoG_exportKeysText", "unresolvedItems": "_27yOoG_unresolvedItems", "passageHead": "_27yOoG_passageHead", "exportRow": "_27yOoG_exportRow", "exportSection": "_27yOoG_exportSection", "exportPre": "_27yOoG_exportPre", "lineAction": "_27yOoG_lineAction", "passages": "_27yOoG_passages", "passage": "_27yOoG_passage", "exportSectionCount": "_27yOoG_exportSectionCount", "line": "_27yOoG_line", "documentTitle": "_27yOoG_documentTitle", "unresolvedItemsText": "_27yOoG_unresolvedItemsText", "exportHead": "_27yOoG_exportHead", "exportCodeHead": "_27yOoG_exportCodeHead", "documentKey": "_27yOoG_documentKey" };
2138
+ var cards_default = { "chevronOpen": "_27yOoG_chevronOpen", "exportSectionCount": "_27yOoG_exportSectionCount", "sourceTag": "_27yOoG_sourceTag", "unresolvedItems": "_27yOoG_unresolvedItems", "exportSectionHead": "_27yOoG_exportSectionHead", "exportSectionActions": "_27yOoG_exportSectionActions", "exportToggle": "_27yOoG_exportToggle", "exportCodeHead": "_27yOoG_exportCodeHead", "unresolvedItemsText": "_27yOoG_unresolvedItemsText", "passageHead": "_27yOoG_passageHead", "note": "_27yOoG_note", "documentKey": "_27yOoG_documentKey", "exportRow": "_27yOoG_exportRow", "exportBody": "_27yOoG_exportBody", "link": "_27yOoG_link", "documentTitle": "_27yOoG_documentTitle", "card": "_27yOoG_card", "exportCodeLabel": "_27yOoG_exportCodeLabel", "exportCode": "_27yOoG_exportCode", "availability": "_27yOoG_availability", "exportSection": "_27yOoG_exportSection", "exportHead": "_27yOoG_exportHead", "exportFacts": "_27yOoG_exportFacts", "exportKeysText": "_27yOoG_exportKeysText", "lineAction": "_27yOoG_lineAction", "exportTitle": "_27yOoG_exportTitle", "line": "_27yOoG_line", "lineActions": "_27yOoG_lineActions", "chevron": "_27yOoG_chevron", "exportKeys": "_27yOoG_exportKeys", "passages": "_27yOoG_passages", "passage": "_27yOoG_passage", "exportSectionTitle": "_27yOoG_exportSectionTitle", "cardTitle": "_27yOoG_cardTitle", "exportPre": "_27yOoG_exportPre", "cardHead": "_27yOoG_cardHead" };
2131
2139
 
2132
2140
  // src/client/components/CopyButton.tsx
2133
2141
  var import_jsx_runtime11 = require("react/jsx-runtime");
@@ -2151,7 +2159,7 @@ function CopyButton({ value, label, copiedLabel }) {
2151
2159
  "aria-label": label,
2152
2160
  onClick: () => {
2153
2161
  const mine = epoch.current += 1;
2154
- void (0, import_dsh_client_ui_primitives7.writeClipboard)(value).then((ok) => {
2162
+ void (0, import_dsh_client_ui_primitives8.writeClipboard)(value).then((ok) => {
2155
2163
  if (ok && epoch.current === mine) setCopied(true);
2156
2164
  });
2157
2165
  },
@@ -2162,7 +2170,7 @@ function CopyButton({ value, label, copiedLabel }) {
2162
2170
 
2163
2171
  // src/client/components/ExportDocumentRow.tsx
2164
2172
  var import_react8 = require("react");
2165
- var import_dsh_client_ui_primitives9 = require("@deepseek-ai/dsh-client-ui-primitives");
2173
+ var import_dsh_client_ui_primitives10 = require("@deepseek-ai/dsh-client-ui-primitives");
2166
2174
 
2167
2175
  // src/export-items.ts
2168
2176
  var BIBTEX_KEY_SOURCE = "@[A-Za-z]+\\{([^,\\s{}]+),";
@@ -2188,7 +2196,7 @@ function citeCommandOf(keys) {
2188
2196
 
2189
2197
  // src/client/components/ExportCard.tsx
2190
2198
  var import_react7 = require("react");
2191
- var import_dsh_client_ui_primitives8 = require("@deepseek-ai/dsh-client-ui-primitives");
2199
+ var import_dsh_client_ui_primitives9 = require("@deepseek-ai/dsh-client-ui-primitives");
2192
2200
  var import_jsx_runtime12 = require("react/jsx-runtime");
2193
2201
  function formatLabelOf(format, t) {
2194
2202
  switch (format) {
@@ -2281,7 +2289,7 @@ function ExportCard({ artifact, t }) {
2281
2289
  children: [
2282
2290
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: cards_default.exportTitle, children: formatLabelOf(artifact.format, t) }),
2283
2291
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: cards_default.exportFacts, children: headFacts }),
2284
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_dsh_client_ui_primitives8.IconChevronDownOutline14, { className: clsx_default(cards_default.chevron, open && cards_default.chevronOpen) })
2292
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_dsh_client_ui_primitives9.IconChevronDownOutline14, { className: clsx_default(cards_default.chevron, open && cards_default.chevronOpen) })
2285
2293
  ]
2286
2294
  }
2287
2295
  ),
@@ -2326,7 +2334,7 @@ function ExportDocumentRow({ doc, t }) {
2326
2334
  },
2327
2335
  children: [
2328
2336
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: doc.key === void 0 ? cards_default.exportTitle : cards_default.documentKey, children: doc.key ?? doc.title ?? formatLabelOf(doc.format, t) }),
2329
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_dsh_client_ui_primitives9.IconChevronDownOutline14, { className: clsx_default(cards_default.chevron, open && cards_default.chevronOpen) })
2337
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_dsh_client_ui_primitives10.IconChevronDownOutline14, { className: clsx_default(cards_default.chevron, open && cards_default.chevronOpen) })
2330
2338
  ]
2331
2339
  }
2332
2340
  ),
@@ -2532,15 +2540,15 @@ function SourceInspector({
2532
2540
  }
2533
2541
 
2534
2542
  // src/client/components/workspace/WorkspaceEmptyState.tsx
2535
- var import_dsh_client_ui_primitives10 = require("@deepseek-ai/dsh-client-ui-primitives");
2543
+ var import_dsh_client_ui_primitives11 = require("@deepseek-ai/dsh-client-ui-primitives");
2536
2544
  var import_jsx_runtime17 = require("react/jsx-runtime");
2537
2545
  function WorkspaceEmptyState({ t, setDraft }) {
2538
2546
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: workspace_default.empty, children: [
2539
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives10.IconBrowseOutline16, { size: 16, className: workspace_default.emptyIcon }),
2547
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_dsh_client_ui_primitives11.IconBrowseOutline16, { size: 16, className: workspace_default.emptyIcon }),
2540
2548
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: workspace_default.emptyText, children: t("noSources") }),
2541
2549
  setDraft !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: workspace_default.starterRow, children: [
2542
2550
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2543
- import_dsh_client_ui_primitives10.Pill,
2551
+ import_dsh_client_ui_primitives11.Pill,
2544
2552
  {
2545
2553
  onClick: () => {
2546
2554
  setDraft(t("starterFindTemplate"));
@@ -2549,7 +2557,7 @@ function WorkspaceEmptyState({ t, setDraft }) {
2549
2557
  }
2550
2558
  ),
2551
2559
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2552
- import_dsh_client_ui_primitives10.Pill,
2560
+ import_dsh_client_ui_primitives11.Pill,
2553
2561
  {
2554
2562
  onClick: () => {
2555
2563
  setDraft(t("starterCompareTemplate"));
@@ -2558,7 +2566,7 @@ function WorkspaceEmptyState({ t, setDraft }) {
2558
2566
  }
2559
2567
  ),
2560
2568
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2561
- import_dsh_client_ui_primitives10.Pill,
2569
+ import_dsh_client_ui_primitives11.Pill,
2562
2570
  {
2563
2571
  onClick: () => {
2564
2572
  setDraft(t("starterEvidenceTemplate"));
@@ -2567,7 +2575,7 @@ function WorkspaceEmptyState({ t, setDraft }) {
2567
2575
  }
2568
2576
  ),
2569
2577
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2570
- import_dsh_client_ui_primitives10.Pill,
2578
+ import_dsh_client_ui_primitives11.Pill,
2571
2579
  {
2572
2580
  onClick: () => {
2573
2581
  setDraft(t("starterExportSelectedTemplate"));
@@ -2603,29 +2611,14 @@ function ExportsPage({ workspace, t }) {
2603
2611
  }
2604
2612
 
2605
2613
  // src/client/components/open/ZoteroOpenLink.tsx
2606
- var import_dsh_client_ui_primitives11 = require("@deepseek-ai/dsh-client-ui-primitives");
2614
+ var import_dsh_client_ui_primitives12 = require("@deepseek-ai/dsh-client-ui-primitives");
2607
2615
  var import_jsx_runtime19 = require("react/jsx-runtime");
2608
2616
  function ZoteroOpenLink({ url: url2, verdict, label, t, className }) {
2609
- let external = false;
2610
- try {
2611
- const protocol = new URL(url2).protocol;
2612
- external = protocol === "http:" || protocol === "https:";
2613
- } catch {
2614
- external = false;
2615
- }
2616
2617
  return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: open_default.linkWrap, children: [
2617
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
2618
- "a",
2619
- {
2620
- className: className ?? open_default.link,
2621
- href: url2,
2622
- ...external ? { target: "_blank", rel: "noopener noreferrer" } : {},
2623
- children: [
2624
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_dsh_client_ui_primitives11.LinkIcon, { kind: "url", className: open_default.linkIcon }),
2625
- label
2626
- ]
2627
- }
2628
- ),
2618
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("a", { className: className ?? open_default.link, href: url2, ...externalHrefProps(url2), children: [
2619
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_dsh_client_ui_primitives12.LinkIcon, { kind: "url", className: open_default.linkIcon }),
2620
+ label
2621
+ ] }),
2629
2622
  verdict === "unverified" && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: open_default.note, children: t("openUnverifiedNote", { detail: t("instanceUnverified") }) })
2630
2623
  ] });
2631
2624
  }