* 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>
		
			
				
	
	
		
			103 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
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](https://developer.mozilla.org/en-US/docs/Web/CSS/flex) that can arrange child components in various ways. It's particularly useful for creating responsive layouts and organizing components in rows or columns.
 | 
						|
 | 
						|
```typescript
 | 
						|
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
 | 
						|
 | 
						|
```typescript
 | 
						|
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 class `flex-component` that add the `display: flex` property. If you want to override this behavior, you can add a `display` property to the component's CSS class in your custom CSS file.
 | 
						|
>
 | 
						|
> ```scss
 | 
						|
> .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
 | 
						|
 | 
						|
```typescript
 | 
						|
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
 | 
						|
 | 
						|
```typescript
 | 
						|
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.
 | 
						|
 | 
						|
```typescript
 | 
						|
type ConditionalRenderConfig = {
 | 
						|
  component: QuartzComponent
 | 
						|
  condition: (props: QuartzComponentProps) => boolean
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
### Example Usage
 | 
						|
 | 
						|
```typescript
 | 
						|
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.
 | 
						|
 | 
						|
```typescript
 | 
						|
Component.ConditionalRender({
 | 
						|
  component: Component.Breadcrumbs(),
 | 
						|
  condition: (page) => page.fileData.slug !== "index",
 | 
						|
})
 | 
						|
```
 | 
						|
 | 
						|
The example above would hide breadcrumbs on the root `index.md` page.
 |