From b6a89c9954963c10044e34f5f766342ab655c85e Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Sat, 14 Mar 2026 21:57:39 +0100 Subject: [PATCH] chore: commit dist/ and remove prepare script Pre-built output is now committed to the repository so that Quartz can skip the build step during plugin installation. The prepare script is removed to prevent redundant builds when installing from npm/git. --- .gitignore | 1 - dist/components/index.js | 88 ++++++++++++++++++++++++++++++++++++ dist/components/index.js.map | 1 + dist/index.js | 88 ++++++++++++++++++++++++++++++++++++ dist/index.js.map | 1 + package-lock.json | 20 ++++---- package.json | 1 - 7 files changed, 186 insertions(+), 14 deletions(-) create mode 100644 dist/components/index.js create mode 100644 dist/components/index.js.map create mode 100644 dist/index.js create mode 100644 dist/index.js.map diff --git a/.gitignore b/.gitignore index 657842b..ef88793 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ node_modules/ .pnp.js # Build output -dist/ build/ *.tsbuildinfo diff --git a/dist/components/index.js b/dist/components/index.js new file mode 100644 index 0000000..132c92b --- /dev/null +++ b/dist/components/index.js @@ -0,0 +1,88 @@ +import readingTime from 'reading-time'; +import { jsx } from 'preact/jsx-runtime'; + +// src/components/ContentMeta.tsx + +// src/util/lang.ts +function classNames(...classes) { + return classes.filter(Boolean).join(" "); +} + +// src/i18n/locales/en-US.ts +var en_US_default = { + components: { + contentMeta: { + readingTime: ({ minutes }) => { + if (minutes === 1) { + return "1 min read"; + } + return `${minutes} min read`; + } + } + } +}; + +// src/i18n/index.ts +var locales = { + "en-US": en_US_default +}; +function i18n(locale) { + return locales[locale] || en_US_default; +} +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.` + ); + } + const dates = data.dates; + return dates?.[cfg.defaultDateType]; +} +function formatDate(d, locale = "en-US") { + return d.toLocaleDateString(locale, { + year: "numeric", + month: "short", + day: "2-digit" + }); +} +function DateComponent({ date, locale }) { + return /* @__PURE__ */ jsx("time", { datetime: date.toISOString(), children: formatDate(date, locale) }); +} + +// src/components/styles/contentMeta.scss +var contentMeta_default = '.content-meta {\n margin-top: 0;\n color: var(--darkgray);\n}\n.content-meta[show-comma=true] > *:not(:last-child) {\n margin-right: 8px;\n}\n.content-meta[show-comma=true] > *:not(:last-child)::after {\n content: ",";\n}'; +var defaultOptions = { + showReadingTime: true, + showComma: true +}; +var ContentMeta_default = ((opts) => { + const options = { ...defaultOptions, ...opts }; + function ContentMetadata({ cfg, fileData, displayClass }) { + const text = fileData.text; + if (text) { + const segments = []; + if (fileData.dates) { + const locale = cfg.locale || "en-US"; + segments.push(/* @__PURE__ */ jsx(DateComponent, { date: getDate(cfg, fileData), locale })); + } + if (options.showReadingTime) { + const { minutes, words: _words } = readingTime(text); + const locale = cfg.locale || "en-US"; + const i18nData = i18n(locale); + const displayedTime = i18nData.components.contentMeta.readingTime({ + minutes: Math.ceil(minutes) + }); + segments.push(/* @__PURE__ */ jsx("span", { children: displayedTime })); + } + return /* @__PURE__ */ jsx("p", { "show-comma": options.showComma, class: classNames(displayClass, "content-meta"), children: segments }); + } else { + return null; + } + } + ContentMetadata.css = contentMeta_default; + return ContentMetadata; +}); + +export { ContentMeta_default as ContentMeta }; +//# sourceMappingURL=index.js.map +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/components/index.js.map b/dist/components/index.js.map new file mode 100644 index 0000000..295e219 --- /dev/null +++ b/dist/components/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/util/lang.ts","../../src/i18n/locales/en-US.ts","../../src/i18n/index.ts","../../src/util/date.tsx","../../src/components/styles/contentMeta.scss","../../src/components/ContentMeta.tsx"],"names":["jsx"],"mappings":"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","file":"index.js","sourcesContent":["export function classNames(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n","export default {\n components: {\n contentMeta: {\n readingTime: ({ minutes }: { minutes: number }) => {\n if (minutes === 1) {\n return \"1 min read\";\n }\n return `${minutes} min read`;\n },\n },\n },\n};\n","import enUS from \"./locales/en-US\";\n\nconst locales: Record = {\n \"en-US\": enUS,\n};\n\nexport function i18n(locale: string) {\n return locales[locale] || enUS;\n}\n","export type ValidDateType = \"created\" | \"modified\" | \"published\";\n\ninterface Props {\n date: Date;\n locale?: string;\n}\n\nexport function getDate(\n cfg: { defaultDateType?: string },\n data: Record,\n): Date | undefined {\n if (!cfg.defaultDateType) {\n throw new Error(\n `Field 'defaultDateType' was not set in the configuration object of quartz.config.ts. See https://quartz.jzhao.xyz/configuration#general-configuration for more details.`,\n );\n }\n const dates = data.dates as Record | undefined;\n return dates?.[cfg.defaultDateType];\n}\n\nexport function formatDate(d: Date, locale: string = \"en-US\"): string {\n return d.toLocaleDateString(locale, {\n year: \"numeric\",\n month: \"short\",\n day: \"2-digit\",\n });\n}\n\nexport function DateComponent({ date, locale }: Props) {\n return ;\n}\n",".content-meta {\n margin-top: 0;\n color: var(--darkgray);\n}\n.content-meta[show-comma=true] > *:not(:last-child) {\n margin-right: 8px;\n}\n.content-meta[show-comma=true] > *:not(:last-child)::after {\n content: \",\";\n}","import type { QuartzComponentConstructor, QuartzComponentProps } from \"@quartz-community/types\";\nimport readingTime from \"reading-time\";\nimport { classNames } from \"../util/lang\";\nimport { i18n } from \"../i18n\";\nimport { DateComponent, getDate } from \"../util/date\";\nimport type { JSX } from \"preact\";\nimport style from \"./styles/contentMeta.scss\";\n\nexport interface ContentMetaOptions {\n /**\n * Whether to display reading time\n */\n showReadingTime: boolean;\n showComma: boolean;\n}\n\nconst defaultOptions: ContentMetaOptions = {\n showReadingTime: true,\n showComma: true,\n};\n\nexport default ((opts?: Partial) => {\n // Merge options with defaults\n const options: ContentMetaOptions = { ...defaultOptions, ...opts };\n\n function ContentMetadata({ cfg, fileData, displayClass }: QuartzComponentProps) {\n const text = fileData.text;\n\n if (text) {\n const segments: (string | JSX.Element)[] = [];\n\n if (fileData.dates) {\n const locale = cfg.locale || \"en-US\";\n segments.push();\n }\n\n // Display reading time if enabled\n if (options.showReadingTime) {\n const { minutes, words: _words } = readingTime(text as string);\n const locale = cfg.locale || \"en-US\";\n const i18nData = i18n(locale);\n const displayedTime = i18nData.components.contentMeta.readingTime({\n minutes: Math.ceil(minutes),\n });\n segments.push({displayedTime});\n }\n\n return (\n

