@tnotesjs/core 0.1.21 → 0.1.23

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 (122) hide show
  1. package/README.md +87 -87
  2. package/dist/{chunk-4MO7F7Q4.js → chunk-BSTQOJVE.js} +1 -1
  3. package/dist/{chunk-SQVHJR2Z.js → chunk-O4DCXHOV.js} +0 -3
  4. package/dist/cli/index.js +2 -2
  5. package/dist/index.js +1 -1
  6. package/dist/vitepress/config/index.js +2 -2
  7. package/package.json +3 -4
  8. package/types/config.ts +60 -61
  9. package/types/index.ts +11 -11
  10. package/types/note.ts +33 -33
  11. package/vitepress/assets/icons/icon__check.svg +3 -3
  12. package/vitepress/assets/icons/icon__clipboard.svg +7 -7
  13. package/vitepress/assets/icons/icon__close.svg +1 -1
  14. package/vitepress/assets/icons/icon__collapse.svg +1 -1
  15. package/vitepress/assets/icons/icon__confirm.svg +1 -1
  16. package/vitepress/assets/icons/icon__copy.svg +4 -4
  17. package/vitepress/assets/icons/icon__focus.svg +1 -1
  18. package/vitepress/assets/icons/icon__fold.svg +3 -3
  19. package/vitepress/assets/icons/icon__folder.svg +1 -1
  20. package/vitepress/assets/icons/icon__fullscreen.svg +1 -1
  21. package/vitepress/assets/icons/icon__fullscreen_exit.svg +1 -1
  22. package/vitepress/assets/icons/icon__github.svg +3 -3
  23. package/vitepress/assets/icons/icon__mindmap.svg +1 -1
  24. package/vitepress/assets/icons/icon__next.svg +1 -1
  25. package/vitepress/assets/icons/icon__number_gray.svg +1 -1
  26. package/vitepress/assets/icons/icon__number_purple.svg +1 -1
  27. package/vitepress/assets/icons/icon__prev.svg +1 -1
  28. package/vitepress/assets/icons/icon__restore.svg +1 -1
  29. package/vitepress/assets/icons/icon__rotate.svg +4 -4
  30. package/vitepress/assets/icons/icon__search.svg +1 -1
  31. package/vitepress/assets/icons/icon__sidebar_collapsed.svg +1 -1
  32. package/vitepress/assets/icons/icon__sidebar_opened.svg +1 -1
  33. package/vitepress/assets/icons/icon__totop.svg +5 -5
  34. package/vitepress/assets/icons/icon__vscode.svg +5 -5
  35. package/vitepress/assets/icons/icon__zoom_fit.svg +1 -1
  36. package/vitepress/assets/icons/icon__zoom_in.svg +1 -1
  37. package/vitepress/assets/icons/icon__zoom_out.svg +1 -1
  38. package/vitepress/assets/icons/icon__zoom_reset.svg +1 -1
  39. package/vitepress/assets/icons/index.ts +39 -39
  40. package/vitepress/components/BilibiliOutsidePlayer/BilibiliOutsidePlayer.vue +20 -20
  41. package/vitepress/components/CodeBlockFullscreen/CodeBlockFullscreen.vue +369 -369
  42. package/vitepress/components/CodeBlockFullscreen/index.ts +209 -213
  43. package/vitepress/components/CodeBlockFullscreen/styles.css +126 -126
  44. package/vitepress/components/Discussions/Discussions.vue +244 -211
  45. package/vitepress/components/EnWordList/EnWordList.vue +663 -543
  46. package/vitepress/components/EnWordList/RightClickMenu.vue +89 -66
  47. package/vitepress/components/Footprints/Footprints.vue +472 -377
  48. package/vitepress/components/Layout/AboutModal.vue +331 -105
  49. package/vitepress/components/Layout/AboutPanel.vue +484 -270
  50. package/vitepress/components/Layout/ContentCollapse.vue +590 -603
  51. package/vitepress/components/Layout/CustomSidebar.vue +817 -817
  52. package/vitepress/components/Layout/DocBeforeControls.vue +351 -149
  53. package/vitepress/components/Layout/DocFooter.vue +233 -233
  54. package/vitepress/components/Layout/ImagePreview.vue +484 -281
  55. package/vitepress/components/Layout/Layout.vue +744 -621
  56. package/vitepress/components/Layout/NavBarSettingsTrigger.vue +0 -2
  57. package/vitepress/components/Layout/NoteStatus.vue +140 -140
  58. package/vitepress/components/Layout/SidebarItems.vue +1083 -1083
  59. package/vitepress/components/Layout/SidebarNavBefore.vue +170 -171
  60. package/vitepress/components/Layout/SidebarResizeHandle.vue +311 -319
  61. package/vitepress/components/Layout/Swiper.vue +167 -167
  62. package/vitepress/components/Layout/ToggleFullContent.vue +47 -35
  63. package/vitepress/components/Layout/ToggleSidebar.vue +37 -26
  64. package/vitepress/components/Layout/composables/useCollapseControl.ts +88 -88
  65. package/vitepress/components/Layout/composables/useNoteConfig.ts +119 -119
  66. package/vitepress/components/Layout/composables/useNoteSave.ts +178 -178
  67. package/vitepress/components/Layout/composables/useNoteValidation.ts +85 -85
  68. package/vitepress/components/Layout/composables/useRedirect.ts +113 -113
  69. package/vitepress/components/Layout/composables/useSidebarLayout.ts +122 -122
  70. package/vitepress/components/Layout/composables/useVSCodeIntegration.ts +85 -85
  71. package/vitepress/components/Layout/homeReadme.data.ts +124 -124
  72. package/vitepress/components/LoadingPage/LoadingPage.vue +1 -6
  73. package/vitepress/components/MarkMap/MarkMap.vue +564 -405
  74. package/vitepress/components/Mermaid/Mermaid.vue +643 -365
  75. package/vitepress/components/NotesTable/NotesTable.vue +174 -98
  76. package/vitepress/components/NotesTable/README.md +67 -67
  77. package/vitepress/components/Settings/Settings.vue +711 -334
  78. package/vitepress/components/Settings/SettingsDialog.vue +1 -11
  79. package/vitepress/components/SidebarCard/MindMapView.vue +484 -484
  80. package/vitepress/components/SidebarCard/NotesTrendChart.vue +108 -108
  81. package/vitepress/components/SidebarCard/SidebarCard.vue +945 -946
  82. package/vitepress/components/Tooltip/Tooltip.vue +70 -70
  83. package/vitepress/components/constants.ts +109 -109
  84. package/vitepress/components/notesConfig.data.ts +73 -73
  85. package/vitepress/components/sidebar.data.ts +59 -59
  86. package/vitepress/components/tnotes-config.data.ts +21 -21
  87. package/vitepress/components/utils.ts +26 -26
  88. package/vitepress/config/index.ts +169 -169
  89. package/vitepress/configs/constants.ts +26 -26
  90. package/vitepress/configs/head.config.ts +25 -25
  91. package/vitepress/configs/index.ts +9 -9
  92. package/vitepress/configs/markdown-it.d.ts +23 -23
  93. package/vitepress/configs/markdown.config.ts +368 -367
  94. package/vitepress/configs/theme.config.ts +108 -108
  95. package/vitepress/plugins/buildProgressPlugin.ts +434 -434
  96. package/vitepress/plugins/getNoteByConfigIdPlugin.ts +107 -107
  97. package/vitepress/plugins/renameNotePlugin.ts +68 -68
  98. package/vitepress/plugins/sidebarStructurePlugin.ts +260 -260
  99. package/vitepress/plugins/updateConfigPlugin.ts +63 -63
  100. package/vitepress/theme/index.ts +137 -137
  101. package/vitepress/theme/styles/base.scss +66 -64
  102. package/vitepress/theme/styles/components/404.scss +31 -31
  103. package/vitepress/theme/styles/components/collapse.scss +172 -172
  104. package/vitepress/theme/styles/components/markmap.scss +101 -101
  105. package/vitepress/theme/styles/components/swiper.scss +255 -255
  106. package/vitepress/theme/styles/index.scss +25 -25
  107. package/vitepress/theme/styles/layout.scss +78 -78
  108. package/vitepress/theme/styles/utilities.scss +39 -39
  109. package/vitepress/theme/styles/vitepress-override.scss +25 -25
  110. package/vitepress/components/Discussions/Discussions.module.scss +0 -32
  111. package/vitepress/components/EnWordList/EnWordList.module.scss +0 -124
  112. package/vitepress/components/EnWordList/RightClickMenu.module.scss +0 -22
  113. package/vitepress/components/Footprints/Footprints.module.scss +0 -93
  114. package/vitepress/components/Layout/AboutModal.module.scss +0 -233
  115. package/vitepress/components/Layout/ImagePreview.module.scss +0 -201
  116. package/vitepress/components/Layout/Layout.module.scss +0 -661
  117. package/vitepress/components/Layout/ToggleFullContent.module.scss +0 -11
  118. package/vitepress/components/Layout/ToggleSidebar.module.scss +0 -11
  119. package/vitepress/components/MarkMap/MarkMap.module.scss +0 -159
  120. package/vitepress/components/Mermaid/Mermaid.module.scss +0 -275
  121. package/vitepress/components/NotesTable/NotesTable.module.scss +0 -77
  122. package/vitepress/components/Settings/Settings.module.scss +0 -375
