var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); // quartz/worker.ts import sourceMapSupport from "source-map-support"; // quartz/plugins/transformers/frontmatter.ts import matter from "gray-matter"; import remarkFrontmatter from "remark-frontmatter"; import yaml from "js-yaml"; import toml from "toml"; // quartz/util/path.ts import { slug } from "github-slugger"; var QUARTZ = "quartz"; function slugifyFilePath(fp, excludeExt) { fp = _stripSlashes(fp); let ext = _getFileExtension(fp); const withoutFileExt = fp.replace(new RegExp(ext + "$"), ""); if (excludeExt || [".md", ".html", void 0].includes(ext)) { ext = ""; } let slug2 = withoutFileExt.split("/").map((segment) => segment.replace(/\s/g, "-").replace(/%/g, "-percent").replace(/\?/g, "-q")).join("/").replace(/\/$/, ""); if (_endsWith(slug2, "_index")) { slug2 = slug2.replace(/_index$/, "index"); } return slug2 + ext; } __name(slugifyFilePath, "slugifyFilePath"); function simplifySlug(fp) { return _stripSlashes(_trimSuffix(fp, "index"), true); } __name(simplifySlug, "simplifySlug"); function transformInternalLink(link) { let [fplike, anchor] = splitAnchor(decodeURI(link)); const folderPath = _isFolderPath(fplike); let segments = fplike.split("/").filter((x) => x.length > 0); let prefix = segments.filter(_isRelativeSegment).join("/"); let fp = segments.filter((seg) => !_isRelativeSegment(seg) && seg !== "").join("/"); const simpleSlug = simplifySlug(slugifyFilePath(fp)); const joined = joinSegments(_stripSlashes(prefix), _stripSlashes(simpleSlug)); const trail = folderPath ? "/" : ""; const res = _addRelativeToStart(joined) + trail + anchor; return res; } __name(transformInternalLink, "transformInternalLink"); function pathToRoot(slug2) { let rootPath = slug2.split("/").filter((x) => x !== "").slice(0, -1).map((_) => "..").join("/"); if (rootPath.length === 0) { rootPath = "."; } return rootPath; } __name(pathToRoot, "pathToRoot"); function resolveRelative(current, target) { const res = joinSegments(pathToRoot(current), simplifySlug(target)); return res; } __name(resolveRelative, "resolveRelative"); function splitAnchor(link) { let [fp, anchor] = link.split("#", 2); anchor = anchor === void 0 ? "" : "#" + slugAnchor(anchor); return [fp, anchor]; } __name(splitAnchor, "splitAnchor"); function slugAnchor(anchor) { return slug(anchor); } __name(slugAnchor, "slugAnchor"); function slugTag(tag) { return tag.split("/").map((tagSegment) => slug(tagSegment)).join("/"); } __name(slugTag, "slugTag"); function joinSegments(...args) { return args.filter((segment) => segment !== "").join("/").replace(/\/\/+/g, "/"); } __name(joinSegments, "joinSegments"); function getAllSegmentPrefixes(tags) { const segments = tags.split("/"); const results = []; for (let i = 0; i < segments.length; i++) { results.push(segments.slice(0, i + 1).join("/")); } return results; } __name(getAllSegmentPrefixes, "getAllSegmentPrefixes"); function transformLink(src, target, opts) { let targetSlug = transformInternalLink(target); if (opts.strategy === "relative") { return targetSlug; } else { const folderTail = _isFolderPath(targetSlug) ? "/" : ""; const canonicalSlug = _stripSlashes(targetSlug.slice(".".length)); let [targetCanonical, targetAnchor] = splitAnchor(canonicalSlug); if (opts.strategy === "shortest") { const matchingFileNames = opts.allSlugs.filter((slug2) => { const parts = slug2.split("/"); const fileName = parts.at(-1); return targetCanonical === fileName; }); if (matchingFileNames.length === 1) { const targetSlug2 = matchingFileNames[0]; return resolveRelative(src, targetSlug2) + targetAnchor; } } return joinSegments(pathToRoot(src), canonicalSlug) + folderTail; } } __name(transformLink, "transformLink"); function _isFolderPath(fplike) { return fplike.endsWith("/") || _endsWith(fplike, "index") || _endsWith(fplike, "index.md") || _endsWith(fplike, "index.html"); } __name(_isFolderPath, "_isFolderPath"); function _endsWith(s, suffix) { return s === suffix || s.endsWith("/" + suffix); } __name(_endsWith, "_endsWith"); function _trimSuffix(s, suffix) { if (_endsWith(s, suffix)) { s = s.slice(0, -suffix.length); } return s; } __name(_trimSuffix, "_trimSuffix"); function _getFileExtension(s) { return s.match(/\.[A-Za-z0-9]+$/)?.[0]; } __name(_getFileExtension, "_getFileExtension"); function _isRelativeSegment(s) { return /^\.{0,2}$/.test(s); } __name(_isRelativeSegment, "_isRelativeSegment"); function _stripSlashes(s, onlyStripPrefix) { if (s.startsWith("/")) { s = s.substring(1); } if (!onlyStripPrefix && s.endsWith("/")) { s = s.slice(0, -1); } return s; } __name(_stripSlashes, "_stripSlashes"); function _addRelativeToStart(s) { if (s === "") { s = "."; } if (!s.startsWith(".")) { s = joinSegments(".", s); } return s; } __name(_addRelativeToStart, "_addRelativeToStart"); // quartz/plugins/transformers/frontmatter.ts var defaultOptions = { delims: "---", language: "yaml" }; var FrontMatter = /* @__PURE__ */ __name((userOpts) => { const opts = { ...defaultOptions, ...userOpts }; return { name: "FrontMatter", markdownPlugins() { return [ [remarkFrontmatter, ["yaml", "toml"]], () => { return (_, file) => { const { data } = matter(file.value, { ...opts, engines: { yaml: (s) => yaml.load(s, { schema: yaml.JSON_SCHEMA }), toml: (s) => toml.parse(s) } }); if (data.tag) { data.tags = data.tag; } if (data.title) { data.title = data.title.toString(); } if (data.tags && !Array.isArray(data.tags)) { data.tags = data.tags.toString().split(",").map((tag) => tag.trim()); } data.tags = [...new Set(data.tags?.map((tag) => slugTag(tag)))]; file.data.frontmatter = { title: file.stem ?? "Untitled", tags: [], ...data }; }; } ]; } }; }, "FrontMatter"); // quartz/plugins/transformers/gfm.ts import remarkGfm from "remark-gfm"; import smartypants from "remark-smartypants"; import rehypeSlug from "rehype-slug"; import rehypeAutolinkHeadings from "rehype-autolink-headings"; var defaultOptions2 = { enableSmartyPants: true, linkHeadings: true }; var GitHubFlavoredMarkdown = /* @__PURE__ */ __name((userOpts) => { const opts = { ...defaultOptions2, ...userOpts }; return { name: "GitHubFlavoredMarkdown", markdownPlugins() { return opts.enableSmartyPants ? [remarkGfm, smartypants] : [remarkGfm]; }, htmlPlugins() { if (opts.linkHeadings) { return [ rehypeSlug, [ rehypeAutolinkHeadings, { behavior: "append", content: { type: "text", value: " \xA7" } } ] ]; } else { return []; } } }; }, "GitHubFlavoredMarkdown"); // quartz/plugins/transformers/lastmod.ts import fs from "fs"; import path from "path"; import { Repository } from "@napi-rs/simple-git"; import chalk from "chalk"; var defaultOptions3 = { priority: ["frontmatter", "git", "filesystem"] }; function coerceDate(fp, d) { const dt = new Date(d); const invalidDate = isNaN(dt.getTime()) || dt.getTime() === 0; if (invalidDate && d !== void 0) { console.log( chalk.yellow( ` Warning: found invalid date "${d}" in \`${fp}\`. Supported formats: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format` ) ); } return invalidDate ? /* @__PURE__ */ new Date() : dt; } __name(coerceDate, "coerceDate"); var CreatedModifiedDate = /* @__PURE__ */ __name((userOpts) => { const opts = { ...defaultOptions3, ...userOpts }; return { name: "CreatedModifiedDate", markdownPlugins() { return [ () => { let repo = void 0; return async (_tree, file) => { let created = void 0; let modified = void 0; let published = void 0; const fp = file.data.filePath; const fullFp = path.posix.join(file.cwd, fp); for (const source of opts.priority) { if (source === "filesystem") { const st = await fs.promises.stat(fullFp); created ||= st.birthtimeMs; modified ||= st.mtimeMs; } else if (source === "frontmatter" && file.data.frontmatter) { created ||= file.data.frontmatter.date; modified ||= file.data.frontmatter.lastmod; modified ||= file.data.frontmatter.updated; modified ||= file.data.frontmatter["last-modified"]; published ||= file.data.frontmatter.publishDate; } else if (source === "git") { if (!repo) { repo = new Repository(file.cwd); } modified ||= await repo.getFileLatestModifiedDateAsync(file.data.filePath); } } file.data.dates = { created: coerceDate(fp, created), modified: coerceDate(fp, modified), published: coerceDate(fp, published) }; }; } ]; } }; }, "CreatedModifiedDate"); // quartz/plugins/transformers/latex.ts import remarkMath from "remark-math"; import rehypeKatex from "rehype-katex"; import rehypeMathjax from "rehype-mathjax/svg.js"; var Latex = /* @__PURE__ */ __name((opts) => { const engine = opts?.renderEngine ?? "katex"; return { name: "Latex", markdownPlugins() { return [remarkMath]; }, htmlPlugins() { if (engine === "katex") { return [[rehypeKatex, { output: "html" }]]; } else { return [rehypeMathjax]; } }, externalResources() { if (engine === "katex") { return { css: [ // base css "https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css" ], js: [ { // fix copy behaviour: https://github.com/KaTeX/KaTeX/blob/main/contrib/copy-tex/README.md src: "https://cdn.jsdelivr.net/npm/katex@0.16.7/dist/contrib/copy-tex.min.js", loadTime: "afterDOMReady", contentType: "external" } ] }; } else { return {}; } } }; }, "Latex"); // quartz/plugins/transformers/description.ts import { toString } from "hast-util-to-string"; // quartz/util/escape.ts var escapeHTML = /* @__PURE__ */ __name((unsafe) => { return unsafe.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'"); }, "escapeHTML"); // quartz/plugins/transformers/description.ts var defaultOptions4 = { descriptionLength: 150 }; var Description = /* @__PURE__ */ __name((userOpts) => { const opts = { ...defaultOptions4, ...userOpts }; return { name: "Description", htmlPlugins() { return [ () => { return async (tree, file) => { const frontMatterDescription = file.data.frontmatter?.description; const text = escapeHTML(toString(tree)); const desc = frontMatterDescription ?? text; const sentences = desc.replace(/\s+/g, " ").split("."); let finalDesc = ""; let sentenceIdx = 0; const len = opts.descriptionLength; while (finalDesc.length < len) { const sentence = sentences[sentenceIdx]; if (!sentence) break; finalDesc += sentence + "."; sentenceIdx++; } file.data.description = finalDesc; file.data.text = text; }; } ]; } }; }, "Description"); // quartz/plugins/transformers/links.ts import path2 from "path"; import { visit } from "unist-util-visit"; import isAbsoluteUrl from "is-absolute-url"; var defaultOptions5 = { markdownLinkResolution: "absolute", prettyLinks: true, openLinksInNewTab: false }; var CrawlLinks = /* @__PURE__ */ __name((userOpts) => { const opts = { ...defaultOptions5, ...userOpts }; return { name: "LinkProcessing", htmlPlugins(ctx) { return [ () => { return (tree, file) => { const curSlug = simplifySlug(file.data.slug); const outgoing = /* @__PURE__ */ new Set(); const transformOptions = { strategy: opts.markdownLinkResolution, allSlugs: ctx.allSlugs }; visit(tree, "element", (node, _index, _parent) => { if (node.tagName === "a" && node.properties && typeof node.properties.href === "string") { let dest = node.properties.href; node.properties.className ??= []; node.properties.className.push(isAbsoluteUrl(dest) ? "external" : "internal"); if (opts.openLinksInNewTab) { node.properties.target = "_blank"; } const isInternal = !(isAbsoluteUrl(dest) || dest.startsWith("#")); if (isInternal) { dest = node.properties.href = transformLink( file.data.slug, dest, transformOptions ); const url = new URL(dest, `https://base.com/${curSlug}`); const canonicalDest = url.pathname; const [destCanonical, _destAnchor] = splitAnchor(canonicalDest); const simple = decodeURIComponent( simplifySlug(destCanonical) ); outgoing.add(simple); node.properties["data-slug"] = simple; } if (opts.prettyLinks && isInternal && node.children.length === 1 && node.children[0].type === "text" && !node.children[0].value.startsWith("#")) { node.children[0].value = path2.basename(node.children[0].value); } } if (["img", "video", "audio", "iframe"].includes(node.tagName) && node.properties && typeof node.properties.src === "string") { if (!isAbsoluteUrl(node.properties.src)) { let dest = node.properties.src; dest = node.properties.src = transformLink( file.data.slug, dest, transformOptions ); node.properties.src = dest; } } }); file.data.links = [...outgoing]; }; } ]; } }; }, "CrawlLinks"); // quartz/plugins/transformers/ofm.ts import { findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"; import { slug as slugAnchor2 } from "github-slugger"; import rehypeRaw from "rehype-raw"; import { visit as visit2 } from "unist-util-visit"; import path3 from "path"; // quartz/components/scripts/callout.inline.ts var callout_inline_default = ""; // quartz/plugins/transformers/ofm.ts import { toHast } from "mdast-util-to-hast"; import { toHtml } from "hast-util-to-html"; // quartz/util/lang.ts function pluralize(count, s) { if (count === 1) { return `1 ${s}`; } else { return `${count} ${s}s`; } } __name(pluralize, "pluralize"); function capitalize(s) { return s.substring(0, 1).toUpperCase() + s.substring(1); } __name(capitalize, "capitalize"); // quartz/plugins/transformers/ofm.ts var defaultOptions6 = { comments: true, highlight: true, wikilinks: true, callouts: true, mermaid: true, parseTags: true, parseBlockReferences: true, enableInHtmlEmbed: false }; var icons = { infoIcon: ``, pencilIcon: ``, clipboardListIcon: ``, checkCircleIcon: ``, flameIcon: ``, checkIcon: ``, helpCircleIcon: ``, alertTriangleIcon: ``, xIcon: ``, zapIcon: ``, bugIcon: ``, listIcon: ``, quoteIcon: `` }; var callouts = { note: icons.pencilIcon, abstract: icons.clipboardListIcon, info: icons.infoIcon, todo: icons.checkCircleIcon, tip: icons.flameIcon, success: icons.checkIcon, question: icons.helpCircleIcon, warning: icons.alertTriangleIcon, failure: icons.xIcon, danger: icons.zapIcon, bug: icons.bugIcon, example: icons.listIcon, quote: icons.quoteIcon }; var calloutMapping = { note: "note", abstract: "abstract", summary: "abstract", tldr: "abstract", info: "info", todo: "todo", tip: "tip", hint: "tip", important: "tip", success: "success", check: "success", done: "success", question: "question", help: "question", faq: "question", warning: "warning", attention: "warning", caution: "warning", failure: "failure", missing: "failure", fail: "failure", danger: "danger", error: "danger", bug: "bug", example: "example", quote: "quote", cite: "quote" }; function canonicalizeCallout(calloutName) { let callout = calloutName.toLowerCase(); return calloutMapping[callout] ?? "note"; } __name(canonicalizeCallout, "canonicalizeCallout"); var wikilinkRegex = new RegExp(/!?\[\[([^\[\]\|\#]+)?(#[^\[\]\|\#]+)?(\|[^\[\]\|\#]+)?\]\]/, "g"); var highlightRegex = new RegExp(/==([^=]+)==/, "g"); var commentRegex = new RegExp(/%%(.+)%%/, "g"); var calloutRegex = new RegExp(/^\[\!(\w+)\]([+-]?)/); var calloutLineRegex = new RegExp(/^> *\[\!\w+\][+-]?.*$/, "gm"); var tagRegex = new RegExp(/(?:^| )#((?:[-_\p{L}\d])+(?:\/[-_\p{L}\d]+)*)/, "gu"); var blockReferenceRegex = new RegExp(/\^([A-Za-z0-9]+)$/, "g"); var ObsidianFlavoredMarkdown = /* @__PURE__ */ __name((userOpts) => { const opts = { ...defaultOptions6, ...userOpts }; const mdastToHtml = /* @__PURE__ */ __name((ast) => { const hast = toHast(ast, { allowDangerousHtml: true }); return toHtml(hast, { allowDangerousHtml: true }); }, "mdastToHtml"); const findAndReplace = opts.enableInHtmlEmbed ? (tree, regex, replace) => { if (replace) { visit2(tree, "html", (node) => { if (typeof replace === "string") { node.value = node.value.replace(regex, replace); } else { node.value = node.value.replaceAll(regex, (substring, ...args) => { const replaceValue = replace(substring, ...args); if (typeof replaceValue === "string") { return replaceValue; } else if (Array.isArray(replaceValue)) { return replaceValue.map(mdastToHtml).join(""); } else if (typeof replaceValue === "object" && replaceValue !== null) { return mdastToHtml(replaceValue); } else { return substring; } }); } }); } mdastFindReplace(tree, regex, replace); } : mdastFindReplace; return { name: "ObsidianFlavoredMarkdown", textTransform(_ctx, src) { if (opts.callouts) { src = src.toString(); src = src.replaceAll(calloutLineRegex, (value) => { return value + "\n> "; }); } if (opts.wikilinks) { src = src.toString(); src = src.replaceAll(wikilinkRegex, (value, ...capture) => { const [rawFp, rawHeader, rawAlias] = capture; const fp = rawFp ?? ""; const anchor = rawHeader?.trim().slice(1); const displayAnchor = anchor ? `#${slugAnchor2(anchor)}` : ""; const displayAlias = rawAlias ?? rawHeader?.replace("#", "|") ?? ""; const embedDisplay = value.startsWith("!") ? "!" : ""; return `${embedDisplay}[[${fp}${displayAnchor}${displayAlias}]]`; }); } return src; }, markdownPlugins() { const plugins = []; if (opts.wikilinks) { plugins.push(() => { return (tree, _file) => { findAndReplace(tree, wikilinkRegex, (value, ...capture) => { let [rawFp, rawHeader, rawAlias] = capture; const fp = rawFp?.trim() ?? ""; const anchor = rawHeader?.trim() ?? ""; const alias = rawAlias?.slice(1).trim(); if (value.startsWith("!")) { const ext = path3.extname(fp).toLowerCase(); const url2 = slugifyFilePath(fp); if ([".png", ".jpg", ".jpeg", ".gif", ".bmp", ".svg"].includes(ext)) { const dims = alias ?? ""; let [width, height] = dims.split("x", 2); width ||= "auto"; height ||= "auto"; return { type: "image", url: url2, data: { hProperties: { width, height } } }; } else if ([".mp4", ".webm", ".ogv", ".mov", ".mkv"].includes(ext)) { return { type: "html", value: `` }; } else if ([".mp3", ".webm", ".wav", ".m4a", ".ogg", ".3gp", ".flac"].includes(ext)) { return { type: "html", value: `` }; } else if ([".pdf"].includes(ext)) { return { type: "html", value: `` }; } else if (ext === "") { const block = anchor.slice(1); return { type: "html", data: { hProperties: { transclude: true } }, value: `
Transclude of block ${block}
` }; } } const url = fp + anchor; return { type: "link", url, children: [ { type: "text", value: alias ?? fp } ] }; }); }; }); } if (opts.highlight) { plugins.push(() => { return (tree, _file) => { findAndReplace(tree, highlightRegex, (_value, ...capture) => { const [inner] = capture; return { type: "html", value: `${inner}` }; }); }; }); } if (opts.comments) { plugins.push(() => { return (tree, _file) => { findAndReplace(tree, commentRegex, (_value, ..._capture) => { return { type: "text", value: "" }; }); }; }); } if (opts.callouts) { plugins.push(() => { return (tree, _file) => { visit2(tree, "blockquote", (node) => { if (node.children.length === 0) { return; } const firstChild = node.children[0]; if (firstChild.type !== "paragraph" || firstChild.children[0]?.type !== "text") { return; } const text = firstChild.children[0].value; const restChildren = firstChild.children.slice(1); const [firstLine, ...remainingLines] = text.split("\n"); const remainingText = remainingLines.join("\n"); const match = firstLine.match(calloutRegex); if (match && match.input) { const [calloutDirective, typeString, collapseChar] = match; const calloutType = canonicalizeCallout( typeString.toLowerCase() ); const collapse = collapseChar === "+" || collapseChar === "-"; const defaultState = collapseChar === "-" ? "collapsed" : "expanded"; const titleContent = match.input.slice(calloutDirective.length).trim() || capitalize(calloutType); const titleNode = { type: "paragraph", children: [{ type: "text", value: titleContent + " " }, ...restChildren] }; const title = mdastToHtml(titleNode); const toggleIcon = ` `; const titleHtml = { type: "html", value: `
${callouts[calloutType]}
${title}
${collapse ? toggleIcon : ""}
` }; const blockquoteContent = [titleHtml]; if (remainingText.length > 0) { blockquoteContent.push({ type: "paragraph", children: [ { type: "text", value: remainingText } ] }); } node.children.splice(0, 1, ...blockquoteContent); node.data = { hProperties: { ...node.data?.hProperties ?? {}, className: `callout ${collapse ? "is-collapsible" : ""} ${defaultState === "collapsed" ? "is-collapsed" : ""}`, "data-callout": calloutType, "data-callout-fold": collapse } }; } }); }; }); } if (opts.mermaid) { plugins.push(() => { return (tree, _file) => { visit2(tree, "code", (node) => { if (node.lang === "mermaid") { node.data = { hProperties: { className: ["mermaid"] } }; } }); }; }); } if (opts.parseTags) { plugins.push(() => { return (tree, file) => { const base = pathToRoot(file.data.slug); findAndReplace(tree, tagRegex, (_value, tag) => { if (/^\d+$/.test(tag)) { return false; } tag = slugTag(tag); if (file.data.frontmatter && !file.data.frontmatter.tags.includes(tag)) { file.data.frontmatter.tags.push(tag); } return { type: "link", url: base + `/tags/${tag}`, data: { hProperties: { className: ["tag-link"] } }, children: [ { type: "text", value: `#${tag}` } ] }; }); }; }); } return plugins; }, htmlPlugins() { const plugins = [rehypeRaw]; if (opts.parseBlockReferences) { plugins.push(() => { const inlineTagTypes = /* @__PURE__ */ new Set(["p", "li"]); const blockTagTypes = /* @__PURE__ */ new Set(["blockquote"]); return (tree, file) => { file.data.blocks = {}; visit2(tree, "element", (node, index, parent) => { if (blockTagTypes.has(node.tagName)) { const nextChild = parent?.children.at(index + 2); if (nextChild && nextChild.tagName === "p") { const text = nextChild.children.at(0); if (text && text.value && text.type === "text") { const matches = text.value.match(blockReferenceRegex); if (matches && matches.length >= 1) { parent.children.splice(index + 2, 1); const block = matches[0].slice(1); if (!Object.keys(file.data.blocks).includes(block)) { node.properties = { ...node.properties, id: block }; file.data.blocks[block] = node; } } } } } else if (inlineTagTypes.has(node.tagName)) { const last = node.children.at(-1); if (last && last.value && typeof last.value === "string") { const matches = last.value.match(blockReferenceRegex); if (matches && matches.length >= 1) { last.value = last.value.slice(0, -matches[0].length); const block = matches[0].slice(1); if (!Object.keys(file.data.blocks).includes(block)) { node.properties = { ...node.properties, id: block }; file.data.blocks[block] = node; } } } } }); }; }); } return plugins; }, externalResources() { const js = []; if (opts.callouts) { js.push({ script: callout_inline_default, loadTime: "afterDOMReady", contentType: "inline" }); } if (opts.mermaid) { js.push({ script: ` import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs'; const darkMode = document.documentElement.getAttribute('saved-theme') === 'dark' mermaid.initialize({ startOnLoad: false, securityLevel: 'loose', theme: darkMode ? 'dark' : 'default' }); document.addEventListener('nav', async () => { await mermaid.run({ querySelector: '.mermaid' }) }); `, loadTime: "afterDOMReady", moduleType: "module", contentType: "inline" }); } return { js }; } }; }, "ObsidianFlavoredMarkdown"); // quartz/plugins/transformers/oxhugofm.ts var relrefRegex = new RegExp(/\[([^\]]+)\]\(\{\{< relref "([^"]+)" >\}\}\)/, "g"); var predefinedHeadingIdRegex = new RegExp(/(.*) {#(?:.*)}/, "g"); var hugoShortcodeRegex = new RegExp(/{{(.*)}}/, "g"); var figureTagRegex = new RegExp(/< ?figure src="(.*)" ?>/, "g"); var inlineLatexRegex = new RegExp(/\\\\\((.+?)\\\\\)/, "g"); var blockLatexRegex = new RegExp( /(?:\\begin{equation}|\\\\\(|\\\\\[)([\s\S]*?)(?:\\\\\]|\\\\\)|\\end{equation})/, "g" ); var quartzLatexRegex = new RegExp(/\$\$[\s\S]*?\$\$|\$.*?\$/, "g"); // quartz/plugins/transformers/syntax.ts import rehypePrettyCode from "rehype-pretty-code"; var SyntaxHighlighting = /* @__PURE__ */ __name(() => ({ name: "SyntaxHighlighting", htmlPlugins() { return [ [ rehypePrettyCode, { theme: "css-variables" } ] ]; } }), "SyntaxHighlighting"); // quartz/plugins/transformers/toc.ts import { visit as visit3 } from "unist-util-visit"; import { toString as toString2 } from "mdast-util-to-string"; import Slugger from "github-slugger"; var defaultOptions7 = { maxDepth: 3, minEntries: 1, showByDefault: true, collapseByDefault: false }; var TableOfContents = /* @__PURE__ */ __name((userOpts) => { const opts = { ...defaultOptions7, ...userOpts }; return { name: "TableOfContents", markdownPlugins() { return [ () => { return async (tree, file) => { const display = file.data.frontmatter?.enableToc ?? opts.showByDefault; if (display) { const slugAnchor3 = new Slugger(); const toc = []; let highestDepth = opts.maxDepth; visit3(tree, "heading", (node) => { if (node.depth <= opts.maxDepth) { const text = toString2(node); highestDepth = Math.min(highestDepth, node.depth); toc.push({ depth: node.depth, text, slug: slugAnchor3.slug(text) }); } }); if (toc.length > opts.minEntries) { file.data.toc = toc.map((entry) => ({ ...entry, depth: entry.depth - highestDepth })); file.data.collapseToc = opts.collapseByDefault; } } }; } ]; } }; }, "TableOfContents"); // quartz/plugins/transformers/linebreaks.ts import remarkBreaks from "remark-breaks"; // quartz/plugins/filters/draft.ts var RemoveDrafts = /* @__PURE__ */ __name(() => ({ name: "RemoveDrafts", shouldPublish(_ctx, [_tree, vfile]) { const draftFlag = vfile.data?.frontmatter?.draft ?? false; return !draftFlag; } }), "RemoveDrafts"); // quartz/components/Header.tsx import { jsx } from "preact/jsx-runtime"; function Header({ children }) { return children.length > 0 ? /* @__PURE__ */ jsx("header", { children }) : null; } __name(Header, "Header"); Header.css = ` header { display: flex; flex-direction: row; align-items: center; margin: 2rem 0; gap: 1.5rem; } header h1 { margin: 0; flex: auto; } `; var Header_default = /* @__PURE__ */ __name(() => Header, "default"); // quartz/components/scripts/clipboard.inline.ts var clipboard_inline_default = ""; // quartz/components/styles/clipboard.scss var clipboard_default = ""; // quartz/components/Body.tsx import { jsx as jsx2 } from "preact/jsx-runtime"; function Body({ children }) { return /* @__PURE__ */ jsx2("div", { id: "quartz-body", children }); } __name(Body, "Body"); Body.afterDOMLoaded = clipboard_inline_default; Body.css = clipboard_default; var Body_default = /* @__PURE__ */ __name(() => Body, "default"); // quartz/components/renderPage.tsx import { render } from "preact-render-to-string"; // quartz/util/resources.tsx import { randomUUID } from "crypto"; import { jsx as jsx3 } from "preact/jsx-runtime"; function JSResourceToScriptElement(resource, preserve) { const scriptType = resource.moduleType ?? "application/javascript"; const spaPreserve = preserve ?? resource.spaPreserve; if (resource.contentType === "external") { return /* @__PURE__ */ jsx3("script", { src: resource.src, type: scriptType, "spa-preserve": spaPreserve }, resource.src); } else { const content = resource.script; return /* @__PURE__ */ jsx3("script", { type: scriptType, "spa-preserve": spaPreserve, children: content }, randomUUID()); } } __name(JSResourceToScriptElement, "JSResourceToScriptElement"); // quartz/components/renderPage.tsx import { visit as visit4 } from "unist-util-visit"; import { jsx as jsx4, jsxs } from "preact/jsx-runtime"; function pageResources(baseDir, staticResources) { const contentIndexPath = joinSegments(baseDir, "static/contentIndex.json"); const contentIndexScript = `const fetchData = fetch(\`${contentIndexPath}\`).then(data => data.json())`; return { css: [joinSegments(baseDir, "index.css"), ...staticResources.css], js: [ { src: joinSegments(baseDir, "prescript.js"), loadTime: "beforeDOMReady", contentType: "external" }, { loadTime: "beforeDOMReady", contentType: "inline", spaPreserve: true, script: contentIndexScript }, ...staticResources.js, { src: joinSegments(baseDir, "postscript.js"), loadTime: "afterDOMReady", moduleType: "module", contentType: "external" } ] }; } __name(pageResources, "pageResources"); function renderPage(slug2, componentData, components, pageResources2) { visit4(componentData.tree, "element", (node, _index, _parent) => { if (node.tagName === "blockquote") { const classNames = node.properties?.className ?? []; if (classNames.includes("transclude")) { const inner = node.children[0]; const blockSlug = inner.properties?.["data-slug"]; const blockRef = node.properties.dataBlock; let blockNode = componentData.allFiles.find((f) => f.slug === blockSlug)?.blocks?.[blockRef]; if (blockNode) { if (blockNode.tagName === "li") { blockNode = { type: "element", tagName: "ul", children: [blockNode] }; } node.children = [ blockNode, { type: "element", tagName: "a", properties: { href: inner.properties?.href, class: ["internal"] }, children: [{ type: "text", value: `Link to original` }] } ]; } } } }); const { head: Head, header, beforeBody, pageBody: Content2, left, right, footer: Footer } = components; const Header2 = Header_default(); const Body2 = Body_default(); const LeftComponent = /* @__PURE__ */ jsx4("div", { class: "left sidebar", children: left.map((BodyComponent) => /* @__PURE__ */ jsx4(BodyComponent, { ...componentData })) }); const RightComponent = /* @__PURE__ */ jsx4("div", { class: "right sidebar", children: right.map((BodyComponent) => /* @__PURE__ */ jsx4(BodyComponent, { ...componentData })) }); const doc = /* @__PURE__ */ jsxs("html", { children: [ /* @__PURE__ */ jsx4(Head, { ...componentData }), /* @__PURE__ */ jsx4("body", { "data-slug": slug2, children: /* @__PURE__ */ jsxs("div", { id: "quartz-root", class: "page", children: [ /* @__PURE__ */ jsxs(Body2, { ...componentData, children: [ LeftComponent, /* @__PURE__ */ jsxs("div", { class: "center", children: [ /* @__PURE__ */ jsxs("div", { class: "page-header", children: [ /* @__PURE__ */ jsx4(Header2, { ...componentData, children: header.map((HeaderComponent) => /* @__PURE__ */ jsx4(HeaderComponent, { ...componentData })) }), /* @__PURE__ */ jsx4("div", { class: "popover-hint", children: beforeBody.map((BodyComponent) => /* @__PURE__ */ jsx4(BodyComponent, { ...componentData })) }) ] }), /* @__PURE__ */ jsx4(Content2, { ...componentData }) ] }), RightComponent ] }), /* @__PURE__ */ jsx4(Footer, { ...componentData }) ] }) }), pageResources2.js.filter((resource) => resource.loadTime === "afterDOMReady").map((res) => JSResourceToScriptElement(res)) ] }); return "\n" + render(doc); } __name(renderPage, "renderPage"); // quartz/util/jsx.ts import { toJsxRuntime } from "hast-util-to-jsx-runtime"; import { Fragment, jsx as jsx5, jsxs as jsxs2 } from "preact/jsx-runtime"; // quartz/util/trace.ts import chalk2 from "chalk"; import process2 from "process"; import { isMainThread } from "workerpool"; var rootFile = /.*at file:/; function trace(msg, err) { let stack = err.stack ?? ""; const lines = []; lines.push(""); lines.push( "\n" + chalk2.bgRed.black.bold(" ERROR ") + "\n\n" + chalk2.red(` ${msg}`) + (err.message.length > 0 ? `: ${err.message}` : "") ); let reachedEndOfLegibleTrace = false; for (const line of stack.split("\n").slice(1)) { if (reachedEndOfLegibleTrace) { break; } if (!line.includes("node_modules")) { lines.push(` ${line}`); if (rootFile.test(line)) { reachedEndOfLegibleTrace = true; } } } const traceMsg = lines.join("\n"); if (!isMainThread) { throw new Error(traceMsg); } else { console.error(traceMsg); process2.exit(1); } } __name(trace, "trace"); // quartz/util/jsx.ts function htmlToJsx(fp, tree) { try { return toJsxRuntime(tree, { Fragment, jsx: jsx5, jsxs: jsxs2, elementAttributeNameCase: "html" }); } catch (e) { trace(`Failed to parse Markdown in \`${fp}\` into JSX`, e); } } __name(htmlToJsx, "htmlToJsx"); // quartz/components/pages/Content.tsx import { jsx as jsx6 } from "preact/jsx-runtime"; function Content({ fileData, tree }) { const content = htmlToJsx(fileData.filePath, tree); return /* @__PURE__ */ jsx6("article", { class: "popover-hint", children: content }); } __name(Content, "Content"); var Content_default = /* @__PURE__ */ __name(() => Content, "default"); // quartz/components/styles/listPage.scss var listPage_default = ""; // quartz/components/Date.tsx import { Fragment as Fragment2, jsx as jsx7 } from "preact/jsx-runtime"; function getDate(cfg, data) { if (!cfg.defaultDateType) { throw new Error( `Field 'defaultDateType' was not set in the configuration object of quartz.config.ts. See https://quartz.jzhao.xyz/configuration#general-configuration for more details.` ); } return data.dates?.[cfg.defaultDateType]; } __name(getDate, "getDate"); function formatDate(d) { return d.toLocaleDateString("en-US", { year: "numeric", month: "short", day: "2-digit" }); } __name(formatDate, "formatDate"); function Date2({ date }) { return /* @__PURE__ */ jsx7(Fragment2, { children: formatDate(date) }); } __name(Date2, "Date"); // quartz/components/PageList.tsx import { jsx as jsx8, jsxs as jsxs3 } from "preact/jsx-runtime"; function byDateAndAlphabetical(cfg) { return (f1, f2) => { if (f1.dates && f2.dates) { return getDate(cfg, f2).getTime() - getDate(cfg, f1).getTime(); } else if (f1.dates && !f2.dates) { return -1; } else if (!f1.dates && f2.dates) { return 1; } const f1Title = f1.frontmatter?.title.toLowerCase() ?? ""; const f2Title = f2.frontmatter?.title.toLowerCase() ?? ""; return f1Title.localeCompare(f2Title); }; } __name(byDateAndAlphabetical, "byDateAndAlphabetical"); function PageList({ cfg, fileData, allFiles, limit }) { let list = allFiles.sort(byDateAndAlphabetical(cfg)); if (limit) { list = list.slice(0, limit); } return /* @__PURE__ */ jsx8("ul", { class: "section-ul", children: list.map((page) => { const title = page.frontmatter?.title; const tags = page.frontmatter?.tags ?? []; return /* @__PURE__ */ jsx8("li", { class: "section-li", children: /* @__PURE__ */ jsxs3("div", { class: "section", children: [ page.dates && /* @__PURE__ */ jsx8("p", { class: "meta", children: /* @__PURE__ */ jsx8(Date2, { date: getDate(cfg, page) }) }), /* @__PURE__ */ jsx8("div", { class: "desc", children: /* @__PURE__ */ jsx8("h3", { children: /* @__PURE__ */ jsx8("a", { href: resolveRelative(fileData.slug, page.slug), class: "internal", children: title }) }) }), /* @__PURE__ */ jsx8("ul", { class: "tags", children: tags.map((tag) => /* @__PURE__ */ jsx8("li", { children: /* @__PURE__ */ jsxs3( "a", { class: "internal tag-link", href: resolveRelative(fileData.slug, `tags/${tag}`), children: [ "#", tag ] } ) })) }) ] }) }); }) }); } __name(PageList, "PageList"); PageList.css = ` .section h3 { margin: 0; } .section > .tags { margin: 0; } `; // quartz/components/pages/TagContent.tsx import { jsx as jsx9, jsxs as jsxs4 } from "preact/jsx-runtime"; var numPages = 10; function TagContent(props) { const { tree, fileData, allFiles } = props; const slug2 = fileData.slug; if (!(slug2?.startsWith("tags/") || slug2 === "tags")) { throw new Error(`Component "TagContent" tried to render a non-tag page: ${slug2}`); } const tag = simplifySlug(slug2.slice("tags/".length)); const allPagesWithTag = /* @__PURE__ */ __name((tag2) => allFiles.filter( (file) => (file.frontmatter?.tags ?? []).flatMap(getAllSegmentPrefixes).includes(tag2) ), "allPagesWithTag"); const content = tree.children.length === 0 ? fileData.description : htmlToJsx(fileData.filePath, tree); if (tag === "") { const tags = [...new Set(allFiles.flatMap((data) => data.frontmatter?.tags ?? []))]; const tagItemMap = /* @__PURE__ */ new Map(); for (const tag2 of tags) { tagItemMap.set(tag2, allPagesWithTag(tag2)); } return /* @__PURE__ */ jsxs4("div", { class: "popover-hint", children: [ /* @__PURE__ */ jsx9("article", { children: /* @__PURE__ */ jsx9("p", { children: content }) }), /* @__PURE__ */ jsxs4("p", { children: [ "Found ", tags.length, " total tags." ] }), /* @__PURE__ */ jsx9("div", { children: tags.map((tag2) => { const pages = tagItemMap.get(tag2); const listProps = { ...props, allFiles: pages }; const contentPage = allFiles.filter((file) => file.slug === `tags/${tag2}`)[0]; const content2 = contentPage?.description; return /* @__PURE__ */ jsxs4("div", { children: [ /* @__PURE__ */ jsx9("h2", { children: /* @__PURE__ */ jsxs4("a", { class: "internal tag-link", href: `./${tag2}`, children: [ "#", tag2 ] }) }), content2 && /* @__PURE__ */ jsx9("p", { children: content2 }), /* @__PURE__ */ jsxs4("p", { children: [ pluralize(pages.length, "item"), " with this tag.", " ", pages.length > numPages && `Showing first ${numPages}.` ] }), /* @__PURE__ */ jsx9(PageList, { limit: numPages, ...listProps }) ] }); }) }) ] }); } else { const pages = allPagesWithTag(tag); const listProps = { ...props, allFiles: pages }; return /* @__PURE__ */ jsxs4("div", { class: "popover-hint", children: [ /* @__PURE__ */ jsx9("article", { children: content }), /* @__PURE__ */ jsxs4("p", { children: [ pluralize(pages.length, "item"), " with this tag." ] }), /* @__PURE__ */ jsx9("div", { children: /* @__PURE__ */ jsx9(PageList, { ...listProps }) }) ] }); } } __name(TagContent, "TagContent"); TagContent.css = listPage_default + PageList.css; var TagContent_default = /* @__PURE__ */ __name(() => TagContent, "default"); // quartz/components/pages/FolderContent.tsx import path4 from "path"; import { jsx as jsx10, jsxs as jsxs5 } from "preact/jsx-runtime"; function FolderContent(props) { const { tree, fileData, allFiles } = props; const folderSlug = _stripSlashes(simplifySlug(fileData.slug)); const allPagesInFolder = allFiles.filter((file) => { const fileSlug = _stripSlashes(simplifySlug(file.slug)); const prefixed = fileSlug.startsWith(folderSlug) && fileSlug !== folderSlug; const folderParts = folderSlug.split(path4.posix.sep); const fileParts = fileSlug.split(path4.posix.sep); const isDirectChild = fileParts.length === folderParts.length + 1; return prefixed && isDirectChild; }); const listProps = { ...props, allFiles: allPagesInFolder }; const content = tree.children.length === 0 ? fileData.description : htmlToJsx(fileData.filePath, tree); return /* @__PURE__ */ jsxs5("div", { class: "popover-hint", children: [ /* @__PURE__ */ jsx10("article", { children: /* @__PURE__ */ jsx10("p", { children: content }) }), /* @__PURE__ */ jsxs5("p", { children: [ pluralize(allPagesInFolder.length, "item"), " under this folder." ] }), /* @__PURE__ */ jsx10("div", { children: /* @__PURE__ */ jsx10(PageList, { ...listProps }) }) ] }); } __name(FolderContent, "FolderContent"); FolderContent.css = listPage_default + PageList.css; var FolderContent_default = /* @__PURE__ */ __name(() => FolderContent, "default"); // quartz/components/pages/404.tsx import { jsx as jsx11, jsxs as jsxs6 } from "preact/jsx-runtime"; function NotFound() { return /* @__PURE__ */ jsxs6("article", { class: "popover-hint", children: [ /* @__PURE__ */ jsx11("h1", { children: "404" }), /* @__PURE__ */ jsx11("p", { children: "Either this page is private or doesn't exist." }) ] }); } __name(NotFound, "NotFound"); var __default = /* @__PURE__ */ __name(() => NotFound, "default"); // quartz/components/ArticleTitle.tsx import { jsx as jsx12 } from "preact/jsx-runtime"; function ArticleTitle({ fileData, displayClass }) { const title = fileData.frontmatter?.title; if (title) { return /* @__PURE__ */ jsx12("h1", { class: `article-title ${displayClass ?? ""}`, children: title }); } else { return null; } } __name(ArticleTitle, "ArticleTitle"); ArticleTitle.css = ` .article-title { margin: 2rem 0 0 0; } `; var ArticleTitle_default = /* @__PURE__ */ __name(() => ArticleTitle, "default"); // quartz/components/scripts/darkmode.inline.ts var darkmode_inline_default = ""; // quartz/components/styles/darkmode.scss var darkmode_default = ""; // quartz/components/Darkmode.tsx import { jsx as jsx13, jsxs as jsxs7 } from "preact/jsx-runtime"; function Darkmode({ displayClass }) { return /* @__PURE__ */ jsxs7("div", { class: `darkmode ${displayClass ?? ""}`, children: [ /* @__PURE__ */ jsx13("input", { class: "toggle", id: "darkmode-toggle", type: "checkbox", tabIndex: -1 }), /* @__PURE__ */ jsx13("label", { id: "toggle-label-light", for: "darkmode-toggle", tabIndex: -1, children: /* @__PURE__ */ jsxs7( "svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", id: "dayIcon", x: "0px", y: "0px", viewBox: "0 0 35 35", style: "enable-background:new 0 0 35 35;", xmlSpace: "preserve", children: [ /* @__PURE__ */ jsx13("title", { children: "Light mode" }), /* @__PURE__ */ jsx13("path", { d: "M6,17.5C6,16.672,5.328,16,4.5,16h-3C0.672,16,0,16.672,0,17.5 S0.672,19,1.5,19h3C5.328,19,6,18.328,6,17.5z M7.5,26c-0.414,0-0.789,0.168-1.061,0.439l-2,2C4.168,28.711,4,29.086,4,29.5 C4,30.328,4.671,31,5.5,31c0.414,0,0.789-0.168,1.06-0.44l2-2C8.832,28.289,9,27.914,9,27.5C9,26.672,8.329,26,7.5,26z M17.5,6 C18.329,6,19,5.328,19,4.5v-3C19,0.672,18.329,0,17.5,0S16,0.672,16,1.5v3C16,5.328,16.671,6,17.5,6z M27.5,9 c0.414,0,0.789-0.168,1.06-0.439l2-2C30.832,6.289,31,5.914,31,5.5C31,4.672,30.329,4,29.5,4c-0.414,0-0.789,0.168-1.061,0.44 l-2,2C26.168,6.711,26,7.086,26,7.5C26,8.328,26.671,9,27.5,9z M6.439,8.561C6.711,8.832,7.086,9,7.5,9C8.328,9,9,8.328,9,7.5 c0-0.414-0.168-0.789-0.439-1.061l-2-2C6.289,4.168,5.914,4,5.5,4C4.672,4,4,4.672,4,5.5c0,0.414,0.168,0.789,0.439,1.06 L6.439,8.561z M33.5,16h-3c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5h3c0.828,0,1.5-0.672,1.5-1.5S34.328,16,33.5,16z M28.561,26.439C28.289,26.168,27.914,26,27.5,26c-0.828,0-1.5,0.672-1.5,1.5c0,0.414,0.168,0.789,0.439,1.06l2,2 C28.711,30.832,29.086,31,29.5,31c0.828,0,1.5-0.672,1.5-1.5c0-0.414-0.168-0.789-0.439-1.061L28.561,26.439z M17.5,29 c-0.829,0-1.5,0.672-1.5,1.5v3c0,0.828,0.671,1.5,1.5,1.5s1.5-0.672,1.5-1.5v-3C19,29.672,18.329,29,17.5,29z M17.5,7 C11.71,7,7,11.71,7,17.5S11.71,28,17.5,28S28,23.29,28,17.5S23.29,7,17.5,7z M17.5,25c-4.136,0-7.5-3.364-7.5-7.5 c0-4.136,3.364-7.5,7.5-7.5c4.136,0,7.5,3.364,7.5,7.5C25,21.636,21.636,25,17.5,25z" }) ] } ) }), /* @__PURE__ */ jsx13("label", { id: "toggle-label-dark", for: "darkmode-toggle", tabIndex: -1, children: /* @__PURE__ */ jsxs7( "svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", id: "nightIcon", x: "0px", y: "0px", viewBox: "0 0 100 100", style: "enable-background='new 0 0 100 100'", xmlSpace: "preserve", children: [ /* @__PURE__ */ jsx13("title", { children: "Dark mode" }), /* @__PURE__ */ jsx13("path", { d: "M96.76,66.458c-0.853-0.852-2.15-1.064-3.23-0.534c-6.063,2.991-12.858,4.571-19.655,4.571 C62.022,70.495,50.88,65.88,42.5,57.5C29.043,44.043,25.658,23.536,34.076,6.47c0.532-1.08,0.318-2.379-0.534-3.23 c-0.851-0.852-2.15-1.064-3.23-0.534c-4.918,2.427-9.375,5.619-13.246,9.491c-9.447,9.447-14.65,22.008-14.65,35.369 c0,13.36,5.203,25.921,14.65,35.368s22.008,14.65,35.368,14.65c13.361,0,25.921-5.203,35.369-14.65 c3.872-3.871,7.064-8.328,9.491-13.246C97.826,68.608,97.611,67.309,96.76,66.458z" }) ] } ) }) ] }); } __name(Darkmode, "Darkmode"); Darkmode.beforeDOMLoaded = darkmode_inline_default; Darkmode.css = darkmode_default; var Darkmode_default = /* @__PURE__ */ __name(() => Darkmode, "default"); // quartz/components/Head.tsx import { jsx as jsx14, jsxs as jsxs8 } from "preact/jsx-runtime"; var Head_default = /* @__PURE__ */ __name(() => { function Head({ cfg, fileData, externalResources }) { const title = fileData.frontmatter?.title ?? "Untitled"; const description = fileData.description?.trim() ?? "No description provided"; const { css, js } = externalResources; const url = new URL(`https://${cfg.baseUrl ?? "example.com"}`); const path11 = url.pathname; const baseDir = fileData.slug === "404" ? path11 : pathToRoot(fileData.slug); const iconPath = joinSegments(baseDir, "static/icon.png"); const ogImagePath = `https://${cfg.baseUrl}/static/og-image.png`; return /* @__PURE__ */ jsxs8("head", { children: [ /* @__PURE__ */ jsx14("title", { children: title }), /* @__PURE__ */ jsx14("meta", { charSet: "utf-8" }), /* @__PURE__ */ jsx14("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0" }), /* @__PURE__ */ jsx14("meta", { property: "og:title", content: title }), /* @__PURE__ */ jsx14("meta", { property: "og:description", content: description }), cfg.baseUrl && /* @__PURE__ */ jsx14("meta", { property: "og:image", content: ogImagePath }), /* @__PURE__ */ jsx14("meta", { property: "og:width", content: "1200" }), /* @__PURE__ */ jsx14("meta", { property: "og:height", content: "675" }), /* @__PURE__ */ jsx14("link", { rel: "icon", href: iconPath }), /* @__PURE__ */ jsx14("meta", { name: "description", content: description }), /* @__PURE__ */ jsx14("meta", { name: "generator", content: "Quartz" }), /* @__PURE__ */ jsx14("link", { rel: "preconnect", href: "https://fonts.googleapis.com" }), /* @__PURE__ */ jsx14("link", { rel: "preconnect", href: "https://fonts.gstatic.com" }), css.map((href) => /* @__PURE__ */ jsx14("link", { href, rel: "stylesheet", type: "text/css", "spa-preserve": true }, href)), js.filter((resource) => resource.loadTime === "beforeDOMReady").map((res) => JSResourceToScriptElement(res, true)) ] }); } __name(Head, "Head"); return Head; }, "default"); // quartz/components/PageTitle.tsx import { jsx as jsx15 } from "preact/jsx-runtime"; function PageTitle({ fileData, cfg, displayClass }) { const title = cfg?.pageTitle ?? "Untitled Quartz"; const baseDir = pathToRoot(fileData.slug); return /* @__PURE__ */ jsx15("h1", { class: `page-title ${displayClass ?? ""}`, children: /* @__PURE__ */ jsx15("a", { href: baseDir, children: title }) }); } __name(PageTitle, "PageTitle"); PageTitle.css = ` .page-title { margin: 0; } `; var PageTitle_default = /* @__PURE__ */ __name(() => PageTitle, "default"); // quartz/components/ContentMeta.tsx import readingTime from "reading-time"; import { jsx as jsx16 } from "preact/jsx-runtime"; var ContentMeta_default = /* @__PURE__ */ __name(() => { function ContentMetadata({ cfg, fileData, displayClass }) { const text = fileData.text; if (text) { const segments = []; const { text: timeTaken, words: _words } = readingTime(text); if (fileData.dates) { segments.push(formatDate(getDate(cfg, fileData))); } segments.push(timeTaken); return /* @__PURE__ */ jsx16("p", { class: `content-meta ${displayClass ?? ""}`, children: segments.join(", ") }); } else { return null; } } __name(ContentMetadata, "ContentMetadata"); ContentMetadata.css = ` .content-meta { margin-top: 0; color: var(--gray); } `; return ContentMetadata; }, "default"); // quartz/components/Spacer.tsx import { jsx as jsx17 } from "preact/jsx-runtime"; function Spacer({ displayClass }) { return /* @__PURE__ */ jsx17("div", { class: `spacer ${displayClass ?? ""}` }); } __name(Spacer, "Spacer"); var Spacer_default = /* @__PURE__ */ __name(() => Spacer, "default"); // quartz/components/styles/legacyToc.scss var legacyToc_default = ""; // quartz/components/styles/toc.scss var toc_default = ""; // quartz/components/scripts/toc.inline.ts var toc_inline_default = ""; // quartz/components/TableOfContents.tsx import { jsx as jsx18, jsxs as jsxs9 } from "preact/jsx-runtime"; var defaultOptions8 = { layout: "modern" }; function TableOfContents2({ fileData, displayClass }) { if (!fileData.toc) { return null; } return /* @__PURE__ */ jsxs9("div", { class: `toc ${displayClass ?? ""}`, children: [ /* @__PURE__ */ jsxs9("button", { type: "button", id: "toc", class: fileData.collapseToc ? "collapsed" : "", children: [ /* @__PURE__ */ jsx18("h3", { children: "Table of Contents" }), /* @__PURE__ */ jsx18( "svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", class: "fold", children: /* @__PURE__ */ jsx18("polyline", { points: "6 9 12 15 18 9" }) } ) ] }), /* @__PURE__ */ jsx18("div", { id: "toc-content", children: /* @__PURE__ */ jsx18("ul", { class: "overflow", children: fileData.toc.map((tocEntry) => /* @__PURE__ */ jsx18("li", { class: `depth-${tocEntry.depth}`, children: /* @__PURE__ */ jsx18("a", { href: `#${tocEntry.slug}`, "data-for": tocEntry.slug, children: tocEntry.text }) }, tocEntry.slug)) }) }) ] }); } __name(TableOfContents2, "TableOfContents"); TableOfContents2.css = toc_default; TableOfContents2.afterDOMLoaded = toc_inline_default; function LegacyTableOfContents({ fileData }) { if (!fileData.toc) { return null; } return /* @__PURE__ */ jsxs9("details", { id: "toc", open: !fileData.collapseToc, children: [ /* @__PURE__ */ jsx18("summary", { children: /* @__PURE__ */ jsx18("h3", { children: "Table of Contents" }) }), /* @__PURE__ */ jsx18("ul", { children: fileData.toc.map((tocEntry) => /* @__PURE__ */ jsx18("li", { class: `depth-${tocEntry.depth}`, children: /* @__PURE__ */ jsx18("a", { href: `#${tocEntry.slug}`, "data-for": tocEntry.slug, children: tocEntry.text }) }, tocEntry.slug)) }) ] }); } __name(LegacyTableOfContents, "LegacyTableOfContents"); LegacyTableOfContents.css = legacyToc_default; var TableOfContents_default = /* @__PURE__ */ __name((opts) => { const layout = opts?.layout ?? defaultOptions8.layout; return layout === "modern" ? TableOfContents2 : LegacyTableOfContents; }, "default"); // quartz/components/styles/explorer.scss var explorer_default = ""; // quartz/components/scripts/explorer.inline.ts var explorer_inline_default = ""; // quartz/components/ExplorerNode.tsx import { jsx as jsx19, jsxs as jsxs10 } from "preact/jsx-runtime"; var FileNode = class _FileNode { static { __name(this, "FileNode"); } children; name; displayName; file; depth; constructor(name, file, depth) { this.children = []; this.name = name; this.displayName = name; this.file = file ? structuredClone(file) : null; this.depth = depth ?? 0; } insert(file) { if (file.path.length === 1) { if (file.path[0] !== "index.md") { this.children.push(new _FileNode(file.file.frontmatter.title, file.file, this.depth + 1)); } else { const title = file.file.frontmatter?.title; if (title && title !== "index" && file.path[0] === "index.md") { this.displayName = title; } } } else { const next = file.path[0]; file.path = file.path.splice(1); for (const child of this.children) { if (child.name === next) { child.insert(file); return; } } const newChild = new _FileNode(next, void 0, this.depth + 1); newChild.insert(file); this.children.push(newChild); } } // Add new file to tree add(file, splice = 0) { this.insert({ file, path: file.filePath.split("/").splice(splice) }); } // Print tree structure (for debugging) print(depth = 0) { let folderChar = ""; if (!this.file) folderChar = "|"; console.log("-".repeat(depth), folderChar, this.name, this.depth); this.children.forEach((e) => e.print(depth + 1)); } /** * Filter FileNode tree. Behaves similar to `Array.prototype.filter()`, but modifies tree in place * @param filterFn function to filter tree with */ filter(filterFn) { this.children = this.children.filter(filterFn); this.children.forEach((child) => child.filter(filterFn)); } /** * Filter FileNode tree. Behaves similar to `Array.prototype.map()`, but modifies tree in place * @param mapFn function to use for mapping over tree */ map(mapFn) { mapFn(this); this.children.forEach((child) => child.map(mapFn)); } /** * Get folder representation with state of tree. * Intended to only be called on root node before changes to the tree are made * @param collapsed default state of folders (collapsed by default or not) * @returns array containing folder state for tree */ getFolderPaths(collapsed) { const folderPaths = []; const traverse = /* @__PURE__ */ __name((node, currentPath) => { if (!node.file) { const folderPath = currentPath + (currentPath ? "/" : "") + node.name; if (folderPath !== "") { folderPaths.push({ path: folderPath, collapsed }); } node.children.forEach((child) => traverse(child, folderPath)); } }, "traverse"); traverse(this, ""); return folderPaths; } // Sort order: folders first, then files. Sort folders and files alphabetically /** * Sorts tree according to sort/compare function * @param sortFn compare function used for `.sort()`, also used recursively for children */ sort(sortFn) { this.children = this.children.sort(sortFn); this.children.forEach((e) => e.sort(sortFn)); } }; function ExplorerNode({ node, opts, fullPath, fileData }) { const folderBehavior = opts.folderClickBehavior; const isDefaultOpen = opts.folderDefaultState === "open"; let pathOld = fullPath ? fullPath : ""; let folderPath = ""; if (node.name !== "") { folderPath = `${pathOld}/${node.name}`; } return /* @__PURE__ */ jsx19("li", { children: node.file ? ( // Single file node /* @__PURE__ */ jsx19("li", { children: /* @__PURE__ */ jsx19("a", { href: resolveRelative(fileData.slug, node.file.slug), "data-for": node.file.slug, children: node.displayName }) }, node.file.slug) ) : /* @__PURE__ */ jsxs10("div", { children: [ node.name !== "" && // Node with entire folder // Render svg button + folder name, then children /* @__PURE__ */ jsxs10("div", { class: "folder-container", children: [ /* @__PURE__ */ jsx19( "svg", { xmlns: "http://www.w3.org/2000/svg", width: "12", height: "12", viewBox: "5 8 14 8", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", class: "folder-icon", children: /* @__PURE__ */ jsx19("polyline", { points: "6 9 12 15 18 9" }) } ), /* @__PURE__ */ jsx19("div", { "data-folderpath": folderPath, children: folderBehavior === "link" ? /* @__PURE__ */ jsx19("a", { href: `${folderPath}`, "data-for": node.name, class: "folder-title", children: node.displayName }) : /* @__PURE__ */ jsx19("button", { class: "folder-button", children: /* @__PURE__ */ jsx19("p", { class: "folder-title", children: node.displayName }) }) }, node.name) ] }), /* @__PURE__ */ jsx19("div", { class: `folder-outer ${node.depth === 0 || isDefaultOpen ? "open" : ""}`, children: /* @__PURE__ */ jsx19( "ul", { style: { paddingLeft: node.name !== "" ? "1.4rem" : "0" }, class: "content", "data-folderul": folderPath, children: node.children.map((childNode, i) => /* @__PURE__ */ jsx19( ExplorerNode, { node: childNode, opts, fullPath: folderPath, fileData }, i )) } ) }) ] }) }); } __name(ExplorerNode, "ExplorerNode"); // quartz/components/Explorer.tsx import { jsx as jsx20, jsxs as jsxs11 } from "preact/jsx-runtime"; var defaultOptions9 = { title: "Explorer", folderClickBehavior: "collapse", folderDefaultState: "collapsed", useSavedState: true, sortFn: (a, b) => { if (!a.file && !b.file || a.file && b.file) { return a.displayName.localeCompare(b.displayName, void 0, { numeric: true, sensitivity: "base" }); } if (a.file && !b.file) { return 1; } else { return -1; } }, filterFn: (node) => node.name !== "tags", order: ["filter", "map", "sort"] }; var Explorer_default = /* @__PURE__ */ __name((userOpts) => { const opts = { ...defaultOptions9, ...userOpts }; let fileTree; let jsonTree; function constructFileTree(allFiles) { if (!fileTree) { fileTree = new FileNode(""); allFiles.forEach((file) => fileTree.add(file, 1)); const functions = { map: opts.mapFn, sort: opts.sortFn, filter: opts.filterFn }; if (opts.order) { for (let i = 0; i < opts.order.length; i++) { const functionName = opts.order[i]; if (functions[functionName]) { fileTree[functionName].call(fileTree, functions[functionName]); } } } const folders = fileTree.getFolderPaths(opts.folderDefaultState === "collapsed"); jsonTree = JSON.stringify(folders); } } __name(constructFileTree, "constructFileTree"); function Explorer({ allFiles, displayClass, fileData }) { constructFileTree(allFiles); return /* @__PURE__ */ jsxs11("div", { class: `explorer ${displayClass ?? ""}`, children: [ /* @__PURE__ */ jsxs11( "button", { type: "button", id: "explorer", "data-behavior": opts.folderClickBehavior, "data-collapsed": opts.folderDefaultState, "data-savestate": opts.useSavedState, "data-tree": jsonTree, children: [ /* @__PURE__ */ jsx20("h1", { children: opts.title }), /* @__PURE__ */ jsx20( "svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "5 8 14 8", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", class: "fold", children: /* @__PURE__ */ jsx20("polyline", { points: "6 9 12 15 18 9" }) } ) ] } ), /* @__PURE__ */ jsx20("div", { id: "explorer-content", children: /* @__PURE__ */ jsxs11("ul", { class: "overflow", id: "explorer-ul", children: [ /* @__PURE__ */ jsx20(ExplorerNode, { node: fileTree, opts, fileData }), /* @__PURE__ */ jsx20("li", { id: "explorer-end" }) ] }) }) ] }); } __name(Explorer, "Explorer"); Explorer.css = explorer_default; Explorer.afterDOMLoaded = explorer_inline_default; return Explorer; }, "default"); // quartz/components/TagList.tsx import { jsx as jsx21 } from "preact/jsx-runtime"; function TagList({ fileData, displayClass }) { const tags = fileData.frontmatter?.tags; const baseDir = pathToRoot(fileData.slug); if (tags && tags.length > 0) { return /* @__PURE__ */ jsx21("ul", { class: `tags ${displayClass ?? ""}`, children: tags.map((tag) => { const display = `#${tag}`; const linkDest = baseDir + `/tags/${slugTag(tag)}`; return /* @__PURE__ */ jsx21("li", { children: /* @__PURE__ */ jsx21("a", { href: linkDest, class: "internal tag-link", children: display }) }); }) }); } else { return null; } } __name(TagList, "TagList"); TagList.css = ` .tags { list-style: none; display: flex; padding-left: 0; gap: 0.4rem; margin: 1rem 0; flex-wrap: wrap; justify-self: end; } .section-li > .section > .tags { justify-content: flex-end; } .tags > li { display: inline-block; white-space: nowrap; margin: 0; overflow-wrap: normal; } a.internal.tag-link { border-radius: 8px; background-color: var(--highlight); padding: 0.2rem 0.4rem; margin: 0 0.1rem; } `; var TagList_default = /* @__PURE__ */ __name(() => TagList, "default"); // quartz/components/scripts/graph.inline.ts var graph_inline_default = ""; // quartz/components/styles/graph.scss var graph_default = ""; // quartz/components/Graph.tsx import { jsx as jsx22, jsxs as jsxs12 } from "preact/jsx-runtime"; var defaultOptions10 = { localGraph: { drag: true, zoom: true, depth: 1, scale: 1.1, repelForce: 0.5, centerForce: 0.3, linkDistance: 30, fontSize: 0.6, opacityScale: 1, showTags: true, removeTags: [] }, globalGraph: { drag: true, zoom: true, depth: -1, scale: 0.9, repelForce: 0.5, centerForce: 0.3, linkDistance: 30, fontSize: 0.6, opacityScale: 1, showTags: true, removeTags: [] } }; var Graph_default = /* @__PURE__ */ __name((opts) => { function Graph({ displayClass }) { const localGraph = { ...defaultOptions10.localGraph, ...opts?.localGraph }; const globalGraph = { ...defaultOptions10.globalGraph, ...opts?.globalGraph }; return /* @__PURE__ */ jsxs12("div", { class: `graph ${displayClass ?? ""}`, children: [ /* @__PURE__ */ jsx22("h3", { children: "Graph View" }), /* @__PURE__ */ jsxs12("div", { class: "graph-outer", children: [ /* @__PURE__ */ jsx22("div", { id: "graph-container", "data-cfg": JSON.stringify(localGraph) }), /* @__PURE__ */ jsx22( "svg", { version: "1.1", id: "global-graph-icon", xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", x: "0px", y: "0px", viewBox: "0 0 55 55", fill: "currentColor", xmlSpace: "preserve", children: /* @__PURE__ */ jsx22( "path", { d: "M49,0c-3.309,0-6,2.691-6,6c0,1.035,0.263,2.009,0.726,2.86l-9.829,9.829C32.542,17.634,30.846,17,29,17\n s-3.542,0.634-4.898,1.688l-7.669-7.669C16.785,10.424,17,9.74,17,9c0-2.206-1.794-4-4-4S9,6.794,9,9s1.794,4,4,4\n c0.74,0,1.424-0.215,2.019-0.567l7.669,7.669C21.634,21.458,21,23.154,21,25s0.634,3.542,1.688,4.897L10.024,42.562\n C8.958,41.595,7.549,41,6,41c-3.309,0-6,2.691-6,6s2.691,6,6,6s6-2.691,6-6c0-1.035-0.263-2.009-0.726-2.86l12.829-12.829\n c1.106,0.86,2.44,1.436,3.898,1.619v10.16c-2.833,0.478-5,2.942-5,5.91c0,3.309,2.691,6,6,6s6-2.691,6-6c0-2.967-2.167-5.431-5-5.91\n v-10.16c1.458-0.183,2.792-0.759,3.898-1.619l7.669,7.669C41.215,39.576,41,40.26,41,41c0,2.206,1.794,4,4,4s4-1.794,4-4\n s-1.794-4-4-4c-0.74,0-1.424,0.215-2.019,0.567l-7.669-7.669C36.366,28.542,37,26.846,37,25s-0.634-3.542-1.688-4.897l9.665-9.665\n C46.042,11.405,47.451,12,49,12c3.309,0,6-2.691,6-6S52.309,0,49,0z M11,9c0-1.103,0.897-2,2-2s2,0.897,2,2s-0.897,2-2,2\n S11,10.103,11,9z M6,51c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S8.206,51,6,51z M33,49c0,2.206-1.794,4-4,4s-4-1.794-4-4\n s1.794-4,4-4S33,46.794,33,49z M29,31c-3.309,0-6-2.691-6-6s2.691-6,6-6s6,2.691,6,6S32.309,31,29,31z M47,41c0,1.103-0.897,2-2,2\n s-2-0.897-2-2s0.897-2,2-2S47,39.897,47,41z M49,10c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S51.206,10,49,10z" } ) } ) ] }), /* @__PURE__ */ jsx22("div", { id: "global-graph-outer", children: /* @__PURE__ */ jsx22("div", { id: "global-graph-container", "data-cfg": JSON.stringify(globalGraph) }) }) ] }); } __name(Graph, "Graph"); Graph.css = graph_default; Graph.afterDOMLoaded = graph_inline_default; return Graph; }, "default"); // quartz/components/styles/backlinks.scss var backlinks_default = ""; // quartz/components/Backlinks.tsx import { jsx as jsx23, jsxs as jsxs13 } from "preact/jsx-runtime"; function Backlinks({ fileData, allFiles, displayClass }) { const slug2 = simplifySlug(fileData.slug); const backlinkFiles = allFiles.filter((file) => file.links?.includes(slug2)); return /* @__PURE__ */ jsxs13("div", { class: `backlinks ${displayClass ?? ""}`, children: [ /* @__PURE__ */ jsx23("h3", { children: "Backlinks" }), /* @__PURE__ */ jsx23("ul", { class: "overflow", children: backlinkFiles.length > 0 ? backlinkFiles.map((f) => /* @__PURE__ */ jsx23("li", { children: /* @__PURE__ */ jsx23("a", { href: resolveRelative(fileData.slug, f.slug), class: "internal", children: f.frontmatter?.title }) })) : /* @__PURE__ */ jsx23("li", { children: "No backlinks found" }) }) ] }); } __name(Backlinks, "Backlinks"); Backlinks.css = backlinks_default; var Backlinks_default = /* @__PURE__ */ __name(() => Backlinks, "default"); // quartz/components/styles/search.scss var search_default = ""; // quartz/components/scripts/search.inline.ts var search_inline_default = ""; // quartz/components/Search.tsx import { jsx as jsx24, jsxs as jsxs14 } from "preact/jsx-runtime"; var Search_default = /* @__PURE__ */ __name(() => { function Search({ displayClass }) { return /* @__PURE__ */ jsxs14("div", { class: `search ${displayClass ?? ""}`, children: [ /* @__PURE__ */ jsxs14("div", { id: "search-icon", children: [ /* @__PURE__ */ jsx24("p", { children: "Search" }), /* @__PURE__ */ jsx24("div", {}), /* @__PURE__ */ jsxs14( "svg", { tabIndex: 0, "aria-labelledby": "title desc", role: "img", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 19.9 19.7", children: [ /* @__PURE__ */ jsx24("title", { id: "title", children: "Search" }), /* @__PURE__ */ jsx24("desc", { id: "desc", children: "Search" }), /* @__PURE__ */ jsxs14("g", { class: "search-path", fill: "none", children: [ /* @__PURE__ */ jsx24("path", { "stroke-linecap": "square", d: "M18.5 18.3l-5.4-5.4" }), /* @__PURE__ */ jsx24("circle", { cx: "8", cy: "8", r: "7" }) ] }) ] } ) ] }), /* @__PURE__ */ jsx24("div", { id: "search-container", children: /* @__PURE__ */ jsxs14("div", { id: "search-space", children: [ /* @__PURE__ */ jsx24( "input", { autocomplete: "off", id: "search-bar", name: "search", type: "text", "aria-label": "Search for something", placeholder: "Search for something" } ), /* @__PURE__ */ jsx24("div", { id: "results-container" }) ] }) }) ] }); } __name(Search, "Search"); Search.afterDOMLoaded = search_inline_default; Search.css = search_default; return Search; }, "default"); // quartz/components/styles/footer.scss var footer_default = ""; // package.json var version = "4.1.0"; // quartz/components/Footer.tsx import { jsx as jsx25, jsxs as jsxs15 } from "preact/jsx-runtime"; var Footer_default = /* @__PURE__ */ __name((opts) => { function Footer({ displayClass }) { const year = (/* @__PURE__ */ new Date()).getFullYear(); const links = opts?.links ?? []; return /* @__PURE__ */ jsxs15("footer", { class: `${displayClass ?? ""}`, children: [ /* @__PURE__ */ jsx25("hr", {}), /* @__PURE__ */ jsxs15("p", { children: [ "Created with ", /* @__PURE__ */ jsxs15("a", { href: "https://quartz.jzhao.xyz/", children: [ "Quartz v", version ] }), ", \xA9 ", year ] }), /* @__PURE__ */ jsx25("ul", { children: Object.entries(links).map(([text, link]) => /* @__PURE__ */ jsx25("li", { children: /* @__PURE__ */ jsx25("a", { href: link, children: text }) })) }) ] }); } __name(Footer, "Footer"); Footer.css = footer_default; return Footer; }, "default"); // quartz/components/DesktopOnly.tsx import { Fragment as Fragment3, jsx as jsx26 } from "preact/jsx-runtime"; var DesktopOnly_default = /* @__PURE__ */ __name((component) => { if (component) { let DesktopOnly2 = function(props) { return /* @__PURE__ */ jsx26(Component, { displayClass: "desktop-only", ...props }); }; var DesktopOnly = DesktopOnly2; __name(DesktopOnly2, "DesktopOnly"); const Component = component; DesktopOnly2.displayName = component.displayName; DesktopOnly2.afterDOMLoaded = component?.afterDOMLoaded; DesktopOnly2.beforeDOMLoaded = component?.beforeDOMLoaded; DesktopOnly2.css = component?.css; return DesktopOnly2; } else { return () => /* @__PURE__ */ jsx26(Fragment3, {}); } }, "default"); // quartz/components/MobileOnly.tsx import { Fragment as Fragment4, jsx as jsx27 } from "preact/jsx-runtime"; var MobileOnly_default = /* @__PURE__ */ __name((component) => { if (component) { let MobileOnly2 = function(props) { return /* @__PURE__ */ jsx27(Component, { displayClass: "mobile-only", ...props }); }; var MobileOnly = MobileOnly2; __name(MobileOnly2, "MobileOnly"); const Component = component; MobileOnly2.displayName = component.displayName; MobileOnly2.afterDOMLoaded = component?.afterDOMLoaded; MobileOnly2.beforeDOMLoaded = component?.beforeDOMLoaded; MobileOnly2.css = component?.css; return MobileOnly2; } else { return () => /* @__PURE__ */ jsx27(Fragment4, {}); } }, "default"); // quartz/components/styles/recentNotes.scss var recentNotes_default = ""; // quartz/components/RecentNotes.tsx import { jsx as jsx28, jsxs as jsxs16 } from "preact/jsx-runtime"; var defaultOptions11 = /* @__PURE__ */ __name((cfg) => ({ title: "Recent Notes", limit: 3, linkToMore: false, filter: () => true, sort: byDateAndAlphabetical(cfg), showTags: false }), "defaultOptions"); var RecentNotes_default = /* @__PURE__ */ __name((userOpts) => { function RecentNotes({ allFiles, fileData, displayClass, cfg }) { const opts = { ...defaultOptions11(cfg), ...userOpts }; const pages = allFiles.filter(opts.filter).sort(opts.sort); const remaining = Math.max(0, pages.length - opts.limit); return /* @__PURE__ */ jsxs16("div", { class: `recent-notes ${displayClass ?? ""}`, children: [ /* @__PURE__ */ jsx28("h3", { children: opts.title }), /* @__PURE__ */ jsx28("ul", { class: "recent-ul", children: pages.slice(0, opts.limit).map((page) => { const title = page.frontmatter?.title; const tags = page.frontmatter?.tags ?? []; return /* @__PURE__ */ jsx28("li", { class: "recent-li", children: /* @__PURE__ */ jsxs16("div", { class: "section", children: [ /* @__PURE__ */ jsx28("div", { class: "desc", children: /* @__PURE__ */ jsx28("h3", { children: /* @__PURE__ */ jsx28("a", { href: resolveRelative(fileData.slug, page.slug), class: "internal", children: title }) }) }), page.dates && /* @__PURE__ */ jsx28("p", { class: "meta", children: /* @__PURE__ */ jsx28(Date2, { date: getDate(cfg, page) }) }), opts.showTags && tags.length > 0 && // 根据 opts.showTags 决定是否渲染标签 /* @__PURE__ */ jsx28("ul", { class: "tags", children: tags.map((tag) => /* @__PURE__ */ jsx28("li", { children: /* @__PURE__ */ jsxs16( "a", { class: "internal tag-link", href: resolveRelative(fileData.slug, `tags/${tag}`), children: [ "#", tag ] } ) })) }) ] }) }); }) }), opts.linkToMore && remaining > 0 && /* @__PURE__ */ jsx28("p", { children: /* @__PURE__ */ jsxs16("a", { href: resolveRelative(fileData.slug, opts.linkToMore), children: [ "See ", remaining, " more \u2192" ] }) }) ] }); } __name(RecentNotes, "RecentNotes"); RecentNotes.css = recentNotes_default; return RecentNotes; }, "default"); // quartz/components/styles/breadcrumbs.scss var breadcrumbs_default = ""; // quartz/components/Breadcrumbs.tsx import { Fragment as Fragment5, jsx as jsx29, jsxs as jsxs17 } from "preact/jsx-runtime"; var defaultOptions12 = { spacerSymbol: ">", rootName: "Home", resolveFrontmatterTitle: false, hideOnRoot: true }; function formatCrumb(displayName, baseSlug, currentSlug) { return { displayName: displayName.replaceAll("-", " "), path: resolveRelative(baseSlug, currentSlug) }; } __name(formatCrumb, "formatCrumb"); function findCurrentFile(allFiles, folderName) { return allFiles.find((file) => { if (file.slug?.endsWith("index")) { const folderParts = file.filePath?.split("/"); if (folderParts) { const name = folderParts[folderParts?.length - 2]; if (name === folderName) { return true; } } } }); } __name(findCurrentFile, "findCurrentFile"); var Breadcrumbs_default = /* @__PURE__ */ __name((opts) => { const options2 = { ...defaultOptions12, ...opts }; function Breadcrumbs({ fileData, allFiles, displayClass }) { if (options2.hideOnRoot && fileData.slug === "index") { return /* @__PURE__ */ jsx29(Fragment5, {}); } const firstEntry = formatCrumb(options2.rootName, fileData.slug, "/"); const crumbs = [firstEntry]; const slugParts = fileData.slug?.split("/"); if (slugParts) { let currentPath = ""; for (let i = 0; i < slugParts.length - 1; i++) { let currentTitle = slugParts[i]; if (options2?.resolveFrontmatterTitle) { const currentFile = findCurrentFile(allFiles, currentTitle); if (currentFile) { currentTitle = currentFile.frontmatter.title; } } currentPath += slugParts[i] + "/"; const crumb = formatCrumb(currentTitle, fileData.slug, currentPath); crumbs.push(crumb); } crumbs.push({ displayName: fileData.frontmatter.title, path: "" }); } return /* @__PURE__ */ jsx29("nav", { class: `breadcrumb-container ${displayClass ?? ""}`, "aria-label": "breadcrumbs", children: crumbs.map((crumb, index) => /* @__PURE__ */ jsxs17("div", { class: "breadcrumb-element", children: [ /* @__PURE__ */ jsx29("a", { href: crumb.path, children: crumb.displayName }), index !== crumbs.length - 1 && /* @__PURE__ */ jsx29("p", { children: ` ${options2.spacerSymbol} ` }) ] })) }); } __name(Breadcrumbs, "Breadcrumbs"); Breadcrumbs.css = breadcrumbs_default; return Breadcrumbs; }, "default"); // quartz.layout.ts var sharedPageComponents = { head: Head_default(), header: [], footer: Footer_default({ links: { "Blog": "https://blog.7wate.com", GitHub: "https://github.com/7wate" } }) }; var defaultContentPageLayout = { beforeBody: [ Breadcrumbs_default(), ArticleTitle_default(), ContentMeta_default(), TagList_default() ], left: [ PageTitle_default(), MobileOnly_default(Spacer_default()), Search_default(), Darkmode_default(), DesktopOnly_default(Explorer_default()), DesktopOnly_default(RecentNotes_default( { filter: (data) => { return data.filePath ? data.filePath.startsWith("content/Blog") : false; } } )) ], right: [ Graph_default(), DesktopOnly_default(TableOfContents_default()), Backlinks_default() ] }; var defaultListPageLayout = { beforeBody: [ArticleTitle_default()], left: [ PageTitle_default(), MobileOnly_default(Spacer_default()), Search_default(), Darkmode_default() ], right: [] }; // quartz/plugins/emitters/contentPage.tsx import chalk3 from "chalk"; var ContentPage = /* @__PURE__ */ __name((userOpts) => { const opts = { ...sharedPageComponents, ...defaultContentPageLayout, pageBody: Content_default(), ...userOpts }; const { head: Head, header, beforeBody, pageBody, left, right, footer: Footer } = opts; const Header2 = Header_default(); const Body2 = Body_default(); return { name: "ContentPage", getQuartzComponents() { return [Head, Header2, Body2, ...header, ...beforeBody, pageBody, ...left, ...right, Footer]; }, async emit(ctx, content, resources, emit) { const cfg = ctx.cfg.configuration; const fps = []; const allFiles = content.map((c) => c[1].data); let containsIndex = false; for (const [tree, file] of content) { const slug2 = file.data.slug; if (slug2 === "index") { containsIndex = true; } const externalResources = pageResources(pathToRoot(slug2), resources); const componentData = { fileData: file.data, externalResources, cfg, children: [], tree, allFiles }; const content2 = renderPage(slug2, componentData, opts, externalResources); const fp = await emit({ content: content2, slug: slug2, ext: ".html" }); fps.push(fp); } if (!containsIndex) { console.log( chalk3.yellow( ` Warning: you seem to be missing an \`index.md\` home page file at the root of your \`${ctx.argv.directory}\` folder. This may cause errors when deploying.` ) ); } return fps; } }; }, "ContentPage"); // quartz/plugins/vfile.ts import { VFile } from "vfile"; function defaultProcessedContent(vfileData) { const root = { type: "root", children: [] }; const vfile = new VFile(""); vfile.data = vfileData; return [root, vfile]; } __name(defaultProcessedContent, "defaultProcessedContent"); // quartz/plugins/emitters/tagPage.tsx var TagPage = /* @__PURE__ */ __name((userOpts) => { const opts = { ...sharedPageComponents, ...defaultListPageLayout, pageBody: TagContent_default(), ...userOpts }; const { head: Head, header, beforeBody, pageBody, left, right, footer: Footer } = opts; const Header2 = Header_default(); const Body2 = Body_default(); return { name: "TagPage", getQuartzComponents() { return [Head, Header2, Body2, ...header, ...beforeBody, pageBody, ...left, ...right, Footer]; }, async emit(ctx, content, resources, emit) { const fps = []; const allFiles = content.map((c) => c[1].data); const cfg = ctx.cfg.configuration; const tags = new Set( allFiles.flatMap((data) => data.frontmatter?.tags ?? []).flatMap(getAllSegmentPrefixes) ); tags.add("index"); const tagDescriptions = Object.fromEntries( [...tags].map((tag) => { const title = tag === "" ? "Tag Index" : `Tag: #${tag}`; return [ tag, defaultProcessedContent({ slug: joinSegments("tags", tag), frontmatter: { title, tags: [] } }) ]; }) ); for (const [tree, file] of content) { const slug2 = file.data.slug; if (slug2.startsWith("tags/")) { const tag = slug2.slice("tags/".length); if (tags.has(tag)) { tagDescriptions[tag] = [tree, file]; } } } for (const tag of tags) { const slug2 = joinSegments("tags", tag); const externalResources = pageResources(pathToRoot(slug2), resources); const [tree, file] = tagDescriptions[tag]; const componentData = { fileData: file.data, externalResources, cfg, children: [], tree, allFiles }; const content2 = renderPage(slug2, componentData, opts, externalResources); const fp = await emit({ content: content2, slug: file.data.slug, ext: ".html" }); fps.push(fp); } return fps; } }; }, "TagPage"); // quartz/plugins/emitters/folderPage.tsx import path5 from "path"; var FolderPage = /* @__PURE__ */ __name((userOpts) => { const opts = { ...sharedPageComponents, ...defaultListPageLayout, pageBody: FolderContent_default(), ...userOpts }; const { head: Head, header, beforeBody, pageBody, left, right, footer: Footer } = opts; const Header2 = Header_default(); const Body2 = Body_default(); return { name: "FolderPage", getQuartzComponents() { return [Head, Header2, Body2, ...header, ...beforeBody, pageBody, ...left, ...right, Footer]; }, async emit(ctx, content, resources, emit) { const fps = []; const allFiles = content.map((c) => c[1].data); const cfg = ctx.cfg.configuration; const folders = new Set( allFiles.flatMap((data) => { const slug2 = data.slug; const folderName = path5.dirname(slug2 ?? ""); if (slug2 && folderName !== "." && folderName !== "tags") { return [folderName]; } return []; }) ); const folderDescriptions = Object.fromEntries( [...folders].map((folder) => [ folder, defaultProcessedContent({ slug: joinSegments(folder, "index"), frontmatter: { title: `Folder: ${folder}`, tags: [] } }) ]) ); for (const [tree, file] of content) { const slug2 = _stripSlashes(simplifySlug(file.data.slug)); if (folders.has(slug2)) { folderDescriptions[slug2] = [tree, file]; } } for (const folder of folders) { const slug2 = joinSegments(folder, "index"); const externalResources = pageResources(pathToRoot(slug2), resources); const [tree, file] = folderDescriptions[folder]; const componentData = { fileData: file.data, externalResources, cfg, children: [], tree, allFiles }; const content2 = renderPage(slug2, componentData, opts, externalResources); const fp = await emit({ content: content2, slug: slug2, ext: ".html" }); fps.push(fp); } return fps; } }; }, "FolderPage"); // quartz/plugins/emitters/contentIndex.ts import { toHtml as toHtml2 } from "hast-util-to-html"; import path6 from "path"; var defaultOptions13 = { enableSiteMap: true, enableRSS: true, rssLimit: 10, rssFullHtml: false, includeEmptyFiles: true }; function generateSiteMap(cfg, idx) { const base = cfg.baseUrl ?? ""; const createURLEntry = /* @__PURE__ */ __name((slug2, content) => ` https://${base}/${encodeURI(slug2)} ${content.date?.toISOString()} `, "createURLEntry"); const urls = Array.from(idx).map(([slug2, content]) => createURLEntry(simplifySlug(slug2), content)).join(""); return `${urls}`; } __name(generateSiteMap, "generateSiteMap"); function generateRSSFeed(cfg, idx, limit) { const base = cfg.baseUrl ?? ""; const root = `https://${base}`; const createURLEntry = /* @__PURE__ */ __name((slug2, content) => ` ${escapeHTML(content.title)} ${root}/${encodeURI(slug2)} ${root}/${encodeURI(slug2)} ${content.richContent ?? content.description} ${content.date?.toUTCString()} `, "createURLEntry"); const items = Array.from(idx).map(([slug2, content]) => createURLEntry(simplifySlug(slug2), content)).slice(0, limit ?? idx.size).join(""); return ` ${escapeHTML(cfg.pageTitle)} ${root} ${!!limit ? `Last ${limit} notes` : "Recent notes"} on ${escapeHTML( cfg.pageTitle )} Quartz -- quartz.jzhao.xyz ${items} `; } __name(generateRSSFeed, "generateRSSFeed"); var ContentIndex = /* @__PURE__ */ __name((opts) => { opts = { ...defaultOptions13, ...opts }; return { name: "ContentIndex", async emit(ctx, content, _resources, emit) { const cfg = ctx.cfg.configuration; const emitted = []; const linkIndex = /* @__PURE__ */ new Map(); for (const [tree, file] of content) { const slug2 = file.data.slug; const date = getDate(ctx.cfg.configuration, file.data) ?? /* @__PURE__ */ new Date(); if (opts?.includeEmptyFiles || file.data.text && file.data.text !== "") { linkIndex.set(slug2, { title: file.data.frontmatter?.title, links: file.data.links ?? [], tags: file.data.frontmatter?.tags ?? [], content: file.data.text ?? "", richContent: opts?.rssFullHtml ? escapeHTML(toHtml2(tree, { allowDangerousHtml: true })) : void 0, date, description: file.data.description ?? "" }); } } if (opts?.enableSiteMap) { emitted.push( await emit({ content: generateSiteMap(cfg, linkIndex), slug: "sitemap", ext: ".xml" }) ); } if (opts?.enableRSS) { emitted.push( await emit({ content: generateRSSFeed(cfg, linkIndex, opts.rssLimit), slug: "index", ext: ".xml" }) ); } const fp = path6.join("static", "contentIndex"); const simplifiedIndex = Object.fromEntries( Array.from(linkIndex).map(([slug2, content2]) => { delete content2.description; delete content2.date; return [slug2, content2]; }) ); emitted.push( await emit({ content: JSON.stringify(simplifiedIndex), slug: fp, ext: ".json" }) ); return emitted; }, getQuartzComponents: () => [] }; }, "ContentIndex"); // quartz/plugins/emitters/aliases.ts import path7 from "path"; var AliasRedirects = /* @__PURE__ */ __name(() => ({ name: "AliasRedirects", getQuartzComponents() { return []; }, async emit({ argv }, content, _resources, emit) { const fps = []; for (const [_tree, file] of content) { const ogSlug = simplifySlug(file.data.slug); const dir = path7.posix.relative(argv.directory, path7.dirname(file.data.filePath)); let aliases = file.data.frontmatter?.aliases ?? file.data.frontmatter?.alias ?? []; if (typeof aliases === "string") { aliases = [aliases]; } const slugs = aliases.map((alias) => path7.posix.join(dir, alias)); const permalink = file.data.frontmatter?.permalink; if (typeof permalink === "string") { slugs.push(permalink); } for (const slug2 of slugs) { const redirUrl = resolveRelative(slug2, file.data.slug); const fp = await emit({ content: ` ${ogSlug} `, slug: slug2, ext: ".html" }); fps.push(fp); } } return fps; } }), "AliasRedirects"); // quartz/plugins/emitters/assets.ts import path9 from "path"; import fs2 from "fs"; // quartz/util/glob.ts import path8 from "path"; import { globby } from "globby"; function toPosixPath(fp) { return fp.split(path8.sep).join("/"); } __name(toPosixPath, "toPosixPath"); async function glob(pattern, cwd, ignorePatterns) { const fps = (await globby(pattern, { cwd, ignore: ignorePatterns, gitignore: true })).map(toPosixPath); return fps; } __name(glob, "glob"); // quartz/plugins/emitters/assets.ts var Assets = /* @__PURE__ */ __name(() => { return { name: "Assets", getQuartzComponents() { return []; }, async emit({ argv, cfg }, _content, _resources, _emit) { const assetsPath = argv.output; const fps = await glob("**", argv.directory, ["**/*.md", ...cfg.configuration.ignorePatterns]); const res = []; for (const fp of fps) { const ext = path9.extname(fp); const src = joinSegments(argv.directory, fp); const name = slugifyFilePath(fp, true) + ext; const dest = joinSegments(assetsPath, name); const dir = path9.dirname(dest); await fs2.promises.mkdir(dir, { recursive: true }); await fs2.promises.copyFile(src, dest); res.push(dest); } return res; } }; }, "Assets"); // quartz/plugins/emitters/static.ts import fs3 from "fs"; var Static = /* @__PURE__ */ __name(() => ({ name: "Static", getQuartzComponents() { return []; }, async emit({ argv, cfg }, _content, _resources, _emit) { const staticPath = joinSegments(QUARTZ, "static"); const fps = await glob("**", staticPath, cfg.configuration.ignorePatterns); await fs3.promises.cp(staticPath, joinSegments(argv.output, "static"), { recursive: true }); return fps.map((fp) => joinSegments(argv.output, "static", fp)); } }), "Static"); // quartz/components/scripts/spa.inline.ts var spa_inline_default = ""; // quartz/components/scripts/plausible.inline.ts var plausible_inline_default = ""; // quartz/components/scripts/popover.inline.ts var popover_inline_default = ""; // quartz/styles/custom.scss var custom_default = ""; // quartz/components/styles/popover.scss var popover_default = ""; // quartz/util/theme.ts var DEFAULT_SANS_SERIF = '-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif'; var DEFAULT_MONO = "ui-monospace, SFMono-Regular, SF Mono, Menlo, monospace"; function googleFontHref(theme) { const { code, header, body } = theme.typography; return `https://fonts.googleapis.com/css2?family=${code}&family=${header}:wght@400;700&family=${body}:ital,wght@0,400;0,600;1,400;1,600&display=swap`; } __name(googleFontHref, "googleFontHref"); function joinStyles(theme, ...stylesheet) { return ` ${stylesheet.join("\n\n")} :root { --light: ${theme.colors.lightMode.light}; --lightgray: ${theme.colors.lightMode.lightgray}; --gray: ${theme.colors.lightMode.gray}; --darkgray: ${theme.colors.lightMode.darkgray}; --dark: ${theme.colors.lightMode.dark}; --secondary: ${theme.colors.lightMode.secondary}; --tertiary: ${theme.colors.lightMode.tertiary}; --highlight: ${theme.colors.lightMode.highlight}; --headerFont: "${theme.typography.header}", ${DEFAULT_SANS_SERIF}; --bodyFont: "${theme.typography.body}", ${DEFAULT_SANS_SERIF}; --codeFont: "${theme.typography.code}", ${DEFAULT_MONO}; } :root[saved-theme="dark"] { --light: ${theme.colors.darkMode.light}; --lightgray: ${theme.colors.darkMode.lightgray}; --gray: ${theme.colors.darkMode.gray}; --darkgray: ${theme.colors.darkMode.darkgray}; --dark: ${theme.colors.darkMode.dark}; --secondary: ${theme.colors.darkMode.secondary}; --tertiary: ${theme.colors.darkMode.tertiary}; --highlight: ${theme.colors.darkMode.highlight}; } `; } __name(joinStyles, "joinStyles"); // quartz/plugins/emitters/componentResources.ts import { Features, transform } from "lightningcss"; function getComponentResources(ctx) { const allComponents = /* @__PURE__ */ new Set(); for (const emitter of ctx.cfg.plugins.emitters) { const components = emitter.getQuartzComponents(ctx); for (const component of components) { allComponents.add(component); } } const componentResources = { css: /* @__PURE__ */ new Set(), beforeDOMLoaded: /* @__PURE__ */ new Set(), afterDOMLoaded: /* @__PURE__ */ new Set() }; for (const component of allComponents) { const { css, beforeDOMLoaded, afterDOMLoaded } = component; if (css) { componentResources.css.add(css); } if (beforeDOMLoaded) { componentResources.beforeDOMLoaded.add(beforeDOMLoaded); } if (afterDOMLoaded) { componentResources.afterDOMLoaded.add(afterDOMLoaded); } } return { css: [...componentResources.css], beforeDOMLoaded: [...componentResources.beforeDOMLoaded], afterDOMLoaded: [...componentResources.afterDOMLoaded] }; } __name(getComponentResources, "getComponentResources"); function joinScripts(scripts) { return scripts.map((script) => `(function () {${script}})();`).join("\n"); } __name(joinScripts, "joinScripts"); function addGlobalPageResources(ctx, staticResources, componentResources) { const cfg = ctx.cfg.configuration; const reloadScript = ctx.argv.serve; if (cfg.enablePopovers) { componentResources.afterDOMLoaded.push(popover_inline_default); componentResources.css.push(popover_default); } if (cfg.analytics?.provider === "google") { const tagId = cfg.analytics.tagId; staticResources.js.push({ src: `https://www.googletagmanager.com/gtag/js?id=${tagId}`, contentType: "external", loadTime: "afterDOMReady" }); componentResources.afterDOMLoaded.push(` window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag(\`js\`, new Date()); gtag(\`config\`, \`${tagId}\`, { send_page_view: false }); document.addEventListener(\`nav\`, () => { gtag(\`event\`, \`page_view\`, { page_title: document.title, page_location: location.href, }); });`); } else if (cfg.analytics?.provider === "plausible") { componentResources.afterDOMLoaded.push(plausible_inline_default); } else if (cfg.analytics?.provider === "umami") { componentResources.afterDOMLoaded.push(` const umamiScript = document.createElement("script") umamiScript.src = "https://analytics.umami.is/script.js" umamiScript.setAttribute("data-website-id", "${cfg.analytics.websiteId}") umamiScript.async = true document.head.appendChild(umamiScript) `); } if (cfg.enableSPA) { componentResources.afterDOMLoaded.push(spa_inline_default); } else { componentResources.afterDOMLoaded.push(` window.spaNavigate = (url, _) => window.location.assign(url) const event = new CustomEvent("nav", { detail: { url: document.body.dataset.slug } }) document.dispatchEvent(event)`); } let wsUrl = `ws://localhost:${ctx.argv.wsPort}`; if (ctx.argv.remoteDevHost) { wsUrl = `wss://${ctx.argv.remoteDevHost}:${ctx.argv.wsPort}`; } if (reloadScript) { staticResources.js.push({ loadTime: "afterDOMReady", contentType: "inline", script: ` const socket = new WebSocket('${wsUrl}') socket.addEventListener('message', () => document.location.reload()) ` }); } } __name(addGlobalPageResources, "addGlobalPageResources"); var defaultOptions14 = { fontOrigin: "googleFonts" }; var ComponentResources = /* @__PURE__ */ __name((opts) => { const { fontOrigin } = { ...defaultOptions14, ...opts }; return { name: "ComponentResources", getQuartzComponents() { return []; }, async emit(ctx, _content, resources, emit) { const componentResources = getComponentResources(ctx); if (fontOrigin === "googleFonts") { resources.css.push(googleFontHref(ctx.cfg.configuration.theme)); } else if (fontOrigin === "local") { } addGlobalPageResources(ctx, resources, componentResources); const stylesheet = joinStyles(ctx.cfg.configuration.theme, ...componentResources.css, custom_default); const prescript = joinScripts(componentResources.beforeDOMLoaded); const postscript = joinScripts(componentResources.afterDOMLoaded); const fps = await Promise.all([ emit({ slug: "index", ext: ".css", content: transform({ filename: "index.css", code: Buffer.from(stylesheet), minify: true, targets: { safari: 15 << 16 | 6 << 8, // 15.6 ios_saf: 15 << 16 | 6 << 8, // 15.6 edge: 115 << 16, firefox: 102 << 16, chrome: 109 << 16 }, include: Features.MediaQueries }).code.toString() }), emit({ slug: "prescript", ext: ".js", content: prescript }), emit({ slug: "postscript", ext: ".js", content: postscript }) ]); return fps; } }; }, "ComponentResources"); // quartz/plugins/emitters/404.tsx var NotFoundPage = /* @__PURE__ */ __name(() => { const opts = { ...sharedPageComponents, pageBody: __default(), beforeBody: [], left: [], right: [] }; const { head: Head, pageBody, footer: Footer } = opts; const Body2 = Body_default(); return { name: "404Page", getQuartzComponents() { return [Head, Body2, pageBody, Footer]; }, async emit(ctx, _content, resources, emit) { const cfg = ctx.cfg.configuration; const slug2 = "404"; const url = new URL(`https://${cfg.baseUrl ?? "example.com"}`); const path11 = url.pathname; const externalResources = pageResources(path11, resources); const [tree, vfile] = defaultProcessedContent({ slug: slug2, text: "Not Found", description: "Not Found", frontmatter: { title: "Not Found", tags: [] } }); const componentData = { fileData: vfile.data, externalResources, cfg, children: [], tree, allFiles: [] }; return [ await emit({ content: renderPage(slug2, componentData, opts, externalResources), slug: slug2, ext: ".html" }) ]; } }; }, "NotFoundPage"); // quartz.config.ts var config = { configuration: { pageTitle: "\u{1F4DA} X\xB7Eden", enableSPA: true, enablePopovers: true, analytics: null, baseUrl: "wiki.7wate.com", ignorePatterns: ["private", "Templates", ".obsidian", "Canvas", "Static"], defaultDateType: "created", theme: { typography: { header: "Schibsted Grotesk", body: "Source Sans Pro", code: "IBM Plex Mono" }, colors: { lightMode: { light: "#faf8f8", lightgray: "#e5e5e5", gray: "#b8b8b8", darkgray: "#4e4e4e", dark: "#2b2b2b", secondary: "#284b63", tertiary: "#84a59d", highlight: "rgba(143, 159, 169, 0.15)" }, darkMode: { light: "#161618", lightgray: "#393639", gray: "#646464", darkgray: "#d4d4d4", dark: "#ebebec", secondary: "#7b97aa", tertiary: "#84a59d", highlight: "rgba(143, 159, 169, 0.15)" } } } }, plugins: { transformers: [ FrontMatter(), TableOfContents(), CreatedModifiedDate({ priority: ["frontmatter", "filesystem"] // you can add 'git' here for last modified from Git but this makes the build slower }), SyntaxHighlighting(), ObsidianFlavoredMarkdown({ enableInHtmlEmbed: false }), GitHubFlavoredMarkdown(), CrawlLinks({ markdownLinkResolution: "shortest" }), Latex({ renderEngine: "katex" }), Description() ], filters: [RemoveDrafts()], emitters: [ AliasRedirects(), ComponentResources({ fontOrigin: "googleFonts" }), ContentPage(), FolderPage(), TagPage(), ContentIndex({ enableSiteMap: true, enableRSS: true }), Assets(), Static(), NotFoundPage() ] } }; var quartz_config_default = config; // quartz/processors/parse.ts import esbuild from "esbuild"; import remarkParse from "remark-parse"; import remarkRehype from "remark-rehype"; import { unified } from "unified"; // quartz/util/perf.ts import chalk4 from "chalk"; import pretty from "pretty-time"; var PerfTimer = class { static { __name(this, "PerfTimer"); } evts; constructor() { this.evts = {}; this.addEvent("start"); } addEvent(evtName) { this.evts[evtName] = process.hrtime(); } timeSince(evtName) { return chalk4.yellow(pretty(process.hrtime(this.evts[evtName ?? "start"]))); } }; // quartz/processors/parse.ts import { read } from "to-vfile"; import path10 from "path"; import workerpool, { Promise as WorkerPromise } from "workerpool"; // quartz/util/log.ts import { Spinner } from "cli-spinner"; // quartz/processors/parse.ts function createProcessor(ctx) { const transformers = ctx.cfg.plugins.transformers; let processor = unified().use(remarkParse); for (const plugin of transformers.filter((p) => p.markdownPlugins)) { processor = processor.use(plugin.markdownPlugins(ctx)); } processor = processor.use(remarkRehype, { allowDangerousHtml: true }); for (const plugin of transformers.filter((p) => p.htmlPlugins)) { processor = processor.use(plugin.htmlPlugins(ctx)); } return processor; } __name(createProcessor, "createProcessor"); function createFileParser(ctx, fps) { const { argv, cfg } = ctx; return async (processor) => { const res = []; for (const fp of fps) { try { const perf = new PerfTimer(); const file = await read(fp); file.value = file.value.toString().trim(); for (const plugin of cfg.plugins.transformers.filter((p) => p.textTransform)) { file.value = plugin.textTransform(ctx, file.value); } file.data.slug = slugifyFilePath(path10.posix.relative(argv.directory, file.path)); file.data.filePath = fp; const ast = processor.parse(file); const newAst = await processor.run(ast, file); res.push([newAst, file]); if (argv.verbose) { console.log(`[process] ${fp} -> ${file.data.slug} (${perf.timeSince()})`); } } catch (err) { trace(` Failed to process \`${fp}\``, err); } } return res; }; } __name(createFileParser, "createFileParser"); // quartz/util/sourcemap.ts import fs4 from "fs"; import { fileURLToPath } from "url"; var options = { // source map hack to get around query param // import cache busting retrieveSourceMap(source) { if (source.includes(".quartz-cache")) { let realSource = fileURLToPath(source.split("?", 2)[0] + ".map"); return { map: fs4.readFileSync(realSource, "utf8") }; } else { return null; } } }; // quartz/worker.ts sourceMapSupport.install(options); async function parseFiles(argv, fps, allSlugs) { const ctx = { cfg: quartz_config_default, argv, allSlugs }; const processor = createProcessor(ctx); const parse = createFileParser(ctx, fps); return parse(processor); } __name(parseFiles, "parseFiles"); export { parseFiles }; //# sourceMappingURL=transpiled-worker.mjs.map