\n {segments}\n

\n );\n } else {\n return null;\n }\n }\n\n ContentMetadata.css = style;\n\n return ContentMetadata;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..132c92b --- /dev/null +++ b/dist/index.js @@ -0,0 +1,88 @@ +import readingTime from 'reading-time'; +import { jsx } from 'preact/jsx-runtime'; + +// src/components/ContentMeta.tsx + +// src/util/lang.ts +function classNames(...classes) { + return classes.filter(Boolean).join(" "); +} + +// src/i18n/locales/en-US.ts +var en_US_default = { + components: { + contentMeta: { + readingTime: ({ minutes }) => { + if (minutes === 1) { + return "1 min read"; + } + return `${minutes} min read`; + } + } + } +}; + +// src/i18n/index.ts +var locales = { + "en-US": en_US_default +}; +function i18n(locale) { + return locales[locale] || en_US_default; +} +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.` + ); + } + const dates = data.dates; + return dates?.[cfg.defaultDateType]; +} +function formatDate(d, locale = "en-US") { + return d.toLocaleDateString(locale, { + year: "numeric", + month: "short", + day: "2-digit" + }); +} +function DateComponent({ date, locale }) { + return /* @__PURE__ */ jsx("time", { datetime: date.toISOString(), children: formatDate(date, locale) }); +} + +// src/components/styles/contentMeta.scss +var contentMeta_default = '.content-meta {\n margin-top: 0;\n color: var(--darkgray);\n}\n.content-meta[show-comma=true] > *:not(:last-child) {\n margin-right: 8px;\n}\n.content-meta[show-comma=true] > *:not(:last-child)::after {\n content: ",";\n}'; +var defaultOptions = { + showReadingTime: true, + showComma: true +}; +var ContentMeta_default = ((opts) => { + const options = { ...defaultOptions, ...opts }; + function ContentMetadata({ cfg, fileData, displayClass }) { + const text = fileData.text; + if (text) { + const segments = []; + if (fileData.dates) { + const locale = cfg.locale || "en-US"; + segments.push(/* @__PURE__ */ jsx(DateComponent, { date: getDate(cfg, fileData), locale })); + } + if (options.showReadingTime) { + const { minutes, words: _words } = readingTime(text); + const locale = cfg.locale || "en-US"; + const i18nData = i18n(locale); + const displayedTime = i18nData.components.contentMeta.readingTime({ + minutes: Math.ceil(minutes) + }); + segments.push(/* @__PURE__ */ jsx("span", { children: displayedTime })); + } + return /* @__PURE__ */ jsx("p", { "show-comma": options.showComma, class: classNames(displayClass, "content-meta"), children: segments }); + } else { + return null; + } + } + ContentMetadata.css = contentMeta_default; + return ContentMetadata; +}); + +export { ContentMeta_default as ContentMeta }; +//# sourceMappingURL=index.js.map +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map new file mode 100644 index 0000000..9e3078f --- /dev/null +++ b/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/util/lang.ts","../src/i18n/locales/en-US.ts","../src/i18n/index.ts","../src/util/date.tsx","../src/components/styles/contentMeta.scss","../src/components/ContentMeta.tsx"],"names":["jsx"],"mappings":"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","file":"index.js","sourcesContent":["export function classNames(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(\" \");\n}\n","export default {\n components: {\n contentMeta: {\n readingTime: ({ minutes }: { minutes: number }) => {\n if (minutes === 1) {\n return \"1 min read\";\n }\n return `${minutes} min read`;\n },\n },\n },\n};\n","import enUS from \"./locales/en-US\";\n\nconst locales: Record = {\n \"en-US\": enUS,\n};\n\nexport function i18n(locale: string) {\n return locales[locale] || enUS;\n}\n","export type ValidDateType = \"created\" | \"modified\" | \"published\";\n\ninterface Props {\n date: Date;\n locale?: string;\n}\n\nexport function getDate(\n cfg: { defaultDateType?: string },\n data: Record,\n): Date | undefined {\n if (!cfg.defaultDateType) {\n throw new Error(\n `Field 'defaultDateType' was not set in the configuration object of quartz.config.ts. See https://quartz.jzhao.xyz/configuration#general-configuration for more details.`,\n );\n }\n const dates = data.dates as Record | undefined;\n return dates?.[cfg.defaultDateType];\n}\n\nexport function formatDate(d: Date, locale: string = \"en-US\"): string {\n return d.toLocaleDateString(locale, {\n year: \"numeric\",\n month: \"short\",\n day: \"2-digit\",\n });\n}\n\nexport function DateComponent({ date, locale }: Props) {\n return ;\n}\n",".content-meta {\n margin-top: 0;\n color: var(--darkgray);\n}\n.content-meta[show-comma=true] > *:not(:last-child) {\n margin-right: 8px;\n}\n.content-meta[show-comma=true] > *:not(:last-child)::after {\n content: \",\";\n}","import type { QuartzComponentConstructor, QuartzComponentProps } from \"@quartz-community/types\";\nimport readingTime from \"reading-time\";\nimport { classNames } from \"../util/lang\";\nimport { i18n } from \"../i18n\";\nimport { DateComponent, getDate } from \"../util/date\";\nimport type { JSX } from \"preact\";\nimport style from \"./styles/contentMeta.scss\";\n\nexport interface ContentMetaOptions {\n /**\n * Whether to display reading time\n */\n showReadingTime: boolean;\n showComma: boolean;\n}\n\nconst defaultOptions: ContentMetaOptions = {\n showReadingTime: true,\n showComma: true,\n};\n\nexport default ((opts?: Partial) => {\n // Merge options with defaults\n const options: ContentMetaOptions = { ...defaultOptions, ...opts };\n\n function ContentMetadata({ cfg, fileData, displayClass }: QuartzComponentProps) {\n const text = fileData.text;\n\n if (text) {\n const segments: (string | JSX.Element)[] = [];\n\n if (fileData.dates) {\n const locale = cfg.locale || \"en-US\";\n segments.push();\n }\n\n // Display reading time if enabled\n if (options.showReadingTime) {\n const { minutes, words: _words } = readingTime(text as string);\n const locale = cfg.locale || \"en-US\";\n const i18nData = i18n(locale);\n const displayedTime = i18nData.components.contentMeta.readingTime({\n minutes: Math.ceil(minutes),\n });\n segments.push({displayedTime});\n }\n\n return (\n

