diff --git a/dist/components/index.js b/dist/components/index.js index 8e38845..5dbb863 100644 --- a/dist/components/index.js +++ b/dist/components/index.js @@ -1,6 +1,9 @@ +import { formatDate } from '@quartz-community/utils/date'; import { joinSegments, simplifySlug as simplifySlug$1 } from '@quartz-community/utils'; import { jsxs, jsx } from 'preact/jsx-runtime'; +// src/components/RecentNotes.tsx + // src/util/lang.ts function classNames(...classes) { return classes.filter(Boolean).join(" "); @@ -48,13 +51,6 @@ function getDate(cfg, data) { } return data.dates?.[cfg.defaultDateType]; } -function formatDate(d, locale = "en-US") { - return d.toLocaleDateString(locale, { - year: "numeric", - month: "short", - day: "2-digit" - }); -} // src/util/sort.ts function byDateAndAlphabetical(cfg) { diff --git a/dist/components/index.js.map b/dist/components/index.js.map index 2d7587c..e4280e0 100644 --- a/dist/components/index.js.map +++ b/dist/components/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/util/lang.ts","../../src/i18n/locales/en-US.ts","../../src/i18n/index.ts","../../src/util/path.ts","../../src/util/date.ts","../../src/util/sort.ts","../../src/components/styles/recentNotes.scss","../../src/components/RecentNotes.tsx"],"names":["utilSimplifySlug"],"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 recentNotes: {\n title: \"Recent Notes\",\n seeRemainingMore: ({ remaining }: { remaining: number }) => `See ${remaining} more →`,\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","import { simplifySlug as utilSimplifySlug, joinSegments } from \"@quartz-community/utils\";\n\nexport function simplifySlug(fp: string): string {\n return utilSimplifySlug(fp);\n}\n\nexport function resolveRelative(current: string, target: string): string {\n const simplified = simplifySlug(target);\n const rootPath = pathToRoot(current);\n return joinSegments(rootPath, simplified);\n}\n\nfunction pathToRoot(slug: string): string {\n let rootPath = slug\n .split(\"/\")\n .filter((x) => x !== \"\")\n .slice(0, -1)\n .map((_) => \"..\")\n .join(\"/\");\n\n if (rootPath.length === 0) {\n rootPath = \".\";\n }\n\n return rootPath;\n}\n","interface GlobalConfiguration {\n defaultDateType: string;\n [key: string]: unknown;\n}\n\ninterface QuartzPluginData {\n dates?: Record;\n [key: string]: unknown;\n}\n\nexport function getDate(cfg: GlobalConfiguration, data: QuartzPluginData): Date | undefined {\n if (!cfg.defaultDateType) {\n throw new Error(\n \"Field 'defaultDateType' was not set in the configuration object of quartz.config.ts.\",\n );\n }\n return data.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","import { getDate } from \"./date\";\n\ninterface GlobalConfiguration {\n defaultDateType: string;\n [key: string]: unknown;\n}\n\ninterface QuartzPluginData {\n dates?: Record;\n frontmatter?: {\n title?: string;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n\nexport type SortFn = (f1: QuartzPluginData, f2: QuartzPluginData) => number;\n\nexport function byDateAndAlphabetical(cfg: GlobalConfiguration): SortFn {\n return (f1, f2) => {\n if (f1.dates && f2.dates) {\n return getDate(cfg, f2)!.getTime() - getDate(cfg, f1)!.getTime();\n } else if (f1.dates && !f2.dates) {\n return -1;\n } else if (!f1.dates && f2.dates) {\n return 1;\n }\n\n const f1Title = f1.frontmatter?.title?.toLowerCase() ?? \"\";\n const f2Title = f2.frontmatter?.title?.toLowerCase() ?? \"\";\n return f1Title.localeCompare(f2Title);\n };\n}\n",".recent-notes > h3 {\n margin: 0.5rem 0 0 0;\n font-size: 1rem;\n}\n.recent-notes > ul.recent-ul {\n list-style: none;\n margin-top: 1rem;\n padding-left: 0;\n}\n.recent-notes > ul.recent-ul > li {\n margin: 1rem 0;\n}\n.recent-notes > ul.recent-ul > li .section > .desc > h3 > a {\n background-color: transparent;\n}\n.recent-notes > ul.recent-ul > li .section > .meta {\n margin: 0 0 0.5rem 0;\n opacity: 0.6;\n}","import type { QuartzComponent, QuartzComponentProps } from \"@quartz-community/types\";\nimport { classNames } from \"../util/lang\";\nimport { i18n } from \"../i18n\";\nimport { resolveRelative } from \"../util/path\";\nimport { getDate, formatDate } from \"../util/date\";\nimport { byDateAndAlphabetical } from \"../util/sort\";\nimport style from \"./styles/recentNotes.scss\";\n\ntype QuartzComponentConstructor = (\n opts: Options,\n) => QuartzComponent;\n\ninterface QuartzPluginData {\n slug?: string;\n filePath?: string;\n dates?: Record;\n frontmatter?: {\n title?: string;\n tags?: string[];\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n\ninterface GlobalConfiguration {\n locale: string;\n defaultDateType: string;\n [key: string]: unknown;\n}\n\nexport interface RecentNotesOptions {\n title?: string;\n limit: number;\n linkToMore: string | false;\n showTags: boolean;\n filter: (f: QuartzPluginData) => boolean;\n sort: (f1: QuartzPluginData, f2: QuartzPluginData) => number;\n}\n\nconst defaultOptions = (cfg: GlobalConfiguration): RecentNotesOptions => ({\n limit: 3,\n linkToMore: false,\n showTags: true,\n filter: () => true,\n sort: byDateAndAlphabetical(cfg),\n});\n\nexport default ((userOpts?: Partial) => {\n const RecentNotes: QuartzComponent = ({\n allFiles,\n fileData,\n displayClass,\n cfg,\n }: QuartzComponentProps & { displayClass?: string }) => {\n const globalCfg = cfg as unknown as GlobalConfiguration;\n const opts = { ...defaultOptions(globalCfg), ...userOpts };\n const pages = (allFiles as QuartzPluginData[]).filter(opts.filter).sort(opts.sort);\n const remaining = Math.max(0, pages.length - opts.limit);\n const slug = fileData.slug as string | undefined;\n const locale = cfg.locale ?? \"en-US\";\n return (\n
\n

