tiptap-markdown-react 0.18.0 → 0.19.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 (40) hide show
  1. package/README.md +97 -15
  2. package/THIRD_PARTY_LICENSES.md +45 -1
  3. package/dist/{ReportContent-MgbebxPV.js → ReportContent-B8jIzhy3.js} +8 -8
  4. package/dist/ReportContent-B8jIzhy3.js.map +1 -0
  5. package/dist/chart/columnMatching.d.ts +1 -1
  6. package/dist/chart/types.d.ts +1 -1
  7. package/dist/commentAnchor/commentMapper.d.ts +1 -1
  8. package/dist/components/EditorToolbar.d.ts +1 -1
  9. package/dist/components/ImageAlignTools.d.ts +19 -0
  10. package/dist/components/ImageUploadView.d.ts +10 -0
  11. package/dist/components/MarkdownWysiwygEditor.d.ts +47 -1
  12. package/dist/components/imageUpload.dom.test.d.ts +1 -0
  13. package/dist/extensions.d.ts +12 -0
  14. package/dist/{extractToc-BaR6LP1f.js → extractToc-CGrBMGvM.js} +433 -9
  15. package/dist/extractToc-CGrBMGvM.js.map +1 -0
  16. package/dist/icons/index.d.ts +9 -0
  17. package/dist/imageAlign.d.ts +29 -0
  18. package/dist/imageAlign.dom.test.d.ts +1 -0
  19. package/dist/imageCaption.d.ts +12 -0
  20. package/dist/imageMarkdown.d.ts +86 -0
  21. package/dist/imageResize.dom.test.d.ts +1 -0
  22. package/dist/imageUpload.d.ts +63 -0
  23. package/dist/index.d.ts +9 -2
  24. package/dist/index.js +1355 -245
  25. package/dist/index.js.map +1 -1
  26. package/dist/labels.d.ts +52 -0
  27. package/dist/paragraphMarkdown.d.ts +19 -0
  28. package/dist/paragraphStyles.d.ts +38 -0
  29. package/dist/paragraphStyles.dom.test.d.ts +1 -0
  30. package/dist/reader.js +2 -2
  31. package/dist/resetImageSize.d.ts +12 -0
  32. package/dist/{scrollToTocHeading-BTQWajGD.js → scrollToTocHeading-B2QmL4wi.js} +2 -2
  33. package/dist/{scrollToTocHeading-BTQWajGD.js.map → scrollToTocHeading-B2QmL4wi.js.map} +1 -1
  34. package/dist/server.d.ts +1 -1
  35. package/dist/server.js +4 -4
  36. package/dist/style-inline.css +671 -140
  37. package/dist/style.css +671 -140
  38. package/package.json +5 -2
  39. package/dist/ReportContent-MgbebxPV.js.map +0 -1
  40. package/dist/extractToc-BaR6LP1f.js.map +0 -1
@@ -3,14 +3,14 @@
3
3
 
4
4
  /* 编辑器最外层:查找替换浮动条的粘性范围就是它(超出编辑器范围后浮动条随之离场)。
5
5
  正文的滚动容器仍是 .editorScroll(宿主传的 className 依然落在它身上,契约不变)。 */
