@dominikcz/greg 0.9.27

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 (183) hide show
  1. package/README.md +397 -0
  2. package/bin/greg.js +241 -0
  3. package/bin/init.js +351 -0
  4. package/bin/templates/docs/getting-started.md +47 -0
  5. package/bin/templates/docs/index.md +11 -0
  6. package/bin/templates/greg.config.js +39 -0
  7. package/bin/templates/greg.config.ts +38 -0
  8. package/bin/templates/index.html +16 -0
  9. package/bin/templates/src/App.svelte +5 -0
  10. package/bin/templates/src/app.css +20 -0
  11. package/bin/templates/src/main.js +9 -0
  12. package/bin/templates/svelte.config.js +1 -0
  13. package/bin/templates/tsconfig.json +21 -0
  14. package/bin/templates/vite.config.js +23 -0
  15. package/docs/__partials/markdown/examples/basic.md +4 -0
  16. package/docs/__partials/markdown/examples/diff.md +10 -0
  17. package/docs/__partials/markdown/examples/focus.md +5 -0
  18. package/docs/__partials/markdown/examples/language-title.md +3 -0
  19. package/docs/__partials/markdown/examples/line-highlighting.md +5 -0
  20. package/docs/__partials/markdown/examples/line-numbers.md +5 -0
  21. package/docs/__partials/note.md +4 -0
  22. package/docs/guide/__shared-warning.md +4 -0
  23. package/docs/guide/asset-handling.md +88 -0
  24. package/docs/guide/deploying.md +162 -0
  25. package/docs/guide/getting-started.md +334 -0
  26. package/docs/guide/index.md +23 -0
  27. package/docs/guide/localization.md +290 -0
  28. package/docs/guide/markdown/code.md +95 -0
  29. package/docs/guide/markdown/components-and-mermaid.md +43 -0
  30. package/docs/guide/markdown/containers.md +110 -0
  31. package/docs/guide/markdown/header-anchors.md +34 -0
  32. package/docs/guide/markdown/includes.md +84 -0
  33. package/docs/guide/markdown/index.md +20 -0
  34. package/docs/guide/markdown/inline-attributes.md +21 -0
  35. package/docs/guide/markdown/links-and-toc.md +64 -0
  36. package/docs/guide/markdown/math.md +54 -0
  37. package/docs/guide/markdown/syntax-highlighting.md +75 -0
  38. package/docs/guide/routing.md +150 -0
  39. package/docs/guide/using-svelte.md +88 -0
  40. package/docs/guide/versioning.md +281 -0
  41. package/docs/incompatibilities.md +48 -0
  42. package/docs/index.md +43 -0
  43. package/docs/reference/badge.md +100 -0
  44. package/docs/reference/carbon-ads.md +46 -0
  45. package/docs/reference/code-group.md +126 -0
  46. package/docs/reference/home-page.md +232 -0
  47. package/docs/reference/index.md +18 -0
  48. package/docs/reference/markdowndocs.md +275 -0
  49. package/docs/reference/outline.md +79 -0
  50. package/docs/reference/search.md +263 -0
  51. package/docs/reference/steps.md +200 -0
  52. package/docs/reference/team-page.md +189 -0
  53. package/docs/reference/theme.md +150 -0
  54. package/fakeDocsGenerator/generate_docs.js +310 -0
  55. package/package.json +92 -0
  56. package/scripts/build-versions.js +609 -0
  57. package/scripts/generate-static.js +79 -0
  58. package/scripts/render-markdown.js +420 -0
  59. package/src/lib/MarkdownDocs/AiChat.svelte +936 -0
  60. package/src/lib/MarkdownDocs/BackToTop.svelte +68 -0
  61. package/src/lib/MarkdownDocs/Breadcrumb.svelte +68 -0
  62. package/src/lib/MarkdownDocs/DocsNavigation.svelte +149 -0
  63. package/src/lib/MarkdownDocs/DocsSiteHeader.svelte +758 -0
  64. package/src/lib/MarkdownDocs/DocsVersionSwitcher.svelte +103 -0
  65. package/src/lib/MarkdownDocs/MarkdownDocs.svelte +2115 -0
  66. package/src/lib/MarkdownDocs/MarkdownRenderer.svelte +487 -0
  67. package/src/lib/MarkdownDocs/Outline.svelte +238 -0
  68. package/src/lib/MarkdownDocs/PrevNext.svelte +115 -0
  69. package/src/lib/MarkdownDocs/SearchModal.svelte +1241 -0
  70. package/src/lib/MarkdownDocs/TreeView.svelte +32 -0
  71. package/src/lib/MarkdownDocs/TreeViewItem.svelte +219 -0
  72. package/src/lib/MarkdownDocs/VersionOutdatedNotice.svelte +72 -0
  73. package/src/lib/MarkdownDocs/__tests__/codeDirectives.test.js +54 -0
  74. package/src/lib/MarkdownDocs/__tests__/common.test.js +41 -0
  75. package/src/lib/MarkdownDocs/__tests__/docsExamplesLint.test.js +77 -0
  76. package/src/lib/MarkdownDocs/__tests__/fixtures/docs/markdown/__partial-basic.md +3 -0
  77. package/src/lib/MarkdownDocs/__tests__/fixtures/docs/markdown/snippet.js +9 -0
  78. package/src/lib/MarkdownDocs/__tests__/fixtures/includes/part.md +11 -0
  79. package/src/lib/MarkdownDocs/__tests__/fixtures/includes/wrapper.md +5 -0
  80. package/src/lib/MarkdownDocs/__tests__/fixtures/snippets/sample.js +8 -0
  81. package/src/lib/MarkdownDocs/__tests__/fixtures/snippets/sample.md +5 -0
  82. package/src/lib/MarkdownDocs/__tests__/helpers.js +67 -0
  83. package/src/lib/MarkdownDocs/__tests__/localeUtils.test.js +204 -0
  84. package/src/lib/MarkdownDocs/__tests__/markdown.test.js +704 -0
  85. package/src/lib/MarkdownDocs/__tests__/markdownRendererRuntime.test.js +65 -0
  86. package/src/lib/MarkdownDocs/__tests__/searchIndexBuilder.test.js +117 -0
  87. package/src/lib/MarkdownDocs/__tests__/sqliteStore.test.js +202 -0
  88. package/src/lib/MarkdownDocs/__tests__/useRouter.test.js +16 -0
  89. package/src/lib/MarkdownDocs/ai/adapters/customAdapter.js +14 -0
  90. package/src/lib/MarkdownDocs/ai/adapters/customAdapter.ts +43 -0
  91. package/src/lib/MarkdownDocs/ai/adapters/ollamaAdapter.js +81 -0
  92. package/src/lib/MarkdownDocs/ai/adapters/ollamaAdapter.ts +116 -0
  93. package/src/lib/MarkdownDocs/ai/adapters/openaiAdapter.js +92 -0
  94. package/src/lib/MarkdownDocs/ai/adapters/openaiAdapter.ts +137 -0
  95. package/src/lib/MarkdownDocs/ai/aiProvider.ts +31 -0
  96. package/src/lib/MarkdownDocs/ai/characters.js +52 -0
  97. package/src/lib/MarkdownDocs/ai/characters.ts +69 -0
  98. package/src/lib/MarkdownDocs/ai/chunkStore.ts +25 -0
  99. package/src/lib/MarkdownDocs/ai/chunker.js +85 -0
  100. package/src/lib/MarkdownDocs/ai/chunker.ts +135 -0
  101. package/src/lib/MarkdownDocs/ai/docLinker.js +26 -0
  102. package/src/lib/MarkdownDocs/ai/docLinker.ts +36 -0
  103. package/src/lib/MarkdownDocs/ai/promptBuilder.js +33 -0
  104. package/src/lib/MarkdownDocs/ai/promptBuilder.ts +53 -0
  105. package/src/lib/MarkdownDocs/ai/ragPipeline.js +54 -0
  106. package/src/lib/MarkdownDocs/ai/ragPipeline.ts +106 -0
  107. package/src/lib/MarkdownDocs/ai/stores/memoryStore.js +88 -0
  108. package/src/lib/MarkdownDocs/ai/stores/memoryStore.ts +112 -0
  109. package/src/lib/MarkdownDocs/ai/stores/sqliteStore.ts +372 -0
  110. package/src/lib/MarkdownDocs/ai/types.ts +71 -0
  111. package/src/lib/MarkdownDocs/aiServer.js +288 -0
  112. package/src/lib/MarkdownDocs/codeDirectives.js +191 -0
  113. package/src/lib/MarkdownDocs/codeFenceInfo.js +45 -0
  114. package/src/lib/MarkdownDocs/codeGroup.ts +46 -0
  115. package/src/lib/MarkdownDocs/common.ts +47 -0
  116. package/src/lib/MarkdownDocs/docsUtils.js +281 -0
  117. package/src/lib/MarkdownDocs/index.plugins.js +22 -0
  118. package/src/lib/MarkdownDocs/layouts/LayoutDoc.svelte +8 -0
  119. package/src/lib/MarkdownDocs/layouts/LayoutHome.svelte +58 -0
  120. package/src/lib/MarkdownDocs/layouts/LayoutPage.svelte +9 -0
  121. package/src/lib/MarkdownDocs/loadGregConfig.js +82 -0
  122. package/src/lib/MarkdownDocs/localeUtils.ts +682 -0
  123. package/src/lib/MarkdownDocs/markdownRendererRuntime.ts +314 -0
  124. package/src/lib/MarkdownDocs/mermaidThemes.js +319 -0
  125. package/src/lib/MarkdownDocs/navigationUtils.js +22 -0
  126. package/src/lib/MarkdownDocs/rehypeCodeGroup.js +326 -0
  127. package/src/lib/MarkdownDocs/rehypeCodeTitle.js +96 -0
  128. package/src/lib/MarkdownDocs/rehypeToc.js +170 -0
  129. package/src/lib/MarkdownDocs/remarkCodeMeta.js +22 -0
  130. package/src/lib/MarkdownDocs/remarkContainers.js +329 -0
  131. package/src/lib/MarkdownDocs/remarkCustomAnchors.js +42 -0
  132. package/src/lib/MarkdownDocs/remarkEscapeSvelte.js +33 -0
  133. package/src/lib/MarkdownDocs/remarkGlobalComponents.js +65 -0
  134. package/src/lib/MarkdownDocs/remarkImports.js +461 -0
  135. package/src/lib/MarkdownDocs/remarkImportsBrowser.js +349 -0
  136. package/src/lib/MarkdownDocs/remarkInlineAttrs.js +95 -0
  137. package/src/lib/MarkdownDocs/remarkMathToHtml.js +138 -0
  138. package/src/lib/MarkdownDocs/searchIndexBuilder.js +497 -0
  139. package/src/lib/MarkdownDocs/searchServer.js +263 -0
  140. package/src/lib/MarkdownDocs/treeViewTypes.ts +11 -0
  141. package/src/lib/MarkdownDocs/useRouter.svelte.ts +114 -0
  142. package/src/lib/MarkdownDocs/useSplitter.svelte.ts +33 -0
  143. package/src/lib/MarkdownDocs/versioningDefaults.js +20 -0
  144. package/src/lib/MarkdownDocs/vitePluginAiServer.js +204 -0
  145. package/src/lib/MarkdownDocs/vitePluginCopyDocs.js +153 -0
  146. package/src/lib/MarkdownDocs/vitePluginFrontmatter.js +109 -0
  147. package/src/lib/MarkdownDocs/vitePluginGregConfig.js +108 -0
  148. package/src/lib/MarkdownDocs/vitePluginSearchIndex.js +57 -0
  149. package/src/lib/MarkdownDocs/vitePluginSearchServer.js +190 -0
  150. package/src/lib/components/Badge.svelte +59 -0
  151. package/src/lib/components/Button.svelte +138 -0
  152. package/src/lib/components/CarbonAds.svelte +99 -0
  153. package/src/lib/components/CodeGroup.svelte +102 -0
  154. package/src/lib/components/Feature.svelte +209 -0
  155. package/src/lib/components/Features.svelte +123 -0
  156. package/src/lib/components/Hero.svelte +399 -0
  157. package/src/lib/components/Image.svelte +128 -0
  158. package/src/lib/components/Link.svelte +105 -0
  159. package/src/lib/components/SocialLink.svelte +84 -0
  160. package/src/lib/components/SocialLinks.svelte +33 -0
  161. package/src/lib/components/Steps.svelte +143 -0
  162. package/src/lib/components/TeamMember.svelte +273 -0
  163. package/src/lib/components/TeamMembers.svelte +81 -0
  164. package/src/lib/components/TeamPage.svelte +65 -0
  165. package/src/lib/components/TeamPageSection.svelte +108 -0
  166. package/src/lib/components/TeamPageTitle.svelte +89 -0
  167. package/src/lib/components/index.js +24 -0
  168. package/src/lib/portal/context.js +12 -0
  169. package/src/lib/portal/index.js +3 -0
  170. package/src/lib/portal/portal.svelte +14 -0
  171. package/src/lib/portal/slot.svelte +8 -0
  172. package/src/lib/scss/__code.scss +128 -0
  173. package/src/lib/scss/__containers.scss +99 -0
  174. package/src/lib/scss/__markdown.scss +447 -0
  175. package/src/lib/scss/__scrollbar.scss +60 -0
  176. package/src/lib/scss/__steps.scss +100 -0
  177. package/src/lib/scss/__theme.scss +238 -0
  178. package/src/lib/scss/__toc.scss +55 -0
  179. package/src/lib/scss/__utilities.scss +7 -0
  180. package/src/lib/scss/greg.scss +9 -0
  181. package/src/lib/spinner/spinner.svelte +42 -0
  182. package/svelte.config.js +146 -0
  183. package/types/index.d.ts +456 -0
