import { QuartzComponentConstructor, QuartzComponentProps } from "./types" import { FullSlug, SimpleSlug, resolveRelative } from "../util/path" import { QuartzPluginData } from "../plugins/vfile" import { byDateAndAlphabetical } from "./PageList" import style from "./styles/recentNotes.scss" import { Date, getDate } from "./Date" import { GlobalConfiguration } from "../cfg" import { i18n } from "../i18n/i18next" import { classNames } from "../util/lang" interface Options { title: string limit: number linkToMore: SimpleSlug | false filter: (f: QuartzPluginData) => boolean sort: (f1: QuartzPluginData, f2: QuartzPluginData) => number } const defaultOptions = (cfg: GlobalConfiguration): Options => ({ title: "Recent Notes", limit: 3, linkToMore: false, filter: () => true, sort: byDateAndAlphabetical(cfg), }) export default ((userOpts?: Partial) => { function RecentNotes({ allFiles, fileData, displayClass, cfg }: QuartzComponentProps) { const opts = { ...defaultOptions(cfg), ...userOpts } const pages = allFiles.filter(opts.filter).sort(opts.sort) const remaining = Math.max(0, pages.length - opts.limit) return (

{opts.title}

{opts.linkToMore && remaining > 0 && (

{" "} {i18n(cfg.locale, "recentNotes.seeRemainingMore", { remaining: remaining.toString(), })}{" "} →

)}
) } RecentNotes.css = style return RecentNotes }) satisfies QuartzComponentConstructor