{opts.title ?? i18n(locale).components.recentNotes.title}

\n
    \n {pages.slice(0, opts.limit).map((page) => {\n const title = page.frontmatter?.title ?? \"Untitled\";\n const tags = page.frontmatter?.tags ?? [];\n\n return (\n
  • \n
    \n
    \n

    \n \n {title}\n \n

    \n
    \n {page.dates && (\n

    \n \n

    \n )}\n {opts.showTags && (\n \n )}\n
    \n
  • \n );\n })}\n
\n {opts.linkToMore && remaining > 0 && (\n

\n \n {i18n(locale).components.recentNotes.seeRemainingMore({ remaining })}\n \n

\n )}\n
\n );\n };\n\n RecentNotes.css = style;\n return RecentNotes;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/util/lang.ts","../../src/i18n/locales/en-US.ts","../../src/i18n/index.ts","../../src/util/path.ts","../../src/util/date.ts","../../src/util/sort.ts","../../src/components/styles/recentNotes.scss","../../src/components/RecentNotes.tsx"],"names":["utilSimplifySlug"],"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 recentNotes: {\n title: \"Recent Notes\",\n seeRemainingMore: ({ remaining }: { remaining: number }) => `See ${remaining} more →`,\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","import { simplifySlug as utilSimplifySlug, joinSegments } from \"@quartz-community/utils\";\n\nexport function simplifySlug(fp: string): string {\n return utilSimplifySlug(fp);\n}\n\nexport function resolveRelative(current: string, target: string): string {\n const simplified = simplifySlug(target);\n const rootPath = pathToRoot(current);\n return joinSegments(rootPath, simplified);\n}\n\nfunction pathToRoot(slug: string): string {\n let rootPath = slug\n .split(\"/\")\n .filter((x) => x !== \"\")\n .slice(0, -1)\n .map((_) => \"..\")\n .join(\"/\");\n\n if (rootPath.length === 0) {\n rootPath = \".\";\n }\n\n return rootPath;\n}\n","interface GlobalConfiguration {\n defaultDateType: string;\n [key: string]: unknown;\n}\n\ninterface QuartzPluginData {\n dates?: Record;\n [key: string]: unknown;\n}\n\nexport function getDate(cfg: GlobalConfiguration, data: QuartzPluginData): Date | undefined {\n if (!cfg.defaultDateType) {\n throw new Error(\n \"Field 'defaultDateType' was not set in the configuration object of quartz.config.ts.\",\n );\n }\n return data.dates?.[cfg.defaultDateType];\n}\n","import type { SortFn } from \"@quartz-community/types\";\nimport { getDate } from \"./date\";\n\ninterface GlobalConfiguration {\n defaultDateType: string;\n [key: string]: unknown;\n}\n\nexport function byDateAndAlphabetical(cfg: GlobalConfiguration): SortFn {\n return (f1, f2) => {\n if (f1.dates && f2.dates) {\n return getDate(cfg, f2)!.getTime() - getDate(cfg, f1)!.getTime();\n } else if (f1.dates && !f2.dates) {\n return -1;\n } else if (!f1.dates && f2.dates) {\n return 1;\n }\n\n const f1Title = (f1.frontmatter as { title?: string } | undefined)?.title?.toLowerCase() ?? \"\";\n const f2Title = (f2.frontmatter as { title?: string } | undefined)?.title?.toLowerCase() ?? \"\";\n return f1Title.localeCompare(f2Title);\n };\n}\n",".recent-notes > h3 {\n margin: 0.5rem 0 0 0;\n font-size: 1rem;\n}\n.recent-notes > ul.recent-ul {\n list-style: none;\n margin-top: 1rem;\n padding-left: 0;\n}\n.recent-notes > ul.recent-ul > li {\n margin: 1rem 0;\n}\n.recent-notes > ul.recent-ul > li .section > .desc > h3 > a {\n background-color: transparent;\n}\n.recent-notes > ul.recent-ul > li .section > .meta {\n margin: 0 0 0.5rem 0;\n opacity: 0.6;\n}","import type { QuartzComponent, QuartzComponentProps } from \"@quartz-community/types\";\nimport { formatDate } from \"@quartz-community/utils/date\";\nimport { classNames } from \"../util/lang\";\nimport { i18n } from \"../i18n\";\nimport { resolveRelative } from \"../util/path\";\nimport { getDate } from \"../util/date\";\nimport { byDateAndAlphabetical } from \"../util/sort\";\nimport style from \"./styles/recentNotes.scss\";\n\ntype QuartzComponentConstructor = (\n opts: Options,\n) => QuartzComponent;\n\ninterface QuartzPluginData {\n slug?: string;\n filePath?: string;\n dates?: Record;\n frontmatter?: {\n title?: string;\n tags?: string[];\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n\ninterface GlobalConfiguration {\n locale: string;\n defaultDateType: string;\n [key: string]: unknown;\n}\n\nexport interface RecentNotesOptions {\n title?: string;\n limit: number;\n linkToMore: string | false;\n showTags: boolean;\n filter: (f: QuartzPluginData) => boolean;\n sort: (f1: QuartzPluginData, f2: QuartzPluginData) => number;\n}\n\nconst defaultOptions = (cfg: GlobalConfiguration): RecentNotesOptions => ({\n limit: 3,\n linkToMore: false,\n showTags: true,\n filter: () => true,\n sort: byDateAndAlphabetical(cfg),\n});\n\nexport default ((userOpts?: Partial) => {\n const RecentNotes: QuartzComponent = ({\n allFiles,\n fileData,\n displayClass,\n cfg,\n }: QuartzComponentProps & { displayClass?: string }) => {\n const globalCfg = cfg as unknown as GlobalConfiguration;\n const opts = { ...defaultOptions(globalCfg), ...userOpts };\n const pages = (allFiles as QuartzPluginData[]).filter(opts.filter).sort(opts.sort);\n const remaining = Math.max(0, pages.length - opts.limit);\n const slug = fileData.slug as string | undefined;\n const locale = cfg.locale ?? \"en-US\";\n return (\n
\n

{opts.title ?? i18n(locale).components.recentNotes.title}

\n
    \n {pages.slice(0, opts.limit).map((page) => {\n const title = page.frontmatter?.title ?? \"Untitled\";\n const tags = page.frontmatter?.tags ?? [];\n\n return (\n
  • \n
    \n
    \n

    \n \n {title}\n \n

    \n
    \n {page.dates && (\n

    \n \n

    \n )}\n {opts.showTags && (\n \n )}\n
    \n
  • \n );\n })}\n
