@tnotesjs/core 0.1.14 → 0.1.16

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 (117) hide show
  1. package/README.md +87 -87
  2. package/dist/{chunk-FVKQPBPP.js → chunk-4MO7F7Q4.js} +2005 -1769
  3. package/dist/cli/index.js +1 -1
  4. package/dist/vitepress/config/index.js +212 -4
  5. package/package.json +1 -1
  6. package/types/config.ts +61 -61
  7. package/types/index.ts +11 -11
  8. package/types/note.ts +33 -33
  9. package/vitepress/assets/icons/icon__check.svg +3 -3
  10. package/vitepress/assets/icons/icon__clipboard.svg +7 -7
  11. package/vitepress/assets/icons/icon__close.svg +1 -1
  12. package/vitepress/assets/icons/icon__collapse.svg +1 -1
  13. package/vitepress/assets/icons/icon__confirm.svg +1 -1
  14. package/vitepress/assets/icons/icon__copy.svg +4 -4
  15. package/vitepress/assets/icons/icon__focus.svg +1 -1
  16. package/vitepress/assets/icons/icon__fold.svg +3 -3
  17. package/vitepress/assets/icons/icon__folder.svg +1 -1
  18. package/vitepress/assets/icons/icon__fullscreen.svg +1 -1
  19. package/vitepress/assets/icons/icon__fullscreen_exit.svg +1 -1
  20. package/vitepress/assets/icons/icon__github.svg +3 -3
  21. package/vitepress/assets/icons/icon__mindmap.svg +1 -1
  22. package/vitepress/assets/icons/icon__next.svg +1 -1
  23. package/vitepress/assets/icons/icon__number_gray.svg +1 -1
  24. package/vitepress/assets/icons/icon__number_purple.svg +1 -1
  25. package/vitepress/assets/icons/icon__prev.svg +1 -1
  26. package/vitepress/assets/icons/icon__restore.svg +1 -1
  27. package/vitepress/assets/icons/icon__rotate.svg +4 -4
  28. package/vitepress/assets/icons/icon__search.svg +1 -1
  29. package/vitepress/assets/icons/icon__setting.svg +1 -0
  30. package/vitepress/assets/icons/icon__sidebar_collapsed.svg +1 -1
  31. package/vitepress/assets/icons/icon__sidebar_opened.svg +1 -1
  32. package/vitepress/assets/icons/icon__totop.svg +5 -5
  33. package/vitepress/assets/icons/icon__vscode.svg +5 -5
  34. package/vitepress/assets/icons/icon__zoom_fit.svg +1 -1
  35. package/vitepress/assets/icons/icon__zoom_in.svg +1 -1
  36. package/vitepress/assets/icons/icon__zoom_out.svg +1 -1
  37. package/vitepress/assets/icons/icon__zoom_reset.svg +1 -1
  38. package/vitepress/assets/icons/index.ts +39 -38
  39. package/vitepress/components/BilibiliOutsidePlayer/BilibiliOutsidePlayer.vue +20 -20
  40. package/vitepress/components/CodeBlockFullscreen/CodeBlockFullscreen.vue +373 -373
  41. package/vitepress/components/CodeBlockFullscreen/index.ts +115 -115
  42. package/vitepress/components/CodeBlockFullscreen/styles.css +64 -64
  43. package/vitepress/components/Discussions/Discussions.module.scss +32 -32
  44. package/vitepress/components/Discussions/Discussions.vue +211 -211
  45. package/vitepress/components/EnWordList/EnWordList.module.scss +124 -124
  46. package/vitepress/components/EnWordList/EnWordList.vue +543 -543
  47. package/vitepress/components/EnWordList/RightClickMenu.module.scss +22 -22
  48. package/vitepress/components/EnWordList/RightClickMenu.vue +66 -66
  49. package/vitepress/components/Footprints/Footprints.module.scss +93 -93
  50. package/vitepress/components/Footprints/Footprints.vue +377 -377
  51. package/vitepress/components/Layout/AboutModal.module.scss +233 -233
  52. package/vitepress/components/Layout/AboutModal.vue +105 -105
  53. package/vitepress/components/Layout/AboutPanel.vue +270 -270
  54. package/vitepress/components/Layout/ContentCollapse.vue +603 -603
  55. package/vitepress/components/Layout/CustomSidebar.vue +878 -608
  56. package/vitepress/components/Layout/DocBeforeControls.vue +149 -149
  57. package/vitepress/components/Layout/DocFooter.vue +233 -233
  58. package/vitepress/components/Layout/ImagePreview.module.scss +201 -201
  59. package/vitepress/components/Layout/ImagePreview.vue +281 -281
  60. package/vitepress/components/Layout/Layout.module.scss +661 -661
  61. package/vitepress/components/Layout/Layout.vue +618 -560
  62. package/vitepress/components/Layout/NavBarSettingsTrigger.vue +59 -0
  63. package/vitepress/components/Layout/NoteStatus.vue +140 -140
  64. package/vitepress/components/Layout/SidebarItems.vue +1083 -268
  65. package/vitepress/components/Layout/SidebarNavBefore.vue +171 -114
  66. package/vitepress/components/Layout/Swiper.vue +167 -167
  67. package/vitepress/components/Layout/ToggleFullContent.module.scss +11 -11
  68. package/vitepress/components/Layout/ToggleFullContent.vue +35 -35
  69. package/vitepress/components/Layout/ToggleSidebar.module.scss +11 -11
  70. package/vitepress/components/Layout/ToggleSidebar.vue +36 -36
  71. package/vitepress/components/Layout/composables/useCollapseControl.ts +88 -88
  72. package/vitepress/components/Layout/composables/useNoteConfig.ts +119 -119
  73. package/vitepress/components/Layout/composables/useNoteSave.ts +178 -178
  74. package/vitepress/components/Layout/composables/useNoteValidation.ts +85 -85
  75. package/vitepress/components/Layout/composables/useRedirect.ts +113 -113
  76. package/vitepress/components/Layout/composables/useVSCodeIntegration.ts +85 -85
  77. package/vitepress/components/Layout/homeReadme.data.ts +124 -124
  78. package/vitepress/components/MarkMap/MarkMap.module.scss +159 -159
  79. package/vitepress/components/MarkMap/MarkMap.vue +405 -405
  80. package/vitepress/components/Mermaid/Mermaid.module.scss +275 -275
  81. package/vitepress/components/Mermaid/Mermaid.vue +365 -365
  82. package/vitepress/components/NotesTable/NotesTable.module.scss +77 -77
  83. package/vitepress/components/NotesTable/NotesTable.vue +98 -98
  84. package/vitepress/components/NotesTable/README.md +67 -67
  85. package/vitepress/components/Settings/Settings.module.scss +375 -433
  86. package/vitepress/components/Settings/Settings.vue +376 -306
  87. package/vitepress/components/SidebarCard/MindMapView.vue +484 -484
  88. package/vitepress/components/SidebarCard/NotesTrendChart.vue +108 -108
  89. package/vitepress/components/SidebarCard/SidebarCard.vue +946 -946
  90. package/vitepress/components/Tooltip/Tooltip.vue +70 -70
  91. package/vitepress/components/constants.ts +109 -91
  92. package/vitepress/components/notesConfig.data.ts +73 -73
  93. package/vitepress/components/sidebar.data.ts +59 -59
  94. package/vitepress/components/tnotes-config.data.ts +21 -21
  95. package/vitepress/components/utils.ts +26 -26
  96. package/vitepress/config/index.ts +169 -167
  97. package/vitepress/configs/constants.ts +26 -26
  98. package/vitepress/configs/head.config.ts +25 -25
  99. package/vitepress/configs/index.ts +9 -9
  100. package/vitepress/configs/markdown-it.d.ts +23 -23
  101. package/vitepress/configs/markdown.config.ts +366 -366
  102. package/vitepress/configs/theme.config.ts +108 -108
  103. package/vitepress/plugins/buildProgressPlugin.ts +434 -434
  104. package/vitepress/plugins/getNoteByConfigIdPlugin.ts +107 -107
  105. package/vitepress/plugins/renameNotePlugin.ts +68 -68
  106. package/vitepress/plugins/sidebarStructurePlugin.ts +260 -0
  107. package/vitepress/plugins/updateConfigPlugin.ts +63 -63
  108. package/vitepress/theme/index.ts +137 -137
  109. package/vitepress/theme/styles/base.scss +50 -50
  110. package/vitepress/theme/styles/components/404.scss +31 -31
  111. package/vitepress/theme/styles/components/collapse.scss +175 -175
  112. package/vitepress/theme/styles/components/markmap.scss +101 -101
  113. package/vitepress/theme/styles/components/swiper.scss +255 -255
  114. package/vitepress/theme/styles/index.scss +25 -25
  115. package/vitepress/theme/styles/layout.scss +70 -62
  116. package/vitepress/theme/styles/utilities.scss +39 -39
  117. package/vitepress/theme/styles/vitepress-override.scss +25 -25