\n {segments}\n

\n );\n } else {\n return null;\n }\n }\n\n ContentMetadata.css = style;\n\n return ContentMetadata;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 355a7b2..1f08d50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,7 @@ "version": "0.1.0", "license": "MIT", "dependencies": { - "@quartz-community/types": "github:quartz-community/types", - "reading-time": "^1.5.0", - "tsup": "^8.5.0", - "typescript": "^5.9.3" + "@quartz-community/types": "github:quartz-community/types" }, "devDependencies": { "@types/hast": "^3.0.4", @@ -25,6 +22,8 @@ "preact": "^10.28.2", "prettier": "^3.6.2", "sass": "^1.97.3", + "tsup": "^8.5.0", + "typescript": "^5.9.3", "vitest": "^2.1.9" }, "engines": { @@ -33,7 +32,8 @@ }, "peerDependencies": { "@jackyzha0/quartz": "^4.5.2", - "preact": "^10.0.0" + "preact": "^10.0.0", + "reading-time": "^1.5.0" }, "peerDependenciesMeta": { "@jackyzha0/quartz": { @@ -41,6 +41,9 @@ }, "preact": { "optional": false + }, + "reading-time": { + "optional": true } } }, @@ -3214,7 +3217,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -3347,12 +3349,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", - "license": "MIT" - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", diff --git a/package.json b/package.json index e91aba4..be9990e 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,6 @@ "sideEffects": false, "scripts": { "build": "tsup", - "prepare": "npm run build", "dev": "tsup --watch", "lint": "eslint . --max-warnings=0", "format": "prettier . --check",