svelte-docsmith 0.7.0 → 0.9.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 (61) hide show
  1. package/dist/buildtime/changelog.d.ts +20 -0
  2. package/dist/buildtime/changelog.js +74 -0
  3. package/dist/buildtime/fence-meta.d.ts +20 -0
  4. package/dist/buildtime/fence-meta.js +48 -0
  5. package/dist/buildtime/markdown-layout.svelte.d.ts +3 -0
  6. package/dist/buildtime/preprocess.d.ts +13 -0
  7. package/dist/buildtime/preprocess.js +77 -17
  8. package/dist/buildtime/twoslash.d.ts +26 -0
  9. package/dist/buildtime/twoslash.js +40 -0
  10. package/dist/buildtime/vite/collect.js +31 -3
  11. package/dist/buildtime/vite/git.d.ts +7 -0
  12. package/dist/buildtime/vite/git.js +32 -0
  13. package/dist/buildtime/vite/index.d.ts +13 -0
  14. package/dist/buildtime/vite/index.js +16 -0
  15. package/dist/buildtime/vite/releases.d.ts +12 -0
  16. package/dist/buildtime/vite/releases.js +57 -0
  17. package/dist/components/changelog/changelog-entry.svelte +90 -0
  18. package/dist/components/changelog/changelog-entry.svelte.d.ts +7 -0
  19. package/dist/components/changelog/changelog.svelte +56 -0
  20. package/dist/components/changelog/changelog.svelte.d.ts +14 -0
  21. package/dist/components/chrome/announcement-bar.svelte +188 -0
  22. package/dist/components/chrome/announcement-bar.svelte.d.ts +7 -0
  23. package/dist/components/docs/mermaid.svelte +213 -0
  24. package/dist/components/docs/mermaid.svelte.d.ts +6 -0
  25. package/dist/components/docs/tabs-sync.svelte.d.ts +10 -0
  26. package/dist/components/docs/tabs-sync.svelte.js +59 -0
  27. package/dist/components/docs/tabs.svelte +42 -6
  28. package/dist/components/docs/tabs.svelte.d.ts +6 -0
  29. package/dist/components/landing/action.svelte +50 -0
  30. package/dist/components/landing/action.svelte.d.ts +13 -0
  31. package/dist/components/landing/cta.svelte +52 -0
  32. package/dist/components/landing/cta.svelte.d.ts +13 -0
  33. package/dist/components/landing/feature-grid.svelte +51 -0
  34. package/dist/components/landing/feature-grid.svelte.d.ts +19 -0
  35. package/dist/components/landing/feature.svelte +33 -0
  36. package/dist/components/landing/feature.svelte.d.ts +11 -0
  37. package/dist/components/landing/hero.svelte +70 -0
  38. package/dist/components/landing/hero.svelte.d.ts +19 -0
  39. package/dist/components/layouts/docs-header.svelte +36 -3
  40. package/dist/components/layouts/docs-shell.svelte +14 -8
  41. package/dist/components/layouts/docs-sidebar.svelte +52 -18
  42. package/dist/components/layouts/docs-sidebar.svelte.d.ts +1 -1
  43. package/dist/components/markdown/pre.svelte +238 -8
  44. package/dist/components/markdown/pre.svelte.d.ts +6 -0
  45. package/dist/core/changelog.d.ts +31 -0
  46. package/dist/core/changelog.js +7 -0
  47. package/dist/core/config.d.ts +21 -0
  48. package/dist/core/config.js +19 -0
  49. package/dist/core/content.d.ts +6 -1
  50. package/dist/core/index.d.ts +2 -2
  51. package/dist/core/index.js +1 -1
  52. package/dist/core/nav.d.ts +23 -6
  53. package/dist/core/nav.js +94 -15
  54. package/dist/fallbacks/changelog.d.ts +10 -0
  55. package/dist/fallbacks/changelog.js +3 -0
  56. package/dist/generate/feed.d.ts +35 -0
  57. package/dist/generate/feed.js +80 -0
  58. package/dist/index.d.ts +8 -0
  59. package/dist/index.js +9 -0
  60. package/dist/theme.css +32 -0
  61. package/package.json +21 -2