6
- ._editorHost_1teg4_6 {
6
+ ._editorHost_yyqcs_6 {
7
7
  position: relative;
8
8
  }
9
9
 
10
10
  /* 浮动条的粘性锚点:高度 0,不占布局、不推挤正文;sticky 让浮动条在「最近的滚动容器」
11
11
  里粘住(宿主的外层滚动容器或页面本身),正文滚动时不会把条子卷上去。
12
12
  注意:锚点必须在 DOM 里排在正文之前——排在后面的话它的自然位置在正文底部,粘性范围就错了。 */
13
- ._findBarAnchor_1teg4_13 {
13
+ ._findBarAnchor_yyqcs_13 {
14
14
  position: sticky;
15
15
  top: 0;
16
16
  height: 0;
@@ -18,16 +18,16 @@
18
18
  }
19
19
 
20
20
  /* 浮动条本体:绝对定位浮在正文之上,具体落点由 findBarOffset 决定(默认右上 4px) */
21
- ._findBar_1teg4_13 {
21
+ ._findBar_yyqcs_13 {
22
22
  position: absolute;
23
23
  }
24
24
 
25
- ._editorScroll_1teg4_5 {
25
+ ._editorScroll_yyqcs_5 {
26
26
  margin-top: 24px;
27
27
  position: relative;
28
28
  }
29
29
 
30
- ._editorContent_1teg4_30 {
30
+ ._editorContent_yyqcs_30 {
31
31
  outline: none;
32
32
  padding: 0;
33
33
  font-family: var(
@@ -53,7 +53,7 @@
53
53
  属性由官方 Placeholder 扩展(组件里按 placeholder prop 注册)以节点装饰
54
54
  打在段落 / 标题本身上,故此处 attr(data-placeholder) 取得到值。
55
55
  不限定 p:空文档首块是空标题(敲 / 选 H1 后删空)时同样显示。 */
56
- ._editorContent_1teg4_30 .is-editor-empty:first-child::before {
56
+ ._editorContent_yyqcs_30 .is-editor-empty:first-child::before {
57
57
  content: attr(data-placeholder);
58
58
  float: left;
59
59
  height: 0;
@@ -61,7 +61,7 @@
61
61
  pointer-events: none;
62
62
  }
63
63
 
64
- ._editorContent_1teg4_30 h1 {
64
+ ._editorContent_yyqcs_30 h1 {
65
65
  font-family: inherit;
66
66
  font-size: 1.55em;
67
67
  font-weight: 700;
@@ -69,7 +69,7 @@
69
69
  line-height: 1.3;
70
70
  }
71
71
 
72
- ._editorContent_1teg4_30 h2 {
72
+ ._editorContent_yyqcs_30 h2 {
73
73
  font-family: inherit;
74
74
  font-size: 1.3em;
75
75
  font-weight: 700;
@@ -77,7 +77,7 @@
77
77
  line-height: 1.3;
78
78
  }
79
79
 
80
- ._editorContent_1teg4_30 h3 {
80
+ ._editorContent_yyqcs_30 h3 {
81
81
  font-family: inherit;
82
82
  font-size: 1.12em;
83
83
  font-weight: 600;
@@ -85,21 +85,21 @@
85
85
  }
86
86
 
87
87
  /* h4-h6:延续 h1-h3 尺寸梯度递减;字号差变小后靠字重保持标题感,h6 字色稍弱。 */
88
- ._editorContent_1teg4_30 h4 {
88
+ ._editorContent_yyqcs_30 h4 {
89
89
  font-family: inherit;
90
90
  font-size: 1.05em;
91
91
  font-weight: 600;
92
92
  margin: 0.7em 0 0.3em;
93
93
  }
94
94
 
95
- ._editorContent_1teg4_30 h5 {
95
+ ._editorContent_yyqcs_30 h5 {
96
96
  font-family: inherit;
97
97
  font-size: 0.95em;
98
98
  font-weight: 600;
99
99
  margin: 0.7em 0 0.3em;
100
100
  }
101
101
 
102
- ._editorContent_1teg4_30 h6 {
102
+ ._editorContent_yyqcs_30 h6 {
103
103
  font-family: inherit;
104
104
  font-size: 0.88em;
105
105
  font-weight: 600;
@@ -107,25 +107,25 @@
107
107
  color: var(--tmr-muted, #777777);
108
108
  }
109
109
 
110
- ._editorContent_1teg4_30 p {
110
+ ._editorContent_yyqcs_30 p {
111
111
  margin: 0.7em 0;
112
112
  }
113
113
 
114
- ._editorContent_1teg4_30 ul,
115
- ._editorContent_1teg4_30 ol {
114
+ ._editorContent_yyqcs_30 ul,
115
+ ._editorContent_yyqcs_30 ol {
116
116
  padding-left: 1.5em;
117
117
  margin: 0.7em 0;
118
118
  }
119
119
 
120
- ._editorContent_1teg4_30 ul {
120
+ ._editorContent_yyqcs_30 ul {
121
121
  list-style: disc;
122
122
  }
123
123
 
124
- ._editorContent_1teg4_30 ol {
124
+ ._editorContent_yyqcs_30 ol {
125
125
  list-style: decimal;
126
126
  }
127
127
 
128
- ._editorContent_1teg4_30 blockquote {
128
+ ._editorContent_yyqcs_30 blockquote {
129
129
  border-left: 3px solid var(--tmr-accent, #ff6719);
130
130
  padding-left: 1em;
131
131
  margin: 0.9em 0;
@@ -133,13 +133,13 @@
133
133
  font-style: italic;
134
134
  }
135
135
 
136
- ._editorContent_1teg4_30 a {
136
+ ._editorContent_yyqcs_30 a {
137
137
  color: var(--tmr-accent, #ff6719);
138
138
  text-decoration: underline;
139
139
  }
140
140
 
141
141
  /* 仅行内代码加灰底;代码块内的 <code>(在 pre 内)由 NodeView 自管,排除掉 */
142
- ._editorContent_1teg4_30 code:not(pre code) {
142
+ ._editorContent_yyqcs_30 code:not(pre code) {
143
143
  background: var(--tmr-code-bg, #f4f4f4);
144
144
  padding: 0.15em 0.4em;
145
145
  border-radius: 4px;
@@ -154,13 +154,13 @@
154
154
  );
155
155
  }
156
156
 
157
- ._editorContent_1teg4_30 hr {
157
+ ._editorContent_yyqcs_30 hr {
158
158
  border: none;
159
159
  border-top: 1px solid var(--tmr-border, #e6e6e6);
160
160
  margin: 1.5em 0;
161
161
  }
162
162
 
163
- ._editorContent_1teg4_30 img {
163
+ ._editorContent_yyqcs_30 img {
164
164
  max-width: 100%;
165
165
  height: auto;
166
166
  border-radius: 6px;
@@ -168,22 +168,201 @@
168
168
  display: block;
169
169
  }
170
170
 
171
- /* 选中的图片高亮 */
172
- ._editorContent_1teg4_30 img.ProseMirror-selectednode {
171
+ /* 选中的图片高亮。开缩放后图片被 NodeView 包着、选中类落在容器上;关缩放时类落在 img 上 */
172
+ ._editorContent_yyqcs_30 img.ProseMirror-selectednode,
173
+ ._editorContent_yyqcs_30 [data-resize-container].ProseMirror-selectednode img {
173
174
  outline: 2px solid var(--tmr-accent, #ff6719);
174
175
  }
175
176
 
177
+ /* 图片对齐(data-align 由图片扩展渲染;属性名对齐官方 image-align-button 的约定)。
178
+ 只读 / 预览里 img 是块级直系子元素,margin auto 推左右;编辑态 img 被缩放的 wrapper
179
+ 包着、自身 margin 缩不动,改为对齐容器(flex)的 justify-content。 */
180
+ ._editorContent_yyqcs_30 img[data-align='left'] {
181
+ margin-left: 0;
182
+ margin-right: auto;
183
+ }
184
+
185
+ ._editorContent_yyqcs_30 img[data-align='center'] {
186
+ margin-left: auto;
187
+ margin-right: auto;
188
+ }
189
+
190
+ ._editorContent_yyqcs_30 img[data-align='right'] {
191
+ margin-left: auto;
192
+ margin-right: 0;
193
+ }
194
+
195
+ ._editorContent_yyqcs_30 [data-resize-container]:has(img[data-align='left']) {
196
+ justify-content: flex-start;
197
+ }
198
+
199
+ ._editorContent_yyqcs_30 [data-resize-container]:has(img[data-align='center']) {
200
+ justify-content: center;
201
+ }
202
+
203
+ ._editorContent_yyqcs_30 [data-resize-container]:has(img[data-align='right']) {
204
+ justify-content: flex-end;
205
+ }
206
+
207
+ /* 编辑态(缩放 wrapper 内)的对齐完全交给上面的 justify-content:img 自己的
208
+ margin 在「wrapper 宽度收缩到图片宽」的布局里没有可分配空间,auto 值在不同
209
+ 浏览器/布局下的固有尺寸计算还可能造出额外宽度——统一清零,防患于未然。 */
210
+ ._editorContent_yyqcs_30 [data-resize-wrapper] img[data-align] {
211
+ margin-left: 0;
212
+ margin-right: 0;
213
+ }
214
+
215
+ /* 编辑态:图片的上下 margin 挪到容器上(wrapper 内清零)。margin 若留在 img 上,
216
+ 会与 wrapper 折叠——wrapper 的顶被推上去,手柄 top(相对 wrapper)的定位基准就偏了
217
+ (--tmr-image-h 的公式假设「wrapper 顶 = 图片顶」)。 */
218
+ ._editorContent_yyqcs_30 [data-resize-container] {
219
+ margin: 0.8em 0;
220
+ }
221
+
222
+ ._editorContent_yyqcs_30 [data-resize-wrapper] img {
223
+ margin: 0;
224
+ }
225
+
226
+ /* 图注(图片描述):**始终在图片底部居中**(不跟图片对齐方向走)。编辑态由 NodeView
227
+ 的 wrapper 承载(宽度 = 图片宽);只读 / 预览 / SSR 走 renderHTML 的
228
+ <figure><figcaption>(figure 是 fit-content 的 column flex,figcaption 与图片同宽)。 */
229
+ ._editorContent_yyqcs_30 .tmr-image-caption {
230
+ margin-top: 0.4em;
231
+ color: var(--tmr-muted, #6b6b6b);
232
+ font-size: 0.875em;
233
+ line-height: 1.5;
234
+ text-align: center;
235
+ user-select: text;
236
+ }
237
+
238
+ /* 预览 / SSR / 无缩放的编辑态:figure > img + figcaption 结构 */
239
+ ._editorContent_yyqcs_30 figure.tmr-image-figure {
240
+ display: flex;
241
+ flex-direction: column;
242
+ width: fit-content;
243
+ max-width: 100%;
244
+ margin: 0.8em 0;
245
+ }
246
+
247
+ ._editorContent_yyqcs_30 figure.tmr-image-figure > img {
248
+ margin: 0;
249
+ }
250
+
251
+ ._editorContent_yyqcs_30 figure.tmr-image-figure:has(img[data-align='center']) {
252
+ margin-left: auto;
253
+ margin-right: auto;
254
+ }
255
+
256
+ ._editorContent_yyqcs_30 figure.tmr-image-figure:has(img[data-align='right']) {
257
+ margin-left: auto;
258
+ margin-right: 0;
259
+ }
260
+
261
+ /* 图片缩放手柄。官方 ResizableNodeView 只给手柄内联定位(top/left/bottom/right),
262
+ 没有视觉样式——尺寸与配色在这里定;拖动逻辑归 JS(mousedown→mousemove→commit)。
263
+ 显示时机:仅鼠标悬浮图片时出现(拖拽中保持),移开即隐。 */
264
+ ._editorContent_yyqcs_30 [data-resize-handle] {
265
+ width: 12px;
266
+ height: 12px;
267
+ border: 2px solid #fff;
268
+ border-radius: 4px;
269
+ box-sizing: border-box;
270
+ background: var(--tmr-accent, #ff6719);
271
+ opacity: 0;
272
+ transition: opacity 0.15s ease;
273
+ touch-action: none;
274
+ }
275
+
276
+ ._editorContent_yyqcs_30 [data-resize-container]:hover [data-resize-handle],
277
+ ._editorContent_yyqcs_30 [data-resize-container][data-resize-state='true'] [data-resize-handle] {
278
+ opacity: 1;
279
+ }
280
+
281
+ /* 默认四角手柄:中心压在图片角上(官方内联定位是贴角,用 transform 外移一半) */
282
+ ._editorContent_yyqcs_30 [data-resize-handle='top-left'] {
283
+ transform: translate(-50%, -50%);
284
+ cursor: nwse-resize;
285
+ }
286
+
287
+ ._editorContent_yyqcs_30 [data-resize-handle='top-right'] {
288
+ transform: translate(50%, -50%);
289
+ cursor: nesw-resize;
290
+ }
291
+
292
+ ._editorContent_yyqcs_30 [data-resize-handle='bottom-left'] {
293
+ transform: translate(-50%, 50%);
294
+ cursor: nesw-resize;
295
+ }
296
+
297
+ ._editorContent_yyqcs_30 [data-resize-handle='bottom-right'] {
298
+ transform: translate(50%, 50%);
299
+ cursor: nwse-resize;
300
+ }
301
+
302
+ /* 左右手柄(本库默认方向):居中的圆角竖条、贴边内缩,对齐官方 demo 的形态。
303
+ 官方内联定位把这些手柄撑满整条边(top:0;bottom:0),改回垂直居中需要 !important。 */
304
+ ._editorContent_yyqcs_30 [data-resize-handle='left'],
305
+ ._editorContent_yyqcs_30 [data-resize-handle='right'] {
306
+ top: 50% !important;
307
+ /* 有图注时 wrapper 会变高(图注在图片下方),手柄要相对**图片**垂直居中——
308
+ NodeView 包装把图片的真实高度写在 --tmr-image-h 上;变量缺失(图片未加载 /
309
+ 无布局环境)时上一条 50% 生效(calc 引用未定义变量整条声明无效)。 */
310
+ top: calc(var(--tmr-image-h) / 2) !important;
311
+ bottom: auto !important;
312
+ width: 12px;
313
+ height: min(84px, 24%);
314
+ border: none;
315
+ border-radius: 999px;
316
+ cursor: ew-resize;
317
+ }
318
+
319
+ /* 拖拽中 wrapper 高度实时变(图片尺寸在变),--tmr-image-h 还是拖前的旧值——
320
+ 继续用它手柄会「掉」到图片下方(拖小图时实测偏出 100px+,松手 update 后才复原)。
321
+ 拖拽期间落回 50% 近似定位:无图注时即图片正中;有图注时偏半个图注高,可忽略。 */
322
+ ._editorContent_yyqcs_30 [data-resize-container][data-resize-state='true'] [data-resize-handle='left'],
323
+ ._editorContent_yyqcs_30 [data-resize-container][data-resize-state='true'] [data-resize-handle='right'] {
324
+ top: 50% !important;
325
+ }
326
+
327
+ ._editorContent_yyqcs_30 [data-resize-handle='left'] {
328
+ transform: translate(8px, -50%);
329
+ }
330
+
331
+ ._editorContent_yyqcs_30 [data-resize-handle='right'] {
332
+ transform: translate(-8px, -50%);
333
+ }
334
+
335
+ /* 上下边手柄(宿主显式开启 top/bottom 时):同样的短条,横向 */
336
+ ._editorContent_yyqcs_30 [data-resize-handle='top'],
337
+ ._editorContent_yyqcs_30 [data-resize-handle='bottom'] {
338
+ left: 50% !important;
339
+ right: auto !important;
340
+ width: min(84px, 24%);
341
+ height: 12px;
342
+ border: none;
343
+ border-radius: 999px;
344
+ cursor: ns-resize;
345
+ }
346
+
347
+ ._editorContent_yyqcs_30 [data-resize-handle='top'] {
348
+ transform: translate(-50%, 8px);
349
+ }
350
+
351
+ ._editorContent_yyqcs_30 [data-resize-handle='bottom'] {
352
+ transform: translate(-50%, -8px);
353
+ }
354
+
176
355
  /* 表格:细边框、表头浅灰;外包 .tableWrapper(编辑器 NodeView + SSR renderWrapper)
177
356
  * 桌面:width:100% + 允许换行,整表落在阅读列内(与改前一致)
178
357
  * 窄屏:max-content + nowrap,避免列被挤扁,wrapper 内横滑 */
179
- ._editorContent_1teg4_30 .tableWrapper {
358
+ ._editorContent_yyqcs_30 .tableWrapper {
180
359
  max-width: 100%;
181
360
  overflow-x: auto;
182
361
  -webkit-overflow-scrolling: touch;
183
362
  margin: 1em 0;
184
363
  }
185
364
 
186
- ._editorContent_1teg4_30 table {
365
+ ._editorContent_yyqcs_30 table {
187
366
  border-collapse: collapse;
188
367
  table-layout: auto;
189
368
  width: 100%;
@@ -193,12 +372,12 @@
193
372
  }
194
373
 
195
374
  /* 无 wrapper 的遗留 HTML(旧缓存)仍给一点外边距 */
196
- ._editorContent_1teg4_30 :not(.tableWrapper) > table {
375
+ ._editorContent_yyqcs_30 :not(.tableWrapper) > table {
197
376
  margin: 1em 0;
198
377
  }
199
378
 
200
- ._editorContent_1teg4_30 table td,
201
- ._editorContent_1teg4_30 table th {
379
+ ._editorContent_yyqcs_30 table td,
380
+ ._editorContent_yyqcs_30 table th {
202
381
  border: 1px solid var(--tmr-border, #e6e6e6);
203
382
  padding: 8px 12px;
204
383
  vertical-align: top;
@@ -209,27 +388,27 @@
209
388
  word-break: break-word;
210
389
  }
211
390
 
212
- ._editorContent_1teg4_30 table th {
391
+ ._editorContent_yyqcs_30 table th {
213
392
  background: var(--tmr-table-header-bg, #f7f7f7);
214
393
  font-weight: 600;
215
394
  }
216
395
 
217
396
  @media (max-width: 640px) {
218
- ._editorContent_1teg4_30 table {
397
+ ._editorContent_yyqcs_30 table {
219
398
  width: max-content;
220
399
  min-width: 100%;
221
400
  max-width: none;
222
401
  }
223
402
 
224
- ._editorContent_1teg4_30 table td,
225
- ._editorContent_1teg4_30 table th {
403
+ ._editorContent_yyqcs_30 table td,
404
+ ._editorContent_yyqcs_30 table th {
226
405
  white-space: nowrap;
227
406
  word-break: normal;
228
407
  }
229
408
  }
230
409
 
231
410
  /* 选中的单元格高亮 */
232
- ._editorContent_1teg4_30 table .selectedCell::after {
411
+ ._editorContent_yyqcs_30 table .selectedCell::after {
233
412
  content: '';
234
413
  position: absolute;
235
414
  inset: 0;
@@ -238,7 +417,7 @@
238
417
  }
239
418
 
240
419
  /* 列宽拖拽手柄 */
241
- ._editorContent_1teg4_30 table .column-resize-handle {
420
+ ._editorContent_yyqcs_30 table .column-resize-handle {
242
421
  position: absolute;
243
422
  right: -2px;
244
423
  top: 0;
@@ -251,30 +430,30 @@
251
430
  /* 任务清单:复选框与首行文字在同一行高内垂直居中。
252
431
  li 是 flex 容器,项内段落的外边距不会塌到 li 外(不像普通 ul/ol),只会把正文往下推,
253
432
  所以项内段落清零外边距,项间距改由 li 按 ul/ol 的 0.7em 承担。 */
254
- ._editorContent_1teg4_30 ul[data-type='taskList'] {
433
+ ._editorContent_yyqcs_30 ul[data-type='taskList'] {
255
434
  list-style: none;
256
435
  padding-left: 0.2em;
257
436
  }
258
437
 
259
- ._editorContent_1teg4_30 ul[data-type='taskList'] li {
438
+ ._editorContent_yyqcs_30 ul[data-type='taskList'] li {
260
439
  display: flex;
261
440
  align-items: flex-start;
262
441
  gap: 0.5em;
263
442
  margin: 0.7em 0;
264
443
  }
265
444
 
266
- ._editorContent_1teg4_30 ul[data-type='taskList'] li > div > p {
445
+ ._editorContent_yyqcs_30 ul[data-type='taskList'] li > div > p {
267
446
  margin: 0;
268
447
  }
269
448
 
270
449
  /* 项内第二段起保留半档间距,避免多段任务项的段落粘成一片(首段仍不带外边距) */
271
- ._editorContent_1teg4_30 ul[data-type='taskList'] li > div > p + p {
450
+ ._editorContent_yyqcs_30 ul[data-type='taskList'] li > div > p + p {
272
451
  margin-top: 0.35em;
273
452
  }
274
453
 
275
454
  /* label 撑满一行行高并居中,框心落在首行文字中线上;
276
455
  1lh 即该元素当前行高,随 --tmr-line-height(数字或长度写法)一起变,不靠手调偏移。 */
277
- ._editorContent_1teg4_30 ul[data-type='taskList'] li > label {
456
+ ._editorContent_yyqcs_30 ul[data-type='taskList'] li > label {
278
457
  display: flex;
279
458
  align-items: center;
280
459
  flex: 0 0 auto;
@@ -282,18 +461,18 @@
282
461
  user-select: none;
283
462
  }
284
463
 
285
- ._editorContent_1teg4_30 ul[data-type='taskList'] li > div {
464
+ ._editorContent_yyqcs_30 ul[data-type='taskList'] li > div {
286
465
  flex: 1;
287
466
  }
288
467
 
289
- ._editorContent_1teg4_30 ul[data-type='taskList'] input[type='checkbox'] {
468
+ ._editorContent_yyqcs_30 ul[data-type='taskList'] input[type='checkbox'] {
290
469
  margin: 0;
291
470
  accent-color: var(--tmr-accent, #ff6719);
292
471
  cursor: pointer;
293
472
  }
294
473
 
295
474
  /* 脚注/引文圆标:与正文字垂直居中;配色对齐工具栏 active(浅橙底 + accent 字) */
296
- ._editorContent_1teg4_30 span.citation-ref {
475
+ ._editorContent_yyqcs_30 span.citation-ref {
297
476
  display: inline-flex;
298
477
  align-items: center;
299
478
  justify-content: center;
@@ -330,7 +509,7 @@
330
509
  border-color 0.15s ease;
331
510
  }
332
511
 
333
- ._editorContent_1teg4_30 span.citation-ref a {
512
+ ._editorContent_yyqcs_30 span.citation-ref a {
334
513
  color: inherit;
335
514
  text-decoration: none;
336
515
  display: flex;
@@ -342,26 +521,26 @@
342
521
  pointer-events: none;
343
522
  }
344
523
 
345
- ._editorContent_1teg4_30 span.citation-ref:hover,
346
- ._editorContent_1teg4_30 span.citation-ref:focus-within,
347
- ._editorContent_1teg4_30 span.citation-ref[data-tmr-citation-active] {
524
+ ._editorContent_yyqcs_30 span.citation-ref:hover,
525
+ ._editorContent_yyqcs_30 span.citation-ref:focus-within,
526
+ ._editorContent_yyqcs_30 span.citation-ref[data-tmr-citation-active] {
348
527
  background: var(--tmr-citation-bg-hover, var(--tmr-accent, #ff6719));
349
528
  border-color: var(--tmr-citation-bg-hover, var(--tmr-accent, #ff6719));
350
529
  color: var(--tmr-citation-fg-hover, #ffffff);
351
530
  }
352
531
 
353
- ._editorContent_1teg4_30 .tiptap-mathematics-render[data-type='inline-math'] {
532
+ ._editorContent_yyqcs_30 .tiptap-mathematics-render[data-type='inline-math'] {
354
533
  display: inline;
355
534
  }
356
535
 
357
- ._editorContent_1teg4_30 .tiptap-mathematics-render[data-type='block-math'] {
536
+ ._editorContent_yyqcs_30 .tiptap-mathematics-render[data-type='block-math'] {
358
537
  margin: 0.9em 0;
359
538
  overflow-x: auto;
360
539
  text-align: center;
361
540
  }
362
541
 
363
542
  /* 导入占位:进度写在光标处,不进 Markdown */
364
- ._editorContent_1teg4_30 .tmr-import-placeholder {
543
+ ._editorContent_yyqcs_30 .tmr-import-placeholder {
365
544
  display: flex;
366
545
  align-items: center;
367
546
  gap: 0.5em;
@@ -371,16 +550,16 @@
371
550
  user-select: none;
372
551
  }
373
552
 
374
- ._editorContent_1teg4_30 .tmr-import-placeholder-spin {
553
+ ._editorContent_yyqcs_30 .tmr-import-placeholder-spin {
375
554
  width: 0.7em;
376
555
  height: 0.7em;
377
556
  border: 1.5px solid var(--tmr-border, #e6e6e6);
378
557
  border-top-color: var(--tmr-accent, #ff6719);
379
558
  border-radius: 50%;
380
- animation: _tmr-import-spin_1teg4_1 0.7s linear infinite;
559
+ animation: _tmr-import-spin_yyqcs_1 0.7s linear infinite;
381
560
  }
382
561
 
383
- @keyframes _tmr-import-spin_1teg4_1 {
562
+ @keyframes _tmr-import-spin_yyqcs_1 {
384
563
  to {
385
564
  transform: rotate(360deg);
386
565
  }
@@ -388,7 +567,7 @@
388
567
 
389
568
  /* 快捷键抽屉的悬浮入口:sticky-bottom——自然位置在编辑器底部,
390
569
  内容滚动时保持悬浮在可视区右下;到内容末尾落位对齐右缘 */
391
- ._shortcutFab_1teg4_391 {
570
+ ._shortcutFab_yyqcs_570 {
392
571
  position: sticky;
393
572
  bottom: 20px;
394
573
  z-index: 6;
@@ -409,14 +588,14 @@
409
588
  transition: box-shadow 0.15s, color 0.15s;
410
589
  }
411
590
 
412
- ._shortcutFab_1teg4_391:hover {
591
+ ._shortcutFab_yyqcs_570:hover {
413
592
  color: var(--tmr-accent, #ff6719);
414
593
  box-shadow: 0 8px 24px rgb(0 0 0 / 16%);
415
594
  }
416
595
 
417
596
  /* 宿主容器模式的悬浮键:定位归宿主(如叠在「回到顶部」按钮上方),
418
597
  库只保留按钮本体视觉,不加粘性定位与右下角外边距 */
419
- ._shortcutFabHosted_1teg4_419 {
598
+ ._shortcutFabHosted_yyqcs_598 {
420
599
  position: static;
421
600
  margin: 0;
422
601
  }
@@ -782,6 +961,266 @@
782
961
  font-size: 13px;
783
962
  white-space: nowrap;
784
963
  }
964
+ /* 图片上传占位块(ImageUploadNode 的 NodeView)。配色走 --tmr-* 变量(与工具栏 / 查找条同一套),
965
+ 宿主可覆盖。
966
+
967
+ 给宿主的稳定选择器(内部 class 是 CSS Modules 哈希过的):根节点 [data-image-upload]、
968
+ 拖拽区 [data-image-upload-dropzone]、文件行 [data-image-upload-item]、移除按钮
969
+ [data-image-upload-remove]。 */
970
+
971
+ ._wrap_1k6n1_8 {
972
+ --iu-border: var(--tmr-toolbar-border, #ececec);
973
+ --iu-border-hover: var(--tmr-toolbar-muted, #6b6b6b);
974
+ --iu-muted: var(--tmr-toolbar-muted, #6b6b6b);
975
+ --iu-text: var(--tmr-text, #363737);
976
+ --iu-accent: var(--tmr-accent, #ff6719);
977
+
978
+ margin: 0.8em 0;
979
+ }
980
+
981
+ ._wrap_1k6n1_8:focus-visible {
982
+ outline: none;
983
+ }
984
+
985
+ /* ── 空态:点击 / 拖拽区 ── */
986
+
987
+ ._dropzone_1k6n1_24 {
988
+ display: flex;
989
+ align-items: center;
990
+ justify-content: center;
991
+ gap: 1.25rem;
992
+ padding: 2rem 1.5rem;
993
+ border: 1.5px dashed var(--iu-border);
994
+ border-radius: 8px;
995
+ cursor: pointer;
996
+ transition:
997
+ border-color 0.2s ease,
998
+ background-color 0.2s ease;
999
+ }
1000
+
1001
+ ._dropzone_1k6n1_24:hover {
1002
+ border-color: var(--iu-border-hover);
1003
+ }
1004
+
1005
+ ._wrap_1k6n1_8:focus-visible ._dropzone_1k6n1_24,
1006
+ ._dragActive_1k6n1_43 {
1007
+ border-color: var(--iu-accent);
1008
+ }
1009
+
1010
+ ._dragActive_1k6n1_43 {
1011
+ background-color: rgb(0 0 0 / 3%);
1012
+ }
1013
+
1014
+ ._dragOver_1k6n1_51 {
1015
+ background-color: rgb(0 0 0 / 6%);
1016
+ }
1017
+
1018
+ /* 文档形状:主体 + 折角 + 右下角的上传角标 */
1019
+ ._fileShape_1k6n1_56 {
1020
+ position: relative;
1021
+ display: inline-flex;
1022
+ width: 43px;
1023
+ height: 57px;
1024
+ flex: none;
1025
+ color: var(--iu-border);
1026
+ }
1027
+
1028
+ ._fileShapeDoc_1k6n1_65 {
1029
+ position: absolute;
1030
+ top: 0;
1031
+ left: 0;
1032
+ }
1033
+
1034
+ ._fileShapeCorner_1k6n1_71 {
1035
+ position: absolute;
1036
+ top: 0;
1037
+ right: 2px;
1038
+ color: var(--iu-border-hover);
1039
+ }
1040
+
1041
+ ._fileBadge_1k6n1_78 {
1042
+ position: absolute;
1043
+ right: -6px;
1044
+ bottom: -2px;
1045
+ display: flex;
1046
+ align-items: center;
1047
+ justify-content: center;
1048
+ width: 28px;
1049
+ height: 28px;
1050
+ border-radius: 10px;
1051
+ background: var(--iu-accent);
1052
+ color: #fff;
1053
+ }
1054
+
1055
+ ._text_1k6n1_92 {
1056
+ display: flex;
1057
+ flex-direction: column;
1058
+ gap: 0.25rem;
1059
+ text-align: left;
1060
+ user-select: none;
1061
+ }
1062
+
1063
+ ._textMain_1k6n1_100 {
1064
+ color: var(--iu-text);
1065
+ font-size: 0.875rem;
1066
+ font-weight: 500;
1067
+ line-height: normal;
1068
+ }
1069
+
1070
+ ._textEm_1k6n1_107 {
1071
+ font-style: normal;
1072
+ text-decoration: underline;
1073
+ }
1074
+
1075
+ ._subtext_1k6n1_112 {
1076
+ color: var(--iu-muted);
1077
+ font-size: 0.75rem;
1078
+ font-weight: 600;
1079
+ line-height: normal;
1080
+ }
1081
+
1082
+ /* ── 排队态:文件行列表 ── */
1083
+
1084
+ ._previews_1k6n1_121 {
1085
+ display: flex;
1086
+ flex-direction: column;
1087
+ gap: 0.75rem;
1088
+ }
1089
+
1090
+ ._header_1k6n1_127 {
1091
+ display: flex;
1092
+ align-items: center;
1093
+ justify-content: space-between;
1094
+ padding: 0.5rem 0;
1095
+ border-bottom: 1px solid var(--iu-border);
1096
+ color: var(--iu-text);
1097
+ font-size: 0.875rem;
1098
+ font-weight: 500;
1099
+ user-select: none;
1100
+ }
1101
+
1102
+ ._clearAll_1k6n1_139 {
1103
+ padding: 0;
1104
+ border: none;
1105
+ background: none;
1106
+ color: var(--iu-muted);
1107
+ font: inherit;
1108
+ font-size: 0.8125rem;
1109
+ font-weight: 600;
1110
+ cursor: pointer;
1111
+ }
1112
+
1113
+ ._clearAll_1k6n1_139:hover {
1114
+ color: var(--iu-text);
1115
+ }
1116
+
1117
+ ._preview_1k6n1_121 {
1118
+ position: relative;
1119
+ border-radius: 8px;
1120
+ overflow: hidden;
1121
+ }
1122
+
1123
+ /* 进度层:绝对定位铺底的浅色带,宽度由内联 style 给 */
1124
+ ._progress_1k6n1_161 {
1125
+ position: absolute;
1126
+ inset: 0 auto 0 0;
1127
+ background: var(--iu-accent);
1128
+ opacity: 0.12;
1129
+ transition: width 0.3s ease-out;
1130
+ }
1131
+
1132
+ ._previewContent_1k6n1_169 {
1133
+ position: relative;
1134
+ display: flex;
1135
+ align-items: center;
1136
+ justify-content: space-between;
1137
+ gap: 0.75rem;
1138
+ padding: 1rem;
1139
+ border: 1px solid var(--iu-border);
1140
+ border-radius: 8px;
1141
+ }
1142
+
1143
+ ._fileInfo_1k6n1_180 {
1144
+ display: flex;
1145
+ align-items: center;
1146
+ gap: 0.75rem;
1147
+ min-width: 0;
1148
+ }
1149
+
1150
+ ._fileIcon_1k6n1_187 {
1151
+ display: flex;
1152
+ align-items: center;
1153
+ justify-content: center;
1154
+ width: 28px;
1155
+ height: 28px;
1156
+ flex: none;
1157
+ border-radius: 10px;
1158
+ background: var(--iu-accent);
1159
+ color: #fff;
1160
+ }
1161
+
1162
+ ._details_1k6n1_199 {
1163
+ display: flex;
1164
+ flex-direction: column;
1165
+ min-width: 0;
1166
+ }
1167
+
1168
+ ._fileName_1k6n1_205 {
1169
+ overflow: hidden;
1170
+ color: var(--iu-text);
1171
+ font-size: 0.875rem;
1172
+ font-weight: 500;
1173
+ line-height: normal;
1174
+ text-overflow: ellipsis;
1175
+ white-space: nowrap;
1176
+ }
1177
+
1178
+ ._actions_1k6n1_215 {
1179
+ display: flex;
1180
+ align-items: center;
1181
+ gap: 0.5rem;
1182
+ flex: none;
1183
+ }
1184
+
1185
+ ._progressText_1k6n1_222 {
1186
+ color: var(--iu-accent);
1187
+ font-size: 0.75rem;
1188
+ font-weight: 600;
1189
+ }
1190
+
1191
+ ._remove_1k6n1_228 {
1192
+ display: flex;
1193
+ align-items: center;
1194
+ justify-content: center;
1195
+ width: 26px;
1196
+ height: 26px;
1197
+ padding: 0;
1198
+ border: none;
1199
+ border-radius: 6px;
1200
+ background: none;
1201
+ color: var(--iu-muted);
1202
+ cursor: pointer;
1203
+ }
1204
+
1205
+ ._remove_1k6n1_228:hover {
1206
+ background: rgb(0 0 0 / 5%);
1207
+ color: var(--iu-text);
1208
+ }
1209
+
1210
+ @media (max-width: 480px) {
1211
+ ._dropzone_1k6n1_24 {
1212
+ flex-direction: column;
1213
+ padding: 1.5rem 1rem;
1214
+ }
1215
+
1216
+ ._text_1k6n1_92 {
1217
+ text-align: center;
1218
+ }
1219
+
1220
+ ._previewContent_1k6n1_169 {
1221
+ padding: 0.75rem;
1222
+ }
1223
+ }
785
1224
  /* 斜杠菜单弹层。样式对齐工具栏下拉菜单(toolbar.module.css 的 .menu/.menuItem)
786
1225
  ——同一套面板(10px 圆角 + ring 阴影)、条目(6px 圆角 + #f3f3f3 悬停)、
787
1226
  选中态(#fff3ec + 品牌色)、文字字形图标槽(26px,SF Pro Display 粗体)。
@@ -1369,7 +1808,7 @@ table.tmr-pending-anchor {
1369
1808
  color: #22863a;
1370
1809
  }
1371
1810
  /* 顶部操作栏:横跨宽度、内容居中、细线灰图标。配色映射到可覆盖的 --tmr-* 变量。 */
1372
- ._toolbar_6osph_2 {
1811
+ ._toolbar_vghdk_2 {
1373
1812
  --sb-accent: var(--tmr-accent, #ff6719);
1374
1813
  --sb-text: var(--tmr-text, #363737);
1375
1814
  --sb-muted: var(--tmr-toolbar-muted, #6b6b6b);
@@ -1382,25 +1821,27 @@ table.tmr-pending-anchor {
1382
1821
  z-index: 8;
1383
1822
  }
1384
1823
 
1385
- ._inner_6osph_15 {
1824
+ ._inner_vghdk_15 {
1386
1825
  display: flex;
1387
1826
  align-items: center;
1827
+ /* 溢出时 `safe` 让居中回退为起点对齐——否则两端内容会被裁掉且滚不到头 */
1388
1828
  justify-content: safe center;
1389
- /* 控件排满一行后换行而不是横向滚:`nowrap` + `overflow-x: auto` 会把行尾的控件
1390
- 推到可视区外(宿主接上 onSearch 后就轮到了搜索入口),而工具栏横向滚动几乎没人会做。
1391
- 宽容器里仍然只有一行,换行只在装不下时发生。 */
1392
- flex-wrap: wrap;
1393
- /* 横向不留间距:每个按钮自带 8px 内边距、分隔线自带 8px 外边距,视觉间距已经够了,
1394
- 这 2px×二十来个控件是行内最后那点余量——省下来整行才装得下(列间距 0,换行后才留纵向
1395
- 间距,免得两行贴在一起)。 */
1396
- gap: 4px 0;
1829
+ /* 控件排满一行后横向滚动(2026-10-10 按用户要求从「换行」改为滚动):
1830
+ 单行、不换行;macOS 的 overlay 滚动条平时隐藏,触控板 / Shift+滚轮 / 细滚动条可横向滚。 */
1831
+ flex-wrap: nowrap;
1832
+ overflow-x: auto;
1833
+ scrollbar-width: thin;
1397
1834
  max-width: 1100px;
1398
1835
  margin: 0 auto;
1399
1836
  padding: 8px 16px;
1400
- overflow-x: auto;
1401
1837
  }
1402
1838
 
1403
- ._btn_6osph_33 {
1839
+ /* 单行 + 溢出滚动时不允许把控件压扁(各控件本来就该保持自身宽度) */
1840
+ ._inner_vghdk_15 > * {
1841
+ flex-shrink: 0;
1842
+ }
1843
+
1844
+ ._btn_vghdk_35 {
1404
1845
  display: inline-flex;
1405
1846
  align-items: center;
1406
1847
  justify-content: center;
@@ -1418,28 +1859,28 @@ table.tmr-pending-anchor {
1418
1859
  transition: background 0.15s, color 0.15s;
1419
1860
  }
1420
1861
 
1421
- ._btn_6osph_33:hover:not(:disabled) {
1862
+ ._btn_vghdk_35:hover:not(:disabled) {
1422
1863
  background: #f3f3f3;
1423
1864
  color: var(--sb-text);
1424
1865
  }
1425
1866
 
1426
- ._btnActive_6osph_56 {
1867
+ ._btnActive_vghdk_58 {
1427
1868
  color: var(--sb-accent);
1428
1869
  background: #fff3ec;
1429
1870
  }
1430
1871
 
1431
- ._btnActive_6osph_56:hover {
1872
+ ._btnActive_vghdk_58:hover {
1432
1873
  color: var(--sb-accent);
1433
1874
  background: #ffe8da;
1434
1875
  }
1435
1876
 
1436
- ._btn_6osph_33:disabled {
1877
+ ._btn_vghdk_35:disabled {
1437
1878
  opacity: 0.3;
1438
1879
  cursor: not-allowed;
1439
1880
  }
1440
1881
 
1441
1882
  /* 文字型图标(引用等) */
1442
- ._txtIcon_6osph_72 {
1883
+ ._txtIcon_vghdk_74 {
1443
1884
  font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1444
1885
  font-size: 16px;
1445
1886
  font-weight: 600;
@@ -1447,7 +1888,7 @@ table.tmr-pending-anchor {
1447
1888
  }
1448
1889
 
1449
1890
  /* 文字颜色 / 高亮图标:字母 + 底部当前色条 */
1450
- ._colorIcon_6osph_80 {
1891
+ ._colorIcon_vghdk_82 {
1451
1892
  display: inline-flex;
1452
1893
  flex-direction: column;
1453
1894
  align-items: center;
@@ -1455,20 +1896,20 @@ table.tmr-pending-anchor {
1455
1896
  line-height: 1;
1456
1897
  }
1457
1898
 
1458
- ._colorIconGlyph_6osph_88 {
1899
+ ._colorIconGlyph_vghdk_90 {
1459
1900
  font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1460
1901
  font-size: 15px;
1461
1902
  font-weight: 600;
1462
1903
  }
1463
1904
 
1464
- ._colorIconBar_6osph_94 {
1905
+ ._colorIconBar_vghdk_96 {
1465
1906
  width: 16px;
1466
1907
  height: 3px;
1467
1908
  border-radius: 1.5px;
1468
1909
  }
1469
1910
 
1470
1911
  /* A▾ 上标/下标下拉触发器 */
1471
- ._scriptTrigger_6osph_101 {
1912
+ ._scriptTrigger_vghdk_103 {
1472
1913
  display: inline-flex;
1473
1914
  align-items: center;
1474
1915
  gap: 3px;
@@ -1483,12 +1924,12 @@ table.tmr-pending-anchor {
1483
1924
  transition: background 0.15s, color 0.15s;
1484
1925
  }
1485
1926
 
1486
- ._scriptTrigger_6osph_101:hover {
1927
+ ._scriptTrigger_vghdk_103:hover {
1487
1928
  background: #f3f3f3;
1488
1929
  color: var(--sb-text);
1489
1930
  }
1490
1931
 
1491
- ._scriptTriggerGlyph_6osph_121 {
1932
+ ._scriptTriggerGlyph_vghdk_123 {
1492
1933
  font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1493
1934
  font-size: 16px;
1494
1935
  font-weight: 600;
@@ -1496,7 +1937,7 @@ table.tmr-pending-anchor {
1496
1937
  text-underline-offset: 2px;
1497
1938
  }
1498
1939
 
1499
- ._divider_6osph_129 {
1940
+ ._divider_vghdk_131 {
1500
1941
  width: 1px;
1501
1942
  height: 20px;
1502
1943
  margin: 0 8px;
@@ -1505,7 +1946,7 @@ table.tmr-pending-anchor {
1505
1946
  }
1506
1947
 
1507
1948
  /* ── Style / Size / More 下拉触发器 ── */
1508
- ._styleTrigger_6osph_138 {
1949
+ ._styleTrigger_vghdk_140 {
1509
1950
  display: inline-flex;
1510
1951
  align-items: center;
1511
1952
  justify-content: space-between;
@@ -1525,16 +1966,16 @@ table.tmr-pending-anchor {
1525
1966
  transition: background 0.15s;
1526
1967
  }
1527
1968
 
1528
- ._styleTrigger_6osph_138:hover:not(:disabled) {
1969
+ ._styleTrigger_vghdk_140:hover:not(:disabled) {
1529
1970
  background: #f3f3f3;
1530
1971
  }
1531
1972
 
1532
- ._styleTrigger_6osph_138:disabled {
1973
+ ._styleTrigger_vghdk_140:disabled {
1533
1974
  opacity: 0.3;
1534
1975
  cursor: not-allowed;
1535
1976
  }
1536
1977
 
1537
- ._styleTriggerLabel_6osph_167 {
1978
+ ._styleTriggerLabel_vghdk_169 {
1538
1979
  flex: 1;
1539
1980
  text-align: left;
1540
1981
  overflow: hidden;
@@ -1542,19 +1983,28 @@ table.tmr-pending-anchor {
1542
1983
  text-overflow: ellipsis;
1543
1984
  }
1544
1985
 
1545
- ._styleTriggerCaret_6osph_175 {
1986
+ ._styleTriggerCaret_vghdk_177 {
1546
1987
  color: var(--sb-muted);
1547
1988
  flex: none;
1548
1989
  }
1549
1990
 
1991
+ /* 图标型触发器(对齐 / 缩进 / 行高,与 .styleTrigger 合用):Style / FontSize 那套是给
1992
+ 「文字 + 箭头」的——固定 76px 宽 + space-between,套在图标上会把图标与箭头撑到两端。 */
1993
+ ._iconTrigger_vghdk_184 {
1994
+ width: auto;
1995
+ justify-content: center;
1996
+ gap: 2px;
1997
+ padding: 0 6px;
1998
+ }
1999
+
1550
2000
  /* 下拉项:图标 + 文字 */
1551
- ._styleItem_6osph_181 {
2001
+ ._styleItem_vghdk_192 {
1552
2002
  display: inline-flex;
1553
2003
  align-items: center;
1554
2004
  gap: 12px;
1555
2005
  }
1556
2006
 
1557
- ._styleIcon_6osph_187 {
2007
+ ._styleIcon_vghdk_198 {
1558
2008
  display: inline-flex;
1559
2009
  justify-content: center;
1560
2010
  align-items: center;
@@ -1564,19 +2014,19 @@ table.tmr-pending-anchor {
1564
2014
  }
1565
2015
 
1566
2016
  /* 上标 / 下标图标 */
1567
- ._scriptGlyph_6osph_197 {
2017
+ ._scriptGlyph_vghdk_208 {
1568
2018
  display: inline-block;
1569
2019
  text-align: center;
1570
2020
  font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1571
2021
  }
1572
2022
 
1573
- ._scriptGlyph_6osph_197 sup,
1574
- ._scriptGlyph_6osph_197 sub {
2023
+ ._scriptGlyph_vghdk_208 sup,
2024
+ ._scriptGlyph_vghdk_208 sub {
1575
2025
  font-size: 0.7em;
1576
2026
  }
1577
2027
 
1578
- /* ── Radix 下拉菜单面板(替代 antd .ant-dropdown-menu) ── */
1579
- ._menu_6osph_209 {
2028
+ /* ── Radix 下拉菜单面板 ── */
2029
+ ._menu_vghdk_220 {
1580
2030
  min-width: 200px;
1581
2031
  padding: 6px;
1582
2032
  background: #fff;
@@ -1587,7 +2037,7 @@ table.tmr-pending-anchor {
1587
2037
  z-index: 1000;
1588
2038
  }
1589
2039
 
1590
- ._menuItem_6osph_220 {
2040
+ ._menuItem_vghdk_231 {
1591
2041
  display: flex;
1592
2042
  align-items: center;
1593
2043
  width: 100%;
@@ -1604,30 +2054,30 @@ table.tmr-pending-anchor {
1604
2054
  gap: 8px;
1605
2055
  }
1606
2056
 
1607
- ._menuItem_6osph_220:hover:not(:disabled) {
2057
+ ._menuItem_vghdk_231:hover:not(:disabled) {
1608
2058
  background: #f3f3f3;
1609
2059
  }
1610
2060
 
1611
- ._menuItem_6osph_220:disabled {
2061
+ ._menuItem_vghdk_231:disabled {
1612
2062
  opacity: 0.35;
1613
2063
  cursor: not-allowed;
1614
2064
  }
1615
2065
 
1616
2066
  /* 选中态:品牌色高亮 */
1617
- ._menuItemSelected_6osph_247 {
2067
+ ._menuItemSelected_vghdk_258 {
1618
2068
  background: #fff3ec;
1619
2069
  color: var(--sb-accent);
1620
2070
  }
1621
2071
 
1622
- ._menuItemSelected_6osph_247 ._styleIcon_6osph_187 {
2072
+ ._menuItemSelected_vghdk_258 ._styleIcon_vghdk_198 {
1623
2073
  color: var(--sb-accent);
1624
2074
  }
1625
2075
 
1626
- ._menuItemSelected_6osph_247:hover:not(:disabled) {
2076
+ ._menuItemSelected_vghdk_258:hover:not(:disabled) {
1627
2077
  background: #ffe8da;
1628
2078
  }
1629
2079
 
1630
- ._tableInsertCaret_6osph_260 {
2080
+ ._tableInsertCaret_vghdk_271 {
1631
2081
  margin-left: auto;
1632
2082
  color: var(--sb-muted);
1633
2083
  transform: rotate(-90deg);
@@ -1635,7 +2085,7 @@ table.tmr-pending-anchor {
1635
2085
  }
1636
2086
 
1637
2087
  /* 插入表格:行列网格选择器 */
1638
- ._tableSizePicker_6osph_268 {
2088
+ ._tableSizePicker_vghdk_279 {
1639
2089
  padding: 10px;
1640
2090
  background: #fff;
1641
2091
  border-radius: 10px;
@@ -1645,12 +2095,12 @@ table.tmr-pending-anchor {
1645
2095
  z-index: 1001;
1646
2096
  }
1647
2097
 
1648
- ._tableSizeGrid_6osph_278 {
2098
+ ._tableSizeGrid_vghdk_289 {
1649
2099
  display: grid;
1650
2100
  gap: 3px;
1651
2101
  }
1652
2102
 
1653
- ._tableSizeCell_6osph_283 {
2103
+ ._tableSizeCell_vghdk_294 {
1654
2104
  width: 16px;
1655
2105
  height: 16px;
1656
2106
  padding: 0;
@@ -1660,12 +2110,12 @@ table.tmr-pending-anchor {
1660
2110
  cursor: pointer;
1661
2111
  }
1662
2112
 
1663
- ._tableSizeCellActive_6osph_293 {
2113
+ ._tableSizeCellActive_vghdk_304 {
1664
2114
  border-color: var(--tmr-accent, #ff6719);
1665
2115
  background: #fff3ec;
1666
2116
  }
1667
2117
 
1668
- ._tableSizeLabel_6osph_298 {
2118
+ ._tableSizeLabel_vghdk_309 {
1669
2119
  margin-top: 8px;
1670
2120
  text-align: center;
1671
2121
  font-size: 12px;
@@ -1674,28 +2124,28 @@ table.tmr-pending-anchor {
1674
2124
  }
1675
2125
 
1676
2126
  /* Radix Popover 内容(承载 ColorPalette),面板自带阴影,这里只兜底 z-index */
1677
- ._popoverContent_6osph_307 {
2127
+ ._popoverContent_vghdk_318 {
1678
2128
  z-index: 1000;
1679
2129
  }
1680
2130
 
1681
- ._mathLayer_6osph_311 {
2131
+ ._mathLayer_vghdk_322 {
1682
2132
  position: absolute;
1683
2133
  z-index: 6;
1684
2134
  }
1685
2135
 
1686
- ._mathStack_6osph_316 {
2136
+ ._mathStack_vghdk_327 {
1687
2137
  display: flex;
1688
2138
  flex-direction: column;
1689
2139
  align-items: flex-start;
1690
2140
  gap: 8px;
1691
2141
  }
1692
2142
 
1693
- ._mathStackBlock_6osph_323 {
2143
+ ._mathStackBlock_vghdk_334 {
1694
2144
  align-items: stretch;
1695
2145
  width: 100%;
1696
2146
  }
1697
2147
 
1698
- ._mathHint_6osph_328 {
2148
+ ._mathHint_vghdk_339 {
1699
2149
  display: inline-flex;
1700
2150
  align-items: center;
1701
2151
  gap: 6px;
@@ -1707,19 +2157,19 @@ table.tmr-pending-anchor {
1707
2157
  line-height: 1.4;
1708
2158
  }
1709
2159
 
1710
- ._mathHintBlock_6osph_340 {
2160
+ ._mathHintBlock_vghdk_351 {
1711
2161
  width: 100%;
1712
2162
  padding: 10px 14px;
1713
2163
  border-radius: 8px;
1714
2164
  }
1715
2165
 
1716
- ._mathHintIcon_6osph_346 {
2166
+ ._mathHintIcon_vghdk_357 {
1717
2167
  font-family: ui-serif, Georgia, 'Times New Roman', serif;
1718
2168
  font-size: 12px;
1719
2169
  opacity: 0.85;
1720
2170
  }
1721
2171
 
1722
- ._mathPreviewInline_6osph_352 {
2172
+ ._mathPreviewInline_vghdk_363 {
1723
2173
  display: inline-flex;
1724
2174
  max-width: min(440px, calc(100vw - 24px));
1725
2175
  padding: 4px 10px;
@@ -1729,7 +2179,7 @@ table.tmr-pending-anchor {
1729
2179
  color: var(--tmr-text, #363737);
1730
2180
  }
1731
2181
 
1732
- ._mathPreviewBlock_6osph_362 {
2182
+ ._mathPreviewBlock_vghdk_373 {
1733
2183
  width: 100%;
1734
2184
  min-height: 48px;
1735
2185
  padding: 14px 16px;
@@ -1740,11 +2190,11 @@ table.tmr-pending-anchor {
1740
2190
  color: var(--tmr-text, #363737);
1741
2191
  }
1742
2192
 
1743
- ._mathPreviewBlock_6osph_362 .katex-display {
2193
+ ._mathPreviewBlock_vghdk_373 .katex-display {
1744
2194
  margin: 0;
1745
2195
  }
1746
2196
 
1747
- ._mathField_6osph_377 {
2197
+ ._mathField_vghdk_388 {
1748
2198
  display: flex;
1749
2199
  align-items: center;
1750
2200
  gap: 8px;
@@ -1756,14 +2206,14 @@ table.tmr-pending-anchor {
1756
2206
  box-shadow: 0 4px 16px rgb(0 0 0 / 12%);
1757
2207
  }
1758
2208
 
1759
- ._mathFieldBlock_6osph_389 {
2209
+ ._mathFieldBlock_vghdk_400 {
1760
2210
  align-items: flex-start;
1761
2211
  width: 100%;
1762
2212
  border-radius: 12px;
1763
2213
  padding: 10px 10px 10px 14px;
1764
2214
  }
1765
2215
 
1766
- ._mathInput_6osph_396 {
2216
+ ._mathInput_vghdk_407 {
1767
2217
  flex: 1;
1768
2218
  min-width: 0;
1769
2219
  margin: 0;
@@ -1777,11 +2227,11 @@ table.tmr-pending-anchor {
1777
2227
  resize: none;
1778
2228
  }
1779
2229
 
1780
- ._mathInput_6osph_396:focus {
2230
+ ._mathInput_vghdk_407:focus {
1781
2231
  outline: none;
1782
2232
  }
1783
2233
 
1784
- ._mathDone_6osph_414 {
2234
+ ._mathDone_vghdk_425 {
1785
2235
  display: inline-flex;
1786
2236
  align-items: center;
1787
2237
  gap: 4px;
@@ -1797,16 +2247,16 @@ table.tmr-pending-anchor {
1797
2247
  cursor: pointer;
1798
2248
  }
1799
2249
 
1800
- ._mathDone_6osph_414:hover:not(:disabled) {
2250
+ ._mathDone_vghdk_425:hover:not(:disabled) {
1801
2251
  filter: brightness(0.95);
1802
2252
  }
1803
2253
 
1804
- ._mathDone_6osph_414:disabled {
2254
+ ._mathDone_vghdk_425:disabled {
1805
2255
  opacity: 0.35;
1806
2256
  cursor: not-allowed;
1807
2257
  }
1808
2258
 
1809
- ._mathDoneKbd_6osph_439 {
2259
+ ._mathDoneKbd_vghdk_450 {
1810
2260
  font-size: 11px;
1811
2261
  font-weight: 500;
1812
2262
  opacity: 0.85;
@@ -1898,6 +2348,85 @@ table.tmr-pending-anchor {
1898
2348
  display: flex;
1899
2349
  gap: 6px;
1900
2350
  }
2351
+ /* 图片对齐工具条(悬停图片时浮出;与表格悬停手柄同一套交互:document 级 mousemove
2352
+ 追踪 + fixed 定位 + portal 到 body)。配色走 --tmr-* 变量,宿主可覆盖。
2353
+
2354
+ 给宿主的稳定选择器(内部 class 是 CSS Modules 哈希过的):根节点 [data-image-align]、
2355
+ 三个按钮 [data-image-align-action="left|center|right"](当前方向 aria-pressed="true")。 */
2356
+
2357
+ ._bar_mp2o5_7 {
2358
+ position: fixed;
2359
+ /* 表格悬停手柄是 8;图片可能出现在表格单元格里,压它一层 */
2360
+ z-index: 9;
2361
+ display: inline-flex;
2362
+ align-items: center;
2363
+ /* 描述输入行换到第二行(见 .captionRow) */
2364
+ flex-wrap: wrap;
2365
+ gap: 2px;
2366
+ padding: 3px;
2367
+ box-sizing: border-box;
2368
+ border: 1px solid var(--tmr-toolbar-border, #ececec);
2369
+ border-radius: 8px;
2370
+ background: var(--tmr-popover-bg, #fff);
2371
+ box-shadow: 0 4px 16px rgb(0 0 0 / 12%);
2372
+ }
2373
+
2374
+ ._divider_mp2o5_24 {
2375
+ width: 1px;
2376
+ height: 16px;
2377
+ margin: 0 2px;
2378
+ flex: none;
2379
+ background: var(--tmr-toolbar-border, #ececec);
2380
+ }
2381
+
2382
+ /* 描述输入行:占满工具条第二行;min-width 撑开工具条本身(否则输入框只有几个字宽) */
2383
+ ._captionRow_mp2o5_13 {
2384
+ flex-basis: 100%;
2385
+ min-width: 220px;
2386
+ display: flex;
2387
+ padding-top: 3px;
2388
+ }
2389
+
2390
+ ._captionInput_mp2o5_40 {
2391
+ width: 100%;
2392
+ height: 26px;
2393
+ padding: 0 8px;
2394
+ box-sizing: border-box;
2395
+ border: 1px solid var(--tmr-toolbar-border, #ececec);
2396
+ border-radius: 6px;
2397
+ background: #fff;
2398
+ color: var(--tmr-text, #363737);
2399
+ font: inherit;
2400
+ font-size: 13px;
2401
+ outline: none;
2402
+ }
2403
+
2404
+ ._captionInput_mp2o5_40:focus {
2405
+ border-color: var(--tmr-accent, #ff6719);
2406
+ }
2407
+
2408
+ ._btn_mp2o5_58 {
2409
+ display: inline-flex;
2410
+ align-items: center;
2411
+ justify-content: center;
2412
+ width: 26px;
2413
+ height: 26px;
2414
+ padding: 0;
2415
+ border: none;
2416
+ border-radius: 6px;
2417
+ background: none;
2418
+ color: var(--tmr-text, #363737);
2419
+ cursor: pointer;
2420
+ }
2421
+
2422
+ ._btn_mp2o5_58:hover {
2423
+ background: rgb(0 0 0 / 5%);
2424
+ }
2425
+
2426
+ ._btnActive_mp2o5_76 {
2427
+ color: var(--tmr-accent, #ff6719);
2428
+ background: rgb(0 0 0 / 5%);
2429
+ }
1901
2430
  /* 链接编辑浮层。配色走 --tmr-* 变量(与工具栏 / 查找条同一套),宿主可覆盖。
1902
2431
 
1903
2432
  给宿主的稳定选择器(内部 class 是 CSS Modules 哈希过的):根节点 [data-link-popover]、
@@ -2007,7 +2536,7 @@ table.tmr-pending-anchor {
2007
2536
  /* ── 手柄 ──────────────────────────────────────────────────────────────
2008
2537
  固定定位(视口坐标):手柄要贴在单元格的行/列边缘,而它渲染在 body 上的 portal 里,
2009
2538
  没法用绝对定位跟着表格走。滚动 / 缩放时由组件收起,等下一次移动重新贴。 */
2010
- ._handle_cco3n_9 {
2539
+ ._handle_qjreh_9 {
2011
2540
  position: fixed;
2012
2541
  z-index: 8;
2013
2542
  display: inline-flex;
@@ -2028,7 +2557,7 @@ table.tmr-pending-anchor {
2028
2557
  /* 命中区补桥(行):胶囊本体离表格留了 8px 视觉留白,那 8px 加一块看不见的命中区,
2029
2558
  让「单元格 → 手柄」这段路上没有既非单元格也非手柄的空隙——否则指针走到一半手柄就收了。
2030
2559
  伪元素也算宿主按钮的一部分,点它命中的是按钮本身。 */
2031
- ._handleRow_cco3n_30::after {
2560
+ ._handleRow_qjreh_30::after {
2032
2561
  content: '';
2033
2562
  position: absolute;
2034
2563
  top: 0;
@@ -2038,7 +2567,7 @@ table.tmr-pending-anchor {
2038
2567
  }
2039
2568
 
2040
2569
  /* 命中区补桥(列):同上,补在胶囊下方到表格上缘的 6px。 */
2041
- ._handleCol_cco3n_40::after {
2570
+ ._handleCol_qjreh_40::after {
2042
2571
  content: '';
2043
2572
  position: absolute;
2044
2573
  left: 0;
@@ -2048,27 +2577,28 @@ table.tmr-pending-anchor {
2048
2577
  }
2049
2578
 
2050
2579
  /* 行手柄:贴在行左缘的竖胶囊。长度(height)由组件按行高给,这里只定粗细。 */
2051
- ._handleRow_cco3n_30 {
2580
+ ._handleRow_qjreh_30 {
2052
2581
  width: 18px;
2053
2582
  border-radius: 999px;
2054
2583
  font-size: 14px;
2055
2584
  }
2056
2585
 
2057
2586
  /* 列手柄:贴在表格上方的横胶囊。长度(width)由组件按列宽给,这里只定高度。 */
2058
- ._handleCol_cco3n_40 {
2587
+ ._handleCol_qjreh_40 {
2059
2588
  height: 16px;
2060
2589
  border-radius: 999px;
2061
2590
  font-size: 13px;
2062
2591
  }
2063
2592
 
2064
- ._handle_cco3n_9:hover {
2593
+ ._handle_qjreh_9:hover {
2065
2594
  background: var(--tmr-accent, #ff6719);
2066
2595
  border-color: transparent;
2067
2596
  color: #fff;
2068
2597
  }
2069
2598
 
2070
- /* 末尾追加行列的 `+` 手柄:贴在表格右缘 / 下缘,长度跟着表格尺寸走(见组件里的 style)。 */
2071
- ._extend_cco3n_70 {
2599
+ /* 末尾追加行列的 `+` 手柄:贴在表格右缘 / 下缘,长度跟着表格尺寸走(见组件里的 style)。
2600
+ 圆角与行 / 列手柄同款全圆胶囊(厚度 16px,两端即 8px 半圆)。 */
2601
+ ._extend_qjreh_71 {
2072
2602
  position: fixed;
2073
2603
  z-index: 8;
2074
2604
  display: inline-flex;
@@ -2077,6 +2607,7 @@ table.tmr-pending-anchor {
2077
2607
  padding: 0;
2078
2608
  box-sizing: border-box;
2079
2609
  border: 1px solid var(--tmr-table-handle-border, #e8e8ea);
2610
+ border-radius: 999px;
2080
2611
  background: var(--tmr-table-handle-bg, #f1f1f3);
2081
2612
  color: var(--tmr-table-handle-fg, #7a7a7a);
2082
2613
  font-family: inherit;
@@ -2087,14 +2618,14 @@ table.tmr-pending-anchor {
2087
2618
  transition: background 0.12s, color 0.12s, border-color 0.12s;
2088
2619
  }
2089
2620
 
2090
- ._extend_cco3n_70:hover {
2621
+ ._extend_qjreh_71:hover {
2091
2622
  background: var(--tmr-accent, #ff6719);
2092
2623
  border-color: transparent;
2093
2624
  color: #fff;
2094
2625
  }
2095
2626
 
2096
2627
  /* 命中区补桥:把命中区接到表格边缘(与行 / 列手柄同理,免得指针走过去时掉空档) */
2097
- ._extend_cco3n_70[data-table-extend='col']::after {
2628
+ ._extend_qjreh_71[data-table-extend='col']::after {
2098
2629
  content: '';
2099
2630
  position: absolute;
2100
2631
  top: 0;
@@ -2103,7 +2634,7 @@ table.tmr-pending-anchor {
2103
2634
  width: 6px;
2104
2635
  }
2105
2636
 
2106
- ._extend_cco3n_70[data-table-extend='row']::after {
2637
+ ._extend_qjreh_71[data-table-extend='row']::after {
2107
2638
  content: '';
2108
2639
  position: absolute;
2109
2640
  left: 0;
@@ -2113,7 +2644,7 @@ table.tmr-pending-anchor {
2113
2644
  }
2114
2645
 
2115
2646
  /* ── 操作菜单(portal 到 body,拿不到 .toolbar 变量,故写死配色) ── */
2116
- ._tableBubble_cco3n_115 {
2647
+ ._tableBubble_qjreh_117 {
2117
2648
  position: fixed;
2118
2649
  z-index: 12;
2119
2650
  display: flex;
@@ -2126,7 +2657,7 @@ table.tmr-pending-anchor {
2126
2657
  box-shadow: 0 6px 24px rgb(0 0 0 / 14%);
2127
2658
  }
2128
2659
 
2129
- ._tableMenuItem_cco3n_128 {
2660
+ ._tableMenuItem_qjreh_130 {
2130
2661
  display: flex;
2131
2662
  align-items: center;
2132
2663
  gap: 10px;
@@ -2143,16 +2674,16 @@ table.tmr-pending-anchor {
2143
2674
  user-select: none;
2144
2675
  }
2145
2676
 
2146
- ._tableMenuItem_cco3n_128:hover:not(:disabled) {
2677
+ ._tableMenuItem_qjreh_130:hover:not(:disabled) {
2147
2678
  background: #f3f3f3;
2148
2679
  }
2149
2680
 
2150
- ._tableMenuItem_cco3n_128:disabled {
2681
+ ._tableMenuItem_qjreh_130:disabled {
2151
2682
  opacity: 0.35;
2152
2683
  cursor: not-allowed;
2153
2684
  }
2154
2685
 
2155
- ._tableMenuItemIcon_cco3n_154 {
2686
+ ._tableMenuItemIcon_qjreh_156 {
2156
2687
  display: inline-flex;
2157
2688
  align-items: center;
2158
2689
  justify-content: center;
@@ -2162,12 +2693,12 @@ table.tmr-pending-anchor {
2162
2693
  color: #6b6b6b;
2163
2694
  }
2164
2695
 
2165
- ._tableMenuItemLabel_cco3n_164 {
2696
+ ._tableMenuItemLabel_qjreh_166 {
2166
2697
  flex: 1;
2167
2698
  min-width: 0;
2168
2699
  }
2169
2700
 
2170
- ._tableMenuDivider_cco3n_169 {
2701
+ ._tableMenuDivider_qjreh_171 {
2171
2702
  height: 1px;
2172
2703
  margin: 4px 8px;
2173
2704
  background: #ececec;