tiptap-markdown-react 0.17.0 → 0.18.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 (34) hide show
  1. package/README.md +75 -3
  2. package/dist/{ReportContent-CwcppHl8.js → ReportContent-MgbebxPV.js} +8 -8
  3. package/dist/{ReportContent-CwcppHl8.js.map → ReportContent-MgbebxPV.js.map} +1 -1
  4. package/dist/components/EditorToolbar.d.ts +12 -1
  5. package/dist/components/EditorToolbar.dom.test.d.ts +1 -0
  6. package/dist/components/FindReplaceBar.d.ts +0 -7
  7. package/dist/components/LinkPopover.d.ts +28 -0
  8. package/dist/components/LinkPopover.dom.test.d.ts +1 -0
  9. package/dist/components/MarkdownWysiwygEditor.d.ts +12 -0
  10. package/dist/components/TableHandles.d.ts +19 -0
  11. package/dist/components/TableHandles.dom.test.d.ts +1 -0
  12. package/dist/components/findEntry.dom.test.d.ts +1 -0
  13. package/dist/{extractToc-CheLC9kh.js → extractToc-BaR6LP1f.js} +42 -4
  14. package/dist/extractToc-BaR6LP1f.js.map +1 -0
  15. package/dist/findReplace.d.ts +18 -4
  16. package/dist/icons/index.d.ts +6 -0
  17. package/dist/index.d.ts +3 -1
  18. package/dist/index.js +1320 -608
  19. package/dist/index.js.map +1 -1
  20. package/dist/labels.d.ts +41 -1
  21. package/dist/linkEditing.d.ts +45 -0
  22. package/dist/linkEditing.test.d.ts +1 -0
  23. package/dist/placeholder.test.d.ts +1 -0
  24. package/dist/reader.js +2 -2
  25. package/dist/{scrollToTocHeading-CBvptTaQ.js → scrollToTocHeading-BTQWajGD.js} +2 -2
  26. package/dist/{scrollToTocHeading-CBvptTaQ.js.map → scrollToTocHeading-BTQWajGD.js.map} +1 -1
  27. package/dist/server.js +4 -4
  28. package/dist/style-inline.css +398 -174
  29. package/dist/style.css +398 -174
  30. package/dist/supSubMarkdown.test.d.ts +1 -0
  31. package/dist/supSubServer.test.d.ts +1 -0
  32. package/dist/tableSelection.d.ts +25 -5
  33. package/package.json +1 -1
  34. package/dist/extractToc-CheLC9kh.js.map +0 -1
package/dist/style.css CHANGED
@@ -3,14 +3,14 @@
3
3
 
4
4
  /* 编辑器最外层:查找替换浮动条的粘性范围就是它(超出编辑器范围后浮动条随之离场)。
5
5
  正文的滚动容器仍是 .editorScroll(宿主传的 className 依然落在它身上,契约不变)。 */