@@ -0,0 +1,80 @@
1
+ const escapeXml = (s) => s.replace(/[&<>'"]/g, (c) => {
2
+ switch (c) {
3
+ case '&':
4
+ return '&amp;';
5
+ case '<':
6
+ return '&lt;';
7
+ case '>':
8
+ return '&gt;';
9
+ case "'":
10
+ return '&apos;';
11
+ default:
12
+ return '&quot;';
13
+ }
14
+ });
15
+ /** A release's entries flattened to plain text, grouped by kind. */
16
+ function summarise(release) {
17
+ return release.groups
18
+ .map((group) => `${group.kind}\n\n${group.items.map((item) => `- ${item}`).join('\n\n')}`)
19
+ .join('\n\n');
20
+ }
21
+ /**
22
+ * Build an Atom feed body from parsed changelog releases. Framework-agnostic:
23
+ * wire it into a SvelteKit `src/routes/changelog.xml/+server.ts` over the
24
+ * generated `svelte-docsmith/changelog` index.
25
+ *
26
+ * ```ts
27
+ * import { releases } from 'svelte-docsmith/changelog';
28
+ * import { generateFeed } from 'svelte-docsmith';
29
+ *
30
+ * export const prerender = true;
31
+ * export function GET() {
32
+ * const body = generateFeed(releases, {
33
+ * url: 'https://my-docs.dev',
34
+ * title: 'My Library'
35
+ * });
36
+ * return new Response(body, { headers: { 'content-type': 'application/atom+xml' } });
37
+ * }
38
+ * ```
39
+ *
40
+ * Atom rather than RSS because it requires an unambiguous per-entry id and
41
+ * update timestamp, which is exactly what a version and its release date give.
42
+ */
43
+ export function generateFeed(releases, site) {
44
+ const origin = site.url.replace(/\/$/, '');
45
+ const path = site.path ?? '/changelog';
46
+ const feedUrl = `${origin}${path}.xml`;
47
+ // A feed needs an updated timestamp; fall back to now when no release
48
+ // carries a date, so the document stays valid.
49
+ const updated = releases.find((r) => r.date)?.date ?? new Date().toISOString();
50
+ const entries = releases
51
+ .map((release) => {
52
+ const link = release.path
53
+ ? `${origin}${release.path}`
54
+ : `${origin}${path}#${release.version}`;
55
+ return [
56
+ '\t<entry>',
57
+ `\t\t<title>${escapeXml(release.version)}</title>`,
58
+ `\t\t<id>${escapeXml(link)}</id>`,
59
+ `\t\t<link href="${escapeXml(link)}" />`,
60
+ `\t\t<updated>${escapeXml(release.date ?? updated)}</updated>`,
61
+ `\t\t<content type="text">${escapeXml(summarise(release))}</content>`,
62
+ '\t</entry>'
63
+ ].join('\n');
64
+ })
65
+ .join('\n');
66
+ return [
67
+ '<?xml version="1.0" encoding="utf-8"?>',
68
+ '<feed xmlns="http://www.w3.org/2005/Atom">',
69
+ `\t<title>${escapeXml(site.title)}</title>`,
70
+ site.description ? `\t<subtitle>${escapeXml(site.description)}</subtitle>` : '',
71
+ `\t<id>${escapeXml(feedUrl)}</id>`,
72
+ `\t<link href="${escapeXml(origin + path)}" />`,
73
+ `\t<link rel="self" href="${escapeXml(feedUrl)}" />`,
74
+ `\t<updated>${escapeXml(updated)}</updated>`,
75
+ entries,
76
+ '</feed>'
77
+ ]
78
+ .filter(Boolean)
79
+ .join('\n');
80
+ }
package/dist/index.d.ts CHANGED
@@ -18,7 +18,15 @@ export { default as FileTree } from './components/docs/file-tree.svelte';
18
18
  export { default as FileTreeItem } from './components/docs/file-tree-item.svelte';
19
19
  export { default as PropsTable } from './components/docs/props-table.svelte';
20
20
  export { default as Prop } from './components/docs/prop.svelte';
21
+ export { default as Hero } from './components/landing/hero.svelte';
22
+ export { default as FeatureGrid } from './components/landing/feature-grid.svelte';
23
+ export { default as Feature } from './components/landing/feature.svelte';
24
+ export { default as CTA } from './components/landing/cta.svelte';
25
+ export { default as Action } from './components/landing/action.svelte';
21
26
  export { defineConfig, type DocsmithConfig, type DocsContentItem, type SearchDoc, type LlmsDoc } from './core/index.js';
22
27
  export { createSearchEngine, type SearchEngine, type SearchResult } from './search/create-search.js';
23
28
  export { generateSitemap, type SitemapEntry } from './generate/sitemap.js';
24
29
  export { generateLlmsTxt, generateLlmsFullTxt, type LlmsSite } from './generate/llms.js';
30
+ export { default as Changelog } from './components/changelog/changelog.svelte';
31
+ export type { ChangelogRelease, ChangelogGroup } from './core/changelog.js';
32
+ export { generateFeed, type FeedSite } from './generate/feed.js';
package/dist/index.js CHANGED
@@ -23,6 +23,12 @@ export { default as FileTree } from './components/docs/file-tree.svelte';
23
23
  export { default as FileTreeItem } from './components/docs/file-tree-item.svelte';
24
24
  export { default as PropsTable } from './components/docs/props-table.svelte';
25
25
  export { default as Prop } from './components/docs/prop.svelte';
26
+ // Landing page sections (for the marketing page in front of your docs)
27
+ export { default as Hero } from './components/landing/hero.svelte';
28
+ export { default as FeatureGrid } from './components/landing/feature-grid.svelte';
29
+ export { default as Feature } from './components/landing/feature.svelte';
30
+ export { default as CTA } from './components/landing/cta.svelte';
31
+ export { default as Action } from './components/landing/action.svelte';
26
32
  // Config
27
33
  export { defineConfig } from './core/index.js';
