markopress 0.0.2 → 0.0.4

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 (288) hide show
  1. package/dist/build/index.d.ts +0 -1
  2. package/dist/build/index.js +1 -1627
  3. package/dist/build/types.d.ts +0 -1
  4. package/dist/build/types.js +1 -5
  5. package/dist/build/vite-markdown-plugin.d.ts +0 -1
  6. package/dist/build/vite-markdown-plugin.js +1 -147
  7. package/dist/cli/index.d.ts +0 -1
  8. package/dist/cli/index.js +1 -74
  9. package/dist/config/app-root.d.ts +0 -1
  10. package/dist/config/app-root.js +1 -24
  11. package/dist/config/index.d.ts +0 -1
  12. package/dist/config/index.js +1 -6
  13. package/dist/config/loader.d.ts +0 -1
  14. package/dist/config/loader.js +1 -188
  15. package/dist/config/types.d.ts +0 -1
  16. package/dist/config/types.js +1 -5
  17. package/dist/config/validation.d.ts +0 -1
  18. package/dist/config/validation.js +1 -139
  19. package/dist/content/index.d.ts +0 -1
  20. package/dist/content/index.js +1 -6
  21. package/dist/content/registry.d.ts +0 -1
  22. package/dist/content/registry.js +1 -45
  23. package/dist/content/types.d.ts +0 -1
  24. package/dist/content/types.js +1 -5
  25. package/dist/dev/index.d.ts +0 -1
  26. package/dist/dev/index.js +1 -93
  27. package/dist/index.d.ts +0 -1
  28. package/dist/index.js +1 -17
  29. package/dist/markdown/base-path-plugin.d.ts +16 -0
  30. package/dist/markdown/base-path-plugin.js +1 -0
  31. package/dist/markdown/code.d.ts +0 -1
  32. package/dist/markdown/code.js +1 -305
  33. package/dist/markdown/containers.d.ts +0 -1
  34. package/dist/markdown/containers.js +1 -143
  35. package/dist/markdown/includes.d.ts +0 -1
  36. package/dist/markdown/includes.js +1 -9
  37. package/dist/markdown/index.d.ts +0 -1
  38. package/dist/markdown/index.js +1 -8
  39. package/dist/markdown/loader.d.ts +0 -1
  40. package/dist/markdown/loader.js +1 -325
  41. package/dist/markdown/md-link-plugin.d.ts +14 -0
  42. package/dist/markdown/md-link-plugin.js +1 -0
  43. package/dist/markdown/preserve-tags.d.ts +0 -1
  44. package/dist/markdown/preserve-tags.js +1 -233
  45. package/dist/markdown/renderer.d.ts +0 -1
  46. package/dist/markdown/renderer.js +1 -146
  47. package/dist/markdown/tag-validator.d.ts +0 -1
  48. package/dist/markdown/tag-validator.js +1 -118
  49. package/dist/markdown/types.d.ts +2 -1
  50. package/dist/markdown/types.js +1 -5
  51. package/dist/plugin/compat.d.ts +0 -1
  52. package/dist/plugin/compat.js +1 -78
  53. package/dist/plugin/context.d.ts +0 -1
  54. package/dist/plugin/context.js +1 -103
  55. package/dist/plugin/index.d.ts +0 -1
  56. package/dist/plugin/index.js +1 -6
  57. package/dist/plugin/manager.d.ts +0 -1
  58. package/dist/plugin/manager.js +1 -385
  59. package/dist/plugin/types.d.ts +1 -1
  60. package/dist/plugin/types.js +1 -5
  61. package/dist/plugins/blog-index/index.d.ts +0 -1
  62. package/dist/plugins/blog-index/index.js +1 -158
  63. package/dist/plugins/sidenav/index.d.ts +0 -1
  64. package/dist/plugins/sidenav/index.js +1 -86
  65. package/dist/plugins/toc/index.d.ts +0 -1
  66. package/dist/plugins/toc/index.js +1 -79
  67. package/dist/preview/index.d.ts +0 -1
  68. package/dist/preview/index.js +1 -25
  69. package/dist/theme/default/design-systems/default.d.ts +0 -1
  70. package/dist/theme/default/design-systems/default.js +1 -289
  71. package/dist/theme/default/design-systems/docusaurus.d.ts +0 -1
  72. package/dist/theme/default/design-systems/docusaurus.js +1 -299
  73. package/dist/theme/default/design-systems/index.d.ts +0 -1
  74. package/dist/theme/default/design-systems/index.js +1 -54
  75. package/dist/theme/default/design-systems/rspress.d.ts +0 -1
  76. package/dist/theme/default/design-systems/rspress.js +1 -299
  77. package/dist/theme/default/design-systems/types.d.ts +0 -1
  78. package/dist/theme/default/design-systems/types.js +1 -6
  79. package/dist/theme/default/design-systems/vitepress.d.ts +0 -1
  80. package/dist/theme/default/design-systems/vitepress.js +1 -299
  81. package/dist/theme/default/index.d.ts +0 -1
  82. package/dist/theme/default/index.js +1 -44
  83. package/dist/theme/default/theme.d.ts +0 -1
  84. package/dist/theme/default/theme.js +1 -58
  85. package/dist/theme/index.d.ts +0 -1
  86. package/dist/theme/index.js +1 -6
  87. package/dist/theme/loader.d.ts +0 -1
  88. package/dist/theme/loader.js +1 -125
  89. package/dist/theme/types.d.ts +1 -1
  90. package/dist/theme/types.js +1 -5
  91. package/dist/vite/index.d.ts +0 -1
  92. package/dist/vite/index.js +1 -6
  93. package/dist/vite/markdownPlugin.d.ts +0 -1
  94. package/dist/vite/markdownPlugin.js +1 -111
  95. package/dist/vite/plugin.d.ts +0 -1
  96. package/dist/vite/plugin.js +1 -94
  97. package/package.json +3 -2
  98. package/src/theme/default/layouts/blog.marko +1 -1
  99. package/src/theme/default/layouts/default.marko +5 -5
  100. package/src/theme/default/layouts/docs.marko +6 -6
  101. package/src/theme/default/layouts/page.marko +1 -1
  102. package/templates/catch-all-handler.js.template +2 -17
  103. package/dist/build/index.d.ts.map +0 -1
  104. package/dist/build/index.js.map +0 -1
  105. package/dist/build/manifest-generator.d.ts +0 -34
  106. package/dist/build/manifest-generator.d.ts.map +0 -1
  107. package/dist/build/manifest-generator.js +0 -86
  108. package/dist/build/manifest-generator.js.map +0 -1
  109. package/dist/build/security.test.d.ts +0 -6
  110. package/dist/build/security.test.d.ts.map +0 -1
  111. package/dist/build/security.test.js +0 -88
  112. package/dist/build/security.test.js.map +0 -1
  113. package/dist/build/types.d.ts.map +0 -1
  114. package/dist/build/types.js.map +0 -1
  115. package/dist/build/vite-config.test.d.ts +0 -2
  116. package/dist/build/vite-config.test.d.ts.map +0 -1
  117. package/dist/build/vite-config.test.js +0 -53
  118. package/dist/build/vite-config.test.js.map +0 -1
  119. package/dist/build/vite-markdown-plugin.d.ts.map +0 -1
  120. package/dist/build/vite-markdown-plugin.js.map +0 -1
  121. package/dist/build/vite-markdown-plugin.test.d.ts +0 -2
  122. package/dist/build/vite-markdown-plugin.test.d.ts.map +0 -1
  123. package/dist/build/vite-markdown-plugin.test.js +0 -41
  124. package/dist/build/vite-markdown-plugin.test.js.map +0 -1
  125. package/dist/cli/index.d.ts.map +0 -1
  126. package/dist/cli/index.js.map +0 -1
  127. package/dist/config/app-root.d.ts.map +0 -1
  128. package/dist/config/app-root.js.map +0 -1
  129. package/dist/config/app-root.test.d.ts +0 -2
  130. package/dist/config/app-root.test.d.ts.map +0 -1
  131. package/dist/config/app-root.test.js +0 -71
  132. package/dist/config/app-root.test.js.map +0 -1
  133. package/dist/config/index.d.ts.map +0 -1
  134. package/dist/config/index.js.map +0 -1
  135. package/dist/config/loader.d.ts.map +0 -1
  136. package/dist/config/loader.js.map +0 -1
  137. package/dist/config/loader.test.d.ts +0 -2
  138. package/dist/config/loader.test.d.ts.map +0 -1
  139. package/dist/config/loader.test.js +0 -24
  140. package/dist/config/loader.test.js.map +0 -1
  141. package/dist/config/types.d.ts.map +0 -1
  142. package/dist/config/types.js.map +0 -1
  143. package/dist/config/validation.d.ts.map +0 -1
  144. package/dist/config/validation.js.map +0 -1
  145. package/dist/content/index.d.ts.map +0 -1
  146. package/dist/content/index.js.map +0 -1
  147. package/dist/content/registry.d.ts.map +0 -1
  148. package/dist/content/registry.js.map +0 -1
  149. package/dist/content/scanner.d.ts +0 -9
  150. package/dist/content/scanner.d.ts.map +0 -1
  151. package/dist/content/scanner.js +0 -115
  152. package/dist/content/scanner.js.map +0 -1
  153. package/dist/content/types.d.ts.map +0 -1
  154. package/dist/content/types.js.map +0 -1
  155. package/dist/dev/index.d.ts.map +0 -1
  156. package/dist/dev/index.js.map +0 -1
  157. package/dist/index.d.ts.map +0 -1
  158. package/dist/index.js.map +0 -1
  159. package/dist/markdown/code.d.ts.map +0 -1
  160. package/dist/markdown/code.js.map +0 -1
  161. package/dist/markdown/containers.d.ts.map +0 -1
  162. package/dist/markdown/containers.js.map +0 -1
  163. package/dist/markdown/includes.d.ts.map +0 -1
  164. package/dist/markdown/includes.js.map +0 -1
  165. package/dist/markdown/index.d.ts.map +0 -1
  166. package/dist/markdown/index.js.map +0 -1
  167. package/dist/markdown/loader.d.ts.map +0 -1
  168. package/dist/markdown/loader.js.map +0 -1
  169. package/dist/markdown/preserve-tags.d.ts.map +0 -1
  170. package/dist/markdown/preserve-tags.js.map +0 -1
  171. package/dist/markdown/renderer.d.ts.map +0 -1
  172. package/dist/markdown/renderer.js.map +0 -1
  173. package/dist/markdown/tag-validator.d.ts.map +0 -1
  174. package/dist/markdown/tag-validator.js.map +0 -1
  175. package/dist/markdown/types.d.ts.map +0 -1
  176. package/dist/markdown/types.js.map +0 -1
  177. package/dist/plugin/compat.d.ts.map +0 -1
  178. package/dist/plugin/compat.js.map +0 -1
  179. package/dist/plugin/context.d.ts.map +0 -1
  180. package/dist/plugin/context.js.map +0 -1
  181. package/dist/plugin/index.d.ts.map +0 -1
  182. package/dist/plugin/index.js.map +0 -1
  183. package/dist/plugin/manager.d.ts.map +0 -1
  184. package/dist/plugin/manager.js.map +0 -1
  185. package/dist/plugin/types.d.ts.map +0 -1
  186. package/dist/plugin/types.js.map +0 -1
  187. package/dist/plugins/blog-index/index.d.ts.map +0 -1
  188. package/dist/plugins/blog-index/index.js.map +0 -1
  189. package/dist/plugins/sidenav/index.d.ts.map +0 -1
  190. package/dist/plugins/sidenav/index.js.map +0 -1
  191. package/dist/plugins/toc/index.d.ts.map +0 -1
  192. package/dist/plugins/toc/index.js.map +0 -1
  193. package/dist/preview/index.d.ts.map +0 -1
  194. package/dist/preview/index.js.map +0 -1
  195. package/dist/theme/default/build/generate-all.d.ts +0 -9
  196. package/dist/theme/default/build/generate-all.d.ts.map +0 -1
  197. package/dist/theme/default/build/generate-all.js +0 -85
  198. package/dist/theme/default/build/generate-all.js.map +0 -1
  199. package/dist/theme/default/build/generate-css.d.ts +0 -19
  200. package/dist/theme/default/build/generate-css.d.ts.map +0 -1
  201. package/dist/theme/default/build/generate-css.js +0 -199
  202. package/dist/theme/default/build/generate-css.js.map +0 -1
  203. package/dist/theme/default/build/index.d.ts +0 -5
  204. package/dist/theme/default/build/index.d.ts.map +0 -1
  205. package/dist/theme/default/build/index.js +0 -5
  206. package/dist/theme/default/build/index.js.map +0 -1
  207. package/dist/theme/default/design-systems/default.d.ts.map +0 -1
  208. package/dist/theme/default/design-systems/default.js.map +0 -1
  209. package/dist/theme/default/design-systems/docusaurus.d.ts.map +0 -1
  210. package/dist/theme/default/design-systems/docusaurus.js.map +0 -1
  211. package/dist/theme/default/design-systems/index.d.ts.map +0 -1
  212. package/dist/theme/default/design-systems/index.js.map +0 -1
  213. package/dist/theme/default/design-systems/rspress.d.ts.map +0 -1
  214. package/dist/theme/default/design-systems/rspress.js.map +0 -1
  215. package/dist/theme/default/design-systems/types.d.ts.map +0 -1
  216. package/dist/theme/default/design-systems/types.js.map +0 -1
  217. package/dist/theme/default/design-systems/vitepress.d.ts.map +0 -1
  218. package/dist/theme/default/design-systems/vitepress.js.map +0 -1
  219. package/dist/theme/default/index.d.ts.map +0 -1
  220. package/dist/theme/default/index.js.map +0 -1
  221. package/dist/theme/default/theme.d.ts.map +0 -1
  222. package/dist/theme/default/theme.js.map +0 -1
  223. package/dist/theme/index.d.ts.map +0 -1
  224. package/dist/theme/index.js.map +0 -1
  225. package/dist/theme/loader.d.ts.map +0 -1
  226. package/dist/theme/loader.js.map +0 -1
  227. package/dist/theme/types.d.ts.map +0 -1
  228. package/dist/theme/types.js.map +0 -1
  229. package/dist/vite/index.d.ts.map +0 -1
  230. package/dist/vite/index.js.map +0 -1
  231. package/dist/vite/markdownPlugin.d.ts.map +0 -1
  232. package/dist/vite/markdownPlugin.js.map +0 -1
  233. package/dist/vite/plugin.d.ts.map +0 -1
  234. package/dist/vite/plugin.js.map +0 -1
  235. package/src/theme/default/build/generate-all.ts +0 -99
  236. package/src/theme/default/build/generate-css.ts +0 -234
  237. package/src/theme/default/build/index.ts +0 -5
  238. package/src/theme/default/components/doc-footer.marko +0 -180
  239. package/src/theme/default/components/footer.marko +0 -32
  240. package/src/theme/default/components/header.marko +0 -49
  241. package/src/theme/default/components/nav-bar.marko +0 -191
  242. package/src/theme/default/components/page-header.marko +0 -20
  243. package/src/theme/default/components/reading-progress.marko +0 -36
  244. package/src/theme/default/components/search.marko +0 -239
  245. package/src/theme/default/components/sidebar.marko +0 -211
  246. package/src/theme/default/components/site-footer.marko +0 -211
  247. package/src/theme/default/components/skip-link.marko +0 -49
  248. package/src/theme/default/components/theme/theme-aside-bottom.marko +0 -1
  249. package/src/theme/default/components/theme/theme-aside-top.marko +0 -1
  250. package/src/theme/default/components/theme/theme-body-bottom.marko +0 -1
  251. package/src/theme/default/components/theme/theme-body-top.marko +0 -1
  252. package/src/theme/default/components/theme/theme-doc-bottom.marko +0 -1
  253. package/src/theme/default/components/theme/theme-doc-footer-after.marko +0 -1
  254. package/src/theme/default/components/theme/theme-doc-footer-before.marko +0 -1
  255. package/src/theme/default/components/theme/theme-doc-top.marko +0 -1
  256. package/src/theme/default/components/theme/theme-head-bottom.marko +0 -1
  257. package/src/theme/default/components/theme/theme-head-top.marko +0 -1
  258. package/src/theme/default/components/theme/theme-home-features-after.marko +0 -1
  259. package/src/theme/default/components/theme/theme-home-hero-after.marko +0 -1
  260. package/src/theme/default/components/theme/theme-home-hero-before.marko +0 -1
  261. package/src/theme/default/components/theme/theme-navbar-center.marko +0 -5
  262. package/src/theme/default/components/theme/theme-navbar-end.marko +0 -30
  263. package/src/theme/default/components/theme/theme-navbar-start.marko +0 -1
  264. package/src/theme/default/components/theme/theme-page-bottom.marko +0 -1
  265. package/src/theme/default/components/theme/theme-page-top.marko +0 -1
  266. package/src/theme/default/components/theme/theme-sidebar-bottom.marko +0 -1
  267. package/src/theme/default/components/theme/theme-sidebar-top.marko +0 -1
  268. package/src/theme/default/components/theme/theme-toc-item.marko +0 -1
  269. package/src/theme/default/components/theme-toggle.marko +0 -122
  270. package/src/theme/default/components/toc.marko +0 -140
  271. package/src/theme/default/design-systems/default.ts +0 -331
  272. package/src/theme/default/design-systems/docusaurus.ts +0 -341
  273. package/src/theme/default/design-systems/index.ts +0 -67
  274. package/src/theme/default/design-systems/rspress.ts +0 -341
  275. package/src/theme/default/design-systems/types.ts +0 -296
  276. package/src/theme/default/design-systems/vitepress.ts +0 -341
  277. package/src/theme/default/index.ts +0 -107
  278. package/src/theme/default/theme.ts +0 -83
  279. package/templates/example-tags/README.md +0 -212
  280. package/templates/example-tags/alert-box.marko +0 -98
  281. package/templates/example-tags/button-primary.marko +0 -28
  282. package/templates/example-tags/button-secondary.marko +0 -28
  283. package/templates/example-tags/button.marko +0 -6
  284. package/templates/example-tags/card-body.marko +0 -8
  285. package/templates/example-tags/card-footer.marko +0 -7
  286. package/templates/example-tags/card-header.marko +0 -7
  287. package/templates/example-tags/card.marko +0 -20
  288. package/templates/example-tags/icon.marko +0 -149
