* fix(flex): respect DesktopOnly and MobileOnly components * Use classNames util function * fix(ofm): allow wikilink alias to be empty (#1984) This is in line with Obsidian's behavior. * fix(style): Katex adding scrollbars on non-overflowing content (#1989) * feat(i18n): Bahasa Indonesia translations (#1981) * fix(a11y): increased content-meta text contrast (#1980) * fix(analytics): streamline posthog script loading and event capturing (#1974) * css: adjust color blend for search bg * feat(links): added ofm option to style unresolved or broken links differently (#1992) * feat: add option to disable broken wikilinks * fix(style): update hover color for broken links and introduce new class * feat: add "disableBrokenWikilinks" option to ObsidianFlavoredMarkdown * chore(deps): replace `chalk` and `rimraf` with builtin functions (#1879) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore(deps): bump the production-dependencies group across 1 directory with 9 updates (#1996) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Node 22 (#1997) * docs: showcase housekeeping * docs: fix explorernode references (closes #1985) * fix: tz-less date parse in local tz instead of utc (closes #1615) * docs: added note to not forget to add https:// to the plausible-host (for #1337) (#2000) * docs: added note to not forget to add https:// to the plausible-host (for #1337) * Update docs/configuration.md --------- Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * Updated documentation --------- Co-authored-by: Nizav <106657905+Ni-zav@users.noreply.github.com> Co-authored-by: Aswanth <aswanth366@gmail.com> Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> Co-authored-by: Keisuke ANDO <g.kei0429@gmail.com> Co-authored-by: fl0werpowers <47599466+fl0werpowers@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sebastian Moser <64004956+c2vi@users.noreply.github.com>
3.3 KiB
title
title |
---|
Higher-Order Layout Components |
Quartz provides several higher-order components that help with layout composition and responsive design. These components wrap other components to add additional functionality or modify their behavior.
Flex
Component
The Flex
component creates a flexible box layout that can arrange child components in various ways. It's particularly useful for creating responsive layouts and organizing components in rows or columns.
type FlexConfig = {
components: {
Component: QuartzComponent
grow?: boolean // whether component should grow to fill space
shrink?: boolean // whether component should shrink if needed
basis?: string // initial main size of the component
order?: number // order in flex container
align?: "start" | "end" | "center" | "stretch" // cross-axis alignment
justify?: "start" | "end" | "center" | "between" | "around" // main-axis alignment
}[]
direction?: "row" | "row-reverse" | "column" | "column-reverse"
wrap?: "nowrap" | "wrap" | "wrap-reverse"
gap?: string
}
Example Usage
Component.Flex({
components: [
{
Component: Component.Search(),
grow: true, // Search will grow to fill available space
},
{ Component: Component.Darkmode() }, // Darkmode keeps its natural size
],
direction: "row",
gap: "1rem",
})
[!note] Overriding behavior Components inside
Flex
get an additional CSS classflex-component
that add thedisplay: flex
property. If you want to override this behavior, you can add adisplay
property to the component's CSS class in your custom CSS file..flex-component { display: block; // or any other display type }
MobileOnly
Component
The MobileOnly
component is a wrapper that makes its child component only visible on mobile devices. This is useful for creating responsive layouts where certain components should only appear on smaller screens.
Example Usage
Component.MobileOnly(Component.Spacer())
DesktopOnly
Component
The DesktopOnly
component is the counterpart to MobileOnly
. It makes its child component only visible on desktop devices. This helps create responsive layouts where certain components should only appear on larger screens.
Example Usage
Component.DesktopOnly(Component.TableOfContents())
ConditionalRender
Component
The ConditionalRender
component is a wrapper that conditionally renders its child component based on a provided condition function. This is useful for creating dynamic layouts where components should only appear under certain conditions.
type ConditionalRenderConfig = {
component: QuartzComponent
condition: (props: QuartzComponentProps) => boolean
}
Example Usage
Component.ConditionalRender({
component: Component.Search(),
condition: (props) => props.displayClass !== "fullpage",
})
The example above would only render the Search component when the page is not in fullpage mode.
Component.ConditionalRender({
component: Component.Breadcrumbs(),
condition: (page) => page.fileData.slug !== "index",
})
The example above would hide breadcrumbs on the root index.md
page.