28
34
  // Search engine (framework-agnostic; for building a custom search UI over the
@@ -33,3 +39,6 @@ export { generateSitemap } from './generate/sitemap.js';
33
39
  // llms.txt (framework-agnostic; wire into `llms.txt/+server.ts` and
34
40
  // `llms-full.txt/+server.ts` over the generated `svelte-docsmith/llms` index)
35
41
  export { generateLlmsTxt, generateLlmsFullTxt } from './generate/llms.js';
42
+ // Changelog (the generated `svelte-docsmith/changelog` index, plus its feed)
43
+ export { default as Changelog } from './components/changelog/changelog.svelte';
44
+ export { generateFeed } from './generate/feed.js';
package/dist/theme.css CHANGED
@@ -224,3 +224,35 @@ html.dark .shiki span {
224
224
  html.dark .shiki {
225
225
  background-color: var(--shiki-dark-bg, transparent) !important;
226
226
  }
227
+
228
+ /*
229
+ * Mermaid loading skeleton. Global (not scoped) because it is rendered both by
230
+ * the server-side placeholder the preprocessor emits and by the client
231
+ * component before the diagram is ready — sharing one rule keeps their height
232
+ * identical, so the space is reserved from first paint and the diagram no longer
233
+ * shifts the page in as it loads.
234
+ */
235
+ .docsmith-mermaid-skeleton {
236
+ margin: 1.5rem 0;
237
+ min-height: 8rem;
238
+ border-radius: var(--radius, 0.75rem);
239
+ border: 1px solid var(--border);
240
+ background: color-mix(in oklch, var(--muted) 45%, transparent);
241
+ animation: docsmith-mermaid-pulse 1.6s ease-in-out infinite;
242
+ }
243
+
244
+ @keyframes docsmith-mermaid-pulse {
245
+ 0%,
246
+ 100% {
247
+ opacity: 0.55;
248
+ }
249
+ 50% {
250
+ opacity: 1;
251
+ }
252
+ }
253
+
254
+ @media (prefers-reduced-motion: reduce) {
255
+ .docsmith-mermaid-skeleton {
256
+ animation: none;
257
+ }
258
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte-docsmith",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "A framework for building beautiful documentation sites with Svelte.",
5
5
  "author": {
6
6
  "name": "George Daskalakis",
@@ -43,6 +43,15 @@
43
43
  "types": "./dist/fallbacks/llms.d.ts",
44
44
  "default": "./dist/fallbacks/llms.js"
45
45
  },
46
+ "./changelog": {
47
+ "types": "./dist/fallbacks/changelog.d.ts",
48
+ "default": "./dist/fallbacks/changelog.js"
49
+ },
50
+ "./mermaid": {
51
+ "types": "./dist/components/docs/mermaid.svelte.d.ts",
52
+ "svelte": "./dist/components/docs/mermaid.svelte",
53
+ "default": "./dist/components/docs/mermaid.svelte"
54
+ },
46
55
  "./theme.css": "./dist/theme.css",
47
56
  "./themes/*.css": "./dist/themes/*.css",
48
57
  "./package.json": "./package.json"
@@ -57,11 +66,18 @@
57
66
  "license": "MIT",
58
67
  "peerDependencies": {
59
68
  "@sveltejs/kit": "^2.16.0",
69
+ "mermaid": "^10.0.0 || ^11.0.0",
60
70
  "svelte": "^5.0.0",
61
71
  "tailwindcss": "^4.0.0"
62
72
  },
73
+ "peerDependenciesMeta": {
74
+ "mermaid": {
75
+ "optional": true
76
+ }
77
+ },
63
78
  "devDependencies": {
64
79
  "@internationalized/date": "^3.12.2",
80
+ "@shikijs/twoslash": "3.23.0",
65
81
  "@sveltejs/adapter-auto": "^7.0.1",
66
82
  "@sveltejs/adapter-vercel": "^6.3.4",
67
83
  "@sveltejs/kit": "^2.69.1",
@@ -73,12 +89,14 @@
73
89
  "@types/node": "^22",
74
90
  "@vitest/coverage-v8": "4.1.9",
75
91
  "jsdom": "^26.0.0",
92
+ "mermaid": "^11.16.0",
76
93
  "publint": "^0.3.2",
77
94
  "shadcn-svelte": "^1.3.0",
78
95
  "svelte": "^5.56.4",
79
96
  "svelte-check": "^4.7.1",
80
97
  "tailwindcss": "^4.3.2",
81
- "typescript": "^5.0.0",
98
+ "twoslash-svelte": "0.3.9",
99
+ "typescript": "^5.8.3",
82
100
  "vite": "^8.1.3",
83
101
  "vitest": "^4.1.9"
84
102
  },
@@ -94,6 +112,7 @@
94
112
  "flexsearch": "^0.8.212",
95
113
  "github-slugger": "^2.0.0",
96
114
  "js-yaml": "^4.1.0",
115
+ "marked": "^18.0.6",
97
116
  "mdsvex": "^0.12.3",
98
117
  "mode-watcher": "^1.0.2",
99
118
  "rehype-slug": "^6.0.0",