wendang-react 0.6.3 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +1 -1
- package/README.md +105 -0
- package/dist/bindings/yjs.js +1 -5
- package/dist/chunks/AnchoredPanel-C7jMoPze.js +1 -0
- package/dist/chunks/DocumentExportMenu-CUMsgq3w.js +2 -0
- package/dist/chunks/Dropdown-D98tXfe0.js +3 -0
- package/dist/chunks/MindMapCanvas-CVXQXNOg.js +163 -0
- package/dist/chunks/MindMapViewer-BI8zbQM1.js +13 -0
- package/dist/chunks/SpreadsheetViewer-CoQ4VIgj.js +23 -0
- package/dist/chunks/code-highlight-BmaqTe1m.js +1 -30
- package/dist/chunks/code-highlight-engine-BFDzDPzy.js +1 -40
- package/dist/chunks/comment-hint-BhUxKjKK.js +14 -0
- package/dist/chunks/composition-state-Bl-U1R_2.js +1 -40
- package/dist/chunks/extensions-C1fCBnEs.js +14 -0
- package/dist/chunks/fuzzy-match-DYQR-4w2.js +1 -89
- package/dist/chunks/hooks-C53Dp0pr.js +1 -35
- package/dist/chunks/i18n-B0kCsIjc.js +2 -0
- package/dist/chunks/index-COeA2QcQ.js +15 -0
- package/dist/chunks/katex-WjrodtTU.js +1 -71
- package/dist/chunks/locale-DWpIJ_9X.js +1 -0
- package/dist/chunks/mind-map-controller-Ce76mETT.js +1 -0
- package/dist/chunks/mind-map-delete-CVsxdXfs.js +1 -31
- package/dist/chunks/mind-map-input-CEWRz_t6.js +1 -43
- package/dist/chunks/mind-topic-text-Bn1waxff.js +31 -0
- package/dist/chunks/popover-placement-D3xVYdkt.js +1 -47
- package/dist/chunks/worksheet-engine-c84sdD4N.js +1 -0
- package/dist/chunks/worksheet-preview-DsDVWxIM.js +1 -129
- package/dist/document/viewer.js +30 -289
- package/dist/document.js +120 -3811
- package/dist/export/json.js +1 -5
- package/dist/export/markdown.js +1 -2
- package/dist/export/mindmap.js +1 -2
- package/dist/export/pdf.js +1 -6
- package/dist/export/word.js +1 -2
- package/dist/export.js +1 -2
- package/dist/i18n.js +1 -0
- package/dist/index.js +1 -8
- package/dist/locales/en-US.js +1 -0
- package/dist/locales/es-ES.js +1 -0
- package/dist/locales/ja-JP.js +1 -0
- package/dist/locales/ko-KR.js +1 -0
- package/dist/locales/zh-CN.js +1 -0
- package/dist/locales/zh-TW.js +1 -0
- package/dist/mindmap/viewer.js +1 -6
- package/dist/mindmap.js +3 -123
- package/dist/shared.js +1 -52
- package/dist/spreadsheet/viewer.js +1 -5
- package/dist/spreadsheet/xlsx.js +1 -299
- package/dist/spreadsheet.js +2 -120
- package/dist/styles/callout.css +1 -34
- package/dist/styles/code-block.css +1 -58
- package/dist/styles/content-style.css +1 -619
- package/dist/styles/content-tokens.css +1 -29
- package/dist/styles/editor-interaction.css +1 -621
- package/dist/styles/file-video.css +1 -12
- package/dist/styles/image-preview.css +1 -103
- package/dist/styles/mind-map-block.css +1 -14
- package/dist/styles/mind-map-canvas.css +1 -80
- package/dist/styles/mind-map-comments.css +1 -93
- package/dist/styles/mind-map-details.css +1 -7
- package/dist/styles/mind-map-preview.css +1 -7
- package/dist/styles/mind-map-topic.css +1 -112
- package/dist/styles/page-picker.css +1 -47
- package/dist/styles/renderer.css +1 -45
- package/dist/styles/spreadsheet-editor.css +1 -3
- package/dist/styles/tokens.css +1 -142
- package/dist/styles/video-dialog.css +1 -41
- package/dist/styles/video-embed.css +1 -35
- package/dist/styles.css +1 -2655
- package/dist/types/editor/BlockAffordance.d.ts +5 -2
- package/dist/types/editor/CalloutView.d.ts +2 -1
- package/dist/types/editor/ImagePreview.d.ts +1 -1
- package/dist/types/editor/PagePicker.d.ts +1 -1
- package/dist/types/editor/extensions.d.ts +4 -1
- package/dist/types/engine/editor/block-commands.d.ts +1 -1
- package/dist/types/engine/editor/block-menu-hover.d.ts +16 -0
- package/dist/types/engine/editor/extensions/locale.d.ts +3 -0
- package/dist/types/engine/editor/nodes/image-nodeview.d.ts +1 -1
- package/dist/types/engine/host.d.ts +60 -2
- package/dist/types/engine/renderer/attachments.d.ts +3 -3
- package/dist/types/engine/shared/video-feedback.d.ts +1 -1
- package/dist/types/engine/worksheets/worksheet-engine.d.ts +1 -0
- package/dist/types/engine/worksheets/worksheet-xlsx.d.ts +6 -1
- package/dist/types/host-types.d.ts +2 -60
- package/dist/types/host.d.ts +8 -1
- package/dist/types/i18n.d.ts +3 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/locales/en-US.d.ts +1 -0
- package/dist/types/locales/es-ES.d.ts +1 -0
- package/dist/types/locales/ja-JP.d.ts +1 -0
- package/dist/types/locales/ko-KR.d.ts +1 -0
- package/dist/types/locales/zh-CN.d.ts +1 -0
- package/dist/types/locales/zh-TW.d.ts +1 -0
- package/dist/types/spreadsheet/xlsx.d.ts +1 -1
- package/dist/types/wui/Dropdown.d.ts +2 -1
- package/dist/types/wui/index.d.ts +2 -1
- package/integrity.json +3135 -0
- package/package.json +15 -5
- package/verify-integrity.mjs +138 -0
- package/dist/chunks/AnchoredPanel-Cv4RURwF.js +0 -68
- package/dist/chunks/DocumentExportMenu-BrGipZ59.js +0 -75
- package/dist/chunks/MindMapCanvas-tkFBBs4g.js +0 -2090
- package/dist/chunks/MindMapViewer-DJrryb2Y.js +0 -180
- package/dist/chunks/SpreadsheetViewer-DxCxIUx_.js +0 -163
- package/dist/chunks/comment-hint-B9qcrqvn.js +0 -296
- package/dist/chunks/extensions-ByORRoRa.js +0 -4210
- package/dist/chunks/host-C-V688Rq.js +0 -197
- package/dist/chunks/index-DdfMnva8.js +0 -726
- package/dist/chunks/mind-map-controller-B6SxK3GZ.js +0 -479
- package/dist/chunks/mind-topic-text-DSyb95vL.js +0 -446
- package/dist/chunks/nodes-iKqTGr_N.js +0 -291
- package/dist/chunks/worksheet-engine-TJ54m0KC.js +0 -125
- package/third-party-notices/wendang-export@0.6.0-NOTICE.md.txt +0 -51
- package/third-party-notices/wendang-export@0.6.1-LICENSE.txt +0 -21
- package/third-party-notices/wendang-export@0.6.2-LICENSE.txt +0 -21
- package/third-party-notices/wendang-export@0.6.2-NOTICE.md.txt +0 -70
- /package/third-party-notices/{wendang-export@0.6.0-LICENSE.txt → wendang-export@0.6.3-LICENSE.txt} +0 -0
- /package/third-party-notices/{wendang-export@0.6.1-NOTICE.md.txt → wendang-export@0.6.3-NOTICE.md.txt} +0 -0
|
@@ -1,619 +1 @@
|
|
|
1
|
-
@import './code-block.css';
|
|
2
|
-
@import './callout.css';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* 内容排版**单一真源**。
|
|
6
|
-
*
|
|
7
|
-
* 为什么单独一个文件(对齐《Wiki好用技术方案》1.1 的「单一 schema 真源」):
|
|
8
|
-
* 正文的观感必须在**编辑态与只读态完全一致**。此前编辑端样式写在
|
|
9
|
-
* `EditorPane.vue` 的 `.ywiki-prose`、只读端写在 `renderer/renderer.css`
|
|
10
|
-
* 的 `.doc-renderer`,两份各改各的——实测已经漂移(标题上间距 1.2em vs 1.6em、
|
|
11
|
-
* h5/h6 两端都没定义)。这里收敛为一份,两端只在根元素上带同一个类
|
|
12
|
-
* `ywiki-content`:
|
|
13
|
-
* - 编辑端:`editorProps.attributes.class = 'ywiki-prose ywiki-content'`
|
|
14
|
-
* - 只读端:`DocRenderer` 根节点 `class="doc-renderer ywiki-content"`
|
|
15
|
-
*
|
|
16
|
-
* 只保留「只有一端才有」的规则在各自文件里(如编辑端的块手柄、只读端的
|
|
17
|
-
* 图片懒加载占位)。凡是两端都会渲染的元素,样式只写在这里。
|
|
18
|
-
*
|
|
19
|
-
* 尺度以 docs/Wiki内容区域规范.md 为准;数值是 YWiki 的产品基线。
|
|
20
|
-
* 块间距由文件末尾的 flow 规则统一处理,容器结构使用 :where(),确保编辑根
|
|
21
|
-
* 与阅读根以及兼容 .doc-body 容器的选择器优先级相同。元素规则不再各自声明纵向 margin。
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
/* ---------------------------------------------------------------- 根与节奏 */
|
|
25
|
-
.ywiki-content {
|
|
26
|
-
min-width: 0;
|
|
27
|
-
container-type: inline-size;
|
|
28
|
-
container-name: wiki-content;
|
|
29
|
-
font-size: var(--content-font-size);
|
|
30
|
-
line-height: var(--content-line-height);
|
|
31
|
-
color: var(--content-text-color);
|
|
32
|
-
/* 标点空白裁剪(支持的浏览器生效);不修改正文中的中英文空格。 */
|
|
33
|
-
text-spacing-trim: space-all;
|
|
34
|
-
overflow-wrap: anywhere;
|
|
35
|
-
word-break: normal;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/* reset 与 flow 都只有 .ywiki-content 的一份 class 权重。
|
|
39
|
-
避免 p/ul/pre 的 margin: 0 压过编辑端的相邻块间距。 */
|
|
40
|
-
.ywiki-content :where(p, h1, h2, h3, h4, h5, h6, ul, ol, blockquote, pre, table, hr, img) {
|
|
41
|
-
margin-block: 0;
|
|
42
|
-
}
|
|
43
|
-
/* 用户输入的空段落也必须在阅读端保留一行,不能只在编辑端占高度。 */
|
|
44
|
-
.ywiki-content p:empty {
|
|
45
|
-
min-height: calc(1em * var(--content-line-height));
|
|
46
|
-
}
|
|
47
|
-
.ywiki-content :where(h1, h2, h3, h4, h5, h6):empty {
|
|
48
|
-
min-height: 1.3em;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/* ---------------------------------------------------------------- 标题层级
|
|
52
|
-
标题字号随正文 token 等比缩放。
|
|
53
|
-
字重统一 600(原 650 偏重),标题带轻微负字距更像正文排版而非 UI 文本。 */
|
|
54
|
-
.ywiki-content h1,
|
|
55
|
-
.ywiki-content h2,
|
|
56
|
-
.ywiki-content h3,
|
|
57
|
-
.ywiki-content h4,
|
|
58
|
-
.ywiki-content h5,
|
|
59
|
-
.ywiki-content h6 {
|
|
60
|
-
font-weight: 600;
|
|
61
|
-
color: var(--content-heading-color);
|
|
62
|
-
line-height: 1.3;
|
|
63
|
-
letter-spacing: -0.01em;
|
|
64
|
-
/* 目录跳转时留出顶部空间,避免标题被页头挡住 */
|
|
65
|
-
scroll-margin-top: var(--content-scroll-offset);
|
|
66
|
-
}
|
|
67
|
-
.ywiki-content h1 { font-size: calc(var(--content-font-size) * 1.625); }
|
|
68
|
-
.ywiki-content h2 { font-size: calc(var(--content-font-size) * 1.375); }
|
|
69
|
-
.ywiki-content h3 { font-size: calc(var(--content-font-size) * 1.125); }
|
|
70
|
-
.ywiki-content h4 { font-size: var(--content-font-size); }
|
|
71
|
-
.ywiki-content h5 { font-size: var(--content-font-size); }
|
|
72
|
-
.ywiki-content h6 {
|
|
73
|
-
font-size: var(--content-font-size);
|
|
74
|
-
color: var(--color-text-muted);
|
|
75
|
-
letter-spacing: 0;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/* ---------------------------------------------------------------- 列表 */
|
|
79
|
-
.ywiki-content ul,
|
|
80
|
-
.ywiki-content ol {
|
|
81
|
-
padding-left: 1.5em;
|
|
82
|
-
}
|
|
83
|
-
.ywiki-content ul { list-style: disc; }
|
|
84
|
-
.ywiki-content ol { list-style: decimal; }
|
|
85
|
-
/* 层级用不同符号区分,长嵌套下更容易看清层级。 */
|
|
86
|
-
.ywiki-content ul ul { list-style: circle; }
|
|
87
|
-
.ywiki-content ul ul ul { list-style: square; }
|
|
88
|
-
.ywiki-content li + li { margin-top: var(--space-list-item); }
|
|
89
|
-
.ywiki-content li::marker { color: var(--color-text-muted); }
|
|
90
|
-
/* 列表项段落的 reset 与内部间距同样由 flow 规则提供。 */
|
|
91
|
-
|
|
92
|
-
/* 待办列表:编辑端是 ul[data-type='taskList'],只读端是 ul.doc-task-list。
|
|
93
|
-
勾选框与正文左缘齐平、且与首行文字垂直居中(此前水平缩进 4px、垂直偏低约 5px,
|
|
94
|
-
用户反馈"不对齐")。刻意不用普通列表的 1.5em 缩进——待办项希望勾选框与
|
|
95
|
-
上方段落左对齐,读起来是一条直线。 */
|
|
96
|
-
.ywiki-content ul.doc-task-list,
|
|
97
|
-
.ywiki-content ul[data-type='taskList'] {
|
|
98
|
-
list-style: none;
|
|
99
|
-
padding-left: 0;
|
|
100
|
-
}
|
|
101
|
-
.ywiki-content li.doc-task-item,
|
|
102
|
-
.ywiki-content ul[data-type='taskList'] > li {
|
|
103
|
-
display: flex;
|
|
104
|
-
gap: 0.5em;
|
|
105
|
-
align-items: flex-start;
|
|
106
|
-
line-height: var(--content-line-height);
|
|
107
|
-
}
|
|
108
|
-
.ywiki-content li.doc-task-item > input[type='checkbox'],
|
|
109
|
-
.ywiki-content ul[data-type='taskList'] > li > label > input[type='checkbox'] {
|
|
110
|
-
flex: none;
|
|
111
|
-
font: inherit;
|
|
112
|
-
width: 1em;
|
|
113
|
-
height: 1em;
|
|
114
|
-
margin: 0;
|
|
115
|
-
accent-color: var(--color-accent);
|
|
116
|
-
}
|
|
117
|
-
/* 阅读端的 input 直接参与任务项布局,用上边距对齐首行。
|
|
118
|
-
编辑端由首行等高的 label 居中,不能再给 input 叠加这段偏移。 */
|
|
119
|
-
.ywiki-content li.doc-task-item > input[type='checkbox'] {
|
|
120
|
-
margin-top: calc((var(--content-line-height) - 1) * 0.5em);
|
|
121
|
-
}
|
|
122
|
-
.ywiki-content li.doc-task-item > span,
|
|
123
|
-
.ywiki-content ul[data-type='taskList'] > li > div {
|
|
124
|
-
min-width: 0;
|
|
125
|
-
flex: 1;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/* ---------------------------------------------------------------- 引用 */
|
|
129
|
-
.ywiki-content blockquote {
|
|
130
|
-
border-left: 3px solid var(--color-border-strong);
|
|
131
|
-
padding: 0.1em 0 0.1em 1em;
|
|
132
|
-
color: var(--color-text-muted);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/* 代码块外观由 code-block.css 统一;裸 pre 用于兼容内容。 */
|
|
136
|
-
.ywiki-content pre { overflow:auto; padding:12px 16px; border:1px solid var(--color-border); border-radius:6px; background:var(--color-code-bg); font:13px/22px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; }
|
|
137
|
-
.ywiki-content code { background:var(--color-surface-subtle);border:1px solid var(--color-border);border-radius:4px;padding:.1em .35em;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.875em; }
|
|
138
|
-
|
|
139
|
-
/* ---------------- 编辑端:公式就地编辑(nodeView) ---------------- */
|
|
140
|
-
.math-node { cursor: pointer; }
|
|
141
|
-
/* 渲染结果就位后,把它包在带淡底的容器里,提示"这是一段可点击编辑的公式" */
|
|
142
|
-
.math-node .math-render { border-radius: 4px; }
|
|
143
|
-
.math-node:hover .math-render {
|
|
144
|
-
background: color-mix(in srgb, var(--color-accent) 10%, transparent);
|
|
145
|
-
}
|
|
146
|
-
.math-node.is-editing .math-render { display: none; }
|
|
147
|
-
.math-latex-input {
|
|
148
|
-
width: 100%;
|
|
149
|
-
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
150
|
-
font-size: 0.875em;
|
|
151
|
-
padding: 2px 6px;
|
|
152
|
-
border: 1px solid var(--color-accent);
|
|
153
|
-
border-radius: 4px;
|
|
154
|
-
background: var(--color-surface);
|
|
155
|
-
color: var(--color-text);
|
|
156
|
-
}
|
|
157
|
-
/* ---------------------------------------------------------------- 表格
|
|
158
|
-
文档网格:白色内容区、浅色表头、圆角外框;读写端共用。 */
|
|
159
|
-
.ywiki-content table,
|
|
160
|
-
.ywiki-content .doc-table {
|
|
161
|
-
--table-grid-color: var(--content-table-grid-color);
|
|
162
|
-
--table-header-bg: var(--content-table-header-bg);
|
|
163
|
-
border-collapse: separate;
|
|
164
|
-
border-spacing: 0;
|
|
165
|
-
/* 无显式列宽时按内容分配,避免说明列与短标签列被强制等分。
|
|
166
|
-
有 colwidth 的表格仍通过两端共同的 colgroup + 表宽保留作者尺寸。 */
|
|
167
|
-
table-layout: auto;
|
|
168
|
-
width: 100%;
|
|
169
|
-
font-size: var(--content-table-font-size);
|
|
170
|
-
background: var(--color-surface);
|
|
171
|
-
border: 1px solid var(--table-grid-color);
|
|
172
|
-
border-radius: var(--content-table-radius);
|
|
173
|
-
overflow: hidden;
|
|
174
|
-
}
|
|
175
|
-
.ywiki-content :where(.doc-table-wrap, .tableWrapper) {
|
|
176
|
-
overflow-x: auto;
|
|
177
|
-
scrollbar-width: thin;
|
|
178
|
-
scrollbar-color: var(--color-border-strong) transparent;
|
|
179
|
-
}
|
|
180
|
-
.ywiki-content th,
|
|
181
|
-
.ywiki-content td {
|
|
182
|
-
border: none;
|
|
183
|
-
border-right: 1px solid var(--table-grid-color);
|
|
184
|
-
border-bottom: 1px solid var(--table-grid-color);
|
|
185
|
-
padding: var(--content-table-padding-y) var(--content-table-padding-x);
|
|
186
|
-
line-height: var(--content-table-line-height);
|
|
187
|
-
min-width: 60px;
|
|
188
|
-
text-align: left;
|
|
189
|
-
vertical-align: top;
|
|
190
|
-
overflow-wrap: anywhere;
|
|
191
|
-
}
|
|
192
|
-
.ywiki-content th {
|
|
193
|
-
background: var(--table-header-bg);
|
|
194
|
-
color: var(--content-heading-color);
|
|
195
|
-
font-weight: 600;
|
|
196
|
-
}
|
|
197
|
-
.ywiki-content tr:last-child > :where(td, th) { border-bottom: none; }
|
|
198
|
-
.ywiki-content tr > :where(td, th):last-child { border-right: none; }
|
|
199
|
-
.ywiki-content tr:first-child > :where(td, th):first-child { border-top-left-radius: 5px; }
|
|
200
|
-
.ywiki-content tr:first-child > :where(td, th):last-child { border-top-right-radius: 5px; }
|
|
201
|
-
.ywiki-content tr:last-child > :where(td, th):first-child { border-bottom-left-radius: 5px; }
|
|
202
|
-
.ywiki-content tr:last-child > :where(td, th):last-child { border-bottom-right-radius: 5px; }
|
|
203
|
-
|
|
204
|
-
/* ---------------------------------------------------------------- 分割线 */
|
|
205
|
-
.ywiki-content hr {
|
|
206
|
-
border: none;
|
|
207
|
-
border-top: 1px solid var(--color-border);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/* ---------------------------------------------------------------- 图片 */
|
|
211
|
-
/* 图注(阅读端由 DocRenderer 渲染在图片下方) */
|
|
212
|
-
.ywiki-content .doc-image-caption {
|
|
213
|
-
margin-top: 6px;
|
|
214
|
-
color: var(--color-text-muted);
|
|
215
|
-
font-size: 12px;
|
|
216
|
-
line-height: 1.5;
|
|
217
|
-
text-align: center;
|
|
218
|
-
overflow: hidden;
|
|
219
|
-
text-overflow: ellipsis;
|
|
220
|
-
white-space: nowrap;
|
|
221
|
-
}
|
|
222
|
-
.ywiki-content .doc-image-gallery {
|
|
223
|
-
display: flex;
|
|
224
|
-
flex-wrap: wrap;
|
|
225
|
-
align-items: flex-start;
|
|
226
|
-
gap: 8px;
|
|
227
|
-
width: 100%;
|
|
228
|
-
}
|
|
229
|
-
.ywiki-content .doc-image-gallery > .doc-image[data-sized] {
|
|
230
|
-
/* 图库内的图由容器统一排布,忽略作者对单图设置的宽度。 */
|
|
231
|
-
margin-inline: 0;
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* 图片行:按比例铺满整行(与编辑态同一口径)。
|
|
235
|
-
*
|
|
236
|
-
* 列宽由 `flex-grow: 比例` 分配,高度由 `aspect-ratio` 自动产生,
|
|
237
|
-
* 因此同行几乎等高、右侧没有空白。
|
|
238
|
-
*/
|
|
239
|
-
.ywiki-content .doc-image-gallery {
|
|
240
|
-
gap: var(--content-gallery-gap);
|
|
241
|
-
align-items: flex-start;
|
|
242
|
-
}
|
|
243
|
-
.ywiki-content .doc-image-gallery > .doc-image {
|
|
244
|
-
flex: 1 1 0;
|
|
245
|
-
min-width: 0;
|
|
246
|
-
width: auto;
|
|
247
|
-
height: auto;
|
|
248
|
-
max-width: none;
|
|
249
|
-
margin: 0;
|
|
250
|
-
aspect-ratio: var(--doc-image-aspect-ratio, 1.3333);
|
|
251
|
-
object-fit: contain;
|
|
252
|
-
/* 权重 = 原始比例 × 用户拖角设定的相对缩放 */
|
|
253
|
-
flex-grow: calc(var(--doc-image-aspect-ratio, 1) * var(--doc-image-weight, 1));
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* 带图注的图片在图片行里被一层 `<figure>` 包住,因此 **figure 才是 flex 子项**。
|
|
257
|
-
*
|
|
258
|
-
* 缺了这条规则时 figure 用默认 `flex: 0 1 auto`,按内部图片的固有宽度占位,
|
|
259
|
-
* 整行被挤成多行(实测两张 4:3 图变成上下两行、右侧留白),与"按比例铺满"
|
|
260
|
-
* 的口径不一致。变量由渲染器同时写到 figure 上(见 DocRenderer 的 galleryVars)。
|
|
261
|
-
*/
|
|
262
|
-
.ywiki-content .doc-image-gallery > .doc-image-figure {
|
|
263
|
-
flex: 1 1 0;
|
|
264
|
-
min-width: 0;
|
|
265
|
-
margin: 0;
|
|
266
|
-
flex-grow: calc(var(--doc-image-aspect-ratio, 1) * var(--doc-image-weight, 1));
|
|
267
|
-
}
|
|
268
|
-
.ywiki-content .doc-image-gallery > .doc-image-figure > .doc-image {
|
|
269
|
-
/* 图注容器已按比例分到列宽,图片铺满容器即可。 */
|
|
270
|
-
width: 100%;
|
|
271
|
-
max-width: 100%;
|
|
272
|
-
margin: 0;
|
|
273
|
-
}
|
|
274
|
-
.ywiki-content .doc-image-gallery > .doc-image-figure > .doc-image-caption {
|
|
275
|
-
/* 行内已有 12px 列间距,图注不再额外缩进,跟随图片列宽。 */
|
|
276
|
-
margin-inline: 0;
|
|
277
|
-
}
|
|
278
|
-
.ywiki-content img,
|
|
279
|
-
.ywiki-content .doc-image {
|
|
280
|
-
display: block;
|
|
281
|
-
margin-inline: auto;
|
|
282
|
-
max-width: 100%;
|
|
283
|
-
height: auto;
|
|
284
|
-
border-radius: var(--content-media-radius);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
/**
|
|
288
|
-
* 图片读取中:**渐变沿边框流动**的加载指示。
|
|
289
|
-
*
|
|
290
|
-
* ## 为什么不再用"整块灰底 + 微光"
|
|
291
|
-
*
|
|
292
|
-
* 静态灰块在浅色页面上几乎看不出是在加载,看起来更像"图丢了"或"这里是一块
|
|
293
|
-
* 空白"(用户多轮反馈)。改成一条沿边框奔跑的渐变——像贪吃蛇那样顺着圆角
|
|
294
|
-
* 绕圈,既明确表达"正在取",又不会往图片区域里填任何东西。
|
|
295
|
-
*
|
|
296
|
-
* ## 实现要点
|
|
297
|
-
*
|
|
298
|
-
* 1. **conic-gradient + 遮罩挖空**:整块铺一个锥形渐变,再用
|
|
299
|
-
* `mask-composite: exclude` 把中间挖掉,只留 2px 的一圈。
|
|
300
|
-
* `<img>` 是替换元素、`::before` 不渲染,所以不能像普通元素那样做双层。
|
|
301
|
-
* 2. **旋转靠 `@property` 注册角度变量**:conic-gradient 的 `from` 角度是离散值,
|
|
302
|
-
* 只有注册成 `<angle>` 类型才能被 `@keyframes` 平滑插值。不支持 `@property`
|
|
303
|
-
* 的浏览器会停在静态渐变上(仍有边框,只是不转)。
|
|
304
|
-
* 3. **加载完成时 `data-loading` 消失** → 遮罩一并移除,图片正常显示,
|
|
305
|
-
* 不会因为残留的 mask 把图片裁掉。
|
|
306
|
-
*/
|
|
307
|
-
@property --ywiki-image-flow-angle {
|
|
308
|
-
syntax: '<angle>';
|
|
309
|
-
initial-value: 0deg;
|
|
310
|
-
inherits: false;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
.ywiki-content .doc-image[data-loading] {
|
|
314
|
-
box-sizing: border-box;
|
|
315
|
-
/* 这 3px 就是"边框"的厚度:遮罩只保留它,中间透明 */
|
|
316
|
-
padding: 3px;
|
|
317
|
-
border-radius: var(--content-media-radius);
|
|
318
|
-
background-image: conic-gradient(
|
|
319
|
-
from var(--ywiki-image-flow-angle),
|
|
320
|
-
color-mix(in srgb, var(--color-accent) 14%, var(--color-surface-subtle)) 0turn 55%,
|
|
321
|
-
color-mix(in srgb, var(--color-accent) 55%, transparent) 78%,
|
|
322
|
-
var(--color-accent) 92%,
|
|
323
|
-
color-mix(in srgb, var(--color-accent) 14%, var(--color-surface-subtle)) 100%
|
|
324
|
-
);
|
|
325
|
-
-webkit-mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
|
|
326
|
-
-webkit-mask-clip: content-box, border-box;
|
|
327
|
-
-webkit-mask-composite: xor;
|
|
328
|
-
mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
|
|
329
|
-
mask-clip: content-box, border-box;
|
|
330
|
-
mask-composite: exclude;
|
|
331
|
-
animation: ywiki-image-flow 1.4s linear infinite;
|
|
332
|
-
/* 独立图片没有 aspect-ratio 可撑高:给一个最小高度,否则框不可见 */
|
|
333
|
-
min-height: 120px;
|
|
334
|
-
}
|
|
335
|
-
/* 图片行内的高度由 aspect-ratio 决定,不要再叠加最小高度(会把行撑高) */
|
|
336
|
-
.ywiki-content .doc-image-gallery > .doc-image[data-loading] {
|
|
337
|
-
min-height: 0;
|
|
338
|
-
}
|
|
339
|
-
@keyframes ywiki-image-flow {
|
|
340
|
-
to { --ywiki-image-flow-angle: 360deg; }
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* 加载失败:一条很淡的实线边框 + 极浅底色,**不流动**。
|
|
344
|
-
*
|
|
345
|
-
* 与"加载中"靠"有没有在转"区分:正在转 = 还在取,静止 = 取不到。不需要图标
|
|
346
|
-
* 或文字(它们在大块图片里比图片本身还抢眼,用户实测反馈更丑)。
|
|
347
|
-
* 不用虚线:虚线在缩略图上会碎成一段段,看起来像边框画错了。
|
|
348
|
-
*/
|
|
349
|
-
.ywiki-content .doc-image[data-image-error] {
|
|
350
|
-
box-sizing: border-box;
|
|
351
|
-
min-height: 72px;
|
|
352
|
-
background-color: color-mix(in srgb, var(--color-surface-subtle) 70%, var(--color-border));
|
|
353
|
-
border-radius: var(--content-media-radius);
|
|
354
|
-
outline: 1px solid color-mix(in srgb, var(--color-border-strong) 55%, transparent);
|
|
355
|
-
outline-offset: -1px;
|
|
356
|
-
/*
|
|
357
|
-
* 破图图标不在这里处理:组件在失败时给 `<img>` 换上透明像素(见
|
|
358
|
-
* `LazyAttachmentImage` 的 `TRANSPARENT_PIXEL`)。CSS 侧的 `content: ''`、
|
|
359
|
-
* `text-indent`、`font-size: 0` 都盖不住浏览器为失败图片绘制的那个图标。
|
|
360
|
-
*/
|
|
361
|
-
}
|
|
362
|
-
.ywiki-content .doc-image-gallery > .doc-image[data-image-error] {
|
|
363
|
-
min-height: 0;
|
|
364
|
-
}
|
|
365
|
-
@media (prefers-reduced-motion: reduce) {
|
|
366
|
-
/* 减少动效:保留渐变的光段,只是不再旋转 */
|
|
367
|
-
.ywiki-content .doc-image[data-loading] {
|
|
368
|
-
animation: none;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
/*
|
|
373
|
-
* 作者显式缩放过的图片(data-sized):**左对齐**,宽度即作者设定值。
|
|
374
|
-
* 与编辑端同一口径(EditorPane 的 .ywiki-image-frame[data-sized]):
|
|
375
|
-
* 缩放锚点固定在左缘,编辑端与阅读端观感一致;未缩放的图仍居中。
|
|
376
|
-
*/
|
|
377
|
-
.ywiki-content .doc-image[data-sized] {
|
|
378
|
-
margin-left: 0;
|
|
379
|
-
margin-right: auto;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
/*
|
|
383
|
-
* 图片工具条设置的显式对齐(data-align)优先于上面的默认规则。
|
|
384
|
-
* 三端共用同一语义:编辑端用 flex 对齐容器,阅读端用 margin 对齐图片。
|
|
385
|
-
*/
|
|
386
|
-
.ywiki-content .doc-image[data-align='left'] { margin-left: 0; margin-right: auto; }
|
|
387
|
-
.ywiki-content .doc-image[data-align='center'] { margin-left: auto; margin-right: auto; }
|
|
388
|
-
.ywiki-content .doc-image[data-align='right'] { margin-left: auto; margin-right: 0; }
|
|
389
|
-
|
|
390
|
-
/* ---------------------------------------------------------------- 链接与行内 chip */
|
|
391
|
-
.ywiki-content a,
|
|
392
|
-
.ywiki-content .doc-link {
|
|
393
|
-
color: var(--color-accent);
|
|
394
|
-
text-decoration: none;
|
|
395
|
-
}
|
|
396
|
-
.ywiki-content a:hover,
|
|
397
|
-
.ywiki-content .doc-link:hover { text-decoration: underline; }
|
|
398
|
-
|
|
399
|
-
/* 页面引用:蓝色文字 + 淡下划线。 */
|
|
400
|
-
.ywiki-content .doc-page-link {
|
|
401
|
-
color: var(--color-accent);
|
|
402
|
-
text-decoration: none;
|
|
403
|
-
border-bottom: 1px solid color-mix(in srgb, var(--color-accent) 40%, transparent);
|
|
404
|
-
}
|
|
405
|
-
.ywiki-content .doc-page-link:hover {
|
|
406
|
-
border-bottom-color: var(--color-accent);
|
|
407
|
-
text-decoration: none;
|
|
408
|
-
}
|
|
409
|
-
.ywiki-content .doc-page-link-plain { color: var(--color-text); }
|
|
410
|
-
|
|
411
|
-
/* @提及:蓝色药丸 */
|
|
412
|
-
.ywiki-content .doc-mention {
|
|
413
|
-
color: var(--color-accent);
|
|
414
|
-
background: var(--color-accent-soft);
|
|
415
|
-
border-radius: 4px;
|
|
416
|
-
padding: 0.05em 0.35em;
|
|
417
|
-
font-size: 0.95em;
|
|
418
|
-
font-weight: 500;
|
|
419
|
-
white-space: nowrap;
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
/* 文字高亮:无自定义颜色时的默认底色(自定义色走内联 style 覆盖) */
|
|
423
|
-
.ywiki-content mark,
|
|
424
|
-
.ywiki-content .doc-mark-highlight {
|
|
425
|
-
background: color-mix(in srgb, var(--color-warning) 30%, transparent);
|
|
426
|
-
border-radius: 2px;
|
|
427
|
-
padding: 0.05em 0.1em;
|
|
428
|
-
color: inherit;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
/* ---------------------------------------------------------------- 分栏 */
|
|
432
|
-
.ywiki-content .doc-columns {
|
|
433
|
-
display: flex;
|
|
434
|
-
gap: 16px;
|
|
435
|
-
align-items: flex-start;
|
|
436
|
-
}
|
|
437
|
-
.ywiki-content .doc-column { flex: 1 1 0; min-width: 0; }
|
|
438
|
-
.ywiki-content .doc-column > *:first-child { margin-top: 0; }
|
|
439
|
-
@media (max-width: 560px) {
|
|
440
|
-
.ywiki-content .doc-columns { flex-direction: column; gap: 10px; }
|
|
441
|
-
}
|
|
442
|
-
@container wiki-content (max-width: 560px) {
|
|
443
|
-
.ywiki-content .doc-columns { flex-direction: column; gap: 10px; }
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
/* ---------------------------------------------------------------- 公式 */
|
|
447
|
-
.ywiki-content .doc-math-inline { display: inline-block; vertical-align: middle; }
|
|
448
|
-
.ywiki-content .doc-math-block {
|
|
449
|
-
display: block;
|
|
450
|
-
overflow-x: auto;
|
|
451
|
-
padding: 8px 0;
|
|
452
|
-
text-align: center;
|
|
453
|
-
}
|
|
454
|
-
.doc-math-pending {
|
|
455
|
-
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
456
|
-
font-size: 0.875em;
|
|
457
|
-
color: var(--color-text-muted);
|
|
458
|
-
}
|
|
459
|
-
.doc-math-error {
|
|
460
|
-
border: 1px dashed color-mix(in srgb, var(--color-danger) 50%, transparent);
|
|
461
|
-
border-radius: 4px;
|
|
462
|
-
padding: 0 4px;
|
|
463
|
-
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
464
|
-
font-size: 0.875em;
|
|
465
|
-
color: var(--color-danger);
|
|
466
|
-
}
|
|
467
|
-
.doc-math-error-hint { margin-left: 6px; font-size: 0.85em; opacity: 0.8; }
|
|
468
|
-
|
|
469
|
-
/* ---------------------------------------------------------------- 文件与媒体
|
|
470
|
-
编辑 NodeView 与阅读卡片的结构类不同,盒模型与正文均由这一份样式提供。 */
|
|
471
|
-
.ywiki-content :where(.doc-file, .doc-file-attachment) {
|
|
472
|
-
border: 1px solid var(--color-border);
|
|
473
|
-
border-radius: 8px;
|
|
474
|
-
padding: 10px 12px;
|
|
475
|
-
background: var(--color-surface-subtle);
|
|
476
|
-
font-size: 14px;
|
|
477
|
-
color: var(--color-text-muted);
|
|
478
|
-
}
|
|
479
|
-
.ywiki-content .doc-file-head { display: flex; align-items: center; gap: 8px; }
|
|
480
|
-
.ywiki-content .doc-file-icon { flex: none; }
|
|
481
|
-
.ywiki-content .doc-file-name {
|
|
482
|
-
flex: 1;
|
|
483
|
-
min-width: 0;
|
|
484
|
-
overflow: hidden;
|
|
485
|
-
text-overflow: ellipsis;
|
|
486
|
-
white-space: nowrap;
|
|
487
|
-
}
|
|
488
|
-
.ywiki-content .doc-file-size { flex: none; font-size: 12px; color: var(--color-text-faint); }
|
|
489
|
-
.ywiki-content .doc-file-action {
|
|
490
|
-
flex: none;
|
|
491
|
-
border: 1px solid var(--color-border);
|
|
492
|
-
background: var(--color-surface);
|
|
493
|
-
border-radius: 6px;
|
|
494
|
-
padding: 2px 10px;
|
|
495
|
-
font-size: 12px;
|
|
496
|
-
color: var(--color-text-muted);
|
|
497
|
-
cursor: pointer;
|
|
498
|
-
}
|
|
499
|
-
.ywiki-content .doc-file-action:hover { color: var(--color-accent); border-color: var(--color-accent); }
|
|
500
|
-
.ywiki-content video.doc-file-video {
|
|
501
|
-
display: block;
|
|
502
|
-
width: 100%;
|
|
503
|
-
max-height: 420px;
|
|
504
|
-
margin-top: 8px;
|
|
505
|
-
border-radius: 6px;
|
|
506
|
-
background: #000;
|
|
507
|
-
}
|
|
508
|
-
.ywiki-content img.doc-file-image {
|
|
509
|
-
display: block;
|
|
510
|
-
max-width: 100%;
|
|
511
|
-
margin: 8px 0 0;
|
|
512
|
-
border-radius: 6px;
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
/* ---------------------------------------------------------------- 行内评论高亮
|
|
516
|
-
编辑端与只读端共用同一套观感。
|
|
517
|
-
|
|
518
|
-
## 同一黄色系三档,靠深浅表达强弱
|
|
519
|
-
|
|
520
|
-
早先用 `--color-warning`(偏橙棕)叠 22%,是脏橘色、与正文高亮分不清;
|
|
521
|
-
后来改淡米黄又太浅("看不到评论的选中区");再后来"有回复"用蓝色区分,
|
|
522
|
-
用户反馈与黄色差别太大、容易误读成两类东西("可以搞多色,但是不要影响
|
|
523
|
-
用户心智")。
|
|
524
|
-
|
|
525
|
-
现在三档都在黄色家族里:普通评论亮黄底 + 深琥珀下划线,有回复加深一档,
|
|
526
|
-
激活再深一档。下划线用深琥珀而不是亮黄——底色变亮后,浅色下划线在浅蓝
|
|
527
|
-
或白色背景上都看不清(用户反馈"这个看不清,底部和背景色")。
|
|
528
|
-
|
|
529
|
-
## 方角,不用圆角
|
|
530
|
-
|
|
531
|
-
`border-radius: 0`(用户明确要求)。标记是"文字底下的一条色带",
|
|
532
|
-
圆角会让它在行内显得像按钮。
|
|
533
|
-
|
|
534
|
-
## 提示不用原生 title
|
|
535
|
-
|
|
536
|
-
`title` 由浏览器绘制、样式不可控,这里由 `shared/comment-hint.ts` 自绘。 */
|
|
537
|
-
.ywiki-content .doc-inline-comment {
|
|
538
|
-
background: var(--comment-mark-bg, #ffe58f);
|
|
539
|
-
border-bottom: 2px solid var(--comment-mark-line, #d48806);
|
|
540
|
-
border-radius: 0;
|
|
541
|
-
/* 让底色与文字之间留一点空隙,读起来像"标记"而不是"文字被染色" */
|
|
542
|
-
padding-bottom: 1px;
|
|
543
|
-
cursor: pointer;
|
|
544
|
-
}
|
|
545
|
-
.ywiki-content .doc-inline-comment.has-replies {
|
|
546
|
-
background: var(--comment-mark-bg-reply, #ffd666);
|
|
547
|
-
border-bottom-color: var(--comment-mark-line-reply, #ad6800);
|
|
548
|
-
}
|
|
549
|
-
.ywiki-content .doc-inline-comment.is-active {
|
|
550
|
-
background: var(--comment-mark-bg-active, #ffc53d);
|
|
551
|
-
border-bottom-color: var(--comment-mark-line-active, #ad6800);
|
|
552
|
-
/* 激活项加一圈同色细边:与"有评论"区分开,一眼看出当前在看哪条 */
|
|
553
|
-
outline: 1px solid var(--comment-mark-line-active, #ad6800);
|
|
554
|
-
outline-offset: 1px;
|
|
555
|
-
}
|
|
556
|
-
/* 原文被改动:零宽落点用左侧竖线标记,避免伪装成正常高亮 */
|
|
557
|
-
.ywiki-content .doc-inline-comment.is-shifted {
|
|
558
|
-
border-left: 2px solid var(--color-danger);
|
|
559
|
-
padding-left: 1px;
|
|
560
|
-
background: transparent;
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
/* ---------------------------------------------------------------- 块流
|
|
564
|
-
两端的结构路径放进 :where(),统一为 (0,1,0) 权重。规则放在元素 reset 之后,
|
|
565
|
-
不以 !important 或逐个给 h/p 添加 class 来补偿 DOM 包装差异。
|
|
566
|
-
引用、高亮块、分栏、单元格内部使用同一节奏,首尾不产生额外空白。 */
|
|
567
|
-
.ywiki-content > * + *,
|
|
568
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th) > * + * {
|
|
569
|
-
margin-top: var(--space-block);
|
|
570
|
-
}
|
|
571
|
-
.ywiki-content > :where(h1, h2, h3, h4, h5, h6),
|
|
572
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th) > :where(h1, h2, h3, h4, h5, h6) {
|
|
573
|
-
margin-top: var(--space-heading-top);
|
|
574
|
-
}
|
|
575
|
-
/* 标题与其后的内容是一组,连续标题也保持紧凑。 */
|
|
576
|
-
.ywiki-content > :where(h1, h2, h3, h4, h5, h6) + *,
|
|
577
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th) > :where(h1, h2, h3, h4, h5, h6) + * {
|
|
578
|
-
margin-top: var(--space-heading-bottom);
|
|
579
|
-
}
|
|
580
|
-
/* 待办项的 label 和内容容器横向排列,不在二者之间加纵向块间距。 */
|
|
581
|
-
/* TaskItem 的编辑 node view 没有 data-type,必须根据父 taskList 识别。 */
|
|
582
|
-
.ywiki-content :where(li:not(.doc-task-item):not(ul[data-type='taskList'] > li), li > div, li > span) > * + * {
|
|
583
|
-
margin-top: var(--space-list-block);
|
|
584
|
-
}
|
|
585
|
-
/* 结构模块与普通段落分开:两边都留模块间距,不能由短段距挤在一起。
|
|
586
|
-
编辑 nodeView 与阅读包装分别列明,单元格最后再按其内部紧凑规则覆盖。 */
|
|
587
|
-
.ywiki-content > :where(ul, ol, blockquote, pre, table, img, .tableWrapper, .doc-table-wrap, .code-block-wrap, .doc-code-wrap, .ywiki-image-frame, .doc-image, .doc-callout, .doc-columns, .doc-file-attachment, .doc-file-video, .doc-video-embed, [data-video-embed], .doc-math-block, .math-block) ,
|
|
588
|
-
.ywiki-content > :where(ul, ol, blockquote, pre, table, img, .tableWrapper, .doc-table-wrap, .code-block-wrap, .doc-code-wrap, .ywiki-image-frame, .doc-image, .doc-callout, .doc-columns, .doc-file-attachment, .doc-file-video, .doc-video-embed, [data-video-embed], .doc-math-block, .math-block) + *,
|
|
589
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column) > :where(ul, ol, blockquote, pre, table, img, .tableWrapper, .doc-table-wrap, .code-block-wrap, .doc-code-wrap, .ywiki-image-frame, .doc-image, .doc-callout, .doc-columns, .doc-file-attachment, .doc-file-video, .doc-video-embed, [data-video-embed], .doc-math-block, .math-block),
|
|
590
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column) > :where(ul, ol, blockquote, pre, table, img, .tableWrapper, .doc-table-wrap, .code-block-wrap, .doc-code-wrap, .ywiki-image-frame, .doc-image, .doc-callout, .doc-columns, .doc-file-attachment, .doc-file-video, .doc-video-embed, [data-video-embed], .doc-math-block, .math-block) + * {
|
|
591
|
-
margin-top: var(--space-module);
|
|
592
|
-
}
|
|
593
|
-
/* 标题是章节边界;即使前面是表格、代码或媒体,也保留足够章节留白。 */
|
|
594
|
-
.ywiki-content > :where(h1, h2, h3, h4, h5, h6),
|
|
595
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column) > :where(h1, h2, h3, h4, h5, h6) {
|
|
596
|
-
margin-top: var(--space-heading-top);
|
|
597
|
-
}
|
|
598
|
-
.ywiki-content > :where(h1, h2, h3, h4, h5, h6) + *,
|
|
599
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column) > :where(h1, h2, h3, h4, h5, h6) + * {
|
|
600
|
-
margin-top: var(--space-heading-bottom);
|
|
601
|
-
}
|
|
602
|
-
.ywiki-content > hr,
|
|
603
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th) > hr {
|
|
604
|
-
margin-block: var(--space-divider);
|
|
605
|
-
}
|
|
606
|
-
.ywiki-content > :first-child,
|
|
607
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th, li, li > div, li > span) > :first-child {
|
|
608
|
-
margin-top: 0;
|
|
609
|
-
}
|
|
610
|
-
.ywiki-content > :last-child,
|
|
611
|
-
.ywiki-content :where(.doc-body, blockquote, .doc-callout-content, .doc-column, td, th, li, li > div, li > span) > :last-child {
|
|
612
|
-
margin-bottom: 0;
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
/* 文档表格有自己的紧凑节奏,仍保留作者输入的空段落与显式加粗。 */
|
|
616
|
-
.ywiki-content :where(td, th) > * + * { margin-top: 0.25em; }
|
|
617
|
-
.ywiki-content :where(td, th) > :first-child { margin-top: 0; }
|
|
618
|
-
.ywiki-content :where(td, th) > :where(p, ul, ol) { font-weight: inherit; }
|
|
619
|
-
.ywiki-content :where(td, th) > p:empty { min-height: calc(1em * var(--content-table-line-height)); }
|
|
1
|
+
@import"./code-block.css";@import"./callout.css";.ywiki-content{min-width:0;container-type:inline-size;container-name:wiki-content;font-size:var(--content-font-size);line-height:var(--content-line-height);color:var(--content-text-color);text-spacing-trim:space-all;overflow-wrap:anywhere;word-break:normal}.ywiki-content :where(p,h1,h2,h3,h4,h5,h6,ul,ol,blockquote,pre,table,hr,img){margin-block:0}.ywiki-content p:empty{min-height:calc(1em * var(--content-line-height))}.ywiki-content :where(h1,h2,h3,h4,h5,h6):empty{min-height:1.3em}.ywiki-content h1,.ywiki-content h2,.ywiki-content h3,.ywiki-content h4,.ywiki-content h5,.ywiki-content h6{font-weight:600;color:var(--content-heading-color);line-height:1.3;letter-spacing:-.01em;scroll-margin-top:var(--content-scroll-offset)}.ywiki-content h1{font-size:calc(var(--content-font-size) * 1.625)}.ywiki-content h2{font-size:calc(var(--content-font-size) * 1.375)}.ywiki-content h3{font-size:calc(var(--content-font-size) * 1.125)}.ywiki-content h4,.ywiki-content h5{font-size:var(--content-font-size)}.ywiki-content h6{font-size:var(--content-font-size);color:var(--color-text-muted);letter-spacing:0}.ywiki-content ul,.ywiki-content ol{padding-left:1.5em}.ywiki-content ul{list-style:disc}.ywiki-content ol{list-style:decimal}.ywiki-content ul ul{list-style:circle}.ywiki-content ul ul ul{list-style:square}.ywiki-content li+li{margin-top:var(--space-list-item)}.ywiki-content li::marker{color:var(--color-text-muted)}.ywiki-content ul.doc-task-list,.ywiki-content ul[data-type=taskList]{list-style:none;padding-left:0}.ywiki-content li.doc-task-item,.ywiki-content ul[data-type=taskList]>li{display:flex;gap:.5em;align-items:flex-start;line-height:var(--content-line-height)}.ywiki-content li.doc-task-item>input[type=checkbox],.ywiki-content ul[data-type=taskList]>li>label>input[type=checkbox]{flex:none;font:inherit;width:1em;height:1em;margin:0;accent-color:var(--color-accent)}.ywiki-content li.doc-task-item>input[type=checkbox]{margin-top:calc((var(--content-line-height) - 1) * .5em)}.ywiki-content li.doc-task-item>span,.ywiki-content ul[data-type=taskList]>li>div{min-width:0;flex:1}.ywiki-content blockquote{border-left:3px solid var(--color-border-strong);padding:.1em 0 .1em 1em;color:var(--color-text-muted)}.ywiki-content pre{overflow:auto;padding:12px 16px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-code-bg);font:13px/22px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.ywiki-content code{background:var(--color-surface-subtle);border:1px solid var(--color-border);border-radius:4px;padding:.1em .35em;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.875em}.math-node{cursor:pointer}.math-node .math-render{border-radius:4px}.math-node:hover .math-render{background:color-mix(in srgb,var(--color-accent) 10%,transparent)}.math-node.is-editing .math-render{display:none}.math-latex-input{width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.875em;padding:2px 6px;border:1px solid var(--color-accent);border-radius:4px;background:var(--color-surface);color:var(--color-text)}.ywiki-content table,.ywiki-content .doc-table{--table-grid-color: var(--content-table-grid-color);--table-header-bg: var(--content-table-header-bg);border-collapse:separate;border-spacing:0;table-layout:auto;width:100%;font-size:var(--content-table-font-size);background:var(--color-surface);border:1px solid var(--table-grid-color);border-radius:var(--content-table-radius);overflow:hidden}.ywiki-content :where(.doc-table-wrap,.tableWrapper){overflow-x:auto;scrollbar-width:thin;scrollbar-color:var(--color-border-strong) transparent}.ywiki-content th,.ywiki-content td{border:none;border-right:1px solid var(--table-grid-color);border-bottom:1px solid var(--table-grid-color);padding:var(--content-table-padding-y) var(--content-table-padding-x);line-height:var(--content-table-line-height);min-width:60px;text-align:left;vertical-align:top;overflow-wrap:anywhere}.ywiki-content th{background:var(--table-header-bg);color:var(--content-heading-color);font-weight:600}.ywiki-content tr:last-child>:where(td,th){border-bottom:none}.ywiki-content tr>:where(td,th):last-child{border-right:none}.ywiki-content tr:first-child>:where(td,th):first-child{border-top-left-radius:5px}.ywiki-content tr:first-child>:where(td,th):last-child{border-top-right-radius:5px}.ywiki-content tr:last-child>:where(td,th):first-child{border-bottom-left-radius:5px}.ywiki-content tr:last-child>:where(td,th):last-child{border-bottom-right-radius:5px}.ywiki-content hr{border:none;border-top:1px solid var(--color-border)}.ywiki-content .doc-image-caption{margin-top:6px;color:var(--color-text-muted);font-size:12px;line-height:1.5;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ywiki-content .doc-image-gallery{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;width:100%}.ywiki-content .doc-image-gallery>.doc-image[data-sized]{margin-inline:0}.ywiki-content .doc-image-gallery{gap:var(--content-gallery-gap);align-items:flex-start}.ywiki-content .doc-image-gallery>.doc-image{flex:1 1 0;min-width:0;width:auto;height:auto;max-width:none;margin:0;aspect-ratio:var(--doc-image-aspect-ratio, 1.3333);object-fit:contain;flex-grow:calc(var(--doc-image-aspect-ratio, 1) * var(--doc-image-weight, 1))}.ywiki-content .doc-image-gallery>.doc-image-figure{flex:1 1 0;min-width:0;margin:0;flex-grow:calc(var(--doc-image-aspect-ratio, 1) * var(--doc-image-weight, 1))}.ywiki-content .doc-image-gallery>.doc-image-figure>.doc-image{width:100%;max-width:100%;margin:0}.ywiki-content .doc-image-gallery>.doc-image-figure>.doc-image-caption{margin-inline:0}.ywiki-content img,.ywiki-content .doc-image{display:block;margin-inline:auto;max-width:100%;height:auto;border-radius:var(--content-media-radius)}@property --ywiki-image-flow-angle{syntax: "<angle>"; initial-value: 0deg; inherits: false;}.ywiki-content .doc-image[data-loading]{box-sizing:border-box;padding:3px;border-radius:var(--content-media-radius);background-image:conic-gradient(from var(--ywiki-image-flow-angle),color-mix(in srgb,var(--color-accent) 14%,var(--color-surface-subtle)) 0turn 55%,color-mix(in srgb,var(--color-accent) 55%,transparent) 78%,var(--color-accent) 92%,color-mix(in srgb,var(--color-accent) 14%,var(--color-surface-subtle)) 100%);-webkit-mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);-webkit-mask-clip:content-box,border-box;-webkit-mask-composite:xor;mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);mask-clip:content-box,border-box;mask-composite:exclude;animation:ywiki-image-flow 1.4s linear infinite;min-height:120px}.ywiki-content .doc-image-gallery>.doc-image[data-loading]{min-height:0}@keyframes ywiki-image-flow{to{--ywiki-image-flow-angle: 360deg}}.ywiki-content .doc-image[data-image-error]{box-sizing:border-box;min-height:72px;background-color:color-mix(in srgb,var(--color-surface-subtle) 70%,var(--color-border));border-radius:var(--content-media-radius);outline:1px solid color-mix(in srgb,var(--color-border-strong) 55%,transparent);outline-offset:-1px}.ywiki-content .doc-image-gallery>.doc-image[data-image-error]{min-height:0}@media(prefers-reduced-motion:reduce){.ywiki-content .doc-image[data-loading]{animation:none}}.ywiki-content .doc-image[data-sized],.ywiki-content .doc-image[data-align=left]{margin-left:0;margin-right:auto}.ywiki-content .doc-image[data-align=center]{margin-left:auto;margin-right:auto}.ywiki-content .doc-image[data-align=right]{margin-left:auto;margin-right:0}.ywiki-content a,.ywiki-content .doc-link{color:var(--color-accent);text-decoration:none}.ywiki-content a:hover,.ywiki-content .doc-link:hover{text-decoration:underline}.ywiki-content .doc-page-link{color:var(--color-accent);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--color-accent) 40%,transparent)}.ywiki-content .doc-page-link:hover{border-bottom-color:var(--color-accent);text-decoration:none}.ywiki-content .doc-page-link-plain{color:var(--color-text)}.ywiki-content .doc-mention{color:var(--color-accent);background:var(--color-accent-soft);border-radius:4px;padding:.05em .35em;font-size:.95em;font-weight:500;white-space:nowrap}.ywiki-content mark,.ywiki-content .doc-mark-highlight{background:color-mix(in srgb,var(--color-warning) 30%,transparent);border-radius:2px;padding:.05em .1em;color:inherit}.ywiki-content .doc-columns{display:flex;gap:16px;align-items:flex-start}.ywiki-content .doc-column{flex:1 1 0;min-width:0}.ywiki-content .doc-column>*:first-child{margin-top:0}@media(max-width:560px){.ywiki-content .doc-columns{flex-direction:column;gap:10px}}@container wiki-content (max-width: 560px){.ywiki-content .doc-columns{flex-direction:column;gap:10px}}.ywiki-content .doc-math-inline{display:inline-block;vertical-align:middle}.ywiki-content .doc-math-block{display:block;overflow-x:auto;padding:8px 0;text-align:center}.doc-math-pending{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.875em;color:var(--color-text-muted)}.doc-math-error{border:1px dashed color-mix(in srgb,var(--color-danger) 50%,transparent);border-radius:4px;padding:0 4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.875em;color:var(--color-danger)}.doc-math-error-hint{margin-left:6px;font-size:.85em;opacity:.8}.ywiki-content :where(.doc-file,.doc-file-attachment){border:1px solid var(--color-border);border-radius:8px;padding:10px 12px;background:var(--color-surface-subtle);font-size:14px;color:var(--color-text-muted)}.ywiki-content .doc-file-head{display:flex;align-items:center;gap:8px}.ywiki-content .doc-file-icon{flex:none}.ywiki-content .doc-file-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ywiki-content .doc-file-size{flex:none;font-size:12px;color:var(--color-text-faint)}.ywiki-content .doc-file-action{flex:none;border:1px solid var(--color-border);background:var(--color-surface);border-radius:6px;padding:2px 10px;font-size:12px;color:var(--color-text-muted);cursor:pointer}.ywiki-content .doc-file-action:hover{color:var(--color-accent);border-color:var(--color-accent)}.ywiki-content video.doc-file-video{display:block;width:100%;max-height:420px;margin-top:8px;border-radius:6px;background:#000}.ywiki-content img.doc-file-image{display:block;max-width:100%;margin:8px 0 0;border-radius:6px}.ywiki-content .doc-inline-comment{background:var(--comment-mark-bg, #ffe58f);border-bottom:2px solid var(--comment-mark-line, #d48806);border-radius:0;padding-bottom:1px;cursor:pointer}.ywiki-content .doc-inline-comment.has-replies{background:var(--comment-mark-bg-reply, #ffd666);border-bottom-color:var(--comment-mark-line-reply, #ad6800)}.ywiki-content .doc-inline-comment.is-active{background:var(--comment-mark-bg-active, #ffc53d);border-bottom-color:var(--comment-mark-line-active, #ad6800);outline:1px solid var(--comment-mark-line-active, #ad6800);outline-offset:1px}.ywiki-content .doc-inline-comment.is-shifted{border-left:2px solid var(--color-danger);padding-left:1px;background:transparent}.ywiki-content>*+*,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th)>*+*{margin-top:var(--space-block)}.ywiki-content>:where(h1,h2,h3,h4,h5,h6),.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th)>:where(h1,h2,h3,h4,h5,h6){margin-top:var(--space-heading-top)}.ywiki-content>:where(h1,h2,h3,h4,h5,h6)+*,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th)>:where(h1,h2,h3,h4,h5,h6)+*{margin-top:var(--space-heading-bottom)}.ywiki-content :where(li:not(.doc-task-item):not(ul[data-type=taskList]>li),li>div,li>span)>*+*{margin-top:var(--space-list-block)}.ywiki-content>:where(ul,ol,blockquote,pre,table,img,.tableWrapper,.doc-table-wrap,.code-block-wrap,.doc-code-wrap,.ywiki-image-frame,.doc-image,.doc-callout,.doc-columns,.doc-file-attachment,.doc-file-video,.doc-video-embed,[data-video-embed],.doc-math-block,.math-block),.ywiki-content>:where(ul,ol,blockquote,pre,table,img,.tableWrapper,.doc-table-wrap,.code-block-wrap,.doc-code-wrap,.ywiki-image-frame,.doc-image,.doc-callout,.doc-columns,.doc-file-attachment,.doc-file-video,.doc-video-embed,[data-video-embed],.doc-math-block,.math-block)+*,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column)>:where(ul,ol,blockquote,pre,table,img,.tableWrapper,.doc-table-wrap,.code-block-wrap,.doc-code-wrap,.ywiki-image-frame,.doc-image,.doc-callout,.doc-columns,.doc-file-attachment,.doc-file-video,.doc-video-embed,[data-video-embed],.doc-math-block,.math-block),.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column)>:where(ul,ol,blockquote,pre,table,img,.tableWrapper,.doc-table-wrap,.code-block-wrap,.doc-code-wrap,.ywiki-image-frame,.doc-image,.doc-callout,.doc-columns,.doc-file-attachment,.doc-file-video,.doc-video-embed,[data-video-embed],.doc-math-block,.math-block)+*{margin-top:var(--space-module)}.ywiki-content>:where(h1,h2,h3,h4,h5,h6),.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column)>:where(h1,h2,h3,h4,h5,h6){margin-top:var(--space-heading-top)}.ywiki-content>:where(h1,h2,h3,h4,h5,h6)+*,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column)>:where(h1,h2,h3,h4,h5,h6)+*{margin-top:var(--space-heading-bottom)}.ywiki-content>hr,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th)>hr{margin-block:var(--space-divider)}.ywiki-content>:first-child,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th,li,li>div,li>span)>:first-child{margin-top:0}.ywiki-content>:last-child,.ywiki-content :where(.doc-body,blockquote,.doc-callout-content,.doc-column,td,th,li,li>div,li>span)>:last-child{margin-bottom:0}.ywiki-content :where(td,th)>*+*{margin-top:.25em}.ywiki-content :where(td,th)>:first-child{margin-top:0}.ywiki-content :where(td,th)>:where(p,ul,ol){font-weight:inherit}.ywiki-content :where(td,th)>p:empty{min-height:calc(1em * var(--content-table-line-height))}
|
|
@@ -1,29 +1 @@
|
|
|
1
|
-
|
|
2
|
-
.wendang {
|
|
3
|
-
--content-font-size: 16px;
|
|
4
|
-
--content-line-height: 1.75;
|
|
5
|
-
--content-text-color: var(--color-text);
|
|
6
|
-
--content-heading-color: #101828;
|
|
7
|
-
--content-table-header-bg: #edf3fc;
|
|
8
|
-
--content-table-grid-color: #d5dfed;
|
|
9
|
-
--content-table-font-size: calc(var(--content-font-size) * 13 / 14);
|
|
10
|
-
--content-table-line-height: 1.5;
|
|
11
|
-
--content-table-radius: 6px;
|
|
12
|
-
--content-table-padding-x: 8px;
|
|
13
|
-
--content-table-padding-y: 6px;
|
|
14
|
-
--content-media-radius: 8px;
|
|
15
|
-
--content-gallery-gap: 12px;
|
|
16
|
-
--content-callout-radius: 9px;
|
|
17
|
-
--content-callout-padding-x: 18px;
|
|
18
|
-
--content-callout-padding-y: 16px;
|
|
19
|
-
--content-callout-icon-width: 30px;
|
|
20
|
-
--content-callout-icon-size: 22px;
|
|
21
|
-
--content-callout-gap: 12px;
|
|
22
|
-
--space-block: calc(var(--content-font-size) * 5 / 7);
|
|
23
|
-
--space-module: calc(var(--content-font-size) * 9 / 7);
|
|
24
|
-
--space-heading-top: calc(var(--content-font-size) * 2);
|
|
25
|
-
--space-heading-bottom: calc(var(--content-font-size) * 5 / 7);
|
|
26
|
-
--space-list-item: calc(var(--content-font-size) * 0.25);
|
|
27
|
-
--space-list-block: calc(var(--content-font-size) * 0.5);
|
|
28
|
-
--space-divider: calc(var(--content-font-size) * 2);
|
|
29
|
-
}
|
|
1
|
+
.wendang{--content-font-size: 16px;--content-line-height: 1.75;--content-text-color: var(--color-text);--content-heading-color: #101828;--content-table-header-bg: #edf3fc;--content-table-grid-color: #d5dfed;--content-table-font-size: calc(var(--content-font-size) * 13 / 14);--content-table-line-height: 1.5;--content-table-radius: 6px;--content-table-padding-x: 8px;--content-table-padding-y: 6px;--content-media-radius: 8px;--content-gallery-gap: 12px;--content-callout-radius: 9px;--content-callout-padding-x: 18px;--content-callout-padding-y: 16px;--content-callout-icon-width: 30px;--content-callout-icon-size: 22px;--content-callout-gap: 12px;--space-block: calc(var(--content-font-size) * 5 / 7);--space-module: calc(var(--content-font-size) * 9 / 7);--space-heading-top: calc(var(--content-font-size) * 2);--space-heading-bottom: calc(var(--content-font-size) * 5 / 7);--space-list-item: calc(var(--content-font-size) * .25);--space-list-block: calc(var(--content-font-size) * .5);--space-divider: calc(var(--content-font-size) * 2)}
|