@@ -1,433 +1,375 @@
1
- /* 容器 */
2
- .settingsWrapper {
3
- max-width: 720px;
4
- margin: 0 auto;
5
- padding: 20px;
6
- }
7
-
8
- /* 设置项 */
9
- .settingItem {
10
- background: var(--vp-c-bg-soft);
11
- border: 1px solid var(--vp-c-divider);
12
- border-radius: 8px;
13
- padding: 20px;
14
- margin-bottom: 16px;
15
- transition: border-color 0.2s ease;
16
-
17
- &:hover {
18
- border-color: var(--vp-c-brand-1);
19
- }
20
- }
21
-
22
- /* 项头部 */
23
- .itemHeader {
24
- display: flex;
25
- align-items: center;
26
- justify-content: space-between;
27
- margin-bottom: 12px;
28
- }
29
-
30
- .itemTitle {
31
- display: flex;
32
- align-items: center;
33
- gap: 8px;
34
- }
35
-
36
- .itemIcon {
37
- font-size: 18px;
38
- }
39
-
40
- .itemName {
41
- font-size: 15px;
42
- font-weight: 600;
43
- color: var(--vp-c-text-1);
44
- }
45
-
46
- .statusBadge {
47
- display: inline-flex;
48
- align-items: center;
49
- justify-content: center;
50
- padding: 2px 8px;
51
- border-radius: 12px;
52
- background: var(--vp-c-brand-soft);
53
- color: var(--vp-c-brand-1);
54
- font-size: 12px;
55
- font-weight: 600;
56
- }
57
-
58
- .currentValue {
59
- font-size: 13px;
60
- color: var(--vp-c-text-2);
61
- font-family: var(--vp-font-family-mono);
62
- }
63
-
64
- /* 帮助文本 */
65
- .helpText {
66
- margin-bottom: 12px;
67
- padding: 8px 12px;
68
- background: var(--vp-c-bg);
69
- border-left: 3px solid var(--vp-c-brand-1);
70
- border-radius: 4px;
71
- font-size: 13px;
72
- line-height: 1.6;
73
- color: var(--vp-c-text-2);
74
- animation: slideDown 0.2s ease;
75
- }
76
-
77
- @keyframes slideDown {
78
- from {
79
- opacity: 0;
80
- transform: translateY(-4px);
81
- }
82
- to {
83
- opacity: 1;
84
- transform: translateY(0);
85
- }
86
- }
87
-
88
- /* 输入组 */
89
- .inputGroup {
90
- position: relative;
91
- }
92
-
93
- .input {
94
- width: 100%;
95
- padding: 10px 40px 10px 12px;
96
- font-size: 14px;
97
- font-family: var(--vp-font-family-mono);
98
- color: var(--vp-c-text-1);
99
- background: var(--vp-c-bg);
100
- border: 1px solid var(--vp-c-divider);
101
- border-radius: 6px;
102
- transition: border-color 0.2s ease;
103
-
104
- &::placeholder {
105
- color: var(--vp-c-text-3);
106
- }
107
-
108
- &:focus {
109
- border-color: var(--vp-c-brand-1);
110
- outline: none;
111
- }
112
- }
113
-
114
- .clearBtn {
115
- position: absolute;
116
- right: 8px;
117
- top: 50%;
118
- transform: translateY(-50%);
119
- width: 20px;
120
- height: 20px;
121
- display: flex;
122
- align-items: center;
123
- justify-content: center;
124
- background: transparent;
125
- border: none;
126
- border-radius: 4px;
127
- cursor: pointer;
128
- font-size: 14px;
129
- color: var(--vp-c-text-3);
130
- transition: all 0.2s ease;
131
-
132
- &:hover {
133
- background: var(--vp-c-danger-soft);
134
- color: var(--vp-c-danger-1);
135
- }
136
- }
137
-
138
- /* 字段 */
139
- .field {
140
- margin-top: 16px;
141
-
142
- &:first-of-type {
143
- margin-top: 0;
144
- }
145
- }
146
-
147
- .fieldLabel {
148
- font-size: 13px;
149
- font-weight: 500;
150
- color: var(--vp-c-text-2);
151
- margin-bottom: 6px;
152
- }
153
-
154
- .fieldHelp {
155
- font-size: 12px;
156
- color: var(--vp-c-text-3);
157
- line-height: 1.5;
158
- margin-bottom: 10px;
159
- }
160
-
161
- .select {
162
- width: 100%;
163
- padding: 10px 12px;
164
- font-size: 14px;
165
- color: var(--vp-c-text-1);
166
- background: var(--vp-c-bg);
167
- border: 1px solid var(--vp-c-divider);
168
- border-radius: 6px;
169
- transition: border-color 0.2s ease;
170
- cursor: pointer;
171
-
172
- &:focus {
173
- border-color: var(--vp-c-brand-1);
174
- outline: none;
175
- }
176
-
177
- &:hover {
178
- border-color: var(--vp-c-brand-1);
179
- }
180
- }
181
-
182
- .inputWithUnit {
183
- position: relative;
184
- display: flex;
185
- align-items: center;
186
-
187
- .input {
188
- padding-right: 40px;
189
- }
190
- }
191
-
192
- .unit {
193
- position: absolute;
194
- right: 12px;
195
- font-size: 13px;
196
- color: var(--vp-c-text-3);
197
- pointer-events: none;
198
- }
199
-
200
- .checkboxLabel {
201
- display: flex;
202
- align-items: center;
203
- gap: 10px;
204
- font-size: 14px;
205
- color: var(--vp-c-text-1);
206
- cursor: pointer;
207
- user-select: none;
208
- padding: 8px 0;
209
-
210
- &:hover {
211
- color: var(--vp-c-brand-1);
212
- }
213
- }
214
-
215
- .checkbox {
216
- width: 18px;
217
- height: 18px;
218
- cursor: pointer;
219
- accent-color: var(--vp-c-brand-1);
220
- }
221
-
222
- /* 操作栏 */
223
- .actionBar {
224
- display: flex;
225
- gap: 12px;
226
- justify-content: flex-end;
227
- padding-top: 16px;
228
- margin-top: 8px;
229
- border-top: 1px solid var(--vp-c-divider);
230
- }
231
-
232
- .saveBtn,
233
- .resetBtn {
234
- padding: 10px 20px;
235
- font-size: 14px;
236
- font-weight: 500;
237
- border: none;
238
- border-radius: 6px;
239
- cursor: pointer;
240
- transition: all 0.2s ease;
241
- }
242
-
243
- .saveBtn {
244
- background: var(--vp-c-brand-1);
245
- color: #fff;
246
-
247
- &:hover:not(.disabled) {
248
- background: var(--vp-c-brand-2);
249
- }
250
-
251
- &:active:not(.disabled) {
252
- transform: scale(0.98);
253
- }
254
-
255
- &.disabled {
256
- opacity: 0.5;
257
- cursor: not-allowed;
258
- }
259
- }
260
-
261
- .resetBtn {
262
- background: var(--vp-c-bg);
263
- color: var(--vp-c-text-1);
264
- border: 1px solid var(--vp-c-divider);
265
-
266
- &:hover {
267
- background: var(--vp-c-bg-soft);
268
- border-color: var(--vp-c-brand-1);
269
- }
270
-
271
- &:active {
272
- transform: scale(0.98);
273
- }
274
- }
275
-
276
- /* Toast 提示 */
277
- .toast {
278
- position: fixed;
279
- top: 80px;
280
- left: 50%;
281
- transform: translateX(-50%);
282
- padding: 12px 20px;
283
- background: var(--vp-c-brand-1);
284
- color: #fff;
285
- border-radius: 6px;
286
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
287
- font-size: 14px;
288
- font-weight: 500;
289
- z-index: 1000;
290
- }
291
-
292
- /* 过渡动画 */
293
- :global(.toast-enter-active),
294
- :global(.toast-leave-active) {
295
- transition: all 0.3s ease;
296
- }
297
-
298
- :global(.toast-enter-from),
299
- :global(.toast-leave-to) {
300
- opacity: 0;
301
- transform: translate(-50%, -20px);
302
- }
303
-
304
- /* 响应式 */
305
- @media (max-width: 768px) {
306
- .settingsWrapper {
307
- padding: 12px;
308
- }
309
-
310
- .settingItem {
311
- padding: 16px;
312
- }
313
-
314
- .actionBar {
315
- flex-direction: column;
316
-
317
- .saveBtn,
318
- .resetBtn {
319
- width: 100%;
320
- }
321
- }
322
-
323
- .toast {
324
- left: 12px;
325
- right: 12px;
326
- transform: translateX(0);
327
- }
328
- }
329
- /* ===================================== */
330
- /* #endregion 过渡动画 */
331
- /* ===================================== */
332
-
333
- /* ===================================== */
334
- /* #region 响应式设计 */
335
- /* ===================================== */
336
- @media (max-width: 768px) {
337
- .settingsWrapper {
338
- padding: 16px;
339
- }
340
-
341
- .section {
342
- padding: 16px;
343
- }
344
-
345
- .sectionTitle {
346
- font-size: 16px;
347
- }
348
-
349
- .formRow {
350
- grid-template-columns: 1fr;
351
- gap: 16px;
352
- }
353
-
354
- .actionBar {
355
- padding: 16px;
356
- flex-direction: column-reverse;
357
- }
358
-
359
- .saveBtn,
360
- .resetBtn {
361
- width: 100%;
362
- justify-content: center;
363
- }
364
-
365
- .toast {
366
- left: 16px;
367
- right: 16px;
368
- transform: none;
369
- }
370
-
371
- @keyframes slideDown {
372
- from {
373
- opacity: 0;
374
- transform: translateY(-20px);
375
- }
376
- to {
377
- opacity: 1;
378
- transform: translateY(0);
379
- }
380
- }
381
- }
382
- /* ===================================== */
383
- /* #endregion 响应式设计 */
384
- /* ===================================== */
385
-
386
- /* ===================================== */
387
- /* #region 内容宽度配置 */
388
- /* ===================================== */
389
- .widthOptions {
390
- display: flex;
391
- gap: 12px;
392
- margin-top: 8px;
393
- }
394
-
395
- .widthBtn {
396
- flex: 1;
397
- padding: 12px 16px;
398
- border: 2px solid var(--vp-c-divider);
399
- border-radius: 8px;
400
- background: var(--vp-c-bg);
401
- color: var(--vp-c-text-2);
402
- font-size: 14px;
403
- font-weight: 500;
404
- cursor: pointer;
405
- transition: all 0.2s ease;
406
- display: flex;
407
- align-items: center;
408
- justify-content: center;
409
- gap: 6px;
410
-
411
- &:hover {
412
- border-color: var(--vp-c-brand-1);
413
- color: var(--vp-c-brand-1);
414
- background: var(--vp-c-bg-alt);
415
- transform: translateY(-1px);
416
- box-shadow: 0 2px 8px rgba(100, 108, 255, 0.1);
417
- }
418
-
419
- &:active {
420
- transform: translateY(0);
421
- }
422
-
423
- &.active {
424
- border-color: var(--vp-c-brand-1);
425
- background: var(--vp-c-brand-1);
426
- color: white;
427
- font-weight: 600;
428
- box-shadow: 0 2px 12px rgba(100, 108, 255, 0.3);
429
- }
430
- }
431
- /* ===================================== */
432
- /* #endregion 内容宽度配置 */
433
- /* ===================================== */
1
+ .settingsWrapper {
2
+ max-width: 680px;
3
+ margin: 0 auto;
4
+ padding: 12px 4px 0;
5
+ }
6
+
7
+ .settingsSection {
8
+ border-top: 1px solid var(--vp-c-divider);
9
+ }
10
+
11
+ .settingItem {
12
+ display: grid;
13
+ grid-template-columns: minmax(150px, 0.42fr) minmax(220px, 1fr);
14
+ gap: 18px;
15
+ padding: 18px 0;
16
+ border-bottom: 1px solid var(--vp-c-divider);
17
+ }
18
+
19
+ .settingMeta {
20
+ min-width: 0;
21
+ }
22
+
23
+ .labelLine {
24
+ display: flex;
25
+ align-items: center;
26
+ gap: 6px;
27
+ }
28
+
29
+ .itemName {
30
+ color: var(--vp-c-text-1);
31
+ font-size: 14px;
32
+ font-weight: 600;
33
+ line-height: 22px;
34
+ }
35
+
36
+ .statusText {
37
+ display: inline-block;
38
+ margin-top: 4px;
39
+ color: var(--vp-c-text-3);
40
+ font-size: 12px;
41
+ line-height: 18px;
42
+ }
43
+
44
+ .infoWrap {
45
+ position: relative;
46
+ display: inline-flex;
47
+ }
48
+
49
+ .infoIcon {
50
+ display: inline-flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ width: 16px;
54
+ height: 16px;
55
+ color: var(--vp-c-text-3);
56
+ border: 1px solid var(--vp-c-divider);
57
+ border-radius: 50%;
58
+ cursor: help;
59
+ font-size: 11px;
60
+ line-height: 1;
61
+ }
62
+
63
+ .tooltip {
64
+ position: absolute;
65
+ left: 50%;
66
+ bottom: calc(100% + 8px);
67
+ z-index: 10;
68
+ width: 240px;
69
+ padding: 8px 10px;
70
+ color: var(--vp-c-text-1);
71
+ background: var(--vp-c-bg-elv);
72
+ border: 1px solid var(--vp-c-divider);
73
+ border-radius: 6px;
74
+ box-shadow: var(--vp-shadow-2);
75
+ font-size: 12px;
76
+ line-height: 18px;
77
+ opacity: 0;
78
+ pointer-events: none;
79
+ transform: translate(-50%, 4px);
80
+ transition:
81
+ opacity 0.15s ease,
82
+ transform 0.15s ease;
83
+ }
84
+
85
+ .infoWrap:hover .tooltip,
86
+ .infoWrap:focus-within .tooltip {
87
+ opacity: 1;
88
+ transform: translate(-50%, 0);
89
+ }
90
+
91
+ .inputGroup {
92
+ position: relative;
93
+ }
94
+
95
+ .input,
96
+ .select {
97
+ width: 100%;
98
+ height: 34px;
99
+ box-sizing: border-box;
100
+ color: var(--vp-c-text-1);
101
+ background: var(--vp-c-bg);
102
+ border: 1px solid var(--vp-c-divider);
103
+ border-radius: 6px;
104
+ font-size: 13px;
105
+ outline: none;
106
+ }
107
+
108
+ .input {
109
+ padding: 0 34px 0 10px;
110
+ font-family: var(--vp-font-family-mono);
111
+ }
112
+
113
+ .select {
114
+ padding: 0 10px;
115
+ cursor: pointer;
116
+ }
117
+
118
+ .input::placeholder {
119
+ color: var(--vp-c-text-3);
120
+ }
121
+
122
+ .input:focus,
123
+ .select:focus {
124
+ border-color: var(--vp-c-brand-1);
125
+ }
126
+
127
+ .clearBtn {
128
+ position: absolute;
129
+ top: 50%;
130
+ right: 7px;
131
+ display: inline-flex;
132
+ align-items: center;
133
+ justify-content: center;
134
+ width: 20px;
135
+ height: 20px;
136
+ padding: 0;
137
+ color: var(--vp-c-text-3);
138
+ background: transparent;
139
+ border: none;
140
+ border-radius: 4px;
141
+ cursor: pointer;
142
+ font-size: 16px;
143
+ transform: translateY(-50%);
144
+ }
145
+
146
+ .clearBtn:hover {
147
+ color: var(--vp-c-danger-1);
148
+ background: var(--vp-c-danger-soft);
149
+ }
150
+
151
+ .fieldStack {
152
+ display: flex;
153
+ flex-direction: column;
154
+ gap: 12px;
155
+ }
156
+
157
+ .checkRow {
158
+ display: inline-flex;
159
+ align-items: center;
160
+ gap: 8px;
161
+ width: max-content;
162
+ color: var(--vp-c-text-1);
163
+ cursor: pointer;
164
+ font-size: 13px;
165
+ line-height: 20px;
166
+ user-select: none;
167
+ }
168
+
169
+ .checkbox {
170
+ width: 16px;
171
+ height: 16px;
172
+ margin: 0;
173
+ accent-color: var(--vp-c-brand-1);
174
+ cursor: pointer;
175
+ }
176
+
177
+ .controlRow,
178
+ .field {
179
+ display: flex;
180
+ flex-direction: column;
181
+ gap: 6px;
182
+ }
183
+
184
+ .controlLabel {
185
+ color: var(--vp-c-text-2);
186
+ font-size: 12px;
187
+ line-height: 18px;
188
+ }
189
+
190
+ .segmented {
191
+ display: grid;
192
+ grid-template-columns: repeat(3, 1fr);
193
+ overflow: hidden;
194
+ border: 1px solid var(--vp-c-divider);
195
+ border-radius: 6px;
196
+ }
197
+
198
+ .segment {
199
+ display: inline-flex;
200
+ align-items: center;
201
+ justify-content: center;
202
+ min-width: 0;
203
+ height: 32px;
204
+ color: var(--vp-c-text-2);
205
+ border-right: 1px solid var(--vp-c-divider);
206
+ cursor: pointer;
207
+ font-size: 13px;
208
+ user-select: none;
209
+ }
210
+
211
+ .segment:last-child {
212
+ border-right: none;
213
+ }
214
+
215
+ .segment input {
216
+ position: absolute;
217
+ opacity: 0;
218
+ pointer-events: none;
219
+ }
220
+
221
+ .segment:hover,
222
+ .activeSegment {
223
+ color: var(--vp-c-brand-1);
224
+ background: var(--vp-c-default-soft);
225
+ }
226
+
227
+ .activeSegment {
228
+ font-weight: 600;
229
+ }
230
+
231
+ .inlineGrid {
232
+ display: grid;
233
+ grid-template-columns: 1fr 120px;
234
+ gap: 12px;
235
+ }
236
+
237
+ .prefixGrid {
238
+ display: grid;
239
+ grid-template-columns: repeat(2, minmax(0, 1fr));
240
+ gap: 12px;
241
+ }
242
+
243
+ .prefixInput {
244
+ padding-right: 10px;
245
+ font-family: var(--vp-font-family-base);
246
+ }
247
+
248
+ .inputWithUnit {
249
+ position: relative;
250
+ }
251
+
252
+ .inputWithUnit .input {
253
+ padding-right: 34px;
254
+ }
255
+
256
+ .unit {
257
+ position: absolute;
258
+ top: 50%;
259
+ right: 10px;
260
+ color: var(--vp-c-text-3);
261
+ font-size: 12px;
262
+ pointer-events: none;
263
+ transform: translateY(-50%);
264
+ }
265
+
266
+ .actionBar {
267
+ display: flex;
268
+ justify-content: flex-end;
269
+ gap: 8px;
270
+ padding-top: 16px;
271
+ }
272
+
273
+ .saveBtn,
274
+ .resetBtn {
275
+ display: inline-flex;
276
+ align-items: center;
277
+ justify-content: center;
278
+ min-width: 72px;
279
+ height: 34px;
280
+ padding: 0 14px;
281
+ border-radius: 6px;
282
+ cursor: pointer;
283
+ font-size: 13px;
284
+ font-weight: 500;
285
+ }
286
+
287
+ .saveBtn {
288
+ color: #fff;
289
+ background: var(--vp-c-brand-1);
290
+ border: 1px solid var(--vp-c-brand-1);
291
+ }
292
+
293
+ .saveBtn:hover:not(.disabled) {
294
+ background: var(--vp-c-brand-2);
295
+ }
296
+
297
+ .saveBtn.disabled {
298
+ opacity: 0.45;
299
+ cursor: not-allowed;
300
+ }
301
+
302
+ .resetBtn {
303
+ color: var(--vp-c-text-1);
304
+ background: var(--vp-c-bg);
305
+ border: 1px solid var(--vp-c-divider);
306
+ }
307
+
308
+ .resetBtn:hover {
309
+ border-color: var(--vp-c-brand-1);
310
+ }
311
+
312
+ .toast {
313
+ position: fixed;
314
+ top: 78px;
315
+ left: 50%;
316
+ z-index: 1000;
317
+ padding: 8px 12px;
318
+ color: #fff;
319
+ background: var(--vp-c-brand-1);
320
+ border-radius: 6px;
321
+ box-shadow: var(--vp-shadow-2);
322
+ font-size: 13px;
323
+ transform: translateX(-50%);
324
+ }
325
+
326
+ :global(.toast-enter-active),
327
+ :global(.toast-leave-active) {
328
+ transition: all 0.2s ease;
329
+ }
330
+
331
+ :global(.toast-enter-from),
332
+ :global(.toast-leave-to) {
333
+ opacity: 0;
334
+ transform: translate(-50%, -8px);
335
+ }
336
+
337
+ @media (max-width: 768px) {
338
+ .settingsWrapper {
339
+ padding: 0;
340
+ }
341
+
342
+ .settingItem {
343
+ grid-template-columns: 1fr;
344
+ gap: 10px;
345
+ padding: 16px 0;
346
+ }
347
+
348
+ .inlineGrid {
349
+ grid-template-columns: 1fr;
350
+ }
351
+
352
+ .prefixGrid {
353
+ grid-template-columns: 1fr;
354
+ }
355
+
356
+ .tooltip {
357
+ left: 0;
358
+ width: min(260px, calc(100vw - 48px));
359
+ transform: translate(0, 4px);
360
+ }
361
+
362
+ .infoWrap:hover .tooltip,
363
+ .infoWrap:focus-within .tooltip {
364
+ transform: translate(0, 0);
365
+ }
366
+
367
+ .actionBar {
368
+ flex-direction: column-reverse;
369
+ }
370
+
371
+ .saveBtn,
372
+ .resetBtn {
373
+ width: 100%;
374
+ }
375
+ }