@@ -1,158 +1 @@
1
- /**
2
- * Blog Index Plugin for MarkoPress
3
- *
4
- * Generates a blog index page listing all blog posts
5
- */
6
- // Store data for extendRoutes to access
7
- let blogPostsData = null;
8
- let blogConfigData = null;
9
- /**
10
- * Transform blog module files to blog post data
11
- */
12
- function transformBlogPosts(module) {
13
- return [...module.files]
14
- .sort((a, b) => {
15
- const dateA = new Date(a.processed.frontmatter.date || 0);
16
- const dateB = new Date(b.processed.frontmatter.date || 0);
17
- return dateB.getTime() - dateA.getTime();
18
- })
19
- .map(post => ({
20
- title: post.processed.frontmatter.title,
21
- description: post.processed.frontmatter.description,
22
- date: post.processed.frontmatter.date,
23
- author: post.processed.frontmatter.author,
24
- excerpt: post.processed.excerpt,
25
- link: post.urlPath,
26
- }));
27
- }
28
- /**
29
- * Create blog index plugin
30
- */
31
- export default function blogIndexPlugin(options = {}) {
32
- const { postsPerPage = 10, showExcerpts = true, showDates = true, showAuthors = true, path = '/blog', } = options;
33
- const config = { postsPerPage, showExcerpts, showDates, showAuthors };
34
- return {
35
- name: 'blog-index',
36
- modules: ['blog'],
37
- async enhanceModules(modules) {
38
- const blogModule = modules.find(m => m.id === 'blog');
39
- if (!blogModule) {
40
- return;
41
- }
42
- // Transform to blog post data
43
- const blogPosts = transformBlogPosts(blogModule);
44
- // Store for extendRoutes to use
45
- blogPostsData = blogPosts;
46
- blogConfigData = config;
47
- // Add enhancement with sorted posts
48
- blogModule.enhance('blogPosts', blogPosts);
49
- blogModule.enhance('blogConfig', config);
50
- blogModule.enhance('blogIndexPath', path);
51
- },
52
- async extendRoutes(routes) {
53
- if (!blogPostsData || !blogConfigData)
54
- return routes;
55
- // Add blog index route
56
- routes[path] = {
57
- path,
58
- component: generateBlogIndexComponent(),
59
- meta: {
60
- blogPosts: blogPostsData,
61
- blogConfig: blogConfigData,
62
- },
63
- };
64
- return routes;
65
- },
66
- };
67
- }
68
- /**
69
- * Generate blog index Marko component
70
- */
71
- function generateBlogIndexComponent() {
72
- return `<div class="blog-index">
73
- <h1>Blog</h1>
74
- <div class="blog-posts">
75
- <for|post| of=$global.blogPosts>
76
- <article class="blog-post-card">
77
- <h2>
78
- <a href=post.link>\${post.title}</a>
79
- </h2>
80
- <if=post.date>
81
- <div class="post-date">
82
- <small>\${new Date(post.date).toLocaleDateString()}</small>
83
- </div>
84
- </if>
85
- <if=post.author>
86
- <div class="post-author">
87
- <small>by \${post.author}</small>
88
- </div>
89
- </if>
90
- <if=post.excerpt>
91
- <div class="post-excerpt">
92
- <p>\${post.excerpt}</p>
93
- </div>
94
- </if>
95
- <a href=post.link class="read-more">Read more →</a>
96
- </article>
97
- </for>
98
- </div>
99
- </div>
100
-
101
- <style>
102
- .blog-index {
103
- max-width: var(--content-max-width, 960px);
104
- margin: 0 auto;
105
- padding: var(--content-padding, 2rem 1.5rem);
106
- }
107
-
108
- .blog-posts {
109
- display: flex;
110
- flex-direction: column;
111
- gap: 2rem;
112
- }
113
-
114
- .blog-post-card {
115
- border: 1px solid var(--border-default, #e5e7eb);
116
- border-radius: var(--radius-lg, 0.5rem);
117
- padding: 1.5rem;
118
- background: var(--bg-default, #ffffff);
119
- }
120
-
121
- .blog-post-card h2 {
122
- margin: 0 0 0.5rem 0;
123
- }
124
-
125
- .blog-post-card h2 a {
126
- color: var(--text-1, #111827);
127
- text-decoration: none;
128
- }
129
-
130
- .blog-post-card h2 a:hover {
131
- color: var(--color-primary-2, #3b82f6);
132
- }
133
-
134
- .post-date,
135
- .post-author {
136
- color: var(--text-3, #6b7280);
137
- margin-bottom: 0.5rem;
138
- }
139
-
140
- .post-excerpt {
141
- margin: 1rem 0;
142
- color: var(--text-2, #4b5563);
143
- }
144
-
145
- .read-more {
146
- display: inline-block;
147
- color: var(--color-primary-2, #3b82f6);
148
- text-decoration: none;
149
- font-weight: 500;
150
- }
151
-
152
- .read-more:hover {
153
- text-decoration: underline;
154
- }
155
- </style>
156
- `;
157
- }
158
- //# sourceMappingURL=index.js.map
1
+ let n=null,e=null;export default function t(t={}){const{postsPerPage:o=10,showExcerpts:a=!0,showDates:r=!0,showAuthors:s=!0,path:l="/blog"}=t,c={postsPerPage:o,showExcerpts:a,showDates:r,showAuthors:s};return{name:"blog-index",modules:["blog"],async enhanceModules(t){const o=t.find(n=>"blog"===n.id);if(!o)return;const a=[...o.files].sort((n,e)=>{const t=new Date(n.processed.frontmatter.date||0);return new Date(e.processed.frontmatter.date||0).getTime()-t.getTime()}).map(n=>({title:n.processed.frontmatter.title,description:n.processed.frontmatter.description,date:n.processed.frontmatter.date,author:n.processed.frontmatter.author,excerpt:n.processed.excerpt,link:n.urlPath}));n=a,e=c,o.enhance("blogPosts",a),o.enhance("blogConfig",c),o.enhance("blogIndexPath",l)},extendRoutes:async t=>n&&e?(t[l]={path:l,component:'<div class="blog-index">\n <h1>Blog</h1>\n <div class="blog-posts">\n <for|post| of=$global.blogPosts>\n <article class="blog-post-card">\n <h2>\n <a href=post.link>${post.title}</a>\n </h2>\n <if=post.date>\n <div class="post-date">\n <small>${new Date(post.date).toLocaleDateString()}</small>\n </div>\n </if>\n <if=post.author>\n <div class="post-author">\n <small>by ${post.author}</small>\n </div>\n </if>\n <if=post.excerpt>\n <div class="post-excerpt">\n <p>${post.excerpt}</p>\n </div>\n </if>\n <a href=post.link class="read-more">Read more →</a>\n </article>\n </for>\n </div>\n</div>\n\n<style>\n .blog-index {\n max-width: var(--content-max-width, 960px);\n margin: 0 auto;\n padding: var(--content-padding, 2rem 1.5rem);\n }\n\n .blog-posts {\n display: flex;\n flex-direction: column;\n gap: 2rem;\n }\n\n .blog-post-card {\n border: 1px solid var(--border-default, #e5e7eb);\n border-radius: var(--radius-lg, 0.5rem);\n padding: 1.5rem;\n background: var(--bg-default, #ffffff);\n }\n\n .blog-post-card h2 {\n margin: 0 0 0.5rem 0;\n }\n\n .blog-post-card h2 a {\n color: var(--text-1, #111827);\n text-decoration: none;\n }\n\n .blog-post-card h2 a:hover {\n color: var(--color-primary-2, #3b82f6);\n }\n\n .post-date,\n .post-author {\n color: var(--text-3, #6b7280);\n margin-bottom: 0.5rem;\n }\n\n .post-excerpt {\n margin: 1rem 0;\n color: var(--text-2, #4b5563);\n }\n\n .read-more {\n display: inline-block;\n color: var(--color-primary-2, #3b82f6);\n text-decoration: none;\n font-weight: 500;\n }\n\n .read-more:hover {\n text-decoration: underline;\n }\n</style>\n',handler:"import { config } from '../_config.js';\n\nlet moduleEnhancements = {};\ntry {\n moduleEnhancements = (await import('/src/.generated/module-enhancements.js')).default;\n} catch {}\n\nexport async function GET(context, next) {\n const base = (config.site.base || '/').replace(/\\/$/, '');\n context.base = base || '/';\n\n // Standard context fields\n context.navbar = config.theme.options.navbar || [];\n context.lang = config.site.lang || 'en-US';\n context.siteHead = config.site.head || [];\n context.footer = config.theme.options.footer || null;\n context.title = 'Blog';\n context.description = 'Blog posts';\n\n // Blog posts from module enhancements (links already prefixed at build time)\n const blogModule = moduleEnhancements['blog'] || {};\n context.blogPosts = blogModule.blogPosts || [];\n}\n",meta:{blogPosts:n,blogConfig:e}},t):t}}
@@ -33,4 +33,3 @@ export interface SidenavItem {
33
33
  * Supports dynamic module targeting via the `module` option
34
34
  */
35
35
  export default function sidenavPlugin(options?: SidenavOptions): MarkoPressPlugin;
36
- //# sourceMappingURL=index.d.ts.map
@@ -1,86 +1 @@
1
- /**
2
- * Sidenav Plugin for MarkoPress
3
- *
4
- * Generates sidebar navigation from content structure
5
- * Now supports dynamic module targeting
6
- */
7
- /**
8
- * Create sidenav plugin
9
- * Supports dynamic module targeting via the `module` option
10
- */
11
- export default function sidenavPlugin(options = {}) {
12
- const { autoGenerate = true, items, module: targetModule = 'docs' } = options;
13
- // Normalize module option to array
14
- const targetModules = Array.isArray(targetModule) ? targetModule : [targetModule];
15
- return {
16
- name: 'sidenav',
17
- modules: targetModules,
18
- async enhanceModules(modules) {
19
- for (const mod of modules) {
20
- // Use manual items if provided, otherwise auto-generate
21
- const sidebar = items || (autoGenerate ? buildSidebarFromFiles(mod.files, mod.id) : []);
22
- mod.enhance('sidebar', sidebar);
23
- }
24
- },
25
- };
26
- }
27
- /**
28
- * Build sidebar from content files
29
- * Groups by directory structure and uses frontmatter for ordering
30
- * Works with any module ID
31
- */
32
- function buildSidebarFromFiles(files, moduleId) {
33
- // Group files by directory
34
- const groups = new Map();
35
- for (const file of files) {
36
- // Get the path after /{moduleId}/
37
- const modulePath = file.urlPath.replace(new RegExp(`^/${moduleId}/`), '');
38
- // Extract directory (first segment)
39
- const dirParts = modulePath.split('/');
40
- const dir = dirParts.length > 1 ? dirParts[0] : '';
41
- if (dir) {
42
- if (!groups.has(dir)) {
43
- groups.set(dir, []);
44
- }
45
- groups.get(dir).push(file);
46
- }
47
- }
48
- // Build sidebar structure
49
- const sidebar = [];
50
- // First, add root-level files (no directory)
51
- const rootFiles = files.filter(f => {
52
- const modulePath = f.urlPath.replace(new RegExp(`^/${moduleId}/`), '');
53
- return !modulePath.includes('/');
54
- });
55
- for (const file of rootFiles) {
56
- sidebar.push({
57
- text: file.processed.frontmatter.title || file.urlPath,
58
- link: file.urlPath,
59
- });
60
- }
61
- // Then, add directory groups
62
- for (const [dir, dirFiles] of groups.entries()) {
63
- // Sort files within directory by frontmatter order (if specified)
64
- const sortedFiles = dirFiles.sort((a, b) => {
65
- const orderA = a.processed.frontmatter.order;
66
- const orderB = b.processed.frontmatter.order;
67
- if (orderA !== undefined && orderB !== undefined) {
68
- return orderA - orderB;
69
- }
70
- return 0;
71
- });
72
- sidebar.push({
73
- text: dir.charAt(0).toUpperCase() + dir.slice(1), // Capitalize
74
- items: sortedFiles.map(file => ({
75
- text: file.processed.frontmatter.title || file.urlPath,
76
- link: file.urlPath,
77
- })),
78
- });
79
- }
80
- // Return as a single default section for compatibility with sidebar component
81
- return [{
82
- text: undefined, // No section title for default section
83
- items: sidebar,
84
- }];
85
- }
86
- //# sourceMappingURL=index.js.map
1
+ export default function t(t={}){const{autoGenerate:r=!0,items:o,module:s="docs"}=t;return{name:"sidenav",modules:Array.isArray(s)?s:[s],async enhanceModules(t){for(const s of t){const t=o||(r?e(s.files,s.id):[]);s.enhance("sidebar",t)}}}}function e(t,e){const r=new Map;for(const o of t){const t=o.urlPath.replace(RegExp(`^/${e}/`),"").split("/"),s=t.length>1?t[0]:"";s&&(r.has(s)||r.set(s,[]),r.get(s).push(o))}const o=[],s=t.filter(t=>!t.urlPath.replace(RegExp(`^/${e}/`),"").includes("/"));for(const t of s)o.push({text:t.processed.frontmatter.title||t.urlPath,link:t.urlPath});for(const[t,e]of r.entries()){const r=e.sort((t,e)=>{const r=t.processed.frontmatter.order,o=e.processed.frontmatter.order;return void 0!==r&&void 0!==o?r-o:0});o.push({text:t.charAt(0).toUpperCase()+t.slice(1),items:r.map(t=>({text:t.processed.frontmatter.title||t.urlPath,link:t.urlPath}))})}return[{text:void 0,items:o}]}
@@ -35,4 +35,3 @@ export interface TocItem {
35
35
  * If no module is specified, works with all available modules
36
36
  */
37
37
  export default function tocPlugin(options?: TocOptions): MarkoPressPlugin;
38
- //# sourceMappingURL=index.d.ts.map
@@ -1,79 +1 @@
1
- /**
2
- * TOC Plugin for MarkoPress
3
- *
4
- * Generates table of contents from markdown headers
5
- * Works with any content module dynamically
6
- */
7
- /**
8
- * Create TOC plugin
9
- * Supports dynamic module targeting via the `module` option
10
- * If no module is specified, works with all available modules
11
- */
12
- export default function tocPlugin(options = {}) {
13
- const { minDepth = 2, maxDepth = 3, module: targetModule } = options;
14
- const pluginConfig = {
15
- name: 'toc',
16
- async enhanceModules(modules) {
17
- modules.forEach((module) => {
18
- // Check if this module has TOC extraction enabled via config
19
- // TOC is only extracted if explicitly enabled (toc: true)
20
- const extractToc = module.getEnhancement?.('extractToc');
21
- if (extractToc !== true) {
22
- return; // Skip TOC generation unless explicitly enabled
23
- }
24
- // Create a Map to store TOC for each file
25
- const tocMap = new Map();
26
- module.files.forEach((file) => {
27
- const toc = buildTocFromHeaders(file.processed.headers, minDepth, maxDepth);
28
- tocMap.set(file.urlPath, toc);
29
- });
30
- // Add the TOC map as an enhancement
31
- module.enhance('toc', tocMap);
32
- });
33
- },
34
- };
35
- // If specific modules are requested, set them
36
- // Otherwise, let it work with all modules by not setting the `modules` property
37
- if (targetModule) {
38
- pluginConfig.modules = Array.isArray(targetModule) ? targetModule : [targetModule];
39
- }
40
- return pluginConfig;
41
- }
42
- /**
43
- * Build TOC from markdown headers
44
- * Returns a hierarchical structure with nested children
45
- * Handles nested tree structure by recursively filtering by depth
46
- */
47
- function buildTocFromHeaders(headers, minDepth, maxDepth) {
48
- if (!headers || headers.length === 0) {
49
- return [];
50
- }
51
- const result = [];
52
- for (const header of headers) {
53
- // If this header is within the depth range, include it
54
- if (header.level >= minDepth && header.level <= maxDepth) {
55
- const item = {
56
- slug: header.slug,
57
- title: header.title,
58
- level: header.level,
59
- };
60
- // Recursively process children
61
- if (header.children && header.children.length > 0) {
62
- const childItems = buildTocFromHeaders(header.children, minDepth, maxDepth);
63
- if (childItems.length > 0) {
64
- item.children = childItems;
65
- }
66
- }
67
- result.push(item);
68
- }
69
- else {
70
- // Header is outside range, but its children might be within range
71
- if (header.children && header.children.length > 0) {
72
- const childItems = buildTocFromHeaders(header.children, minDepth, maxDepth);
73
- result.push(...childItems);
74
- }
75
- }
76
- }
77
- return result;
78
- }
79
- //# sourceMappingURL=index.js.map
1
+ export default function e(e={}){const{minDepth:t=2,maxDepth:l=3,module:c}=e,r={name:"toc",async enhanceModules(e){e.forEach(e=>{const c=e.getEnhancement?.("extractToc");if(!0!==c)return;const r=new Map;e.files.forEach(e=>{const c=n(e.processed.headers,t,l);r.set(e.urlPath,c)}),e.enhance("toc",r)})}};return c&&(r.modules=Array.isArray(c)?c:[c]),r}function n(e,t,l){if(!e||0===e.length)return[];const c=[];for(const r of e)if(r.level>=t&&r.level<=l){const e={slug:r.slug,title:r.title,level:r.level};if(r.children&&r.children.length>0){const c=n(r.children,t,l);c.length>0&&(e.children=c)}c.push(e)}else if(r.children&&r.children.length>0){const e=n(r.children,t,l);c.push(...e)}return c}
@@ -4,4 +4,3 @@
4
4
  */
5
5
  import type { PreviewOptions } from '../build/types.js';
6
6
  export declare function preview(options?: PreviewOptions): Promise<never>;
7
- //# sourceMappingURL=index.d.ts.map
@@ -1,25 +1 @@
1
- /**
2
- * MarkoPress Preview Server
3
- * Serves the production build
4
- */
5
- import { spawn } from 'node:child_process';
6
- export async function preview(options = {}) {
7
- const { port = 4173, host = 'localhost', root } = options;
8
- console.log('🚀 Starting MarkoPress preview server...\n');
9
- console.log(` Server: http://${host}:${port}`);
10
- console.log(' Press Ctrl+C to stop\n');
11
- // Use resolved root or fall back to process.cwd()
12
- const cwd = root || process.cwd();
13
- // Use @marko/run preview command
14
- const previewProcess = spawn('npx', ['marko-run', 'preview', '--port', String(port)], {
15
- stdio: 'inherit',
16
- cwd,
17
- });
18
- previewProcess.on('error', (error) => {
19
- console.error('Failed to start preview server:', error.message);
20
- process.exit(1);
21
- });
22
- // Keep the process running
23
- return new Promise(() => { });
24
- }
25
- //# sourceMappingURL=index.js.map
1
+ import{spawn as o}from"node:child_process";export async function preview(r={}){const{port:e=4173,host:s="localhost",root:t}=r;console.log("🚀 Starting MarkoPress preview server...\n"),console.log(` Server: http://${s}:${e}`),console.log(" Press Ctrl+C to stop\n");const n=t||process.cwd();return o("npx",["marko-run","preview","--port",e+""],{stdio:"inherit",cwd:n}).on("error",o=>{console.error("Failed to start preview server:",o.message),process.exit(1)}),new Promise(()=>{})}
@@ -9,4 +9,3 @@ export declare const defaultPreset: DesignSystem;
9
9
  * Dark mode override for default preset
10
10
  */
11
11
  export declare const defaultDark: Partial<DesignSystem>;
12
- //# sourceMappingURL=default.d.ts.map
@@ -1,289 +1 @@
1
- /**
2
- * Default Design System Preset
3
- * Plain, clean style matching the original MarkoPress theme
4
- * Based on the existing styles.css
5
- */
6
- export const defaultPreset = {
7
- name: 'default',
8
- version: '2.0.0',
9
- description: 'MarkoPress default theme (VitePress-inspired with Indigo brand color)',
10
- colors: {
11
- // Primary brand color (Indigo)
12
- primary: {
13
- '1': '#3451b2', // Dark indigo for dark mode text / active states
14
- '2': '#3a5ccc', // Primary indigo (brand color)
15
- '3': '#5672cd', // Light indigo
16
- soft: 'rgba(100, 108, 255, 0.14)',
17
- },
18
- // Success (Green)
19
- success: {
20
- '1': '#059669',
21
- '2': '#10b981',
22
- '3': '#34d399',
23
- soft: 'rgba(16, 185, 129, 0.1)',
24
- },
25
- // Warning (Yellow/Orange)
26
- warning: {
27
- '1': '#d97706',
28
- '2': '#f59e0b',
29
- '3': '#fbbf24',
30
- soft: 'rgba(245, 158, 11, 0.1)',
31
- },
32
- // Danger (Red)
33
- danger: {
34
- '1': '#dc2626',
35
- '2': '#ef4444',
36
- '3': '#f87171',
37
- soft: 'rgba(239, 68, 68, 0.1)',
38
- },
39
- // Info (Cyan)
40
- info: {
41
- '1': '#0891b2',
42
- '2': '#06b6d4',
43
- '3': '#22d3ee',
44
- soft: 'rgba(6, 182, 212, 0.1)',
45
- },
46
- // Gray scale (Light mode)
47
- gray: {
48
- '1': '#e5e7eb',
49
- '2': '#f3f4f6',
50
- '3': '#f9fafb',
51
- soft: 'rgba(107, 114, 128, 0.1)',
52
- },
53
- // Background colors (Light mode)
54
- bg: {
55
- default: '#ffffff',
56
- alt: '#f9fafb',
57
- elevated: '#ffffff',
58
- soft: '#f3f4f6',
59
- },
60
- // Text colors (Light mode)
61
- text: {
62
- '1': '#111827',
63
- '2': '#4b5563',
64
- '3': '#6b7280',
65
- },
66
- // Border colors (Light mode)
67
- border: {
68
- default: '#e5e7eb',
69
- divider: '#e5e7eb',
70
- gutter: '#e5e7eb',
71
- },
72
- // Divider
73
- divider: '#e5e7eb',
74
- // Soft backgrounds
75
- soft: {
76
- brand: 'rgba(59, 130, 246, 0.1)',
77
- gray: 'rgba(107, 114, 128, 0.1)',
78
- },
79
- },
80
- typography: {
81
- fontFamily: {
82
- sans: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
83
- mono: "'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace",
84
- },
85
- fontSize: {
86
- xs: '0.75rem',
87
- sm: '0.875rem',
88
- base: '1rem',
89
- lg: '1.125rem',
90
- xl: '1.25rem',
91
- '2xl': '1.5rem',
92
- '3xl': '1.875rem',
93
- '4xl': '2.25rem',
94
- },
95
- fontWeight: {
96
- normal: 400,
97
- medium: 500,
98
- semibold: 600,
99
- bold: 700,
100
- },
101
- lineHeight: {
102
- tight: 1.25,
103
- normal: 1.5,
104
- relaxed: 1.75,
105
- },
106
- },
107
- spacing: {
108
- scale: {
109
- xs: '0.25rem',
110
- sm: '0.5rem',
111
- md: '1rem',
112
- lg: '1.5rem',
113
- xl: '2rem',
114
- '2xl': '3rem',
115
- '3xl': '4rem',
116
- '4xl': '6rem',
117
- },
118
- },
119
- effects: {
120
- shadows: {
121
- '1': '0 1px 2px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06)',
122
- '2': '0 3px 12px rgba(0, 0, 0, 0.07), 0 1px 4px rgba(0, 0, 0, 0.07)',
123
- '3': '0 12px 32px rgba(0, 0, 0, 0.1), 0 2px 6px rgba(0, 0, 0, 0.08)',
124
- '4': '0 20px 50px rgba(0, 0, 0, 0.12), 0 4px 10px rgba(0, 0, 0, 0.08)',
125
- '5': '0 25px 70px rgba(0, 0, 0, 0.15), 0 8px 16px rgba(0, 0, 0, 0.1)',
126
- },
127
- borderRadius: {
128
- sm: '4px',
129
- md: '8px',
130
- lg: '12px',
131
- full: '9999px',
132
- },
133
- transitions: {
134
- base: '250ms ease-in-out',
135
- fast: '150ms ease-in-out',
136
- slow: '350ms ease-in-out',
137
- },
138
- },
139
- layout: {
140
- maxWidth: '1440px',
141
- navbarHeight: '64px',
142
- sidebarWidth: '280px',
143
- tocWidth: '240px',
144
- zIndex: {
145
- footer: 10,
146
- localNav: 20,
147
- nav: 30,
148
- layoutTop: 40,
149
- backdrop: 50,
150
- sidebar: 60,
151
- },
152
- },
153
- components: {
154
- navbar: {
155
- height: '64px',
156
- padding: '0 1.5rem',
157
- background: '#ffffff',
158
- border: '#e5e7eb',
159
- borderWidth: '1px',
160
- shadow: 'none',
161
- logoHeight: '32px',
162
- },
163
- sidebar: {
164
- width: '280px',
165
- padding: '1.5rem',
166
- background: '#f9fafb',
167
- border: '#e5e7eb',
168
- activeBorder: '2px solid #3451b2', // NEW: Active state indicator
169
- activeBackground: 'rgba(100, 108, 255, 0.1)', // Updated to Indigo
170
- },
171
- content: {
172
- maxWidth: '720px', // VitePress-proven optimal reading width
173
- padding: '32px 24px',
174
- fontSize: '16px',
175
- lineHeight: 1.7, // Improved readability
176
- },
177
- code: {
178
- fontSize: '0.875em',
179
- lineHeight: 1.7, // Improved readability
180
- background: '#f3f4f6',
181
- color: '#3a5ccc', // Updated to Indigo
182
- borderRadius: '4px',
183
- padding: '0.25rem 0.5rem',
184
- blockPadding: '20px 24px',
185
- blockBorderRadius: '8px',
186
- },
187
- heading: {
188
- h1FontSize: '2.25rem',
189
- h2FontSize: '1.5rem',
190
- h3FontSize: '1.25rem',
191
- h4FontSize: '1.125rem',
192
- h1FontWeight: 700,
193
- h2FontWeight: 600,
194
- h3FontWeight: 600,
195
- h1LineHeight: 1.2,
196
- h2LineHeight: 1.3,
197
- h3LineHeight: 1.4,
198
- marginTop: '1.5rem',
199
- marginBottom: '1rem',
200
- },
201
- },
202
- };
203
- /**
204
- * Dark mode override for default preset
205
- */
206
- export const defaultDark = {
207
- colors: {
208
- // Primary brand color (Indigo - dark mode)
209
- primary: {
210
- '1': '#a8b1ff', // Light indigo for dark mode text
211
- '2': '#3a5ccc', // Primary indigo
212
- '3': '#3451b2', // Dark indigo
213
- soft: 'rgba(100, 108, 255, 0.16)', // Increased opacity
214
- },
215
- success: {
216
- '1': '#34d399',
217
- '2': '#10b981',
218
- '3': '#059669',
219
- soft: 'rgba(52, 211, 153, 0.15)',
220
- },
221
- warning: {
222
- '1': '#fbbf24',
223
- '2': '#f59e0b',
224
- '3': '#d97706',
225
- soft: 'rgba(251, 191, 36, 0.15)',
226
- },
227
- danger: {
228
- '1': '#f87171',
229
- '2': '#ef4444',
230
- '3': '#dc2626',
231
- soft: 'rgba(248, 113, 113, 0.15)',
232
- },
233
- info: {
234
- '1': '#22d3ee',
235
- '2': '#06b6d4',
236
- '3': '#0891b2',
237
- soft: 'rgba(34, 211, 238, 0.15)',
238
- },
239
- // Gray scale (Dark mode)
240
- gray: {
241
- '1': '#374151',
242
- '2': '#1f2937',
243
- '3': '#111827',
244
- soft: 'rgba(107, 114, 128, 0.15)',
245
- },
246
- // Background colors (Dark mode - VitePress-inspired)
247
- bg: {
248
- default: '#1b1b1f', // VitePress default dark
249
- alt: '#1f2937',
250
- elevated: '#2d2d30',
251
- soft: '#252529',
252
- },
253
- // Text colors (Dark mode)
254
- text: {
255
- '1': '#f9fafb',
256
- '2': '#d1d5db',
257
- '3': '#9ca3af',
258
- },
259
- // Border colors (Dark mode)
260
- border: {
261
- default: '#374151',
262
- divider: '#1f2937',
263
- gutter: '#1f2937',
264
- },
265
- // Divider (Dark mode)
266
- divider: '#1f2937',
267
- // Soft backgrounds (Dark mode)
268
- soft: {
269
- brand: 'rgba(96, 165, 250, 0.15)',
270
- gray: 'rgba(156, 162, 173, 0.15)',
271
- },
272
- },
273
- components: {
274
- navbar: {
275
- background: '#1b1b1f',
276
- border: '#2d2d30',
277
- },
278
- sidebar: {
279
- background: '#1b1b1f',
280
- activeBorder: '2px solid #a8b1ff',
281
- activeBackground: 'rgba(100, 108, 255, 0.16)',
282
- },
283
- code: {
284
- background: '#1f2937',
285
- color: '#a8b1ff', // Light indigo for dark mode
286
- },
287
- },
288
- };
289
- //# sourceMappingURL=default.js.map
1
+ export const defaultPreset={name:"default",version:"2.0.0",description:"MarkoPress default theme (VitePress-inspired with Indigo brand color)",colors:{primary:{1:"#3451b2",2:"#3a5ccc",3:"#5672cd",soft:"rgba(100, 108, 255, 0.14)"},success:{1:"#059669",2:"#10b981",3:"#34d399",soft:"rgba(16, 185, 129, 0.1)"},warning:{1:"#d97706",2:"#f59e0b",3:"#fbbf24",soft:"rgba(245, 158, 11, 0.1)"},danger:{1:"#dc2626",2:"#ef4444",3:"#f87171",soft:"rgba(239, 68, 68, 0.1)"},info:{1:"#0891b2",2:"#06b6d4",3:"#22d3ee",soft:"rgba(6, 182, 212, 0.1)"},gray:{1:"#e5e7eb",2:"#f3f4f6",3:"#f9fafb",soft:"rgba(107, 114, 128, 0.1)"},bg:{default:"#ffffff",alt:"#f9fafb",elevated:"#ffffff",soft:"#f3f4f6"},text:{1:"#111827",2:"#4b5563",3:"#6b7280"},border:{default:"#e5e7eb",divider:"#e5e7eb",gutter:"#e5e7eb"},divider:"#e5e7eb",soft:{brand:"rgba(59, 130, 246, 0.1)",gray:"rgba(107, 114, 128, 0.1)"}},typography:{fontFamily:{sans:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",mono:"'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace"},fontSize:{xs:"0.75rem",sm:"0.875rem",base:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem"},fontWeight:{normal:400,medium:500,semibold:600,bold:700},lineHeight:{tight:1.25,normal:1.5,relaxed:1.75}},spacing:{scale:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem","2xl":"3rem","3xl":"4rem","4xl":"6rem"}},effects:{shadows:{1:"0 1px 2px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06)",2:"0 3px 12px rgba(0, 0, 0, 0.07), 0 1px 4px rgba(0, 0, 0, 0.07)",3:"0 12px 32px rgba(0, 0, 0, 0.1), 0 2px 6px rgba(0, 0, 0, 0.08)",4:"0 20px 50px rgba(0, 0, 0, 0.12), 0 4px 10px rgba(0, 0, 0, 0.08)",5:"0 25px 70px rgba(0, 0, 0, 0.15), 0 8px 16px rgba(0, 0, 0, 0.1)"},borderRadius:{sm:"4px",md:"8px",lg:"12px",full:"9999px"},transitions:{base:"250ms ease-in-out",fast:"150ms ease-in-out",slow:"350ms ease-in-out"}},layout:{maxWidth:"1440px",navbarHeight:"64px",sidebarWidth:"280px",tocWidth:"240px",zIndex:{footer:10,localNav:20,nav:30,layoutTop:40,backdrop:50,sidebar:60}},components:{navbar:{height:"64px",padding:"0 1.5rem",background:"#ffffff",border:"#e5e7eb",borderWidth:"1px",shadow:"none",logoHeight:"32px"},sidebar:{width:"280px",padding:"1.5rem",background:"#f9fafb",border:"#e5e7eb",activeBorder:"2px solid #3451b2",activeBackground:"rgba(100, 108, 255, 0.1)"},content:{maxWidth:"720px",padding:"32px 24px",fontSize:"16px",lineHeight:1.7},code:{fontSize:"0.875em",lineHeight:1.7,background:"#f3f4f6",color:"#3a5ccc",borderRadius:"4px",padding:"0.25rem 0.5rem",blockPadding:"20px 24px",blockBorderRadius:"8px"},heading:{h1FontSize:"2.25rem",h2FontSize:"1.5rem",h3FontSize:"1.25rem",h4FontSize:"1.125rem",h1FontWeight:700,h2FontWeight:600,h3FontWeight:600,h1LineHeight:1.2,h2LineHeight:1.3,h3LineHeight:1.4,marginTop:"1.5rem",marginBottom:"1rem"}}};export const defaultDark={colors:{primary:{1:"#a8b1ff",2:"#3a5ccc",3:"#3451b2",soft:"rgba(100, 108, 255, 0.16)"},success:{1:"#34d399",2:"#10b981",3:"#059669",soft:"rgba(52, 211, 153, 0.15)"},warning:{1:"#fbbf24",2:"#f59e0b",3:"#d97706",soft:"rgba(251, 191, 36, 0.15)"},danger:{1:"#f87171",2:"#ef4444",3:"#dc2626",soft:"rgba(248, 113, 113, 0.15)"},info:{1:"#22d3ee",2:"#06b6d4",3:"#0891b2",soft:"rgba(34, 211, 238, 0.15)"},gray:{1:"#374151",2:"#1f2937",3:"#111827",soft:"rgba(107, 114, 128, 0.15)"},bg:{default:"#1b1b1f",alt:"#1f2937",elevated:"#2d2d30",soft:"#252529"},text:{1:"#f9fafb",2:"#d1d5db",3:"#9ca3af"},border:{default:"#374151",divider:"#1f2937",gutter:"#1f2937"},divider:"#1f2937",soft:{brand:"rgba(96, 165, 250, 0.15)",gray:"rgba(156, 162, 173, 0.15)"}},components:{navbar:{background:"#1b1b1f",border:"#2d2d30"},sidebar:{background:"#1b1b1f",activeBorder:"2px solid #a8b1ff",activeBackground:"rgba(100, 108, 255, 0.16)"},code:{background:"#1f2937",color:"#a8b1ff"}}};