wendang-react 0.6.2 → 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.
Files changed (119) hide show
  1. package/NOTICE.md +1 -1
  2. package/README.md +105 -0
  3. package/dist/bindings/yjs.js +1 -5
  4. package/dist/chunks/AnchoredPanel-C7jMoPze.js +1 -0
  5. package/dist/chunks/DocumentExportMenu-CUMsgq3w.js +2 -0
  6. package/dist/chunks/Dropdown-D98tXfe0.js +3 -0
  7. package/dist/chunks/MindMapCanvas-CVXQXNOg.js +163 -0
  8. package/dist/chunks/MindMapViewer-BI8zbQM1.js +13 -0
  9. package/dist/chunks/SpreadsheetViewer-CoQ4VIgj.js +23 -0
  10. package/dist/chunks/code-highlight-BmaqTe1m.js +1 -30
  11. package/dist/chunks/code-highlight-engine-BFDzDPzy.js +1 -40
  12. package/dist/chunks/comment-hint-BhUxKjKK.js +14 -0
  13. package/dist/chunks/composition-state-Bl-U1R_2.js +1 -40
  14. package/dist/chunks/extensions-C1fCBnEs.js +14 -0
  15. package/dist/chunks/fuzzy-match-DYQR-4w2.js +1 -89
  16. package/dist/chunks/hooks-C53Dp0pr.js +1 -35
  17. package/dist/chunks/i18n-B0kCsIjc.js +2 -0
  18. package/dist/chunks/index-COeA2QcQ.js +15 -0
  19. package/dist/chunks/katex-WjrodtTU.js +1 -71
  20. package/dist/chunks/locale-DWpIJ_9X.js +1 -0
  21. package/dist/chunks/mind-map-controller-Ce76mETT.js +1 -0
  22. package/dist/chunks/mind-map-delete-CVsxdXfs.js +1 -31
  23. package/dist/chunks/mind-map-input-CEWRz_t6.js +1 -43
  24. package/dist/chunks/mind-topic-text-Bn1waxff.js +31 -0
  25. package/dist/chunks/popover-placement-D3xVYdkt.js +1 -47
  26. package/dist/chunks/worksheet-engine-c84sdD4N.js +1 -0
  27. package/dist/chunks/worksheet-preview-DsDVWxIM.js +1 -129
  28. package/dist/document/viewer.js +30 -289
  29. package/dist/document.js +120 -3622
  30. package/dist/export/json.js +1 -5
  31. package/dist/export/markdown.js +1 -2
  32. package/dist/export/mindmap.js +1 -2
  33. package/dist/export/pdf.js +1 -6
  34. package/dist/export/word.js +1 -2
  35. package/dist/export.js +1 -2
  36. package/dist/i18n.js +1 -0
  37. package/dist/index.js +1 -8
  38. package/dist/locales/en-US.js +1 -0
  39. package/dist/locales/es-ES.js +1 -0
  40. package/dist/locales/ja-JP.js +1 -0
  41. package/dist/locales/ko-KR.js +1 -0
  42. package/dist/locales/zh-CN.js +1 -0
  43. package/dist/locales/zh-TW.js +1 -0
  44. package/dist/mindmap/viewer.js +1 -6
  45. package/dist/mindmap.js +3 -123
  46. package/dist/shared.js +1 -52
  47. package/dist/spreadsheet/viewer.js +1 -5
  48. package/dist/spreadsheet/xlsx.js +1 -299
  49. package/dist/spreadsheet.js +2 -120
  50. package/dist/styles/callout.css +1 -34
  51. package/dist/styles/code-block.css +1 -58
  52. package/dist/styles/content-style.css +1 -619
  53. package/dist/styles/content-tokens.css +1 -29
  54. package/dist/styles/editor-interaction.css +1 -621
  55. package/dist/styles/file-video.css +1 -12
  56. package/dist/styles/image-preview.css +1 -103
  57. package/dist/styles/mind-map-block.css +1 -14
  58. package/dist/styles/mind-map-canvas.css +1 -80
  59. package/dist/styles/mind-map-comments.css +1 -93
  60. package/dist/styles/mind-map-details.css +1 -7
  61. package/dist/styles/mind-map-preview.css +1 -7
  62. package/dist/styles/mind-map-topic.css +1 -112
  63. package/dist/styles/page-picker.css +1 -47
  64. package/dist/styles/renderer.css +1 -45
  65. package/dist/styles/spreadsheet-editor.css +1 -3
  66. package/dist/styles/tokens.css +1 -142
  67. package/dist/styles/video-dialog.css +1 -41
  68. package/dist/styles/video-embed.css +1 -35
  69. package/dist/styles.css +1 -2631
  70. package/dist/types/editor/BlockAffordance.d.ts +5 -2
  71. package/dist/types/editor/CalloutView.d.ts +2 -1
  72. package/dist/types/editor/ImagePreview.d.ts +1 -1
  73. package/dist/types/editor/PagePicker.d.ts +1 -1
  74. package/dist/types/editor/extensions.d.ts +4 -1
  75. package/dist/types/engine/editor/block-commands.d.ts +1 -1
  76. package/dist/types/engine/editor/block-menu-hover.d.ts +16 -0
  77. package/dist/types/engine/editor/extensions/locale.d.ts +3 -0
  78. package/dist/types/engine/editor/nodes/image-nodeview.d.ts +1 -1
  79. package/dist/types/engine/host.d.ts +60 -2
  80. package/dist/types/engine/renderer/attachments.d.ts +3 -3
  81. package/dist/types/engine/shared/video-feedback.d.ts +1 -1
  82. package/dist/types/engine/worksheets/worksheet-engine.d.ts +1 -0
  83. package/dist/types/engine/worksheets/worksheet-xlsx.d.ts +6 -1
  84. package/dist/types/engine/wui/core/overlay-scrollbar.d.ts +4 -0
  85. package/dist/types/host-types.d.ts +2 -60
  86. package/dist/types/host.d.ts +8 -1
  87. package/dist/types/i18n.d.ts +3 -0
  88. package/dist/types/index.d.ts +2 -0
  89. package/dist/types/locales/en-US.d.ts +1 -0
  90. package/dist/types/locales/es-ES.d.ts +1 -0
  91. package/dist/types/locales/ja-JP.d.ts +1 -0
  92. package/dist/types/locales/ko-KR.d.ts +1 -0
  93. package/dist/types/locales/zh-CN.d.ts +1 -0
  94. package/dist/types/locales/zh-TW.d.ts +1 -0
  95. package/dist/types/spreadsheet/xlsx.d.ts +1 -1
  96. package/dist/types/wui/Dropdown.d.ts +2 -1
  97. package/dist/types/wui/index.d.ts +2 -1
  98. package/integrity.json +3135 -0
  99. package/package.json +15 -5
  100. package/verify-integrity.mjs +138 -0
  101. package/dist/chunks/AnchoredPanel-CSXrveAT.js +0 -68
  102. package/dist/chunks/DocumentExportMenu-DgDXDChd.js +0 -75
  103. package/dist/chunks/MindMapCanvas-I5M1SIyX.js +0 -2090
  104. package/dist/chunks/MindMapViewer-Nu3nEVHQ.js +0 -180
  105. package/dist/chunks/SpreadsheetViewer-CLDlnWyM.js +0 -163
  106. package/dist/chunks/comment-hint-Coq1laiR.js +0 -296
  107. package/dist/chunks/extensions-DMQedgOl.js +0 -4210
  108. package/dist/chunks/host-C-V688Rq.js +0 -197
  109. package/dist/chunks/index-CqaMYb3A.js +0 -720
  110. package/dist/chunks/mind-map-controller-B6SxK3GZ.js +0 -479
  111. package/dist/chunks/mind-topic-text-DYQR2Dzf.js +0 -446
  112. package/dist/chunks/nodes-iKqTGr_N.js +0 -291
  113. package/dist/chunks/worksheet-engine-TJ54m0KC.js +0 -125
  114. package/third-party-notices/wendang-export@0.6.0-NOTICE.md.txt +0 -51
  115. package/third-party-notices/wendang-export@0.6.1-LICENSE.txt +0 -21
  116. package/third-party-notices/wendang-export@0.6.2-LICENSE.txt +0 -21
  117. package/third-party-notices/wendang-export@0.6.2-NOTICE.md.txt +0 -70
  118. /package/third-party-notices/{wendang-export@0.6.0-LICENSE.txt → wendang-export@0.6.3-LICENSE.txt} +0 -0
  119. /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
- /* Generated from wendang/shared CONTENT_PRESENTATION. */
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)}