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.
- package/dist/buildtime/changelog.d.ts +20 -0
- package/dist/buildtime/changelog.js +74 -0
- package/dist/buildtime/fence-meta.d.ts +20 -0
- package/dist/buildtime/fence-meta.js +48 -0
- package/dist/buildtime/markdown-layout.svelte.d.ts +3 -0
- package/dist/buildtime/preprocess.d.ts +13 -0
- package/dist/buildtime/preprocess.js +77 -17
- package/dist/buildtime/twoslash.d.ts +26 -0
- package/dist/buildtime/twoslash.js +40 -0
- package/dist/buildtime/vite/collect.js +31 -3
- package/dist/buildtime/vite/git.d.ts +7 -0
- package/dist/buildtime/vite/git.js +32 -0
- package/dist/buildtime/vite/index.d.ts +13 -0
- package/dist/buildtime/vite/index.js +16 -0
- package/dist/buildtime/vite/releases.d.ts +12 -0
- package/dist/buildtime/vite/releases.js +57 -0
- package/dist/components/changelog/changelog-entry.svelte +90 -0
- package/dist/components/changelog/changelog-entry.svelte.d.ts +7 -0
- package/dist/components/changelog/changelog.svelte +56 -0
- package/dist/components/changelog/changelog.svelte.d.ts +14 -0
- package/dist/components/chrome/announcement-bar.svelte +188 -0
- package/dist/components/chrome/announcement-bar.svelte.d.ts +7 -0
- package/dist/components/docs/mermaid.svelte +213 -0
- package/dist/components/docs/mermaid.svelte.d.ts +6 -0
- package/dist/components/docs/tabs-sync.svelte.d.ts +10 -0
- package/dist/components/docs/tabs-sync.svelte.js +59 -0
- package/dist/components/docs/tabs.svelte +42 -6
- package/dist/components/docs/tabs.svelte.d.ts +6 -0
- package/dist/components/landing/action.svelte +50 -0
- package/dist/components/landing/action.svelte.d.ts +13 -0
- package/dist/components/landing/cta.svelte +52 -0
- package/dist/components/landing/cta.svelte.d.ts +13 -0
- package/dist/components/landing/feature-grid.svelte +51 -0
- package/dist/components/landing/feature-grid.svelte.d.ts +19 -0
- package/dist/components/landing/feature.svelte +33 -0
- package/dist/components/landing/feature.svelte.d.ts +11 -0
- package/dist/components/landing/hero.svelte +70 -0
- package/dist/components/landing/hero.svelte.d.ts +19 -0
- package/dist/components/layouts/docs-header.svelte +36 -3
- package/dist/components/layouts/docs-shell.svelte +14 -8
- package/dist/components/layouts/docs-sidebar.svelte +52 -18
- package/dist/components/layouts/docs-sidebar.svelte.d.ts +1 -1
- package/dist/components/markdown/pre.svelte +238 -8
- package/dist/components/markdown/pre.svelte.d.ts +6 -0
- package/dist/core/changelog.d.ts +31 -0
- package/dist/core/changelog.js +7 -0
- package/dist/core/config.d.ts +21 -0
- package/dist/core/config.js +19 -0
- package/dist/core/content.d.ts +6 -1
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +1 -1
- package/dist/core/nav.d.ts +23 -6
- package/dist/core/nav.js +94 -15
- package/dist/fallbacks/changelog.d.ts +10 -0
- package/dist/fallbacks/changelog.js +3 -0
- package/dist/generate/feed.d.ts +35 -0
- package/dist/generate/feed.js +80 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +9 -0
- package/dist/theme.css +32 -0
- package/package.json +21 -2
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
const escapeXml = (s) => s.replace(/[&<>'"]/g, (c) => {
|
|
2
|
+
switch (c) {
|
|
3
|
+
case '&':
|
|
4
|
+
return '&';
|
|
5
|
+
case '<':
|
|
6
|
+
return '<';
|
|
7
|
+
case '>':
|
|
8
|
+
return '>';
|
|
9
|
+
case "'":
|
|
10
|
+
return ''';
|
|
11
|
+
default:
|
|
12
|
+
return '"';
|
|
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.
|
|
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
|
-
"
|
|
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",
|