@@ -1,105 +1,331 @@
1
- <template>
2
- <!-- 使用 teleport 将 modal 放到 body 之下(避免父容器样式影响) -->
3
- <teleport to="body">
4
- <div v-if="modelValue" :class="$style.modalBackdrop" @click.self="close">
5
- <div
6
- :class="$style.modal"
7
- role="dialog"
8
- :aria-labelledby="titleId"
9
- aria-modal="true"
10
- ref="modalRef"
11
- >
12
- <header :class="$style.modalHeader">
13
- <h3 :id="titleId" :class="$style.modalTitle">
14
- <!-- 标题通过 slot #title 提供,未提供则使用 prop title -->
15
- <slot name="title">
16
- {{ title }}
17
- </slot>
18
- </h3>
19
- <button
20
- :class="$style.closeBtn"
21
- @click="close"
22
- aria-label="Close"
23
- title="Close"
24
- type="button"
25
- >
26
-
27
- </button>
28
- </header>
29
-
30
- <section :class="$style.modalBody">
31
- <!-- 默认插槽用于传入内容 -->
32
- <slot>
33
- <!-- fallback 内容(如果父组件没有传入插槽) -->
34
- <p>No content provided.</p>
35
- </slot>
36
- </section>
37
-
38
- <footer :class="$style.modalFooter" v-if="$slots.footer">
39
- <slot name="footer"></slot>
40
- </footer>
41
- </div>
42
- </div>
43
- </teleport>
44
- </template>
45
-
46
- <script setup>
47
- import { ref, watch, onMounted, onUnmounted } from 'vue'
48
-
49
- const props = defineProps({
50
- modelValue: { type: Boolean, required: true },
51
- title: { type: String, default: '' },
52
- })
53
-
54
- const emit = defineEmits(['update:modelValue', 'close'])
55
-
56
- const modalRef = ref(null)
57
- const titleId = `tm-title-${Math.random().toString(36).slice(2, 8)}`
58
-
59
- // close modal (emit update and close)
60
- function close() {
61
- emit('update:modelValue', false)
62
- emit('close')
63
- }
64
-
65
- // handle ESC to close
66
- function onKeyDown(e) {
67
- if (e.key === 'Escape' || e.key === 'Esc') {
68
- close()
69
- }
70
- }
71
-
72
- // focus trap: basic - focus modal when opened
73
- watch(
74
- () => props.modelValue,
75
- (open) => {
76
- if (open) {
77
- // small timeout to ensure element exists
78
- setTimeout(() => {
79
- modalRef.value?.focus?.()
80
- }, 0)
81
- document.addEventListener('keydown', onKeyDown)
82
- // prevent body scroll
83
- document.body.style.overflow = 'hidden'
84
- } else {
85
- document.removeEventListener('keydown', onKeyDown)
86
- document.body.style.overflow = ''
87
- }
88
- },
89
- { immediate: false },
90
- )
91
-
92
- onMounted(() => {
93
- if (props.modelValue) {
94
- document.addEventListener('keydown', onKeyDown)
95
- document.body.style.overflow = 'hidden'
96
- }
97
- })
98
-
99
- onUnmounted(() => {
100
- document.removeEventListener('keydown', onKeyDown)
101
- document.body.style.overflow = ''
102
- })
103
- </script>
104
-
105
- <style module src="./AboutModal.module.scss"></style>
1
+ <template>
2
+ <!-- 使用 teleport 将 modal 放到 body 之下(避免父容器样式影响) -->
3
+ <teleport to="body">
4
+ <div v-if="modelValue" class="modalBackdrop" @click.self="close">
5
+ <div class="modal" ref="modalRef">
6
+ <header class="modalHeader">
7
+ <h3 class="modalTitle">
8
+ <!-- 标题通过 slot #title 提供,未提供则使用 prop title -->
9
+ <slot name="title">
10
+ {{ title }}
11
+ </slot>
12
+ </h3>
13
+ <button
14
+ class="closeBtn"
15
+ @click="close"
16
+ title="Close"
17
+ type="button"
18
+ >
19
+
20
+ </button>
21
+ </header>
22
+
23
+ <section class="modalBody">
24
+ <!-- 默认插槽用于传入内容 -->
25
+ <slot>
26
+ <!-- fallback 内容(如果父组件没有传入插槽) -->
27
+ <p>No content provided.</p>
28
+ </slot>
29
+ </section>
30
+
31
+ <footer class="modalFooter" v-if="$slots.footer">
32
+ <slot name="footer"></slot>
33
+ </footer>
34
+ </div>
35
+ </div>
36
+ </teleport>
37
+ </template>
38
+
39
+ <script setup>
40
+ import { ref, watch, onMounted, onUnmounted } from 'vue'
41
+
42
+ const props = defineProps({
43
+ modelValue: { type: Boolean, required: true },
44
+ title: { type: String, default: '' },
45
+ })
46
+
47
+ const emit = defineEmits(['update:modelValue', 'close'])
48
+
49
+ const modalRef = ref(null)
50
+
51
+ // close modal (emit update and close)
52
+ function close() {
53
+ emit('update:modelValue', false)
54
+ emit('close')
55
+ }
56
+
57
+ // handle ESC to close
58
+ function onKeyDown(e) {
59
+ if (e.key === 'Escape' || e.key === 'Esc') {
60
+ close()
61
+ }
62
+ }
63
+
64
+ // focus trap: basic - focus modal when opened
65
+ watch(
66
+ () => props.modelValue,
67
+ (open) => {
68
+ if (open) {
69
+ // small timeout to ensure element exists
70
+ setTimeout(() => {
71
+ modalRef.value?.focus?.()
72
+ }, 0)
73
+ document.addEventListener('keydown', onKeyDown)
74
+ // prevent body scroll
75
+ document.body.style.overflow = 'hidden'
76
+ } else {
77
+ document.removeEventListener('keydown', onKeyDown)
78
+ document.body.style.overflow = ''
79
+ }
80
+ },
81
+ { immediate: false },
82
+ )
83
+
84
+ onMounted(() => {
85
+ if (props.modelValue) {
86
+ document.addEventListener('keydown', onKeyDown)
87
+ document.body.style.overflow = 'hidden'
88
+ }
89
+ })
90
+
91
+ onUnmounted(() => {
92
+ document.removeEventListener('keydown', onKeyDown)
93
+ document.body.style.overflow = ''
94
+ })
95
+ </script>
96
+
97
+ <style scoped lang="scss">
98
+ // AboutModal 组件样式
99
+
100
+ // 模态框背景遮罩
101
+ .modalBackdrop {
102
+ position: fixed;
103
+ inset: 0;
104
+ background: rgba(0, 0, 0, 0.75);
105
+ backdrop-filter: blur(4px);
106
+ display: flex;
107
+ align-items: center;
108
+ justify-content: center;
109
+ z-index: 1200;
110
+ padding: 1rem;
111
+ animation: fadeIn 0.2s ease-out;
112
+ }
113
+
114
+ @keyframes fadeIn {
115
+ from {
116
+ opacity: 0;
117
+ }
118
+ to {
119
+ opacity: 1;
120
+ }
121
+ }
122
+
123
+ @keyframes slideUp {
124
+ from {
125
+ opacity: 0;
126
+ transform: translateY(20px);
127
+ }
128
+ to {
129
+ opacity: 1;
130
+ transform: translateY(0);
131
+ }
132
+ }
133
+
134
+ // 模态框主体
135
+ .modal {
136
+ background: var(--vp-c-bg);
137
+ color: var(--vp-c-text-1);
138
+ border-radius: 16px;
139
+ max-width: 580px;
140
+ width: 100%;
141
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4),
142
+ 0 0 0 1px rgba(255, 255, 255, 0.05);
143
+ overflow: hidden;
144
+ outline: none;
145
+ animation: slideUp 0.3s ease-out;
146
+
147
+ // 暗色模式优化
148
+ :global(.dark) & {
149
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6),
150
+ 0 0 0 1px rgba(255, 255, 255, 0.08);
151
+ }
152
+ }
153
+
154
+ // 模态框头部
155
+ .modalHeader {
156
+ display: flex;
157
+ align-items: center;
158
+ justify-content: space-between;
159
+ padding: 1.25rem 1.5rem;
160
+ border-bottom: 1px solid var(--vp-c-divider);
161
+ background: linear-gradient(
162
+ 180deg,
163
+ var(--vp-c-bg-soft) 0%,
164
+ var(--vp-c-bg) 100%
165
+ );
166
+ position: relative;
167
+
168
+ // 添加顶部装饰条
169
+ &::before {
170
+ content: '';
171
+ position: absolute;
172
+ top: 0;
173
+ left: 0;
174
+ right: 0;
175
+ height: 3px;
176
+ background: linear-gradient(
177
+ 90deg,
178
+ var(--vp-c-brand-1),
179
+ var(--vp-c-brand-2)
180
+ );
181
+ }
182
+ }
183
+
184
+ // 模态框标题
185
+ .modalTitle {
186
+ margin: 0;
187
+ font-size: 1.125rem;
188
+ font-weight: 600;
189
+ color: var(--vp-c-text-1);
190
+ letter-spacing: -0.01em;
191
+ display: flex;
192
+ align-items: center;
193
+ gap: 0.5rem;
194
+
195
+ // 添加图标装饰(可选,如果标题前有 emoji)
196
+ &::before {
197
+ content: '📝';
198
+ font-size: 1.25rem;
199
+ }
200
+ }
201
+
202
+ // 关闭按钮
203
+ .closeBtn {
204
+ background: transparent;
205
+ border: none;
206
+ cursor: pointer;
207
+ font-size: 1.25rem;
208
+ line-height: 1;
209
+ padding: 0.5rem;
210
+ border-radius: 8px;
211
+ color: var(--vp-c-text-2);
212
+ transition: all 0.2s ease;
213
+ display: flex;
214
+ align-items: center;
215
+ justify-content: center;
216
+ width: 32px;
217
+ height: 32px;
218
+
219
+ &:hover {
220
+ background: var(--vp-c-bg-soft);
221
+ color: var(--vp-c-text-1);
222
+ transform: rotate(90deg);
223
+ }
224
+
225
+ &:active {
226
+ transform: rotate(90deg) scale(0.95);
227
+ }
228
+ }
229
+
230
+ // 模态框主体内容
231
+ .modalBody {
232
+ padding: 1.5rem;
233
+ font-size: 0.95rem;
234
+ color: var(--vp-c-text-2);
235
+ line-height: 1.7;
236
+ max-height: 60vh;
237
+ overflow-y: auto;
238
+
239
+ // 美化滚动条
240
+ &::-webkit-scrollbar {
241
+ width: 6px;
242
+ }
243
+
244
+ &::-webkit-scrollbar-track {
245
+ background: transparent;
246
+ }
247
+
248
+ &::-webkit-scrollbar-thumb {
249
+ background: var(--vp-c-divider);
250
+ border-radius: 3px;
251
+
252
+ &:hover {
253
+ background: var(--vp-c-text-3);
254
+ }
255
+ }
256
+
257
+ // 优化内容样式
258
+ p {
259
+ margin: 0.75rem 0;
260
+
261
+ &:first-child {
262
+ margin-top: 0;
263
+ }
264
+
265
+ &:last-child {
266
+ margin-bottom: 0;
267
+ }
268
+ }
269
+
270
+ // 如果内容中有图标,增加间距
271
+ :deep(span) {
272
+ margin-right: 0.25rem;
273
+ }
274
+
275
+ // 强调文本
276
+ strong {
277
+ color: var(--vp-c-text-1);
278
+ font-weight: 600;
279
+ }
280
+
281
+ // 链接样式
282
+ a {
283
+ color: var(--vp-c-brand-1);
284
+ text-decoration: none;
285
+ transition: color 0.2s;
286
+
287
+ &:hover {
288
+ color: var(--vp-c-brand-2);
289
+ text-decoration: underline;
290
+ }
291
+ }
292
+ }
293
+
294
+ // 模态框底部(可选)
295
+ .modalFooter {
296
+ padding: 1rem 1.5rem;
297
+ border-top: 1px solid var(--vp-c-divider);
298
+ background: var(--vp-c-bg-soft);
299
+ text-align: right;
300
+ display: flex;
301
+ gap: 0.75rem;
302
+ justify-content: flex-end;
303
+ align-items: center;
304
+ }
305
+
306
+ // 响应式优化
307
+ @media (max-width: 640px) {
308
+ .modal {
309
+ max-width: 100%;
310
+ margin: 1rem;
311
+ border-radius: 12px;
312
+ }
313
+
314
+ .modalHeader {
315
+ padding: 1rem 1.25rem;
316
+ }
317
+
318
+ .modalTitle {
319
+ font-size: 1rem;
320
+ }
321
+
322
+ .modalBody {
323
+ padding: 1.25rem;
324
+ max-height: 50vh;
325
+ }
326
+
327
+ .modalFooter {
328
+ padding: 0.875rem 1.25rem;
329
+ }
330
+ }
331
+ </style>