@rinova/playground 0.1.5 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +6 -7
  2. package/dist/PlaygroundRoot-Bcq7hG6m.js +4114 -0
  3. package/dist/bash-DXbFn1Mw.js +2 -0
  4. package/dist/diff-BbCHXb9k.js +2 -0
  5. package/dist/html-BheHDAwJ.js +10 -0
  6. package/dist/index.js +646 -5
  7. package/dist/less-DcFvX2iI.js +2 -0
  8. package/dist/light-plus-DuoQWI9Q.js +3 -0
  9. package/dist/markdown-qYHfSPvL.js +2 -0
  10. package/dist/marked.esm-CNYX-ybC.js +1796 -0
  11. package/dist/{App-DUVLlDOI.js → plugin-S72dg7Tb.js} +556 -1700
  12. package/dist/style.css +2857 -554
  13. package/dist/tokyo-night-A7e3DMsQ.js +3 -0
  14. package/dist/types/app/App.vue.d.ts +1 -0
  15. package/dist/types/app/PlaygroundApiTable.vue.d.ts +16 -0
  16. package/dist/types/app/PlaygroundEditorPicker.vue.d.ts +3 -0
  17. package/dist/types/app/PlaygroundModuleApi.vue.d.ts +17 -0
  18. package/dist/types/app/PlaygroundPage.vue.d.ts +30 -0
  19. package/dist/types/app/{PlaygroundSourcePanel.vue.d.ts → PlaygroundPageIndex.vue.d.ts} +4 -4
  20. package/dist/types/app/PlaygroundPluginPanel.vue.d.ts +3 -0
  21. package/dist/types/app/PlaygroundPluginSlot.vue.d.ts +12 -0
  22. package/dist/types/app/PlaygroundPluginWrappers.vue.d.ts +25 -0
  23. package/dist/types/app/PlaygroundRoot.vue.d.ts +4 -0
  24. package/dist/types/app/{PlaygroundParamsPanel.vue.d.ts → PlaygroundSceneArgs.vue.d.ts} +1 -1
  25. package/dist/types/app/PlaygroundSceneOutput.vue.d.ts +6 -0
  26. package/dist/types/app/PlaygroundSceneSection.vue.d.ts +16 -0
  27. package/dist/types/app/{PlaygroundStage.vue.d.ts → PlaygroundSceneSource.vue.d.ts} +0 -1
  28. package/dist/types/app/PlaygroundSidebar.vue.d.ts +19 -8
  29. package/dist/types/app/viewport.d.ts +39 -0
  30. package/dist/types/code/CodeBlock.vue.d.ts +19 -1
  31. package/dist/types/code/clipboard.d.ts +2 -0
  32. package/dist/types/code/find.d.ts +42 -0
  33. package/dist/types/code/highlighter.d.ts +9 -2
  34. package/dist/types/code/openInEditor.d.ts +35 -0
  35. package/dist/types/{app/PlaygroundGroupIndex.vue.d.ts → components/PwApiBrief.vue.d.ts} +9 -9
  36. package/dist/types/components/PwButton.vue.d.ts +2 -2
  37. package/dist/types/components/PwDemo.vue.d.ts +39 -0
  38. package/dist/types/components/PwDemoGrid.vue.d.ts +32 -0
  39. package/dist/types/components/PwInput.vue.d.ts +8 -8
  40. package/dist/types/components/PwSceneBoundary.vue.d.ts +20 -0
  41. package/dist/types/components/PwSceneNote.vue.d.ts +19 -0
  42. package/dist/types/components/PwTooltip.vue.d.ts +3 -0
  43. package/dist/types/components/prose/PwCallout.vue.d.ts +24 -0
  44. package/dist/types/components/prose/PwMarkdown.vue.d.ts +11 -0
  45. package/dist/types/components/prose/PwProse.vue.d.ts +27 -0
  46. package/dist/types/components/prose/PwStep.vue.d.ts +27 -0
  47. package/dist/types/components/prose/PwSteps.vue.d.ts +26 -0
  48. package/dist/types/components/prose/enhance.d.ts +4 -0
  49. package/dist/types/components/prose/index.d.ts +7 -0
  50. package/dist/types/components/prose/markdown-scene.d.ts +10 -0
  51. package/dist/types/components/prose/parse.d.ts +20 -0
  52. package/dist/types/components/prose/render.d.ts +22 -0
  53. package/dist/types/components/scene.d.ts +5 -0
  54. package/dist/types/config.d.ts +38 -10
  55. package/dist/types/index.d.ts +11 -4
  56. package/dist/types/module-api.d.ts +55 -0
  57. package/dist/types/payload/args.d.ts +5 -3
  58. package/dist/types/payload/context.d.ts +3 -0
  59. package/dist/types/payload/output.d.ts +4 -2
  60. package/dist/types/plugin.d.ts +119 -0
  61. package/dist/types/scene-meta.d.ts +38 -3
  62. package/dist/types/shims.d.ts +26 -8
  63. package/dist/types/types.d.ts +107 -20
  64. package/dist/vue-B_A2yz16.js +30 -0
  65. package/dist/yaml-CoEYOy4X.js +2 -0
  66. package/package.json +3 -5
  67. package/dist/assets/editor.worker-G4Kxf7Y6.js +0 -15827
  68. package/dist/assets/ts.worker-Dee0cZZb.js +0 -164076
  69. package/dist/dist-B0hittbo.js +0 -151
  70. package/dist/editor.api-YVDhnHI-.js +0 -126730
  71. package/dist/editor.css +0 -1
  72. package/dist/editor.worker-VDFPHiZj.js +0 -5
  73. package/dist/monaco.contribution-CaO2YABh.js +0 -220
  74. package/dist/output-CGawAeuu.js +0 -80
  75. package/dist/ts.worker-CpQm_d0w.js +0 -5
  76. package/dist/tsMode-BOlRJVVo.js +0 -52173
  77. package/dist/types/app/PlaygroundToolbar.vue.d.ts +0 -22
  78. package/dist/types/code/CodeEditor.vue.d.ts +0 -18
  79. package/dist/types/code/monaco.d.ts +0 -6
  80. package/dist/vitesse-dark-B9O9KI0c.js +0 -3
  81. package/dist/vitesse-light-Cs2DYTIe.js +0 -3
  82. package/dist/vue-tjAT-6a9.js +0 -36
