@tnotesjs/core 0.0.2 → 0.0.3

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 (115) hide show
  1. package/README.md +84 -84
  2. package/dist/{chunk-LZQDLU3S.js → chunk-NI5B4S3T.js} +12 -2
  3. package/dist/cli/index.js +1 -1
  4. package/dist/vitepress/config/index.js +60 -17
  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__sidebar_collapsed.svg +1 -1
  30. package/vitepress/assets/icons/icon__sidebar_opened.svg +1 -1
  31. package/vitepress/assets/icons/icon__totop.svg +5 -5
  32. package/vitepress/assets/icons/icon__vscode.svg +5 -5
  33. package/vitepress/assets/icons/icon__zoom_fit.svg +1 -1
  34. package/vitepress/assets/icons/icon__zoom_in.svg +1 -1
  35. package/vitepress/assets/icons/icon__zoom_out.svg +1 -1
  36. package/vitepress/assets/icons/icon__zoom_reset.svg +1 -1
  37. package/vitepress/assets/icons/index.ts +38 -38
  38. package/vitepress/components/BilibiliOutsidePlayer/BilibiliOutsidePlayer.vue +20 -20
  39. package/vitepress/components/CodeBlockFullscreen/CodeBlockFullscreen.vue +373 -373
  40. package/vitepress/components/CodeBlockFullscreen/index.ts +115 -115
  41. package/vitepress/components/CodeBlockFullscreen/styles.css +64 -64
  42. package/vitepress/components/Discussions/Discussions.module.scss +32 -32
  43. package/vitepress/components/Discussions/Discussions.vue +211 -211
  44. package/vitepress/components/EnWordList/EnWordList.module.scss +124 -124
  45. package/vitepress/components/EnWordList/EnWordList.vue +543 -543
  46. package/vitepress/components/EnWordList/RightClickMenu.module.scss +22 -22
  47. package/vitepress/components/EnWordList/RightClickMenu.vue +66 -66
  48. package/vitepress/components/Footprints/Footprints.module.scss +93 -93
  49. package/vitepress/components/Footprints/Footprints.vue +377 -377
  50. package/vitepress/components/Layout/AboutModal.module.scss +233 -233
  51. package/vitepress/components/Layout/AboutModal.vue +105 -105
  52. package/vitepress/components/Layout/AboutPanel.vue +266 -266
  53. package/vitepress/components/Layout/ContentCollapse.vue +603 -603
  54. package/vitepress/components/Layout/CustomSidebar.vue +605 -605
  55. package/vitepress/components/Layout/DocBeforeControls.vue +139 -139
  56. package/vitepress/components/Layout/DocFooter.vue +225 -225
  57. package/vitepress/components/Layout/ImagePreview.module.scss +201 -201
  58. package/vitepress/components/Layout/ImagePreview.vue +281 -281
  59. package/vitepress/components/Layout/Layout.module.scss +661 -661
  60. package/vitepress/components/Layout/Layout.vue +542 -542
  61. package/vitepress/components/Layout/NoteStatus.vue +140 -140
  62. package/vitepress/components/Layout/SidebarItems.vue +263 -263
  63. package/vitepress/components/Layout/SidebarNavBefore.vue +92 -92
  64. package/vitepress/components/Layout/Swiper.vue +167 -167
  65. package/vitepress/components/Layout/ToggleFullContent.module.scss +11 -11
  66. package/vitepress/components/Layout/ToggleFullContent.vue +34 -34
  67. package/vitepress/components/Layout/ToggleSidebar.module.scss +11 -11
  68. package/vitepress/components/Layout/ToggleSidebar.vue +35 -35
  69. package/vitepress/components/Layout/composables/useCollapseControl.ts +88 -88
  70. package/vitepress/components/Layout/composables/useNoteConfig.ts +121 -121
  71. package/vitepress/components/Layout/composables/useNoteSave.ts +173 -173
  72. package/vitepress/components/Layout/composables/useNoteValidation.ts +85 -85
  73. package/vitepress/components/Layout/composables/useRedirect.ts +110 -110
  74. package/vitepress/components/Layout/composables/useVSCodeIntegration.ts +85 -85
  75. package/vitepress/components/Layout/homeReadme.data.ts +124 -124
  76. package/vitepress/components/LoadingPage/LoadingPage.vue +192 -192
  77. package/vitepress/components/MarkMap/MarkMap.module.scss +159 -159
  78. package/vitepress/components/MarkMap/MarkMap.vue +404 -404
  79. package/vitepress/components/Mermaid/Mermaid.module.scss +275 -275
  80. package/vitepress/components/Mermaid/Mermaid.vue +364 -364
  81. package/vitepress/components/NotesTable/NotesTable.module.scss +77 -77
  82. package/vitepress/components/NotesTable/NotesTable.vue +98 -98
  83. package/vitepress/components/NotesTable/README.md +67 -67
  84. package/vitepress/components/Settings/Settings.module.scss +433 -433
  85. package/vitepress/components/Settings/Settings.vue +306 -306
  86. package/vitepress/components/SidebarCard/MindMapView.vue +483 -483
  87. package/vitepress/components/SidebarCard/NotesTrendChart.vue +108 -108
  88. package/vitepress/components/SidebarCard/SidebarCard.vue +948 -948
  89. package/vitepress/components/Tooltip/Tooltip.vue +70 -70
  90. package/vitepress/components/constants.ts +91 -91
  91. package/vitepress/components/notesConfig.data.ts +73 -73
  92. package/vitepress/components/sidebar.data.ts +59 -59
  93. package/vitepress/components/tnotes-config.data.ts +21 -21
  94. package/vitepress/components/utils.ts +26 -26
  95. package/vitepress/config/index.ts +141 -141
  96. package/vitepress/configs/constants.ts +26 -26
  97. package/vitepress/configs/head.config.ts +25 -25
  98. package/vitepress/configs/index.ts +9 -9
  99. package/vitepress/configs/markdown-it.d.ts +23 -23
  100. package/vitepress/configs/markdown.config.ts +366 -366
  101. package/vitepress/configs/theme.config.ts +108 -108
  102. package/vitepress/plugins/buildProgressPlugin.ts +466 -390
  103. package/vitepress/plugins/getNoteByConfigIdPlugin.ts +107 -107
  104. package/vitepress/plugins/renameNotePlugin.ts +60 -60
  105. package/vitepress/plugins/updateConfigPlugin.ts +63 -63
  106. package/vitepress/theme/index.ts +95 -95
  107. package/vitepress/theme/styles/base.scss +50 -50
  108. package/vitepress/theme/styles/components/404.scss +31 -31
  109. package/vitepress/theme/styles/components/collapse.scss +175 -175
  110. package/vitepress/theme/styles/components/markmap.scss +101 -101
  111. package/vitepress/theme/styles/components/swiper.scss +255 -255
  112. package/vitepress/theme/styles/index.scss +25 -25
  113. package/vitepress/theme/styles/layout.scss +62 -62
  114. package/vitepress/theme/styles/utilities.scss +39 -39
  115. package/vitepress/theme/styles/vitepress-override.scss +25 -25
