Added Masthead, CMDPalette and PostHeader Components

This commit is contained in:
2026-02-27 14:41:49 +01:00
parent f6eb9dd7e1
commit ee099346db
136 changed files with 3736 additions and 244 deletions

View File

@@ -1,45 +1,76 @@
import { defineCollection, z } from 'astro:content';
import { glob } from 'astro/loaders';
const symbolSchema = z.discriminatedUnion('discriminant', [
z.object({
discriminant: z.literal('font'),
value: z.object({
family: z.string(),
character: z.string(),
}),
}),
z.object({
discriminant: z.literal('svg'),
value: z.string(),
}),
]);
const seoSchema = z
.object({
title: z.string().optional(),
description: z.string().optional(),
noIndex: z.boolean().default(false),
})
.optional();
const coverSchema = z
.object({
src: z.string().optional(),
alt: z.string().optional(),
caption: z.string().optional(),
showInHeader: z.boolean().default(false),
})
.optional();
const baseArticleSchema = z.object({
title: z.string(),
summary: z.string(),
subtitle: z.string().optional(),
cover: coverSchema,
publishDate: z.date(),
updateDate: z.date().optional(),
status: z.enum(['draft', 'published', 'archived']).default('draft'),
isFeatured: z.boolean().default(false),
parent: z.string().optional(),
tags: z.array(z.string()).default([]),
relatedArticles: z.array(z.string()).default([]),
seo: seoSchema,
});
const articles = defineCollection({
schema: z.object({
title: z.string(),
summary: z.string(),
cover: z
.object({
src: z.string().optional(),
alt: z.string().optional(),
caption: z.string().optional(),
showInHeader: z.boolean().default(false),
})
.optional(),
publishDate: z.date(),
updateDate: z.date().optional(),
status: z.enum(['draft', 'published', 'archived']).default('draft'),
isFeatured: z.boolean().default(false),
parent: z.string().optional(),
tags: z.array(z.string()).default([]),
relatedArticles: z.array(z.string()).default([]),
seo: z
.object({
title: z.string().optional(),
description: z.string().optional(),
noIndex: z.boolean().default(false),
})
.optional(),
loader: glob({
pattern: '**/index.mdoc',
base: './src/content/articles',
}),
schema: baseArticleSchema,
});
const pages = defineCollection({
schema: z.object({
title: z.string(),
seo: z
.object({
title: z.string().optional(),
description: z.string().optional(),
noIndex: z.boolean().default(false),
})
.optional(),
seo: seoSchema,
}),
});
export const collections = { articles, pages };
const elements = defineCollection({
loader: glob({
pattern: '**/index.mdoc',
base: './src/content/crucible/elements',
}),
schema: baseArticleSchema.extend({
category: z.enum(['prime', 'essence', 'aspect']).default('prime'),
symbol: symbolSchema,
}),
});
export const collections = { articles, pages, elements };