\n {opts.linkToMore && remaining > 0 && (\n

\n \n {i18n(locale).components.recentNotes.seeRemainingMore({ remaining })}\n \n

\n )}\n
\n );\n };\n\n RecentNotes.css = style;\n return RecentNotes;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 8e38845..5dbb863 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,6 +1,9 @@ +import { formatDate } from '@quartz-community/utils/date'; import { joinSegments, simplifySlug as simplifySlug$1 } from '@quartz-community/utils'; import { jsxs, jsx } from 'preact/jsx-runtime'; +// src/components/RecentNotes.tsx + // src/util/lang.ts function classNames(...classes) { return classes.filter(Boolean).join(" "); @@ -48,13 +51,6 @@ function getDate(cfg, data) { } return data.dates?.[cfg.defaultDateType]; } -function formatDate(d, locale = "en-US") { - return d.toLocaleDateString(locale, { - year: "numeric", - month: "short", - day: "2-digit" - }); -} // src/util/sort.ts function byDateAndAlphabetical(cfg) { diff --git a/dist/index.js.map b/dist/index.js.map index 1971494..2b901ac 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/util/lang.ts","../src/i18n/locales/en-US.ts","../src/i18n/index.ts","../src/util/path.ts","../src/util/date.ts","../src/util/sort.ts","../src/components/styles/recentNotes.scss","../src/components/RecentNotes.tsx"],"names":["utilSimplifySlug"],"mappings":";;;;AAAO,SAAS,cAAc,OAAA,EAAwD;AACpF,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AACzC;;;ACFA,IAAO,aAAA,GAAQ;AAAA,EACb,UAAA,EAAY;AAAA,IACV,WAAA,EAAa;AAAA,MACX,KAAA,EAAO,cAAA;AAAA,MACP,kBAAkB,CAAC,EAAE,SAAA,EAAU,KAA6B,OAAO,SAAS,CAAA,YAAA;AAAA;AAC9E;AAEJ,CAAA;;;ACLA,IAAM,OAAA,GAAuC;AAAA,EAC3C,OAAA,EAAS;AACX,CAAA;AAEO,SAAS,KAAK,MAAA,EAAgB;AACnC,EAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,IAAK,aAAA;AAC5B;ACNO,SAAS,aAAa,EAAA,EAAoB;AAC/C,EAAA,OAAOA,eAAiB,EAAE,CAAA;AAC5B;AAEO,SAAS,eAAA,CAAgB,SAAiB,MAAA,EAAwB;AACvE,EAAA,MAAM,UAAA,GAAa,aAAa,MAAM,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,WAAW,OAAO,CAAA;AACnC,EAAA,OAAO,YAAA,CAAa,UAAU,UAAU,CAAA;AAC1C;AAEA,SAAS,WAAW,IAAA,EAAsB;AACxC,EAAA,IAAI,QAAA,GAAW,KACZ,KAAA,CAAM,GAAG,EACT,MAAA,CAAO,CAAC,MAAM,CAAA,KAAM,EAAE,EACtB,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,CAAA,KAAM,IAAI,CAAA,CACf,IAAA,CAAK,GAAG,CAAA;AAEX,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,QAAA,GAAW,GAAA;AAAA,EACb;AAEA,EAAA,OAAO,QAAA;AACT;;;ACfO,SAAS,OAAA,CAAQ,KAA0B,IAAA,EAA0C;AAC1F,EAAA,IAAI,CAAC,IAAI,eAAA,EAAiB;AACxB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA,CAAK,KAAA,GAAQ,GAAA,CAAI,eAAe,CAAA;AACzC;AAEO,SAAS,UAAA,CAAW,CAAA,EAAS,MAAA,GAAiB,OAAA,EAAiB;AACpE,EAAA,OAAO,CAAA,CAAE,mBAAmB,MAAA,EAAQ;AAAA,IAClC,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK;AAAA,GACN,CAAA;AACH;;;ACPO,SAAS,sBAAsB,GAAA,EAAkC;AACtE,EAAA,OAAO,CAAC,IAAI,EAAA,KAAO;AACjB,IAAA,IAAI,EAAA,CAAG,KAAA,IAAS,EAAA,CAAG,KAAA,EAAO;AACxB,MAAA,OAAO,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,CAAG,OAAA,KAAY,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,CAAG,OAAA,EAAQ;AAAA,IACjE,CAAA,MAAA,IAAW,EAAA,CAAG,KAAA,IAAS,CAAC,GAAG,KAAA,EAAO;AAChC,MAAA,OAAO,EAAA;AAAA,IACT,CAAA,MAAA,IAAW,CAAC,EAAA,CAAG,KAAA,IAAS,GAAG,KAAA,EAAO;AAChC,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,EAAA,CAAG,WAAA,EAAa,KAAA,EAAO,aAAY,IAAK,EAAA;AACxD,IAAA,MAAM,OAAA,GAAU,EAAA,CAAG,WAAA,EAAa,KAAA,EAAO,aAAY,IAAK,EAAA;AACxD,IAAA,OAAO,OAAA,CAAQ,cAAc,OAAO,CAAA;AAAA,EACtC,CAAA;AACF;;;AChCA,IAAA,mBAAA,GAAA,yaAAA;ACuCA,IAAM,cAAA,GAAiB,CAAC,GAAA,MAAkD;AAAA,EACxE,KAAA,EAAO,CAAA;AAAA,EACP,UAAA,EAAY,KAAA;AAAA,EACZ,QAAA,EAAU,IAAA;AAAA,EACV,QAAQ,MAAM,IAAA;AAAA,EACd,IAAA,EAAM,sBAAsB,GAAG;AACjC,CAAA,CAAA;AAEA,IAAO,mBAAA,IAAS,CAAC,QAAA,KAA2C;AAC1D,EAAA,MAAM,cAA+B,CAAC;AAAA,IACpC,QAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,KAAwD;AACtD,IAAA,MAAM,SAAA,GAAY,GAAA;AAClB,IAAA,MAAM,OAAO,EAAE,GAAG,eAAe,SAAS,CAAA,EAAG,GAAG,QAAA,EAAS;AACzD,IAAA,MAAM,KAAA,GAAS,SAAgC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,IAAA,CAAK,KAAK,IAAI,CAAA;AACjF,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,CAAM,MAAA,GAAS,KAAK,KAAK,CAAA;AACvD,IAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,IAAA,MAAM,MAAA,GAAS,IAAI,MAAA,IAAU,OAAA;AAC7B,IAAA,4BACG,KAAA,EAAA,EAAI,KAAA,EAAO,UAAA,CAAW,YAAA,EAAc,cAAc,CAAA,EACjD,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAI,eAAK,KAAA,IAAS,IAAA,CAAK,MAAM,CAAA,CAAE,UAAA,CAAW,YAAY,KAAA,EAAM,CAAA;AAAA,sBAC7D,GAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAM,WAAA,EACP,QAAA,EAAA,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AACxC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,EAAa,KAAA,IAAS,UAAA;AACzC,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,EAAa,IAAA,IAAQ,EAAC;AAExC,QAAA,2BACG,IAAA,EAAA,EAAG,KAAA,EAAM,aACR,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,OAAM,SAAA,EACT,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,SAAI,KAAA,EAAM,MAAA,EACT,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EACC,8BAAC,GAAA,EAAA,EAAE,IAAA,EAAM,eAAA,CAAgB,IAAA,EAAO,KAAK,IAAK,CAAA,EAAG,OAAM,UAAA,EAChD,QAAA,EAAA,KAAA,EACH,GACF,CAAA,EACF,CAAA;AAAA,UACC,IAAA,CAAK,yBACJ,GAAA,CAAC,GAAA,EAAA,EAAE,OAAM,MAAA,EACP,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,OAAA,CAAQ,SAAA,EAAW,IAAI,CAAA,EAAG,WAAA,IACvC,QAAA,EAAA,UAAA,CAAW,OAAA,CAAQ,WAAW,IAAI,CAAA,EAAI,MAAM,CAAA,EAC/C,CAAA,EACF,CAAA;AAAA,UAED,IAAA,CAAK,QAAA,oBACJ,GAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAM,MAAA,EACP,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACT,GAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,OAAE,KAAA,EAAM,mBAAA,EAAoB,IAAA,EAAM,eAAA,CAAgB,IAAA,EAAO,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAAA,EACpE,QAAA,EAAA,GAAA,EACH,CAAA,EACF,CACD,CAAA,EACH;AAAA,SAAA,EAEJ,CAAA,EACF,CAAA;AAAA,MAEJ,CAAC,CAAA,EACH,CAAA;AAAA,MACC,IAAA,CAAK,UAAA,IAAc,SAAA,GAAY,CAAA,oBAC9B,GAAA,CAAC,OACC,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,eAAA,CAAgB,IAAA,EAAO,IAAA,CAAK,UAAU,CAAA,EAC5C,QAAA,EAAA,IAAA,CAAK,MAAM,CAAA,CAAE,UAAA,CAAW,WAAA,CAAY,iBAAiB,EAAE,SAAA,EAAW,CAAA,EACrE,CAAA,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,WAAA,CAAY,GAAA,GAAM,mBAAA;AAClB,EAAA,OAAO,WAAA;AACT,CAAA","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 recentNotes: {\n title: \"Recent Notes\",\n seeRemainingMore: ({ remaining }: { remaining: number }) => `See ${remaining} more →`,\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","import { simplifySlug as utilSimplifySlug, joinSegments } from \"@quartz-community/utils\";\n\nexport function simplifySlug(fp: string): string {\n return utilSimplifySlug(fp);\n}\n\nexport function resolveRelative(current: string, target: string): string {\n const simplified = simplifySlug(target);\n const rootPath = pathToRoot(current);\n return joinSegments(rootPath, simplified);\n}\n\nfunction pathToRoot(slug: string): string {\n let rootPath = slug\n .split(\"/\")\n .filter((x) => x !== \"\")\n .slice(0, -1)\n .map((_) => \"..\")\n .join(\"/\");\n\n if (rootPath.length === 0) {\n rootPath = \".\";\n }\n\n return rootPath;\n}\n","interface GlobalConfiguration {\n defaultDateType: string;\n [key: string]: unknown;\n}\n\ninterface QuartzPluginData {\n dates?: Record;\n [key: string]: unknown;\n}\n\nexport function getDate(cfg: GlobalConfiguration, data: QuartzPluginData): Date | undefined {\n if (!cfg.defaultDateType) {\n throw new Error(\n \"Field 'defaultDateType' was not set in the configuration object of quartz.config.ts.\",\n );\n }\n return data.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","import { getDate } from \"./date\";\n\ninterface GlobalConfiguration {\n defaultDateType: string;\n [key: string]: unknown;\n}\n\ninterface QuartzPluginData {\n dates?: Record;\n frontmatter?: {\n title?: string;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n\nexport type SortFn = (f1: QuartzPluginData, f2: QuartzPluginData) => number;\n\nexport function byDateAndAlphabetical(cfg: GlobalConfiguration): SortFn {\n return (f1, f2) => {\n if (f1.dates && f2.dates) {\n return getDate(cfg, f2)!.getTime() - getDate(cfg, f1)!.getTime();\n } else if (f1.dates && !f2.dates) {\n return -1;\n } else if (!f1.dates && f2.dates) {\n return 1;\n }\n\n const f1Title = f1.frontmatter?.title?.toLowerCase() ?? \"\";\n const f2Title = f2.frontmatter?.title?.toLowerCase() ?? \"\";\n return f1Title.localeCompare(f2Title);\n };\n}\n",".recent-notes > h3 {\n margin: 0.5rem 0 0 0;\n font-size: 1rem;\n}\n.recent-notes > ul.recent-ul {\n list-style: none;\n margin-top: 1rem;\n padding-left: 0;\n}\n.recent-notes > ul.recent-ul > li {\n margin: 1rem 0;\n}\n.recent-notes > ul.recent-ul > li .section > .desc > h3 > a {\n background-color: transparent;\n}\n.recent-notes > ul.recent-ul > li .section > .meta {\n margin: 0 0 0.5rem 0;\n opacity: 0.6;\n}","import type { QuartzComponent, QuartzComponentProps } from \"@quartz-community/types\";\nimport { classNames } from \"../util/lang\";\nimport { i18n } from \"../i18n\";\nimport { resolveRelative } from \"../util/path\";\nimport { getDate, formatDate } from \"../util/date\";\nimport { byDateAndAlphabetical } from \"../util/sort\";\nimport style from \"./styles/recentNotes.scss\";\n\ntype QuartzComponentConstructor = (\n opts: Options,\n) => QuartzComponent;\n\ninterface QuartzPluginData {\n slug?: string;\n filePath?: string;\n dates?: Record;\n frontmatter?: {\n title?: string;\n tags?: string[];\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n\ninterface GlobalConfiguration {\n locale: string;\n defaultDateType: string;\n [key: string]: unknown;\n}\n\nexport interface RecentNotesOptions {\n title?: string;\n limit: number;\n linkToMore: string | false;\n showTags: boolean;\n filter: (f: QuartzPluginData) => boolean;\n sort: (f1: QuartzPluginData, f2: QuartzPluginData) => number;\n}\n\nconst defaultOptions = (cfg: GlobalConfiguration): RecentNotesOptions => ({\n limit: 3,\n linkToMore: false,\n showTags: true,\n filter: () => true,\n sort: byDateAndAlphabetical(cfg),\n});\n\nexport default ((userOpts?: Partial) => {\n const RecentNotes: QuartzComponent = ({\n allFiles,\n fileData,\n displayClass,\n cfg,\n }: QuartzComponentProps & { displayClass?: string }) => {\n const globalCfg = cfg as unknown as GlobalConfiguration;\n const opts = { ...defaultOptions(globalCfg), ...userOpts };\n const pages = (allFiles as QuartzPluginData[]).filter(opts.filter).sort(opts.sort);\n const remaining = Math.max(0, pages.length - opts.limit);\n const slug = fileData.slug as string | undefined;\n const locale = cfg.locale ?? \"en-US\";\n return (\n
\n

