@aureuma/svelta 0.0.1 → 0.1.1
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/README.md +1 -2
- package/package.json +35 -3
- package/packages/core/CHANGELOG.md +18 -0
- package/packages/core/README.md +11 -0
- package/packages/{blogkit → core}/dist/index.d.ts +1 -1
- package/packages/core/dist/server/blog.d.ts +106 -0
- package/packages/core/dist/server/blog.js +470 -0
- package/packages/core/dist/server/index.d.ts +1 -0
- package/packages/core/dist/server/index.js +1 -0
- package/packages/{blogkit → core}/dist/theme/store.js +1 -1
- package/packages/{blogkit → core}/dist/types/blog.d.ts +10 -0
- package/.changeset/README.md +0 -8
- package/.changeset/config.json +0 -14
- package/.changeset/publish-blogkit.md +0 -5
- package/.github/workflows/release.yml +0 -65
- package/docs/mintlify-blog-study.md +0 -697
- package/packages/blogkit/CHANGELOG.md +0 -6
- package/packages/blogkit/README.md +0 -93
- package/packages/blogkit/dist/server/blog.d.ts +0 -39
- package/packages/blogkit/dist/server/blog.js +0 -222
- package/packages/blogkit/dist/server/index.d.ts +0 -1
- package/packages/blogkit/dist/server/index.js +0 -1
- package/packages/blogkit/package.json +0 -66
- package/packages/blogkit/src/lib/components/blog/Avatar.svelte +0 -15
- package/packages/blogkit/src/lib/components/blog/BackLink.svelte +0 -23
- package/packages/blogkit/src/lib/components/blog/BlogCard.svelte +0 -37
- package/packages/blogkit/src/lib/components/blog/BlogHeroCard.svelte +0 -36
- package/packages/blogkit/src/lib/components/blog/Container.svelte +0 -8
- package/packages/blogkit/src/lib/components/blog/ImageLightbox.svelte +0 -58
- package/packages/blogkit/src/lib/components/blog/MorePosts.svelte +0 -15
- package/packages/blogkit/src/lib/components/blog/ShareButtons.svelte +0 -113
- package/packages/blogkit/src/lib/components/blog/SummaryCard.svelte +0 -11
- package/packages/blogkit/src/lib/components/blog/TagTabs.svelte +0 -32
- package/packages/blogkit/src/lib/index.ts +0 -15
- package/packages/blogkit/src/lib/server/blog.ts +0 -264
- package/packages/blogkit/src/lib/server/index.ts +0 -2
- package/packages/blogkit/src/lib/theme/ThemeSwitcher.svelte +0 -34
- package/packages/blogkit/src/lib/theme/index.ts +0 -3
- package/packages/blogkit/src/lib/theme/store.ts +0 -64
- package/packages/blogkit/src/lib/types/blog.ts +0 -36
- package/packages/blogkit/svelte.config.js +0 -8
- package/packages/blogkit/tsconfig.json +0 -5
- package/playwright.config.ts +0 -24
- package/postcss.config.cjs +0 -6
- package/src/app.css +0 -146
- package/src/app.d.ts +0 -13
- package/src/app.html +0 -26
- package/src/content/blog/ai-summary-cards-with-frontmatter.md +0 -32
- package/src/content/blog/announcing-svelta-blog.md +0 -19
- package/src/content/blog/best-practices-ship-with-checklists.md +0 -26
- package/src/content/blog/building-a-mintlify-inspired-blog.md +0 -49
- package/src/content/blog/design-tokens-that-scale.md +0 -47
- package/src/content/blog/for-founders-why-speed-matters.md +0 -23
- package/src/content/blog/infinite-scroll-with-intersection-observer.md +0 -37
- package/src/content/blog/markdown-kitchen-sink.md +0 -101
- package/src/content/blog/markdown-pipeline-mdsvex-shiki.md +0 -39
- package/src/content/blog/rss-feeds-that-actually-work.md +0 -25
- package/src/content/blog/tag-tabs-and-mobile-fade-masks.md +0 -25
- package/src/lib/assets/favicon.svg +0 -1
- package/src/lib/components/site/SiteFooter.svelte +0 -24
- package/src/lib/components/site/SiteHeader.svelte +0 -36
- package/src/lib/content/authors.ts +0 -28
- package/src/lib/index.ts +0 -1
- package/src/lib/server/blog.ts +0 -22
- package/src/lib/server/rss.ts +0 -58
- package/src/lib/server/seo.ts +0 -31
- package/src/lib/stores/theme.ts +0 -10
- package/src/lib/types/blog.ts +0 -1
- package/src/routes/+layout.svelte +0 -31
- package/src/routes/+page.svelte +0 -44
- package/src/routes/blog/+page.server.ts +0 -28
- package/src/routes/blog/+page.svelte +0 -122
- package/src/routes/blog/[slug]/+page.server.ts +0 -39
- package/src/routes/blog/[slug]/+page.svelte +0 -118
- package/src/routes/blog/posts.json/+server.ts +0 -32
- package/src/routes/feed.xml/+server.ts +0 -21
- package/static/blog/authors/alex.svg +0 -13
- package/static/blog/authors/maria.svg +0 -13
- package/static/blog/authors/shawn.svg +0 -13
- package/static/blog/covers/ai-summary.svg +0 -38
- package/static/blog/covers/design-tokens.svg +0 -37
- package/static/blog/covers/infinite-scroll.svg +0 -38
- package/static/blog/covers/kitchen-sink.svg +0 -36
- package/static/blog/covers/markdown-pipeline.svg +0 -41
- package/static/blog/covers/mintlify-style.svg +0 -35
- package/static/blog/covers/rss.svg +0 -34
- package/static/robots.txt +0 -3
- package/svelte.config.js +0 -70
- package/tailwind.config.cjs +0 -133
- package/tests/blog.spec.ts +0 -63
- package/tsconfig.json +0 -21
- package/vite.config.ts +0 -14
- /package/packages/{blogkit → core}/LICENSE +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/Avatar.svelte +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/Avatar.svelte.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/BackLink.svelte +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/BackLink.svelte.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/BlogCard.svelte +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/BlogCard.svelte.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/BlogHeroCard.svelte +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/BlogHeroCard.svelte.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/Container.svelte +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/Container.svelte.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/ImageLightbox.svelte +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/ImageLightbox.svelte.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/MorePosts.svelte +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/MorePosts.svelte.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/ShareButtons.svelte +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/ShareButtons.svelte.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/SummaryCard.svelte +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/SummaryCard.svelte.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/TagTabs.svelte +0 -0
- /package/packages/{blogkit → core}/dist/components/blog/TagTabs.svelte.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/index.js +0 -0
- /package/packages/{blogkit → core}/dist/theme/ThemeSwitcher.svelte +0 -0
- /package/packages/{blogkit → core}/dist/theme/ThemeSwitcher.svelte.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/theme/index.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/theme/index.js +0 -0
- /package/packages/{blogkit → core}/dist/theme/store.d.ts +0 -0
- /package/packages/{blogkit → core}/dist/types/blog.js +0 -0
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0" stop-color="#0b1220"/>
|
|
5
|
-
<stop offset="1" stop-color="#111827"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
<radialGradient id="g1" cx="50%" cy="40%" r="60%">
|
|
8
|
-
<stop offset="0" stop-color="rgba(167,139,250,0.50)"/>
|
|
9
|
-
<stop offset="1" stop-color="rgba(167,139,250,0)"/>
|
|
10
|
-
</radialGradient>
|
|
11
|
-
<radialGradient id="g2" cx="20%" cy="80%" r="60%">
|
|
12
|
-
<stop offset="0" stop-color="rgba(34,197,94,0.45)"/>
|
|
13
|
-
<stop offset="1" stop-color="rgba(34,197,94,0)"/>
|
|
14
|
-
</radialGradient>
|
|
15
|
-
</defs>
|
|
16
|
-
|
|
17
|
-
<rect width="1600" height="900" fill="url(#bg)"/>
|
|
18
|
-
<rect width="1600" height="900" fill="url(#g1)"/>
|
|
19
|
-
<rect width="1600" height="900" fill="url(#g2)"/>
|
|
20
|
-
|
|
21
|
-
<rect x="260" y="220" width="1080" height="460" rx="48" fill="rgba(255,255,255,0.08)" stroke="rgba(255,255,255,0.18)"/>
|
|
22
|
-
|
|
23
|
-
<g>
|
|
24
|
-
<rect x="320" y="280" width="180" height="30" rx="15" fill="rgba(255,255,255,0.14)"/>
|
|
25
|
-
<rect x="320" y="330" width="520" height="16" rx="8" fill="rgba(255,255,255,0.22)"/>
|
|
26
|
-
<rect x="320" y="360" width="720" height="16" rx="8" fill="rgba(255,255,255,0.18)"/>
|
|
27
|
-
<rect x="320" y="390" width="640" height="16" rx="8" fill="rgba(255,255,255,0.18)"/>
|
|
28
|
-
<rect x="320" y="450" width="900" height="14" rx="7" fill="rgba(255,255,255,0.14)"/>
|
|
29
|
-
<rect x="320" y="476" width="820" height="14" rx="7" fill="rgba(255,255,255,0.14)"/>
|
|
30
|
-
<rect x="320" y="502" width="740" height="14" rx="7" fill="rgba(255,255,255,0.14)"/>
|
|
31
|
-
</g>
|
|
32
|
-
|
|
33
|
-
<g opacity="0.9">
|
|
34
|
-
<circle cx="1200" cy="320" r="54" fill="rgba(255,255,255,0.08)"/>
|
|
35
|
-
<path d="M1186 320h28M1200 306v28" stroke="rgba(255,255,255,0.55)" stroke-width="6" stroke-linecap="round"/>
|
|
36
|
-
</g>
|
|
37
|
-
</svg>
|
|
38
|
-
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0" stop-color="#f8fafc"/>
|
|
5
|
-
<stop offset="1" stop-color="#eef2ff"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
<linearGradient id="chip" x1="0" y1="0" x2="1" y2="1">
|
|
8
|
-
<stop offset="0" stop-color="#22c55e"/>
|
|
9
|
-
<stop offset="1" stop-color="#a78bfa"/>
|
|
10
|
-
</linearGradient>
|
|
11
|
-
</defs>
|
|
12
|
-
|
|
13
|
-
<rect width="1600" height="900" fill="url(#bg)"/>
|
|
14
|
-
|
|
15
|
-
<g opacity="0.18">
|
|
16
|
-
<circle cx="420" cy="260" r="220" fill="#22c55e"/>
|
|
17
|
-
<circle cx="1250" cy="520" r="320" fill="#a78bfa"/>
|
|
18
|
-
</g>
|
|
19
|
-
|
|
20
|
-
<g>
|
|
21
|
-
<rect x="220" y="210" width="520" height="420" rx="36" fill="rgba(15,23,42,0.06)"/>
|
|
22
|
-
<rect x="860" y="270" width="520" height="360" rx="36" fill="rgba(15,23,42,0.06)"/>
|
|
23
|
-
</g>
|
|
24
|
-
|
|
25
|
-
<g fill="rgba(15,23,42,0.10)">
|
|
26
|
-
<rect x="270" y="260" width="220" height="44" rx="22"/>
|
|
27
|
-
<rect x="270" y="320" width="280" height="14" rx="7"/>
|
|
28
|
-
<rect x="270" y="350" width="320" height="14" rx="7"/>
|
|
29
|
-
<rect x="270" y="380" width="250" height="14" rx="7"/>
|
|
30
|
-
|
|
31
|
-
<rect x="910" y="320" width="260" height="44" rx="22" fill="url(#chip)"/>
|
|
32
|
-
<rect x="910" y="385" width="340" height="14" rx="7"/>
|
|
33
|
-
<rect x="910" y="415" width="300" height="14" rx="7"/>
|
|
34
|
-
<rect x="910" y="445" width="220" height="14" rx="7"/>
|
|
35
|
-
</g>
|
|
36
|
-
</svg>
|
|
37
|
-
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0" stop-color="#0f172a"/>
|
|
5
|
-
<stop offset="1" stop-color="#0b1220"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
<linearGradient id="acc" x1="0" y1="0" x2="1" y2="0">
|
|
8
|
-
<stop offset="0" stop-color="#22c55e"/>
|
|
9
|
-
<stop offset="1" stop-color="#38bdf8"/>
|
|
10
|
-
</linearGradient>
|
|
11
|
-
</defs>
|
|
12
|
-
|
|
13
|
-
<rect width="1600" height="900" fill="url(#bg)"/>
|
|
14
|
-
|
|
15
|
-
<g opacity="0.18">
|
|
16
|
-
<circle cx="420" cy="260" r="240" fill="#22c55e"/>
|
|
17
|
-
<circle cx="1220" cy="680" r="280" fill="#38bdf8"/>
|
|
18
|
-
</g>
|
|
19
|
-
|
|
20
|
-
<g fill="rgba(255,255,255,0.10)">
|
|
21
|
-
<rect x="260" y="200" width="1080" height="84" rx="42"/>
|
|
22
|
-
<rect x="260" y="320" width="1080" height="84" rx="42"/>
|
|
23
|
-
<rect x="260" y="440" width="1080" height="84" rx="42"/>
|
|
24
|
-
<rect x="260" y="560" width="1080" height="84" rx="42"/>
|
|
25
|
-
<rect x="260" y="680" width="1080" height="84" rx="42"/>
|
|
26
|
-
</g>
|
|
27
|
-
|
|
28
|
-
<g>
|
|
29
|
-
<rect x="300" y="236" width="420" height="12" rx="6" fill="rgba(255,255,255,0.22)"/>
|
|
30
|
-
<rect x="300" y="356" width="560" height="12" rx="6" fill="rgba(255,255,255,0.22)"/>
|
|
31
|
-
<rect x="300" y="476" width="520" height="12" rx="6" fill="rgba(255,255,255,0.22)"/>
|
|
32
|
-
<rect x="300" y="596" width="680" height="12" rx="6" fill="rgba(255,255,255,0.22)"/>
|
|
33
|
-
<rect x="300" y="716" width="460" height="12" rx="6" fill="rgba(255,255,255,0.22)"/>
|
|
34
|
-
</g>
|
|
35
|
-
|
|
36
|
-
<path d="M1240 240c0 0-20 110-140 120s-160 120-160 120" fill="none" stroke="url(#acc)" stroke-width="10" stroke-linecap="round" opacity="0.75"/>
|
|
37
|
-
</svg>
|
|
38
|
-
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
<svg width="1200" height="630" viewBox="0 0 1200 630" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1200" y2="630" gradientUnits="userSpaceOnUse">
|
|
4
|
-
<stop offset="0" stop-color="#0B1020"/>
|
|
5
|
-
<stop offset="1" stop-color="#0F2A1B"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
<linearGradient id="card" x1="0" y1="0" x2="1" y2="1">
|
|
8
|
-
<stop offset="0" stop-color="#FFFFFF" stop-opacity="0.10"/>
|
|
9
|
-
<stop offset="1" stop-color="#FFFFFF" stop-opacity="0.04"/>
|
|
10
|
-
</linearGradient>
|
|
11
|
-
<filter id="shadow" x="-30" y="-30" width="1260" height="690" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
|
12
|
-
<feDropShadow dx="0" dy="18" stdDeviation="24" flood-color="#000000" flood-opacity="0.35"/>
|
|
13
|
-
</filter>
|
|
14
|
-
</defs>
|
|
15
|
-
|
|
16
|
-
<rect width="1200" height="630" fill="url(#bg)"/>
|
|
17
|
-
|
|
18
|
-
<g filter="url(#shadow)">
|
|
19
|
-
<rect x="120" y="126" width="960" height="378" rx="36" fill="url(#card)" stroke="#FFFFFF" stroke-opacity="0.12"/>
|
|
20
|
-
</g>
|
|
21
|
-
|
|
22
|
-
<circle cx="240" cy="252" r="48" fill="#34D399" fill-opacity="0.22"/>
|
|
23
|
-
<circle cx="316" cy="280" r="14" fill="#34D399" fill-opacity="0.55"/>
|
|
24
|
-
|
|
25
|
-
<path d="M240 360H960" stroke="#FFFFFF" stroke-opacity="0.10" stroke-width="2"/>
|
|
26
|
-
<path d="M240 400H840" stroke="#FFFFFF" stroke-opacity="0.08" stroke-width="2"/>
|
|
27
|
-
<path d="M240 440H900" stroke="#FFFFFF" stroke-opacity="0.06" stroke-width="2"/>
|
|
28
|
-
|
|
29
|
-
<text x="240" y="332" fill="#FFFFFF" fill-opacity="0.92" font-family="ui-sans-serif, system-ui" font-size="54" font-weight="700" letter-spacing="-0.8">
|
|
30
|
-
Markdown Kitchen Sink
|
|
31
|
-
</text>
|
|
32
|
-
<text x="240" y="520" fill="#FFFFFF" fill-opacity="0.70" font-family="ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace" font-size="18" letter-spacing="0.6">
|
|
33
|
-
tables • lists • code • quotes • images
|
|
34
|
-
</text>
|
|
35
|
-
</svg>
|
|
36
|
-
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0" stop-color="#0b1220"/>
|
|
5
|
-
<stop offset="1" stop-color="#0f172a"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
<linearGradient id="acc" x1="0" y1="0" x2="1" y2="0">
|
|
8
|
-
<stop offset="0" stop-color="#38bdf8"/>
|
|
9
|
-
<stop offset="1" stop-color="#22c55e"/>
|
|
10
|
-
</linearGradient>
|
|
11
|
-
</defs>
|
|
12
|
-
|
|
13
|
-
<rect width="1600" height="900" fill="url(#bg)"/>
|
|
14
|
-
<g opacity="0.18">
|
|
15
|
-
<circle cx="460" cy="520" r="320" fill="#38bdf8"/>
|
|
16
|
-
<circle cx="1180" cy="300" r="260" fill="#22c55e"/>
|
|
17
|
-
</g>
|
|
18
|
-
|
|
19
|
-
<g>
|
|
20
|
-
<rect x="260" y="250" width="520" height="400" rx="40" fill="rgba(255,255,255,0.08)" stroke="rgba(255,255,255,0.16)"/>
|
|
21
|
-
<rect x="820" y="250" width="520" height="400" rx="40" fill="rgba(255,255,255,0.08)" stroke="rgba(255,255,255,0.16)"/>
|
|
22
|
-
<path d="M820 450h-40c-40 0-60-20-60-60v-20c0-40-20-60-60-60h-60" fill="none" stroke="url(#acc)" stroke-width="10" stroke-linecap="round" opacity="0.85"/>
|
|
23
|
-
</g>
|
|
24
|
-
|
|
25
|
-
<g fill="rgba(255,255,255,0.20)">
|
|
26
|
-
<rect x="320" y="320" width="240" height="16" rx="8"/>
|
|
27
|
-
<rect x="320" y="352" width="360" height="16" rx="8"/>
|
|
28
|
-
<rect x="320" y="384" width="320" height="16" rx="8"/>
|
|
29
|
-
<rect x="320" y="450" width="420" height="12" rx="6" opacity="0.8"/>
|
|
30
|
-
<rect x="320" y="474" width="380" height="12" rx="6" opacity="0.8"/>
|
|
31
|
-
</g>
|
|
32
|
-
|
|
33
|
-
<g fill="rgba(255,255,255,0.20)">
|
|
34
|
-
<rect x="880" y="320" width="260" height="16" rx="8"/>
|
|
35
|
-
<rect x="880" y="352" width="360" height="16" rx="8"/>
|
|
36
|
-
<rect x="880" y="384" width="280" height="16" rx="8"/>
|
|
37
|
-
<rect x="880" y="450" width="420" height="12" rx="6" opacity="0.8"/>
|
|
38
|
-
<rect x="880" y="474" width="340" height="12" rx="6" opacity="0.8"/>
|
|
39
|
-
</g>
|
|
40
|
-
</svg>
|
|
41
|
-
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0" stop-color="#0b1220"/>
|
|
5
|
-
<stop offset="0.55" stop-color="#0f172a"/>
|
|
6
|
-
<stop offset="1" stop-color="#052e1b"/>
|
|
7
|
-
</linearGradient>
|
|
8
|
-
<radialGradient id="glow" cx="30%" cy="20%" r="60%">
|
|
9
|
-
<stop offset="0" stop-color="rgba(52,211,153,0.55)"/>
|
|
10
|
-
<stop offset="1" stop-color="rgba(52,211,153,0)"/>
|
|
11
|
-
</radialGradient>
|
|
12
|
-
<radialGradient id="glow2" cx="80%" cy="70%" r="60%">
|
|
13
|
-
<stop offset="0" stop-color="rgba(56,189,248,0.45)"/>
|
|
14
|
-
<stop offset="1" stop-color="rgba(56,189,248,0)"/>
|
|
15
|
-
</radialGradient>
|
|
16
|
-
</defs>
|
|
17
|
-
|
|
18
|
-
<rect width="1600" height="900" fill="url(#bg)"/>
|
|
19
|
-
<rect width="1600" height="900" fill="url(#glow)"/>
|
|
20
|
-
<rect width="1600" height="900" fill="url(#glow2)"/>
|
|
21
|
-
|
|
22
|
-
<g opacity="0.35" stroke="rgba(255,255,255,0.35)">
|
|
23
|
-
<path d="M120 220c220-110 420-110 640 0s420 110 640 0" fill="none" stroke-width="2"/>
|
|
24
|
-
<path d="M120 280c220-110 420-110 640 0s420 110 640 0" fill="none" stroke-width="2" opacity="0.7"/>
|
|
25
|
-
<path d="M120 340c220-110 420-110 640 0s420 110 640 0" fill="none" stroke-width="2" opacity="0.5"/>
|
|
26
|
-
</g>
|
|
27
|
-
|
|
28
|
-
<g opacity="0.22">
|
|
29
|
-
<rect x="240" y="520" width="1120" height="180" rx="36" fill="rgba(255,255,255,0.08)"/>
|
|
30
|
-
<rect x="300" y="570" width="420" height="18" rx="9" fill="rgba(255,255,255,0.20)"/>
|
|
31
|
-
<rect x="300" y="610" width="680" height="12" rx="6" fill="rgba(255,255,255,0.14)"/>
|
|
32
|
-
<rect x="300" y="636" width="520" height="12" rx="6" fill="rgba(255,255,255,0.14)"/>
|
|
33
|
-
</g>
|
|
34
|
-
</svg>
|
|
35
|
-
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0" stop-color="#fff7ed"/>
|
|
5
|
-
<stop offset="1" stop-color="#f0fdf4"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
<linearGradient id="acc" x1="0" y1="0" x2="1" y2="1">
|
|
8
|
-
<stop offset="0" stop-color="#f97316"/>
|
|
9
|
-
<stop offset="1" stop-color="#22c55e"/>
|
|
10
|
-
</linearGradient>
|
|
11
|
-
</defs>
|
|
12
|
-
|
|
13
|
-
<rect width="1600" height="900" fill="url(#bg)"/>
|
|
14
|
-
<g opacity="0.12">
|
|
15
|
-
<circle cx="400" cy="220" r="260" fill="#f97316"/>
|
|
16
|
-
<circle cx="1220" cy="620" r="320" fill="#22c55e"/>
|
|
17
|
-
</g>
|
|
18
|
-
|
|
19
|
-
<rect x="300" y="220" width="1000" height="460" rx="48" fill="rgba(15,23,42,0.06)"/>
|
|
20
|
-
<g transform="translate(420 340)">
|
|
21
|
-
<circle cx="60" cy="300" r="36" fill="url(#acc)"/>
|
|
22
|
-
<path d="M60 210c84 0 150 66 150 150" fill="none" stroke="url(#acc)" stroke-width="24" stroke-linecap="round"/>
|
|
23
|
-
<path d="M60 120c134 0 240 106 240 240" fill="none" stroke="url(#acc)" stroke-width="24" stroke-linecap="round" opacity="0.8"/>
|
|
24
|
-
</g>
|
|
25
|
-
|
|
26
|
-
<g fill="rgba(15,23,42,0.12)">
|
|
27
|
-
<rect x="780" y="330" width="420" height="16" rx="8"/>
|
|
28
|
-
<rect x="780" y="362" width="340" height="16" rx="8"/>
|
|
29
|
-
<rect x="780" y="420" width="460" height="14" rx="7"/>
|
|
30
|
-
<rect x="780" y="446" width="520" height="14" rx="7"/>
|
|
31
|
-
<rect x="780" y="472" width="480" height="14" rx="7"/>
|
|
32
|
-
</g>
|
|
33
|
-
</svg>
|
|
34
|
-
|
package/static/robots.txt
DELETED
package/svelte.config.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import adapter from '@sveltejs/adapter-auto';
|
|
2
|
-
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
|
3
|
-
import { mdsvex } from 'mdsvex';
|
|
4
|
-
import remarkGfm from 'remark-gfm';
|
|
5
|
-
import rehypeAutolinkHeadings from 'rehype-autolink-headings';
|
|
6
|
-
import rehypeSlug from 'rehype-slug';
|
|
7
|
-
import rehypeShiki from '@shikijs/rehype';
|
|
8
|
-
|
|
9
|
-
/** @type {import('unified').Plugin} */
|
|
10
|
-
function rehypeStripPreTabindex() {
|
|
11
|
-
/** @param {any} node */
|
|
12
|
-
function walk(node) {
|
|
13
|
-
if (!node || typeof node !== 'object') return;
|
|
14
|
-
if (node.type === 'element' && node.tagName === 'pre' && node.properties) {
|
|
15
|
-
delete node.properties.tabindex;
|
|
16
|
-
delete node.properties.tabIndex;
|
|
17
|
-
}
|
|
18
|
-
if (Array.isArray(node.children)) node.children.forEach(walk);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return (tree) => walk(tree);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/** @type {import('mdsvex').MdsvexOptions} */
|
|
25
|
-
const mdsvexConfig = {
|
|
26
|
-
extensions: ['.md'],
|
|
27
|
-
frontmatter: {
|
|
28
|
-
marker: '-',
|
|
29
|
-
type: 'yaml',
|
|
30
|
-
parse: () => undefined
|
|
31
|
-
},
|
|
32
|
-
highlight: false,
|
|
33
|
-
remarkPlugins: [remarkGfm],
|
|
34
|
-
rehypePlugins: [
|
|
35
|
-
rehypeSlug,
|
|
36
|
-
[
|
|
37
|
-
rehypeAutolinkHeadings,
|
|
38
|
-
{
|
|
39
|
-
behavior: 'wrap',
|
|
40
|
-
properties: {
|
|
41
|
-
className: ['heading-anchor']
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
],
|
|
45
|
-
[
|
|
46
|
-
rehypeShiki,
|
|
47
|
-
{
|
|
48
|
-
themes: {
|
|
49
|
-
light: 'one-light',
|
|
50
|
-
dark: 'github-dark-default'
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
],
|
|
54
|
-
rehypeStripPreTabindex
|
|
55
|
-
]
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
/** @type {import('@sveltejs/kit').Config} */
|
|
59
|
-
const config = {
|
|
60
|
-
extensions: ['.svelte', '.md'],
|
|
61
|
-
preprocess: [mdsvex(mdsvexConfig), vitePreprocess()],
|
|
62
|
-
kit: {
|
|
63
|
-
// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
|
|
64
|
-
// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
|
|
65
|
-
// See https://svelte.dev/docs/kit/adapters for more information about adapters.
|
|
66
|
-
adapter: adapter()
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
export default config;
|
package/tailwind.config.cjs
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/** @type {import('tailwindcss').Config} */
|
|
2
|
-
module.exports = {
|
|
3
|
-
darkMode: 'class',
|
|
4
|
-
content: [
|
|
5
|
-
'./src/**/*.{html,js,svelte,ts,md}',
|
|
6
|
-
'./src/content/**/*.{md}',
|
|
7
|
-
'./packages/blogkit/src/**/*.{svelte,ts}',
|
|
8
|
-
'./packages/blogkit/dist/**/*.{js,ts,svelte}'
|
|
9
|
-
],
|
|
10
|
-
theme: {
|
|
11
|
-
extend: {
|
|
12
|
-
colors: {
|
|
13
|
-
background: {
|
|
14
|
-
main: 'rgb(var(--c-background-main) / <alpha-value>)',
|
|
15
|
-
soft: 'rgb(var(--c-background-soft) / <alpha-value>)',
|
|
16
|
-
invert: 'rgb(var(--c-background-invert) / <alpha-value>)'
|
|
17
|
-
},
|
|
18
|
-
text: {
|
|
19
|
-
main: 'rgb(var(--c-text-main) / <alpha-value>)',
|
|
20
|
-
sub: 'rgb(var(--c-text-sub) / <alpha-value>)',
|
|
21
|
-
muted: 'rgb(var(--c-text-muted) / <alpha-value>)',
|
|
22
|
-
invert: 'rgb(var(--c-text-invert) / <alpha-value>)'
|
|
23
|
-
},
|
|
24
|
-
border: {
|
|
25
|
-
soft: 'rgb(var(--c-border-soft) / <alpha-value>)'
|
|
26
|
-
},
|
|
27
|
-
brand: {
|
|
28
|
-
DEFAULT: 'rgb(var(--c-brand) / <alpha-value>)',
|
|
29
|
-
soft: 'rgb(var(--c-brand-soft) / <alpha-value>)'
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
fontFamily: {
|
|
33
|
-
sans: [
|
|
34
|
-
'Inter',
|
|
35
|
-
'ui-sans-serif',
|
|
36
|
-
'system-ui',
|
|
37
|
-
'-apple-system',
|
|
38
|
-
'Segoe UI',
|
|
39
|
-
'Roboto',
|
|
40
|
-
'Helvetica',
|
|
41
|
-
'Arial',
|
|
42
|
-
'Apple Color Emoji',
|
|
43
|
-
'Segoe UI Emoji'
|
|
44
|
-
],
|
|
45
|
-
mono: [
|
|
46
|
-
'Geist Mono',
|
|
47
|
-
'ui-monospace',
|
|
48
|
-
'SFMono-Regular',
|
|
49
|
-
'Menlo',
|
|
50
|
-
'Monaco',
|
|
51
|
-
'Consolas',
|
|
52
|
-
'Liberation Mono',
|
|
53
|
-
'Courier New',
|
|
54
|
-
'monospace'
|
|
55
|
-
]
|
|
56
|
-
},
|
|
57
|
-
boxShadow: {
|
|
58
|
-
'drop-md': '0 18px 60px rgba(15, 23, 42, 0.16)'
|
|
59
|
-
},
|
|
60
|
-
typography: () => ({
|
|
61
|
-
DEFAULT: {
|
|
62
|
-
css: {
|
|
63
|
-
'--tw-prose-body': 'rgb(var(--c-text-main))',
|
|
64
|
-
'--tw-prose-headings': 'rgb(var(--c-text-main))',
|
|
65
|
-
'--tw-prose-lead': 'rgb(var(--c-text-sub))',
|
|
66
|
-
'--tw-prose-links': 'rgb(var(--c-text-main))',
|
|
67
|
-
'--tw-prose-bold': 'rgb(var(--c-text-main))',
|
|
68
|
-
'--tw-prose-counters': 'rgb(var(--c-text-muted))',
|
|
69
|
-
'--tw-prose-bullets': 'rgb(var(--c-border-soft) / 0.35)',
|
|
70
|
-
'--tw-prose-hr': 'rgb(var(--c-border-soft) / 0.12)',
|
|
71
|
-
'--tw-prose-quotes': 'rgb(var(--c-text-main))',
|
|
72
|
-
'--tw-prose-quote-borders': 'rgb(var(--c-border-soft) / 0.2)',
|
|
73
|
-
'--tw-prose-captions': 'rgb(var(--c-text-muted))',
|
|
74
|
-
'--tw-prose-code': 'rgb(var(--c-text-main))',
|
|
75
|
-
'--tw-prose-pre-code': 'rgb(var(--c-text-main))',
|
|
76
|
-
'--tw-prose-pre-bg': 'transparent',
|
|
77
|
-
'--tw-prose-th-borders': 'rgb(var(--c-border-soft) / 0.12)',
|
|
78
|
-
'--tw-prose-td-borders': 'rgb(var(--c-border-soft) / 0.12)',
|
|
79
|
-
maxWidth: 'none',
|
|
80
|
-
fontSize: '16px',
|
|
81
|
-
lineHeight: '24px',
|
|
82
|
-
letterSpacing: '-0.01em',
|
|
83
|
-
a: {
|
|
84
|
-
textDecoration: 'underline',
|
|
85
|
-
textDecorationColor: 'rgb(var(--c-border-soft) / 0.35)',
|
|
86
|
-
textUnderlineOffset: '3px'
|
|
87
|
-
},
|
|
88
|
-
'a:hover': {
|
|
89
|
-
textDecorationColor: 'rgb(var(--c-brand) / 0.85)'
|
|
90
|
-
},
|
|
91
|
-
h2: {
|
|
92
|
-
fontWeight: '500',
|
|
93
|
-
fontSize: '24px',
|
|
94
|
-
lineHeight: '31.2px',
|
|
95
|
-
letterSpacing: '-0.24px',
|
|
96
|
-
scrollMarginTop: '96px'
|
|
97
|
-
},
|
|
98
|
-
h3: {
|
|
99
|
-
fontWeight: '500',
|
|
100
|
-
fontSize: '20px',
|
|
101
|
-
lineHeight: '26px',
|
|
102
|
-
letterSpacing: '-0.24px',
|
|
103
|
-
scrollMarginTop: '96px'
|
|
104
|
-
},
|
|
105
|
-
code: {
|
|
106
|
-
fontWeight: '500',
|
|
107
|
-
backgroundColor: 'rgb(var(--c-background-soft))',
|
|
108
|
-
padding: '0.2em 0.35em',
|
|
109
|
-
borderRadius: '6px'
|
|
110
|
-
},
|
|
111
|
-
'code::before': { content: '""' },
|
|
112
|
-
'code::after': { content: '""' },
|
|
113
|
-
pre: {
|
|
114
|
-
background: 'transparent',
|
|
115
|
-
padding: '0',
|
|
116
|
-
margin: '0'
|
|
117
|
-
},
|
|
118
|
-
blockquote: {
|
|
119
|
-
borderLeftColor: 'rgb(var(--c-border-soft) / 0.35)'
|
|
120
|
-
},
|
|
121
|
-
'blockquote p:first-of-type::before': { content: '""' },
|
|
122
|
-
'blockquote p:last-of-type::after': { content: '""' },
|
|
123
|
-
img: {
|
|
124
|
-
borderRadius: '10px',
|
|
125
|
-
border: '1px solid rgb(var(--c-border-soft) / 0.07)'
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
})
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
plugins: [require('@tailwindcss/typography')]
|
|
133
|
-
};
|
package/tests/blog.spec.ts
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { expect, test } from '@playwright/test';
|
|
2
|
-
|
|
3
|
-
test('blog index renders hero, tags, and paginates', async ({ page }) => {
|
|
4
|
-
await page.goto('/blog');
|
|
5
|
-
|
|
6
|
-
await expect(page.getByTestId('blog-hero')).toBeVisible();
|
|
7
|
-
await expect(page.getByTestId('blog-tags')).toBeVisible();
|
|
8
|
-
|
|
9
|
-
const cards = page.getByTestId('blog-card');
|
|
10
|
-
await expect(cards).toHaveCount(8);
|
|
11
|
-
|
|
12
|
-
// Trigger infinite scroll: scroll near bottom and wait for additional cards.
|
|
13
|
-
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
|
|
14
|
-
await expect.poll(async () => cards.count()).toBeGreaterThan(8);
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
test('post page renders summary, shiki blocks, and more posts', async ({ page }) => {
|
|
18
|
-
await page.goto('/blog/ai-summary-cards-with-frontmatter');
|
|
19
|
-
|
|
20
|
-
await expect(page.getByRole('heading', { level: 1 })).toBeVisible();
|
|
21
|
-
await expect(page.getByTestId('blog-summary')).toBeVisible();
|
|
22
|
-
await expect.poll(async () => page.locator('pre.shiki').count()).toBeGreaterThan(0);
|
|
23
|
-
|
|
24
|
-
// Heading anchors from rehype-autolink-headings should exist.
|
|
25
|
-
await expect
|
|
26
|
-
.poll(async () => page.locator('.blog-prose .heading-anchor').count())
|
|
27
|
-
.toBeGreaterThan(0);
|
|
28
|
-
|
|
29
|
-
await expect(page.getByTestId('blog-more-posts')).toBeVisible();
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
test('theme toggling applies the expected html class', async ({ page }) => {
|
|
33
|
-
await page.goto('/');
|
|
34
|
-
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
|
|
35
|
-
const darkBtn = page.getByRole('button', { name: 'Dark' });
|
|
36
|
-
await darkBtn.click();
|
|
37
|
-
|
|
38
|
-
// If hydration/event binding is broken, this will never flip.
|
|
39
|
-
await expect(darkBtn).toHaveAttribute('aria-pressed', 'true');
|
|
40
|
-
await expect(page.locator('html')).toHaveClass(/dark/);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
test('rss feed is valid xml-ish and links do not include .md', async ({ request }) => {
|
|
44
|
-
const res = await request.get('/feed.xml');
|
|
45
|
-
expect(res.ok()).toBeTruthy();
|
|
46
|
-
|
|
47
|
-
const ct = res.headers()['content-type'] ?? '';
|
|
48
|
-
expect(ct).toContain('application/rss+xml');
|
|
49
|
-
|
|
50
|
-
const body = await res.text();
|
|
51
|
-
expect(body).toContain('<rss');
|
|
52
|
-
expect(body).toContain('<channel>');
|
|
53
|
-
expect(body).toContain('/blog/ai-summary-cards-with-frontmatter');
|
|
54
|
-
expect(body).not.toContain('.md</link>');
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
test('mobile layout folds share UI into the content column', async ({ page }) => {
|
|
58
|
-
await page.setViewportSize({ width: 390, height: 844 });
|
|
59
|
-
await page.goto('/blog/ai-summary-cards-with-frontmatter');
|
|
60
|
-
|
|
61
|
-
await expect(page.getByTestId('blog-share-mobile')).toBeVisible();
|
|
62
|
-
await expect(page.getByTestId('blog-share-desktop')).toBeHidden();
|
|
63
|
-
});
|
package/tsconfig.json
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./.svelte-kit/tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"rewriteRelativeImportExtensions": true,
|
|
5
|
-
"allowJs": true,
|
|
6
|
-
"checkJs": true,
|
|
7
|
-
"esModuleInterop": true,
|
|
8
|
-
"forceConsistentCasingInFileNames": true,
|
|
9
|
-
"resolveJsonModule": true,
|
|
10
|
-
"skipLibCheck": true,
|
|
11
|
-
"sourceMap": true,
|
|
12
|
-
"strict": true,
|
|
13
|
-
"moduleResolution": "bundler"
|
|
14
|
-
},
|
|
15
|
-
"exclude": ["packages/**/dist/**"]
|
|
16
|
-
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
|
|
17
|
-
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
|
|
18
|
-
//
|
|
19
|
-
// To make changes to top-level options such as include and exclude, we recommend extending
|
|
20
|
-
// the generated config; see https://svelte.dev/docs/kit/configuration#typescript
|
|
21
|
-
}
|
package/vite.config.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { sveltekit } from '@sveltejs/kit/vite';
|
|
2
|
-
import { defineConfig } from 'vite';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
|
|
5
|
-
export default defineConfig({
|
|
6
|
-
plugins: [sveltekit()],
|
|
7
|
-
server: {
|
|
8
|
-
fs: {
|
|
9
|
-
// Allow local workspace packages to be served in dev.
|
|
10
|
-
strict: false,
|
|
11
|
-
allow: [path.resolve('./packages'), path.resolve('./src'), path.resolve('./node_modules')]
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
});
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|