dsh-figmark 1.2.4 → 1.2.5

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/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.2.5 — 2026-11-07
4
+
5
+ 本版修正本机网页元素标注的重新编辑与删除,并整理待发送标注卡片的展开和附件行为。
6
+
7
+ ### Improved
8
+
9
+ - 元素评论框收起后,直接点击页面上已标注的元素外框即可重新打开。
10
+ - 元素评论框增加删除按钮,删除后可通过原有的撤销操作恢复。
11
+ - 待发送标注卡片在原位置展开和收起;卡片标题、箭头与整块标题区域都可操作,展开后不再嵌套第二张卡片。
12
+ - 本机网页上的长元素名称会限制在标注标签宽度内,中文名称不再溢出。
13
+
14
+ ### Fixed
15
+
16
+ - 修复文字标注在原生输入框中使用 `annotation.txt` 作为发送占位时,会把该文件显示成多余附件的问题。
17
+ - 空输入直接发送仍会使用输入框的发送按钮;临时准入资源会在提交前移除,不会进入实际消息。
18
+ - 对齐元素评论框内删除按钮与另外两个操作按钮的宽高。
19
+
3
20
  ## 1.2.4 — 2026-11-06
4
21
 
5
22
  本版统一批注卡片的预览与发送方式,修复缩放网页导出错位,并改进本机网页的检索和状态保留。