@@ -1,115 +1,115 @@
1
- import { onMounted, onUnmounted } from 'vue'
2
- import { createApp } from 'vue'
3
- import CodeBlockFullscreen from './CodeBlockFullscreen.vue'
4
-
5
- export function useCodeBlockFullscreen() {
6
- let fullscreenApp: any = null
7
- let fullscreenContainer: HTMLElement | null = null
8
-
9
- function addFullscreenButtons() {
10
- // 找到所有代码块
11
- const codeBlocks = document.querySelectorAll('div[class*="language-"]')
12
-
13
- codeBlocks.forEach((block) => {
14
- // 避免重复添加按钮
15
- if (block.querySelector('.fullscreen-btn')) return
16
-
17
- // 创建全屏按钮
18
- const button = document.createElement('button')
19
- button.className = 'fullscreen-btn'
20
- button.title = '全屏查看代码'
21
- button.innerHTML = `
22
- <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
23
- <path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"></path>
24
- </svg>
25
- `
26
-
27
- // 点击事件
28
- button.addEventListener('click', () => {
29
- openFullscreen(block as HTMLElement)
30
- })
31
-
32
- // 添加按钮到代码块
33
- block.appendChild(button)
34
- })
35
- }
36
-
37
- function openFullscreen(codeBlock: HTMLElement) {
38
- // 获取代码内容
39
- const pre = codeBlock.querySelector('pre')
40
- if (!pre) return
41
-
42
- const codeHtml = pre.outerHTML
43
-
44
- // 提取语言
45
- const classList = Array.from(codeBlock.classList)
46
- const languageClass = classList.find((c) => c.startsWith('language-'))
47
- const language = languageClass
48
- ? languageClass.replace('language-', '').toUpperCase()
49
- : undefined
50
-
51
- // 提取文件名(如果有)
52
- const filenameSpan = codeBlock.querySelector('.lang')
53
- const filename = filenameSpan?.textContent?.trim()
54
-
55
- // 创建全屏组件容器
56
- if (!fullscreenContainer) {
57
- fullscreenContainer = document.createElement('div')
58
- document.body.appendChild(fullscreenContainer)
59
- }
60
-
61
- // 创建 Vue 应用
62
- fullscreenApp = createApp(CodeBlockFullscreen, {
63
- isFullscreen: true,
64
- codeHtml,
65
- language,
66
- filename,
67
- 'onUpdate:isFullscreen': (value: boolean) => {
68
- if (!value) {
69
- closeFullscreen()
70
- }
71
- },
72
- })
73
-
74
- fullscreenApp.mount(fullscreenContainer)
75
- }
76
-
77
- function closeFullscreen() {
78
- if (fullscreenApp) {
79
- fullscreenApp.unmount()
80
- fullscreenApp = null
81
- }
82
- if (fullscreenContainer && fullscreenContainer.parentNode) {
83
- fullscreenContainer.parentNode.removeChild(fullscreenContainer)
84
- fullscreenContainer = null
85
- }
86
- }
87
-
88
- function cleanup() {
89
- closeFullscreen()
90
- // 移除所有全屏按钮
91
- document.querySelectorAll('.fullscreen-btn').forEach((btn) => btn.remove())
92
- }
93
-
94
- onMounted(() => {
95
- // 初始化
96
- setTimeout(() => {
97
- addFullscreenButtons()
98
- }, 100)
99
-
100
- // 监听路由变化
101
- const observer = new MutationObserver(() => {
102
- addFullscreenButtons()
103
- })
104
-
105
- observer.observe(document.body, {
106
- childList: true,
107
- subtree: true,
108
- })
109
-
110
- onUnmounted(() => {
111
- observer.disconnect()
112
- cleanup()
113
- })
114
- })
115
- }
1
+ import { onMounted, onUnmounted } from 'vue'
2
+ import { createApp } from 'vue'
3
+ import CodeBlockFullscreen from './CodeBlockFullscreen.vue'
4
+
5
+ export function useCodeBlockFullscreen() {
6
+ let fullscreenApp: any = null
7
+ let fullscreenContainer: HTMLElement | null = null
8
+
9
+ function addFullscreenButtons() {
10
+ // 找到所有代码块
11
+ const codeBlocks = document.querySelectorAll('div[class*="language-"]')
12
+
13
+ codeBlocks.forEach((block) => {
14
+ // 避免重复添加按钮
15
+ if (block.querySelector('.fullscreen-btn')) return
16
+
17
+ // 创建全屏按钮
18
+ const button = document.createElement('button')
19
+ button.className = 'fullscreen-btn'
20
+ button.title = '全屏查看代码'
21
+ button.innerHTML = `
22
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
23
+ <path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"></path>
24
+ </svg>
25
+ `
26
+
27
+ // 点击事件
28
+ button.addEventListener('click', () => {
29
+ openFullscreen(block as HTMLElement)
30
+ })
31
+
32
+ // 添加按钮到代码块
33
+ block.appendChild(button)
34
+ })
35
+ }
36
+
37
+ function openFullscreen(codeBlock: HTMLElement) {
38
+ // 获取代码内容
39
+ const pre = codeBlock.querySelector('pre')
40
+ if (!pre) return
41
+
42
+ const codeHtml = pre.outerHTML
43
+
44
+ // 提取语言
45
+ const classList = Array.from(codeBlock.classList)
46
+ const languageClass = classList.find((c) => c.startsWith('language-'))
47
+ const language = languageClass
48
+ ? languageClass.replace('language-', '').toUpperCase()
49
+ : undefined
50
+
51
+ // 提取文件名(如果有)
52
+ const filenameSpan = codeBlock.querySelector('.lang')
53
+ const filename = filenameSpan?.textContent?.trim()
54
+
55
+ // 创建全屏组件容器
56
+ if (!fullscreenContainer) {
57
+ fullscreenContainer = document.createElement('div')
58
+ document.body.appendChild(fullscreenContainer)
59
+ }
60
+
61
+ // 创建 Vue 应用
62
+ fullscreenApp = createApp(CodeBlockFullscreen, {
63
+ isFullscreen: true,
64
+ codeHtml,
65
+ language,
66
+ filename,
67
+ 'onUpdate:isFullscreen': (value: boolean) => {
68
+ if (!value) {
69
+ closeFullscreen()
70
+ }
71
+ },
72
+ })
73
+
74
+ fullscreenApp.mount(fullscreenContainer)
75
+ }
76
+
77
+ function closeFullscreen() {
78
+ if (fullscreenApp) {
79
+ fullscreenApp.unmount()
80
+ fullscreenApp = null
81
+ }
82
+ if (fullscreenContainer && fullscreenContainer.parentNode) {
83
+ fullscreenContainer.parentNode.removeChild(fullscreenContainer)
84
+ fullscreenContainer = null
85
+ }
86
+ }
87
+
88
+ function cleanup() {
89
+ closeFullscreen()
90
+ // 移除所有全屏按钮
91
+ document.querySelectorAll('.fullscreen-btn').forEach((btn) => btn.remove())
92
+ }
93
+
94
+ onMounted(() => {
95
+ // 初始化
96
+ setTimeout(() => {
97
+ addFullscreenButtons()
98
+ }, 100)
99
+
100
+ // 监听路由变化
101
+ const observer = new MutationObserver(() => {
102
+ addFullscreenButtons()
103
+ })
104
+
105
+ observer.observe(document.body, {
106
+ childList: true,
107
+ subtree: true,
108
+ })
109
+
110
+ onUnmounted(() => {
111
+ observer.disconnect()
112
+ cleanup()
113
+ })
114
+ })
115
+ }
@@ -1,64 +1,64 @@
1
- /* 代码块全屏按钮样式 */
2
- div[class*='language-'] {
3
- position: relative;
4
- }
5
-
6
- .fullscreen-btn {
7
- position: absolute;
8
- top: 8px;
9
- right: 8px;
10
- z-index: 10;
11
- display: flex;
12
- align-items: center;
13
- justify-content: center;
14
- width: 32px;
15
- height: 32px;
16
- padding: 0;
17
- border: none;
18
- background-color: var(--vp-code-block-bg);
19
- color: var(--vp-c-text-2);
20
- border-radius: 6px;
21
- cursor: pointer;
22
- opacity: 0;
23
- transition: all 0.2s;
24
- }
25
-
26
- div[class*='language-']:hover .fullscreen-btn {
27
- opacity: 1;
28
- }
29
-
30
- .fullscreen-btn:hover {
31
- background-color: var(--vp-c-default-soft);
32
- color: var(--vp-c-brand-1);
33
- transform: scale(1.05);
34
- }
35
-
36
- .fullscreen-btn:active {
37
- transform: scale(0.95);
38
- }
39
-
40
- .fullscreen-btn svg {
41
- width: 16px;
42
- height: 16px;
43
- }
44
-
45
- /* 移动端始终显示按钮 */
46
- @media (max-width: 768px) {
47
- .fullscreen-btn {
48
- opacity: 0.8;
49
- top: 6px;
50
- right: 6px;
51
- width: 28px;
52
- height: 28px;
53
- }
54
-
55
- .fullscreen-btn svg {
56
- width: 14px;
57
- height: 14px;
58
- }
59
- }
60
-
61
- div[class*='language-']:has(.copy) .fullscreen-btn {
62
- /* 代码块已经有复制按钮,需要微调位置 */
63
- right: 54px;
64
- }
1
+ /* 代码块全屏按钮样式 */
2
+ div[class*='language-'] {
3
+ position: relative;
4
+ }
5
+
6
+ .fullscreen-btn {
7
+ position: absolute;
8
+ top: 8px;
9
+ right: 8px;
10
+ z-index: 10;
11
+ display: flex;
12
+ align-items: center;
13
+ justify-content: center;
14
+ width: 32px;
15
+ height: 32px;
16
+ padding: 0;
17
+ border: none;
18
+ background-color: var(--vp-code-block-bg);
19
+ color: var(--vp-c-text-2);
20
+ border-radius: 6px;
21
+ cursor: pointer;
22
+ opacity: 0;
23
+ transition: all 0.2s;
24
+ }
25
+
26
+ div[class*='language-']:hover .fullscreen-btn {
27
+ opacity: 1;
28
+ }
29
+
30
+ .fullscreen-btn:hover {
31
+ background-color: var(--vp-c-default-soft);
32
+ color: var(--vp-c-brand-1);
33
+ transform: scale(1.05);
34
+ }
35
+
36
+ .fullscreen-btn:active {
37
+ transform: scale(0.95);
38
+ }
39
+
40
+ .fullscreen-btn svg {
41
+ width: 16px;
42
+ height: 16px;
43
+ }
44
+
45
+ /* 移动端始终显示按钮 */
46
+ @media (max-width: 768px) {
47
+ .fullscreen-btn {
48
+ opacity: 0.8;
49
+ top: 6px;
50
+ right: 6px;
51
+ width: 28px;
52
+ height: 28px;
53
+ }
54
+
55
+ .fullscreen-btn svg {
56
+ width: 14px;
57
+ height: 14px;
58
+ }
59
+ }
60
+
61
+ div[class*='language-']:has(.copy) .fullscreen-btn {
62
+ /* 代码块已经有复制按钮,需要微调位置 */
63
+ right: 54px;
64
+ }
@@ -1,32 +1,32 @@
1
- /* #region:same as vitepress theme */
2
- .h2 {
3
- margin: 48px 0 16px;
4
- border-top: 1px solid var(--vp-c-divider);
5
- padding-top: 24px;
6
- letter-spacing: -0.02em;
7
- line-height: 32px;
8
- font-size: 1.2rem;
9
- text-align: center;
10
- }
11
-
12
- /* #endregion:same as vitepress theme */
13
-
14
- .discussionsLink {
15
- display: inline-flex;
16
- align-items: center;
17
- gap: 0.5em;
18
- color: var(--vp-c-brand-1);
19
- text-decoration: none;
20
- opacity: 0.9;
21
- transition: opacity 0.25s;
22
-
23
- &:hover {
24
- opacity: 0.5;
25
- }
26
- }
27
-
28
- .githubIcon {
29
- width: 1em;
30
- height: 1em;
31
- flex-shrink: 0;
32
- }
1
+ /* #region:same as vitepress theme */
2
+ .h2 {
3
+ margin: 48px 0 16px;
4
+ border-top: 1px solid var(--vp-c-divider);
5
+ padding-top: 24px;
6
+ letter-spacing: -0.02em;
7
+ line-height: 32px;
8
+ font-size: 1.2rem;
9
+ text-align: center;
10
+ }
11
+
12
+ /* #endregion:same as vitepress theme */
13
+
14
+ .discussionsLink {
15
+ display: inline-flex;
16
+ align-items: center;
17
+ gap: 0.5em;
18
+ color: var(--vp-c-brand-1);
19
+ text-decoration: none;
20
+ opacity: 0.9;
21
+ transition: opacity 0.25s;
22
+
23
+ &:hover {
24
+ opacity: 0.5;
25
+ }
26
+ }
27
+
28
+ .githubIcon {
29
+ width: 1em;
30
+ height: 1em;
31
+ flex-shrink: 0;
32
+ }