tiptap-markdown-react 0.17.1 → 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 (51) hide show
  1. package/README.md +171 -17
  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 +13 -2
  9. package/dist/components/EditorToolbar.dom.test.d.ts +1 -0
  10. package/dist/components/FindReplaceBar.d.ts +0 -7
  11. package/dist/components/ImageAlignTools.d.ts +19 -0
  12. package/dist/components/ImageUploadView.d.ts +10 -0
  13. package/dist/components/LinkPopover.d.ts +28 -0
  14. package/dist/components/LinkPopover.dom.test.d.ts +1 -0
  15. package/dist/components/MarkdownWysiwygEditor.d.ts +59 -1
  16. package/dist/components/TableHandles.d.ts +19 -0
  17. package/dist/components/TableHandles.dom.test.d.ts +1 -0
  18. package/dist/components/findEntry.dom.test.d.ts +1 -0
  19. package/dist/components/imageUpload.dom.test.d.ts +1 -0
  20. package/dist/extensions.d.ts +12 -0
  21. package/dist/{extractToc-BaR6LP1f.js → extractToc-CGrBMGvM.js} +433 -9
  22. package/dist/extractToc-CGrBMGvM.js.map +1 -0
  23. package/dist/findReplace.d.ts +18 -4
  24. package/dist/icons/index.d.ts +15 -0
  25. package/dist/imageAlign.d.ts +29 -0
  26. package/dist/imageAlign.dom.test.d.ts +1 -0
  27. package/dist/imageCaption.d.ts +12 -0
  28. package/dist/imageMarkdown.d.ts +86 -0
  29. package/dist/imageResize.dom.test.d.ts +1 -0
  30. package/dist/imageUpload.d.ts +63 -0
  31. package/dist/index.d.ts +11 -2
  32. package/dist/index.js +2354 -537
  33. package/dist/index.js.map +1 -1
  34. package/dist/labels.d.ts +93 -1
  35. package/dist/linkEditing.d.ts +45 -0
  36. package/dist/linkEditing.test.d.ts +1 -0
  37. package/dist/paragraphMarkdown.d.ts +19 -0
  38. package/dist/paragraphStyles.d.ts +38 -0
  39. package/dist/paragraphStyles.dom.test.d.ts +1 -0
  40. package/dist/reader.js +2 -2
  41. package/dist/resetImageSize.d.ts +12 -0
  42. package/dist/{scrollToTocHeading-BTQWajGD.js → scrollToTocHeading-B2QmL4wi.js} +2 -2
  43. package/dist/{scrollToTocHeading-BTQWajGD.js.map → scrollToTocHeading-B2QmL4wi.js.map} +1 -1
  44. package/dist/server.d.ts +1 -1
  45. package/dist/server.js +4 -4
  46. package/dist/style-inline.css +932 -180
  47. package/dist/style.css +932 -180
  48. package/dist/tableSelection.d.ts +25 -5
  49. package/package.json +5 -2
  50. package/dist/ReportContent-MgbebxPV.js.map +0 -1
  51. 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_1f7fb_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,19 +1821,27 @@ table.tmr-pending-anchor {
1382
1821
  z-index: 8;
1383
1822
  }
1384
1823
 
