docmk 1.0.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 (70) hide show
  1. package/.claude/skills/pdf/SKILL.md +89 -0
  2. package/.claude/skills/web-scraping/SKILL.md +78 -0
  3. package/CLAUDE.md +90 -0
  4. package/bin/docmk.js +3 -0
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.js +636 -0
  7. package/dist/index.js.map +1 -0
  8. package/final-site/assets/main-B4orIFxK.css +1 -0
  9. package/final-site/assets/main-CSoKXua6.js +25 -0
  10. package/final-site/favicon.svg +4 -0
  11. package/final-site/index.html +26 -0
  12. package/final-site/robots.txt +4 -0
  13. package/final-site/sitemap.xml +14 -0
  14. package/my-docs/api/README.md +152 -0
  15. package/my-docs/api/advanced.md +260 -0
  16. package/my-docs/getting-started/README.md +24 -0
  17. package/my-docs/tutorials/README.md +272 -0
  18. package/my-docs/tutorials/customization.md +492 -0
  19. package/package.json +59 -0
  20. package/postcss.config.js +6 -0
  21. package/site/assets/main-BZUsYUCF.css +1 -0
  22. package/site/assets/main-q6laQtCD.js +114 -0
  23. package/site/favicon.svg +4 -0
  24. package/site/index.html +23 -0
  25. package/site/robots.txt +4 -0
  26. package/site/sitemap.xml +34 -0
  27. package/site-output/assets/main-B4orIFxK.css +1 -0
  28. package/site-output/assets/main-CSoKXua6.js +25 -0
  29. package/site-output/favicon.svg +4 -0
  30. package/site-output/index.html +26 -0
  31. package/site-output/robots.txt +4 -0
  32. package/site-output/sitemap.xml +14 -0
  33. package/src/builder/index.ts +189 -0
  34. package/src/builder/vite-dev.ts +117 -0
  35. package/src/cli/commands/build.ts +48 -0
  36. package/src/cli/commands/dev.ts +53 -0
  37. package/src/cli/commands/preview.ts +57 -0
  38. package/src/cli/index.ts +42 -0
  39. package/src/client/App.vue +15 -0
  40. package/src/client/components/SearchBox.vue +204 -0
  41. package/src/client/components/Sidebar.vue +18 -0
  42. package/src/client/components/SidebarItem.vue +108 -0
  43. package/src/client/index.html +21 -0
  44. package/src/client/layouts/AppLayout.vue +99 -0
  45. package/src/client/lib/utils.ts +6 -0
  46. package/src/client/main.ts +42 -0
  47. package/src/client/pages/Home.vue +279 -0
  48. package/src/client/pages/SkillPage.vue +565 -0
  49. package/src/client/router.ts +16 -0
  50. package/src/client/styles/global.css +92 -0
  51. package/src/client/utils/routes.ts +69 -0
  52. package/src/parser/index.ts +253 -0
  53. package/src/scanner/index.ts +127 -0
  54. package/src/types/index.ts +45 -0
  55. package/tailwind.config.js +65 -0
  56. package/test-build/assets/main-C2ARPC0e.css +1 -0
  57. package/test-build/assets/main-CHIQpV3B.js +25 -0
  58. package/test-build/favicon.svg +4 -0
  59. package/test-build/index.html +47 -0
  60. package/test-build/robots.txt +4 -0
  61. package/test-build/sitemap.xml +19 -0
  62. package/test-dist/assets/main-B4orIFxK.css +1 -0
  63. package/test-dist/assets/main-CSoKXua6.js +25 -0
  64. package/test-dist/favicon.svg +4 -0
  65. package/test-dist/index.html +26 -0
  66. package/test-dist/robots.txt +4 -0
  67. package/test-dist/sitemap.xml +14 -0
  68. package/tsconfig.json +30 -0
  69. package/tsup.config.ts +13 -0
  70. package/vite.config.ts +21 -0
