diff --git a/dist/index.d.ts b/dist/index.d.ts
index 30505df..6173000 100644
--- a/dist/index.d.ts
+++ b/dist/index.d.ts
@@ -1,4 +1,4 @@
-export { T as TagPage, a as TagPageOptions } from './types-BWrP_Ur0.js';
+export { T as TagPage, a as TagPageOptions } from './types-DaI7W9VC.js';
export { TagContent } from './components/index.js';
export { PageGenerator, PageMatcher, QuartzComponent, QuartzComponentConstructor, QuartzComponentProps, QuartzPageTypePlugin, QuartzPageTypePluginInstance, VirtualPage } from '@quartz-community/types';
import './PageList-DncPcZ4-.js';
diff --git a/dist/index.js b/dist/index.js
index 97c2530..ead810f 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -256,7 +256,7 @@ var TagContent_default = ((opts) => {
var tagMatcher = ({ slug }) => {
return slug.startsWith("tags/") || slug === "tags";
};
-var TagPage = () => ({
+var TagPage = (opts) => ({
name: "TagPage",
priority: 10,
match: tagMatcher,
@@ -278,7 +278,7 @@ var TagPage = () => ({
for (const tag of tags) {
const slug = joinSegments("tags", tag);
if (existingTagSlugs.has(slug)) continue;
- const title = tag === "index" ? i18n(locale).pages.tagContent.tagIndex : `${i18n(locale).pages.tagContent.tag}: ${tag}`;
+ const title = tag === "index" ? i18n(locale).pages.tagContent.tagIndex : opts?.prefixTags ? `${i18n(locale).pages.tagContent.tag}: ${tag}` : tag;
virtualPages.push({
slug,
title,
diff --git a/dist/index.js.map b/dist/index.js.map
index 9c3ca5c..ee5f13c 100644
--- a/dist/index.js.map
+++ b/dist/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/util/path.ts","../src/components/PageList.tsx","../src/i18n/locales/en-US.ts","../src/i18n/index.ts","../src/components/styles/listPage.scss","../src/components/TagContent.tsx","../src/pageType.ts"],"names":["jsxs","jsx"],"mappings":"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","file":"index.js","sourcesContent":["export type FullSlug = string & { __brand: \"FullSlug\" };\nexport type SimpleSlug = string & { __brand: \"SimpleSlug\" };\nexport type RelativeURL = string & { __brand: \"relative\" };\n\nexport function joinSegments(...args: string[]): string {\n if (args.length === 0) return \"\";\n let joined = args\n .filter((segment) => segment !== \"\" && segment !== \"/\")\n .map((segment) => stripSlashes(segment))\n .join(\"/\");\n const first = args[0];\n const last = args[args.length - 1];\n if (first?.startsWith(\"/\")) joined = \"/\" + joined;\n if (last?.endsWith(\"/\")) joined = joined + \"/\";\n return joined;\n}\n\nexport function stripSlashes(s: string, onlyStripPrefix?: boolean): string {\n if (s.startsWith(\"/\")) s = s.substring(1);\n if (!onlyStripPrefix && s.endsWith(\"/\")) s = s.slice(0, -1);\n return s;\n}\n\nexport function simplifySlug(fp: FullSlug): SimpleSlug {\n const res = stripSlashes(trimSuffix(fp, \"index\"), true);\n return (res.length === 0 ? \"/\" : res) as SimpleSlug;\n}\n\nexport function trimSuffix(s: string, suffix: string): string {\n if (endsWith(s, suffix)) s = s.slice(0, -suffix.length);\n return s;\n}\n\nexport function endsWith(s: string, suffix: string): boolean {\n return s === suffix || s.endsWith(\"/\" + suffix);\n}\n\nexport function pathToRoot(slug: FullSlug): RelativeURL {\n let rootPath = slug\n .split(\"/\")\n .filter((x) => x !== \"\")\n .slice(0, -1)\n .map((_) => \"..\")\n .join(\"/\");\n if (rootPath.length === 0) rootPath = \".\";\n return rootPath as RelativeURL;\n}\n\nexport function resolveRelative(current: FullSlug, target: FullSlug | SimpleSlug): RelativeURL {\n return joinSegments(pathToRoot(current), simplifySlug(target as FullSlug)) as RelativeURL;\n}\n\nexport function isFolderPath(fplike: string): boolean {\n return (\n fplike.endsWith(\"/\") ||\n endsWith(fplike, \"index\") ||\n endsWith(fplike, \"index.md\") ||\n endsWith(fplike, \"index.html\")\n );\n}\n\nexport function getAllSegmentPrefixes(tags: string): string[] {\n const segments = tags.split(\"/\");\n const results: string[] = [];\n for (let i = 0; i < segments.length; i++) {\n results.push(segments.slice(0, i + 1).join(\"/\"));\n }\n return results;\n}\n","import type { QuartzComponent, QuartzComponentProps } from \"@quartz-community/types\";\nimport { resolveRelative, isFolderPath } from \"../util/path\";\nimport type { FullSlug } from \"../util/path\";\n\ninterface PageData {\n slug?: string;\n frontmatter?: { title?: string; tags?: string[] };\n dates?: {\n created: Date;\n modified: Date;\n published: Date;\n };\n [key: string]: unknown;\n}\n\nexport type SortFn = (f1: PageData, f2: PageData) => number;\n\nfunction getDate(cfg: unknown, data: PageData): Date | undefined {\n const type = (cfg as { defaultDateType?: string } | undefined)?.defaultDateType ?? \"created\";\n return data.dates?.[type as keyof typeof data.dates] as Date | undefined;\n}\n\nexport function byDateAndAlphabetical(cfg: unknown): SortFn {\n return (f1, f2) => {\n if (f1.dates && f2.dates) {\n return (getDate(cfg, f2)?.getTime() ?? 0) - (getDate(cfg, f1)?.getTime() ?? 0);\n } else if (f1.dates && !f2.dates) {\n return -1;\n } else if (!f1.dates && f2.dates) {\n return 1;\n }\n const f1Title = f1.frontmatter?.title?.toLowerCase() ?? \"\";\n const f2Title = f2.frontmatter?.title?.toLowerCase() ?? \"\";\n return f1Title.localeCompare(f2Title);\n };\n}\n\nexport function byDateAndAlphabeticalFolderFirst(cfg: unknown): SortFn {\n return (f1, f2) => {\n const f1IsFolder = isFolderPath(f1.slug ?? \"\");\n const f2IsFolder = isFolderPath(f2.slug ?? \"\");\n if (f1IsFolder && !f2IsFolder) return -1;\n if (!f1IsFolder && f2IsFolder) return 1;\n\n if (f1.dates && f2.dates) {\n return (getDate(cfg, f2)?.getTime() ?? 0) - (getDate(cfg, f1)?.getTime() ?? 0);\n } else if (f1.dates && !f2.dates) {\n return -1;\n } else if (!f1.dates && f2.dates) {\n return 1;\n }\n const f1Title = f1.frontmatter?.title?.toLowerCase() ?? \"\";\n const f2Title = f2.frontmatter?.title?.toLowerCase() ?? \"\";\n return f1Title.localeCompare(f2Title);\n };\n}\n\ntype DateComponentProps = {\n date: Date;\n locale: string;\n};\n\nfunction DateDisplay({ date, locale }: DateComponentProps) {\n return (\n \n );\n}\n\ntype PageListProps = {\n limit?: number;\n sort?: SortFn;\n} & QuartzComponentProps;\n\nexport const PageList: QuartzComponent = ({\n cfg,\n fileData,\n allFiles,\n limit,\n sort,\n}: PageListProps) => {\n const sorter = sort ?? byDateAndAlphabeticalFolderFirst(cfg);\n let list = [...(allFiles as PageData[])].sort(sorter);\n if (limit) {\n list = list.slice(0, limit);\n }\n\n const fileSlug = (fileData as { slug?: string } | undefined)?.slug as FullSlug | undefined;\n\n return (\n
\n {list.map((page) => {\n const title = page.frontmatter?.title;\n const tags = page.frontmatter?.tags ?? [];\n\n return (\n - \n
\n
\n {page.dates && (\n \n )}\n
\n
\n
\n
\n \n );\n })}\n
\n );\n};\n\nPageList.css = `\n.section h3 {\n margin: 0;\n}\n\n.section > .tags {\n margin: 0;\n}\n`;\n","export default {\n pages: {\n tagContent: {\n tag: \"Tag\",\n tagIndex: \"Tag Index\",\n itemsUnderTag: ({ count }: { count: number }) =>\n count === 1 ? \"1 item with this tag.\" : `${count} items with this tag.`,\n showingFirst: ({ count }: { count: number }) => `Showing first ${count} tags.`,\n totalTags: ({ count }: { count: number }) => `Found ${count} total tags.`,\n },\n },\n components: {},\n};\n","import enUS from \"./locales/en-US\";\n\nconst locales: Record = {\n \"en-US\": enUS,\n};\n\nexport function i18n(locale: string) {\n return locales[locale] || enUS;\n}\n","ul.section-ul {\n list-style: none;\n margin-top: 2em;\n padding-left: 0;\n}\n\nli.section-li {\n margin-bottom: 1em;\n}\nli.section-li > .section {\n display: grid;\n grid-template-columns: fit-content(8em) 3fr 1fr;\n}\n@media all and (max-width: 600px) {\n li.section-li > .section > .tags {\n display: none;\n }\n}\nli.section-li > .section > .desc > h3 > a {\n background-color: transparent;\n}\nli.section-li > .section .meta {\n margin: 0 1em 0 0;\n opacity: 0.6;\n}\n\n.popover .section {\n grid-template-columns: fit-content(8em) 1fr !important;\n}\n.popover .section > .tags {\n display: none;\n}","import type {\n QuartzComponent,\n QuartzComponentConstructor,\n QuartzComponentProps,\n} from \"@quartz-community/types\";\nimport { PageList } from \"./PageList\";\nimport type { SortFn } from \"./PageList\";\nimport { htmlToJsx } from \"@quartz-community/utils/jsx\";\nimport type { ComponentChildren } from \"preact\";\nimport type { Root } from \"hast\";\nimport { i18n } from \"../i18n\";\nimport { getAllSegmentPrefixes, resolveRelative, simplifySlug } from \"../util/path\";\nimport type { FullSlug } from \"../util/path\";\nimport style from \"./styles/listPage.scss\";\n\ninterface TagContentOptions {\n sort?: SortFn;\n numPages: number;\n}\n\nconst defaultOptions: TagContentOptions = {\n numPages: 10,\n};\n\nfunction concatenateResources(\n ...resources: (string | string[] | undefined)[]\n): string | string[] | undefined {\n const result = resources.filter((r): r is string | string[] => r !== undefined).flat();\n return result.length === 0 ? undefined : result;\n}\n\ninterface PageFileData {\n slug?: string;\n filePath?: string;\n frontmatter?: { title?: string; tags?: string[]; cssclasses?: string[] };\n description?: unknown;\n htmlAst?: Root;\n [key: string]: unknown;\n}\n\nexport default ((opts?: Partial) => {\n const options: TagContentOptions = { ...defaultOptions, ...opts };\n\n const TagContent: QuartzComponent = (props: QuartzComponentProps) => {\n const { tree, fileData, allFiles, cfg } = props;\n const fd = fileData as PageFileData;\n const slug = fd.slug;\n const locale = (cfg as { locale?: string } | undefined)?.locale ?? \"en-US\";\n\n if (!(slug?.startsWith(\"tags/\") || slug === \"tags\")) {\n throw new Error(`Component \"TagContent\" tried to render a non-tag page: ${slug}`);\n }\n\n const tag = simplifySlug(slug.slice(\"tags/\".length) as FullSlug);\n const allPagesWithTag = (t: string) =>\n (allFiles as PageFileData[]).filter((file) =>\n (file.frontmatter?.tags ?? []).flatMap(getAllSegmentPrefixes).includes(t),\n );\n\n const hastRoot = tree as Root;\n const content = hastRoot.children.length === 0 ? fd.description : htmlToJsx(hastRoot);\n\n const cssClasses = fd.frontmatter?.cssclasses ?? [];\n const classes = cssClasses.join(\" \");\n\n if (tag === \"/\") {\n const tags = [\n ...new Set(\n (allFiles as PageFileData[])\n .flatMap((data) => data.frontmatter?.tags ?? [])\n .flatMap(getAllSegmentPrefixes),\n ),\n ].sort((a, b) => a.localeCompare(b));\n\n const tagItemMap: Map = new Map();\n for (const t of tags) {\n tagItemMap.set(t, allPagesWithTag(t));\n }\n\n return (\n \n
\n {content}
\n \n
{i18n(locale).pages.tagContent.totalTags({ count: tags.length })}
\n
\n {tags.map((t) => {\n const pages = tagItemMap.get(t)!;\n const listProps = {\n ...props,\n allFiles: pages,\n };\n const pageListContent = PageList({\n ...listProps,\n limit: options.numPages,\n sort: options?.sort,\n }) as unknown as ComponentChildren;\n\n const contentPage = (allFiles as PageFileData[]).find(\n (file) => file.slug === `tags/${t}`,\n );\n\n const root = contentPage?.htmlAst;\n const tagDesc =\n !root || root.children.length === 0 ? contentPage?.description : htmlToJsx(root);\n\n const tagListingPage = `/tags/${t}` as FullSlug;\n const href = resolveRelative(slug as FullSlug, tagListingPage);\n\n return (\n
\n
\n {tagDesc &&
{tagDesc}
}\n
\n
\n {i18n(locale).pages.tagContent.itemsUnderTag({ count: pages.length })}\n {pages.length > options.numPages && (\n <>\n {\" \"}\n \n {i18n(locale).pages.tagContent.showingFirst({\n count: options.numPages,\n })}\n \n >\n )}\n
\n {pageListContent}\n
\n
\n );\n })}\n
\n
\n );\n } else {\n const pages = allPagesWithTag(tag);\n const listProps = {\n ...props,\n allFiles: pages,\n };\n const pageListContent = PageList({\n ...listProps,\n sort: options?.sort,\n }) as unknown as ComponentChildren;\n\n return (\n \n
{content}\n
\n
{i18n(locale).pages.tagContent.itemsUnderTag({ count: pages.length })}
\n
{pageListContent}
\n
\n
\n );\n }\n };\n\n TagContent.css = concatenateResources(style, PageList.css);\n return TagContent;\n}) satisfies QuartzComponentConstructor;\n","import type {\n QuartzPageTypePlugin,\n PageMatcher,\n FullSlug,\n VirtualPage,\n} from \"@quartz-community/types\";\nimport TagContentComponent from \"./components/TagContent\";\nimport { i18n } from \"./i18n\";\nimport { getAllSegmentPrefixes, joinSegments } from \"./util/path\";\nimport type { SortFn } from \"./components/PageList\";\n\nexport interface TagPageOptions {\n sort?: SortFn;\n numPages?: number;\n}\n\nconst tagMatcher: PageMatcher = ({ slug }) => {\n return slug.startsWith(\"tags/\") || slug === \"tags\";\n};\n\nexport const TagPage: QuartzPageTypePlugin = () => ({\n name: \"TagPage\",\n priority: 10,\n match: tagMatcher,\n generate({ content, cfg }) {\n const allFiles = content.map((c) => c[1].data);\n const locale = (cfg as { locale?: string } | undefined)?.locale ?? \"en-US\";\n\n const tags: Set = new Set(\n (allFiles as { frontmatter?: { tags?: string[] } }[])\n .flatMap((data) => data.frontmatter?.tags ?? [])\n .flatMap(getAllSegmentPrefixes),\n );\n\n tags.add(\"index\");\n\n const existingTagSlugs = new Set();\n for (const [, file] of content) {\n const slug = (file.data as { slug?: string } | undefined)?.slug;\n if (slug && slug.startsWith(\"tags/\")) {\n existingTagSlugs.add(slug);\n }\n }\n\n const virtualPages: VirtualPage[] = [];\n for (const tag of tags) {\n const slug = joinSegments(\"tags\", tag) as unknown as FullSlug;\n if (existingTagSlugs.has(slug as string)) continue;\n\n const title =\n tag === \"index\"\n ? i18n(locale).pages.tagContent.tagIndex\n : `${i18n(locale).pages.tagContent.tag}: ${tag}`;\n\n virtualPages.push({\n slug,\n title,\n data: {},\n });\n }\n\n return virtualPages;\n },\n layout: \"tag\",\n body: TagContentComponent,\n});\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/util/path.ts","../src/components/PageList.tsx","../src/i18n/locales/en-US.ts","../src/i18n/index.ts","../src/components/styles/listPage.scss","../src/components/TagContent.tsx","../src/pageType.ts"],"names":["jsxs","jsx"],"mappings":"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","file":"index.js","sourcesContent":["export type FullSlug = string & { __brand: \"FullSlug\" };\nexport type SimpleSlug = string & { __brand: \"SimpleSlug\" };\nexport type RelativeURL = string & { __brand: \"relative\" };\n\nexport function joinSegments(...args: string[]): string {\n if (args.length === 0) return \"\";\n let joined = args\n .filter((segment) => segment !== \"\" && segment !== \"/\")\n .map((segment) => stripSlashes(segment))\n .join(\"/\");\n const first = args[0];\n const last = args[args.length - 1];\n if (first?.startsWith(\"/\")) joined = \"/\" + joined;\n if (last?.endsWith(\"/\")) joined = joined + \"/\";\n return joined;\n}\n\nexport function stripSlashes(s: string, onlyStripPrefix?: boolean): string {\n if (s.startsWith(\"/\")) s = s.substring(1);\n if (!onlyStripPrefix && s.endsWith(\"/\")) s = s.slice(0, -1);\n return s;\n}\n\nexport function simplifySlug(fp: FullSlug): SimpleSlug {\n const res = stripSlashes(trimSuffix(fp, \"index\"), true);\n return (res.length === 0 ? \"/\" : res) as SimpleSlug;\n}\n\nexport function trimSuffix(s: string, suffix: string): string {\n if (endsWith(s, suffix)) s = s.slice(0, -suffix.length);\n return s;\n}\n\nexport function endsWith(s: string, suffix: string): boolean {\n return s === suffix || s.endsWith(\"/\" + suffix);\n}\n\nexport function pathToRoot(slug: FullSlug): RelativeURL {\n let rootPath = slug\n .split(\"/\")\n .filter((x) => x !== \"\")\n .slice(0, -1)\n .map((_) => \"..\")\n .join(\"/\");\n if (rootPath.length === 0) rootPath = \".\";\n return rootPath as RelativeURL;\n}\n\nexport function resolveRelative(current: FullSlug, target: FullSlug | SimpleSlug): RelativeURL {\n return joinSegments(pathToRoot(current), simplifySlug(target as FullSlug)) as RelativeURL;\n}\n\nexport function isFolderPath(fplike: string): boolean {\n return (\n fplike.endsWith(\"/\") ||\n endsWith(fplike, \"index\") ||\n endsWith(fplike, \"index.md\") ||\n endsWith(fplike, \"index.html\")\n );\n}\n\nexport function getAllSegmentPrefixes(tags: string): string[] {\n const segments = tags.split(\"/\");\n const results: string[] = [];\n for (let i = 0; i < segments.length; i++) {\n results.push(segments.slice(0, i + 1).join(\"/\"));\n }\n return results;\n}\n","import type { QuartzComponent, QuartzComponentProps } from \"@quartz-community/types\";\nimport { resolveRelative, isFolderPath } from \"../util/path\";\nimport type { FullSlug } from \"../util/path\";\n\ninterface PageData {\n slug?: string;\n frontmatter?: { title?: string; tags?: string[] };\n dates?: {\n created: Date;\n modified: Date;\n published: Date;\n };\n [key: string]: unknown;\n}\n\nexport type SortFn = (f1: PageData, f2: PageData) => number;\n\nfunction getDate(cfg: unknown, data: PageData): Date | undefined {\n const type = (cfg as { defaultDateType?: string } | undefined)?.defaultDateType ?? \"created\";\n return data.dates?.[type as keyof typeof data.dates] as Date | undefined;\n}\n\nexport function byDateAndAlphabetical(cfg: unknown): SortFn {\n return (f1, f2) => {\n if (f1.dates && f2.dates) {\n return (getDate(cfg, f2)?.getTime() ?? 0) - (getDate(cfg, f1)?.getTime() ?? 0);\n } else if (f1.dates && !f2.dates) {\n return -1;\n } else if (!f1.dates && f2.dates) {\n return 1;\n }\n const f1Title = f1.frontmatter?.title?.toLowerCase() ?? \"\";\n const f2Title = f2.frontmatter?.title?.toLowerCase() ?? \"\";\n return f1Title.localeCompare(f2Title);\n };\n}\n\nexport function byDateAndAlphabeticalFolderFirst(cfg: unknown): SortFn {\n return (f1, f2) => {\n const f1IsFolder = isFolderPath(f1.slug ?? \"\");\n const f2IsFolder = isFolderPath(f2.slug ?? \"\");\n if (f1IsFolder && !f2IsFolder) return -1;\n if (!f1IsFolder && f2IsFolder) return 1;\n\n if (f1.dates && f2.dates) {\n return (getDate(cfg, f2)?.getTime() ?? 0) - (getDate(cfg, f1)?.getTime() ?? 0);\n } else if (f1.dates && !f2.dates) {\n return -1;\n } else if (!f1.dates && f2.dates) {\n return 1;\n }\n const f1Title = f1.frontmatter?.title?.toLowerCase() ?? \"\";\n const f2Title = f2.frontmatter?.title?.toLowerCase() ?? \"\";\n return f1Title.localeCompare(f2Title);\n };\n}\n\ntype DateComponentProps = {\n date: Date;\n locale: string;\n};\n\nfunction DateDisplay({ date, locale }: DateComponentProps) {\n return (\n \n );\n}\n\ntype PageListProps = {\n limit?: number;\n sort?: SortFn;\n} & QuartzComponentProps;\n\nexport const PageList: QuartzComponent = ({\n cfg,\n fileData,\n allFiles,\n limit,\n sort,\n}: PageListProps) => {\n const sorter = sort ?? byDateAndAlphabeticalFolderFirst(cfg);\n let list = [...(allFiles as PageData[])].sort(sorter);\n if (limit) {\n list = list.slice(0, limit);\n }\n\n const fileSlug = (fileData as { slug?: string } | undefined)?.slug as FullSlug | undefined;\n\n return (\n \n {list.map((page) => {\n const title = page.frontmatter?.title;\n const tags = page.frontmatter?.tags ?? [];\n\n return (\n - \n
\n
\n {page.dates && (\n \n )}\n
\n
\n
\n
\n \n );\n })}\n
\n );\n};\n\nPageList.css = `\n.section h3 {\n margin: 0;\n}\n\n.section > .tags {\n margin: 0;\n}\n`;\n","export default {\n pages: {\n tagContent: {\n tag: \"Tag\",\n tagIndex: \"Tag Index\",\n itemsUnderTag: ({ count }: { count: number }) =>\n count === 1 ? \"1 item with this tag.\" : `${count} items with this tag.`,\n showingFirst: ({ count }: { count: number }) => `Showing first ${count} tags.`,\n totalTags: ({ count }: { count: number }) => `Found ${count} total tags.`,\n },\n },\n components: {},\n};\n","import enUS from \"./locales/en-US\";\n\nconst locales: Record = {\n \"en-US\": enUS,\n};\n\nexport function i18n(locale: string) {\n return locales[locale] || enUS;\n}\n","ul.section-ul {\n list-style: none;\n margin-top: 2em;\n padding-left: 0;\n}\n\nli.section-li {\n margin-bottom: 1em;\n}\nli.section-li > .section {\n display: grid;\n grid-template-columns: fit-content(8em) 3fr 1fr;\n}\n@media all and (max-width: 600px) {\n li.section-li > .section > .tags {\n display: none;\n }\n}\nli.section-li > .section > .desc > h3 > a {\n background-color: transparent;\n}\nli.section-li > .section .meta {\n margin: 0 1em 0 0;\n opacity: 0.6;\n}\n\n.popover .section {\n grid-template-columns: fit-content(8em) 1fr !important;\n}\n.popover .section > .tags {\n display: none;\n}","import type {\n QuartzComponent,\n QuartzComponentConstructor,\n QuartzComponentProps,\n} from \"@quartz-community/types\";\nimport { PageList } from \"./PageList\";\nimport type { SortFn } from \"./PageList\";\nimport { htmlToJsx } from \"@quartz-community/utils/jsx\";\nimport type { ComponentChildren } from \"preact\";\nimport type { Root } from \"hast\";\nimport { i18n } from \"../i18n\";\nimport { getAllSegmentPrefixes, resolveRelative, simplifySlug } from \"../util/path\";\nimport type { FullSlug } from \"../util/path\";\nimport style from \"./styles/listPage.scss\";\n\ninterface TagContentOptions {\n sort?: SortFn;\n numPages: number;\n}\n\nconst defaultOptions: TagContentOptions = {\n numPages: 10,\n};\n\nfunction concatenateResources(\n ...resources: (string | string[] | undefined)[]\n): string | string[] | undefined {\n const result = resources.filter((r): r is string | string[] => r !== undefined).flat();\n return result.length === 0 ? undefined : result;\n}\n\ninterface PageFileData {\n slug?: string;\n filePath?: string;\n frontmatter?: { title?: string; tags?: string[]; cssclasses?: string[] };\n description?: unknown;\n htmlAst?: Root;\n [key: string]: unknown;\n}\n\nexport default ((opts?: Partial) => {\n const options: TagContentOptions = { ...defaultOptions, ...opts };\n\n const TagContent: QuartzComponent = (props: QuartzComponentProps) => {\n const { tree, fileData, allFiles, cfg } = props;\n const fd = fileData as PageFileData;\n const slug = fd.slug;\n const locale = (cfg as { locale?: string } | undefined)?.locale ?? \"en-US\";\n\n if (!(slug?.startsWith(\"tags/\") || slug === \"tags\")) {\n throw new Error(`Component \"TagContent\" tried to render a non-tag page: ${slug}`);\n }\n\n const tag = simplifySlug(slug.slice(\"tags/\".length) as FullSlug);\n const allPagesWithTag = (t: string) =>\n (allFiles as PageFileData[]).filter((file) =>\n (file.frontmatter?.tags ?? []).flatMap(getAllSegmentPrefixes).includes(t),\n );\n\n const hastRoot = tree as Root;\n const content = hastRoot.children.length === 0 ? fd.description : htmlToJsx(hastRoot);\n\n const cssClasses = fd.frontmatter?.cssclasses ?? [];\n const classes = cssClasses.join(\" \");\n\n if (tag === \"/\") {\n const tags = [\n ...new Set(\n (allFiles as PageFileData[])\n .flatMap((data) => data.frontmatter?.tags ?? [])\n .flatMap(getAllSegmentPrefixes),\n ),\n ].sort((a, b) => a.localeCompare(b));\n\n const tagItemMap: Map = new Map();\n for (const t of tags) {\n tagItemMap.set(t, allPagesWithTag(t));\n }\n\n return (\n \n
\n {content}
\n \n
{i18n(locale).pages.tagContent.totalTags({ count: tags.length })}
\n
\n {tags.map((t) => {\n const pages = tagItemMap.get(t)!;\n const listProps = {\n ...props,\n allFiles: pages,\n };\n const pageListContent = PageList({\n ...listProps,\n limit: options.numPages,\n sort: options?.sort,\n }) as unknown as ComponentChildren;\n\n const contentPage = (allFiles as PageFileData[]).find(\n (file) => file.slug === `tags/${t}`,\n );\n\n const root = contentPage?.htmlAst;\n const tagDesc =\n !root || root.children.length === 0 ? contentPage?.description : htmlToJsx(root);\n\n const tagListingPage = `/tags/${t}` as FullSlug;\n const href = resolveRelative(slug as FullSlug, tagListingPage);\n\n return (\n
\n
\n {tagDesc &&
{tagDesc}
}\n
\n
\n {i18n(locale).pages.tagContent.itemsUnderTag({ count: pages.length })}\n {pages.length > options.numPages && (\n <>\n {\" \"}\n \n {i18n(locale).pages.tagContent.showingFirst({\n count: options.numPages,\n })}\n \n >\n )}\n
\n {pageListContent}\n
\n
\n );\n })}\n
\n
\n );\n } else {\n const pages = allPagesWithTag(tag);\n const listProps = {\n ...props,\n allFiles: pages,\n };\n const pageListContent = PageList({\n ...listProps,\n sort: options?.sort,\n }) as unknown as ComponentChildren;\n\n return (\n \n
{content}\n
\n
{i18n(locale).pages.tagContent.itemsUnderTag({ count: pages.length })}
\n
{pageListContent}
\n
\n
\n );\n }\n };\n\n TagContent.css = concatenateResources(style, PageList.css);\n return TagContent;\n}) satisfies QuartzComponentConstructor;\n","import type {\n QuartzPageTypePlugin,\n PageMatcher,\n FullSlug,\n VirtualPage,\n} from \"@quartz-community/types\";\nimport TagContentComponent from \"./components/TagContent\";\nimport { i18n } from \"./i18n\";\nimport { getAllSegmentPrefixes, joinSegments } from \"./util/path\";\nimport type { SortFn } from \"./components/PageList\";\n\nexport interface TagPageOptions {\n sort?: SortFn;\n numPages?: number;\n /** Show \"Tag: \" prefix before tag name in generated titles. Default: false */\n prefixTags?: boolean;\n}\n\nconst tagMatcher: PageMatcher = ({ slug }) => {\n return slug.startsWith(\"tags/\") || slug === \"tags\";\n};\n\nexport const TagPage: QuartzPageTypePlugin = (opts) => ({\n name: \"TagPage\",\n priority: 10,\n match: tagMatcher,\n generate({ content, cfg }) {\n const allFiles = content.map((c) => c[1].data);\n const locale = (cfg as { locale?: string } | undefined)?.locale ?? \"en-US\";\n\n const tags: Set = new Set(\n (allFiles as { frontmatter?: { tags?: string[] } }[])\n .flatMap((data) => data.frontmatter?.tags ?? [])\n .flatMap(getAllSegmentPrefixes),\n );\n\n tags.add(\"index\");\n\n const existingTagSlugs = new Set();\n for (const [, file] of content) {\n const slug = (file.data as { slug?: string } | undefined)?.slug;\n if (slug && slug.startsWith(\"tags/\")) {\n existingTagSlugs.add(slug);\n }\n }\n\n const virtualPages: VirtualPage[] = [];\n for (const tag of tags) {\n const slug = joinSegments(\"tags\", tag) as unknown as FullSlug;\n if (existingTagSlugs.has(slug as string)) continue;\n\n const title =\n tag === \"index\"\n ? i18n(locale).pages.tagContent.tagIndex\n : opts?.prefixTags\n ? `${i18n(locale).pages.tagContent.tag}: ${tag}`\n : tag;\n\n virtualPages.push({\n slug,\n title,\n data: {},\n });\n }\n\n return virtualPages;\n },\n layout: \"tag\",\n body: TagContentComponent,\n});\n"]}
\ No newline at end of file
diff --git a/dist/types-BWrP_Ur0.d.ts b/dist/types-DaI7W9VC.d.ts
similarity index 73%
rename from dist/types-BWrP_Ur0.d.ts
rename to dist/types-DaI7W9VC.d.ts
index 28a7486..0a994f8 100644
--- a/dist/types-BWrP_Ur0.d.ts
+++ b/dist/types-DaI7W9VC.d.ts
@@ -4,6 +4,8 @@ import { S as SortFn } from './PageList-DncPcZ4-.js';
interface TagPageOptions {
sort?: SortFn;
numPages?: number;
+ /** Show "Tag: " prefix before tag name in generated titles. Default: false */
+ prefixTags?: boolean;
}
declare const TagPage: QuartzPageTypePlugin;
diff --git a/dist/types.d.ts b/dist/types.d.ts
index 46346c9..202b4cf 100644
--- a/dist/types.d.ts
+++ b/dist/types.d.ts
@@ -1,3 +1,3 @@
export { BuildCtx, PageGenerator, PageMatcher, ProcessedContent, QuartzPageTypePlugin, QuartzPageTypePluginInstance, QuartzPluginData, StaticResources, VirtualPage } from '@quartz-community/types';
-export { a as TagPageOptions } from './types-BWrP_Ur0.js';
+export { a as TagPageOptions } from './types-DaI7W9VC.js';
export { S as SortFn } from './PageList-DncPcZ4-.js';
diff --git a/src/pageType.ts b/src/pageType.ts
index bad87cc..18d5d7e 100644
--- a/src/pageType.ts
+++ b/src/pageType.ts
@@ -12,13 +12,15 @@ import type { SortFn } from "./components/PageList";
export interface TagPageOptions {
sort?: SortFn;
numPages?: number;
+ /** Show "Tag: " prefix before tag name in generated titles. Default: false */
+ prefixTags?: boolean;
}
const tagMatcher: PageMatcher = ({ slug }) => {
return slug.startsWith("tags/") || slug === "tags";
};
-export const TagPage: QuartzPageTypePlugin = () => ({
+export const TagPage: QuartzPageTypePlugin = (opts) => ({
name: "TagPage",
priority: 10,
match: tagMatcher,
@@ -50,7 +52,9 @@ export const TagPage: QuartzPageTypePlugin = () => ({
const title =
tag === "index"
? i18n(locale).pages.tagContent.tagIndex
- : `${i18n(locale).pages.tagContent.tag}: ${tag}`;
+ : opts?.prefixTags
+ ? `${i18n(locale).pages.tagContent.tag}: ${tag}`
+ : tag;
virtualPages.push({
slug,