@@ -0,0 +1,238 @@
1
+ @mixin greg-light-vars {
2
+ /* Light theme (default) */
3
+ --greg-background: #ffffff;
4
+ --greg-main-background: #ffffff;
5
+ --greg-menu-background: #f8f8f8;
6
+ --greg-header-background: #ffffff;
7
+ --greg-color: #1a1a2e;
8
+ --greg-menu-color: #3d3d3d;
9
+ --greg-menu-section-color: #7a7a8c;
10
+ --greg-menu-active-background-params: 100, 108, 255;
11
+ --greg-menu-active-background: #646cff;
12
+ --greg-menu-active-color: #ffffff;
13
+ --greg-menu-hover-background: #ececf5;
14
+ --greg-code-background: #f0f0f4;
15
+ --greg-code-color: #1a1a2e;
16
+ --greg-border-color: #e5e5ea;
17
+ --greg-accent: #646cff;
18
+ --greg-accent-light: #ececf5;
19
+ --greg-header-height: 3.5rem;
20
+
21
+ --greg-splitter-handler-background: #e5e5ea;
22
+ --greg-splitter-handler-color: #7a7a8c;
23
+ --greg-splitter-active-border: #646cff;
24
+ --greg-splitter-active-handler-background: #646cff;
25
+ --greg-splitter-active-handler-color: #f8f8f8;
26
+
27
+ /* TOC */
28
+ --greg-toc-background: transparent;
29
+ --greg-toc-color: #3d3d3d;
30
+ --greg-toc-link-color: #4a4a6a;
31
+ --greg-toc-link-hover: #646cff;
32
+
33
+ /* ������ Semantic status colors (light) ��������������������������������� */
34
+ --greg-info-border: rgba(100, 108, 255, 0.45);
35
+ --greg-info-text: #646cff;
36
+ --greg-info-bg: rgba(100, 108, 255, 0.08);
37
+
38
+ --greg-tip-border: rgba(66, 184, 131, 0.45);
39
+ --greg-tip-text: #2d9e68;
40
+ --greg-tip-bg: rgba(66, 184, 131, 0.08);
41
+
42
+ --greg-warning-border: rgba(201, 126, 10, 0.45);
43
+ --greg-warning-text: #7d4e00;
44
+ --greg-warning-bg: rgba(201, 126, 10, 0.08);
45
+
46
+ --greg-danger-border: rgba(224, 82, 82, 0.45);
47
+ --greg-danger-text: #c81d1d;
48
+ --greg-danger-bg: rgba(224, 82, 82, 0.08);
49
+
50
+ --greg-success-border: rgba(26, 127, 55, 0.45);
51
+ --greg-success-text: #1a7f37;
52
+ --greg-success-bg: rgba(26, 127, 55, 0.08);
53
+
54
+ --greg-sponsor-color: #db6da0;
55
+ --greg-sponsor-bg: rgba(219, 109, 160, 0.08);
56
+
57
+ --greg-code-inline-color: #e4004a;
58
+
59
+ /* ������ Mermaid diagram CSS-variable tokens (light) ������������������������������ */
60
+ --mmd-canvas: #ffffff;
61
+ --mmd-node-bg: #ffffff;
62
+ --mmd-text: rgba(0, 0, 0, 0.87);
63
+ --mmd-text-sub: rgba(0, 0, 0, 0.60);
64
+ --mmd-line: #757575;
65
+ --mmd-border: #e0e0e0;
66
+ --mmd-actor-line: #bdbdbd;
67
+ --mmd-accent-1: #6200ee;
68
+ --mmd-accent-2: #03dac6;
69
+ --mmd-accent-3: #b00020;
70
+ --mmd-accent-4: #018786;
71
+ --mmd-accent-5: #3700b3;
72
+ --mmd-accent-6: #cf6679;
73
+ --mmd-shadow-sm: drop-shadow(0 1px 3px rgba(0,0,0,.12)) drop-shadow(0 1px 2px rgba(0,0,0,.24));
74
+ --mmd-shadow-md: drop-shadow(0 2px 4px rgba(0,0,0,.14)) drop-shadow(0 4px 5px rgba(0,0,0,.12));
75
+ --mmd-shadow-acc1: drop-shadow(0 2px 4px rgba(98,0,238,.3)) drop-shadow(0 4px 8px rgba(98,0,238,.2));
76
+ }
77
+
78
+ :root {
79
+ @include greg-light-vars;
80
+ }
81
+
82
+ @mixin greg-dark-vars {
83
+ /* Dark theme ��� warm ember palette */
84
+ --greg-background: #1c1c1c;
85
+ --greg-main-background: #1c1c1c;
86
+ --greg-menu-background: #141414;
87
+ --greg-header-background: #141414;
88
+
89
+ /* tekst */
90
+ --greg-color: rgba(226, 228, 233, 0.82);
91
+ --greg-menu-color: #d9c9b5;
92
+ --greg-menu-section-color: #8a7a68;
93
+
94
+ /* aktywny element */
95
+ --greg-menu-active-background-params: 255, 111, 97;
96
+ --greg-menu-active-background: #ff6f61;
97
+ --greg-menu-active-color: #1c1c1c;
98
+ --greg-menu-hover-background: rgba(255, 111, 97, 0.12);
99
+
100
+ /* kod */
101
+ --greg-code-background: #0f0f0f;
102
+ --greg-code-color: #f5e8d8;
103
+
104
+ /* obramowania i akcenty */
105
+ --greg-border-color: #2e2a26;
106
+ --greg-accent: #ff6f61;
107
+ --greg-accent-light: rgba(255, 111, 97, 0.13);
108
+
109
+ --greg-header-height: 3.5rem;
110
+
111
+ --greg-splitter-handler-background: #2e2a26;
112
+ --greg-splitter-handler-color: #8a7a68;
113
+ --greg-splitter-active-border: #ff6f61;
114
+ --greg-splitter-active-handler-background: #ff6f61;
115
+ --greg-splitter-active-handler-color: #f5e8d8;
116
+
117
+ /* TOC */
118
+ --greg-toc-color: #f5e8d8;
119
+ --greg-toc-link-color: #d9c9b5;
120
+ --greg-toc-link-hover: #ff6f61;
121
+
122
+ /* ������ Semantic status colors (dark) ������������������������ */
123
+ --greg-info-border: rgba(255, 111, 97, 0.45);
124
+ --greg-info-text: #ff6f61;
125
+ --greg-info-bg: rgba(255, 111, 97, 0.08);
126
+
127
+ --greg-tip-border: rgba(168, 201, 127, 0.45);
128
+ --greg-tip-text: #a8c97f;
129
+ --greg-tip-bg: rgba(168, 201, 127, 0.08);
130
+
131
+ --greg-warning-border: rgba(233, 169, 61, 0.45);
132
+ --greg-warning-text: #f5c842;
133
+ --greg-warning-bg: rgba(233, 169, 61, 0.08);
134
+
135
+ --greg-danger-border: rgba(224, 82, 82, 0.45);
136
+ --greg-danger-text: #ff7a7a;
137
+ --greg-danger-bg: rgba(224, 82, 82, 0.10);
138
+
139
+ --greg-success-border: rgba(168, 201, 127, 0.45);
140
+ --greg-success-text: #a8c97f;
141
+ --greg-success-bg: rgba(168, 201, 127, 0.08);
142
+
143
+ --greg-sponsor-color: #e2829b;
144
+ --greg-sponsor-bg: rgba(226, 130, 155, 0.10);
145
+
146
+ --greg-code-inline-color: #daa520;
147
+
148
+ /* ������ Mermaid diagram CSS-variable tokens (dark) ��������������������������������� */
149
+ --mmd-canvas: #1e1e2e;
150
+ --mmd-node-bg: #2d2d44;
151
+ --mmd-text: rgba(255, 255, 255, 0.87);
152
+ --mmd-text-sub: rgba(255, 255, 255, 0.60);
153
+ --mmd-line: #9090b8;
154
+ --mmd-border: #3e3e5a;
155
+ --mmd-actor-line: #5a5a7a;
156
+ --mmd-accent-1: #bb86fc;
157
+ --mmd-accent-2: #03dac6;
158
+ --mmd-accent-3: #cf6679;
159
+ --mmd-accent-4: #03dac6;
160
+ --mmd-accent-5: #7c4dff;
161
+ --mmd-accent-6: #ef9a9a;
162
+ --mmd-shadow-sm: drop-shadow(0 2px 6px rgba(0,0,0,.40)) drop-shadow(0 1px 3px rgba(0,0,0,.50));
163
+ --mmd-shadow-md: drop-shadow(0 3px 8px rgba(0,0,0,.45)) drop-shadow(0 5px 10px rgba(0,0,0,.35));
164
+ --mmd-shadow-acc1: drop-shadow(0 2px 6px rgba(187,134,252,.35)) drop-shadow(0 4px 10px rgba(187,134,252,.2));
165
+ }
166
+
167
+ @media (prefers-color-scheme: dark) {
168
+ :root {
169
+ @include greg-dark-vars;
170
+ }
171
+ }
172
+
173
+ .greg[data-theme="dark"] {
174
+ @include greg-dark-vars;
175
+ }
176
+
177
+ .greg[data-theme="light"] {
178
+ @include greg-light-vars;
179
+ }
180
+
181
+ @mixin greg-dark-markdown-vars {
182
+ --focus-outlineColor: #ff6f61;
183
+ --fgColor-default: #f5e8d8;
184
+ --fgColor-muted: #8a7a68;
185
+ --fgColor-accent: #ff6f61;
186
+ --fgColor-success: #a8c97f;
187
+ --fgColor-attention: #daa520;
188
+ --fgColor-danger: #ff4500;
189
+ --fgColor-done: #d4956a;
190
+ --bgColor-default: var(--greg-background);
191
+ --bgColor-muted: #242424;
192
+ --bgColor-neutral-muted: var(--greg-code-background);
193
+ --bgColor-attention-muted: rgba(218, 165, 32, 0.15);
194
+ --borderColor-default: #4a4540;
195
+ --borderColor-muted: #3a3530aa;
196
+ --borderColor-neutral-muted: #2e2a2699;
197
+ --borderColor-accent-emphasis: #ff6f61;
198
+ --borderColor-success-emphasis: #a8c97f;
199
+ --borderColor-attention-emphasis: #daa520;
200
+ --borderColor-danger-emphasis: #ff4500;
201
+ --borderColor-done-emphasis: #d4956a;
202
+ --greg-code-block-bg: #24292e;
203
+ --greg-code-line-highlight-color: color-mix(in srgb, #9198a1 28%, transparent);
204
+
205
+ /* Code diff markers (dark): tuned for high contrast like VitePress */
206
+ --greg-code-line-diff-add-symbol-color: #3fb950;
207
+ --greg-code-line-diff-remove-symbol-color: #f85149;
208
+ }
209
+
210
+ @mixin greg-light-markdown-vars {
211
+ --focus-outlineColor: #646cff;
212
+ --fgColor-default: #1a1a2e;
213
+ --fgColor-muted: #6e7681;
214
+ --fgColor-accent: #646cff;
215
+ --fgColor-success: #1a7f37;
216
+ --fgColor-attention: #9a6700;
217
+ --fgColor-danger: #cf222e;
218
+ --fgColor-done: #6f42c1;
219
+ --bgColor-default: var(--greg-background);
220
+ --bgColor-muted: #f5f5f5;
221
+ --bgColor-neutral-muted: var(--greg-code-background);
222
+ --bgColor-attention-muted: #fff8c5;
223
+ --borderColor-default: #d0d7de;
224
+ --borderColor-muted: #d0d7deb3;
225
+ --borderColor-neutral-muted: #d0d7deb3;
226
+ --borderColor-accent-emphasis: #646cff;
227
+ --borderColor-success-emphasis: #1a7f37;
228
+ --borderColor-attention-emphasis: #9a6700;
229
+ --borderColor-danger-emphasis: #cf222e;
230
+ --borderColor-done-emphasis: #6f42c1;
231
+ --greg-code-block-bg: #f8f8f8;
232
+ --greg-code-line-highlight-color: color-mix(in srgb, #59636e 18%, transparent);
233
+
234
+ /* Code diff markers (light): tuned for high contrast like VitePress */
235
+ --greg-code-line-diff-add-symbol-color: #1a7f37;
236
+ --greg-code-line-diff-remove-symbol-color: #cf222e;
237
+ }
238
+
@@ -0,0 +1,55 @@
1
+ /* ── TOC ─────────────────────────────────────────── */
2
+ .markdown-body .table-of-contents {
3
+ padding: 0.75rem 1.25rem;
4
+ margin-bottom: 1.5rem;
5
+ font-size: 0.875rem;
6
+ color: var(--greg-toc-color);
7
+
8
+ ul,
9
+ ol {
10
+ margin: 0 !important;
11
+ padding-inline-start: 1.25rem !important;
12
+ }
13
+
14
+ >ul,
15
+ >ol {
16
+ padding-inline-start: 0 !important;
17
+ }
18
+
19
+ li {
20
+ margin: 0.2rem 0;
21
+ line-height: 1.6;
22
+ }
23
+
24
+ a {
25
+ color: var(--greg-toc-link-color);
26
+ text-decoration: none;
27
+ font-weight: 500;
28
+ transition: color 0.15s;
29
+
30
+ &:hover {
31
+ color: var(--greg-toc-link-hover);
32
+ }
33
+ }
34
+
35
+ // Nested lists (h3, h4...) - indented and smaller
36
+ ul ul,
37
+ ol ol,
38
+ ul ol,
39
+ ol ul {
40
+ padding-inline-start: 1rem !important;
41
+ margin-top: 0.1rem;
42
+
43
+ a {
44
+ font-weight: 400;
45
+ font-size: 0.825rem;
46
+ color: var(--greg-toc-h3-color, var(--greg-toc-link-color));
47
+
48
+ &:hover {
49
+ color: var(--greg-toc-link-hover);
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+
@@ -0,0 +1,7 @@
1
+ .fit {
2
+ width: fit-content;
3
+ display: flex;
4
+ flex-flow: column nowrap;
5
+ gap: 1rem;
6
+ }
7
+
@@ -0,0 +1,9 @@
1
+ /* Domain-oriented stylesheet entry for MarkdownDocs. */
2
+ @use "./__theme.scss";
3
+ @use "./__markdown.scss";
4
+ @use "./__steps.scss";
5
+ @use "./__code.scss";
6
+ @use "./__scrollbar.scss";
7
+ @use "./__toc.scss";
8
+ @use "./__containers.scss";
9
+ @use "./__utilities.scss";
@@ -0,0 +1,42 @@
1
+ <div class="loader"></div>
2
+
3
+ <style>
4
+ .loader {
5
+ width: 75px;
6
+ aspect-ratio: 1;
7
+ display: grid;
8
+ }
9
+ .loader:before,
10
+ .loader:after {
11
+ content: "";
12
+ grid-area: 1/1;
13
+ width: 35px;
14
+ aspect-ratio: 1;
15
+ box-shadow: 0 0 0 3px #fff inset;
16
+ filter: drop-shadow(40px 40px 0 #fff);
17
+ animation: l8 2s infinite alternate;
18
+ }
19
+ .loader:after {
20
+ margin: 0 0 0 auto;
21
+ filter: drop-shadow(-40px 40px 0 #fff);
22
+ animation-delay: -1s;
23
+ }
24
+ @keyframes l8 {
25
+ 0%,
26
+ 10% {
27
+ border-radius: 0;
28
+ }
29
+ 30%,
30
+ 40% {
31
+ border-radius: 50% 0;
32
+ }
33
+ 60%,
34
+ 70% {
35
+ border-radius: 50%;
36
+ }
37
+ 90%,
38
+ 100% {
39
+ border-radius: 0 50%;
40
+ }
41
+ }
42
+ </style>
@@ -0,0 +1,146 @@
1
+ import { mdsvex, escapeSvelte } from 'mdsvex'
2
+ import rehypeSlug from 'rehype-slug';
3
+ import rehypeAutolinkHeadings from 'rehype-autolink-headings';
4
+ import { createHighlighter } from 'shiki';
5
+ import { rehypeTocPlaceholder } from './src/lib/MarkdownDocs/rehypeToc.js';
6
+ import { remarkContainers, rehypeContainers } from './src/lib/MarkdownDocs/remarkContainers.js';
7
+ import rehypeCodeGroup from './src/lib/MarkdownDocs/rehypeCodeGroup.js';
8
+ import rehypeCodeTitle from './src/lib/MarkdownDocs/rehypeCodeTitle.js';
9
+ import { remarkCodeMeta } from './src/lib/MarkdownDocs/remarkCodeMeta.js';
10
+ import { remarkImports } from './src/lib/MarkdownDocs/remarkImports.js';
11
+ import { remarkGlobalComponents } from './src/lib/MarkdownDocs/remarkGlobalComponents.js';
12
+ import { remarkCustomAnchors } from './src/lib/MarkdownDocs/remarkCustomAnchors.js';
13
+ import { remarkInlineAttrs } from './src/lib/MarkdownDocs/remarkInlineAttrs.js';
14
+ import { remarkEscapeSvelte } from './src/lib/MarkdownDocs/remarkEscapeSvelte.js';
15
+ import { remarkMathToHtml } from './src/lib/MarkdownDocs/remarkMathToHtml.js';
16
+ import { parseCodeDirectives, decorateHighlightedCodeHtml } from './src/lib/MarkdownDocs/codeDirectives.js';
17
+ import { normalizeCodeFenceInfo } from './src/lib/MarkdownDocs/codeFenceInfo.js';
18
+
19
+ // ── Greg config ────────────────────────────────────────────────────────────────
20
+ // Mirrors the VitePress convention: export default { markdown: { math: true } }
21
+ const gregConfig = {
22
+ markdown: {
23
+ /** Enable $…$ / $$…$$ math rendering via MathJax SVG. Default: false. */
24
+ math: false,
25
+ },
26
+ };
27
+ // ───────────────────────────────────────────────────────────────────────────────
28
+
29
+ const shikiThemes = {
30
+ light: 'github-light',
31
+ dark: 'github-dark',
32
+ };
33
+ const shikiDefaultLang = 'txt';
34
+ const markdownSourceRoot = process.cwd();
35
+ const markdownDocsDir = 'docs';
36
+ const shikiLangAliases = {
37
+ js: 'javascript',
38
+ ts: 'typescript',
39
+ sh: 'bash',
40
+ shell: 'bash',
41
+ zsh: 'bash',
42
+ yml: 'yaml',
43
+ md: 'markdown',
44
+ };
45
+
46
+ function parseFenceInfo(lang, metastring) {
47
+ const normalized = normalizeCodeFenceInfo(lang ?? '', metastring ?? '');
48
+ const normalizedLang = normalized.lang || shikiDefaultLang;
49
+ const meta = normalized.meta;
50
+ const titleMatch = meta.match(/\[([^\]]+)\]/);
51
+ const title = titleMatch?.[1]?.trim() ?? '';
52
+
53
+ return { lang: normalizedLang, title, meta };
54
+ }
55
+
56
+ function encodeAttribute(value) {
57
+ return String(value ?? '').replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
58
+ }
59
+
60
+ function injectCodeMetadata(html, lang, title) {
61
+ const langAttr = ` data-code-lang="${encodeAttribute(lang)}"`;
62
+ const titleAttr = title ? ` data-code-title="${encodeAttribute(title)}"` : '';
63
+ return html.replace('<pre', `<pre${langAttr}${titleAttr}`);
64
+ }
65
+
66
+ const highlighter = await createHighlighter({
67
+ themes: [shikiThemes.light, shikiThemes.dark],
68
+ langs: [
69
+ 'javascript',
70
+ 'typescript',
71
+ 'bash',
72
+ 'json',
73
+ 'html',
74
+ 'css',
75
+ 'yaml',
76
+ 'markdown',
77
+ 'svelte',
78
+ 'txt',
79
+ ],
80
+ });
81
+
82
+ /** @type {import('mdsvex').MdsvexOptions} */
83
+ const mdsvexOptions = {
84
+ highlight: {
85
+ highlighter: (code, lang = shikiDefaultLang, metastring = '') => {
86
+ const { lang: rawLang, title, meta } = parseFenceInfo(lang, metastring);
87
+ const directives = parseCodeDirectives(code, meta, rawLang);
88
+ const mappedLang = shikiLangAliases[rawLang] ?? rawLang;
89
+ const loadedLangs = highlighter.getLoadedLanguages();
90
+ const safeLang = loadedLangs.includes(mappedLang) ? mappedLang
91
+ : loadedLangs.includes(rawLang) ? rawLang
92
+ : shikiDefaultLang;
93
+ let shikiHtml = highlighter.codeToHtml(directives.cleanedCode, {
94
+ lang: safeLang,
95
+ themes: shikiThemes,
96
+ defaultColor: false,
97
+ });
98
+ shikiHtml = decorateHighlightedCodeHtml(shikiHtml, directives);
99
+ const html = escapeSvelte(
100
+ injectCodeMetadata(shikiHtml, mappedLang, title)
101
+ );
102
+ return `{@html \`${html}\` }`;
103
+ },
104
+ },
105
+ remarkPlugins: [
106
+ remarkInlineAttrs,
107
+ remarkGlobalComponents,
108
+ remarkCodeMeta,
109
+ remarkContainers,
110
+ [remarkImports, { sourceRoot: markdownSourceRoot, docsDir: markdownDocsDir }],
111
+ remarkCustomAnchors,
112
+ ...(gregConfig.markdown.math ? [remarkMathToHtml] : []),
113
+ remarkEscapeSvelte,
114
+ ],
115
+ rehypePlugins: [
116
+ rehypeSlug,
117
+ [
118
+ rehypeAutolinkHeadings,
119
+ {
120
+ behavior: 'prepend',
121
+ properties: {
122
+ class: 'header-anchor',
123
+ ariaHidden: 'true',
124
+ tabIndex: -1,
125
+ },
126
+ content: { type: 'text', value: '#' },
127
+ },
128
+ ],
129
+ rehypeContainers,
130
+ [rehypeCodeGroup, { output: 'static-tabs' }],
131
+ rehypeCodeTitle,
132
+ rehypeTocPlaceholder,
133
+ ],
134
+ }
135
+ /** @type {import("@sveltejs/vite-plugin-svelte").SvelteConfig} */
136
+ export default {
137
+ extensions: ['.svelte', '.svx', '.md'],
138
+ preprocess: mdsvex({ extensions: ['.svx', '.md'], ...mdsvexOptions }),
139
+ compilerOptions: {
140
+ // Use injected CSS so that component styles are included in JS output.
141
+ // This avoids virtual CSS module loading failures when the package
142
+ // is consumed from node_modules (vite-plugin-svelte race condition).
143
+ css: 'injected',
144
+ },
145
+ };
146
+