{opts.title ?? i18n(locale).components.recentNotes.title}

\n
    \n {pages.slice(0, opts.limit).map((page) => {\n const title = page.frontmatter?.title ?? \"Untitled\";\n const tags = page.frontmatter?.tags ?? [];\n\n return (\n
  • \n
    \n
    \n

    \n \n {title}\n \n

    \n
    \n {page.dates && (\n

    \n \n

    \n )}\n {opts.showTags && (\n \n )}\n
    \n
  • \n );\n })}\n
\n {opts.linkToMore && remaining > 0 && (\n

\n \n {i18n(locale).components.recentNotes.seeRemainingMore({ remaining })}\n \n

\n )}\n
\n );\n };\n\n RecentNotes.css = style;\n return RecentNotes;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file +{"version":3,"sources":["../src/util/lang.ts","../src/i18n/locales/en-US.ts","../src/i18n/index.ts","../src/util/path.ts","../src/util/date.ts","../src/util/sort.ts","../src/components/styles/recentNotes.scss","../src/components/RecentNotes.tsx"],"names":["utilSimplifySlug"],"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 recentNotes: {\n title: \"Recent Notes\",\n seeRemainingMore: ({ remaining }: { remaining: number }) => `See ${remaining} more →`,\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","import { simplifySlug as utilSimplifySlug, joinSegments } from \"@quartz-community/utils\";\n\nexport function simplifySlug(fp: string): string {\n return utilSimplifySlug(fp);\n}\n\nexport function resolveRelative(current: string, target: string): string {\n const simplified = simplifySlug(target);\n const rootPath = pathToRoot(current);\n return joinSegments(rootPath, simplified);\n}\n\nfunction pathToRoot(slug: string): string {\n let rootPath = slug\n .split(\"/\")\n .filter((x) => x !== \"\")\n .slice(0, -1)\n .map((_) => \"..\")\n .join(\"/\");\n\n if (rootPath.length === 0) {\n rootPath = \".\";\n }\n\n return rootPath;\n}\n","interface GlobalConfiguration {\n defaultDateType: string;\n [key: string]: unknown;\n}\n\ninterface QuartzPluginData {\n dates?: Record;\n [key: string]: unknown;\n}\n\nexport function getDate(cfg: GlobalConfiguration, data: QuartzPluginData): Date | undefined {\n if (!cfg.defaultDateType) {\n throw new Error(\n \"Field 'defaultDateType' was not set in the configuration object of quartz.config.ts.\",\n );\n }\n return data.dates?.[cfg.defaultDateType];\n}\n","import type { SortFn } from \"@quartz-community/types\";\nimport { getDate } from \"./date\";\n\ninterface GlobalConfiguration {\n defaultDateType: string;\n [key: string]: unknown;\n}\n\nexport function byDateAndAlphabetical(cfg: GlobalConfiguration): SortFn {\n return (f1, f2) => {\n if (f1.dates && f2.dates) {\n return getDate(cfg, f2)!.getTime() - getDate(cfg, f1)!.getTime();\n } else if (f1.dates && !f2.dates) {\n return -1;\n } else if (!f1.dates && f2.dates) {\n return 1;\n }\n\n const f1Title = (f1.frontmatter as { title?: string } | undefined)?.title?.toLowerCase() ?? \"\";\n const f2Title = (f2.frontmatter as { title?: string } | undefined)?.title?.toLowerCase() ?? \"\";\n return f1Title.localeCompare(f2Title);\n };\n}\n",".recent-notes > h3 {\n margin: 0.5rem 0 0 0;\n font-size: 1rem;\n}\n.recent-notes > ul.recent-ul {\n list-style: none;\n margin-top: 1rem;\n padding-left: 0;\n}\n.recent-notes > ul.recent-ul > li {\n margin: 1rem 0;\n}\n.recent-notes > ul.recent-ul > li .section > .desc > h3 > a {\n background-color: transparent;\n}\n.recent-notes > ul.recent-ul > li .section > .meta {\n margin: 0 0 0.5rem 0;\n opacity: 0.6;\n}","import type { QuartzComponent, QuartzComponentProps } from \"@quartz-community/types\";\nimport { formatDate } from \"@quartz-community/utils/date\";\nimport { classNames } from \"../util/lang\";\nimport { i18n } from \"../i18n\";\nimport { resolveRelative } from \"../util/path\";\nimport { getDate } from \"../util/date\";\nimport { byDateAndAlphabetical } from \"../util/sort\";\nimport style from \"./styles/recentNotes.scss\";\n\ntype QuartzComponentConstructor = (\n opts: Options,\n) => QuartzComponent;\n\ninterface QuartzPluginData {\n slug?: string;\n filePath?: string;\n dates?: Record;\n frontmatter?: {\n title?: string;\n tags?: string[];\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n\ninterface GlobalConfiguration {\n locale: string;\n defaultDateType: string;\n [key: string]: unknown;\n}\n\nexport interface RecentNotesOptions {\n title?: string;\n limit: number;\n linkToMore: string | false;\n showTags: boolean;\n filter: (f: QuartzPluginData) => boolean;\n sort: (f1: QuartzPluginData, f2: QuartzPluginData) => number;\n}\n\nconst defaultOptions = (cfg: GlobalConfiguration): RecentNotesOptions => ({\n limit: 3,\n linkToMore: false,\n showTags: true,\n filter: () => true,\n sort: byDateAndAlphabetical(cfg),\n});\n\nexport default ((userOpts?: Partial) => {\n const RecentNotes: QuartzComponent = ({\n allFiles,\n fileData,\n displayClass,\n cfg,\n }: QuartzComponentProps & { displayClass?: string }) => {\n const globalCfg = cfg as unknown as GlobalConfiguration;\n const opts = { ...defaultOptions(globalCfg), ...userOpts };\n const pages = (allFiles as QuartzPluginData[]).filter(opts.filter).sort(opts.sort);\n const remaining = Math.max(0, pages.length - opts.limit);\n const slug = fileData.slug as string | undefined;\n const locale = cfg.locale ?? \"en-US\";\n return (\n
\n

{opts.title ?? i18n(locale).components.recentNotes.title}

\n
    \n {pages.slice(0, opts.limit).map((page) => {\n const title = page.frontmatter?.title ?? \"Untitled\";\n const tags = page.frontmatter?.tags ?? [];\n\n return (\n
  • \n
    \n
    \n

    \n \n {title}\n \n

    \n
    \n {page.dates && (\n

    \n \n

    \n )}\n {opts.showTags && (\n \n )}\n
    \n
  • \n );\n })}\n