1385
- ._inner_1f7fb_15 {
1824
+ ._inner_vghdk_15 {
1386
1825
  display: flex;
1387
1826
  align-items: center;
1827
+ /* 溢出时 `safe` 让居中回退为起点对齐——否则两端内容会被裁掉且滚不到头 */
1388
1828
  justify-content: safe center;
1829
+ /* 控件排满一行后横向滚动(2026-10-10 按用户要求从「换行」改为滚动):
1830
+ 单行、不换行;macOS 的 overlay 滚动条平时隐藏,触控板 / Shift+滚轮 / 细滚动条可横向滚。 */
1389
1831
  flex-wrap: nowrap;
1390
- gap: 2px;
1832
+ overflow-x: auto;
1833
+ scrollbar-width: thin;
1391
1834
  max-width: 1100px;
1392
1835
  margin: 0 auto;
1393
1836
  padding: 8px 16px;
1394
- overflow-x: auto;
1395
1837
  }
1396
1838
 
1397
- ._btn_1f7fb_27 {
1839
+ /* 单行 + 溢出滚动时不允许把控件压扁(各控件本来就该保持自身宽度) */
1840
+ ._inner_vghdk_15 > * {
1841
+ flex-shrink: 0;
1842
+ }
1843
+
1844
+ ._btn_vghdk_35 {
1398
1845
  display: inline-flex;
1399
1846
  align-items: center;
1400
1847
  justify-content: center;
@@ -1412,96 +1859,36 @@ table.tmr-pending-anchor {
1412
1859
  transition: background 0.15s, color 0.15s;
1413
1860
  }
1414
1861
 
1415
- ._btn_1f7fb_27:hover:not(:disabled) {
1862
+ ._btn_vghdk_35:hover:not(:disabled) {
1416
1863
  background: #f3f3f3;
1417
1864
  color: var(--sb-text);
1418
1865
  }
1419
1866
 
1420
- ._btnActive_1f7fb_50 {
1867
+ ._btnActive_vghdk_58 {
1421
1868
  color: var(--sb-accent);
1422
1869
  background: #fff3ec;
1423
1870
  }
1424
1871
 
1425
- ._btnActive_1f7fb_50:hover {
1872
+ ._btnActive_vghdk_58:hover {
1426
1873
  color: var(--sb-accent);
1427
1874
  background: #ffe8da;
1428
1875
  }
1429
1876
 
1430
- ._btn_1f7fb_27:disabled {
1877
+ ._btn_vghdk_35:disabled {
1431
1878
  opacity: 0.3;
1432
1879
  cursor: not-allowed;
1433
1880
  }
1434
1881
 
1435
- /* 表内右键菜单(portal 到 body,拿不到 .toolbar 变量,故写死配色) */
1436
- ._tableBubble_1f7fb_66 {
1437
- display: flex;
1438
- flex-direction: column;
1439
- min-width: 220px;
1440
- padding: 6px;
1441
- background: #fff;
1442
- border: 1px solid #ececec;
1443
- border-radius: 10px;
1444
- box-shadow: 0 6px 24px rgb(0 0 0 / 14%);
1445
- }
1446
-
1447
- ._tableMenuItem_1f7fb_77 {
1448
- display: flex;
1449
- align-items: center;
1450
- gap: 10px;
1451
- width: 100%;
1452
- padding: 7px 10px;
1453
- border: none;
1454
- border-radius: 6px;
1455
- background: transparent;
1456
- color: #363737;
1457
- font-size: 14px;
1458
- line-height: 1.3;
1459
- text-align: left;
1460
- cursor: pointer;
1461
- user-select: none;
1462
- }
1463
-
1464
- ._tableMenuItem_1f7fb_77:hover:not(:disabled) {
1465
- background: #f3f3f3;
1466
- }
1467
-
1468
- ._tableMenuItem_1f7fb_77:disabled {
1469
- opacity: 0.35;
1470
- cursor: not-allowed;
1471
- }
1472
-
1473
- ._tableMenuItemIcon_1f7fb_103 {
1474
- display: inline-flex;
1475
- align-items: center;
1476
- justify-content: center;
1477
- flex: none;
1478
- width: 20px;
1479
- height: 20px;
1480
- color: #6b6b6b;
1481
- }
1482
-
1483
- ._tableMenuItemLabel_1f7fb_113 {
1484
- flex: 1;
1485
- min-width: 0;
1486
- }
1487
-
1488
- ._tableMenuDivider_1f7fb_118 {
1489
- height: 1px;
1490
- margin: 4px 8px;
1491
- background: #ececec;
1492
- flex-shrink: 0;
1493
- }
1494
-
1495
- /* 文字型图标(引用等) */
1496
- ._txtIcon_1f7fb_126 {
1497
- font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1498
- font-size: 16px;
1499
- font-weight: 600;
1500
- letter-spacing: -0.02em;
1882
+ /* 文字型图标(引用等) */
1883
+ ._txtIcon_vghdk_74 {
1884
+ font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1885
+ font-size: 16px;
1886
+ font-weight: 600;
1887
+ letter-spacing: -0.02em;
1501
1888
  }
1502
1889
 
1503
1890
  /* 文字颜色 / 高亮图标:字母 + 底部当前色条 */
1504
- ._colorIcon_1f7fb_134 {
1891
+ ._colorIcon_vghdk_82 {
1505
1892
  display: inline-flex;
1506
1893
  flex-direction: column;
1507
1894
  align-items: center;
@@ -1509,20 +1896,20 @@ table.tmr-pending-anchor {
1509
1896
  line-height: 1;
1510
1897
  }
1511
1898
 
1512
- ._colorIconGlyph_1f7fb_142 {
1899
+ ._colorIconGlyph_vghdk_90 {
1513
1900
  font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1514
1901
  font-size: 15px;
1515
1902
  font-weight: 600;
1516
1903
  }
1517
1904
 
1518
- ._colorIconBar_1f7fb_148 {
1905
+ ._colorIconBar_vghdk_96 {
1519
1906
  width: 16px;
1520
1907
  height: 3px;
1521
1908
  border-radius: 1.5px;
1522
1909
  }
1523
1910
 
1524
1911
  /* A▾ 上标/下标下拉触发器 */
1525
- ._scriptTrigger_1f7fb_155 {
1912
+ ._scriptTrigger_vghdk_103 {
1526
1913
  display: inline-flex;
1527
1914
  align-items: center;
1528
1915
  gap: 3px;
@@ -1537,12 +1924,12 @@ table.tmr-pending-anchor {
1537
1924
  transition: background 0.15s, color 0.15s;
1538
1925
  }
1539
1926
 
1540
- ._scriptTrigger_1f7fb_155:hover {
1927
+ ._scriptTrigger_vghdk_103:hover {
1541
1928
  background: #f3f3f3;
1542
1929
  color: var(--sb-text);
1543
1930
  }
1544
1931
 
1545
- ._scriptTriggerGlyph_1f7fb_175 {
1932
+ ._scriptTriggerGlyph_vghdk_123 {
1546
1933
  font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1547
1934
  font-size: 16px;
1548
1935
  font-weight: 600;
@@ -1550,7 +1937,7 @@ table.tmr-pending-anchor {
1550
1937
  text-underline-offset: 2px;
1551
1938
  }
1552
1939
 
1553
- ._divider_1f7fb_183 {
1940
+ ._divider_vghdk_131 {
1554
1941
  width: 1px;
1555
1942
  height: 20px;
1556
1943
  margin: 0 8px;
@@ -1559,7 +1946,7 @@ table.tmr-pending-anchor {
1559
1946
  }
1560
1947
 
1561
1948
  /* ── Style / Size / More 下拉触发器 ── */
1562
- ._styleTrigger_1f7fb_192 {
1949
+ ._styleTrigger_vghdk_140 {
1563
1950
  display: inline-flex;
1564
1951
  align-items: center;
1565
1952
  justify-content: space-between;
@@ -1579,16 +1966,16 @@ table.tmr-pending-anchor {
1579
1966
  transition: background 0.15s;
1580
1967
  }
1581
1968
 
1582
- ._styleTrigger_1f7fb_192:hover:not(:disabled) {
1969
+ ._styleTrigger_vghdk_140:hover:not(:disabled) {
1583
1970
  background: #f3f3f3;
1584
1971
  }
1585
1972
 
1586
- ._styleTrigger_1f7fb_192:disabled {
1973
+ ._styleTrigger_vghdk_140:disabled {
1587
1974
  opacity: 0.3;
1588
1975
  cursor: not-allowed;
1589
1976
  }
1590
1977
 
1591
- ._styleTriggerLabel_1f7fb_221 {
1978
+ ._styleTriggerLabel_vghdk_169 {
1592
1979
  flex: 1;
1593
1980
  text-align: left;
1594
1981
  overflow: hidden;
@@ -1596,19 +1983,28 @@ table.tmr-pending-anchor {
1596
1983
  text-overflow: ellipsis;
1597
1984
  }
1598
1985
 
1599
- ._styleTriggerCaret_1f7fb_229 {
1986
+ ._styleTriggerCaret_vghdk_177 {
1600
1987
  color: var(--sb-muted);
1601
1988
  flex: none;
1602
1989
  }
1603
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
+
1604
2000
  /* 下拉项:图标 + 文字 */
1605
- ._styleItem_1f7fb_235 {
2001
+ ._styleItem_vghdk_192 {
1606
2002
  display: inline-flex;
1607
2003
  align-items: center;
1608
2004
  gap: 12px;
1609
2005
  }
1610
2006
 
1611
- ._styleIcon_1f7fb_241 {
2007
+ ._styleIcon_vghdk_198 {
1612
2008
  display: inline-flex;
1613
2009
  justify-content: center;
1614
2010
  align-items: center;
@@ -1618,19 +2014,19 @@ table.tmr-pending-anchor {
1618
2014
  }
1619
2015
 
1620
2016
  /* 上标 / 下标图标 */
1621
- ._scriptGlyph_1f7fb_251 {
2017
+ ._scriptGlyph_vghdk_208 {
1622
2018
  display: inline-block;
1623
2019
  text-align: center;
1624
2020
  font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1625
2021
  }
1626
2022
 
1627
- ._scriptGlyph_1f7fb_251 sup,
1628
- ._scriptGlyph_1f7fb_251 sub {
2023
+ ._scriptGlyph_vghdk_208 sup,
2024
+ ._scriptGlyph_vghdk_208 sub {
1629
2025
  font-size: 0.7em;
1630
2026
  }
1631
2027
 
1632
- /* ── Radix 下拉菜单面板(替代 antd .ant-dropdown-menu) ── */
1633
- ._menu_1f7fb_263 {
2028
+ /* ── Radix 下拉菜单面板 ── */
2029
+ ._menu_vghdk_220 {
1634
2030
  min-width: 200px;
1635
2031
  padding: 6px;
1636
2032
  background: #fff;
@@ -1641,7 +2037,7 @@ table.tmr-pending-anchor {
1641
2037
  z-index: 1000;
1642
2038
  }
1643
2039
 
1644
- ._menuItem_1f7fb_274 {
2040
+ ._menuItem_vghdk_231 {
1645
2041
  display: flex;
1646
2042
  align-items: center;
1647
2043
  width: 100%;
@@ -1658,30 +2054,30 @@ table.tmr-pending-anchor {
1658
2054
  gap: 8px;
1659
2055
  }
1660
2056
 
1661
- ._menuItem_1f7fb_274:hover:not(:disabled) {
2057
+ ._menuItem_vghdk_231:hover:not(:disabled) {
1662
2058
  background: #f3f3f3;
1663
2059
  }
1664
2060
 
1665
- ._menuItem_1f7fb_274:disabled {
2061
+ ._menuItem_vghdk_231:disabled {
1666
2062
  opacity: 0.35;
1667
2063
  cursor: not-allowed;
1668
2064
  }
1669
2065
 
1670
2066
  /* 选中态:品牌色高亮 */
1671
- ._menuItemSelected_1f7fb_301 {
2067
+ ._menuItemSelected_vghdk_258 {
1672
2068
  background: #fff3ec;
1673
2069
  color: var(--sb-accent);
1674
2070
  }
1675
2071
 
1676
- ._menuItemSelected_1f7fb_301 ._styleIcon_1f7fb_241 {
2072
+ ._menuItemSelected_vghdk_258 ._styleIcon_vghdk_198 {
1677
2073
  color: var(--sb-accent);
1678
2074
  }
1679
2075
 
1680
- ._menuItemSelected_1f7fb_301:hover:not(:disabled) {
2076
+ ._menuItemSelected_vghdk_258:hover:not(:disabled) {
1681
2077
  background: #ffe8da;
1682
2078
  }
1683
2079
 
1684
- ._tableInsertCaret_1f7fb_314 {
2080
+ ._tableInsertCaret_vghdk_271 {
1685
2081
  margin-left: auto;
1686
2082
  color: var(--sb-muted);
1687
2083
  transform: rotate(-90deg);
@@ -1689,7 +2085,7 @@ table.tmr-pending-anchor {
1689
2085
  }
1690
2086
 
1691
2087
  /* 插入表格:行列网格选择器 */
1692
- ._tableSizePicker_1f7fb_322 {
2088
+ ._tableSizePicker_vghdk_279 {
1693
2089
  padding: 10px;
1694
2090
  background: #fff;
1695
2091
  border-radius: 10px;
@@ -1699,12 +2095,12 @@ table.tmr-pending-anchor {
1699
2095
  z-index: 1001;
1700
2096
  }
1701
2097
 
1702
- ._tableSizeGrid_1f7fb_332 {
2098
+ ._tableSizeGrid_vghdk_289 {
1703
2099
  display: grid;
1704
2100
  gap: 3px;
1705
2101
  }
1706
2102
 
1707
- ._tableSizeCell_1f7fb_337 {
2103
+ ._tableSizeCell_vghdk_294 {
1708
2104
  width: 16px;
1709
2105
  height: 16px;
1710
2106
  padding: 0;
@@ -1714,12 +2110,12 @@ table.tmr-pending-anchor {
1714
2110
  cursor: pointer;
1715
2111
  }
1716
2112
 
1717
- ._tableSizeCellActive_1f7fb_347 {
2113
+ ._tableSizeCellActive_vghdk_304 {
1718
2114
  border-color: var(--tmr-accent, #ff6719);
1719
2115
  background: #fff3ec;
1720
2116
  }
1721
2117
 
1722
- ._tableSizeLabel_1f7fb_352 {
2118
+ ._tableSizeLabel_vghdk_309 {
1723
2119
  margin-top: 8px;
1724
2120
  text-align: center;
1725
2121
  font-size: 12px;
@@ -1728,28 +2124,28 @@ table.tmr-pending-anchor {
1728
2124
  }
1729
2125
 
1730
2126
  /* Radix Popover 内容(承载 ColorPalette),面板自带阴影,这里只兜底 z-index */
1731
- ._popoverContent_1f7fb_361 {
2127
+ ._popoverContent_vghdk_318 {
1732
2128
  z-index: 1000;
1733
2129
  }
1734
2130
 
1735
- ._mathLayer_1f7fb_365 {
2131
+ ._mathLayer_vghdk_322 {
1736
2132
  position: absolute;
1737
2133
  z-index: 6;
1738
2134
  }
1739
2135
 
1740
- ._mathStack_1f7fb_370 {
2136
+ ._mathStack_vghdk_327 {
1741
2137
  display: flex;
1742
2138
  flex-direction: column;
1743
2139
  align-items: flex-start;
1744
2140
  gap: 8px;
1745
2141
  }
1746
2142
 
1747
- ._mathStackBlock_1f7fb_377 {
2143
+ ._mathStackBlock_vghdk_334 {
1748
2144
  align-items: stretch;
1749
2145
  width: 100%;
1750
2146
  }
1751
2147
 
1752
- ._mathHint_1f7fb_382 {
2148
+ ._mathHint_vghdk_339 {
1753
2149
  display: inline-flex;
1754
2150
  align-items: center;
1755
2151
  gap: 6px;
@@ -1761,19 +2157,19 @@ table.tmr-pending-anchor {
1761
2157
  line-height: 1.4;
1762
2158
  }
1763
2159
 
1764
- ._mathHintBlock_1f7fb_394 {
2160
+ ._mathHintBlock_vghdk_351 {
1765
2161
  width: 100%;
1766
2162
  padding: 10px 14px;
1767
2163
  border-radius: 8px;
1768
2164
  }
1769
2165
 
1770
- ._mathHintIcon_1f7fb_400 {
2166
+ ._mathHintIcon_vghdk_357 {
1771
2167
  font-family: ui-serif, Georgia, 'Times New Roman', serif;
1772
2168
  font-size: 12px;
1773
2169
  opacity: 0.85;
1774
2170
  }
1775
2171
 
1776
- ._mathPreviewInline_1f7fb_406 {
2172
+ ._mathPreviewInline_vghdk_363 {
1777
2173
  display: inline-flex;
1778
2174
  max-width: min(440px, calc(100vw - 24px));
1779
2175
  padding: 4px 10px;
@@ -1783,7 +2179,7 @@ table.tmr-pending-anchor {
1783
2179
  color: var(--tmr-text, #363737);
1784
2180
  }
1785
2181
 
1786
- ._mathPreviewBlock_1f7fb_416 {
2182
+ ._mathPreviewBlock_vghdk_373 {
1787
2183
  width: 100%;
1788
2184
  min-height: 48px;
1789
2185
  padding: 14px 16px;
@@ -1794,11 +2190,11 @@ table.tmr-pending-anchor {
1794
2190
  color: var(--tmr-text, #363737);
1795
2191
  }
1796
2192
 
1797
- ._mathPreviewBlock_1f7fb_416 .katex-display {
2193
+ ._mathPreviewBlock_vghdk_373 .katex-display {
1798
2194
  margin: 0;
1799
2195
  }
1800
2196
 
1801
- ._mathField_1f7fb_431 {
2197
+ ._mathField_vghdk_388 {
1802
2198
  display: flex;
1803
2199
  align-items: center;
1804
2200
  gap: 8px;
@@ -1810,14 +2206,14 @@ table.tmr-pending-anchor {
1810
2206
  box-shadow: 0 4px 16px rgb(0 0 0 / 12%);
1811
2207
  }
1812
2208
 
1813
- ._mathFieldBlock_1f7fb_443 {
2209
+ ._mathFieldBlock_vghdk_400 {
1814
2210
  align-items: flex-start;
1815
2211
  width: 100%;
1816
2212
  border-radius: 12px;
1817
2213
  padding: 10px 10px 10px 14px;
1818
2214
  }
1819
2215
 
1820
- ._mathInput_1f7fb_450 {
2216
+ ._mathInput_vghdk_407 {
1821
2217
  flex: 1;
1822
2218
  min-width: 0;
1823
2219
  margin: 0;
@@ -1831,11 +2227,11 @@ table.tmr-pending-anchor {
1831
2227
  resize: none;
1832
2228
  }
1833
2229
 
1834
- ._mathInput_1f7fb_450:focus {
2230
+ ._mathInput_vghdk_407:focus {
1835
2231
  outline: none;
1836
2232
  }
1837
2233
 
1838
- ._mathDone_1f7fb_468 {
2234
+ ._mathDone_vghdk_425 {
1839
2235
  display: inline-flex;
1840
2236
  align-items: center;
1841
2237
  gap: 4px;
@@ -1851,16 +2247,16 @@ table.tmr-pending-anchor {
1851
2247
  cursor: pointer;
1852
2248
  }
1853
2249
 
1854
- ._mathDone_1f7fb_468:hover:not(:disabled) {
2250
+ ._mathDone_vghdk_425:hover:not(:disabled) {
1855
2251
  filter: brightness(0.95);
1856
2252
  }
1857
2253
 
1858
- ._mathDone_1f7fb_468:disabled {
2254
+ ._mathDone_vghdk_425:disabled {
1859
2255
  opacity: 0.35;
1860
2256
  cursor: not-allowed;
1861
2257
  }
1862
2258
 
1863
- ._mathDoneKbd_1f7fb_493 {
2259
+ ._mathDoneKbd_vghdk_450 {
1864
2260
  font-size: 11px;
1865
2261
  font-weight: 500;
1866
2262
  opacity: 0.85;
@@ -1952,6 +2348,362 @@ table.tmr-pending-anchor {
1952
2348
  display: flex;
1953
2349
  gap: 6px;
1954
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
+ }
2430
+ /* 链接编辑浮层。配色走 --tmr-* 变量(与工具栏 / 查找条同一套),宿主可覆盖。
2431
+
2432
+ 给宿主的稳定选择器(内部 class 是 CSS Modules 哈希过的):根节点 [data-link-popover]、
2433
+ 输入框 [data-link-field]、按钮 [data-link-action="apply|open|remove"];
2434
+ 地址被编辑器判为非法时输入框带 [data-link-invalid]。 */
2435
+
2436
+ ._panel_qysb1_7 {
2437
+ --lp-text: var(--tmr-text, #363737);
2438
+ --lp-muted: var(--tmr-toolbar-muted, #6b6b6b);
2439
+ --lp-border: var(--tmr-toolbar-border, #ececec);
2440
+ --lp-accent: var(--tmr-accent, #ff6719);
2441
+
2442
+ display: flex;
2443
+ align-items: center;
2444
+ gap: 4px;
2445
+ padding: 6px;
2446
+ box-sizing: border-box;
2447
+ background: #fff;
2448
+ border: 1px solid var(--lp-border);
2449
+ border-radius: 10px;
2450
+ box-shadow: 0 6px 24px rgb(0 0 0 / 14%);
2451
+ color: var(--lp-text);
2452
+ font: inherit;
2453
+ font-size: 14px;
2454
+ line-height: 1.3;
2455
+ }
2456
+
2457
+ /* 输入框:与查找条的 .field 同一套尺寸(30px 高、6px 圆角),两个浮层看起来是一家 */
2458
+ ._field_qysb1_28 {
2459
+ display: inline-flex;
2460
+ align-items: center;
2461
+ flex: none;
2462
+ width: 216px;
2463
+ height: 30px;
2464
+ padding: 0 8px;
2465
+ box-sizing: border-box;
2466
+ border: 1px solid var(--lp-border);
2467
+ border-radius: 6px;
2468
+ background: #fff;
2469
+ }
2470
+
2471
+ ._field_qysb1_28:focus-within {
2472
+ border-color: var(--lp-accent);
2473
+ }
2474
+
2475
+ /* 地址被 setLink 的 isAllowedUri 拒了:边框转成危险色,title 里给一句解释 */
2476
+ ._fieldInvalid_qysb1_47,
2477
+ ._fieldInvalid_qysb1_47:focus-within {
2478
+ border-color: var(--tmr-danger, #d4380d);
2479
+ }
2480
+
2481
+ ._input_qysb1_52 {
2482
+ width: 100%;
2483
+ min-width: 0;
2484
+ border: none;
2485
+ outline: none;
2486
+ background: transparent;
2487
+ color: inherit;
2488
+ font: inherit;
2489
+ }
2490
+
2491
+ /* 应用与其他两个动作之间的一道细线:前者是「落盘」,后者是「对已有链接动手」 */
2492
+ ._divider_qysb1_63 {
2493
+ flex: none;
2494
+ width: 1px;
2495
+ height: 20px;
2496
+ margin: 0 2px;
2497
+ background: var(--lp-border);
2498
+ }
2499
+
2500
+ ._btn_qysb1_71 {
2501
+ display: inline-flex;
2502
+ align-items: center;
2503
+ justify-content: center;
2504
+ flex: none;
2505
+ height: 30px;
2506
+ min-width: 30px;
2507
+ padding: 0 6px;
2508
+ border: none;
2509
+ border-radius: 6px;
2510
+ background: transparent;
2511
+ color: var(--lp-muted);
2512
+ font: inherit;
2513
+ cursor: pointer;
2514
+ transition: background 0.15s, color 0.15s;
2515
+ }
2516
+
2517
+ ._btn_qysb1_71:hover:not(:disabled) {
2518
+ background: #f3f3f3;
2519
+ color: var(--lp-text);
2520
+ }
2521
+
2522
+ ._btn_qysb1_71:disabled {
2523
+ opacity: 0.3;
2524
+ cursor: not-allowed;
2525
+ }
2526
+
2527
+ /* 应用是这一层的主动作,单独给强调色(其余两个是次要动作) */
2528
+ ._apply_qysb1_99 {
2529
+ color: var(--lp-accent);
2530
+ }
2531
+ /* 表格悬停手柄(Notion 式)+ 它的操作菜单。配色走 --tmr-* 变量,宿主可覆盖。
2532
+
2533
+ 给宿主的稳定选择器(内部 class 是 CSS Modules 哈希过的):行手柄 [data-table-handle="row"]、
2534
+ 列手柄 [data-table-handle="col"]、菜单根 [data-table-menu]。 */
2535
+
2536
+ /* ── 手柄 ──────────────────────────────────────────────────────────────
2537
+ 固定定位(视口坐标):手柄要贴在单元格的行/列边缘,而它渲染在 body 上的 portal 里,
2538
+ 没法用绝对定位跟着表格走。滚动 / 缩放时由组件收起,等下一次移动重新贴。 */
2539
+ ._handle_qjreh_9 {
2540
+ position: fixed;
2541
+ z-index: 8;
2542
+ display: inline-flex;
2543
+ align-items: center;
2544
+ justify-content: center;
2545
+ padding: 0;
2546
+ box-sizing: border-box;
2547
+ border: 1px solid var(--tmr-table-handle-border, #e8e8ea);
2548
+ background: var(--tmr-table-handle-bg, #f1f1f3);
2549
+ color: var(--tmr-table-handle-fg, #7a7a7a);
2550
+ font-family: inherit;
2551
+ line-height: 1;
2552
+ cursor: pointer;
2553
+ user-select: none;
2554
+ transition: background 0.12s, color 0.12s, border-color 0.12s;
2555
+ }
2556
+
2557
+ /* 命中区补桥(行):胶囊本体离表格留了 8px 视觉留白,那 8px 加一块看不见的命中区,
2558
+ 让「单元格 → 手柄」这段路上没有既非单元格也非手柄的空隙——否则指针走到一半手柄就收了。
2559
+ 伪元素也算宿主按钮的一部分,点它命中的是按钮本身。 */
2560
+ ._handleRow_qjreh_30::after {
2561
+ content: '';
2562
+ position: absolute;
2563
+ top: 0;
2564
+ bottom: 0;
2565
+ left: 100%;
2566
+ width: 8px;
2567
+ }
2568
+
2569
+ /* 命中区补桥(列):同上,补在胶囊下方到表格上缘的 6px。 */
2570
+ ._handleCol_qjreh_40::after {
2571
+ content: '';
2572
+ position: absolute;
2573
+ left: 0;
2574
+ right: 0;
2575
+ top: 100%;
2576
+ height: 6px;
2577
+ }
2578
+
2579
+ /* 行手柄:贴在行左缘的竖胶囊。长度(height)由组件按行高给,这里只定粗细。 */
2580
+ ._handleRow_qjreh_30 {
2581
+ width: 18px;
2582
+ border-radius: 999px;
2583
+ font-size: 14px;
2584
+ }
2585
+
2586
+ /* 列手柄:贴在表格上方的横胶囊。长度(width)由组件按列宽给,这里只定高度。 */
2587
+ ._handleCol_qjreh_40 {
2588
+ height: 16px;
2589
+ border-radius: 999px;
2590
+ font-size: 13px;
2591
+ }
2592
+
2593
+ ._handle_qjreh_9:hover {
2594
+ background: var(--tmr-accent, #ff6719);
2595
+ border-color: transparent;
2596
+ color: #fff;
2597
+ }
2598
+
2599
+ /* 末尾追加行列的 `+` 手柄:贴在表格右缘 / 下缘,长度跟着表格尺寸走(见组件里的 style)。
2600
+ 圆角与行 / 列手柄同款全圆胶囊(厚度 16px,两端即 8px 半圆)。 */
2601
+ ._extend_qjreh_71 {
2602
+ position: fixed;
2603
+ z-index: 8;
2604
+ display: inline-flex;
2605
+ align-items: center;
2606
+ justify-content: center;
2607
+ padding: 0;
2608
+ box-sizing: border-box;
2609
+ border: 1px solid var(--tmr-table-handle-border, #e8e8ea);
2610
+ border-radius: 999px;
2611
+ background: var(--tmr-table-handle-bg, #f1f1f3);
2612
+ color: var(--tmr-table-handle-fg, #7a7a7a);
2613
+ font-family: inherit;
2614
+ font-size: 14px;
2615
+ line-height: 1;
2616
+ cursor: pointer;
2617
+ user-select: none;
2618
+ transition: background 0.12s, color 0.12s, border-color 0.12s;
2619
+ }
2620
+
2621
+ ._extend_qjreh_71:hover {
2622
+ background: var(--tmr-accent, #ff6719);
2623
+ border-color: transparent;
2624
+ color: #fff;
2625
+ }
2626
+
2627
+ /* 命中区补桥:把命中区接到表格边缘(与行 / 列手柄同理,免得指针走过去时掉空档) */
2628
+ ._extend_qjreh_71[data-table-extend='col']::after {
2629
+ content: '';
2630
+ position: absolute;
2631
+ top: 0;
2632
+ bottom: 0;
2633
+ right: 100%;
2634
+ width: 6px;
2635
+ }
2636
+
2637
+ ._extend_qjreh_71[data-table-extend='row']::after {
2638
+ content: '';
2639
+ position: absolute;
2640
+ left: 0;
2641
+ right: 0;
2642
+ bottom: 100%;
2643
+ height: 6px;
2644
+ }
2645
+
2646
+ /* ── 操作菜单(portal 到 body,拿不到 .toolbar 变量,故写死配色) ── */
2647
+ ._tableBubble_qjreh_117 {
2648
+ position: fixed;
2649
+ z-index: 12;
2650
+ display: flex;
2651
+ flex-direction: column;
2652
+ min-width: 220px;
2653
+ padding: 6px;
2654
+ background: #fff;
2655
+ border: 1px solid #ececec;
2656
+ border-radius: 10px;
2657
+ box-shadow: 0 6px 24px rgb(0 0 0 / 14%);
2658
+ }
2659
+
2660
+ ._tableMenuItem_qjreh_130 {
2661
+ display: flex;
2662
+ align-items: center;
2663
+ gap: 10px;
2664
+ width: 100%;
2665
+ padding: 7px 10px;
2666
+ border: none;
2667
+ border-radius: 6px;
2668
+ background: transparent;
2669
+ color: #363737;
2670
+ font-size: 14px;
2671
+ line-height: 1.3;
2672
+ text-align: left;
2673
+ cursor: pointer;
2674
+ user-select: none;
2675
+ }
2676
+
2677
+ ._tableMenuItem_qjreh_130:hover:not(:disabled) {
2678
+ background: #f3f3f3;
2679
+ }
2680
+
2681
+ ._tableMenuItem_qjreh_130:disabled {
2682
+ opacity: 0.35;
2683
+ cursor: not-allowed;
2684
+ }
2685
+
2686
+ ._tableMenuItemIcon_qjreh_156 {
2687
+ display: inline-flex;
2688
+ align-items: center;
2689
+ justify-content: center;
2690
+ flex: none;
2691
+ width: 20px;
2692
+ height: 20px;
2693
+ color: #6b6b6b;
2694
+ }
2695
+
2696
+ ._tableMenuItemLabel_qjreh_166 {
2697
+ flex: 1;
2698
+ min-width: 0;
2699
+ }
2700
+
2701
+ ._tableMenuDivider_qjreh_171 {
2702
+ height: 1px;
2703
+ margin: 4px 8px;
2704
+ background: #ececec;
2705
+ flex-shrink: 0;
2706
+ }
1955
2707
  /* 目录面板(阅读页 + 编辑页共用)。accent / 圆角 8px / 文字比正文小一档。 */
1956
2708
 
1957
2709
  ._desktop_euqdt_3 {