blume 0.1.2 → 0.1.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.
- package/dist/cli/index.js +83 -8
- package/dist/cli/index.js.map +10 -10
- package/dist/types/core/i18n-ui.d.ts +46 -0
- package/dist/types/core/schema.d.ts +51 -45
- package/dist/types/core/types.d.ts +6 -0
- package/docs/advanced/custom-pages.mdx +38 -0
- package/docs/content/components.mdx +20 -0
- package/docs/content/navigation.mdx +12 -4
- package/package.json +1 -1
- package/src/astro/examples.ts +49 -12
- package/src/astro/generate.ts +36 -4
- package/src/astro/pages.ts +14 -0
- package/src/astro/templates.ts +48 -0
- package/src/components/content/Component.astro +5 -1
- package/src/components/layout/RootLayout.astro +13 -7
- package/src/components/layout/nav-utils.ts +64 -1
- package/src/core/i18n-ui.ts +9 -0
- package/src/core/navigation.ts +13 -1
- package/src/core/schema.ts +11 -5
- package/src/core/types.ts +6 -0
- package/src/registry/eject.ts +13 -2
package/dist/cli/index.js
CHANGED
|
@@ -2716,6 +2716,11 @@ var uiStringsObject = z.object({
|
|
|
2716
2716
|
label: z.string().default("Language"),
|
|
2717
2717
|
untranslated: z.string().default("Not translated")
|
|
2718
2718
|
}).default({}),
|
|
2719
|
+
notFound: z.object({
|
|
2720
|
+
description: z.string().default("We couldn't find the page you're looking for."),
|
|
2721
|
+
home: z.string().default("Back to home"),
|
|
2722
|
+
title: z.string().default("Page not found")
|
|
2723
|
+
}).default({}),
|
|
2719
2724
|
page: z.object({
|
|
2720
2725
|
lastUpdated: z.string().default("Last updated on"),
|
|
2721
2726
|
next: z.string().default("Next"),
|
|
@@ -4035,6 +4040,44 @@ const canonical = base ? base + "/changelog" : null;
|
|
|
4035
4040
|
</RootLayout>
|
|
4036
4041
|
`;
|
|
4037
4042
|
};
|
|
4043
|
+
var notFoundPageTemplate = () => `---
|
|
4044
|
+
// Generated by Blume. Do not edit. Override by adding \`pages/404.astro\`.
|
|
4045
|
+
import PageLayout from "blume/components/layout/PageLayout.astro";
|
|
4046
|
+
import data from "../generated/data.json";
|
|
4047
|
+
|
|
4048
|
+
export const prerender = true;
|
|
4049
|
+
|
|
4050
|
+
const nf = data.ui.notFound;
|
|
4051
|
+
---
|
|
4052
|
+
|
|
4053
|
+
<PageLayout
|
|
4054
|
+
site={{ title: data.config.title, description: data.config.description }}
|
|
4055
|
+
logo={data.config.logo}
|
|
4056
|
+
favicon={data.config.favicon}
|
|
4057
|
+
appleIcon={data.config.appleIcon}
|
|
4058
|
+
banner={data.config.banner}
|
|
4059
|
+
analytics={data.config.analytics}
|
|
4060
|
+
navigation={data.navigation}
|
|
4061
|
+
page={{ title: nf.title, route: "/404" }}
|
|
4062
|
+
themeMode={data.config.theme.mode}
|
|
4063
|
+
fontCssVars={data.fontCssVars}
|
|
4064
|
+
searchEnabled={data.config.search.enabled}
|
|
4065
|
+
ui={data.ui}
|
|
4066
|
+
noindex={true}
|
|
4067
|
+
>
|
|
4068
|
+
<div
|
|
4069
|
+
class="mx-auto flex min-h-[60vh] max-w-2xl flex-col items-center justify-center gap-4 px-6 py-24 text-center"
|
|
4070
|
+
>
|
|
4071
|
+
<p class="text-6xl font-bold text-muted-foreground">404</p>
|
|
4072
|
+
<h1 class="text-2xl font-semibold text-foreground">{nf.title}</h1>
|
|
4073
|
+
<p class="text-muted-foreground">{nf.description}</p>
|
|
4074
|
+
<a
|
|
4075
|
+
class="mt-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-accent-foreground"
|
|
4076
|
+
href="/">{nf.home}</a
|
|
4077
|
+
>
|
|
4078
|
+
</div>
|
|
4079
|
+
</PageLayout>
|
|
4080
|
+
`;
|
|
4038
4081
|
var userComponentsTemplate = (componentsFile) => {
|
|
4039
4082
|
if (!componentsFile) {
|
|
4040
4083
|
return `// Generated by Blume. Do not edit.
|
|
@@ -5112,9 +5155,23 @@ var FRAMEWORK_BY_EXT2 = {
|
|
|
5112
5155
|
vue: "vue"
|
|
5113
5156
|
};
|
|
5114
5157
|
var EXAMPLE_FILE = /\.(?<ext>astro|jsx|svelte|tsx|vue)$/u;
|
|
5115
|
-
var
|
|
5116
|
-
|
|
5117
|
-
|
|
5158
|
+
var DEFAULT_EXAMPLE_GLOB = "**/*.{astro,jsx,svelte,tsx,vue}";
|
|
5159
|
+
var GLOB_MAGIC = /[!*?[\]{}]/u;
|
|
5160
|
+
var splitGlobBase = (pattern) => {
|
|
5161
|
+
const segments = pattern.split("/");
|
|
5162
|
+
const firstMagic = segments.findIndex((segment) => GLOB_MAGIC.test(segment));
|
|
5163
|
+
if (firstMagic === -1) {
|
|
5164
|
+
return { base: pattern, rest: "" };
|
|
5165
|
+
}
|
|
5166
|
+
return {
|
|
5167
|
+
base: segments.slice(0, firstMagic).join("/"),
|
|
5168
|
+
rest: segments.slice(firstMagic).join("/")
|
|
5169
|
+
};
|
|
5170
|
+
};
|
|
5171
|
+
var discoverExamples = async (root, pattern = "examples") => {
|
|
5172
|
+
const { base, rest } = GLOB_MAGIC.test(pattern) ? splitGlobBase(pattern) : { base: pattern, rest: DEFAULT_EXAMPLE_GLOB };
|
|
5173
|
+
const dir = join10(root, base);
|
|
5174
|
+
const matches = await glob2([rest], {
|
|
5118
5175
|
absolute: true,
|
|
5119
5176
|
cwd: dir,
|
|
5120
5177
|
onlyFiles: true
|
|
@@ -5168,6 +5225,7 @@ var discoverPages = async (pagesRoot) => {
|
|
|
5168
5225
|
return { entrypoint: file, pattern };
|
|
5169
5226
|
});
|
|
5170
5227
|
};
|
|
5228
|
+
var routeIsTaken = (pages, contentPages, route) => pages.some((page) => page.pattern === route) || contentPages.some((page) => page.route === route);
|
|
5171
5229
|
var PRIVATE_SEGMENT = /^[._]/u;
|
|
5172
5230
|
var humanizeSegment = (segment) => segment.split(/[-_]/u).filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
5173
5231
|
var customOgRoutes = (pages, siteTitle, siteDescription) => {
|
|
@@ -5579,6 +5637,12 @@ var writeMcpFiles = async (project, plan, write) => {
|
|
|
5579
5637
|
write(join11(plan.dir, "server-card.ts"), staticJsonEndpointTemplate(buildMcpServerCard(discoveryInput)))
|
|
5580
5638
|
]);
|
|
5581
5639
|
};
|
|
5640
|
+
var writeNotFoundPage = async (write, srcDir, pages, contentPages) => {
|
|
5641
|
+
if (routeIsTaken(pages, contentPages, "/404")) {
|
|
5642
|
+
return;
|
|
5643
|
+
}
|
|
5644
|
+
await write(join11(srcDir, "pages", "404.astro"), notFoundPageTemplate());
|
|
5645
|
+
};
|
|
5582
5646
|
var generateRuntime = async (project) => {
|
|
5583
5647
|
const { context, config } = project;
|
|
5584
5648
|
const out = context.outDir;
|
|
@@ -5667,6 +5731,7 @@ var generateRuntime = async (project) => {
|
|
|
5667
5731
|
if (hasChangelog && !changelogRouteTaken) {
|
|
5668
5732
|
await write(join11(srcDir, "pages", "changelog.astro"), changelogIndexTemplate({ askEnabled, exportEpub, exportPdf }));
|
|
5669
5733
|
}
|
|
5734
|
+
await writeNotFoundPage(write, srcDir, pages, project.graph.pages);
|
|
5670
5735
|
await write(searchClientPath, searchClientTemplate(config));
|
|
5671
5736
|
if (servesStaticIndex(config.search.provider)) {
|
|
5672
5737
|
const documents = await buildSearchDocuments(project);
|
|
@@ -5700,7 +5765,7 @@ var generateRuntime = async (project) => {
|
|
|
5700
5765
|
...exampleDiscovery.warnings
|
|
5701
5766
|
];
|
|
5702
5767
|
for (const dep of searchProviderMeta(config.search.provider).runtimeDeps) {
|
|
5703
|
-
if (!canResolveFrom(context.root, dep)) {
|
|
5768
|
+
if (!(canResolveFrom(context.root, dep) || canResolveFrom(packageRoot(), dep))) {
|
|
5704
5769
|
warnings.push(`Search provider "${config.search.provider}" needs "${dep}", which isn't installed. Run \`npm install ${dep}\` (or your package manager's equivalent).`);
|
|
5705
5770
|
}
|
|
5706
5771
|
}
|
|
@@ -7352,7 +7417,8 @@ var toNavNode = (node) => {
|
|
|
7352
7417
|
display: node.display,
|
|
7353
7418
|
icon: node.icon,
|
|
7354
7419
|
kind: "group",
|
|
7355
|
-
label: node.label
|
|
7420
|
+
label: node.label,
|
|
7421
|
+
path: node.routePath
|
|
7356
7422
|
};
|
|
7357
7423
|
};
|
|
7358
7424
|
var buildFileSystemSidebar = (pages, folderMeta, sharedMeta, metaPrefix) => {
|
|
@@ -7364,9 +7430,12 @@ var buildFileSystemSidebar = (pages, folderMeta, sharedMeta, metaPrefix) => {
|
|
|
7364
7430
|
const parts = page.navPath.split("/");
|
|
7365
7431
|
const filename = parts.at(-1) ?? page.navPath;
|
|
7366
7432
|
const dirs = parts.slice(0, -1);
|
|
7433
|
+
const folderParts = page.route.split("/").filter(Boolean).slice(0, -1);
|
|
7434
|
+
const offset = Math.max(0, folderParts.length - dirs.length);
|
|
7367
7435
|
let parent = root;
|
|
7368
|
-
for (const dir of dirs) {
|
|
7436
|
+
for (const [index, dir] of dirs.entries()) {
|
|
7369
7437
|
parent = ensureGroup(parent, dir);
|
|
7438
|
+
parent.routePath ??= `/${folderParts.slice(0, offset + index + 1).join("/")}`;
|
|
7370
7439
|
}
|
|
7371
7440
|
parent.children.push({
|
|
7372
7441
|
badge: page.meta.sidebar.badge,
|
|
@@ -10064,7 +10133,7 @@ var eject = async (root) => {
|
|
|
10064
10133
|
context.themeFile ? readFile14(context.themeFile, "utf-8") : Promise.resolve(""),
|
|
10065
10134
|
buildRawMarkdown(project),
|
|
10066
10135
|
discoverIslands(root),
|
|
10067
|
-
discoverExamples(root)
|
|
10136
|
+
discoverExamples(root, config.examples)
|
|
10068
10137
|
]);
|
|
10069
10138
|
const frameworks = new Set([
|
|
10070
10139
|
...islands.islands.map((island) => island.framework),
|
|
@@ -10178,6 +10247,12 @@ var eject = async (root) => {
|
|
|
10178
10247
|
path: join24(srcDir, "pages", "og", "[...slug].png.ts")
|
|
10179
10248
|
});
|
|
10180
10249
|
}
|
|
10250
|
+
if (!routeIsTaken(pages, project.graph.pages, "/404")) {
|
|
10251
|
+
files.push({
|
|
10252
|
+
content: notFoundPageTemplate(),
|
|
10253
|
+
path: join24(srcDir, "pages", "404.astro")
|
|
10254
|
+
});
|
|
10255
|
+
}
|
|
10181
10256
|
files.push({
|
|
10182
10257
|
content: searchClientTemplate(config),
|
|
10183
10258
|
path: join24(genDir, "search-client.ts")
|
|
@@ -12725,5 +12800,5 @@ var main = defineCommand11({
|
|
|
12725
12800
|
});
|
|
12726
12801
|
runMain(main);
|
|
12727
12802
|
|
|
12728
|
-
//# debugId=
|
|
12803
|
+
//# debugId=A553178EDDFDE46E64756E2164756E21
|
|
12729
12804
|
//# sourceMappingURL=index.js.map
|