package/dist/style.css CHANGED
@@ -1,475 +1,2639 @@
1
- .pw-toast-host[data-v-4f7c0a94] {
2
- position: fixed;
3
- left: 50%;
4
- bottom: 32px;
5
- z-index: 2000;
1
+ .pw-api-brief[data-v-20ccf753] {
2
+ display: flex;
3
+ flex-wrap: wrap;
4
+ gap: 8px;
5
+ margin: 0;
6
+ padding: 0;
7
+ list-style: none;
8
+ }
9
+ .pw-api-brief__item[data-v-20ccf753] {
10
+ display: inline-flex;
11
+ min-width: 0;
12
+ }
13
+ .pw-api-brief__chip[data-v-20ccf753] {
14
+ display: inline-flex;
15
+ align-items: baseline;
16
+ gap: 6px;
17
+ max-width: 100%;
18
+ padding: 2px 8px;
19
+ border: 1px solid var(--rp-color-border);
20
+ border-radius: 999px;
21
+ background: transparent;
22
+ color: inherit;
23
+ font: inherit;
24
+ font-size: 11.5px;
25
+ cursor: pointer;
26
+ transition: border-color 0.15s ease;
27
+ }
28
+ .pw-api-brief__chip[data-v-20ccf753]:hover {
29
+ border-color: var(--rp-color-primary);
30
+ }
31
+ .pw-api-brief__name[data-v-20ccf753] {
32
+ font-family: var(--rp-font-mono);
33
+ font-size: 11.5px;
34
+ }
35
+ .pw-api-brief__type[data-v-20ccf753],
36
+ .pw-api-brief__default[data-v-20ccf753] {
37
+ color: var(--rp-color-text-muted);
38
+ font-family: var(--rp-font-mono);
39
+ font-size: 11px;
40
+ max-width: min(260px, 100%);
41
+ min-width: 0;
42
+ overflow: hidden;
43
+ text-overflow: ellipsis;
44
+ white-space: nowrap;
45
+ }
46
+ .pw-demo-grid[data-v-68029d58] {
47
+ display: grid;
48
+ grid-template-columns: repeat(var(--pw-demo-columns, 1), minmax(0, 1fr));
49
+ gap: var(--pw-demo-gap, 12px);
50
+ width: 100%;
51
+ min-width: 0;
52
+ }
53
+ .pw-demo-grid.is-auto[data-v-68029d58] {
54
+ grid-template-columns: repeat(auto-fit, minmax(min(var(--pw-demo-min, 220px), 100%), 1fr));
55
+ }
56
+ @media (max-width: 900px) {
57
+ .pw-demo-grid[data-v-68029d58] {
58
+ grid-template-columns: minmax(0, 1fr);
59
+ }
60
+ }
61
+ .pw-demo[data-v-a3355761] {
6
62
  display: flex;
7
63
  flex-direction: column;
8
64
  gap: 8px;
65
+ min-width: 0;
66
+ margin: 0;
67
+ }
68
+ .pw-demo__title[data-v-a3355761] {
69
+ color: var(--rp-color-text-muted);
70
+ font-family: var(--rp-font-mono);
71
+ font-size: 11px;
72
+ letter-spacing: 0.02em;
73
+ }
74
+ .pw-demo__body[data-v-a3355761] {
75
+ display: flex;
76
+ flex-wrap: wrap;
9
77
  align-items: center;
10
- transform: translateX(-50%);
11
- pointer-events: none;
78
+ gap: 12px;
79
+ min-width: 0;
12
80
  }
13
- .pw-toast[data-v-4f7c0a94] {
14
- padding: 8px 14px;
81
+ .pw-demo.is-column .pw-demo__body[data-v-a3355761] {
82
+ flex-direction: column;
83
+ align-items: stretch;
84
+ }
85
+ .pw-demo.align-start .pw-demo__body[data-v-a3355761] {
86
+ align-items: flex-start;
87
+ }
88
+ .pw-demo.align-end .pw-demo__body[data-v-a3355761] {
89
+ align-items: flex-end;
90
+ }
91
+ .pw-demo.surface-card[data-v-a3355761] {
92
+ padding: 16px;
93
+ border: 1px solid var(--rp-color-border);
94
+ border-radius: var(--rp-radius);
95
+ background: var(--rp-color-surface);
96
+ }
97
+ .pw-demo__note[data-v-a3355761] {
98
+ margin: 0;
99
+ color: var(--rp-color-text-muted);
100
+ font-size: 12px;
101
+ }
102
+ .pw-demo__footer[data-v-a3355761] {
103
+ padding-top: 8px;
104
+ border-top: 1px dashed var(--rp-color-border);
105
+ }
106
+ .pw-scene-note[data-v-07e42ce6] {
107
+ padding: 8px 12px;
108
+ border-left: 3px solid var(--rp-color-primary);
109
+ border-radius: 0 6px 6px 0;
110
+ background: color-mix(in srgb, var(--rp-color-primary) 6%, transparent);
111
+ color: var(--rp-color-text-muted);
112
+ font-size: 12.5px;
113
+ line-height: 1.65;
114
+ }
115
+ /**
116
+ * 文档排版(prose)。
117
+ *
118
+ * 这套类名是「公共契约」:`PwProse` 用它渲染手写的 Vue 内容页,
119
+ * `PwMarkdown` 把 Markdown 转成同样的结构再用同一套样式——
120
+ * 两条路出来的标题、列表、表格、代码块必须长得一样,所以样式不能 scoped。
121
+ *
122
+ * 所有色值只取主题变量,不写死任何颜色。
123
+ */
124
+ .pw-prose {
125
+ --pw-prose-width: 720px;
126
+ --pw-prose-step: var(--rp-color-primary);
127
+ width: var(--pw-prose-width);
128
+ max-width: 100%;
129
+ color: var(--rp-color-text);
130
+ font-size: 14px;
131
+ line-height: 1.75;
132
+ overflow-wrap: break-word;
133
+ /* 引导语:PwProse 的 lead 与 Markdown 的 <p class="pw-prose__lead"> */
134
+ /* 步骤:Vue 用 PwSteps,Markdown 用 ::: steps,统一这一套外观 */
135
+ }
136
+ .pw-prose > :first-child {
137
+ margin-top: 0;
138
+ }
139
+ .pw-prose > :last-child {
140
+ margin-bottom: 0;
141
+ }
142
+ .pw-prose h1 {
143
+ margin: 0 0 8px;
144
+ font-size: 22px;
145
+ font-weight: 600;
146
+ letter-spacing: -0.01em;
147
+ line-height: 1.35;
148
+ }
149
+ .pw-prose h2 {
150
+ margin: 26px 0 8px;
151
+ font-size: 16px;
152
+ font-weight: 600;
153
+ line-height: 1.4;
154
+ }
155
+ .pw-prose h3 {
156
+ margin: 18px 0 6px;
157
+ font-size: 14px;
158
+ font-weight: 600;
159
+ }
160
+ .pw-prose h4 {
161
+ margin: 14px 0 4px;
162
+ color: var(--rp-color-text-muted);
163
+ font-size: 13px;
164
+ font-weight: 600;
165
+ }
166
+ .pw-prose p {
167
+ margin: 0 0 10px;
168
+ }
169
+ .pw-prose ul,
170
+ .pw-prose ol {
171
+ margin: 0 0 12px;
172
+ padding-left: 20px;
173
+ }
174
+ .pw-prose li {
175
+ margin: 3px 0;
176
+ }
177
+ .pw-prose li > ul,
178
+ .pw-prose li > ol {
179
+ margin: 3px 0 0;
180
+ }
181
+ .pw-prose a {
182
+ color: var(--rp-color-primary);
183
+ text-decoration: none;
184
+ }
185
+ .pw-prose a:hover {
186
+ text-decoration: underline;
187
+ }
188
+ .pw-prose strong {
189
+ font-weight: 600;
190
+ }
191
+ .pw-prose em {
192
+ font-style: italic;
193
+ }
194
+ .pw-prose code {
195
+ padding: 1px 5px;
196
+ border: 1px solid var(--rp-color-border);
197
+ border-radius: 4px;
198
+ background: var(--rp-color-surface);
199
+ font-family: var(--rp-font-mono);
200
+ font-size: 12.5px;
201
+ }
202
+ .pw-prose pre {
203
+ margin: 0 0 14px;
204
+ padding: 12px 14px;
205
+ overflow-x: auto;
206
+ border: 1px solid var(--rp-color-border);
207
+ border-radius: var(--rp-radius);
208
+ background: var(--rp-color-surface);
209
+ font-family: var(--rp-font-mono);
210
+ font-size: 13px;
211
+ line-height: 1.75;
212
+ }
213
+ .pw-prose pre.shiki {
214
+ border-color: var(--rp-color-border);
215
+ background-color: var(--shiki-light-bg);
216
+ }
217
+ .pw-prose pre code {
218
+ padding: 0;
219
+ border: 0;
220
+ background: transparent;
221
+ font-size: inherit;
222
+ }
223
+ .pw-prose table {
224
+ width: 100%;
225
+ margin: 0 0 14px;
226
+ border-collapse: collapse;
227
+ font-size: 13px;
228
+ }
229
+ .pw-prose th,
230
+ .pw-prose td {
231
+ padding: 6px 10px;
15
232
  border: 1px solid var(--rp-color-border);
233
+ text-align: left;
234
+ vertical-align: top;
235
+ /* 中文可以断行,但不要把一个短标签压成一列:
236
+ 给单元格一个下限,auto 布局就不会把「标题区」拆成「标题 / 区」 */
237
+ min-width: 88px;
238
+ overflow-wrap: anywhere;
239
+ /* 行内代码整词不断行:defineSceneMeta(meta) 断成 defineSceneMeta(me / ta) 像拼错 */
240
+ }
241
+ .pw-prose th code,
242
+ .pw-prose td code {
243
+ overflow-wrap: normal;
244
+ white-space: nowrap;
245
+ }
246
+ .pw-prose th {
247
+ background: var(--rp-color-surface);
248
+ font-weight: 600;
249
+ white-space: nowrap;
250
+ }
251
+ .pw-prose blockquote {
252
+ margin: 0 0 14px;
253
+ padding: 8px 12px;
16
254
  border-left: 3px solid var(--rp-color-primary);
255
+ border-radius: 0 var(--rp-radius) var(--rp-radius) 0;
256
+ background: color-mix(in srgb, var(--rp-color-primary) 6%, transparent);
257
+ color: var(--rp-color-text-muted);
258
+ }
259
+ .pw-prose img {
260
+ max-width: 100%;
261
+ height: auto;
17
262
  border-radius: var(--rp-radius);
263
+ }
264
+ .pw-prose hr {
265
+ margin: 22px 0;
266
+ border: 0;
267
+ border-top: 1px solid var(--rp-color-border);
268
+ }
269
+ .pw-prose kbd {
270
+ padding: 1px 5px;
271
+ border: 1px solid var(--rp-color-border);
272
+ border-bottom-width: 2px;
273
+ border-radius: 4px;
274
+ background: var(--rp-color-surface);
275
+ font-family: var(--rp-font-mono);
276
+ font-size: 11.5px;
277
+ }
278
+ .pw-prose__head {
279
+ margin-bottom: 20px;
280
+ }
281
+ .pw-prose__lead {
282
+ margin: 0;
283
+ color: var(--rp-color-text-muted);
284
+ font-size: 13.5px;
285
+ }
286
+ .pw-prose__steps {
287
+ margin: 0 0 14px;
288
+ padding: 0;
289
+ list-style: none;
290
+ counter-reset: pw-prose-step;
291
+ }
292
+ .pw-prose__steps > li {
293
+ position: relative;
294
+ margin: 0 0 12px;
295
+ padding-left: 32px;
296
+ counter-increment: pw-prose-step;
297
+ }
298
+ .pw-prose__steps > li::before {
299
+ content: counter(pw-prose-step);
300
+ position: absolute;
301
+ top: 2px;
302
+ left: 0;
303
+ display: inline-flex;
304
+ align-items: center;
305
+ justify-content: center;
306
+ width: 21px;
307
+ height: 21px;
308
+ border-radius: 50%;
309
+ background: color-mix(in srgb, var(--pw-prose-step) 12%, transparent);
310
+ color: var(--pw-prose-step);
311
+ font-size: 11.5px;
312
+ font-weight: 600;
313
+ font-variant-numeric: tabular-nums;
314
+ line-height: 1;
315
+ }
316
+ .pw-prose__steps > li > :last-child {
317
+ margin-bottom: 0;
318
+ }
319
+ /* ---------------- 代码块:语言角标 + 复制 ---------------- */
320
+ .pw-prose pre.pw-prose__code {
321
+ position: relative;
322
+ /* 顶部留一条工具栏的空间,复制按钮不会压住第一行代码 */
323
+ padding-top: 27px;
324
+ }
325
+ .pw-prose__lang {
326
+ position: absolute;
327
+ top: 8px;
328
+ left: 14px;
329
+ color: var(--rp-color-text-muted);
330
+ font-family: var(--rp-font-mono);
331
+ font-size: 10.5px;
332
+ letter-spacing: 0.04em;
333
+ text-transform: uppercase;
334
+ pointer-events: none;
335
+ }
336
+ .pw-prose__copy {
337
+ position: absolute;
338
+ top: 5px;
339
+ right: 6px;
340
+ display: inline-flex;
341
+ align-items: center;
342
+ height: 22px;
343
+ padding: 0 8px;
344
+ border: 1px solid var(--rp-color-border);
345
+ border-radius: 6px;
18
346
  background: var(--rp-color-bg);
347
+ color: var(--rp-color-text-muted);
348
+ font-family: inherit;
349
+ font-size: 11px;
350
+ line-height: 1;
351
+ cursor: pointer;
352
+ opacity: 0;
353
+ transition: opacity 0.15s ease, color 0.15s ease, border-color 0.15s ease;
354
+ }
355
+ .pw-prose__copy:hover {
356
+ border-color: var(--rp-color-primary);
19
357
  color: var(--rp-color-text);
358
+ }
359
+ .pw-prose__copy:focus-visible {
360
+ outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 45%, transparent);
361
+ outline-offset: 1px;
362
+ opacity: 1;
363
+ }
364
+ .pw-prose__copy.is-done {
365
+ border-color: color-mix(in srgb, var(--rp-color-success) 45%, transparent);
366
+ color: var(--rp-color-success);
367
+ }
368
+ .pw-prose pre.pw-prose__code:hover .pw-prose__copy,
369
+ .pw-prose pre.pw-prose__code:focus-within .pw-prose__copy,
370
+ .pw-prose__copy.is-done {
371
+ opacity: 1;
372
+ }
373
+ /* shiki 双主题取色:与源码卡片(CodeBlock)同一套约定 */
374
+ .pw-prose pre.shiki span {
375
+ color: var(--shiki-light);
376
+ }
377
+ :root[data-pw-theme='dark'] .pw-prose pre.shiki span {
378
+ color: var(--shiki-dark);
379
+ }
380
+ :root[data-pw-theme='dark'] .pw-prose pre.shiki {
381
+ background-color: var(--shiki-dark-bg);
382
+ }
383
+ /* 演示画布里的内容页跟随画布主题,而不是外壳 */
384
+ [data-pw-stage='light'] .pw-prose pre.shiki span {
385
+ color: var(--shiki-light);
386
+ }
387
+ [data-pw-stage='light'] .pw-prose pre.shiki {
388
+ background-color: var(--shiki-light-bg);
389
+ }
390
+ [data-pw-stage='dark'] .pw-prose pre.shiki span {
391
+ color: var(--shiki-dark);
392
+ }
393
+ [data-pw-stage='dark'] .pw-prose pre.shiki {
394
+ background-color: var(--shiki-dark-bg);
395
+ }
396
+ .pw-callout[data-v-6a2ac811] {
397
+ --pw-tone: var(--rp-color-primary);
398
+ display: flex;
399
+ gap: 10px;
400
+ margin: 0 0 14px;
401
+ padding: 10px 12px;
402
+ border: 1px solid var(--rp-color-border);
403
+ border-left: 3px solid var(--pw-tone);
404
+ border-radius: var(--rp-radius);
405
+ background: color-mix(in srgb, var(--pw-tone) 7%, transparent);
406
+ }
407
+ .pw-callout--tip[data-v-6a2ac811] {
408
+ --pw-tone: var(--rp-color-success);
409
+ }
410
+ .pw-callout--warn[data-v-6a2ac811] {
411
+ --pw-tone: var(--rp-color-warning);
412
+ }
413
+ .pw-callout--danger[data-v-6a2ac811] {
414
+ --pw-tone: var(--rp-color-danger);
415
+ }
416
+ .pw-callout__icon[data-v-6a2ac811] {
417
+ flex: 0 0 auto;
418
+ margin-top: 3px;
419
+ color: var(--pw-tone);
420
+ }
421
+ .pw-callout__main[data-v-6a2ac811] {
422
+ min-width: 0;
423
+ flex: 1;
424
+ }
425
+ .pw-callout__title[data-v-6a2ac811] {
426
+ margin: 0 0 2px;
427
+ color: var(--pw-tone);
20
428
  font-size: 13px;
21
- box-shadow: 0 6px 20px color-mix(in srgb, var(--rp-color-text) 14%, transparent);
429
+ font-weight: 600;
22
430
  }
23
- .pw-toast--success[data-v-4f7c0a94] {
24
- border-left-color: var(--rp-color-success);
431
+ .pw-callout__body[data-v-6a2ac811] {
432
+ font-size: 13px;
433
+ line-height: 1.7;
25
434
  }
26
- .pw-toast--warning[data-v-4f7c0a94] {
27
- border-left-color: var(--rp-color-warning);
435
+ .pw-callout__body[data-v-6a2ac811] > :last-child {
436
+ margin-bottom: 0;
28
437
  }
29
- .pw-toast--error[data-v-4f7c0a94] {
30
- border-left-color: var(--rp-color-danger);
438
+ .pw-callout__body[data-v-6a2ac811] p {
439
+ margin: 0 0 6px;
31
440
  }
32
- .pw-toast-enter-active[data-v-4f7c0a94],
33
- .pw-toast-leave-active[data-v-4f7c0a94] {
34
- transition: opacity 0.18s ease, transform 0.18s ease;
441
+ .pw-callout__body[data-v-6a2ac811] code {
442
+ padding: 1px 4px;
443
+ border: 1px solid var(--rp-color-border);
444
+ border-radius: 4px;
445
+ background: color-mix(in srgb, var(--rp-color-text-muted) 8%, transparent);
446
+ font-family: var(--rp-font-mono);
447
+ font-size: 12px;
35
448
  }
36
- .pw-toast-enter-from[data-v-4f7c0a94],
37
- .pw-toast-leave-to[data-v-4f7c0a94] {
38
- opacity: 0;
39
- transform: translateY(6px);
449
+ .pw-prose__step-title {
450
+ margin: 0 0 2px;
451
+ font-size: 13.5px;
452
+ font-weight: 600;
453
+ }
454
+ .pw-prose__step-desc {
455
+ margin: 0;
456
+ color: var(--rp-color-text-muted);
457
+ font-size: 13px;
458
+ }
459
+ /**
460
+ * 文档排版(prose)。
461
+ *
462
+ * 这套类名是「公共契约」:`PwProse` 用它渲染手写的 Vue 内容页,
463
+ * `PwMarkdown` 把 Markdown 转成同样的结构再用同一套样式——
464
+ * 两条路出来的标题、列表、表格、代码块必须长得一样,所以样式不能 scoped。
465
+ *
466
+ * 所有色值只取主题变量,不写死任何颜色。
467
+ */
468
+ .pw-prose {
469
+ --pw-prose-width: 720px;
470
+ --pw-prose-step: var(--rp-color-primary);
471
+ width: var(--pw-prose-width);
472
+ max-width: 100%;
473
+ color: var(--rp-color-text);
474
+ font-size: 14px;
475
+ line-height: 1.75;
476
+ overflow-wrap: break-word;
477
+ /* 引导语:PwProse 的 lead 与 Markdown 的 <p class="pw-prose__lead"> */
478
+ /* 步骤:Vue 用 PwSteps,Markdown 用 ::: steps,统一这一套外观 */
479
+ }
480
+ .pw-prose > :first-child {
481
+ margin-top: 0;
482
+ }
483
+ .pw-prose > :last-child {
484
+ margin-bottom: 0;
485
+ }
486
+ .pw-prose h1 {
487
+ margin: 0 0 8px;
488
+ font-size: 22px;
489
+ font-weight: 600;
490
+ letter-spacing: -0.01em;
491
+ line-height: 1.35;
492
+ }
493
+ .pw-prose h2 {
494
+ margin: 26px 0 8px;
495
+ font-size: 16px;
496
+ font-weight: 600;
497
+ line-height: 1.4;
498
+ }
499
+ .pw-prose h3 {
500
+ margin: 18px 0 6px;
501
+ font-size: 14px;
502
+ font-weight: 600;
503
+ }
504
+ .pw-prose h4 {
505
+ margin: 14px 0 4px;
506
+ color: var(--rp-color-text-muted);
507
+ font-size: 13px;
508
+ font-weight: 600;
509
+ }
510
+ .pw-prose p {
511
+ margin: 0 0 10px;
512
+ }
513
+ .pw-prose ul,
514
+ .pw-prose ol {
515
+ margin: 0 0 12px;
516
+ padding-left: 20px;
517
+ }
518
+ .pw-prose li {
519
+ margin: 3px 0;
520
+ }
521
+ .pw-prose li > ul,
522
+ .pw-prose li > ol {
523
+ margin: 3px 0 0;
524
+ }
525
+ .pw-prose a {
526
+ color: var(--rp-color-primary);
527
+ text-decoration: none;
528
+ }
529
+ .pw-prose a:hover {
530
+ text-decoration: underline;
531
+ }
532
+ .pw-prose strong {
533
+ font-weight: 600;
534
+ }
535
+ .pw-prose em {
536
+ font-style: italic;
537
+ }
538
+ .pw-prose code {
539
+ padding: 1px 5px;
540
+ border: 1px solid var(--rp-color-border);
541
+ border-radius: 4px;
542
+ background: var(--rp-color-surface);
543
+ font-family: var(--rp-font-mono);
544
+ font-size: 12.5px;
545
+ }
546
+ .pw-prose pre {
547
+ margin: 0 0 14px;
548
+ padding: 12px 14px;
549
+ overflow-x: auto;
550
+ border: 1px solid var(--rp-color-border);
551
+ border-radius: var(--rp-radius);
552
+ background: var(--rp-color-surface);
553
+ font-family: var(--rp-font-mono);
554
+ font-size: 13px;
555
+ line-height: 1.75;
556
+ }
557
+ .pw-prose pre.shiki {
558
+ border-color: var(--rp-color-border);
559
+ background-color: var(--shiki-light-bg);
560
+ }
561
+ .pw-prose pre code {
562
+ padding: 0;
563
+ border: 0;
564
+ background: transparent;
565
+ font-size: inherit;
566
+ }
567
+ .pw-prose table {
568
+ width: 100%;
569
+ margin: 0 0 14px;
570
+ border-collapse: collapse;
571
+ font-size: 13px;
572
+ }
573
+ .pw-prose th,
574
+ .pw-prose td {
575
+ padding: 6px 10px;
576
+ border: 1px solid var(--rp-color-border);
577
+ text-align: left;
578
+ vertical-align: top;
579
+ /* 中文可以断行,但不要把一个短标签压成一列:
580
+ 给单元格一个下限,auto 布局就不会把「标题区」拆成「标题 / 区」 */
581
+ min-width: 88px;
582
+ overflow-wrap: anywhere;
583
+ /* 行内代码整词不断行:defineSceneMeta(meta) 断成 defineSceneMeta(me / ta) 像拼错 */
584
+ }
585
+ .pw-prose th code,
586
+ .pw-prose td code {
587
+ overflow-wrap: normal;
588
+ white-space: nowrap;
589
+ }
590
+ .pw-prose th {
591
+ background: var(--rp-color-surface);
592
+ font-weight: 600;
593
+ white-space: nowrap;
594
+ }
595
+ .pw-prose blockquote {
596
+ margin: 0 0 14px;
597
+ padding: 8px 12px;
598
+ border-left: 3px solid var(--rp-color-primary);
599
+ border-radius: 0 var(--rp-radius) var(--rp-radius) 0;
600
+ background: color-mix(in srgb, var(--rp-color-primary) 6%, transparent);
601
+ color: var(--rp-color-text-muted);
602
+ }
603
+ .pw-prose img {
604
+ max-width: 100%;
605
+ height: auto;
606
+ border-radius: var(--rp-radius);
607
+ }
608
+ .pw-prose hr {
609
+ margin: 22px 0;
610
+ border: 0;
611
+ border-top: 1px solid var(--rp-color-border);
612
+ }
613
+ .pw-prose kbd {
614
+ padding: 1px 5px;
615
+ border: 1px solid var(--rp-color-border);
616
+ border-bottom-width: 2px;
617
+ border-radius: 4px;
618
+ background: var(--rp-color-surface);
619
+ font-family: var(--rp-font-mono);
620
+ font-size: 11.5px;
621
+ }
622
+ .pw-prose__head {
623
+ margin-bottom: 20px;
624
+ }
625
+ .pw-prose__lead {
626
+ margin: 0;
627
+ color: var(--rp-color-text-muted);
628
+ font-size: 13.5px;
629
+ }
630
+ .pw-prose__steps {
631
+ margin: 0 0 14px;
632
+ padding: 0;
633
+ list-style: none;
634
+ counter-reset: pw-prose-step;
635
+ }
636
+ .pw-prose__steps > li {
637
+ position: relative;
638
+ margin: 0 0 12px;
639
+ padding-left: 32px;
640
+ counter-increment: pw-prose-step;
641
+ }
642
+ .pw-prose__steps > li::before {
643
+ content: counter(pw-prose-step);
644
+ position: absolute;
645
+ top: 2px;
646
+ left: 0;
647
+ display: inline-flex;
648
+ align-items: center;
649
+ justify-content: center;
650
+ width: 21px;
651
+ height: 21px;
652
+ border-radius: 50%;
653
+ background: color-mix(in srgb, var(--pw-prose-step) 12%, transparent);
654
+ color: var(--pw-prose-step);
655
+ font-size: 11.5px;
656
+ font-weight: 600;
657
+ font-variant-numeric: tabular-nums;
658
+ line-height: 1;
659
+ }
660
+ .pw-prose__steps > li > :last-child {
661
+ margin-bottom: 0;
662
+ }
663
+ /* ---------------- 代码块:语言角标 + 复制 ---------------- */
664
+ .pw-prose pre.pw-prose__code {
665
+ position: relative;
666
+ /* 顶部留一条工具栏的空间,复制按钮不会压住第一行代码 */
667
+ padding-top: 27px;
668
+ }
669
+ .pw-prose__lang {
670
+ position: absolute;
671
+ top: 8px;
672
+ left: 14px;
673
+ color: var(--rp-color-text-muted);
674
+ font-family: var(--rp-font-mono);
675
+ font-size: 10.5px;
676
+ letter-spacing: 0.04em;
677
+ text-transform: uppercase;
678
+ pointer-events: none;
679
+ }
680
+ .pw-prose__copy {
681
+ position: absolute;
682
+ top: 5px;
683
+ right: 6px;
684
+ display: inline-flex;
685
+ align-items: center;
686
+ height: 22px;
687
+ padding: 0 8px;
688
+ border: 1px solid var(--rp-color-border);
689
+ border-radius: 6px;
690
+ background: var(--rp-color-bg);
691
+ color: var(--rp-color-text-muted);
692
+ font-family: inherit;
693
+ font-size: 11px;
694
+ line-height: 1;
695
+ cursor: pointer;
696
+ opacity: 0;
697
+ transition: opacity 0.15s ease, color 0.15s ease, border-color 0.15s ease;
698
+ }
699
+ .pw-prose__copy:hover {
700
+ border-color: var(--rp-color-primary);
701
+ color: var(--rp-color-text);
702
+ }
703
+ .pw-prose__copy:focus-visible {
704
+ outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 45%, transparent);
705
+ outline-offset: 1px;
706
+ opacity: 1;
707
+ }
708
+ .pw-prose__copy.is-done {
709
+ border-color: color-mix(in srgb, var(--rp-color-success) 45%, transparent);
710
+ color: var(--rp-color-success);
711
+ }
712
+ .pw-prose pre.pw-prose__code:hover .pw-prose__copy,
713
+ .pw-prose pre.pw-prose__code:focus-within .pw-prose__copy,
714
+ .pw-prose__copy.is-done {
715
+ opacity: 1;
716
+ }
717
+ /* shiki 双主题取色:与源码卡片(CodeBlock)同一套约定 */
718
+ .pw-prose pre.shiki span {
719
+ color: var(--shiki-light);
720
+ }
721
+ :root[data-pw-theme='dark'] .pw-prose pre.shiki span {
722
+ color: var(--shiki-dark);
723
+ }
724
+ :root[data-pw-theme='dark'] .pw-prose pre.shiki {
725
+ background-color: var(--shiki-dark-bg);
726
+ }
727
+ /* 演示画布里的内容页跟随画布主题,而不是外壳 */
728
+ [data-pw-stage='light'] .pw-prose pre.shiki span {
729
+ color: var(--shiki-light);
730
+ }
731
+ [data-pw-stage='light'] .pw-prose pre.shiki {
732
+ background-color: var(--shiki-light-bg);
733
+ }
734
+ [data-pw-stage='dark'] .pw-prose pre.shiki span {
735
+ color: var(--shiki-dark);
736
+ }
737
+ [data-pw-stage='dark'] .pw-prose pre.shiki {
738
+ background-color: var(--shiki-dark-bg);
739
+ }
740
+ .pw-prose__block > :first-child {
741
+ margin-top: 0;
742
+ }
743
+ .pw-prose__block > :last-child {
744
+ margin-bottom: 0;
745
+ }
746
+ .pw-prose__error {
747
+ margin: 0;
748
+ color: var(--rp-color-danger);
749
+ font-size: 13px;
750
+ }
751
+ .pw-toast-host[data-v-4f7c0a94] {
752
+ position: fixed;
753
+ left: 50%;
754
+ bottom: 32px;
755
+ z-index: 2000;
756
+ display: flex;
757
+ flex-direction: column;
758
+ gap: 8px;
759
+ align-items: center;
760
+ transform: translateX(-50%);
761
+ pointer-events: none;
762
+ }
763
+ .pw-toast[data-v-4f7c0a94] {
764
+ padding: 8px 14px;
765
+ border: 1px solid var(--rp-color-border);
766
+ border-left: 3px solid var(--rp-color-primary);
767
+ border-radius: var(--rp-radius);
768
+ background: var(--rp-color-bg);
769
+ color: var(--rp-color-text);
770
+ font-size: 13px;
771
+ box-shadow: 0 6px 20px color-mix(in srgb, var(--rp-color-text) 14%, transparent);
772
+ }
773
+ .pw-toast--success[data-v-4f7c0a94] {
774
+ border-left-color: var(--rp-color-success);
775
+ }
776
+ .pw-toast--warning[data-v-4f7c0a94] {
777
+ border-left-color: var(--rp-color-warning);
778
+ }
779
+ .pw-toast--error[data-v-4f7c0a94] {
780
+ border-left-color: var(--rp-color-danger);
781
+ }
782
+ .pw-toast-enter-active[data-v-4f7c0a94],
783
+ .pw-toast-leave-active[data-v-4f7c0a94] {
784
+ transition: opacity 0.18s ease, transform 0.18s ease;
785
+ }
786
+ .pw-toast-enter-from[data-v-4f7c0a94],
787
+ .pw-toast-leave-to[data-v-4f7c0a94] {
788
+ opacity: 0;
789
+ transform: translateY(6px);
790
+ }
791
+ .pw-tip[data-v-2657675f] {
792
+ position: fixed;
793
+ z-index: 80;
794
+ max-width: 280px;
795
+ padding: 4px 8px;
796
+ border: 1px solid var(--rp-color-border);
797
+ border-radius: 6px;
798
+ background: var(--rp-color-surface);
799
+ box-shadow: 0 6px 18px color-mix(in srgb, var(--rp-color-text) 16%, transparent);
800
+ color: var(--rp-color-text);
801
+ font-size: 11.5px;
802
+ line-height: 1.5;
803
+ white-space: nowrap;
804
+ pointer-events: none;
805
+ }
806
+ .pw-api {
807
+ display: flex;
808
+ flex-direction: column;
809
+ flex: 1;
810
+ min-height: 0;
811
+ /* 页签行固定:flex 布局里 flex: 0 0 auto,滚动交给下面的 __body */
812
+ /* 内容区:自己滚,滚动条在这个区域右侧 */
813
+ /* Props 多一列默认值,类型列让出宽度 */
814
+ /* 默认值列不设宽度:按内容自适应(对象原文单行),说明列吃掉剩余空间 */
815
+ /* 空值统一用虚线胶囊,和演示胶囊区分开 */
816
+ /* 演示列内容包一层:td 上用 flex 会破坏表格盒模型,边框会断 */
817
+ }
818
+ .pw-api__head {
819
+ flex: 0 0 auto;
820
+ display: flex;
821
+ align-items: flex-end;
822
+ gap: 16px;
823
+ flex-wrap: wrap;
824
+ padding: 20px 24px 10px;
825
+ border-bottom: 1px solid var(--rp-color-border);
826
+ }
827
+ .pw-api__body {
828
+ flex: 1;
829
+ min-height: 0;
830
+ overflow: auto;
831
+ padding: 14px 24px 32px;
832
+ }
833
+ .pw-api__body::-webkit-scrollbar {
834
+ width: 6px;
835
+ height: 6px;
836
+ }
837
+ .pw-api__body::-webkit-scrollbar-track,
838
+ .pw-api__body::-webkit-scrollbar-corner {
839
+ background: transparent;
840
+ }
841
+ .pw-api__body::-webkit-scrollbar-button {
842
+ display: none;
843
+ }
844
+ .pw-api__body::-webkit-scrollbar-thumb {
845
+ border-radius: 999px;
846
+ background: color-mix(in srgb, var(--rp-color-text-muted) 16%, transparent);
847
+ }
848
+ .pw-api__body:hover::-webkit-scrollbar-thumb {
849
+ background: color-mix(in srgb, var(--rp-color-text-muted) 34%, transparent);
850
+ }
851
+ .pw-api__body:hover::-webkit-scrollbar-thumb:hover {
852
+ background: color-mix(in srgb, var(--rp-color-text-muted) 56%, transparent);
853
+ }
854
+ .pw-api__title {
855
+ display: flex;
856
+ align-items: baseline;
857
+ gap: 10px;
858
+ }
859
+ .pw-api__name {
860
+ font-size: 15px;
861
+ font-weight: 600;
862
+ }
863
+ .pw-api__meta {
864
+ color: var(--rp-color-text-muted);
865
+ font-size: 12px;
866
+ }
867
+ .pw-api__warn {
868
+ color: var(--rp-color-warning);
869
+ }
870
+ .pw-api__tabs {
871
+ display: flex;
872
+ gap: 4px;
873
+ margin-left: auto;
874
+ }
875
+ .pw-api__tab {
876
+ display: inline-flex;
877
+ align-items: center;
878
+ gap: 6px;
879
+ padding: 4px 10px;
880
+ border: 1px solid var(--rp-color-border);
881
+ border-radius: 999px;
882
+ background: transparent;
883
+ color: var(--rp-color-text-muted);
884
+ font: inherit;
885
+ font-size: 12px;
886
+ cursor: pointer;
887
+ }
888
+ .pw-api__tab:hover {
889
+ color: var(--rp-color-text);
890
+ }
891
+ .pw-api__tab.is-active {
892
+ border-color: var(--rp-color-primary);
893
+ background: color-mix(in srgb, var(--rp-color-primary) 10%, transparent);
894
+ color: var(--rp-color-primary);
895
+ }
896
+ .pw-api__count {
897
+ color: inherit;
898
+ opacity: 0.7;
899
+ font-variant-numeric: tabular-nums;
900
+ }
901
+ .pw-api__table {
902
+ width: 100%;
903
+ border-collapse: collapse;
904
+ font-size: 12.5px;
905
+ }
906
+ .pw-api th {
907
+ padding: 8px 10px;
908
+ border-bottom: 1px solid var(--rp-color-border);
909
+ color: var(--rp-color-text-muted);
910
+ font-size: 11px;
911
+ font-weight: 600;
912
+ letter-spacing: 0.04em;
913
+ text-align: left;
914
+ text-transform: uppercase;
915
+ /* 列宽按内容自适应时,表头不要折成「默认 / 值」 */
916
+ white-space: nowrap;
917
+ }
918
+ .pw-api td {
919
+ padding: 8px 10px;
920
+ border-bottom: 1px solid color-mix(in srgb, var(--rp-color-border) 60%, transparent);
921
+ vertical-align: top;
922
+ }
923
+ .pw-api tr.is-focus td {
924
+ background: color-mix(in srgb, var(--rp-color-primary) 8%, transparent);
925
+ }
926
+ .pw-api tr.is-missing .pw-api__desc {
927
+ color: var(--rp-color-text-muted);
928
+ }
929
+ .pw-api__col-name {
930
+ width: 13%;
931
+ }
932
+ .pw-api__col-type {
933
+ width: 32%;
934
+ }
935
+ .pw-api__table.is-props .pw-api__col-type {
936
+ width: 24%;
937
+ }
938
+ .pw-api__col-default {
939
+ width: 1%;
940
+ }
941
+ .pw-api__col-demo {
942
+ width: 14%;
943
+ }
944
+ .pw-api__name-cell code {
945
+ font-family: var(--rp-font-mono);
946
+ font-size: 12px;
947
+ }
948
+ .pw-api__name-line {
949
+ display: flex;
950
+ align-items: center;
951
+ gap: 6px;
952
+ white-space: nowrap;
953
+ }
954
+ .pw-api__types {
955
+ display: flex;
956
+ flex-direction: column;
957
+ gap: 12px;
958
+ }
959
+ .pw-api__type-card {
960
+ border: 1px solid var(--rp-color-border);
961
+ border-radius: 10px;
962
+ overflow: hidden;
963
+ }
964
+ .pw-api__type-card.is-focus {
965
+ border-color: var(--rp-color-primary);
966
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--rp-color-primary) 12%, transparent);
967
+ }
968
+ .pw-api__type-head {
969
+ display: flex;
970
+ align-items: center;
971
+ gap: 8px;
972
+ padding: 8px 12px;
973
+ border-bottom: 1px solid var(--rp-color-border);
974
+ background: color-mix(in srgb, var(--rp-color-surface) 60%, transparent);
975
+ }
976
+ .pw-api__type-name {
977
+ font-family: var(--rp-font-mono);
978
+ font-size: 12px;
979
+ font-weight: 600;
980
+ }
981
+ .pw-api__type-kind {
982
+ padding: 0 6px;
983
+ border-radius: 4px;
984
+ background: color-mix(in srgb, var(--rp-color-primary) 10%, transparent);
985
+ color: var(--rp-color-primary);
986
+ font-size: 10px;
987
+ }
988
+ .pw-api__type-file {
989
+ min-width: 0;
990
+ overflow: hidden;
991
+ color: var(--rp-color-text-muted);
992
+ font-family: var(--rp-font-mono);
993
+ font-size: 10.5px;
994
+ text-overflow: ellipsis;
995
+ white-space: nowrap;
996
+ }
997
+ .pw-api__copy {
998
+ display: inline-flex;
999
+ align-items: center;
1000
+ gap: 4px;
1001
+ margin-left: auto;
1002
+ padding: 2px 8px;
1003
+ border: 1px solid var(--rp-color-border);
1004
+ border-radius: 999px;
1005
+ background: transparent;
1006
+ color: var(--rp-color-text-muted);
1007
+ font: inherit;
1008
+ font-size: 11px;
1009
+ cursor: pointer;
1010
+ }
1011
+ .pw-api__copy:hover {
1012
+ border-color: var(--rp-color-primary);
1013
+ color: var(--rp-color-primary);
1014
+ }
1015
+ .pw-api__required {
1016
+ margin-left: 6px;
1017
+ padding: 0 5px;
1018
+ border-radius: 4px;
1019
+ background: color-mix(in srgb, var(--rp-color-danger) 12%, transparent);
1020
+ color: var(--rp-color-danger);
1021
+ font-size: 10px;
1022
+ }
1023
+ .pw-api__type {
1024
+ padding: 0;
1025
+ border: 0;
1026
+ background: transparent;
1027
+ color: var(--rp-color-text);
1028
+ font-family: var(--rp-font-mono);
1029
+ font-size: 11.5px;
1030
+ text-align: left;
1031
+ cursor: copy;
1032
+ word-break: break-word;
1033
+ }
1034
+ .pw-api__type:hover {
1035
+ color: var(--rp-color-primary);
1036
+ }
1037
+ .pw-api__type.is-link {
1038
+ color: var(--rp-color-primary);
1039
+ cursor: pointer;
1040
+ text-decoration: underline dotted;
1041
+ text-underline-offset: 3px;
1042
+ }
1043
+ .pw-api__signature {
1044
+ margin-top: 3px;
1045
+ color: var(--rp-color-text-muted);
1046
+ font-family: var(--rp-font-mono);
1047
+ font-size: 10.5px;
1048
+ word-break: break-all;
1049
+ }
1050
+ .pw-api__default {
1051
+ max-width: 420px;
1052
+ overflow: hidden;
1053
+ color: var(--rp-color-text-muted);
1054
+ font-family: var(--rp-font-mono);
1055
+ font-size: 11.5px;
1056
+ text-overflow: ellipsis;
1057
+ white-space: nowrap;
1058
+ }
1059
+ .pw-api__desc {
1060
+ color: var(--rp-color-text);
1061
+ }
1062
+ .pw-api__empty {
1063
+ display: inline-flex;
1064
+ align-items: center;
1065
+ padding: 0 7px;
1066
+ border: 1px dashed var(--rp-color-border);
1067
+ border-radius: 999px;
1068
+ color: var(--rp-color-text-muted);
1069
+ font-family: inherit;
1070
+ font-size: 11px;
1071
+ line-height: 18px;
1072
+ white-space: nowrap;
1073
+ }
1074
+ .pw-api__demo {
1075
+ display: flex;
1076
+ flex-wrap: wrap;
1077
+ gap: 4px;
1078
+ }
1079
+ .pw-api__demo-link {
1080
+ padding: 1px 7px;
1081
+ white-space: nowrap;
1082
+ border: 1px solid var(--rp-color-border);
1083
+ border-radius: 999px;
1084
+ background: transparent;
1085
+ color: var(--rp-color-text-muted);
1086
+ font: inherit;
1087
+ font-size: 11px;
1088
+ cursor: pointer;
1089
+ }
1090
+ .pw-api__demo-link:hover {
1091
+ border-color: var(--rp-color-primary);
1092
+ color: var(--rp-color-primary);
1093
+ }
1094
+ /* ---------- 非组件模块(函数 / 常量)专用的两处补充,其余沿用上面的 .pw-api 规则 ---------- */
1095
+ .pw-api__rel {
1096
+ margin-left: 8px;
1097
+ color: var(--rp-color-text-muted);
1098
+ font-family: var(--rp-font-mono);
1099
+ font-size: 11px;
1100
+ }
1101
+ .pw-api__param + .pw-api__param {
1102
+ margin-top: 6px;
1103
+ padding-top: 6px;
1104
+ border-top: 1px dashed color-mix(in srgb, var(--rp-color-border) 70%, transparent);
1105
+ }
1106
+ .pw-api__param code {
1107
+ font-family: var(--rp-font-mono);
1108
+ font-size: 11.5px;
1109
+ }
1110
+ .pw-api__param-type {
1111
+ margin-left: 4px;
1112
+ color: var(--rp-color-primary);
1113
+ font-family: var(--rp-font-mono);
1114
+ font-size: 11.5px;
1115
+ }
1116
+ .pw-api__param-default {
1117
+ margin-left: 6px;
1118
+ color: var(--rp-color-text-muted);
1119
+ font-family: var(--rp-font-mono);
1120
+ font-size: 11px;
1121
+ }
1122
+ .pw-api__param-desc {
1123
+ margin-top: 2px;
1124
+ color: var(--rp-color-text-muted);
1125
+ font-size: 11.5px;
1126
+ line-height: 1.55;
1127
+ }
1128
+ /* 函数表:名称列窄一点,把宽度让给参数 */
1129
+ .pw-api__table.is-functions .pw-api__col-name {
1130
+ width: 26%;
1131
+ }
1132
+ .pw-api__table.is-functions .pw-api__signature {
1133
+ margin-top: 4px;
1134
+ }
1135
+ /* 函数表的列宽:名称 / 参数 / 返回 / 说明 / 场景,说明列不能再被压成四行 */
1136
+ .pw-api__table.is-functions .pw-api__col-name {
1137
+ width: 24%;
1138
+ }
1139
+ .pw-api__table.is-functions > thead > tr > th:nth-child(2) {
1140
+ width: 30%;
1141
+ }
1142
+ .pw-api__table.is-functions .pw-api__col-type {
1143
+ width: 15%;
1144
+ }
1145
+ .pw-api__table.is-functions > thead > tr > th:nth-child(4) {
1146
+ width: 22%;
1147
+ }
1148
+ .pw-api__table.is-functions .pw-api__col-demo {
1149
+ width: 9%;
1150
+ }
1151
+ /* 签名按空格断行,不把类型名拆成两半(FormatMoneyOptions 不能被拆成 Fo/rmat…) */
1152
+ .pw-api__signature {
1153
+ overflow-wrap: normal;
1154
+ word-break: normal;
1155
+ }
1156
+ /* rinova-playground 外壳主题:只有这 12 个变量,dark 是同一组变量的另一套取值。 */
1157
+ :root {
1158
+ --rp-color-bg: #ffffff;
1159
+ --rp-color-surface: #f6f7f9;
1160
+ --rp-color-border: #e4e7ec;
1161
+ --rp-color-text: #1c2024;
1162
+ --rp-color-text-muted: #667085;
1163
+ --rp-color-primary: #2f6feb;
1164
+ --rp-color-primary-contrast: #ffffff;
1165
+ --rp-color-success: #1a7f37;
1166
+ --rp-color-warning: #b7791f;
1167
+ --rp-color-danger: #d1242f;
1168
+ --rp-radius: 8px;
1169
+ --rp-font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
1170
+ color-scheme: light;
1171
+ }
1172
+ :root[data-pw-theme='dark'] {
1173
+ --rp-color-bg: #16181d;
1174
+ --rp-color-surface: #1c1f26;
1175
+ --rp-color-border: #2b3038;
1176
+ --rp-color-text: #e6e8ec;
1177
+ --rp-color-text-muted: #98a2b3;
1178
+ --rp-color-primary: #5b8def;
1179
+ --rp-color-primary-contrast: #0b1220;
1180
+ --rp-color-success: #3fb950;
1181
+ --rp-color-warning: #d29922;
1182
+ --rp-color-danger: #f85149;
1183
+ color-scheme: dark;
1184
+ }
1185
+ /**
1186
+ * 演示画布(scene 预览区)自带一套 token,与外壳主题解耦。
1187
+ * 默认浅色:很多组件库只做了浅色,放在暗色外壳里会变成「黑底黑字」。
1188
+ * 由 config.theme.stage 决定取值('auto' 时跟随外壳),挂到 [data-pw-stage] 上。
1189
+ */
1190
+ [data-pw-stage='light'] {
1191
+ --rp-color-bg: #ffffff;
1192
+ --rp-color-surface: #f6f7f9;
1193
+ --rp-color-border: #e4e7ec;
1194
+ --rp-color-text: #1c2024;
1195
+ --rp-color-text-muted: #667085;
1196
+ --rp-color-primary: #2f6feb;
1197
+ --rp-color-primary-contrast: #ffffff;
1198
+ --rp-color-success: #1a7f37;
1199
+ --rp-color-warning: #b7791f;
1200
+ --rp-color-danger: #d1242f;
1201
+ color-scheme: light;
1202
+ }
1203
+ [data-pw-stage='dark'] {
1204
+ --rp-color-bg: #16181d;
1205
+ --rp-color-surface: #1c1f26;
1206
+ --rp-color-border: #2b3038;
1207
+ --rp-color-text: #e6e8ec;
1208
+ --rp-color-text-muted: #98a2b3;
1209
+ --rp-color-primary: #5b8def;
1210
+ --rp-color-primary-contrast: #0b1220;
1211
+ --rp-color-success: #3fb950;
1212
+ --rp-color-warning: #d29922;
1213
+ --rp-color-danger: #f85149;
1214
+ color-scheme: dark;
1215
+ }
1216
+ html,
1217
+ body {
1218
+ margin: 0;
1219
+ padding: 0;
1220
+ height: 100%;
1221
+ background: var(--rp-color-bg);
1222
+ color: var(--rp-color-text);
1223
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
1224
+ font-size: 14px;
1225
+ -webkit-font-smoothing: antialiased;
1226
+ }
1227
+ #app {
1228
+ height: 100%;
1229
+ }
1230
+ .pw-app *,
1231
+ .pw-app *::before,
1232
+ .pw-app *::after {
1233
+ box-sizing: border-box;
1234
+ }
1235
+ /* 浅色/深色切换用 View Transitions 的圆形揭开:默认的交叉淡入会和剪辑动画打架,关掉 */
1236
+ ::view-transition-old(root),
1237
+ ::view-transition-new(root) {
1238
+ animation: none;
1239
+ mix-blend-mode: normal;
1240
+ }
1241
+ .pw-input[data-v-d56e665e] {
1242
+ display: flex;
1243
+ align-items: center;
1244
+ gap: 6px;
1245
+ width: 100%;
1246
+ padding: 0 8px;
1247
+ border: 1px solid var(--rp-color-border);
1248
+ border-radius: calc(var(--rp-radius) - 2px);
1249
+ background: var(--rp-color-bg);
1250
+ color: var(--rp-color-text);
1251
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
1252
+ }
1253
+ .pw-input--sm[data-v-d56e665e] {
1254
+ height: 26px;
1255
+ }
1256
+ .pw-input--md[data-v-d56e665e] {
1257
+ height: 32px;
1258
+ }
1259
+ .pw-input[data-v-d56e665e]:focus-within {
1260
+ border-color: var(--rp-color-primary);
1261
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--rp-color-primary) 16%, transparent);
1262
+ }
1263
+ .pw-input__field[data-v-d56e665e] {
1264
+ flex: 1;
1265
+ min-width: 0;
1266
+ border: 0;
1267
+ outline: 0;
1268
+ background: transparent;
1269
+ color: inherit;
1270
+ font: inherit;
1271
+ }
1272
+ .pw-input__field[data-v-d56e665e]::placeholder {
1273
+ color: var(--rp-color-text-muted);
1274
+ }
1275
+ .pw-input__clear[data-v-d56e665e] {
1276
+ display: inline-flex;
1277
+ align-items: center;
1278
+ justify-content: center;
1279
+ width: 16px;
1280
+ height: 16px;
1281
+ padding: 0;
1282
+ border: 0;
1283
+ border-radius: 50%;
1284
+ background: color-mix(in srgb, var(--rp-color-text-muted) 20%, transparent);
1285
+ color: var(--rp-color-text-muted);
1286
+ font-size: 12px;
1287
+ line-height: 1;
1288
+ cursor: pointer;
1289
+ }
1290
+ .pw-input__clear[data-v-d56e665e]:hover {
1291
+ color: var(--rp-color-text);
1292
+ }
1293
+ .pw-code[data-v-14e60795] {
1294
+ height: 100%;
1295
+ overflow: auto;
1296
+ font-family: var(--rp-font-mono);
1297
+ font-size: 12.5px;
1298
+ line-height: 1.65;
1299
+ }
1300
+ .pw-code[data-v-14e60795]::-webkit-scrollbar {
1301
+ width: 6px;
1302
+ height: 6px;
1303
+ }
1304
+ .pw-code[data-v-14e60795]::-webkit-scrollbar-track,
1305
+ .pw-code[data-v-14e60795]::-webkit-scrollbar-corner {
1306
+ background: transparent;
1307
+ }
1308
+ .pw-code[data-v-14e60795]::-webkit-scrollbar-button {
1309
+ display: none;
1310
+ }
1311
+ .pw-code[data-v-14e60795]::-webkit-scrollbar-thumb {
1312
+ border-radius: 999px;
1313
+ background: color-mix(in srgb, var(--rp-color-text-muted) 16%, transparent);
1314
+ }
1315
+ .pw-code[data-v-14e60795]:hover::-webkit-scrollbar-thumb {
1316
+ background: color-mix(in srgb, var(--rp-color-text-muted) 34%, transparent);
1317
+ }
1318
+ .pw-code[data-v-14e60795]:hover::-webkit-scrollbar-thumb:hover {
1319
+ background: color-mix(in srgb, var(--rp-color-text-muted) 56%, transparent);
1320
+ }
1321
+ .pw-code__hint[data-v-14e60795],
1322
+ .pw-code__error[data-v-14e60795] {
1323
+ margin: 0;
1324
+ padding: 16px;
1325
+ color: var(--rp-color-text-muted);
1326
+ white-space: pre-wrap;
1327
+ }
1328
+ .pw-code__error[data-v-14e60795] {
1329
+ color: var(--rp-color-danger);
1330
+ }
1331
+ .pw-code__body[data-v-14e60795] pre {
1332
+ margin: 0;
1333
+ padding: 12px 16px 20px;
1334
+ background: transparent !important;
1335
+ tab-size: 2;
1336
+ }
1337
+ .pw-code__body[data-v-14e60795] code {
1338
+ font-family: inherit;
1339
+ font-size: inherit;
1340
+ line-height: inherit;
1341
+ }
1342
+ .pw-code__body[data-v-14e60795] span {
1343
+ color: var(--shiki-light);
1344
+ }
1345
+ :root[data-pw-theme='dark'] .pw-code__body[data-v-14e60795] span {
1346
+ color: var(--shiki-dark);
1347
+ }
1348
+ /* 搜索命中:普通命中淡底,当前命中实底 */
1349
+ .pw-code__body[data-v-14e60795] .pw-code__hit {
1350
+ border-radius: 2px;
1351
+ background: color-mix(in srgb, var(--rp-color-warning) 32%, transparent);
1352
+ color: inherit;
1353
+ }
1354
+ .pw-code__body[data-v-14e60795] .pw-code__hit.is-active {
1355
+ background: var(--rp-color-warning);
1356
+ color: var(--rp-color-bg);
1357
+ }
1358
+ .pw-picker[data-v-d6404e2a] {
1359
+ position: relative;
1360
+ }
1361
+ .pw-picker__btn[data-v-d6404e2a] {
1362
+ display: inline-flex;
1363
+ align-items: center;
1364
+ justify-content: center;
1365
+ width: 28px;
1366
+ height: 28px;
1367
+ border: 1px solid var(--rp-color-border);
1368
+ border-radius: 8px;
1369
+ background: transparent;
1370
+ color: var(--rp-color-text-muted);
1371
+ cursor: pointer;
1372
+ }
1373
+ .pw-picker__btn[data-v-d6404e2a]:hover {
1374
+ border-color: var(--rp-color-primary);
1375
+ color: var(--rp-color-primary);
1376
+ }
1377
+ .pw-picker__btn.is-active[data-v-d6404e2a] {
1378
+ border-color: var(--rp-color-primary);
1379
+ background: color-mix(in srgb, var(--rp-color-primary) 10%, transparent);
1380
+ color: var(--rp-color-primary);
1381
+ }
1382
+ .pw-picker__btn[data-v-d6404e2a]:disabled {
1383
+ cursor: default;
1384
+ opacity: 0.75;
1385
+ }
1386
+ .pw-picker__menu[data-v-d6404e2a] {
1387
+ position: absolute;
1388
+ top: calc(100% + 6px);
1389
+ right: 0;
1390
+ z-index: 30;
1391
+ width: 236px;
1392
+ padding: 6px;
1393
+ border: 1px solid var(--rp-color-border);
1394
+ border-radius: 8px;
1395
+ background: var(--rp-color-surface);
1396
+ box-shadow: 0 8px 24px color-mix(in srgb, var(--rp-color-text) 14%, transparent);
1397
+ }
1398
+ .pw-picker__menu-label[data-v-d6404e2a] {
1399
+ padding: 2px 6px 6px;
1400
+ color: var(--rp-color-text-muted);
1401
+ font-size: 10.5px;
1402
+ letter-spacing: 0.04em;
1403
+ text-transform: uppercase;
1404
+ }
1405
+ .pw-picker__item[data-v-d6404e2a] {
1406
+ display: flex;
1407
+ align-items: center;
1408
+ gap: 6px;
1409
+ width: 100%;
1410
+ padding: 5px 6px;
1411
+ border: 0;
1412
+ border-radius: 5px;
1413
+ background: transparent;
1414
+ color: var(--rp-color-text);
1415
+ font: inherit;
1416
+ font-size: 12px;
1417
+ text-align: left;
1418
+ cursor: pointer;
1419
+ }
1420
+ .pw-picker__item[data-v-d6404e2a]:hover {
1421
+ background: color-mix(in srgb, var(--rp-color-primary) 10%, transparent);
1422
+ color: var(--rp-color-primary);
1423
+ }
1424
+ .pw-picker__sep[data-v-d6404e2a] {
1425
+ height: 1px;
1426
+ margin: 4px 0;
1427
+ background: var(--rp-color-border);
1428
+ }
1429
+ .pw-picker__input[data-v-d6404e2a] {
1430
+ width: 100%;
1431
+ padding: 5px 7px;
1432
+ border: 1px solid var(--rp-color-border);
1433
+ border-radius: 6px;
1434
+ background: var(--rp-color-bg);
1435
+ color: var(--rp-color-text);
1436
+ font-family: var(--rp-font-mono);
1437
+ font-size: 11.5px;
1438
+ outline: none;
1439
+ }
1440
+ .pw-picker__input[data-v-d6404e2a]:focus {
1441
+ border-color: var(--rp-color-primary);
1442
+ }
1443
+ .pw-picker__hint[data-v-d6404e2a] {
1444
+ margin: 6px 2px 8px;
1445
+ color: var(--rp-color-text-muted);
1446
+ font-size: 10.5px;
1447
+ line-height: 1.5;
1448
+ }
1449
+ .pw-picker__hint code[data-v-d6404e2a] {
1450
+ font-family: var(--rp-font-mono);
1451
+ font-size: 10.5px;
1452
+ }
1453
+ .pw-picker__hint.is-invalid[data-v-d6404e2a] {
1454
+ color: var(--rp-color-danger);
1455
+ }
1456
+ .pw-picker__actions[data-v-d6404e2a] {
1457
+ display: flex;
1458
+ justify-content: flex-end;
1459
+ gap: 6px;
1460
+ }
1461
+ .pw-picker__action[data-v-d6404e2a] {
1462
+ padding: 3px 10px;
1463
+ border: 1px solid var(--rp-color-border);
1464
+ border-radius: 6px;
1465
+ background: transparent;
1466
+ color: var(--rp-color-text-muted);
1467
+ font: inherit;
1468
+ font-size: 11.5px;
1469
+ cursor: pointer;
1470
+ }
1471
+ .pw-picker__action--primary[data-v-d6404e2a] {
1472
+ border-color: var(--rp-color-primary);
1473
+ background: var(--rp-color-primary);
1474
+ color: var(--rp-color-primary-contrast);
1475
+ }
1476
+ .pw-picker__action--primary[data-v-d6404e2a]:disabled {
1477
+ opacity: 0.45;
1478
+ cursor: not-allowed;
1479
+ }
1480
+ .is-hidden[data-v-d6404e2a] {
1481
+ visibility: hidden;
1482
+ }
1483
+ .pw-index[data-v-b676ec15] {
1484
+ width: 100%;
1485
+ height: 100%;
1486
+ min-height: 0;
1487
+ overflow: auto;
1488
+ padding: 18px 14px 24px 18px;
1489
+ }
1490
+ .pw-index[data-v-b676ec15]::-webkit-scrollbar {
1491
+ width: 6px;
1492
+ height: 6px;
1493
+ }
1494
+ .pw-index[data-v-b676ec15]::-webkit-scrollbar-track,
1495
+ .pw-index[data-v-b676ec15]::-webkit-scrollbar-corner {
1496
+ background: transparent;
1497
+ }
1498
+ .pw-index[data-v-b676ec15]::-webkit-scrollbar-button {
1499
+ display: none;
1500
+ }
1501
+ .pw-index[data-v-b676ec15]::-webkit-scrollbar-thumb {
1502
+ border-radius: 999px;
1503
+ background: color-mix(in srgb, var(--rp-color-text-muted) 16%, transparent);
1504
+ }
1505
+ .pw-index[data-v-b676ec15]:hover::-webkit-scrollbar-thumb {
1506
+ background: color-mix(in srgb, var(--rp-color-text-muted) 34%, transparent);
1507
+ }
1508
+ .pw-index[data-v-b676ec15]:hover::-webkit-scrollbar-thumb:hover {
1509
+ background: color-mix(in srgb, var(--rp-color-text-muted) 56%, transparent);
1510
+ }
1511
+ .pw-index__inner[data-v-b676ec15] {
1512
+ display: flex;
1513
+ flex-direction: column;
1514
+ gap: 18px;
1515
+ padding-right: 2px;
1516
+ }
1517
+ .pw-index__label[data-v-b676ec15] {
1518
+ margin: 0 0 6px;
1519
+ /* 和链接文字同一条 9px 内缩 */
1520
+ padding-left: 9px;
1521
+ color: var(--rp-color-text-muted);
1522
+ font-size: 10.5px;
1523
+ font-weight: 600;
1524
+ letter-spacing: 0.06em;
1525
+ text-transform: uppercase;
1526
+ }
1527
+ .pw-index__link[data-v-b676ec15] {
1528
+ display: block;
1529
+ padding: 5px 9px;
1530
+ border-radius: 6px;
1531
+ color: var(--rp-color-text-muted);
1532
+ font-size: 12.5px;
1533
+ line-height: 1.5;
1534
+ text-decoration: none;
1535
+ transition: color 0.15s ease, background 0.15s ease;
1536
+ }
1537
+ .pw-index__link + .pw-index__link[data-v-b676ec15] {
1538
+ margin-top: 1px;
1539
+ }
1540
+ .pw-index__link[data-v-b676ec15]:hover {
1541
+ background: color-mix(in srgb, var(--rp-color-text-muted) 10%, transparent);
1542
+ color: var(--rp-color-text);
1543
+ }
1544
+ .pw-index__link[data-v-b676ec15]:focus-visible {
1545
+ outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 45%, transparent);
1546
+ outline-offset: -2px;
1547
+ }
1548
+ .pw-index__link.is-active[data-v-b676ec15] {
1549
+ background: color-mix(in srgb, var(--rp-color-primary) 12%, transparent);
1550
+ color: var(--rp-color-primary);
1551
+ font-weight: 500;
1552
+ }
1553
+ .pw-boundary[data-v-2b6db55b] {
1554
+ display: contents;
1555
+ }
1556
+ .pw-boundary--error[data-v-2b6db55b] {
1557
+ display: block;
1558
+ padding: 12px 14px;
1559
+ border: 1px solid color-mix(in srgb, var(--rp-color-danger) 45%, transparent);
1560
+ border-radius: var(--rp-radius);
1561
+ background: color-mix(in srgb, var(--rp-color-danger) 8%, transparent);
1562
+ }
1563
+ .pw-boundary__head[data-v-2b6db55b] {
1564
+ margin: 0 0 6px;
1565
+ color: var(--rp-color-danger);
1566
+ font-size: 13px;
1567
+ font-weight: 600;
1568
+ }
1569
+ .pw-boundary__message[data-v-2b6db55b] {
1570
+ margin: 0 0 6px;
1571
+ font-family: var(--rp-font-mono);
1572
+ font-size: 12px;
1573
+ word-break: break-word;
1574
+ }
1575
+ .pw-boundary__file[data-v-2b6db55b] {
1576
+ margin: 0 0 8px;
1577
+ color: var(--rp-color-text-muted);
1578
+ font-family: var(--rp-font-mono);
1579
+ font-size: 11.5px;
1580
+ }
1581
+ .pw-boundary__stack[data-v-2b6db55b] {
1582
+ font-size: 11.5px;
1583
+ }
1584
+ .pw-boundary__stack summary[data-v-2b6db55b] {
1585
+ cursor: pointer;
1586
+ color: var(--rp-color-text-muted);
1587
+ }
1588
+ .pw-boundary__stack pre[data-v-2b6db55b] {
1589
+ max-height: 180px;
1590
+ margin: 6px 0 0;
1591
+ overflow: auto;
1592
+ font-family: var(--rp-font-mono);
1593
+ font-size: 11px;
1594
+ white-space: pre-wrap;
1595
+ }
1596
+ .pw-plugin-slot[data-v-e9b00509] {
1597
+ display: flex;
1598
+ align-items: center;
1599
+ gap: 4px;
1600
+ min-width: 0;
1601
+ }
1602
+ .pw-plugin-slot--header[data-v-e9b00509] {
1603
+ max-width: 220px;
1604
+ height: 28px;
1605
+ overflow: hidden;
1606
+ }
1607
+ .pw-plugin-slot--sidebarFooter[data-v-e9b00509] {
1608
+ flex-direction: column;
1609
+ align-items: stretch;
1610
+ gap: 6px;
1611
+ max-height: 64px;
1612
+ overflow: hidden;
1613
+ /* 缝位里的错误卡片压成一行,堆栈留在控制台,不把页脚撑爆 */
1614
+ }
1615
+ .pw-plugin-slot--sidebarFooter[data-v-e9b00509] .pw-boundary--error {
1616
+ padding: 6px 8px;
1617
+ }
1618
+ .pw-plugin-slot--sidebarFooter[data-v-e9b00509] .pw-boundary__file,
1619
+ .pw-plugin-slot--sidebarFooter[data-v-e9b00509] .pw-boundary__stack {
1620
+ display: none;
1621
+ }
1622
+ .pw-switch[data-v-64fffbcb] {
1623
+ position: relative;
1624
+ width: 34px;
1625
+ height: 20px;
1626
+ flex: 0 0 auto;
1627
+ padding: 0;
1628
+ border: 1px solid var(--rp-color-border);
1629
+ border-radius: 999px;
1630
+ background: var(--rp-color-surface);
1631
+ cursor: pointer;
1632
+ transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
1633
+ }
1634
+ .pw-switch[data-v-64fffbcb]:focus-visible {
1635
+ outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 55%, transparent);
1636
+ outline-offset: 2px;
1637
+ }
1638
+ .pw-switch[data-v-64fffbcb]:disabled {
1639
+ opacity: 0.5;
1640
+ cursor: not-allowed;
1641
+ }
1642
+ .pw-switch.is-on[data-v-64fffbcb] {
1643
+ border-color: var(--rp-color-primary);
1644
+ background: var(--rp-color-primary);
1645
+ }
1646
+ .pw-switch__thumb[data-v-64fffbcb] {
1647
+ position: absolute;
1648
+ top: 2px;
1649
+ left: 2px;
1650
+ width: 14px;
1651
+ height: 14px;
1652
+ border-radius: 50%;
1653
+ background: var(--rp-color-bg);
1654
+ box-shadow: 0 1px 2px color-mix(in srgb, var(--rp-color-text) 25%, transparent);
1655
+ transition: transform 0.16s ease;
1656
+ }
1657
+ .pw-switch.is-on .pw-switch__thumb[data-v-64fffbcb] {
1658
+ transform: translateX(14px);
1659
+ }
1660
+ .pw-args[data-v-d7e75f4f] {
1661
+ display: flex;
1662
+ flex-direction: column;
1663
+ gap: 10px;
1664
+ padding: 12px 14px;
1665
+ border: 1px dashed var(--rp-color-border);
1666
+ border-radius: var(--rp-radius);
1667
+ background: var(--rp-color-surface);
1668
+ }
1669
+ .pw-args__head[data-v-d7e75f4f] {
1670
+ display: flex;
1671
+ align-items: center;
1672
+ gap: 6px;
1673
+ }
1674
+ .pw-args__title[data-v-d7e75f4f] {
1675
+ color: var(--rp-color-text-muted);
1676
+ font-size: 11.5px;
1677
+ font-weight: 600;
1678
+ }
1679
+ .pw-args__reset[data-v-d7e75f4f] {
1680
+ margin-left: auto;
1681
+ }
1682
+ .pw-args__slot + .pw-args__slot[data-v-d7e75f4f] {
1683
+ padding-top: 10px;
1684
+ border-top: 1px dashed var(--rp-color-border);
1685
+ }
1686
+ .pw-args__slot-head[data-v-d7e75f4f] {
1687
+ display: flex;
1688
+ align-items: center;
1689
+ gap: 6px;
1690
+ margin-bottom: 8px;
1691
+ }
1692
+ .pw-args__slot-name[data-v-d7e75f4f] {
1693
+ color: var(--rp-color-text-muted);
1694
+ font-size: 11.5px;
1695
+ font-weight: 600;
1696
+ }
1697
+ .pw-args__reset[data-v-d7e75f4f] {
1698
+ display: inline-flex;
1699
+ padding: 2px;
1700
+ border: 0;
1701
+ border-radius: 4px;
1702
+ background: transparent;
1703
+ color: var(--rp-color-text-muted);
1704
+ cursor: pointer;
1705
+ }
1706
+ .pw-args__reset[data-v-d7e75f4f]:hover {
1707
+ color: var(--rp-color-primary);
1708
+ }
1709
+ .pw-args__grid[data-v-d7e75f4f] {
1710
+ display: grid;
1711
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
1712
+ gap: 10px 20px;
1713
+ }
1714
+ @media (max-width: 720px) {
1715
+ .pw-args__grid[data-v-d7e75f4f] {
1716
+ grid-template-columns: minmax(0, 1fr);
1717
+ }
1718
+ }
1719
+ .pw-args__field[data-v-d7e75f4f] {
1720
+ display: flex;
1721
+ flex-direction: column;
1722
+ gap: 4px;
1723
+ min-width: 0;
1724
+ }
1725
+ .pw-args__label[data-v-d7e75f4f] {
1726
+ overflow: hidden;
1727
+ color: var(--rp-color-text-muted);
1728
+ font-size: 11.5px;
1729
+ text-overflow: ellipsis;
1730
+ white-space: nowrap;
1731
+ }
1732
+ .pw-args__select[data-v-d7e75f4f] {
1733
+ flex: 1;
1734
+ min-width: 0;
1735
+ height: 28px;
1736
+ padding: 0 8px;
1737
+ border: 1px solid var(--rp-color-border);
1738
+ border-radius: 6px;
1739
+ background: var(--rp-color-bg);
1740
+ color: var(--rp-color-text);
1741
+ font-family: inherit;
1742
+ font-size: 12px;
1743
+ }
1744
+ .pw-source[data-v-9eb680ec] {
1745
+ display: flex;
1746
+ flex-direction: column;
1747
+ min-width: 0;
1748
+ border: 1px solid var(--rp-color-border);
1749
+ border-radius: var(--rp-radius);
1750
+ overflow: hidden;
1751
+ }
1752
+ .pw-source__head[data-v-9eb680ec] {
1753
+ display: flex;
1754
+ align-items: center;
1755
+ gap: 8px;
1756
+ min-height: 32px;
1757
+ padding: 0 8px 0 4px;
1758
+ }
1759
+ .pw-source__toggle[data-v-9eb680ec] {
1760
+ display: flex;
1761
+ flex: 1;
1762
+ align-items: center;
1763
+ gap: 6px;
1764
+ min-width: 0;
1765
+ padding: 6px 4px;
1766
+ border: 0;
1767
+ background: transparent;
1768
+ color: var(--rp-color-text-muted);
1769
+ font: inherit;
1770
+ font-size: 12px;
1771
+ cursor: pointer;
1772
+ }
1773
+ .pw-source__toggle[data-v-9eb680ec]:hover {
1774
+ color: var(--rp-color-text);
1775
+ }
1776
+ .pw-source__chevron[data-v-9eb680ec] {
1777
+ flex: 0 0 auto;
1778
+ transition: transform 0.15s ease;
1779
+ }
1780
+ .pw-source.is-open .pw-source__chevron[data-v-9eb680ec] {
1781
+ transform: rotate(90deg);
1782
+ }
1783
+ .pw-source__icon[data-v-9eb680ec] {
1784
+ flex: 0 0 auto;
1785
+ }
1786
+ .pw-source__label[data-v-9eb680ec] {
1787
+ flex: 0 0 auto;
1788
+ }
1789
+ .pw-source__file[data-v-9eb680ec] {
1790
+ overflow: hidden;
1791
+ font-family: var(--rp-font-mono);
1792
+ font-size: 11.5px;
1793
+ text-overflow: ellipsis;
1794
+ white-space: nowrap;
1795
+ }
1796
+ .pw-source__actions[data-v-9eb680ec] {
1797
+ display: flex;
1798
+ gap: 2px;
1799
+ }
1800
+ .pw-source__action[data-v-9eb680ec] {
1801
+ display: inline-flex;
1802
+ align-items: center;
1803
+ justify-content: center;
1804
+ width: 24px;
1805
+ height: 24px;
1806
+ border: 0;
1807
+ border-radius: 5px;
1808
+ background: transparent;
1809
+ color: var(--rp-color-text-muted);
1810
+ cursor: pointer;
1811
+ }
1812
+ .pw-source__action[data-v-9eb680ec]:hover,
1813
+ .pw-source__action.is-on[data-v-9eb680ec] {
1814
+ background: color-mix(in srgb, var(--rp-color-text-muted) 12%, transparent);
1815
+ color: var(--rp-color-primary);
1816
+ }
1817
+ .pw-source__body[data-v-9eb680ec] {
1818
+ border-top: 1px solid var(--rp-color-border);
1819
+ }
1820
+ .pw-source__find[data-v-9eb680ec] {
1821
+ display: flex;
1822
+ align-items: center;
1823
+ gap: 4px;
1824
+ padding: 6px 8px;
1825
+ border-bottom: 1px solid color-mix(in srgb, var(--rp-color-border) 60%, transparent);
1826
+ background: color-mix(in srgb, var(--rp-color-surface) 60%, transparent);
1827
+ }
1828
+ .pw-source__find-icon[data-v-9eb680ec] {
1829
+ flex: 0 0 auto;
1830
+ color: var(--rp-color-text-muted);
1831
+ }
1832
+ .pw-source__find-input[data-v-9eb680ec] {
1833
+ flex: 1;
1834
+ min-width: 0;
1835
+ padding: 2px 4px;
1836
+ border: 0;
1837
+ background: transparent;
1838
+ color: var(--rp-color-text);
1839
+ font-family: var(--rp-font-mono);
1840
+ font-size: 12px;
1841
+ outline: none;
1842
+ }
1843
+ .pw-source__find-input[data-v-9eb680ec]::placeholder {
1844
+ color: var(--rp-color-text-muted);
1845
+ }
1846
+ .pw-source__find-count[data-v-9eb680ec] {
1847
+ flex: 0 0 auto;
1848
+ min-width: 44px;
1849
+ color: var(--rp-color-text-muted);
1850
+ font-size: 11px;
1851
+ font-variant-numeric: tabular-nums;
1852
+ text-align: right;
1853
+ }
1854
+ .pw-source__find-btn[data-v-9eb680ec] {
1855
+ display: inline-flex;
1856
+ align-items: center;
1857
+ justify-content: center;
1858
+ width: 22px;
1859
+ height: 22px;
1860
+ padding: 0;
1861
+ border: 0;
1862
+ border-radius: 5px;
1863
+ background: transparent;
1864
+ color: var(--rp-color-text-muted);
1865
+ cursor: pointer;
1866
+ }
1867
+ .pw-source__find-btn[data-v-9eb680ec]:hover:not(:disabled) {
1868
+ background: color-mix(in srgb, var(--rp-color-text-muted) 12%, transparent);
1869
+ color: var(--rp-color-text);
1870
+ }
1871
+ .pw-source__find-btn.is-on[data-v-9eb680ec] {
1872
+ color: var(--rp-color-primary);
1873
+ }
1874
+ .pw-source__find-btn[data-v-9eb680ec]:disabled {
1875
+ opacity: 0.35;
1876
+ cursor: default;
1877
+ }
1878
+ .pw-source__tabs[data-v-9eb680ec] {
1879
+ display: flex;
1880
+ gap: 2px;
1881
+ padding: 6px 8px 0;
1882
+ overflow-x: auto;
1883
+ }
1884
+ .pw-source__tab[data-v-9eb680ec] {
1885
+ padding: 3px 10px;
1886
+ border: 1px solid transparent;
1887
+ border-bottom: 0;
1888
+ border-radius: 6px 6px 0 0;
1889
+ background: transparent;
1890
+ color: var(--rp-color-text-muted);
1891
+ font-family: var(--rp-font-mono);
1892
+ font-size: 11.5px;
1893
+ cursor: pointer;
1894
+ white-space: nowrap;
1895
+ }
1896
+ .pw-source__tab.is-active[data-v-9eb680ec] {
1897
+ border-color: var(--rp-color-border);
1898
+ background: var(--rp-color-bg);
1899
+ color: var(--rp-color-text);
1900
+ }
1901
+ .pw-source__code[data-v-9eb680ec] {
1902
+ max-height: 420px;
1903
+ overflow: auto;
1904
+ counter-reset: pw-line;
1905
+ }
1906
+ .pw-source__code[data-v-9eb680ec]::-webkit-scrollbar {
1907
+ width: 6px;
1908
+ height: 6px;
1909
+ }
1910
+ .pw-source__code[data-v-9eb680ec]::-webkit-scrollbar-track,
1911
+ .pw-source__code[data-v-9eb680ec]::-webkit-scrollbar-corner {
1912
+ background: transparent;
1913
+ }
1914
+ .pw-source__code[data-v-9eb680ec]::-webkit-scrollbar-button {
1915
+ display: none;
1916
+ }
1917
+ .pw-source__code[data-v-9eb680ec]::-webkit-scrollbar-thumb {
1918
+ border-radius: 999px;
1919
+ background: color-mix(in srgb, var(--rp-color-text-muted) 16%, transparent);
1920
+ }
1921
+ .pw-source__code[data-v-9eb680ec]:hover::-webkit-scrollbar-thumb {
1922
+ background: color-mix(in srgb, var(--rp-color-text-muted) 34%, transparent);
1923
+ }
1924
+ .pw-source__code[data-v-9eb680ec]:hover::-webkit-scrollbar-thumb:hover {
1925
+ background: color-mix(in srgb, var(--rp-color-text-muted) 56%, transparent);
1926
+ }
1927
+ .pw-source__code[data-v-9eb680ec] .line {
1928
+ display: inline-block;
1929
+ width: 100%;
1930
+ }
1931
+ .pw-source__code[data-v-9eb680ec] .line::before {
1932
+ counter-increment: pw-line;
1933
+ content: counter(pw-line);
1934
+ display: inline-block;
1935
+ width: 2.2em;
1936
+ margin-right: 0.9em;
1937
+ padding-right: 0.6em;
1938
+ color: var(--rp-color-text-muted);
1939
+ opacity: 0.55;
1940
+ text-align: right;
1941
+ user-select: none;
1942
+ }
1943
+ .pw-source__hint[data-v-9eb680ec] {
1944
+ margin: 0;
1945
+ padding: 12px;
1946
+ color: var(--rp-color-text-muted);
1947
+ font-size: 12px;
1948
+ }
1949
+ .pw-output[data-v-31716e5f] {
1950
+ display: flex;
1951
+ flex-direction: column;
1952
+ min-width: 0;
1953
+ border: 1px solid var(--rp-color-border);
1954
+ border-radius: var(--rp-radius);
1955
+ overflow: hidden;
1956
+ }
1957
+ .pw-output__head[data-v-31716e5f] {
1958
+ display: flex;
1959
+ align-items: center;
1960
+ gap: 8px;
1961
+ padding: 6px 10px;
1962
+ border-bottom: 1px solid var(--rp-color-border);
1963
+ background: var(--rp-color-surface);
1964
+ }
1965
+ .pw-output__title[data-v-31716e5f] {
1966
+ color: var(--rp-color-text-muted);
1967
+ font-size: 11.5px;
1968
+ font-weight: 600;
1969
+ }
1970
+ .pw-output__slot[data-v-31716e5f] {
1971
+ color: var(--rp-color-text-muted);
1972
+ font-family: var(--rp-font-mono);
1973
+ font-size: 11px;
1974
+ }
1975
+ .pw-output__tabs[data-v-31716e5f] {
1976
+ display: flex;
1977
+ gap: 4px;
1978
+ }
1979
+ .pw-output__tab[data-v-31716e5f] {
1980
+ padding: 1px 8px;
1981
+ border: 1px solid var(--rp-color-border);
1982
+ border-radius: 999px;
1983
+ background: transparent;
1984
+ color: var(--rp-color-text-muted);
1985
+ font-size: 11px;
1986
+ cursor: pointer;
1987
+ }
1988
+ .pw-output__tab.is-active[data-v-31716e5f] {
1989
+ border-color: var(--rp-color-primary);
1990
+ color: var(--rp-color-primary);
1991
+ }
1992
+ .pw-output__body[data-v-31716e5f] {
1993
+ max-height: 260px;
1994
+ overflow: auto;
1995
+ }
1996
+ .pw-output__body[data-v-31716e5f]::-webkit-scrollbar {
1997
+ width: 6px;
1998
+ height: 6px;
1999
+ }
2000
+ .pw-output__body[data-v-31716e5f]::-webkit-scrollbar-track,
2001
+ .pw-output__body[data-v-31716e5f]::-webkit-scrollbar-corner {
2002
+ background: transparent;
2003
+ }
2004
+ .pw-output__body[data-v-31716e5f]::-webkit-scrollbar-button {
2005
+ display: none;
2006
+ }
2007
+ .pw-output__body[data-v-31716e5f]::-webkit-scrollbar-thumb {
2008
+ border-radius: 999px;
2009
+ background: color-mix(in srgb, var(--rp-color-text-muted) 16%, transparent);
2010
+ }
2011
+ .pw-output__body[data-v-31716e5f]:hover::-webkit-scrollbar-thumb {
2012
+ background: color-mix(in srgb, var(--rp-color-text-muted) 34%, transparent);
2013
+ }
2014
+ .pw-output__body[data-v-31716e5f]:hover::-webkit-scrollbar-thumb:hover {
2015
+ background: color-mix(in srgb, var(--rp-color-text-muted) 56%, transparent);
2016
+ }
2017
+ .pw-scene[data-v-d0fca3aa] {
2018
+ display: flex;
2019
+ flex-direction: column;
2020
+ gap: 10px;
2021
+ padding-bottom: 28px;
2022
+ border-bottom: 1px solid var(--rp-color-border);
2023
+ scroll-margin-top: 16px;
2024
+ /* 文档场景没有 h1,场景标题就是这一段的标题,比正文 h2 高一级 */
2025
+ /* 贴着标题,不再顶到行最右;默认隐藏,鼠标进到场景或键盘聚焦时再出现 */
2026
+ /* 画布自带 token(见 theme.less 的 [data-pw-stage]),与外壳主题解耦。
2027
+ 宽度贴合 demo 内容(max-width: 100%),避免组件只有 500px 时拉出一大片空白白卡 */
40
2028
  }
