An article header
+Some content
+diff --git a/content/advanced/creating components.md b/content/advanced/creating components.md
index 0944eedd..6cdaed19 100644
--- a/content/advanced/creating components.md
+++ b/content/advanced/creating components.md
@@ -2,9 +2,129 @@
title: Creating your own Quartz components
---
-See the [component listing](/tags/component) for a full-list of the Quartz built-in components.
+> [!warning]
+> This guide assumes you have experience writing JavaScript and are familiar with TypeScript.
-- css
-- scripts
+Normally on the web, we write layout code using HTML which looks something like the following:
+
+```html
+ Some contentAn article header
+
My favourite number is {opts.favouriteNumber}
+ } + + return YourComponent +}) satisfies QuartzComponentConstructor +``` + +### Props +The Quartz component itself (lines 11-17 highlighted above) looks like a React component. It takes in properties (sometimes called [props](https://react.dev/learn/passing-props-to-a-component)) and returns JSX. + +All Quartz components accept the same set of props which are defined in `QuartzComponentProps`: + +```tsx title="quartz/components/types.ts" +// simplified for sake of demonstration +export type QuartzComponentProps = { + fileData: QuartzPluginData + cfg: GlobalConfiguration + tree: NodeExample Component
+ } + + YourComponent.css = ` + p { + color: red; + } + ` + + return YourComponent +}) satisfies QuartzComponentConstructor +``` + +Imported styles, however, can be from SCSS files. + +```tsx {1-2,9} title="quartz/components/YourComponent.tsx" +// assuming your stylesheet is in quartz/components/styles/YourComponent.scss +import styles from "./styles/YourComponent.scss" + +export default (() => { + function YourComponent() { + returnExample Component
+ } + + YourComponent.css = styles + return YourComponent +}) satisfies QuartzComponentConstructor +``` + +> [!warning] +> Quartz does not use CSS modules so any styles you declare here apply *globally*. If you only want it to apply to your component, make sure you use specific class names and selectors. +### Scripts and Interactivity - listening for the nav event - best practice: anything here should unmount any existing event handlers to prevent memory leaks + +### Using a Component +#### In a layout +#### In the configuration + + +> [!hint] +> Look in `quartz/components` for more examples of components in Quartz as reference for your own components! diff --git a/quartz/styles/base.scss b/quartz/styles/base.scss index 185582e8..5a6b5dbc 100644 --- a/quartz/styles/base.scss +++ b/quartz/styles/base.scss @@ -42,6 +42,7 @@ ul, hyphens: auto; } + .math { font-size: 1.1rem; &.math-display { @@ -108,6 +109,10 @@ a { margin-top: 0; margin-bottom: 0; } + + p > strong { + color: var(--dark); + } } & > #quartz-body { diff --git a/quartz/styles/callouts.scss b/quartz/styles/callouts.scss index d49443e8..f26f2cce 100644 --- a/quartz/styles/callouts.scss +++ b/quartz/styles/callouts.scss @@ -14,59 +14,59 @@ &[data-callout="note"] { --color: #448aff; - --border: #448aff22; - --bg: #448aff09; + --border: #448aff44; + --bg: #448aff10; } &[data-callout="abstract"] { --color: #00b0ff; - --border: #00b0ff22; - --bg: #00b0ff09; + --border: #00b0ff44; + --bg: #00b0ff10; } &[data-callout="info"], &[data-callout="todo"] { --color: #00b8d4; - --border: #00b8d422; - --bg: #00b8d409; + --border: #00b8d444; + --bg: #00b8d410; } &[data-callout="tip"] { --color: #00bfa5; - --border: #00bfa522; - --bg: #00bfa509; + --border: #00bfa544; + --bg: #00bfa510; } &[data-callout="success"] { --color: #09ad7a; - --border: #09ad7122; - --bg: #09ad7109; + --border: #09ad7144; + --bg: #09ad7110; } &[data-callout="question"] { --color: #dba642; - --border: #dba64222; - --bg: #dba64209; + --border: #dba64244; + --bg: #dba64210; } &[data-callout="warning"] { --color: #db8942; - --border: #db894222; - --bg: #db894209; + --border: #db894244; + --bg: #db894210; } &[data-callout="failure"], &[data-callout="danger"], &[data-callout="bug"] { --color: #db4242; - --border: #db424222; - --bg: #db424209; + --border: #db424244; + --bg: #db424210; } &[data-callout="example"] { --color: #7a43b5; - --border: #7a43b522; - --bg: #7a43b509; + --border: #7a43b544; + --bg: #7a43b510; } &[data-callout="quote"] {