\n {opts.linkToMore && remaining > 0 && (\n

\n \n {i18n(locale).components.recentNotes.seeRemainingMore({ remaining })}\n \n

\n )}\n
\n );\n };\n\n RecentNotes.css = style;\n return RecentNotes;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 51dc753..c02b1db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1049,7 +1049,7 @@ }, "node_modules/@quartz-community/types": { "version": "0.2.1", - "resolved": "git+ssh://git@github.com/quartz-community/types.git#5786c30b02188ebcccb6f0479205bd6751336015", + "resolved": "git+ssh://git@github.com/quartz-community/types.git#b1dc9ac610c253d0673d1c8c9a695cd4c5aac0ae", "license": "MIT", "engines": { "node": ">=22", @@ -1070,7 +1070,7 @@ }, "node_modules/@quartz-community/utils": { "version": "0.1.0", - "resolved": "git+ssh://git@github.com/quartz-community/utils.git#8d2e14bcb9efe83ec8085dd0c4f848f3f25a9c78", + "resolved": "git+ssh://git@github.com/quartz-community/utils.git#8b6e32ba07b62500dce10f0c79ca43bb7d7e55bc", "license": "MIT", "dependencies": { "@quartz-community/types": "github:quartz-community/types" @@ -1503,7 +1503,6 @@ "integrity": "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -1555,7 +1554,6 @@ "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", @@ -1849,7 +1847,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2336,7 +2333,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -2392,7 +2388,6 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -2770,8 +2765,7 @@ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/glob": { "version": "7.2.3", @@ -2892,7 +2886,6 @@ "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", @@ -4183,7 +4176,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -4241,7 +4233,6 @@ "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.3.tgz", "integrity": "sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -5134,7 +5125,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -5317,7 +5307,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5436,7 +5425,6 @@ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" @@ -5467,7 +5455,6 @@ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", diff --git a/src/components/RecentNotes.tsx b/src/components/RecentNotes.tsx index 9225238..67ad304 100644 --- a/src/components/RecentNotes.tsx +++ b/src/components/RecentNotes.tsx @@ -1,8 +1,9 @@ import type { QuartzComponent, QuartzComponentProps } from "@quartz-community/types"; +import { formatDate } from "@quartz-community/utils/date"; import { classNames } from "../util/lang"; import { i18n } from "../i18n"; import { resolveRelative } from "../util/path"; -import { getDate, formatDate } from "../util/date"; +import { getDate } from "../util/date"; import { byDateAndAlphabetical } from "../util/sort"; import style from "./styles/recentNotes.scss"; diff --git a/src/util/date.ts b/src/util/date.ts index e881600..bd4699a 100644 --- a/src/util/date.ts +++ b/src/util/date.ts @@ -16,11 +16,3 @@ export function getDate(cfg: GlobalConfiguration, data: QuartzPluginData): Date } return data.dates?.[cfg.defaultDateType]; } - -export function formatDate(d: Date, locale: string = "en-US"): string { - return d.toLocaleDateString(locale, { - year: "numeric", - month: "short", - day: "2-digit", - }); -} diff --git a/src/util/sort.ts b/src/util/sort.ts index cc74beb..0e4c898 100644 --- a/src/util/sort.ts +++ b/src/util/sort.ts @@ -1,3 +1,4 @@ +import type { SortFn } from "@quartz-community/types"; import { getDate } from "./date"; interface GlobalConfiguration { @@ -5,17 +6,6 @@ interface GlobalConfiguration { [key: string]: unknown; } -interface QuartzPluginData { - dates?: Record; - frontmatter?: { - title?: string; - [key: string]: unknown; - }; - [key: string]: unknown; -} - -export type SortFn = (f1: QuartzPluginData, f2: QuartzPluginData) => number; - export function byDateAndAlphabetical(cfg: GlobalConfiguration): SortFn { return (f1, f2) => { if (f1.dates && f2.dates) { @@ -26,8 +16,8 @@ export function byDateAndAlphabetical(cfg: GlobalConfiguration): SortFn { return 1; } - const f1Title = f1.frontmatter?.title?.toLowerCase() ?? ""; - const f2Title = f2.frontmatter?.title?.toLowerCase() ?? ""; + const f1Title = (f1.frontmatter as { title?: string } | undefined)?.title?.toLowerCase() ?? ""; + const f2Title = (f2.frontmatter as { title?: string } | undefined)?.title?.toLowerCase() ?? ""; return f1Title.localeCompare(f2Title); }; }