6
- ._editorHost_w9lw8_6 {
6
+ ._editorHost_1teg4_6 {
7
7
  position: relative;
8
8
  }
9
9
 
10
10
  /* 浮动条的粘性锚点:高度 0,不占布局、不推挤正文;sticky 让浮动条在「最近的滚动容器」
11
11
  里粘住(宿主的外层滚动容器或页面本身),正文滚动时不会把条子卷上去。
12
12
  注意:锚点必须在 DOM 里排在正文之前——排在后面的话它的自然位置在正文底部,粘性范围就错了。 */
13
- ._findBarAnchor_w9lw8_13 {
13
+ ._findBarAnchor_1teg4_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_w9lw8_13 {
21
+ ._findBar_1teg4_13 {
22
22
  position: absolute;
23
23
  }
24
24
 
25
- ._editorScroll_w9lw8_5 {
25
+ ._editorScroll_1teg4_5 {
26
26
  margin-top: 24px;
27
27
  position: relative;
28
28
  }
29
29
 
30
- ._editorContent_w9lw8_30 {
30
+ ._editorContent_1teg4_30 {
31
31
  outline: none;
32
32
  padding: 0;
33
33
  font-family: var(
@@ -49,8 +49,11 @@
49
49
  min-height: var(--tmr-min-height, 420px);
50
50
  }
51
51
 
52
- /* placeholder:空文档第一段显示占位符 */
53
- ._editorContent_w9lw8_30 p.is-editor-empty:first-child::before {
52
+ /* placeholder:空文档的当前文本块显示占位符。
53
+ 属性由官方 Placeholder 扩展(组件里按 placeholder prop 注册)以节点装饰
54
+ 打在段落 / 标题本身上,故此处 attr(data-placeholder) 取得到值。
55
+ 不限定 p:空文档首块是空标题(敲 / 选 H1 后删空)时同样显示。 */
56
+ ._editorContent_1teg4_30 .is-editor-empty:first-child::before {
54
57
  content: attr(data-placeholder);
55
58
  float: left;
56
59
  height: 0;
@@ -58,7 +61,7 @@
58
61
  pointer-events: none;
59
62
  }
60
63
 
61
- ._editorContent_w9lw8_30 h1 {
64
+ ._editorContent_1teg4_30 h1 {
62
65
  font-family: inherit;
63
66
  font-size: 1.55em;
64
67
  font-weight: 700;
@@ -66,7 +69,7 @@
66
69
  line-height: 1.3;
67
70
  }
68
71
 
69
- ._editorContent_w9lw8_30 h2 {
72
+ ._editorContent_1teg4_30 h2 {
70
73
  font-family: inherit;
71
74
  font-size: 1.3em;
72
75
  font-weight: 700;
@@ -74,7 +77,7 @@
74
77
  line-height: 1.3;
75
78
  }
76
79
 
77
- ._editorContent_w9lw8_30 h3 {
80
+ ._editorContent_1teg4_30 h3 {
78
81
  font-family: inherit;
79
82
  font-size: 1.12em;
80
83
  font-weight: 600;
@@ -82,21 +85,21 @@
82
85
  }
83
86
 
84
87
  /* h4-h6:延续 h1-h3 尺寸梯度递减;字号差变小后靠字重保持标题感,h6 字色稍弱。 */
85
- ._editorContent_w9lw8_30 h4 {
88
+ ._editorContent_1teg4_30 h4 {
86
89
  font-family: inherit;
87
90
  font-size: 1.05em;
88
91
  font-weight: 600;
89
92
  margin: 0.7em 0 0.3em;
90
93
  }
91
94
 
92
- ._editorContent_w9lw8_30 h5 {
95
+ ._editorContent_1teg4_30 h5 {
93
96
  font-family: inherit;
94
97
  font-size: 0.95em;
95
98
  font-weight: 600;
96
99
  margin: 0.7em 0 0.3em;
97
100
  }
98
101
 
99
- ._editorContent_w9lw8_30 h6 {
102
+ ._editorContent_1teg4_30 h6 {
100
103
  font-family: inherit;
101
104
  font-size: 0.88em;
102
105
  font-weight: 600;
@@ -104,25 +107,25 @@
104
107
  color: var(--tmr-muted, #777777);
105
108
  }
106
109
 
107
- ._editorContent_w9lw8_30 p {
110
+ ._editorContent_1teg4_30 p {
108
111
  margin: 0.7em 0;
109
112
  }
110
113
 
111
- ._editorContent_w9lw8_30 ul,
112
- ._editorContent_w9lw8_30 ol {
114
+ ._editorContent_1teg4_30 ul,
115
+ ._editorContent_1teg4_30 ol {
113
116
  padding-left: 1.5em;
114
117
  margin: 0.7em 0;
115
118
  }
116
119
 
117
- ._editorContent_w9lw8_30 ul {
120
+ ._editorContent_1teg4_30 ul {
118
121
  list-style: disc;
119
122
  }
120
123
 
121
- ._editorContent_w9lw8_30 ol {
124
+ ._editorContent_1teg4_30 ol {
122
125
  list-style: decimal;
123
126
  }
124
127
 
125
- ._editorContent_w9lw8_30 blockquote {
128
+ ._editorContent_1teg4_30 blockquote {
126
129
  border-left: 3px solid var(--tmr-accent, #ff6719);
127
130
  padding-left: 1em;
128
131
  margin: 0.9em 0;
@@ -130,13 +133,13 @@
130
133
  font-style: italic;
131
134
  }
132
135
 
133
- ._editorContent_w9lw8_30 a {
136
+ ._editorContent_1teg4_30 a {
134
137
  color: var(--tmr-accent, #ff6719);
135
138
  text-decoration: underline;
136
139
  }
137
140
 
138
141
  /* 仅行内代码加灰底;代码块内的 <code>(在 pre 内)由 NodeView 自管,排除掉 */
139
- ._editorContent_w9lw8_30 code:not(pre code) {
142
+ ._editorContent_1teg4_30 code:not(pre code) {
140
143
  background: var(--tmr-code-bg, #f4f4f4);
141
144
  padding: 0.15em 0.4em;
142
145
  border-radius: 4px;
@@ -151,13 +154,13 @@
151
154
  );
152
155
  }
153
156
 
154
- ._editorContent_w9lw8_30 hr {
157
+ ._editorContent_1teg4_30 hr {
155
158
  border: none;
156
159
  border-top: 1px solid var(--tmr-border, #e6e6e6);
157
160
  margin: 1.5em 0;
158
161
  }
159
162
 
160
- ._editorContent_w9lw8_30 img {
163
+ ._editorContent_1teg4_30 img {
161
164
  max-width: 100%;
162
165
  height: auto;
163
166
  border-radius: 6px;
@@ -166,21 +169,21 @@
166
169
  }
167
170
 
168
171
  /* 选中的图片高亮 */
169
- ._editorContent_w9lw8_30 img.ProseMirror-selectednode {
172
+ ._editorContent_1teg4_30 img.ProseMirror-selectednode {
170
173
  outline: 2px solid var(--tmr-accent, #ff6719);
171
174
  }
172
175
 
173
176
  /* 表格:细边框、表头浅灰;外包 .tableWrapper(编辑器 NodeView + SSR renderWrapper)
174
177
  * 桌面:width:100% + 允许换行,整表落在阅读列内(与改前一致)
175
178
  * 窄屏:max-content + nowrap,避免列被挤扁,wrapper 内横滑 */
176
- ._editorContent_w9lw8_30 .tableWrapper {
179
+ ._editorContent_1teg4_30 .tableWrapper {
177
180
  max-width: 100%;
178
181
  overflow-x: auto;
179
182
  -webkit-overflow-scrolling: touch;
180
183
  margin: 1em 0;
181
184
  }
182
185
 
183
- ._editorContent_w9lw8_30 table {
186
+ ._editorContent_1teg4_30 table {
184
187
  border-collapse: collapse;
185
188
  table-layout: auto;
186
189
  width: 100%;
@@ -190,12 +193,12 @@
190
193
  }
191
194
 
192
195
  /* 无 wrapper 的遗留 HTML(旧缓存)仍给一点外边距 */
193
- ._editorContent_w9lw8_30 :not(.tableWrapper) > table {
196
+ ._editorContent_1teg4_30 :not(.tableWrapper) > table {
194
197
  margin: 1em 0;
195
198
  }
196
199
 
197
- ._editorContent_w9lw8_30 table td,
198
- ._editorContent_w9lw8_30 table th {
200
+ ._editorContent_1teg4_30 table td,
201
+ ._editorContent_1teg4_30 table th {
199
202
  border: 1px solid var(--tmr-border, #e6e6e6);
200
203
  padding: 8px 12px;
201
204
  vertical-align: top;
@@ -206,27 +209,27 @@
206
209
  word-break: break-word;
207
210
  }
208
211
 
209
- ._editorContent_w9lw8_30 table th {
212
+ ._editorContent_1teg4_30 table th {
210
213
  background: var(--tmr-table-header-bg, #f7f7f7);
211
214
  font-weight: 600;
212
215
  }
213
216
 
214
217
  @media (max-width: 640px) {
215
- ._editorContent_w9lw8_30 table {
218
+ ._editorContent_1teg4_30 table {
216
219
  width: max-content;
217
220
  min-width: 100%;
218
221
  max-width: none;
219
222
  }
220
223
 
221
- ._editorContent_w9lw8_30 table td,
222
- ._editorContent_w9lw8_30 table th {
224
+ ._editorContent_1teg4_30 table td,
225
+ ._editorContent_1teg4_30 table th {
223
226
  white-space: nowrap;
224
227
  word-break: normal;
225
228
  }
226
229
  }
227
230
 
228
231
  /* 选中的单元格高亮 */
229
- ._editorContent_w9lw8_30 table .selectedCell::after {
232
+ ._editorContent_1teg4_30 table .selectedCell::after {
230
233
  content: '';
231
234
  position: absolute;
232
235
  inset: 0;
@@ -235,7 +238,7 @@
235
238
  }
236
239
 
237
240
  /* 列宽拖拽手柄 */
238
- ._editorContent_w9lw8_30 table .column-resize-handle {
241
+ ._editorContent_1teg4_30 table .column-resize-handle {
239
242
  position: absolute;
240
243
  right: -2px;
241
244
  top: 0;
@@ -248,30 +251,30 @@
248
251
  /* 任务清单:复选框与首行文字在同一行高内垂直居中。
249
252
  li 是 flex 容器,项内段落的外边距不会塌到 li 外(不像普通 ul/ol),只会把正文往下推,
250
253
  所以项内段落清零外边距,项间距改由 li 按 ul/ol 的 0.7em 承担。 */
251
- ._editorContent_w9lw8_30 ul[data-type='taskList'] {
254
+ ._editorContent_1teg4_30 ul[data-type='taskList'] {
252
255
  list-style: none;
253
256
  padding-left: 0.2em;
254
257
  }
255
258
 
256
- ._editorContent_w9lw8_30 ul[data-type='taskList'] li {
259
+ ._editorContent_1teg4_30 ul[data-type='taskList'] li {
257
260
  display: flex;
258
261
  align-items: flex-start;
259
262
  gap: 0.5em;
260
263
  margin: 0.7em 0;
261
264
  }
262
265
 
263
- ._editorContent_w9lw8_30 ul[data-type='taskList'] li > div > p {
266
+ ._editorContent_1teg4_30 ul[data-type='taskList'] li > div > p {
264
267
  margin: 0;
265
268
  }
266
269
 
267
270
  /* 项内第二段起保留半档间距,避免多段任务项的段落粘成一片(首段仍不带外边距) */
268
- ._editorContent_w9lw8_30 ul[data-type='taskList'] li > div > p + p {
271
+ ._editorContent_1teg4_30 ul[data-type='taskList'] li > div > p + p {
269
272
  margin-top: 0.35em;
270
273
  }
271
274
 
272
275
  /* label 撑满一行行高并居中,框心落在首行文字中线上;
273
276
  1lh 即该元素当前行高,随 --tmr-line-height(数字或长度写法)一起变,不靠手调偏移。 */
274
- ._editorContent_w9lw8_30 ul[data-type='taskList'] li > label {
277
+ ._editorContent_1teg4_30 ul[data-type='taskList'] li > label {
275
278
  display: flex;
276
279
  align-items: center;
277
280
  flex: 0 0 auto;
@@ -279,18 +282,18 @@
279
282
  user-select: none;
280
283
  }
281
284
 
282
- ._editorContent_w9lw8_30 ul[data-type='taskList'] li > div {
285
+ ._editorContent_1teg4_30 ul[data-type='taskList'] li > div {
283
286
  flex: 1;
284
287
  }
285
288
 
286
- ._editorContent_w9lw8_30 ul[data-type='taskList'] input[type='checkbox'] {
289
+ ._editorContent_1teg4_30 ul[data-type='taskList'] input[type='checkbox'] {
287
290
  margin: 0;
288
291
  accent-color: var(--tmr-accent, #ff6719);
289
292
  cursor: pointer;
290
293
  }
291
294
 
292
295
  /* 脚注/引文圆标:与正文字垂直居中;配色对齐工具栏 active(浅橙底 + accent 字) */
293
- ._editorContent_w9lw8_30 span.citation-ref {
296
+ ._editorContent_1teg4_30 span.citation-ref {
294
297
  display: inline-flex;
295
298
  align-items: center;
296
299
  justify-content: center;
@@ -327,7 +330,7 @@
327
330
  border-color 0.15s ease;
328
331
  }
329
332
 
330
- ._editorContent_w9lw8_30 span.citation-ref a {
333
+ ._editorContent_1teg4_30 span.citation-ref a {
331
334
  color: inherit;
332
335
  text-decoration: none;
333
336
  display: flex;
@@ -339,26 +342,26 @@
339
342
  pointer-events: none;
340
343
  }
341
344
 
342
- ._editorContent_w9lw8_30 span.citation-ref:hover,
343
- ._editorContent_w9lw8_30 span.citation-ref:focus-within,
344
- ._editorContent_w9lw8_30 span.citation-ref[data-tmr-citation-active] {
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] {
345
348
  background: var(--tmr-citation-bg-hover, var(--tmr-accent, #ff6719));
346
349
  border-color: var(--tmr-citation-bg-hover, var(--tmr-accent, #ff6719));
347
350
  color: var(--tmr-citation-fg-hover, #ffffff);
348
351
  }
349
352
 
350
- ._editorContent_w9lw8_30 .tiptap-mathematics-render[data-type='inline-math'] {
353
+ ._editorContent_1teg4_30 .tiptap-mathematics-render[data-type='inline-math'] {
351
354
  display: inline;
352
355
  }
353
356
 
354
- ._editorContent_w9lw8_30 .tiptap-mathematics-render[data-type='block-math'] {
357
+ ._editorContent_1teg4_30 .tiptap-mathematics-render[data-type='block-math'] {
355
358
  margin: 0.9em 0;
356
359
  overflow-x: auto;
357
360
  text-align: center;
358
361
  }
359
362
 
360
363
  /* 导入占位:进度写在光标处,不进 Markdown */
361
- ._editorContent_w9lw8_30 .tmr-import-placeholder {
364
+ ._editorContent_1teg4_30 .tmr-import-placeholder {
362
365
  display: flex;
363
366
  align-items: center;
364
367
  gap: 0.5em;
@@ -368,16 +371,16 @@
368
371
  user-select: none;
369
372
  }
370
373
 
371
- ._editorContent_w9lw8_30 .tmr-import-placeholder-spin {
374
+ ._editorContent_1teg4_30 .tmr-import-placeholder-spin {
372
375
  width: 0.7em;
373
376
  height: 0.7em;
374
377
  border: 1.5px solid var(--tmr-border, #e6e6e6);
375
378
  border-top-color: var(--tmr-accent, #ff6719);
376
379
  border-radius: 50%;
377
- animation: _tmr-import-spin_w9lw8_1 0.7s linear infinite;
380
+ animation: _tmr-import-spin_1teg4_1 0.7s linear infinite;
378
381
  }
379
382
 
380
- @keyframes _tmr-import-spin_w9lw8_1 {
383
+ @keyframes _tmr-import-spin_1teg4_1 {
381
384
  to {
382
385
  transform: rotate(360deg);
383
386
  }
@@ -385,7 +388,7 @@
385
388
 
386
389
  /* 快捷键抽屉的悬浮入口:sticky-bottom——自然位置在编辑器底部,
387
390
  内容滚动时保持悬浮在可视区右下;到内容末尾落位对齐右缘 */
388
- ._shortcutFab_w9lw8_388 {
391
+ ._shortcutFab_1teg4_391 {
389
392
  position: sticky;
390
393
  bottom: 20px;
391
394
  z-index: 6;
@@ -406,14 +409,14 @@
406
409
  transition: box-shadow 0.15s, color 0.15s;
407
410
  }
408
411
 
409
- ._shortcutFab_w9lw8_388:hover {
412
+ ._shortcutFab_1teg4_391:hover {
410
413
  color: var(--tmr-accent, #ff6719);
411
414
  box-shadow: 0 8px 24px rgb(0 0 0 / 16%);
412
415
  }
413
416
 
414
417
  /* 宿主容器模式的悬浮键:定位归宿主(如叠在「回到顶部」按钮上方),
415
418
  库只保留按钮本体视觉,不加粘性定位与右下角外边距 */
416
- ._shortcutFabHosted_w9lw8_416 {
419
+ ._shortcutFabHosted_1teg4_419 {
417
420
  position: static;
418
421
  margin: 0;
419
422
  }
@@ -1366,7 +1369,7 @@ table.tmr-pending-anchor {
1366
1369
  color: #22863a;
1367
1370
  }
1368
1371
  /* 顶部操作栏:横跨宽度、内容居中、细线灰图标。配色映射到可覆盖的 --tmr-* 变量。 */
1369
- ._toolbar_1f7fb_2 {
1372
+ ._toolbar_6osph_2 {
1370
1373
  --sb-accent: var(--tmr-accent, #ff6719);
1371
1374
  --sb-text: var(--tmr-text, #363737);
1372
1375
  --sb-muted: var(--tmr-toolbar-muted, #6b6b6b);
@@ -1379,19 +1382,25 @@ table.tmr-pending-anchor {
1379
1382
  z-index: 8;
1380
1383
  }
1381
1384
 
1382
- ._inner_1f7fb_15 {
1385
+ ._inner_6osph_15 {
1383
1386
  display: flex;
1384
1387
  align-items: center;
1385
1388
  justify-content: safe center;
1386
- flex-wrap: nowrap;
1387
- gap: 2px;
1389
+ /* 控件排满一行后换行而不是横向滚:`nowrap` + `overflow-x: auto` 会把行尾的控件
1390
+ 推到可视区外(宿主接上 onSearch 后就轮到了搜索入口),而工具栏横向滚动几乎没人会做。
1391
+ 宽容器里仍然只有一行,换行只在装不下时发生。 */
1392
+ flex-wrap: wrap;
1393
+ /* 横向不留间距:每个按钮自带 8px 内边距、分隔线自带 8px 外边距,视觉间距已经够了,
1394
+ 这 2px×二十来个控件是行内最后那点余量——省下来整行才装得下(列间距 0,换行后才留纵向
1395
+ 间距,免得两行贴在一起)。 */
1396
+ gap: 4px 0;
1388
1397
  max-width: 1100px;
1389
1398
  margin: 0 auto;
1390
1399
  padding: 8px 16px;
1391
1400
  overflow-x: auto;
1392
1401
  }
1393
1402
 
1394
- ._btn_1f7fb_27 {
1403
+ ._btn_6osph_33 {
1395
1404
  display: inline-flex;
1396
1405
  align-items: center;
1397
1406
  justify-content: center;
@@ -1409,88 +1418,28 @@ table.tmr-pending-anchor {
1409
1418
  transition: background 0.15s, color 0.15s;
1410
1419
  }
1411
1420
 
1412
- ._btn_1f7fb_27:hover:not(:disabled) {
1421
+ ._btn_6osph_33:hover:not(:disabled) {
1413
1422
  background: #f3f3f3;
1414
1423
  color: var(--sb-text);
1415
1424
  }
1416
1425
 
1417
- ._btnActive_1f7fb_50 {
1426
+ ._btnActive_6osph_56 {
1418
1427
  color: var(--sb-accent);
1419
1428
  background: #fff3ec;
1420
1429
  }
1421
1430
 
1422
- ._btnActive_1f7fb_50:hover {
1431
+ ._btnActive_6osph_56:hover {
1423
1432
  color: var(--sb-accent);
1424
1433
  background: #ffe8da;
1425
1434
  }
1426
1435
 
1427
- ._btn_1f7fb_27:disabled {
1436
+ ._btn_6osph_33:disabled {
1428
1437
  opacity: 0.3;
1429
1438
  cursor: not-allowed;
1430
1439
  }
1431
1440
 
1432
- /* 表内右键菜单(portal 到 body,拿不到 .toolbar 变量,故写死配色) */
1433
- ._tableBubble_1f7fb_66 {
1434
- display: flex;
1435
- flex-direction: column;
1436
- min-width: 220px;
1437
- padding: 6px;
1438
- background: #fff;
1439
- border: 1px solid #ececec;
1440
- border-radius: 10px;
1441
- box-shadow: 0 6px 24px rgb(0 0 0 / 14%);
1442
- }
1443
-
1444
- ._tableMenuItem_1f7fb_77 {
1445
- display: flex;
1446
- align-items: center;
1447
- gap: 10px;
1448
- width: 100%;
1449
- padding: 7px 10px;
1450
- border: none;
1451
- border-radius: 6px;
1452
- background: transparent;
1453
- color: #363737;
1454
- font-size: 14px;
1455
- line-height: 1.3;
1456
- text-align: left;
1457
- cursor: pointer;
1458
- user-select: none;
1459
- }
1460
-
1461
- ._tableMenuItem_1f7fb_77:hover:not(:disabled) {
1462
- background: #f3f3f3;
1463
- }
1464
-
1465
- ._tableMenuItem_1f7fb_77:disabled {
1466
- opacity: 0.35;
1467
- cursor: not-allowed;
1468
- }
1469
-
1470
- ._tableMenuItemIcon_1f7fb_103 {
1471
- display: inline-flex;
1472
- align-items: center;
1473
- justify-content: center;
1474
- flex: none;
1475
- width: 20px;
1476
- height: 20px;
1477
- color: #6b6b6b;
1478
- }
1479
-
1480
- ._tableMenuItemLabel_1f7fb_113 {
1481
- flex: 1;
1482
- min-width: 0;
1483
- }
1484
-
1485
- ._tableMenuDivider_1f7fb_118 {
1486
- height: 1px;
1487
- margin: 4px 8px;
1488
- background: #ececec;
1489
- flex-shrink: 0;
1490
- }
1491
-
1492
1441
  /* 文字型图标(引用等) */
1493
- ._txtIcon_1f7fb_126 {
1442
+ ._txtIcon_6osph_72 {
1494
1443
  font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1495
1444
  font-size: 16px;
1496
1445
  font-weight: 600;
@@ -1498,7 +1447,7 @@ table.tmr-pending-anchor {
1498
1447
  }
1499
1448
 
1500
1449
  /* 文字颜色 / 高亮图标:字母 + 底部当前色条 */
1501
- ._colorIcon_1f7fb_134 {
1450
+ ._colorIcon_6osph_80 {
1502
1451
  display: inline-flex;
1503
1452
  flex-direction: column;
1504
1453
  align-items: center;
@@ -1506,20 +1455,20 @@ table.tmr-pending-anchor {
1506
1455
  line-height: 1;
1507
1456
  }
1508
1457
 
1509
- ._colorIconGlyph_1f7fb_142 {
1458
+ ._colorIconGlyph_6osph_88 {
1510
1459
  font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1511
1460
  font-size: 15px;
1512
1461
  font-weight: 600;
1513
1462
  }
1514
1463
 
1515
- ._colorIconBar_1f7fb_148 {
1464
+ ._colorIconBar_6osph_94 {
1516
1465
  width: 16px;
1517
1466
  height: 3px;
1518
1467
  border-radius: 1.5px;
1519
1468
  }
1520
1469
 
1521
1470
  /* A▾ 上标/下标下拉触发器 */
1522
- ._scriptTrigger_1f7fb_155 {
1471
+ ._scriptTrigger_6osph_101 {
1523
1472
  display: inline-flex;
1524
1473
  align-items: center;
1525
1474
  gap: 3px;
@@ -1534,12 +1483,12 @@ table.tmr-pending-anchor {
1534
1483
  transition: background 0.15s, color 0.15s;
1535
1484
  }
1536
1485
 
1537
- ._scriptTrigger_1f7fb_155:hover {
1486
+ ._scriptTrigger_6osph_101:hover {
1538
1487
  background: #f3f3f3;
1539
1488
  color: var(--sb-text);
1540
1489
  }
1541
1490
 
1542
- ._scriptTriggerGlyph_1f7fb_175 {
1491
+ ._scriptTriggerGlyph_6osph_121 {
1543
1492
  font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1544
1493
  font-size: 16px;
1545
1494
  font-weight: 600;
@@ -1547,7 +1496,7 @@ table.tmr-pending-anchor {
1547
1496
  text-underline-offset: 2px;
1548
1497
  }
1549
1498
 
1550
- ._divider_1f7fb_183 {
1499
+ ._divider_6osph_129 {
1551
1500
  width: 1px;
1552
1501
  height: 20px;
1553
1502
  margin: 0 8px;
@@ -1556,7 +1505,7 @@ table.tmr-pending-anchor {
1556
1505
  }
1557
1506
 
1558
1507
  /* ── Style / Size / More 下拉触发器 ── */
1559
- ._styleTrigger_1f7fb_192 {
1508
+ ._styleTrigger_6osph_138 {
1560
1509
  display: inline-flex;
1561
1510
  align-items: center;
1562
1511
  justify-content: space-between;
@@ -1576,16 +1525,16 @@ table.tmr-pending-anchor {
1576
1525
  transition: background 0.15s;
1577
1526
  }
1578
1527
 
1579
- ._styleTrigger_1f7fb_192:hover:not(:disabled) {
1528
+ ._styleTrigger_6osph_138:hover:not(:disabled) {
1580
1529
  background: #f3f3f3;
1581
1530
  }
1582
1531
 
1583
- ._styleTrigger_1f7fb_192:disabled {
1532
+ ._styleTrigger_6osph_138:disabled {
1584
1533
  opacity: 0.3;
1585
1534
  cursor: not-allowed;
1586
1535
  }
1587
1536
 
1588
- ._styleTriggerLabel_1f7fb_221 {
1537
+ ._styleTriggerLabel_6osph_167 {
1589
1538
  flex: 1;
1590
1539
  text-align: left;
1591
1540
  overflow: hidden;
@@ -1593,19 +1542,19 @@ table.tmr-pending-anchor {
1593
1542
  text-overflow: ellipsis;
1594
1543
  }
1595
1544
 
1596
- ._styleTriggerCaret_1f7fb_229 {
1545
+ ._styleTriggerCaret_6osph_175 {
1597
1546
  color: var(--sb-muted);
1598
1547
  flex: none;
1599
1548
  }
1600
1549
 
1601
1550
  /* 下拉项:图标 + 文字 */
1602
- ._styleItem_1f7fb_235 {
1551
+ ._styleItem_6osph_181 {
1603
1552
  display: inline-flex;
1604
1553
  align-items: center;
1605
1554
  gap: 12px;
1606
1555
  }
1607
1556
 
1608
- ._styleIcon_1f7fb_241 {
1557
+ ._styleIcon_6osph_187 {
1609
1558
  display: inline-flex;
1610
1559
  justify-content: center;
1611
1560
  align-items: center;
@@ -1615,19 +1564,19 @@ table.tmr-pending-anchor {
1615
1564
  }
1616
1565
 
1617
1566
  /* 上标 / 下标图标 */
1618
- ._scriptGlyph_1f7fb_251 {
1567
+ ._scriptGlyph_6osph_197 {
1619
1568
  display: inline-block;
1620
1569
  text-align: center;
1621
1570
  font-family: 'SF Pro Display', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
1622
1571
  }
1623
1572
 
1624
- ._scriptGlyph_1f7fb_251 sup,
1625
- ._scriptGlyph_1f7fb_251 sub {
1573
+ ._scriptGlyph_6osph_197 sup,
1574
+ ._scriptGlyph_6osph_197 sub {
1626
1575
  font-size: 0.7em;
1627
1576
  }
1628
1577
 
1629
1578
  /* ── Radix 下拉菜单面板(替代 antd .ant-dropdown-menu) ── */
1630
- ._menu_1f7fb_263 {
1579
+ ._menu_6osph_209 {
1631
1580
  min-width: 200px;
1632
1581
  padding: 6px;
1633
1582
  background: #fff;
@@ -1638,7 +1587,7 @@ table.tmr-pending-anchor {
1638
1587
  z-index: 1000;
1639
1588
  }
1640
1589
 
1641
- ._menuItem_1f7fb_274 {
1590
+ ._menuItem_6osph_220 {
1642
1591
  display: flex;
1643
1592
  align-items: center;
1644
1593
  width: 100%;
@@ -1655,30 +1604,30 @@ table.tmr-pending-anchor {
1655
1604
  gap: 8px;
1656
1605
  }
1657
1606
 
1658
- ._menuItem_1f7fb_274:hover:not(:disabled) {
1607
+ ._menuItem_6osph_220:hover:not(:disabled) {
1659
1608
  background: #f3f3f3;
1660
1609
  }
1661
1610
 
1662
- ._menuItem_1f7fb_274:disabled {
1611
+ ._menuItem_6osph_220:disabled {
1663
1612
  opacity: 0.35;
1664
1613
  cursor: not-allowed;
1665
1614
  }
1666
1615
 
1667
1616
  /* 选中态:品牌色高亮 */
1668
- ._menuItemSelected_1f7fb_301 {
1617
+ ._menuItemSelected_6osph_247 {
1669
1618
  background: #fff3ec;
1670
1619
  color: var(--sb-accent);
1671
1620
  }
1672
1621
 
1673
- ._menuItemSelected_1f7fb_301 ._styleIcon_1f7fb_241 {
1622
+ ._menuItemSelected_6osph_247 ._styleIcon_6osph_187 {
1674
1623
  color: var(--sb-accent);
1675
1624
  }
1676
1625
 
1677
- ._menuItemSelected_1f7fb_301:hover:not(:disabled) {
1626
+ ._menuItemSelected_6osph_247:hover:not(:disabled) {
1678
1627
  background: #ffe8da;
1679
1628
  }
1680
1629
 
1681
- ._tableInsertCaret_1f7fb_314 {
1630
+ ._tableInsertCaret_6osph_260 {
1682
1631
  margin-left: auto;
1683
1632
  color: var(--sb-muted);
1684
1633
  transform: rotate(-90deg);
@@ -1686,7 +1635,7 @@ table.tmr-pending-anchor {
1686
1635
  }
1687
1636
 
1688
1637
  /* 插入表格:行列网格选择器 */
1689
- ._tableSizePicker_1f7fb_322 {
1638
+ ._tableSizePicker_6osph_268 {
1690
1639
  padding: 10px;
1691
1640
  background: #fff;
1692
1641
  border-radius: 10px;
@@ -1696,12 +1645,12 @@ table.tmr-pending-anchor {
1696
1645
  z-index: 1001;
1697
1646
  }
1698
1647
 
1699
- ._tableSizeGrid_1f7fb_332 {
1648
+ ._tableSizeGrid_6osph_278 {
1700
1649
  display: grid;
1701
1650
  gap: 3px;
1702
1651
  }
1703
1652
 
1704
- ._tableSizeCell_1f7fb_337 {
1653
+ ._tableSizeCell_6osph_283 {
1705
1654
  width: 16px;
1706
1655
  height: 16px;
1707
1656
  padding: 0;
@@ -1711,12 +1660,12 @@ table.tmr-pending-anchor {
1711
1660
  cursor: pointer;
1712
1661
  }
1713
1662
 
1714
- ._tableSizeCellActive_1f7fb_347 {
1663
+ ._tableSizeCellActive_6osph_293 {
1715
1664
  border-color: var(--tmr-accent, #ff6719);
1716
1665
  background: #fff3ec;
1717
1666
  }
1718
1667
 
1719
- ._tableSizeLabel_1f7fb_352 {
1668
+ ._tableSizeLabel_6osph_298 {
1720
1669
  margin-top: 8px;
1721
1670
  text-align: center;
1722
1671
  font-size: 12px;
@@ -1725,28 +1674,28 @@ table.tmr-pending-anchor {
1725
1674
  }
1726
1675
 
1727
1676
  /* Radix Popover 内容(承载 ColorPalette),面板自带阴影,这里只兜底 z-index */
1728
- ._popoverContent_1f7fb_361 {
1677
+ ._popoverContent_6osph_307 {
1729
1678
  z-index: 1000;
1730
1679
  }
1731
1680
 
1732
- ._mathLayer_1f7fb_365 {
1681
+ ._mathLayer_6osph_311 {
1733
1682
  position: absolute;
1734
1683
  z-index: 6;
1735
1684
  }
1736
1685
 
1737
- ._mathStack_1f7fb_370 {
1686
+ ._mathStack_6osph_316 {
1738
1687
  display: flex;
1739
1688
  flex-direction: column;
1740
1689
  align-items: flex-start;
1741
1690
  gap: 8px;
1742
1691
  }
1743
1692
 
1744
- ._mathStackBlock_1f7fb_377 {
1693
+ ._mathStackBlock_6osph_323 {
1745
1694
  align-items: stretch;
1746
1695
  width: 100%;
1747
1696
  }
1748
1697
 
1749
- ._mathHint_1f7fb_382 {
1698
+ ._mathHint_6osph_328 {
1750
1699
  display: inline-flex;
1751
1700
  align-items: center;
1752
1701
  gap: 6px;
@@ -1758,19 +1707,19 @@ table.tmr-pending-anchor {
1758
1707
  line-height: 1.4;
1759
1708
  }
1760
1709
 
1761
- ._mathHintBlock_1f7fb_394 {
1710
+ ._mathHintBlock_6osph_340 {
1762
1711
  width: 100%;
1763
1712
  padding: 10px 14px;
1764
1713
  border-radius: 8px;
1765
1714
  }
1766
1715
 
1767
- ._mathHintIcon_1f7fb_400 {
1716
+ ._mathHintIcon_6osph_346 {
1768
1717
  font-family: ui-serif, Georgia, 'Times New Roman', serif;
1769
1718
  font-size: 12px;
1770
1719
  opacity: 0.85;
1771
1720
  }
1772
1721
 
1773
- ._mathPreviewInline_1f7fb_406 {
1722
+ ._mathPreviewInline_6osph_352 {
1774
1723
  display: inline-flex;
1775
1724
  max-width: min(440px, calc(100vw - 24px));
1776
1725
  padding: 4px 10px;
@@ -1780,7 +1729,7 @@ table.tmr-pending-anchor {
1780
1729
  color: var(--tmr-text, #363737);
1781
1730
  }
1782
1731
 
1783
- ._mathPreviewBlock_1f7fb_416 {
1732
+ ._mathPreviewBlock_6osph_362 {
1784
1733
  width: 100%;
1785
1734
  min-height: 48px;
1786
1735
  padding: 14px 16px;
@@ -1791,11 +1740,11 @@ table.tmr-pending-anchor {
1791
1740
  color: var(--tmr-text, #363737);
1792
1741
  }
1793
1742
 
1794
- ._mathPreviewBlock_1f7fb_416 .katex-display {
1743
+ ._mathPreviewBlock_6osph_362 .katex-display {
1795
1744
  margin: 0;
1796
1745
  }
1797
1746
 
1798
- ._mathField_1f7fb_431 {
1747
+ ._mathField_6osph_377 {
1799
1748
  display: flex;
1800
1749
  align-items: center;
1801
1750
  gap: 8px;
@@ -1807,14 +1756,14 @@ table.tmr-pending-anchor {
1807
1756
  box-shadow: 0 4px 16px rgb(0 0 0 / 12%);
1808
1757
  }
1809
1758
 
1810
- ._mathFieldBlock_1f7fb_443 {
1759
+ ._mathFieldBlock_6osph_389 {
1811
1760
  align-items: flex-start;
1812
1761
  width: 100%;
1813
1762
  border-radius: 12px;
1814
1763
  padding: 10px 10px 10px 14px;
1815
1764
  }
1816
1765
 
1817
- ._mathInput_1f7fb_450 {
1766
+ ._mathInput_6osph_396 {
1818
1767
  flex: 1;
1819
1768
  min-width: 0;
1820
1769
  margin: 0;
@@ -1828,11 +1777,11 @@ table.tmr-pending-anchor {
1828
1777
  resize: none;
1829
1778
  }
1830
1779
 
1831
- ._mathInput_1f7fb_450:focus {
1780
+ ._mathInput_6osph_396:focus {
1832
1781
  outline: none;
1833
1782
  }
1834
1783
 
1835
- ._mathDone_1f7fb_468 {
1784
+ ._mathDone_6osph_414 {
1836
1785
  display: inline-flex;
1837
1786
  align-items: center;
1838
1787
  gap: 4px;
@@ -1848,16 +1797,16 @@ table.tmr-pending-anchor {
1848
1797
  cursor: pointer;
1849
1798
  }
1850
1799
 
1851
- ._mathDone_1f7fb_468:hover:not(:disabled) {
1800
+ ._mathDone_6osph_414:hover:not(:disabled) {
1852
1801
  filter: brightness(0.95);
1853
1802
  }
1854
1803
 
1855
- ._mathDone_1f7fb_468:disabled {
1804
+ ._mathDone_6osph_414:disabled {
1856
1805
  opacity: 0.35;
1857
1806
  cursor: not-allowed;
1858
1807
  }
1859
1808
 
1860
- ._mathDoneKbd_1f7fb_493 {
1809
+ ._mathDoneKbd_6osph_439 {
1861
1810
  font-size: 11px;
1862
1811
  font-weight: 500;
1863
1812
  opacity: 0.85;
@@ -1949,6 +1898,281 @@ table.tmr-pending-anchor {
1949
1898
  display: flex;
1950
1899
  gap: 6px;
1951
1900
  }
1901
+ /* 链接编辑浮层。配色走 --tmr-* 变量(与工具栏 / 查找条同一套),宿主可覆盖。
1902
+
1903
+ 给宿主的稳定选择器(内部 class 是 CSS Modules 哈希过的):根节点 [data-link-popover]、
1904
+ 输入框 [data-link-field]、按钮 [data-link-action="apply|open|remove"];
1905
+ 地址被编辑器判为非法时输入框带 [data-link-invalid]。 */
1906
+
1907
+ ._panel_qysb1_7 {
1908
+ --lp-text: var(--tmr-text, #363737);
1909
+ --lp-muted: var(--tmr-toolbar-muted, #6b6b6b);
1910
+ --lp-border: var(--tmr-toolbar-border, #ececec);
1911
+ --lp-accent: var(--tmr-accent, #ff6719);
1912
+
1913
+ display: flex;
1914
+ align-items: center;
1915
+ gap: 4px;
1916
+ padding: 6px;
1917
+ box-sizing: border-box;
1918
+ background: #fff;
1919
+ border: 1px solid var(--lp-border);
1920
+ border-radius: 10px;
1921
+ box-shadow: 0 6px 24px rgb(0 0 0 / 14%);
1922
+ color: var(--lp-text);
1923
+ font: inherit;
1924
+ font-size: 14px;
1925
+ line-height: 1.3;
1926
+ }
1927
+
1928
+ /* 输入框:与查找条的 .field 同一套尺寸(30px 高、6px 圆角),两个浮层看起来是一家 */
1929
+ ._field_qysb1_28 {
1930
+ display: inline-flex;
1931
+ align-items: center;
1932
+ flex: none;
1933
+ width: 216px;
1934
+ height: 30px;
1935
+ padding: 0 8px;
1936
+ box-sizing: border-box;
1937
+ border: 1px solid var(--lp-border);
1938
+ border-radius: 6px;
1939
+ background: #fff;
1940
+ }
1941
+
1942
+ ._field_qysb1_28:focus-within {
1943
+ border-color: var(--lp-accent);
1944
+ }
1945
+
1946
+ /* 地址被 setLink 的 isAllowedUri 拒了:边框转成危险色,title 里给一句解释 */
1947
+ ._fieldInvalid_qysb1_47,
1948
+ ._fieldInvalid_qysb1_47:focus-within {
1949
+ border-color: var(--tmr-danger, #d4380d);
1950
+ }
1951
+
1952
+ ._input_qysb1_52 {
1953
+ width: 100%;
1954
+ min-width: 0;
1955
+ border: none;
1956
+ outline: none;
1957
+ background: transparent;
1958
+ color: inherit;
1959
+ font: inherit;
1960
+ }
1961
+
1962
+ /* 应用与其他两个动作之间的一道细线:前者是「落盘」,后者是「对已有链接动手」 */
1963
+ ._divider_qysb1_63 {
1964
+ flex: none;
1965
+ width: 1px;
1966
+ height: 20px;
1967
+ margin: 0 2px;
1968
+ background: var(--lp-border);
1969
+ }
1970
+
1971
+ ._btn_qysb1_71 {
1972
+ display: inline-flex;
1973
+ align-items: center;
1974
+ justify-content: center;
1975
+ flex: none;
1976
+ height: 30px;
1977
+ min-width: 30px;
1978
+ padding: 0 6px;
1979
+ border: none;
1980
+ border-radius: 6px;
1981
+ background: transparent;
1982
+ color: var(--lp-muted);
1983
+ font: inherit;
1984
+ cursor: pointer;
1985
+ transition: background 0.15s, color 0.15s;
1986
+ }
1987
+
1988
+ ._btn_qysb1_71:hover:not(:disabled) {
1989
+ background: #f3f3f3;
1990
+ color: var(--lp-text);
1991
+ }
1992
+
1993
+ ._btn_qysb1_71:disabled {
1994
+ opacity: 0.3;
1995
+ cursor: not-allowed;
1996
+ }
1997
+
1998
+ /* 应用是这一层的主动作,单独给强调色(其余两个是次要动作) */
1999
+ ._apply_qysb1_99 {
2000
+ color: var(--lp-accent);
2001
+ }
2002
+ /* 表格悬停手柄(Notion 式)+ 它的操作菜单。配色走 --tmr-* 变量,宿主可覆盖。
2003
+
2004
+ 给宿主的稳定选择器(内部 class 是 CSS Modules 哈希过的):行手柄 [data-table-handle="row"]、
2005
+ 列手柄 [data-table-handle="col"]、菜单根 [data-table-menu]。 */
2006
+
2007
+ /* ── 手柄 ──────────────────────────────────────────────────────────────
2008
+ 固定定位(视口坐标):手柄要贴在单元格的行/列边缘,而它渲染在 body 上的 portal 里,
2009
+ 没法用绝对定位跟着表格走。滚动 / 缩放时由组件收起,等下一次移动重新贴。 */
2010
+ ._handle_cco3n_9 {
2011
+ position: fixed;
2012
+ z-index: 8;
2013
+ display: inline-flex;
2014
+ align-items: center;
2015
+ justify-content: center;
2016
+ padding: 0;
2017
+ box-sizing: border-box;
2018
+ border: 1px solid var(--tmr-table-handle-border, #e8e8ea);
2019
+ background: var(--tmr-table-handle-bg, #f1f1f3);
2020
+ color: var(--tmr-table-handle-fg, #7a7a7a);
2021
+ font-family: inherit;
2022
+ line-height: 1;
2023
+ cursor: pointer;
2024
+ user-select: none;
2025
+ transition: background 0.12s, color 0.12s, border-color 0.12s;
2026
+ }
2027
+
2028
+ /* 命中区补桥(行):胶囊本体离表格留了 8px 视觉留白,那 8px 加一块看不见的命中区,
2029
+ 让「单元格 → 手柄」这段路上没有既非单元格也非手柄的空隙——否则指针走到一半手柄就收了。
2030
+ 伪元素也算宿主按钮的一部分,点它命中的是按钮本身。 */
2031
+ ._handleRow_cco3n_30::after {
2032
+ content: '';
2033
+ position: absolute;
2034
+ top: 0;
2035
+ bottom: 0;
2036
+ left: 100%;
2037
+ width: 8px;
2038
+ }
2039
+
2040
+ /* 命中区补桥(列):同上,补在胶囊下方到表格上缘的 6px。 */
2041
+ ._handleCol_cco3n_40::after {
2042
+ content: '';
2043
+ position: absolute;
2044
+ left: 0;
2045
+ right: 0;
2046
+ top: 100%;
2047
+ height: 6px;
2048
+ }
2049
+
2050
+ /* 行手柄:贴在行左缘的竖胶囊。长度(height)由组件按行高给,这里只定粗细。 */
2051
+ ._handleRow_cco3n_30 {
2052
+ width: 18px;
2053
+ border-radius: 999px;
2054
+ font-size: 14px;
2055
+ }
2056
+
2057
+ /* 列手柄:贴在表格上方的横胶囊。长度(width)由组件按列宽给,这里只定高度。 */
2058
+ ._handleCol_cco3n_40 {
2059
+ height: 16px;
2060
+ border-radius: 999px;
2061
+ font-size: 13px;
2062
+ }
2063
+
2064
+ ._handle_cco3n_9:hover {
2065
+ background: var(--tmr-accent, #ff6719);
2066
+ border-color: transparent;
2067
+ color: #fff;
2068
+ }
2069
+
2070
+ /* 末尾追加行列的 `+` 手柄:贴在表格右缘 / 下缘,长度跟着表格尺寸走(见组件里的 style)。 */
2071
+ ._extend_cco3n_70 {
2072
+ position: fixed;
2073
+ z-index: 8;
2074
+ display: inline-flex;
2075
+ align-items: center;
2076
+ justify-content: center;
2077
+ padding: 0;
2078
+ box-sizing: border-box;
2079
+ border: 1px solid var(--tmr-table-handle-border, #e8e8ea);
2080
+ background: var(--tmr-table-handle-bg, #f1f1f3);
2081
+ color: var(--tmr-table-handle-fg, #7a7a7a);
2082
+ font-family: inherit;
2083
+ font-size: 14px;
2084
+ line-height: 1;
2085
+ cursor: pointer;
2086
+ user-select: none;
2087
+ transition: background 0.12s, color 0.12s, border-color 0.12s;
2088
+ }
2089
+
2090
+ ._extend_cco3n_70:hover {
2091
+ background: var(--tmr-accent, #ff6719);
2092
+ border-color: transparent;
2093
+ color: #fff;
2094
+ }
2095
+
2096
+ /* 命中区补桥:把命中区接到表格边缘(与行 / 列手柄同理,免得指针走过去时掉空档) */
2097
+ ._extend_cco3n_70[data-table-extend='col']::after {
2098
+ content: '';
2099
+ position: absolute;
2100
+ top: 0;
2101
+ bottom: 0;
2102
+ right: 100%;
2103
+ width: 6px;
2104
+ }
2105
+
2106
+ ._extend_cco3n_70[data-table-extend='row']::after {
2107
+ content: '';
2108
+ position: absolute;
2109
+ left: 0;
2110
+ right: 0;
2111
+ bottom: 100%;
2112
+ height: 6px;
2113
+ }
2114
+
2115
+ /* ── 操作菜单(portal 到 body,拿不到 .toolbar 变量,故写死配色) ── */
2116
+ ._tableBubble_cco3n_115 {
2117
+ position: fixed;
2118
+ z-index: 12;
2119
+ display: flex;
2120
+ flex-direction: column;
2121
+ min-width: 220px;
2122
+ padding: 6px;
2123
+ background: #fff;
2124
+ border: 1px solid #ececec;
2125
+ border-radius: 10px;
2126
+ box-shadow: 0 6px 24px rgb(0 0 0 / 14%);
2127
+ }
2128
+
2129
+ ._tableMenuItem_cco3n_128 {
2130
+ display: flex;
2131
+ align-items: center;
2132
+ gap: 10px;
2133
+ width: 100%;
2134
+ padding: 7px 10px;
2135
+ border: none;
2136
+ border-radius: 6px;
2137
+ background: transparent;
2138
+ color: #363737;
2139
+ font-size: 14px;
2140
+ line-height: 1.3;
2141
+ text-align: left;
2142
+ cursor: pointer;
2143
+ user-select: none;
2144
+ }
2145
+
2146
+ ._tableMenuItem_cco3n_128:hover:not(:disabled) {
2147
+ background: #f3f3f3;
2148
+ }
2149
+
2150
+ ._tableMenuItem_cco3n_128:disabled {
2151
+ opacity: 0.35;
2152
+ cursor: not-allowed;
2153
+ }
2154
+
2155
+ ._tableMenuItemIcon_cco3n_154 {
2156
+ display: inline-flex;
2157
+ align-items: center;
2158
+ justify-content: center;
2159
+ flex: none;
2160
+ width: 20px;
2161
+ height: 20px;
2162
+ color: #6b6b6b;
2163
+ }
2164
+
2165
+ ._tableMenuItemLabel_cco3n_164 {
2166
+ flex: 1;
2167
+ min-width: 0;
2168
+ }
2169
+
2170
+ ._tableMenuDivider_cco3n_169 {
2171
+ height: 1px;
2172
+ margin: 4px 8px;
2173
+ background: #ececec;
2174
+ flex-shrink: 0;
2175
+ }
1952
2176
  /* 目录面板(阅读页 + 编辑页共用)。accent / 圆角 8px / 文字比正文小一档。 */
1953
2177
 
1954
2178
  ._desktop_euqdt_3 {