chore(types): add additional hint for LSP support (#864)
Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com>
| | |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { classNames } from "../util/lang" |
| | | |
| | | function ArticleTitle({ fileData, displayClass }: QuartzComponentProps) { |
| | | const ArticleTitle: QuartzComponent = ({ fileData, displayClass }: QuartzComponentProps) => { |
| | | const title = fileData.frontmatter?.title |
| | | if (title) { |
| | | return <h1 class={classNames(displayClass, "article-title")}>{title}</h1> |
| | |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import style from "./styles/backlinks.scss" |
| | | import { resolveRelative, simplifySlug } from "../util/path" |
| | | import { i18n } from "../i18n" |
| | | import { classNames } from "../util/lang" |
| | | |
| | | function Backlinks({ fileData, allFiles, displayClass, cfg }: QuartzComponentProps) { |
| | | const Backlinks: QuartzComponent = ({ |
| | | fileData, |
| | | allFiles, |
| | | displayClass, |
| | | cfg, |
| | | }: QuartzComponentProps) => { |
| | | const slug = simplifySlug(fileData.slug!) |
| | | const backlinkFiles = allFiles.filter((file) => file.links?.includes(slug)) |
| | | return ( |
| | |
| | | // @ts-ignore |
| | | import clipboardScript from "./scripts/clipboard.inline" |
| | | import clipboardStyle from "./styles/clipboard.scss" |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | |
| | | function Body({ children }: QuartzComponentProps) { |
| | | const Body: QuartzComponent = ({ children }: QuartzComponentProps) => { |
| | | return <div id="quartz-body">{children}</div> |
| | | } |
| | | |
| | |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import breadcrumbsStyle from "./styles/breadcrumbs.scss" |
| | | import { FullSlug, SimpleSlug, resolveRelative } from "../util/path" |
| | | import { QuartzPluginData } from "../plugins/vfile" |
| | |
| | | // computed index of folder name to its associated file data |
| | | let folderIndex: Map<string, QuartzPluginData> | undefined |
| | | |
| | | function Breadcrumbs({ fileData, allFiles, displayClass }: QuartzComponentProps) { |
| | | const Breadcrumbs: QuartzComponent = ({ |
| | | fileData, |
| | | allFiles, |
| | | displayClass, |
| | | }: QuartzComponentProps) => { |
| | | // Hide crumbs on root if enabled |
| | | if (options.hideOnRoot && fileData.slug === "index") { |
| | | return <></> |
| | |
| | | ) |
| | | } |
| | | Breadcrumbs.css = breadcrumbsStyle |
| | | |
| | | return Breadcrumbs |
| | | }) satisfies QuartzComponentConstructor |
| | |
| | | // see: https://v8.dev/features/modules#defer |
| | | import darkmodeScript from "./scripts/darkmode.inline" |
| | | import styles from "./styles/darkmode.scss" |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { i18n } from "../i18n" |
| | | import { classNames } from "../util/lang" |
| | | |
| | | function Darkmode({ displayClass, cfg }: QuartzComponentProps) { |
| | | const Darkmode: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => { |
| | | return ( |
| | | <div class={classNames(displayClass, "darkmode")}> |
| | | <input class="toggle" id="darkmode-toggle" type="checkbox" tabIndex={-1} /> |
| | |
| | | export default ((component?: QuartzComponent) => { |
| | | if (component) { |
| | | const Component = component |
| | | function DesktopOnly(props: QuartzComponentProps) { |
| | | const DesktopOnly: QuartzComponent = (props: QuartzComponentProps) => { |
| | | return <Component displayClass="desktop-only" {...props} /> |
| | | } |
| | | |
| | |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import explorerStyle from "./styles/explorer.scss" |
| | | |
| | | // @ts-ignore |
| | |
| | | jsonTree = JSON.stringify(folders) |
| | | } |
| | | |
| | | function Explorer({ cfg, allFiles, displayClass, fileData }: QuartzComponentProps) { |
| | | const Explorer: QuartzComponent = ({ |
| | | cfg, |
| | | allFiles, |
| | | displayClass, |
| | | fileData, |
| | | }: QuartzComponentProps) => { |
| | | constructFileTree(allFiles) |
| | | return ( |
| | | <div class={classNames(displayClass, "explorer")}> |
| | |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import style from "./styles/footer.scss" |
| | | import { version } from "../../package.json" |
| | | import { i18n } from "../i18n" |
| | |
| | | } |
| | | |
| | | export default ((opts?: Options) => { |
| | | function Footer({ displayClass, cfg }: QuartzComponentProps) { |
| | | const Footer: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => { |
| | | const year = new Date().getFullYear() |
| | | const links = opts?.links ?? [] |
| | | return ( |
| | |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | // @ts-ignore |
| | | import script from "./scripts/graph.inline" |
| | | import style from "./styles/graph.scss" |
| | |
| | | } |
| | | |
| | | export default ((opts?: GraphOptions) => { |
| | | function Graph({ displayClass, cfg }: QuartzComponentProps) { |
| | | const Graph: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => { |
| | | const localGraph = { ...defaultOptions.localGraph, ...opts?.localGraph } |
| | | const globalGraph = { ...defaultOptions.globalGraph, ...opts?.globalGraph } |
| | | return ( |
| | |
| | | import { i18n } from "../i18n" |
| | | import { FullSlug, joinSegments, pathToRoot } from "../util/path" |
| | | import { JSResourceToScriptElement } from "../util/resources" |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | |
| | | export default (() => { |
| | | function Head({ cfg, fileData, externalResources }: QuartzComponentProps) { |
| | | const Head: QuartzComponent = ({ cfg, fileData, externalResources }: QuartzComponentProps) => { |
| | | const title = fileData.frontmatter?.title ?? i18n(cfg.locale).propertyDefaults.title |
| | | const description = |
| | | fileData.description?.trim() ?? i18n(cfg.locale).propertyDefaults.description |
| | |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | |
| | | function Header({ children }: QuartzComponentProps) { |
| | | const Header: QuartzComponent = ({ children }: QuartzComponentProps) => { |
| | | return children.length > 0 ? <header>{children}</header> : null |
| | | } |
| | | |
| | |
| | | export default ((component?: QuartzComponent) => { |
| | | if (component) { |
| | | const Component = component |
| | | function MobileOnly(props: QuartzComponentProps) { |
| | | const MobileOnly: QuartzComponent = (props: QuartzComponentProps) => { |
| | | return <Component displayClass="mobile-only" {...props} /> |
| | | } |
| | | |
| | |
| | | import { FullSlug, resolveRelative } from "../util/path" |
| | | import { QuartzPluginData } from "../plugins/vfile" |
| | | import { Date, getDate } from "./Date" |
| | | import { QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentProps } from "./types" |
| | | import { GlobalConfiguration } from "../cfg" |
| | | |
| | | export function byDateAndAlphabetical( |
| | |
| | | limit?: number |
| | | } & QuartzComponentProps |
| | | |
| | | export function PageList({ cfg, fileData, allFiles, limit }: Props) { |
| | | export const PageList: QuartzComponent = ({ cfg, fileData, allFiles, limit }: Props) => { |
| | | let list = allFiles.sort(byDateAndAlphabetical(cfg)) |
| | | if (limit) { |
| | | list = list.slice(0, limit) |
| | |
| | | import { pathToRoot } from "../util/path" |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { classNames } from "../util/lang" |
| | | import { i18n } from "../i18n" |
| | | |
| | | function PageTitle({ fileData, cfg, displayClass }: QuartzComponentProps) { |
| | | const PageTitle: QuartzComponent = ({ fileData, cfg, displayClass }: QuartzComponentProps) => { |
| | | const title = cfg?.pageTitle ?? i18n(cfg.locale).propertyDefaults.title |
| | | const baseDir = pathToRoot(fileData.slug!) |
| | | return ( |
| | |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { FullSlug, SimpleSlug, resolveRelative } from "../util/path" |
| | | import { QuartzPluginData } from "../plugins/vfile" |
| | | import { byDateAndAlphabetical } from "./PageList" |
| | |
| | | }) |
| | | |
| | | export default ((userOpts?: Partial<Options>) => { |
| | | function RecentNotes({ allFiles, fileData, displayClass, cfg }: QuartzComponentProps) { |
| | | const RecentNotes: QuartzComponent = ({ |
| | | 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) |
| | |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import style from "./styles/search.scss" |
| | | // @ts-ignore |
| | | import script from "./scripts/search.inline" |
| | |
| | | } |
| | | |
| | | export default ((userOpts?: Partial<SearchOptions>) => { |
| | | function Search({ displayClass, cfg }: QuartzComponentProps) { |
| | | const Search: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => { |
| | | const opts = { ...defaultOptions, ...userOpts } |
| | | const searchPlaceholder = i18n(cfg.locale).components.search.searchBarPlaceholder |
| | | return ( |
| | |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import legacyStyle from "./styles/legacyToc.scss" |
| | | import modernStyle from "./styles/toc.scss" |
| | | import { classNames } from "../util/lang" |
| | |
| | | layout: "modern", |
| | | } |
| | | |
| | | function TableOfContents({ fileData, displayClass, cfg }: QuartzComponentProps) { |
| | | const TableOfContents: QuartzComponent = ({ |
| | | fileData, |
| | | displayClass, |
| | | cfg, |
| | | }: QuartzComponentProps) => { |
| | | if (!fileData.toc) { |
| | | return null |
| | | } |
| | |
| | | TableOfContents.css = modernStyle |
| | | TableOfContents.afterDOMLoaded = script |
| | | |
| | | function LegacyTableOfContents({ fileData, cfg }: QuartzComponentProps) { |
| | | const LegacyTableOfContents: QuartzComponent = ({ fileData, cfg }: QuartzComponentProps) => { |
| | | if (!fileData.toc) { |
| | | return null |
| | | } |
| | |
| | | import { pathToRoot, slugTag } from "../util/path" |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { classNames } from "../util/lang" |
| | | |
| | | function TagList({ fileData, displayClass }: QuartzComponentProps) { |
| | | const TagList: QuartzComponent = ({ fileData, displayClass }: QuartzComponentProps) => { |
| | | const tags = fileData.frontmatter?.tags |
| | | const baseDir = pathToRoot(fileData.slug!) |
| | | if (tags && tags.length > 0) { |