package/lib/client.js CHANGED
@@ -3988,6 +3988,7 @@ window.__ModuleLoader__.load({
3988
3988
  style: { pointerEvents: "none" },
3989
3989
  children: [boxed ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
3990
3990
  "data-da-element-box": mark.id,
3991
+ onPointerDown: props.onPress,
3991
3992
  x: box.x,
3992
3993
  y: box.y,
3993
3994
  width: box.width,
@@ -4019,7 +4020,8 @@ window.__ModuleLoader__.load({
4019
4020
  const code = elideCode(anchorCodeName(mark.anchor));
4020
4021
  const pad = 4 * unit;
4021
4022
  const fontSize = CODE_FONT_SIZE * unit;
4022
- const width = code.length * fontSize * .62 + pad * 2;
4023
+ const advance = Array.from(code).reduce((sum, char) => sum + (char.charCodeAt(0) > 255 ? 1 : .62), 0);
4024
+ const width = Math.min(advance * fontSize + pad * 2, Math.max(pad * 2, paper.right - paper.left));
4023
4025
  const height = fontSize + pad * 1.6;
4024
4026
  const gap = 4 * unit;
4025
4027
  const limit = Math.max(paper.left, paper.right - width);
@@ -4037,17 +4039,27 @@ window.__ModuleLoader__.load({
4037
4039
  fillOpacity: .94,
4038
4040
  stroke: mark.color,
4039
4041
  strokeWidth: 1.2 * unit
4040
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("text", {
4041
- "data-da-element-code": mark.id,
4042
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("foreignObject", {
4042
4043
  x: x + pad,
4043
- y: y + height / 2,
4044
- fontFamily: CODE_FONT_FAMILY,
4045
- fontSize,
4046
- fontWeight: 600,
4047
- fill: CODE_TEXT_COLOR,
4048
- stroke: "none",
4049
- dominantBaseline: "central",
4050
- children: code
4044
+ y,
4045
+ width: Math.max(0, width - pad * 2),
4046
+ height,
4047
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4048
+ "data-da-element-code": mark.id,
4049
+ title: anchorCodeName(mark.anchor),
4050
+ style: {
4051
+ display: "block",
4052
+ overflow: "hidden",
4053
+ textOverflow: "ellipsis",
4054
+ whiteSpace: "nowrap",
4055
+ fontFamily: CODE_FONT_FAMILY,
4056
+ fontSize,
4057
+ fontWeight: 600,
4058
+ color: CODE_TEXT_COLOR,
4059
+ lineHeight: `${height}px`
4060
+ },
4061
+ children: code
4062
+ })
4051
4063
  })] });
4052
4064
  }
4053
4065
  /** One mark: its shape, its hit area, and whatever its selection asks for. */
@@ -4138,7 +4150,10 @@ window.__ModuleLoader__.load({
4138
4150
  bottom: -props.originY + props.height - 2
4139
4151
  },
4140
4152
  boxed: props.elementExtent === "box",
4141
- named: selected
4153
+ named: selected,
4154
+ onPress: (event) => {
4155
+ onPressMark(mark, event);
4156
+ }
4142
4157
  }),
4143
4158
  selected && !isDraft && isPoint ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FixedFrame, {
4144
4159
  box: pointMarkBox(shown, unit),
@@ -4981,22 +4996,34 @@ window.__ModuleLoader__.load({
4981
4996
  try {
4982
4997
  live = shell.snapshot;
4983
4998
  } catch {
4984
- for (const claim of claims) claim.done();
4999
+ for (const claim of claims) {
5000
+ claim.armed.admission?.release();
5001
+ claim.done();
5002
+ }
4985
5003
  return;
4986
5004
  }
4987
5005
  if (live.phase !== void 0 && live.phase !== "plain") {
4988
- for (const claim of claims) claim.done();
5006
+ for (const claim of claims) {
5007
+ claim.armed.admission?.release();
5008
+ claim.done();
5009
+ }
4989
5010
  return;
4990
5011
  }
4991
5012
  const draft = live.draft;
4992
5013
  if (claims.every((claim) => !draft.includes(claim.armed.text))) {
4993
- for (const claim of claims) claim.done();
5014
+ for (const claim of claims) {
5015
+ claim.armed.admission?.release();
5016
+ claim.done();
5017
+ }
4994
5018
  return;
4995
5019
  }
4996
5020
  try {
4997
5021
  shell.setDraft(merge.typed);
4998
5022
  } catch {}
4999
- for (const claim of claims) if (claim.armed.staged !== true) for (const id of claim.armed.attachmentIds) shell.removeAttachment?.(id);
5023
+ for (const claim of claims) {
5024
+ if (claim.armed.admission !== void 0) attach(shell, claim.armed.admission.ids.filter((id) => !live.attachmentIds?.includes(id)));
5025
+ if (claim.armed.staged !== true) for (const id of claim.armed.attachmentIds) shell.removeAttachment?.(id);
5026
+ }
5000
5027
  }
5001
5028
  /**
5002
5029
  * Take one card off whatever patch its shell is currently carrying.
@@ -5068,6 +5095,7 @@ window.__ModuleLoader__.load({
5068
5095
  }
5069
5096
  const send = () => {
5070
5097
  try {
5098
+ for (const claim of claims) for (const id of claim.armed.admission?.ids ?? []) if (shell.removeAttachment?.(id) !== true) return;
5071
5099
  original.apply(shell, args);
5072
5100
  } finally {
5073
5101
  waiting = false;
@@ -5130,14 +5158,26 @@ window.__ModuleLoader__.load({
5130
5158
  const pageCapture = input.pageCapture === "attached" && attached === 0 ? "failed" : input.pageCapture;
5131
5159
  const message = buildAnnotationMessage(document_, paths, locale, attached > 0, Math.min(input.pageImages ?? 0, attached), pageCapture);
5132
5160
  if (armed !== void 0 && input.conversation !== void 0) {
5133
- const ids = armed.attachmentIds.length > 0 ? armed.attachmentIds : holdFiles(input.conversation, sessionId, [new File([message], "annotation.txt", { type: "text/plain" })]).map((draft) => draft.id);
5161
+ const admission = armed.attachmentIds.length === 0;
5162
+ const drafts = admission && armed.shell.removeAttachment !== void 0 ? holdFiles(input.conversation, sessionId, [new File([Uint8Array.from(atob("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII="), (char) => char.charCodeAt(0))], "figmark-draft.png", { type: "image/png" })]) : [];
5163
+ const ids = admission ? drafts.map((draft) => draft.id) : armed.attachmentIds;
5164
+ const conversation = input.conversation;
5134
5165
  if (ids.length > 0 && attach(armed.shell, ids)) armed = {
5135
5166
  ...armed,
5136
5167
  attachmentIds: ids,
5137
- staged: true
5168
+ staged: true,
5169
+ ...admission ? {
5170
+ previewUrls: drafts.flatMap((draft) => draft.previewUrl === void 0 ? [] : [draft.previewUrl]),
5171
+ admission: {
5172
+ ids,
5173
+ release: () => {
5174
+ for (const id of ids) conversation.releaseDraftAttachment?.(id);
5175
+ }
5176
+ }
5177
+ } : {}
5138
5178
  };
5139
5179
  else {
5140
- for (const id of ids) input.conversation.releaseDraftAttachment?.(id);
5180
+ for (const id of ids) conversation.releaseDraftAttachment?.(id);
5141
5181
  armed = void 0;
5142
5182
  }
5143
5183
  }
@@ -8602,12 +8642,13 @@ body[data-ds-dark-theme] .da-root{--da-quiet:#9aa0a8}
8602
8642
  /* The hand-off appears only once the field says something: an empty pill is a
8603
8643
  place to type, not a decision to make. */
8604
8644
  .da-comment-send{display:flex;align-items:center;gap:4px;flex:0 0 auto;padding-bottom:3px;padding-right:3px}
8645
+ .da-comment-remove{flex:0 0 30px;margin-bottom:3px}
8605
8646
  .da-comment-send-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;
8606
8647
  border:0;border-radius:50%;background:var(--dsw-alias-interactive-bg-hover,rgba(127,127,127,.12));
8607
8648
  color:var(--dsw-alias-label-secondary,currentColor);cursor:pointer;padding:0}
8608
8649
  .da-comment-send-btn:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(127,127,127,.2));
8609
8650
  color:var(--dsw-alias-label-primary,currentColor)}
8610
- .da-comment-send-btn:disabled{opacity:.45;cursor:default}
8651
+ .da-comment-send-btn[aria-disabled="true"],.da-comment-send-btn:disabled{opacity:.45;cursor:default}
8611
8652
  .da-comment-send-btn svg{width:15px;height:15px}
8612
8653
  /* Both ways out of the pill are the same neutral chip. Which hand-off is "primary"
8613
8654
  is the reader's judgement at the moment of sending, not something the panel gets to
@@ -8838,7 +8879,6 @@ body[data-ds-dark-theme] .da-root{--da-quiet:#9aa0a8}
8838
8879
  .da-card-head{width:100%;box-sizing:border-box;border:0;text-align:left;display:flex;align-items:center;gap:8px;min-width:0;padding:7px 9px;
8839
8880
  border-bottom:0.5px solid var(--dsw-alias-border-l2,rgba(128,128,128,.2));
8840
8881
  background:var(--dsw-alias-bg-layer-1,rgba(128,128,128,.025))}
8841
- .da-card-head-static{cursor:default}
8842
8882
  .da-card-shot{position:relative;display:flex;flex:0 0 auto;align-items:center;justify-content:center;width:34px;height:34px;overflow:hidden;border-radius:7px;
8843
8883
  border:0.5px solid var(--dsw-alias-border-l2,rgba(128,128,128,.18));
8844
8884
  background:var(--dsw-alias-bg-layer-3,rgba(128,128,128,.1));color:var(--da-accent,#176df2)}
@@ -8986,7 +9026,17 @@ body[data-ds-dark-theme] .da-root{--da-quiet:#9aa0a8}
8986
9026
  .da-card[data-expanded="true"] .da-card-name{white-space:normal;overflow-wrap:anywhere}
8987
9027
  .da-card-target{overflow-wrap:anywhere}
8988
9028
  .da-staged-type{font-size:9px;font-weight:650;letter-spacing:.04em;color:var(--dsw-alias-label-tertiary,inherit)}
8989
- .da-staged-details{display:block;width:min(440px,100%);margin-top:4px}
9029
+ .da-staged-card[data-expanded="true"]{width:min(440px,100%)}
9030
+ .da-staged-card[data-expanded="true"] .da-staged-line{display:none}
9031
+ .da-staged-chevron{display:flex;flex:0 0 18px;margin-left:auto;color:var(--dsw-alias-label-tertiary,#858991)}
9032
+ .da-staged-chevron svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.5}
9033
+ .da-staged-open[aria-expanded="true"] .da-staged-chevron{transform:rotate(90deg)}
9034
+ .da-staged-text{flex:1 1 auto;padding-right:0}
9035
+ .da-staged-open{padding-right:18px}
9036
+ .da-staged-details{display:block;width:100%;margin-top:8px;border-top:1px solid var(--dsw-alias-border-main,rgba(128,128,128,.18))}
9037
+ .da-staged-details .da-card{width:100%;max-width:none;margin:0;border:0;border-radius:0;box-shadow:none;background:transparent}
9038
+ .da-staged-details .da-card-body{padding:8px 0 0}
9039
+ .da-overlay[data-tool="select"] [data-da-element-box]{pointer-events:all;cursor:pointer}
8990
9040
  .da-staged-details[hidden]{display:none}
8991
9041
  .da-staged-send{border:0;border-radius:6px;background:none;min-height:28px;padding:4px 8px;font-size:11px;color:var(--da-accent,#176df2)}
8992
9042
  .da-staged-send[disabled]{opacity:.6;cursor:default}
@@ -9953,46 +10003,60 @@ body[data-ds-dark-theme] .da-root{--da-quiet:#9aa0a8}
9953
10003
  left: props.at.left,
9954
10004
  top: props.at.top
9955
10005
  },
9956
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
9957
- ref: props.inputRef,
9958
- className: "da-comment",
9959
- value: mark.detail ?? "",
9960
- placeholder: hasDetail(mark) ? t("detailPlaceholder") : t("addComment"),
9961
- rows: 1,
9962
- maxLength: MAX_DETAIL_CHARS,
9963
- onChange: (event) => {
9964
- props.onWrite(event.target.value);
9965
- },
9966
- onKeyDown: (event) => {
9967
- if (event.key !== "Escape") return;
9968
- event.preventDefault();
9969
- event.stopPropagation();
9970
- event.currentTarget.blur();
9971
- }
9972
- }), hasDetail(mark) ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9973
- className: "da-comment-send",
9974
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
9975
- type: "button",
9976
- className: "da-comment-send-btn da-comment-send-primary",
9977
- disabled: props.busy,
9978
- "aria-label": t("sendToAgent"),
9979
- title: t("sendToAgent"),
9980
- onClick: () => {
9981
- props.onSendToAgent();
10006
+ children: [
10007
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
10008
+ ref: props.inputRef,
10009
+ className: "da-comment",
10010
+ value: mark.detail ?? "",
10011
+ placeholder: hasDetail(mark) ? t("detailPlaceholder") : t("addComment"),
10012
+ rows: 1,
10013
+ maxLength: MAX_DETAIL_CHARS,
10014
+ onChange: (event) => {
10015
+ props.onWrite(event.target.value);
9982
10016
  },
9983
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SendIcon, {})
9984
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
10017
+ onKeyDown: (event) => {
10018
+ if (event.key !== "Escape") return;
10019
+ event.preventDefault();
10020
+ event.stopPropagation();
10021
+ event.currentTarget.blur();
10022
+ }
10023
+ }),
10024
+ hasDetail(mark) ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
10025
+ className: "da-comment-send",
10026
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
10027
+ type: "button",
10028
+ className: "da-comment-send-btn da-comment-send-primary",
10029
+ disabled: props.busy,
10030
+ "aria-label": t("sendToAgent"),
10031
+ title: t("sendToAgent"),
10032
+ onClick: () => {
10033
+ props.onSendToAgent();
10034
+ },
10035
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SendIcon, {})
10036
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
10037
+ type: "button",
10038
+ className: "da-comment-send-btn",
10039
+ disabled: props.busy,
10040
+ "aria-label": t("sendToComposer"),
10041
+ title: t("sendToComposer"),
10042
+ onClick: () => {
10043
+ props.onSendToComposer();
10044
+ },
10045
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChatIcon, {})
10046
+ })]
10047
+ }) : null,
10048
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
9985
10049
  type: "button",
9986
- className: "da-comment-send-btn",
9987
- disabled: props.busy,
9988
- "aria-label": t("sendToComposer"),
9989
- title: t("sendToComposer"),
10050
+ className: "da-comment-send-btn da-comment-remove",
10051
+ "aria-label": t("delete"),
10052
+ title: t("delete"),
10053
+ "aria-disabled": props.busy,
9990
10054
  onClick: () => {
9991
- props.onSendToComposer();
10055
+ if (!props.busy) props.onRemove();
9992
10056
  },
9993
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChatIcon, {})
9994
- })]
9995
- }) : null]
10057
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrashIcon, {})
10058
+ })
10059
+ ]
9996
10060
  });
9997
10061
  }
9998
10062
  //#endregion
@@ -15578,6 +15642,9 @@ body[data-ds-dark-theme] .da-root{--da-quiet:#9aa0a8}
15578
15642
  onWrite: (value) => {
15579
15643
  setMarkDetail(selected.id, value);
15580
15644
  },
15645
+ onRemove: () => {
15646
+ removeMark(selected.id);
15647
+ },
15581
15648
  onSendToAgent: () => {
15582
15649
  sendOne(selected, "agent");
15583
15650
  },
@@ -15911,47 +15978,46 @@ body[data-ds-dark-theme] .da-root{--da-quiet:#9aa0a8}
15911
15978
  })
15912
15979
  })
15913
15980
  ] });
15981
+ const head = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
15982
+ type: "button",
15983
+ className: "da-card-head",
15984
+ "aria-expanded": expanded,
15985
+ "aria-controls": bodyId,
15986
+ title: resolveTranslate(props, expanded ? "cardCollapse" : "cardExpand"),
15987
+ onClick: () => {
15988
+ setExpanded((value) => !value);
15989
+ },
15990
+ children: headContent
15991
+ });
15992
+ const body = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
15993
+ className: "da-card-body",
15994
+ id: bodyId,
15995
+ children: [
15996
+ shown.map((mark, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardRow, {
15997
+ mark,
15998
+ ordinal: index + 1,
15999
+ expanded,
16000
+ page: mark.page === void 0 ? void 0 : resolveTranslate(props, "cardPage", { n: mark.page })
16001
+ }, `${String(mark.page ?? "")}-${String(index)}`)),
16002
+ rest > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16003
+ className: "da-card-rest",
16004
+ children: resolveTranslate(props, "cardMore", { n: rest })
16005
+ }) : null,
16006
+ data.target === "" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16007
+ className: "da-card-row da-card-target",
16008
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16009
+ className: "da-card-goal",
16010
+ children: resolveTranslate(props, "cardGoal")
16011
+ }), data.target]
16012
+ })
16013
+ ]
16014
+ });
15914
16015
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
15915
16016
  className: "da-card",
15916
16017
  "data-expanded": expanded,
15917
16018
  children: [
15918
- embedded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
15919
- className: "da-card-head da-card-head-static",
15920
- children: headContent
15921
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
15922
- type: "button",
15923
- className: "da-card-head",
15924
- "aria-expanded": expanded,
15925
- "aria-controls": bodyId,
15926
- title: resolveTranslate(props, expanded ? "cardCollapse" : "cardExpand"),
15927
- onClick: () => {
15928
- setExpanded((value) => !value);
15929
- },
15930
- children: headContent
15931
- }),
15932
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
15933
- className: "da-card-body",
15934
- id: bodyId,
15935
- children: [
15936
- shown.map((mark, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardRow, {
15937
- mark,
15938
- ordinal: index + 1,
15939
- expanded,
15940
- page: mark.page === void 0 ? void 0 : resolveTranslate(props, "cardPage", { n: mark.page })
15941
- }, `${String(mark.page ?? "")}-${String(index)}`)),
15942
- rest > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
15943
- className: "da-card-rest",
15944
- children: resolveTranslate(props, "cardMore", { n: rest })
15945
- }) : null,
15946
- data.target === "" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
15947
- className: "da-card-row da-card-target",
15948
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
15949
- className: "da-card-goal",
15950
- children: resolveTranslate(props, "cardGoal")
15951
- }), data.target]
15952
- })
15953
- ]
15954
- }),
16019
+ embedded ? null : head,
16020
+ body,
15955
16021
  embedded ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
15956
16022
  className: "da-card-actions",
15957
16023
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
@@ -16386,97 +16452,112 @@ body[data-ds-dark-theme] .da-root{--da-quiet:#9aa0a8}
16386
16452
  children: [
16387
16453
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16388
16454
  className: "da-staged-card",
16455
+ "data-expanded": expanded,
16389
16456
  title: hover,
16390
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
16391
- type: "button",
16392
- className: "da-staged-open",
16393
- "aria-expanded": expanded,
16394
- "aria-controls": detailId,
16395
- title: resolveTranslate(props, expanded ? "cardCollapse" : "cardExpand"),
16396
- onClick: () => {
16397
- setExpanded((value) => !value);
16398
- },
16399
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16400
- className: "da-staged-shot",
16401
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(FigureIcon, {}), thumb === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
16402
- alt: "",
16403
- src: thumb,
16404
- onError: () => {
16405
- setShot(false);
16406
- }
16407
- })]
16408
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16409
- className: "da-staged-text",
16457
+ children: [
16458
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
16459
+ type: "button",
16460
+ className: "da-staged-open",
16461
+ "aria-expanded": expanded,
16462
+ "aria-controls": detailId,
16463
+ title: resolveTranslate(props, expanded ? "cardCollapse" : "cardExpand"),
16464
+ onClick: () => {
16465
+ setExpanded((value) => !value);
16466
+ },
16410
16467
  children: [
16411
16468
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16412
- className: "da-staged-head",
16413
- children: [
16414
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16415
- className: "da-staged-title",
16416
- title: name,
16417
- children: name
16418
- }),
16419
- captureNotice === "" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16420
- className: "da-staged-capture",
16421
- children: captureNotice
16422
- }),
16423
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16424
- className: "da-staged-count",
16425
- "aria-label": resolveTranslate(props, "cardCount", { n: data.marks.length }),
16426
- children: resolveTranslate(props, "pendingCount", { n: data.marks.length })
16427
- })
16428
- ]
16429
- }),
16430
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16431
- className: "da-staged-type",
16432
- children: subject.badge
16469
+ className: "da-staged-shot",
16470
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(FigureIcon, {}), thumb === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
16471
+ alt: "",
16472
+ src: thumb,
16473
+ onError: () => {
16474
+ setShot(false);
16475
+ }
16476
+ })]
16433
16477
  }),
16434
- first === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16435
- className: "da-staged-line",
16436
- title: detail,
16478
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16479
+ className: "da-staged-text",
16437
16480
  children: [
16438
- first.page === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16439
- className: "da-card-page",
16440
- children: resolveTranslate(props, "cardPage", { n: first.page })
16481
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16482
+ className: "da-staged-head",
16483
+ children: [
16484
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16485
+ className: "da-staged-title",
16486
+ title: name,
16487
+ children: name
16488
+ }),
16489
+ captureNotice === "" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16490
+ className: "da-staged-capture",
16491
+ children: captureNotice
16492
+ }),
16493
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16494
+ className: "da-staged-count",
16495
+ "aria-label": resolveTranslate(props, "cardCount", { n: data.marks.length }),
16496
+ children: resolveTranslate(props, "pendingCount", { n: data.marks.length })
16497
+ })
16498
+ ]
16441
16499
  }),
16442
16500
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16443
- className: "da-staged-shape",
16444
- children: shortLabel(first.label)
16501
+ className: "da-staged-type",
16502
+ children: subject.badge
16445
16503
  }),
16446
- first.comment === "" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16447
- className: "da-staged-said",
16448
- children: first.comment
16504
+ first === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16505
+ className: "da-staged-line",
16506
+ title: detail,
16507
+ children: [
16508
+ first.page === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16509
+ className: "da-card-page",
16510
+ children: resolveTranslate(props, "cardPage", { n: first.page })
16511
+ }),
16512
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16513
+ className: "da-staged-shape",
16514
+ children: shortLabel(first.label)
16515
+ }),
16516
+ first.comment === "" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16517
+ className: "da-staged-said",
16518
+ children: first.comment
16519
+ })
16520
+ ]
16449
16521
  })
16450
16522
  ]
16523
+ }),
16524
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16525
+ className: "da-staged-chevron",
16526
+ "aria-hidden": "true",
16527
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
16528
+ viewBox: "0 0 16 16",
16529
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m6 3.5 4.5 4.5L6 12.5" })
16530
+ })
16451
16531
  })
16452
16532
  ]
16453
- })]
16454
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
16455
- type: "button",
16456
- className: "da-staged-x",
16457
- "aria-label": removeLabel,
16458
- title: removeLabel,
16459
- disabled: busy,
16460
- onClick: () => {
16461
- if (sending.current) return;
16462
- if (armed !== void 0) disarmReview(armed, entry.conversation);
16463
- unparkAnnotation(sessionId, entry.id);
16464
- },
16465
- children: "×"
16466
- })]
16467
- }),
16468
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16469
- id: detailId,
16470
- className: "da-staged-details",
16471
- hidden: !expanded,
16472
- children: expanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnnotationCard, {
16473
- node: { data },
16474
- raw: entry.raw,
16475
- interactive: false,
16476
- embedded: true,
16477
- t: props.t,
16478
- localeId: props.localeId
16479
- }) : null
16533
+ }),
16534
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
16535
+ type: "button",
16536
+ className: "da-staged-x",
16537
+ "aria-label": removeLabel,
16538
+ title: removeLabel,
16539
+ disabled: busy,
16540
+ onClick: () => {
16541
+ if (sending.current) return;
16542
+ if (armed !== void 0) disarmReview(armed, entry.conversation);
16543
+ unparkAnnotation(sessionId, entry.id);
16544
+ },
16545
+ children: "×"
16546
+ }),
16547
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16548
+ id: detailId,
16549
+ className: "da-staged-details",
16550
+ hidden: !expanded,
16551
+ children: expanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnnotationCard, {
16552
+ node: { data },
16553
+ raw: entry.raw,
16554
+ interactive: false,
16555
+ embedded: true,
16556
+ t: props.t,
16557
+ localeId: props.localeId
16558
+ }) : null
16559
+ })
16560
+ ]
16480
16561
  }),
16481
16562
  armed === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
16482
16563
  type: "button",
package/market/index.json CHANGED
@@ -101,8 +101,8 @@
101
101
  },
102
102
  "versions": [
103
103
  {
104
- "version": "1.2.4",
105
- "publishTimestamp": 1793932197,
104
+ "version": "1.2.5",
105
+ "publishTimestamp": 1794022638,
106
106
  "source": {
107
107
  "type": "npm",
108
108
  "registry": "https://registry.npmjs.org"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-figmark",
3
- "version": "1.2.4",
3
+ "version": "1.2.5",
4
4
  "private": false,
5
5
  "description": "DSH 插件:在右侧栏预览里对科研配图、SVG、PDF 与本机网页直接圈画批注,标注写进侧车文件并可一键交给智能体改图源",
6
6
  "license": "MIT",