@@ -0,0 +1,279 @@
1
+ <template>
2
+ <div class="home-page">
3
+ <div class="hero-section">
4
+ <h1 class="hero-title">{{ config?.siteConfig.title || 'Skills Documentation' }}</h1>
5
+ <p class="hero-description">
6
+ {{ config?.siteConfig.description || 'Explore your skills and documentation' }}
7
+ </p>
8
+ </div>
9
+
10
+ <div v-if="config" class="content-overview">
11
+ <div class="stats-grid">
12
+ <div class="stat-card">
13
+ <div class="stat-number">{{ config.directories.length }}</div>
14
+ <div class="stat-label">Skill Categories</div>
15
+ </div>
16
+ <div class="stat-card">
17
+ <div class="stat-number">{{ config.files.length }}</div>
18
+ <div class="stat-label">Documentation Files</div>
19
+ </div>
20
+ <div class="stat-card">
21
+ <div class="stat-number">{{ totalWords }}</div>
22
+ <div class="stat-label">Total Words</div>
23
+ </div>
24
+ </div>
25
+
26
+ <div class="recent-section">
27
+ <h2>Recently Updated</h2>
28
+ <div class="recent-files">
29
+ <router-link
30
+ v-for="file in recentFiles"
31
+ :key="file.path"
32
+ :to="getFileRoute(file)"
33
+ class="recent-file-card"
34
+ >
35
+ <div class="file-title">{{ file.title }}</div>
36
+ <div v-if="file.description" class="file-description">
37
+ {{ file.description }}
38
+ </div>
39
+ <div class="file-meta">
40
+ {{ formatDate(file.lastModified) }}
41
+ </div>
42
+ </router-link>
43
+ </div>
44
+ </div>
45
+
46
+ </div>
47
+ </div>
48
+ </template>
49
+
50
+ <script setup lang="ts">
51
+ import { computed } from 'vue'
52
+ import { DocGenConfig, SkillFile, SkillDirectory } from '../../types/index.js'
53
+ import { getFileRoute } from '../utils/routes.js'
54
+
55
+ const props = defineProps<{
56
+ config: DocGenConfig
57
+ }>()
58
+
59
+ const totalWords = computed(() => {
60
+ return props.config.files.reduce((total, file) => {
61
+ return total + (file.content?.split(/\s+/).length || 0)
62
+ }, 0)
63
+ })
64
+
65
+ const recentFiles = computed(() => {
66
+ return [...props.config.files]
67
+ .sort((a, b) => b.lastModified - a.lastModified)
68
+ .slice(0, 6)
69
+ })
70
+
71
+ // Route generation moved to utils/routes.ts
72
+
73
+ function formatDirName(name: string): string {
74
+ return name.split('-').map(word =>
75
+ word.charAt(0).toUpperCase() + word.slice(1)
76
+ ).join(' ')
77
+ }
78
+
79
+ function formatDate(timestamp: number): string {
80
+ return new Date(timestamp).toLocaleDateString('en-US', {
81
+ year: 'numeric',
82
+ month: 'short',
83
+ day: 'numeric'
84
+ })
85
+ }
86
+
87
+ function getFileCount(directory: SkillDirectory): number {
88
+ let count = 0
89
+
90
+ function countFiles(items: (SkillDirectory | SkillFile)[]) {
91
+ for (const item of items) {
92
+ if ('content' in item) {
93
+ count++
94
+ } else {
95
+ if (item.skillFile) count++
96
+ countFiles(item.children)
97
+ }
98
+ }
99
+ }
100
+
101
+ if (directory.skillFile) count++
102
+ countFiles(directory.children)
103
+
104
+ return count
105
+ }
106
+ </script>
107
+
108
+ <style scoped>
109
+ .home-page {
110
+ max-width: 1000px;
111
+ margin: 0 auto;
112
+ }
113
+
114
+ .hero-section {
115
+ text-align: center;
116
+ padding: 3rem 0;
117
+ margin-bottom: 3rem;
118
+ }
119
+
120
+ .hero-title {
121
+ font-size: 3rem;
122
+ font-weight: 700;
123
+ color: #2c3e50;
124
+ margin-bottom: 1rem;
125
+ }
126
+
127
+ .hero-description {
128
+ font-size: 1.2rem;
129
+ color: #666;
130
+ max-width: 600px;
131
+ margin: 0 auto;
132
+ line-height: 1.6;
133
+ }
134
+
135
+ .content-overview {
136
+ space-y: 3rem;
137
+ }
138
+
139
+ .stats-grid {
140
+ display: grid;
141
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
142
+ gap: 1.5rem;
143
+ margin-bottom: 3rem;
144
+ }
145
+
146
+ .stat-card {
147
+ background: linear-gradient(135deg, #3b82f6 0%, #1e40af 100%);
148
+ color: white;
149
+ padding: 2rem;
150
+ border-radius: 12px;
151
+ text-align: center;
152
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
153
+ }
154
+
155
+ .stat-number {
156
+ font-size: 2.5rem;
157
+ font-weight: 700;
158
+ margin-bottom: 0.5rem;
159
+ }
160
+
161
+ .stat-label {
162
+ font-size: 1rem;
163
+ opacity: 0.9;
164
+ }
165
+
166
+ .recent-section,
167
+ .navigation-section {
168
+ margin-bottom: 3rem;
169
+ }
170
+
171
+ .recent-section h2,
172
+ .navigation-section h2 {
173
+ font-size: 1.8rem;
174
+ font-weight: 600;
175
+ color: #2c3e50;
176
+ margin-bottom: 1.5rem;
177
+ }
178
+
179
+ .recent-files {
180
+ display: grid;
181
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
182
+ gap: 1rem;
183
+ }
184
+
185
+ .recent-file-card {
186
+ background: white;
187
+ border: 1px solid #e1e5e9;
188
+ border-radius: 8px;
189
+ padding: 1.5rem;
190
+ text-decoration: none;
191
+ color: inherit;
192
+ transition: all 0.2s ease;
193
+ }
194
+
195
+ .recent-file-card:hover {
196
+ transform: translateY(-2px);
197
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
198
+ border-color: #3182ce;
199
+ }
200
+
201
+ .file-title {
202
+ font-weight: 600;
203
+ color: #2c3e50;
204
+ margin-bottom: 0.5rem;
205
+ }
206
+
207
+ .file-description {
208
+ color: #666;
209
+ font-size: 0.9rem;
210
+ margin-bottom: 1rem;
211
+ line-height: 1.4;
212
+ }
213
+
214
+ .file-meta {
215
+ color: #999;
216
+ font-size: 0.8rem;
217
+ }
218
+
219
+ .skill-grid {
220
+ display: grid;
221
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
222
+ gap: 1.5rem;
223
+ }
224
+
225
+ .skill-card {
226
+ background: white;
227
+ border: 1px solid #e1e5e9;
228
+ border-radius: 8px;
229
+ padding: 1.5rem;
230
+ text-decoration: none;
231
+ color: inherit;
232
+ transition: all 0.2s ease;
233
+ }
234
+
235
+ .skill-card:hover {
236
+ transform: translateY(-2px);
237
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
238
+ border-color: #3182ce;
239
+ }
240
+
241
+ .skill-name {
242
+ font-weight: 600;
243
+ color: #2c3e50;
244
+ font-size: 1.1rem;
245
+ margin-bottom: 0.5rem;
246
+ }
247
+
248
+ .skill-description {
249
+ color: #666;
250
+ font-size: 0.9rem;
251
+ line-height: 1.4;
252
+ margin-bottom: 1rem;
253
+ }
254
+
255
+ .skill-files-count {
256
+ color: #3182ce;
257
+ font-size: 0.8rem;
258
+ font-weight: 500;
259
+ }
260
+
261
+ @media (max-width: 768px) {
262
+ .hero-title {
263
+ font-size: 2rem;
264
+ }
265
+
266
+ .hero-description {
267
+ font-size: 1rem;
268
+ }
269
+
270
+ .stats-grid {
271
+ grid-template-columns: 1fr;
272
+ }
273
+
274
+ .recent-files,
275
+ .skill-grid {
276
+ grid-template-columns: 1fr;
277
+ }
278
+ }
279
+ </style>