import { formatDate, getDate } from "./Date" import { QuartzComponentConstructor, QuartzComponentProps } from "./types" import readingTime from "reading-time" import { classNames } from "../util/lang" import { i18n } from "../i18n" interface ContentMetaOptions { /** * Whether to display reading time */ showReadingTime: boolean } const defaultOptions: ContentMetaOptions = { showReadingTime: true, } export default ((opts?: Partial) => { // Merge options with defaults const options: ContentMetaOptions = { ...defaultOptions, ...opts } function ContentMetadata({ cfg, fileData, displayClass }: QuartzComponentProps) { const text = fileData.text if (text) { const segments: string[] = [] if (fileData.dates) { segments.push(formatDate(getDate(cfg, fileData)!, cfg.locale)) } // Display reading time if enabled if (options.showReadingTime) { const { minutes, words: _words } = readingTime(text) const displayedTime = i18n(cfg.locale).components.contentMeta.readingTime({ minutes: Math.ceil(minutes), }) segments.push(displayedTime) } return

{segments.join(", ")}

} else { return null } } ContentMetadata.css = ` .content-meta { margin-top: 0; color: var(--gray); } ` return ContentMetadata }) satisfies QuartzComponentConstructor