41
- /* rinova-playground 外壳主题:只有这 12 个变量,dark 是同一组变量的另一套取值。 */
42
- :root {
43
- --rp-color-bg: #ffffff;
44
- --rp-color-surface: #f6f7f9;
45
- --rp-color-border: #e4e7ec;
46
- --rp-color-text: #1c2024;
47
- --rp-color-text-muted: #667085;
48
- --rp-color-primary: #2f6feb;
49
- --rp-color-primary-contrast: #ffffff;
50
- --rp-color-success: #1a7f37;
51
- --rp-color-warning: #b7791f;
52
- --rp-color-danger: #d1242f;
53
- --rp-radius: 8px;
54
- --rp-font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
55
- color-scheme: light;
2029
+ .pw-scene[data-v-d0fca3aa]:last-child {
2030
+ border-bottom: 0;
56
2031
  }
57
- :root[data-pw-theme='dark'] {
58
- --rp-color-bg: #16181d;
59
- --rp-color-surface: #1c1f26;
60
- --rp-color-border: #2b3038;
61
- --rp-color-text: #e6e8ec;
62
- --rp-color-text-muted: #98a2b3;
63
- --rp-color-primary: #5b8def;
64
- --rp-color-primary-contrast: #0b1220;
65
- --rp-color-success: #3fb950;
66
- --rp-color-warning: #d29922;
67
- --rp-color-danger: #f85149;
68
- color-scheme: dark;
2032
+ .pw-scene__head[data-v-d0fca3aa] {
2033
+ display: flex;
2034
+ align-items: center;
2035
+ gap: 12px;
69
2036
  }
70
- html,
71
- body {
2037
+ .pw-scene__title[data-v-d0fca3aa] {
72
2038
  margin: 0;
73
- padding: 0;
74
- height: 100%;
75
- background: var(--rp-color-bg);
2039
+ font-size: 15px;
2040
+ font-weight: 600;
2041
+ }
2042
+ .pw-scene.is-doc .pw-scene__title[data-v-d0fca3aa] {
2043
+ font-size: 18px;
2044
+ letter-spacing: -0.01em;
2045
+ }
2046
+ .pw-scene__anchor[data-v-d0fca3aa] {
76
2047
  color: var(--rp-color-text);
77
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
78
- font-size: 14px;
79
- -webkit-font-smoothing: antialiased;
2048
+ text-decoration: none;
80
2049
  }
81
- #app {
82
- height: 100%;
2050
+ .pw-scene__anchor:hover .pw-scene__hash[data-v-d0fca3aa] {
2051
+ color: var(--rp-color-primary);
83
2052
  }
84
- .pw-app *,
85
- .pw-app *::before,
86
- .pw-app *::after {
87
- box-sizing: border-box;
2053
+ .pw-scene__hash[data-v-d0fca3aa] {
2054
+ margin-right: 6px;
2055
+ color: var(--rp-color-text-muted);
2056
+ font-weight: 400;
2057
+ transition: color 0.15s ease;
88
2058
  }
89
- .pw-btn[data-v-8c5978c8] {
2059
+ .pw-scene__actions[data-v-d0fca3aa] {
90
2060
  display: inline-flex;
91
2061
  align-items: center;
92
- justify-content: center;
93
2062
  gap: 6px;
94
- border: 1px solid transparent;
95
- border-radius: calc(var(--rp-radius) - 2px);
2063
+ opacity: 0;
2064
+ transition: opacity 0.15s ease;
2065
+ }
2066
+ .pw-scene:hover .pw-scene__actions[data-v-d0fca3aa],
2067
+ .pw-scene__actions[data-v-d0fca3aa]:focus-within {
2068
+ opacity: 1;
2069
+ }
2070
+ .pw-scene__action[data-v-d0fca3aa] {
2071
+ display: inline-flex;
2072
+ align-items: center;
2073
+ gap: 5px;
2074
+ padding: 3px 8px;
2075
+ border: 1px solid var(--rp-color-border);
2076
+ border-radius: 6px;
96
2077
  background: transparent;
97
- color: var(--rp-color-text);
2078
+ color: var(--rp-color-text-muted);
98
2079
  font: inherit;
2080
+ font-size: 11.5px;
99
2081
  cursor: pointer;
100
- white-space: nowrap;
101
- transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
2082
+ transition: color 0.15s ease, border-color 0.15s ease;
102
2083
  }
103
- .pw-btn--sm[data-v-8c5978c8] {
104
- height: 26px;
105
- padding: 0 8px;
106
- font-size: 12px;
2084
+ .pw-scene__action[data-v-d0fca3aa]:hover {
2085
+ border-color: var(--rp-color-primary);
2086
+ color: var(--rp-color-primary);
107
2087
  }
108
- .pw-btn--md[data-v-8c5978c8] {
109
- height: 32px;
110
- padding: 0 12px;
111
- font-size: 13px;
2088
+ .pw-scene__desc[data-v-d0fca3aa] {
2089
+ margin: 0;
2090
+ color: var(--rp-color-text-muted);
2091
+ font-size: 12.5px;
2092
+ line-height: 1.7;
112
2093
  }
113
- .pw-btn--primary[data-v-8c5978c8] {
114
- background: var(--rp-color-primary);
115
- color: var(--rp-color-primary-contrast);
2094
+ .pw-scene__preview[data-v-d0fca3aa] {
2095
+ border: 1px solid var(--rp-color-border);
2096
+ border-radius: var(--rp-radius);
2097
+ overflow: hidden;
2098
+ /* 文档场景(.md)直接铺在页面上:它不是 demo,不该套演示画布的白卡片 */
116
2099
  }
117
- .pw-btn--primary[data-v-8c5978c8]:hover:not(:disabled) {
118
- filter: brightness(1.06);
2100
+ .pw-scene__preview.is-doc[data-v-d0fca3aa] {
2101
+ border: 0;
2102
+ border-radius: 0;
2103
+ overflow: visible;
119
2104
  }
120
- .pw-btn--ghost[data-v-8c5978c8] {
121
- border-color: var(--rp-color-border);
2105
+ .pw-scene__canvas[data-v-d0fca3aa] {
2106
+ padding: 18px;
122
2107
  background: var(--rp-color-bg);
123
- color: var(--rp-color-text-muted);
124
- }
125
- .pw-btn--ghost[data-v-8c5978c8]:hover:not(:disabled) {
126
- border-color: var(--rp-color-primary);
127
2108
  color: var(--rp-color-text);
128
2109
  }
129
- .pw-btn--text[data-v-8c5978c8]:hover:not(:disabled) {
130
- background: color-mix(in srgb, var(--rp-color-primary) 10%, transparent);
131
- color: var(--rp-color-text);
2110
+ .pw-scene__skeleton[data-v-d0fca3aa] {
2111
+ height: 88px;
2112
+ border-radius: 6px;
2113
+ background: linear-gradient(90deg, var(--rp-color-surface) 0%, color-mix(in srgb, var(--rp-color-border) 40%, transparent) 50%, var(--rp-color-surface) 100%);
2114
+ background-size: 200% 100%;
2115
+ animation: pw-skeleton-d0fca3aa 1.2s linear infinite;
132
2116
  }
133
- .pw-btn[data-v-8c5978c8]:disabled {
134
- cursor: not-allowed;
135
- opacity: 0.55;
2117
+ .pw-scene__io[data-v-d0fca3aa] {
2118
+ display: grid;
2119
+ grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr);
2120
+ gap: 12px;
2121
+ align-items: start;
136
2122
  }
137
- .pw-btn[data-v-8c5978c8]:focus-visible {
138
- outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 55%, transparent);
139
- outline-offset: 1px;
2123
+ .pw-scene__io.is-single[data-v-d0fca3aa] {
2124
+ grid-template-columns: minmax(0, 1fr);
140
2125
  }
141
- .pw-btn__label[data-v-8c5978c8] {
142
- line-height: 1;
2126
+ @media (max-width: 900px) {
2127
+ .pw-scene__io[data-v-d0fca3aa] {
2128
+ grid-template-columns: minmax(0, 1fr);
2129
+ }
2130
+ }
2131
+ /* 预览宽度由容器决定(设备外壳 / 手动宽度),媒体查询看不到,所以用 container query */
2132
+ @container pw-preview (max-width: 760px) {
2133
+ .pw-scene__io[data-v-d0fca3aa] {
2134
+ grid-template-columns: minmax(0, 1fr);
143
2135
  }
144
- .pw-btn__spinner[data-v-8c5978c8] {
145
- width: 12px;
146
- height: 12px;
147
- border: 2px solid currentColor;
148
- border-right-color: transparent;
149
- border-radius: 50%;
150
- animation: pw-spin-8c5978c8 0.7s linear infinite;
151
2136
  }
152
- @keyframes pw-spin-8c5978c8 {
2137
+ @keyframes pw-skeleton-d0fca3aa {
153
2138
  to {
154
- transform: rotate(360deg);
2139
+ background-position: -200% 0;
155
2140
  }
156
2141
  }
157
- .pw-input[data-v-e249cd4b] {
2142
+ .pw-page[data-v-089ab888] {
158
2143
  display: flex;
2144
+ flex-direction: column;
2145
+ flex: 1;
2146
+ min-height: 0;
2147
+ /* 分组:实心标签,比原来的灰色「Card /」更容易认出来 */
2148
+ /* 箭头把「哪个分组下的哪个页面」说出来;两侧 gap 已经 8px,箭头自身再收 2px */
2149
+ /* 场景数是元信息,用一根竖线隔开,不再贴着标题读成「概览 2 个场景」 */
2150
+ /**
2151
+ * API 视图:外层不滚,改由 .pw-api__body 自己滚。
2152
+ * 这样页签行是固定的,滚动条只属于内容区。
2153
+ */
2154
+ }
2155
+ .pw-page__head[data-v-089ab888] {
2156
+ /* 三列:左 1fr / 中 auto / 右 1fr —— 宽度控件才能落在页面真正的正中,
2157
+ 而不是跟着右侧按钮数量左右飘 */
2158
+ display: grid;
2159
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
159
2160
  align-items: center;
160
- gap: 6px;
161
- width: 100%;
162
- padding: 0 8px;
163
- border: 1px solid var(--rp-color-border);
164
- border-radius: calc(var(--rp-radius) - 2px);
165
- background: var(--rp-color-bg);
166
- color: var(--rp-color-text);
167
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
168
- }
169
- .pw-input--sm[data-v-e249cd4b] {
170
- height: 26px;
171
- }
172
- .pw-input--md[data-v-e249cd4b] {
173
- height: 32px;
174
- }
175
- .pw-input[data-v-e249cd4b]:focus-within {
176
- border-color: var(--rp-color-primary);
177
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--rp-color-primary) 16%, transparent);
2161
+ gap: 12px;
2162
+ /* 与侧栏品牌条(.pw-sidebar__brand 的 49px)严格等高:两条横线在分界处必须接上 */
2163
+ height: 49px;
2164
+ padding: 0 24px;
2165
+ border-bottom: 1px solid var(--rp-color-border);
178
2166
  }
179
- .pw-input__field[data-v-e249cd4b] {
180
- flex: 1;
2167
+ .pw-page__lead[data-v-089ab888] {
2168
+ display: flex;
2169
+ align-items: center;
2170
+ gap: 12px;
181
2171
  min-width: 0;
182
- border: 0;
183
- outline: 0;
184
- background: transparent;
185
- color: inherit;
186
- font: inherit;
187
- }
188
- .pw-input__field[data-v-e249cd4b]::placeholder {
189
- color: var(--rp-color-text-muted);
190
2172
  }
191
- .pw-input__clear[data-v-e249cd4b] {
192
- display: inline-flex;
2173
+ .pw-page__center[data-v-089ab888] {
2174
+ display: flex;
193
2175
  align-items: center;
194
2176
  justify-content: center;
195
- width: 16px;
196
- height: 16px;
197
- padding: 0;
198
- border: 0;
199
- border-radius: 50%;
200
- background: color-mix(in srgb, var(--rp-color-text-muted) 20%, transparent);
201
- color: var(--rp-color-text-muted);
202
- font-size: 12px;
203
- line-height: 1;
204
- cursor: pointer;
2177
+ min-width: 0;
205
2178
  }
206
- .pw-input__clear[data-v-e249cd4b]:hover {
207
- color: var(--rp-color-text);
2179
+ .pw-page__crumb[data-v-089ab888] {
2180
+ display: flex;
2181
+ align-items: center;
2182
+ gap: 8px;
2183
+ min-width: 0;
2184
+ font-size: 13px;
2185
+ /* 窄窗口下宁可截断页名,也不要竖排成三行 */
2186
+ white-space: nowrap;
208
2187
  }
209
- .pw-switch[data-v-64fffbcb] {
210
- position: relative;
211
- width: 34px;
212
- height: 20px;
2188
+ .pw-page__group[data-v-089ab888] {
213
2189
  flex: 0 0 auto;
214
- padding: 0;
2190
+ /* 负 margin 抵消标签左右内边距(8px + 1px 边框),让标签里的文字和正文左边缘对齐 */
2191
+ margin-left: -9px;
2192
+ padding: 1px 8px;
215
2193
  border: 1px solid var(--rp-color-border);
216
2194
  border-radius: 999px;
217
2195
  background: var(--rp-color-surface);
218
- cursor: pointer;
219
- transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
2196
+ color: var(--rp-color-text);
2197
+ font-size: 11.5px;
2198
+ font-weight: 500;
2199
+ line-height: 18px;
220
2200
  }
221
- .pw-switch[data-v-64fffbcb]:focus-visible {
222
- outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 55%, transparent);
223
- outline-offset: 2px;
2201
+ .pw-page__sep[data-v-089ab888] {
2202
+ flex: 0 0 auto;
2203
+ margin: 0 -2px;
2204
+ color: color-mix(in srgb, var(--rp-color-text-muted) 70%, transparent);
224
2205
  }
225
- .pw-switch[data-v-64fffbcb]:disabled {
226
- opacity: 0.5;
227
- cursor: not-allowed;
2206
+ .pw-page__name[data-v-089ab888] {
2207
+ min-width: 0;
2208
+ overflow: hidden;
2209
+ text-overflow: ellipsis;
2210
+ font-weight: 600;
228
2211
  }
229
- .pw-switch.is-on[data-v-64fffbcb] {
230
- border-color: var(--rp-color-primary);
231
- background: var(--rp-color-primary);
2212
+ .pw-page__count[data-v-089ab888] {
2213
+ flex: 0 0 auto;
2214
+ padding-left: 9px;
2215
+ border-left: 1px solid var(--rp-color-border);
2216
+ color: var(--rp-color-text-muted);
2217
+ font-size: 11.5px;
2218
+ line-height: 14px;
232
2219
  }
233
- .pw-switch__thumb[data-v-64fffbcb] {
234
- position: absolute;
235
- top: 2px;
236
- left: 2px;
237
- width: 14px;
238
- height: 14px;
239
- border-radius: 50%;
2220
+ .pw-page__actions[data-v-089ab888] {
2221
+ display: flex;
2222
+ align-items: center;
2223
+ gap: 8px;
2224
+ justify-self: end;
2225
+ min-width: 0;
2226
+ }
2227
+ .pw-page__scroll[data-v-089ab888] {
2228
+ flex: 1;
2229
+ min-height: 0;
2230
+ overflow: auto;
2231
+ padding: 20px 24px 40px;
2232
+ /* 设备壳里的屏幕要有实底,否则外框底色会透上来 */
240
2233
  background: var(--rp-color-bg);
241
- box-shadow: 0 1px 2px color-mix(in srgb, var(--rp-color-text) 25%, transparent);
242
- transition: transform 0.16s ease;
243
2234
  }
244
- .pw-switch.is-on .pw-switch__thumb[data-v-64fffbcb] {
245
- transform: translateX(14px);
2235
+ .pw-page__scroll[data-v-089ab888]::-webkit-scrollbar {
2236
+ width: 6px;
2237
+ height: 6px;
2238
+ }
2239
+ .pw-page__scroll[data-v-089ab888]::-webkit-scrollbar-track,
2240
+ .pw-page__scroll[data-v-089ab888]::-webkit-scrollbar-corner {
2241
+ background: transparent;
2242
+ }
2243
+ .pw-page__scroll[data-v-089ab888]::-webkit-scrollbar-button {
2244
+ display: none;
2245
+ }
2246
+ .pw-page__scroll[data-v-089ab888]::-webkit-scrollbar-thumb {
2247
+ border-radius: 999px;
2248
+ background: color-mix(in srgb, var(--rp-color-text-muted) 16%, transparent);
2249
+ }
2250
+ .pw-page__scroll[data-v-089ab888]:hover::-webkit-scrollbar-thumb {
2251
+ background: color-mix(in srgb, var(--rp-color-text-muted) 34%, transparent);
2252
+ }
2253
+ .pw-page__scroll[data-v-089ab888]:hover::-webkit-scrollbar-thumb:hover {
2254
+ background: color-mix(in srgb, var(--rp-color-text-muted) 56%, transparent);
2255
+ }
2256
+ .pw-page__scroll.is-api[data-v-089ab888] {
2257
+ display: flex;
2258
+ flex-direction: column;
2259
+ overflow: hidden;
2260
+ padding: 0;
246
2261
  }
247
- .pw-code[data-v-feddef62] {
2262
+ .pw-page__scroll.is-api .pw-page__body[data-v-089ab888] {
2263
+ flex: 1;
2264
+ align-items: stretch;
2265
+ gap: 0;
2266
+ min-height: 0;
2267
+ padding-top: 0;
2268
+ }
2269
+ .pw-page__scroll.is-api .pw-page__frame[data-v-089ab888] {
2270
+ display: flex;
2271
+ flex-direction: column;
2272
+ min-height: 0;
248
2273
  height: 100%;
249
- overflow: auto;
250
- font-family: var(--rp-font-mono);
251
- font-size: 12.5px;
252
- line-height: 1.65;
253
2274
  }
254
- .pw-code__hint[data-v-feddef62],
255
- .pw-code__error[data-v-feddef62] {
256
- margin: 0;
257
- padding: 16px;
2275
+ .pw-page__frame[data-v-089ab888] {
2276
+ flex: 1;
2277
+ min-width: 0;
2278
+ margin: 0 auto;
2279
+ transition: max-width 0.2s ease;
2280
+ }
2281
+ .pw-page__desc[data-v-089ab888] {
2282
+ margin: 0 0 20px;
258
2283
  color: var(--rp-color-text-muted);
259
- white-space: pre-wrap;
2284
+ font-size: 13px;
2285
+ line-height: 1.75;
260
2286
  }
261
- .pw-code__error[data-v-feddef62] {
262
- color: var(--rp-color-danger);
2287
+ .pw-page__body[data-v-089ab888] {
2288
+ display: flex;
2289
+ align-items: flex-start;
2290
+ gap: 32px;
2291
+ width: 100%;
263
2292
  }
264
- .pw-code__body[data-v-feddef62] pre {
265
- margin: 0;
266
- padding: 12px 16px 20px;
267
- background: transparent !important;
268
- tab-size: 2;
2293
+ .pw-page__main[data-v-089ab888] {
2294
+ display: flex;
2295
+ flex-direction: column;
2296
+ flex: 1;
2297
+ gap: 28px;
2298
+ min-width: 0;
269
2299
  }
270
- .pw-code__body[data-v-feddef62] code {
271
- font-family: inherit;
272
- font-size: inherit;
273
- line-height: inherit;
2300
+ .pw-view[data-v-089ab888] {
2301
+ display: inline-flex;
2302
+ padding: 2px;
2303
+ border: 1px solid var(--rp-color-border);
2304
+ border-radius: 8px;
2305
+ }
2306
+ .pw-view__btn[data-v-089ab888] {
2307
+ padding: 3px 10px;
2308
+ border: 0;
2309
+ border-radius: 6px;
2310
+ background: transparent;
2311
+ color: var(--rp-color-text-muted);
2312
+ font: inherit;
2313
+ font-size: 11.5px;
2314
+ cursor: pointer;
2315
+ }
2316
+ .pw-view__btn[data-v-089ab888]:hover {
2317
+ color: var(--rp-color-text);
274
2318
  }
275
- .pw-code__body[data-v-feddef62] span {
276
- color: var(--shiki-light);
2319
+ .pw-view__btn.is-active[data-v-089ab888] {
2320
+ background: color-mix(in srgb, var(--rp-color-primary) 12%, transparent);
2321
+ color: var(--rp-color-primary);
2322
+ font-weight: 600;
277
2323
  }
278
- :root[data-pw-theme='dark'] .pw-code__body[data-v-feddef62] span {
279
- color: var(--shiki-dark);
2324
+ .pw-page__api-empty[data-v-089ab888] {
2325
+ margin: 0;
2326
+ color: var(--rp-color-text-muted);
2327
+ font-size: 12.5px;
280
2328
  }
281
- .pw-params[data-v-582d049e] {
282
- display: flex;
283
- flex-direction: column;
284
- width: 320px;
285
- flex: 0 0 320px;
286
- min-height: 0;
287
- border-left: 1px solid var(--rp-color-border);
288
- background: var(--rp-color-bg);
2329
+ .pw-page__api-empty code[data-v-089ab888] {
2330
+ padding: 1px 5px;
2331
+ border: 1px solid var(--rp-color-border);
2332
+ border-radius: 4px;
2333
+ font-family: var(--rp-font-mono);
2334
+ font-size: 11.5px;
289
2335
  }
290
- .pw-params__head[data-v-582d049e] {
291
- display: flex;
2336
+ .pw-width[data-v-089ab888] {
2337
+ display: inline-flex;
292
2338
  align-items: center;
293
- gap: 4px;
294
- height: 36px;
295
- flex: 0 0 36px;
296
- padding: 0 8px;
297
- border-bottom: 1px solid var(--rp-color-border);
298
- }
299
- .pw-params__spacer[data-v-582d049e] {
300
- flex: 1;
2339
+ gap: 2px;
2340
+ padding: 2px;
2341
+ border: 1px solid var(--rp-color-border);
2342
+ border-radius: 8px;
301
2343
  }
302
- .pw-params__tab[data-v-582d049e] {
2344
+ .pw-width__btn[data-v-089ab888] {
2345
+ display: inline-flex;
2346
+ align-items: center;
2347
+ justify-content: center;
2348
+ width: 24px;
303
2349
  height: 24px;
304
- padding: 0 10px;
305
2350
  border: 0;
306
- border-radius: calc(var(--rp-radius) - 4px);
2351
+ border-radius: 6px;
307
2352
  background: transparent;
308
2353
  color: var(--rp-color-text-muted);
309
- font-size: 12px;
310
2354
  cursor: pointer;
311
- transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
312
2355
  }
313
- .pw-params__tab[data-v-582d049e]:hover:not(:disabled) {
2356
+ .pw-width__btn[data-v-089ab888]:hover {
314
2357
  color: var(--rp-color-text);
315
- background: color-mix(in srgb, var(--rp-color-text-muted) 10%, transparent);
316
2358
  }
317
- .pw-params__tab.is-active[data-v-582d049e] {
2359
+ .pw-width__btn.is-active[data-v-089ab888] {
318
2360
  background: color-mix(in srgb, var(--rp-color-primary) 12%, transparent);
319
2361
  color: var(--rp-color-primary);
320
2362
  }
321
- .pw-params__tab[data-v-582d049e]:disabled {
322
- opacity: 0.4;
323
- cursor: not-allowed;
2363
+ .pw-width__custom[data-v-089ab888] {
2364
+ display: inline-flex;
2365
+ align-items: center;
2366
+ gap: 4px;
2367
+ margin-left: 2px;
2368
+ padding-left: 6px;
2369
+ border-left: 1px solid var(--rp-color-border);
324
2370
  }
325
- .pw-params__tab[data-v-582d049e]:focus-visible {
326
- outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 55%, transparent);
327
- outline-offset: -1px;
2371
+ .pw-width__custom[data-v-089ab888] .pw-input {
2372
+ width: 96px;
2373
+ height: 24px;
2374
+ padding: 0 4px;
2375
+ /* 透明输入框配一个圆形清空按钮,读起来像散落的文字;给一层浅底和描边,值才看得清 */
2376
+ border-color: color-mix(in srgb, var(--rp-color-text) 14%, transparent);
2377
+ background: color-mix(in srgb, var(--rp-color-text) 7%, transparent);
328
2378
  }
329
- .pw-params__body[data-v-582d049e] {
330
- flex: 1;
331
- min-height: 0;
332
- overflow: auto;
2379
+ .pw-width__custom[data-v-089ab888] .pw-input__field {
2380
+ font-size: 12px;
2381
+ font-variant-numeric: tabular-nums;
2382
+ /* 数字步进箭头会占掉 3 位数需要的宽度,宽度值本身靠键盘输入,直接藏掉 */
333
2383
  }
334
- .pw-params__slots[data-v-582d049e] {
2384
+ .pw-width__custom[data-v-089ab888] .pw-input__field::-webkit-outer-spin-button,
2385
+ .pw-width__custom[data-v-089ab888] .pw-input__field::-webkit-inner-spin-button {
2386
+ margin: 0;
2387
+ -webkit-appearance: none;
2388
+ }
2389
+ .pw-width__custom[data-v-089ab888] .pw-input__field[type='number'] {
2390
+ -moz-appearance: textfield;
2391
+ appearance: textfield;
2392
+ }
2393
+ .pw-width__unit[data-v-089ab888] {
2394
+ color: var(--rp-color-text-muted);
2395
+ font-size: 11px;
2396
+ }
2397
+ /* ---------------- 预览设备外壳 ---------------- */
2398
+ .pw-device-wrap[data-v-089ab888] {
335
2399
  display: flex;
2400
+ flex: 1;
2401
+ min-height: 0;
2402
+ min-width: 0;
336
2403
  flex-direction: column;
2404
+ align-items: center;
2405
+ gap: 8px;
2406
+ /* 自适应:不套壳,铺满 */
2407
+ /* 注意:这些覆盖要和上面的 :not(.is-auto) .pw-device 同权重或更高,否则圆角不生效 */
2408
+ /* 屏幕圆角:与外框同心,内容滚到边缘会被裁掉 */
337
2409
  }
338
- .pw-slot[data-v-582d049e] {
339
- border-bottom: 1px solid var(--rp-color-border);
2410
+ .pw-device-wrap.is-auto[data-v-089ab888] {
2411
+ padding: 0;
2412
+ gap: 0;
340
2413
  }
341
- .pw-slot[data-v-582d049e]:last-child {
342
- border-bottom: 0;
2414
+ .pw-device-wrap[data-v-089ab888]:not(.is-auto) {
2415
+ padding: 18px 20px 12px;
2416
+ }
2417
+ .pw-device-wrap:not(.is-auto) .pw-device[data-v-089ab888] {
2418
+ /* 目标宽度可能大于可用空间(如 1280 桌面),夹住避免撑破页面 */
2419
+ width: min(var(--pw-device-w), 100%);
2420
+ max-width: 100%;
2421
+ padding: 10px;
2422
+ border: 1px solid var(--rp-color-border);
2423
+ border-radius: 30px;
2424
+ background: color-mix(in srgb, var(--rp-color-text) 6%, var(--rp-color-bg));
2425
+ box-shadow: 0 26px 54px -34px color-mix(in srgb, var(--rp-color-text) 60%, transparent);
2426
+ }
2427
+ .pw-device-wrap--phone:not(.is-auto) .pw-device[data-v-089ab888] {
2428
+ padding: 12px;
2429
+ border-radius: 40px;
2430
+ }
2431
+ .pw-device-wrap--tablet:not(.is-auto) .pw-device[data-v-089ab888] {
2432
+ padding: 12px;
2433
+ border-radius: 26px;
343
2434
  }
344
- .pw-slot--output[data-v-582d049e] {
2435
+ .pw-device-wrap--desktop:not(.is-auto) .pw-device[data-v-089ab888] {
345
2436
  padding: 0;
2437
+ overflow: hidden;
2438
+ border-radius: 12px;
2439
+ }
2440
+ .pw-device-wrap--phone .pw-page__scroll[data-v-089ab888] {
2441
+ border-radius: 28px;
2442
+ }
2443
+ .pw-device-wrap--tablet .pw-page__scroll[data-v-089ab888] {
2444
+ border-radius: 15px;
2445
+ }
2446
+ .pw-device-wrap--desktop .pw-page__scroll[data-v-089ab888] {
2447
+ border-radius: 0;
2448
+ }
2449
+ .pw-device[data-v-089ab888] {
2450
+ position: relative;
2451
+ display: flex;
2452
+ flex: 1;
2453
+ min-height: 0;
2454
+ flex-direction: column;
2455
+ width: 100%;
2456
+ /* 预览宽度是容器宽度,不是浏览器窗口宽度:内部响应式用 container query */
2457
+ container-type: inline-size;
2458
+ container-name: pw-preview;
346
2459
  }
347
- .pw-slot__head[data-v-582d049e] {
2460
+ .pw-device__bar[data-v-089ab888] {
348
2461
  display: flex;
349
2462
  align-items: center;
350
2463
  gap: 6px;
351
- height: 26px;
352
- padding: 0 8px 0 12px;
353
- background: color-mix(in srgb, var(--rp-color-text-muted) 6%, transparent);
2464
+ height: 30px;
2465
+ padding: 0 12px;
2466
+ border-bottom: 1px solid var(--rp-color-border);
2467
+ background: var(--rp-color-surface);
354
2468
  }
355
- .pw-slot__name[data-v-582d049e] {
356
- flex: 1;
357
- overflow: hidden;
2469
+ .pw-device__bar i[data-v-089ab888] {
2470
+ width: 9px;
2471
+ height: 9px;
2472
+ border-radius: 50%;
2473
+ background: color-mix(in srgb, var(--rp-color-text-muted) 42%, transparent);
2474
+ }
2475
+ .pw-device__sensor[data-v-089ab888] {
2476
+ position: absolute;
2477
+ top: 5px;
2478
+ left: 50%;
2479
+ width: 56px;
2480
+ height: 4px;
2481
+ border-radius: 999px;
2482
+ background: color-mix(in srgb, var(--rp-color-text-muted) 42%, transparent);
2483
+ transform: translateX(-50%);
2484
+ }
2485
+ .pw-device__caption[data-v-089ab888] {
2486
+ margin: 0;
358
2487
  color: var(--rp-color-text-muted);
359
- font-size: 11.5px;
360
- font-weight: 600;
361
- text-overflow: ellipsis;
362
- white-space: nowrap;
2488
+ font-size: 11px;
2489
+ font-variant-numeric: tabular-nums;
363
2490
  }
364
- .pw-form[data-v-582d049e] {
2491
+ /* 页面级工作区:左边是预览(可能套设备外壳),右边是场景索引 —— 索引不在外壳里 */
2492
+ .pw-page__work[data-v-089ab888] {
365
2493
  display: flex;
366
- flex-direction: column;
367
- gap: 10px;
368
- padding: 12px;
369
- }
370
- .pw-form__row[data-v-582d049e] {
371
- display: grid;
372
- grid-template-columns: 96px 1fr;
373
- align-items: center;
374
- gap: 10px;
2494
+ flex: 1;
2495
+ min-height: 0;
2496
+ min-width: 0;
375
2497
  }
376
- .pw-form__label[data-v-582d049e] {
2498
+ /* 索引槽:收起时宽度归零(索引自己的宽度和分隔线一起被裁掉) */
2499
+ .pw-index-slot[data-v-089ab888] {
2500
+ flex: 0 0 auto;
2501
+ width: 216px;
2502
+ min-height: 0;
377
2503
  overflow: hidden;
378
- color: var(--rp-color-text-muted);
379
- font-family: var(--rp-font-mono);
380
- font-size: 12px;
381
- text-overflow: ellipsis;
382
- white-space: nowrap;
2504
+ /* 分隔线画在槽位上:索引内容只有几条时线也要通到页面底部 */
2505
+ border-left: 1px solid var(--rp-color-border);
2506
+ transition: width 0.18s ease;
383
2507
  }
384
- .pw-form__select[data-v-582d049e] {
385
- height: 26px;
386
- padding: 0 6px;
387
- border: 1px solid var(--rp-color-border);
388
- border-radius: calc(var(--rp-radius) - 2px);
389
- background: var(--rp-color-bg);
390
- color: var(--rp-color-text);
391
- font: inherit;
392
- font-size: 12px;
2508
+ .pw-index-slot.is-collapsed[data-v-089ab888] {
2509
+ width: 0;
2510
+ border-left-color: transparent;
393
2511
  }
394
- .pw-form__select[data-v-582d049e]:focus-visible {
395
- outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 55%, transparent);
396
- outline-offset: 0;
2512
+ /* 窗口不够宽时索引直接让位(否则正文只剩三百来像素),开关一起收起。
2513
+ 选择器要压过下面的 .pw-head-btn { display: flex },所以带上 .pw-page__head */
2514
+ @media (max-width: 1080px) {
2515
+ .pw-index-slot[data-v-089ab888],
2516
+ .pw-page__head .pw-head-btn--index[data-v-089ab888] {
2517
+ display: none;
2518
+ }
2519
+ }
2520
+ @container pw-preview (max-width: 560px) {
2521
+ .pw-page__scroll[data-v-089ab888] {
2522
+ padding: 14px 14px 28px;
397
2523
  }
398
- .pw-params__hint[data-v-582d049e] {
399
- margin: 8px 0 0;
2524
+ }
2525
+ /* 页头所有图标按钮统一:28×28、圆角 8、1px 边框、图标 14 */
2526
+ .pw-head-btn[data-v-089ab888] {
2527
+ display: inline-flex;
2528
+ align-items: center;
2529
+ justify-content: center;
2530
+ width: 28px;
2531
+ height: 28px;
2532
+ border: 1px solid var(--rp-color-border);
2533
+ border-radius: 8px;
2534
+ background: transparent;
400
2535
  color: var(--rp-color-text-muted);
401
- font-size: 12px;
2536
+ cursor: pointer;
402
2537
  }
403
- .pw-params__hint--empty[data-v-582d049e] {
404
- padding: 12px;
405
- margin: 0;
2538
+ .pw-head-btn[data-v-089ab888]:hover {
2539
+ border-color: var(--rp-color-primary);
2540
+ color: var(--rp-color-primary);
406
2541
  }
407
- .pw-group-index[data-v-97e3a4f9] {
408
- max-width: 720px;
409
- padding: 28px 4px;
2542
+ .pw-head-btn.is-active[data-v-089ab888] {
2543
+ border-color: var(--rp-color-primary);
2544
+ background: color-mix(in srgb, var(--rp-color-primary) 10%, transparent);
2545
+ color: var(--rp-color-primary);
410
2546
  }
411
- .pw-group-index__head[data-v-97e3a4f9] {
412
- display: flex;
413
- align-items: baseline;
414
- gap: 10px;
415
- margin-bottom: 20px;
2547
+ .pw-head-btn[data-v-089ab888]:disabled {
2548
+ opacity: 0.4;
2549
+ cursor: not-allowed;
416
2550
  }
417
- .pw-group-index__title[data-v-97e3a4f9] {
418
- margin: 0;
419
- color: var(--rp-color-text);
420
- font-size: 18px;
421
- font-weight: 600;
2551
+ .pw-plugin-panel[data-v-dffb0514] {
2552
+ position: fixed;
2553
+ inset: 0;
2554
+ z-index: 60;
422
2555
  }
423
- .pw-group-index__count[data-v-97e3a4f9] {
424
- color: var(--rp-color-text-muted);
425
- font-size: 12.5px;
2556
+ .pw-plugin-panel__mask[data-v-dffb0514] {
2557
+ position: absolute;
2558
+ inset: 0;
2559
+ /* 用 brightness 压暗背后那一层:明暗两套主题都成立,也不用写死蒙层色值 */
2560
+ backdrop-filter: blur(2px) brightness(0.72);
426
2561
  }
427
- .pw-group-index__list[data-v-97e3a4f9] {
428
- margin: 0;
429
- padding: 0;
430
- list-style: none;
2562
+ .pw-plugin-panel__drawer[data-v-dffb0514] {
2563
+ position: absolute;
2564
+ top: 0;
2565
+ right: 0;
2566
+ bottom: 0;
2567
+ display: flex;
2568
+ flex-direction: column;
2569
+ width: 420px;
2570
+ max-width: 100vw;
2571
+ border-left: 1px solid var(--rp-color-border);
2572
+ border-radius: 12px 0 0 12px;
2573
+ background: var(--rp-color-bg);
2574
+ color: var(--rp-color-text);
2575
+ box-shadow: -18px 0 48px color-mix(in srgb, var(--rp-color-text) 18%, transparent);
2576
+ outline: none;
431
2577
  }
432
- .pw-group-index__item[data-v-97e3a4f9] {
433
- padding: 12px 0;
2578
+ .pw-plugin-panel__head[data-v-dffb0514] {
2579
+ display: flex;
2580
+ flex: 0 0 auto;
2581
+ align-items: center;
2582
+ justify-content: space-between;
2583
+ gap: 8px;
2584
+ height: 49px;
2585
+ padding: 0 14px 0 16px;
434
2586
  border-bottom: 1px solid var(--rp-color-border);
435
2587
  }
436
- .pw-group-index__item[data-v-97e3a4f9]:last-child {
437
- border-bottom: 0;
2588
+ .pw-plugin-panel__title[data-v-dffb0514] {
2589
+ margin: 0;
2590
+ font-size: 13px;
2591
+ font-weight: 600;
2592
+ }
2593
+ /* 面板要写明属于哪个插件:同名面板多了才知道该找谁 */
2594
+ .pw-plugin-panel__from[data-v-dffb0514] {
2595
+ margin-left: auto;
2596
+ padding-right: 6px;
2597
+ color: var(--rp-color-text-muted);
2598
+ font-size: 10.5px;
438
2599
  }
439
- .pw-group-index__link[data-v-97e3a4f9] {
2600
+ .pw-plugin-panel__close[data-v-dffb0514] {
2601
+ display: inline-flex;
2602
+ align-items: center;
2603
+ justify-content: center;
2604
+ width: 28px;
2605
+ height: 28px;
440
2606
  padding: 0;
441
2607
  border: 0;
2608
+ border-radius: var(--rp-radius);
442
2609
  background: transparent;
443
- color: var(--rp-color-primary);
444
- font: inherit;
445
- font-size: 14px;
2610
+ color: var(--rp-color-text-muted);
446
2611
  cursor: pointer;
447
2612
  }
448
- .pw-group-index__link[data-v-97e3a4f9]:hover {
449
- text-decoration: underline;
2613
+ .pw-plugin-panel__close[data-v-dffb0514]:hover {
2614
+ background: var(--rp-color-surface);
2615
+ color: var(--rp-color-text);
450
2616
  }
451
- .pw-group-index__desc[data-v-97e3a4f9] {
452
- margin: 6px 0 4px;
453
- color: var(--rp-color-text-muted);
454
- font-size: 12.5px;
455
- line-height: 1.6;
2617
+ .pw-plugin-panel__close[data-v-dffb0514]:focus-visible {
2618
+ outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 60%, transparent);
2619
+ outline-offset: 1px;
456
2620
  }
457
- .pw-group-index__id[data-v-97e3a4f9] {
458
- color: var(--rp-color-text-muted);
459
- font-family: var(--rp-font-mono);
460
- font-size: 11.5px;
461
- opacity: 0.75;
2621
+ .pw-plugin-panel__body[data-v-dffb0514] {
2622
+ flex: 1;
2623
+ min-height: 0;
2624
+ padding: 16px;
2625
+ overflow: auto;
462
2626
  }
463
- .pw-sidebar[data-v-cda96938] {
2627
+ .pw-sidebar[data-v-e1a77ffa] {
464
2628
  display: flex;
2629
+ flex: 0 0 260px;
465
2630
  flex-direction: column;
466
- width: 264px;
467
- flex: 0 0 264px;
2631
+ width: 260px;
468
2632
  height: 100%;
469
2633
  border-right: 1px solid var(--rp-color-border);
470
2634
  background: var(--rp-color-surface);
471
2635
  }
472
- .pw-sidebar__brand[data-v-cda96938] {
2636
+ .pw-sidebar__brand[data-v-e1a77ffa] {
473
2637
  display: flex;
474
2638
  align-items: center;
475
2639
  gap: 8px;
@@ -477,13 +2641,13 @@ to {
477
2641
  padding: 0 16px;
478
2642
  border-bottom: 1px solid var(--rp-color-border);
479
2643
  }
480
- .pw-sidebar__logo[data-v-cda96938] {
2644
+ .pw-sidebar__logo[data-v-e1a77ffa] {
481
2645
  width: 10px;
482
2646
  height: 10px;
483
2647
  border-radius: 3px;
484
2648
  background: var(--rp-color-primary);
485
2649
  }
486
- .pw-sidebar__title[data-v-cda96938] {
2650
+ .pw-sidebar__title[data-v-e1a77ffa] {
487
2651
  font-size: 13px;
488
2652
  font-weight: 600;
489
2653
  letter-spacing: 0.01em;
@@ -492,14 +2656,15 @@ to {
492
2656
  text-overflow: ellipsis;
493
2657
  white-space: nowrap;
494
2658
  }
495
- .pw-sidebar__search[data-v-cda96938] {
496
- padding: 12px 12px 8px;
2659
+ .pw-sidebar__search[data-v-e1a77ffa] {
2660
+ /* 与品牌 logo、分组标题同一条 16px 导轨 */
2661
+ padding: 12px 16px 4px;
497
2662
  }
498
- .pw-sidebar__search-icon[data-v-cda96938] {
2663
+ .pw-sidebar__search-icon[data-v-e1a77ffa] {
499
2664
  color: var(--rp-color-text-muted);
500
2665
  flex: 0 0 auto;
501
2666
  }
502
- .pw-sidebar__kbd[data-v-cda96938] {
2667
+ .pw-sidebar__kbd[data-v-e1a77ffa] {
503
2668
  flex: 0 0 auto;
504
2669
  padding: 1px 4px;
505
2670
  border: 1px solid var(--rp-color-border);
@@ -509,310 +2674,376 @@ to {
509
2674
  font-size: 10px;
510
2675
  line-height: 1.4;
511
2676
  }
512
- .pw-sidebar__nav[data-v-cda96938] {
2677
+ .pw-sidebar__nav[data-v-e1a77ffa] {
513
2678
  flex: 1;
514
2679
  min-height: 0;
515
2680
  overflow-y: auto;
516
- padding: 4px 8px 12px;
2681
+ /* 滚动条出现/消失时列表不横向跳动 */
2682
+ scrollbar-gutter: stable;
2683
+ padding: 4px 16px 16px;
2684
+ }
2685
+ .pw-sidebar__nav[data-v-e1a77ffa]::-webkit-scrollbar {
2686
+ width: 6px;
2687
+ height: 6px;
2688
+ }
2689
+ .pw-sidebar__nav[data-v-e1a77ffa]::-webkit-scrollbar-track,
2690
+ .pw-sidebar__nav[data-v-e1a77ffa]::-webkit-scrollbar-corner {
2691
+ background: transparent;
2692
+ }
2693
+ .pw-sidebar__nav[data-v-e1a77ffa]::-webkit-scrollbar-button {
2694
+ display: none;
2695
+ }
2696
+ .pw-sidebar__nav[data-v-e1a77ffa]::-webkit-scrollbar-thumb {
2697
+ border-radius: 999px;
2698
+ background: color-mix(in srgb, var(--rp-color-text-muted) 16%, transparent);
517
2699
  }
518
- .pw-nav-group + .pw-nav-group[data-v-cda96938] {
519
- margin-top: 10px;
2700
+ .pw-sidebar__nav[data-v-e1a77ffa]:hover::-webkit-scrollbar-thumb {
2701
+ background: color-mix(in srgb, var(--rp-color-text-muted) 34%, transparent);
520
2702
  }
521
- .pw-nav-group__title[data-v-cda96938] {
522
- padding: 6px 8px 4px;
2703
+ .pw-sidebar__nav[data-v-e1a77ffa]:hover::-webkit-scrollbar-thumb:hover {
2704
+ background: color-mix(in srgb, var(--rp-color-text-muted) 56%, transparent);
2705
+ }
2706
+ .pw-nav-group + .pw-nav-group[data-v-e1a77ffa] {
2707
+ padding-top: 6px;
2708
+ }
2709
+ .pw-nav-group__list[data-v-e1a77ffa] {
2710
+ display: flex;
2711
+ flex-direction: column;
2712
+ gap: 2px;
2713
+ }
2714
+ .pw-nav-group__title[data-v-e1a77ffa] {
2715
+ /* 分组标题吸顶:长列表滚动时始终知道自己在哪一组 */
2716
+ position: sticky;
2717
+ top: 0;
2718
+ z-index: 2;
2719
+ display: flex;
2720
+ align-items: center;
2721
+ gap: 6px;
2722
+ width: 100%;
2723
+ height: 28px;
2724
+ /* 整行 28px 可点,左边缘与页项 hover 底色对齐(16px 导轨);
2725
+ 右缘留 4px,让箭头中心和页项箭头中心重合 */
2726
+ margin: 0;
2727
+ padding: 0 4px 0 0;
2728
+ border: 0;
2729
+ background: var(--rp-color-surface);
523
2730
  color: var(--rp-color-text-muted);
2731
+ font: inherit;
524
2732
  font-size: 11px;
525
2733
  font-weight: 600;
526
2734
  letter-spacing: 0.06em;
2735
+ text-align: left;
527
2736
  text-transform: uppercase;
528
- }
529
- .pw-nav-group__title-btn[data-v-cda96938] {
530
- padding: 0;
531
- border: 0;
532
- background: transparent;
533
- color: inherit;
534
- font: inherit;
535
- letter-spacing: inherit;
536
- text-transform: inherit;
537
2737
  cursor: pointer;
2738
+ /* 当前页被收在这个组里时,标题也给出品牌色,别让人找不到自己 */
2739
+ }
2740
+ .pw-nav-group__title[data-v-e1a77ffa]:hover:not(:disabled) {
2741
+ /* 吸顶标题必须是不透明底色,否则滚动的列表会透过来 */
2742
+ background: color-mix(in srgb, var(--rp-color-text-muted) 8%, var(--rp-color-surface));
2743
+ color: var(--rp-color-text);
2744
+ }
2745
+ .pw-nav-group__title[data-v-e1a77ffa]:disabled {
2746
+ cursor: default;
2747
+ }
2748
+ .pw-nav-group__title.has-active[data-v-e1a77ffa] {
2749
+ color: var(--rp-color-primary);
2750
+ }
2751
+ .pw-nav-group__title:hover:not(:disabled) .pw-nav-group__count[data-v-e1a77ffa] {
2752
+ background: color-mix(in srgb, var(--rp-color-text-muted) 20%, transparent);
2753
+ color: var(--rp-color-text);
2754
+ }
2755
+ .pw-nav-group__title.has-active .pw-nav-group__count[data-v-e1a77ffa] {
2756
+ background: color-mix(in srgb, var(--rp-color-primary) 16%, transparent);
2757
+ color: var(--rp-color-primary);
2758
+ }
2759
+ .pw-nav-group__name[data-v-e1a77ffa] {
2760
+ flex: 1;
2761
+ min-width: 0;
2762
+ overflow: hidden;
2763
+ text-overflow: ellipsis;
2764
+ white-space: nowrap;
2765
+ }
2766
+ /* 收起时显示「这一组有几页」,避免收起后看起来是空的 */
2767
+ .pw-nav-group__count[data-v-e1a77ffa] {
2768
+ flex: 0 0 auto;
2769
+ padding: 0 5px;
2770
+ border-radius: 999px;
2771
+ background: color-mix(in srgb, var(--rp-color-text-muted) 12%, transparent);
2772
+ color: var(--rp-color-text-muted);
2773
+ font-size: 10px;
2774
+ font-weight: 500;
2775
+ font-variant-numeric: tabular-nums;
2776
+ line-height: 16px;
2777
+ letter-spacing: 0;
2778
+ }
2779
+ .pw-nav-group__chevron-box[data-v-e1a77ffa] {
2780
+ display: inline-flex;
2781
+ flex: 0 0 auto;
2782
+ align-items: center;
2783
+ justify-content: center;
2784
+ width: 20px;
2785
+ height: 20px;
538
2786
  }
539
- .pw-nav-group__title-btn[data-v-cda96938]:hover {
540
- color: var(--rp-color-text);
2787
+ .pw-nav-group__chevron[data-v-e1a77ffa] {
2788
+ flex: 0 0 auto;
2789
+ transition: transform 0.15s ease;
541
2790
  }
542
- .pw-nav-group__title-btn.is-active[data-v-cda96938] {
543
- color: var(--rp-color-primary);
2791
+ .pw-nav-group__chevron.is-open[data-v-e1a77ffa] {
2792
+ transform: rotate(90deg);
544
2793
  }
545
- .pw-nav-item[data-v-cda96938] {
546
- display: block;
2794
+ .pw-nav-row[data-v-e1a77ffa] {
2795
+ position: relative;
2796
+ }
2797
+ .pw-nav-item[data-v-e1a77ffa] {
2798
+ display: flex;
2799
+ align-items: center;
2800
+ gap: 8px;
547
2801
  width: 100%;
548
- padding: 6px 8px;
2802
+ min-height: 28px;
2803
+ /* 分组标题在 16px 导轨上,页项再缩进 8px(文字 24px) */
2804
+ padding: 5px 8px;
549
2805
  border: 0;
550
2806
  border-radius: calc(var(--rp-radius) - 3px);
551
2807
  background: transparent;
552
2808
  color: var(--rp-color-text);
553
2809
  font: inherit;
554
2810
  font-size: 13px;
2811
+ line-height: 18px;
555
2812
  text-align: left;
556
2813
  cursor: pointer;
2814
+ }
2815
+ .pw-nav-item.has-children[data-v-e1a77ffa] {
2816
+ padding-right: 28px;
2817
+ }
2818
+ .pw-nav-item.is-child[data-v-e1a77ffa] {
2819
+ position: relative;
2820
+ font-size: 12.5px;
2821
+ /* 只有当前这一项对应的那一小段竖线用品牌色(线在 x=12,子项盒子从 16 起,所以 -4px);
2822
+ 整条线保持中性,否则看着像「这一组全被选中了」 */
2823
+ }
2824
+ .pw-nav-item.is-child.is-active[data-v-e1a77ffa]::before {
2825
+ content: '';
2826
+ position: absolute;
2827
+ top: 0;
2828
+ bottom: 0;
2829
+ left: -4px;
2830
+ width: 2px;
2831
+ border-radius: 2px;
2832
+ background: var(--rp-color-primary);
2833
+ }
2834
+ .pw-nav__hit[data-v-e1a77ffa] {
2835
+ padding: 0 1px;
2836
+ border-radius: 3px;
2837
+ background: color-mix(in srgb, var(--rp-color-primary) 24%, transparent);
2838
+ color: inherit;
2839
+ font-weight: 600;
2840
+ }
2841
+ .pw-nav-item__title[data-v-e1a77ffa] {
2842
+ flex: 1;
2843
+ min-width: 0;
557
2844
  overflow: hidden;
558
2845
  text-overflow: ellipsis;
559
2846
  white-space: nowrap;
560
2847
  }
561
- .pw-nav-item[data-v-cda96938]:hover {
2848
+ .pw-nav-row.is-branch-active .pw-nav-item[data-v-e1a77ffa]:not(.is-active) {
2849
+ color: color-mix(in srgb, var(--rp-color-primary) 72%, var(--rp-color-text));
2850
+ }
2851
+ .pw-nav-row.is-branch-active .pw-nav-toggle[data-v-e1a77ffa] {
2852
+ color: var(--rp-color-primary);
2853
+ }
2854
+ .pw-nav-item[data-v-e1a77ffa]:hover {
562
2855
  background: color-mix(in srgb, var(--rp-color-text-muted) 10%, transparent);
563
2856
  }
564
- .pw-nav-item.is-active[data-v-cda96938] {
2857
+ .pw-nav-item.is-active[data-v-e1a77ffa] {
565
2858
  background: color-mix(in srgb, var(--rp-color-primary) 12%, transparent);
566
2859
  color: var(--rp-color-primary);
567
2860
  font-weight: 500;
568
2861
  }
569
- .pw-nav-item[data-v-cda96938]:focus-visible {
2862
+ .pw-nav-item[data-v-e1a77ffa]:focus-visible {
570
2863
  outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 55%, transparent);
571
2864
  outline-offset: -2px;
572
2865
  }
573
- .pw-sidebar__empty[data-v-cda96938] {
574
- margin: 16px 8px;
575
- color: var(--rp-color-text-muted);
576
- font-size: 12px;
577
- }
578
- .pw-sidebar__footer[data-v-cda96938] {
579
- padding: 10px 16px;
580
- border-top: 1px solid var(--rp-color-border);
581
- color: var(--rp-color-text-muted);
582
- font-size: 11px;
583
- }
584
- .pw-monaco[data-v-c45e6fcb] {
585
- height: 100%;
586
- overflow: hidden;
587
- }
588
- .pw-source[data-v-16eca20a] {
589
- display: flex;
590
- flex-direction: column;
591
- height: 100%;
592
- min-height: 0;
593
- }
594
- .pw-source__head[data-v-16eca20a] {
595
- display: flex;
596
- align-items: center;
597
- justify-content: space-between;
598
- gap: 12px;
599
- height: 36px;
600
- flex: 0 0 36px;
601
- padding: 0 8px 0 12px;
602
- border-bottom: 1px solid var(--rp-color-border);
603
- }
604
- .pw-source__tabs[data-v-16eca20a] {
605
- display: flex;
2866
+ .pw-nav-toggle[data-v-e1a77ffa] {
2867
+ position: absolute;
2868
+ top: 50%;
2869
+ right: 4px;
2870
+ display: inline-flex;
606
2871
  align-items: center;
607
- gap: 4px;
608
- min-width: 0;
609
- overflow-x: auto;
610
- }
611
- .pw-tab[data-v-16eca20a] {
612
- height: 24px;
613
- padding: 0 8px;
2872
+ justify-content: center;
2873
+ width: 20px;
2874
+ height: 20px;
2875
+ padding: 0;
614
2876
  border: 0;
615
- border-radius: calc(var(--rp-radius) - 4px);
2877
+ border-radius: 4px;
616
2878
  background: transparent;
617
2879
  color: var(--rp-color-text-muted);
618
- font-family: var(--rp-font-mono);
619
- font-size: 12px;
620
- white-space: nowrap;
621
2880
  cursor: pointer;
622
- transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
2881
+ transform: translateY(-50%);
623
2882
  }
624
- .pw-tab[data-v-16eca20a]:hover {
2883
+ .pw-nav-toggle[data-v-e1a77ffa]:hover {
2884
+ background: color-mix(in srgb, var(--rp-color-text-muted) 14%, transparent);
625
2885
  color: var(--rp-color-text);
626
- background: color-mix(in srgb, var(--rp-color-text-muted) 10%, transparent);
627
- }
628
- .pw-tab.is-active[data-v-16eca20a] {
629
- background: color-mix(in srgb, var(--rp-color-primary) 12%, transparent);
630
- color: var(--rp-color-primary);
631
- }
632
- .pw-tab[data-v-16eca20a]:focus-visible {
633
- outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 55%, transparent);
634
- outline-offset: -1px;
635
- }
636
- .pw-source__actions[data-v-16eca20a] {
637
- display: flex;
638
- align-items: center;
639
- gap: 2px;
640
- flex: 0 0 auto;
641
- }
642
- .pw-source__body[data-v-16eca20a] {
643
- flex: 1;
644
- min-height: 0;
645
- overflow: hidden;
646
2886
  }
647
- .pw-source__hint[data-v-16eca20a] {
648
- display: block;
649
- padding: 16px;
650
- color: var(--rp-color-text-muted);
651
- font-size: 12px;
2887
+ .pw-nav-toggle .is-open[data-v-e1a77ffa] {
2888
+ transform: rotate(90deg);
652
2889
  }
653
- .pw-stage[data-v-2c6f2a44] {
654
- flex: 1;
655
- min-height: 0;
656
- overflow: auto;
657
- background: var(--rp-color-surface);
658
- padding: 24px;
2890
+ /* 子组件:缩进 + 一条短竖线做「归属」,不做梯子,避免和文字抢注意力 */
2891
+ .pw-nav-children[data-v-e1a77ffa] {
2892
+ position: relative;
2893
+ padding-left: 16px;
659
2894
  }
660
- .pw-stage__frame[data-v-2c6f2a44] {
2895
+ .pw-nav-children[data-v-e1a77ffa]::before {
2896
+ content: '';
2897
+ position: absolute;
2898
+ /* 落在父页文字与子项文字之间(x=28),与子项选中药丸留 4px;
2899
+ 从父页行底边起笔,覆盖整个子项区 */
2900
+ left: 12px;
2901
+ top: -2px;
2902
+ bottom: 1px;
2903
+ width: 2px;
2904
+ border-radius: 2px;
2905
+ background: color-mix(in srgb, var(--rp-color-text-muted) 16%, transparent);
2906
+ }
2907
+ /* 全局搜索结果:页面 / 场景两段,每条两行(标题 + 位置),点场景直接跳过去 */
2908
+ .pw-hits[data-v-e1a77ffa] {
661
2909
  display: flex;
662
2910
  flex-direction: column;
663
2911
  gap: 12px;
664
- min-height: 100%;
2912
+ padding: 2px 0 10px;
665
2913
  }
666
- .pw-stage__inner[data-v-2c6f2a44] {
2914
+ .pw-hits__group[data-v-e1a77ffa] {
667
2915
  display: flex;
668
- align-items: flex-start;
669
- justify-content: center;
670
- flex: 1;
671
- min-width: 0;
672
- overflow-x: auto;
673
- /* 场景内容不要被压缩:窄容器时横向滚动,而不是把按钮挤成几行。
674
- max-width 封顶在容器宽度内,宽内容才会真正换行(否则按 max-content 排版,flex-wrap 永远不生效)。 */
675
- }
676
- .pw-stage__inner[data-v-2c6f2a44] > * {
677
- flex: 0 0 auto;
678
- max-width: 100%;
2916
+ flex-direction: column;
2917
+ gap: 1px;
679
2918
  }
680
- .pw-stage__desc[data-v-2c6f2a44] {
681
- margin: 0;
2919
+ .pw-hits__label[data-v-e1a77ffa] {
2920
+ display: flex;
2921
+ align-items: center;
2922
+ gap: 6px;
2923
+ margin: 0 2px 3px;
2924
+ padding: 0 6px;
682
2925
  color: var(--rp-color-text-muted);
683
- font-size: 12.5px;
684
- line-height: 1.6;
2926
+ font-size: 10.5px;
2927
+ letter-spacing: 0.04em;
685
2928
  }
686
- .pw-stage--tablet .pw-stage__frame[data-v-2c6f2a44] {
687
- max-width: 820px;
688
- margin: 0 auto;
689
- }
690
- .pw-stage--mobile .pw-stage__frame[data-v-2c6f2a44] {
691
- max-width: 420px;
692
- margin: 0 auto;
2929
+ .pw-hits__count[data-v-e1a77ffa] {
2930
+ font-size: 10px;
2931
+ font-variant-numeric: tabular-nums;
2932
+ opacity: 0.75;
693
2933
  }
694
- .pw-stage__loading[data-v-2c6f2a44] {
2934
+ .pw-hits__more[data-v-e1a77ffa] {
2935
+ margin: 4px 2px 0;
2936
+ padding: 0 6px;
695
2937
  color: var(--rp-color-text-muted);
696
- font-size: 13px;
2938
+ font-size: 10.5px;
2939
+ line-height: 1.6;
697
2940
  }
698
- .pw-stage__error[data-v-2c6f2a44] {
2941
+ .pw-hit[data-v-e1a77ffa] {
699
2942
  display: flex;
700
2943
  flex-direction: column;
701
- gap: 4px;
702
- margin: 0;
703
- padding: 12px 16px;
704
- border: 1px solid color-mix(in srgb, var(--rp-color-danger) 40%, var(--rp-color-border));
705
- border-radius: var(--rp-radius);
706
- background: var(--rp-color-bg);
2944
+ align-items: flex-start;
2945
+ gap: 1px;
2946
+ width: 100%;
2947
+ padding: 5px 8px;
2948
+ border: 0;
2949
+ border-radius: 6px;
2950
+ background: transparent;
707
2951
  color: var(--rp-color-text);
708
- font-size: 13px;
709
- }
710
- .pw-stage__error strong[data-v-2c6f2a44] {
711
- color: var(--rp-color-danger);
2952
+ font: inherit;
2953
+ text-align: left;
2954
+ cursor: pointer;
712
2955
  }
713
- .pw-stage__error code[data-v-2c6f2a44] {
714
- font-family: var(--rp-font-mono);
715
- font-size: 12px;
716
- color: var(--rp-color-text-muted);
2956
+ .pw-hit[data-v-e1a77ffa]:hover {
2957
+ background: color-mix(in srgb, var(--rp-color-text-muted) 10%, transparent);
717
2958
  }
718
- .pw-stage__error span[data-v-2c6f2a44] {
719
- white-space: pre-wrap;
720
- color: var(--rp-color-text-muted);
2959
+ .pw-hit[data-v-e1a77ffa]:focus-visible {
2960
+ outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 55%, transparent);
2961
+ outline-offset: -2px;
721
2962
  }
722
- .pw-toolbar[data-v-b90c60a6] {
723
- display: flex;
724
- align-items: center;
725
- justify-content: space-between;
726
- gap: 16px;
727
- height: 49px;
728
- flex: 0 0 49px;
729
- padding: 0 16px;
730
- border-bottom: 1px solid var(--rp-color-border);
731
- background: var(--rp-color-bg);
2963
+ .pw-hit__title[data-v-e1a77ffa] {
2964
+ max-width: 100%;
2965
+ overflow: hidden;
2966
+ font-size: 12.5px;
2967
+ text-overflow: ellipsis;
2968
+ white-space: nowrap;
732
2969
  }
733
- .pw-toolbar__crumb[data-v-b90c60a6] {
2970
+ .pw-hit__meta[data-v-e1a77ffa] {
734
2971
  display: flex;
735
2972
  align-items: center;
736
- gap: 6px;
737
- min-width: 0;
738
- font-size: 13px;
739
- }
740
- .pw-toolbar__group[data-v-b90c60a6] {
2973
+ gap: 5px;
2974
+ max-width: 100%;
2975
+ overflow: hidden;
741
2976
  color: var(--rp-color-text-muted);
2977
+ font-size: 10.5px;
742
2978
  white-space: nowrap;
743
2979
  }
744
- .pw-toolbar__sep[data-v-b90c60a6] {
745
- color: var(--rp-color-border);
746
- }
747
- .pw-toolbar__title[data-v-b90c60a6] {
748
- font-weight: 500;
2980
+ .pw-hit__meta-text[data-v-e1a77ffa] {
2981
+ min-width: 0;
749
2982
  overflow: hidden;
750
2983
  text-overflow: ellipsis;
751
- white-space: nowrap;
752
- }
753
- .pw-toolbar__actions[data-v-b90c60a6] {
754
- display: flex;
755
- align-items: center;
756
- gap: 8px;
757
2984
  }
758
- .pw-width-group[data-v-b90c60a6] {
759
- display: inline-flex;
760
- padding: 2px;
761
- gap: 2px;
762
- border: 1px solid var(--rp-color-border);
763
- border-radius: calc(var(--rp-radius) - 2px);
764
- background: var(--rp-color-surface);
2985
+ .pw-hit__reason[data-v-e1a77ffa] {
2986
+ flex: 0 0 auto;
2987
+ padding: 0 4px;
2988
+ border-radius: 3px;
2989
+ background: color-mix(in srgb, var(--rp-color-primary) 14%, transparent);
2990
+ color: var(--rp-color-primary);
2991
+ font-style: normal;
765
2992
  }
766
- .pw-width-btn[data-v-b90c60a6] {
767
- display: inline-flex;
2993
+ .pw-sidebar__empty[data-v-e1a77ffa] {
2994
+ display: flex;
768
2995
  align-items: center;
769
- justify-content: center;
770
- width: 26px;
771
- height: 22px;
772
- padding: 0;
773
- border: 0;
774
- border-radius: 5px;
775
- background: transparent;
2996
+ gap: 6px;
2997
+ margin: 16px 8px;
776
2998
  color: var(--rp-color-text-muted);
777
- cursor: pointer;
778
- }
779
- .pw-width-btn[data-v-b90c60a6]:hover {
780
- color: var(--rp-color-text);
781
- }
782
- .pw-width-btn.is-active[data-v-b90c60a6] {
783
- background: var(--rp-color-bg);
784
- color: var(--rp-color-primary);
785
- box-shadow: 0 1px 2px color-mix(in srgb, var(--rp-color-text) 10%, transparent);
2999
+ font-size: 12px;
786
3000
  }
787
- .pw-width-btn[data-v-b90c60a6]:focus-visible {
788
- outline: 2px solid color-mix(in srgb, var(--rp-color-primary) 55%, transparent);
789
- outline-offset: -1px;
3001
+ .pw-sidebar__footer[data-v-e1a77ffa] {
3002
+ display: flex;
3003
+ flex-direction: column;
3004
+ align-items: stretch;
3005
+ gap: 6px;
3006
+ padding: 9px 16px;
3007
+ border-top: 1px solid var(--rp-color-border);
3008
+ color: var(--rp-color-text-muted);
3009
+ font-size: 10.5px;
790
3010
  }
791
- .pw-app[data-v-5c38b5f6] {
3011
+ .pw-app[data-v-395342d2] {
792
3012
  display: flex;
793
3013
  height: 100vh;
794
3014
  overflow: hidden;
795
3015
  background: var(--rp-color-bg);
796
3016
  color: var(--rp-color-text);
797
3017
  }
798
- .pw-main[data-v-5c38b5f6] {
3018
+ .pw-app .pw-sidebar[data-v-395342d2] {
3019
+ transition: width 0.18s ease, flex-basis 0.18s ease;
3020
+ }
3021
+ .pw-app.is-sidebar-collapsed .pw-sidebar[data-v-395342d2] {
3022
+ flex-basis: 0;
3023
+ width: 0;
3024
+ overflow: hidden;
3025
+ border-right-width: 0;
3026
+ }
3027
+ .pw-main[data-v-395342d2] {
799
3028
  display: flex;
800
- flex-direction: column;
801
3029
  flex: 1;
3030
+ flex-direction: column;
802
3031
  min-width: 0;
803
3032
  }
804
- .pw-body[data-v-5c38b5f6] {
3033
+ .pw-content[data-v-395342d2] {
805
3034
  display: flex;
806
3035
  flex: 1;
807
3036
  min-height: 0;
3037
+ min-width: 0;
808
3038
  }
809
- .pw-source-slot[data-v-5c38b5f6] {
810
- height: 42%;
811
- min-height: 200px;
812
- border-top: 1px solid var(--rp-color-border);
813
- background: var(--rp-color-bg);
3039
+ .pw-inspector[data-v-395342d2] {
3040
+ flex: 0 0 320px;
3041
+ width: 320px;
3042
+ min-height: 0;
3043
+ border-left: 1px solid var(--rp-color-border);
3044
+ overflow: hidden;
814
3045
  }
815
- .pw-empty[data-v-5c38b5f6] {
3046
+ .pw-empty[data-v-395342d2] {
816
3047
  display: flex;
817
3048
  flex: 1;
818
3049
  align-items: center;
@@ -820,4 +3051,76 @@ to {
820
3051
  color: var(--rp-color-text-muted);
821
3052
  font-size: 13px;
822
3053
  }
3054
+ .pw-empty code[data-v-395342d2] {
3055
+ padding: 1px 5px;
3056
+ border: 1px solid var(--rp-color-border);
3057
+ border-radius: 4px;
3058
+ font-family: var(--rp-font-mono);
3059
+ }
3060
+ .pw-boot[data-v-44a22d03] {
3061
+ display: flex;
3062
+ flex-direction: column;
3063
+ gap: 14px;
3064
+ min-height: 100vh;
3065
+ padding: 28px 32px;
3066
+ background: var(--rp-color-bg);
3067
+ color: var(--rp-color-text);
3068
+ box-sizing: border-box;
3069
+ }
3070
+ .pw-boot__brand[data-v-44a22d03] {
3071
+ display: flex;
3072
+ align-items: center;
3073
+ gap: 8px;
3074
+ }
3075
+ .pw-boot__logo[data-v-44a22d03] {
3076
+ width: 18px;
3077
+ height: 18px;
3078
+ border-radius: 6px;
3079
+ background: var(--rp-color-primary);
3080
+ }
3081
+ .pw-boot__title[data-v-44a22d03] {
3082
+ font-size: 13px;
3083
+ font-weight: 600;
3084
+ }
3085
+ .pw-boot__hint[data-v-44a22d03] {
3086
+ margin: 0;
3087
+ color: var(--rp-color-text-muted);
3088
+ font-size: 13px;
3089
+ }
3090
+ .pw-boot__error[data-v-44a22d03] {
3091
+ max-width: 720px;
3092
+ padding: 12px 14px;
3093
+ border: 1px solid color-mix(in srgb, var(--rp-color-danger) 45%, transparent);
3094
+ border-radius: var(--rp-radius);
3095
+ background: color-mix(in srgb, var(--rp-color-danger) 8%, transparent);
3096
+ }
3097
+ .pw-boot__head[data-v-44a22d03] {
3098
+ margin: 0 0 6px;
3099
+ color: var(--rp-color-danger);
3100
+ font-size: 13px;
3101
+ font-weight: 600;
3102
+ }
3103
+ .pw-boot__message[data-v-44a22d03] {
3104
+ margin: 0;
3105
+ font-family: var(--rp-font-mono);
3106
+ font-size: 12px;
3107
+ word-break: break-word;
3108
+ white-space: pre-wrap;
3109
+ }
3110
+ .pw-boot__stack[data-v-44a22d03] {
3111
+ margin-top: 8px;
3112
+ font-size: 11.5px;
3113
+ }
3114
+ .pw-boot__stack summary[data-v-44a22d03] {
3115
+ cursor: pointer;
3116
+ color: var(--rp-color-text-muted);
3117
+ }
3118
+ .pw-boot__stack pre[data-v-44a22d03] {
3119
+ max-height: 260px;
3120
+ margin: 6px 0 0;
3121
+ overflow: auto;
3122
+ font-family: var(--rp-font-mono);
3123
+ font-size: 11px;
3124
+ white-space: pre-wrap;
3125
+ }
823
3126
  /*$vite$:1*/