Compare commits

...

10 Commits

Author SHA1 Message Date
dependabot[bot]
b4805a1031 chore(deps): bump the production-dependencies group with 3 updates (#2159)
Some checks failed
Build and Test / build-and-test (macos-latest) (push) Has been cancelled
Build and Test / build-and-test (ubuntu-latest) (push) Has been cancelled
Build and Test / build-and-test (windows-latest) (push) Has been cancelled
Build and Test / publish-tag (push) Has been cancelled
Docker build & push image / build (push) Has been cancelled
Bumps the production-dependencies group with 3 updates: [preact-render-to-string](https://github.com/preactjs/preact-render-to-string), [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) and [typescript](https://github.com/microsoft/TypeScript).


Updates `preact-render-to-string` from 6.6.1 to 6.6.2
- [Release notes](https://github.com/preactjs/preact-render-to-string/releases)
- [Changelog](https://github.com/preactjs/preact-render-to-string/blob/main/CHANGELOG.md)
- [Commits](https://github.com/preactjs/preact-render-to-string/compare/v6.6.1...v6.6.2)

Updates `@types/node` from 24.6.0 to 24.7.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `typescript` from 5.9.2 to 5.9.3
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.9.2...v5.9.3)

---
updated-dependencies:
- dependency-name: preact-render-to-string
  dependency-version: 6.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@types/node"
  dependency-version: 24.7.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: typescript
  dependency-version: 5.9.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-06 13:16:57 -07:00
martyone
f14260b2ba fix(oxhugo): Do not discard embedded HTML (#2151)
In 'processors/parse.ts' the 'remarkRehype' plugin is used with
'allowDangerousHtml' enabled, but that needs to be combined with (e.g.)
'rehypeRaw' to have any effect on the output.
2025-10-02 10:51:40 -07:00
dependabot[bot]
9ad3481da6 chore(deps): bump the production-dependencies group with 4 updates (#2146)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-29 22:41:50 -04:00
dependabot[bot]
3ff7ca4155 chore(deps): bump sigstore/cosign-installer in the ci-dependencies group (#2135)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-28 16:45:18 -04:00
dependabot[bot]
eb6cc6ff8e chore(deps): bump the production-dependencies group with 9 updates (#2134)
Bumps the production-dependencies group with 9 updates:

| Package | From | To |
| --- | --- | --- |
| [is-absolute-url](https://github.com/sindresorhus/is-absolute-url) | `4.0.1` | `5.0.0` |
| [pixi.js](https://github.com/pixijs/pixijs) | `8.13.1` | `8.13.2` |
| [preact](https://github.com/preactjs/preact) | `10.27.1` | `10.27.2` |
| [pretty-bytes](https://github.com/sindresorhus/pretty-bytes) | `7.0.1` | `7.1.0` |
| [satori](https://github.com/vercel/satori) | `0.18.2` | `0.18.3` |
| [sharp](https://github.com/lovell/sharp) | `0.34.3` | `0.34.4` |
| [workerpool](https://github.com/josdejong/workerpool) | `9.3.3` | `9.3.4` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `24.3.1` | `24.5.2` |
| [esbuild](https://github.com/evanw/esbuild) | `0.25.9` | `0.25.10` |


Updates `is-absolute-url` from 4.0.1 to 5.0.0
- [Release notes](https://github.com/sindresorhus/is-absolute-url/releases)
- [Commits](https://github.com/sindresorhus/is-absolute-url/compare/v4.0.1...v5.0.0)

Updates `pixi.js` from 8.13.1 to 8.13.2
- [Release notes](https://github.com/pixijs/pixijs/releases)
- [Commits](https://github.com/pixijs/pixijs/compare/v8.13.1...v8.13.2)

Updates `preact` from 10.27.1 to 10.27.2
- [Release notes](https://github.com/preactjs/preact/releases)
- [Commits](https://github.com/preactjs/preact/compare/10.27.1...10.27.2)

Updates `pretty-bytes` from 7.0.1 to 7.1.0
- [Release notes](https://github.com/sindresorhus/pretty-bytes/releases)
- [Commits](https://github.com/sindresorhus/pretty-bytes/compare/v7.0.1...v7.1.0)

Updates `satori` from 0.18.2 to 0.18.3
- [Release notes](https://github.com/vercel/satori/releases)
- [Commits](https://github.com/vercel/satori/compare/0.18.2...0.18.3)

Updates `sharp` from 0.34.3 to 0.34.4
- [Release notes](https://github.com/lovell/sharp/releases)
- [Commits](https://github.com/lovell/sharp/compare/v0.34.3...v0.34.4)

Updates `workerpool` from 9.3.3 to 9.3.4
- [Changelog](https://github.com/josdejong/workerpool/blob/master/HISTORY.md)
- [Commits](https://github.com/josdejong/workerpool/commits)

Updates `@types/node` from 24.3.1 to 24.5.2
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `esbuild` from 0.25.9 to 0.25.10
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.25.9...v0.25.10)

---
updated-dependencies:
- dependency-name: is-absolute-url
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: production-dependencies
- dependency-name: pixi.js
  dependency-version: 8.13.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: preact
  dependency-version: 10.27.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: pretty-bytes
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: satori
  dependency-version: 0.18.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: sharp
  dependency-version: 0.34.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: workerpool
  dependency-version: 9.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@types/node"
  dependency-version: 24.5.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: esbuild
  dependency-version: 0.25.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-22 13:11:44 -07:00
Emile Bangma
4923affa77 fix(callouts)!: match callout DOM to Obsidian (#2104)
* fix(callouts): match callout DOM to Obsidian

* use new transition curve for all callout transitions

* chore!: bump version to 4.5.2
2025-09-21 19:14:03 +02:00
Jacky Zhao
4c78d29c13 fix(search): css min padding 2025-09-18 13:45:17 -07:00
Amir Pourmand
7a77f54e50 fix(i18n): Add RTL Detection based on Config Set Language (#2100)
* Add rtl automatic detection to base.scss

* Implement RTL support for Arabic and Persian locales and update HTML direction attribute in renderPage component

* Update HTML direction attribute in renderPage component to prioritize frontmatter dir value

* Refactor renderPage component to simplify HTML direction attribute assignment by removing frontmatter dir fallback
2025-09-17 16:04:22 -07:00
Amir Pourmand
03ccac2872 feat: Update FlexSearch and Add Support for All Languages (#2108)
* chore(deps): update flexsearch to version 0.8.205 and adjust search encoder.

* refactor(search): enhance search encoder and update search results type

- Improved the encoder function to filter out empty tokens.
- Updated the search results type from a specific FlexSearch type to a more generic 'any' type for flexibility.
- Removed redundant rtl property from the index configuration.

* refactor(search): remove rtl property from search index configuration

* refactor(search): improve encoder function formatting

- Updated the encoder function to use consistent arrow function syntax for better readability.

* refactor(search): update search results type to DefaultDocumentSearchResults

- Imported DefaultDocumentSearchResults from FlexSearch for improved type safety.
- Changed the type of searchResults from 'any' to DefaultDocumentSearchResults<Item> for better clarity and maintainability.
2025-09-17 15:39:30 -07:00
Jacky Zhao
6add0c837e fix(style): layout flow, search restyle 2025-09-17 15:26:49 -07:00
14 changed files with 451 additions and 441 deletions

View File

@@ -37,7 +37,7 @@ jobs:
network=host network=host
- name: Install cosign - name: Install cosign
if: github.event_name != 'pull_request' if: github.event_name != 'pull_request'
uses: sigstore/cosign-installer@v3.9.2 uses: sigstore/cosign-installer@v3.10.0
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@v3 uses: docker/login-action@v3
if: github.event_name != 'pull_request' if: github.event_name != 'pull_request'

760
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
"name": "@jackyzha0/quartz", "name": "@jackyzha0/quartz",
"description": "🌱 publish your digital garden and notes as a website", "description": "🌱 publish your digital garden and notes as a website",
"private": true, "private": true,
"version": "4.5.1", "version": "4.5.2",
"type": "module", "type": "module",
"author": "jackyzha0 <j.zhao2k19@gmail.com>", "author": "jackyzha0 <j.zhao2k19@gmail.com>",
"license": "MIT", "license": "MIT",
@@ -46,25 +46,25 @@
"cli-spinner": "^0.2.10", "cli-spinner": "^0.2.10",
"d3": "^7.9.0", "d3": "^7.9.0",
"esbuild-sass-plugin": "^3.3.1", "esbuild-sass-plugin": "^3.3.1",
"flexsearch": "0.7.43", "flexsearch": "^0.8.205",
"github-slugger": "^2.0.0", "github-slugger": "^2.0.0",
"globby": "^14.1.0", "globby": "^15.0.0",
"gray-matter": "^4.0.3", "gray-matter": "^4.0.3",
"hast-util-to-html": "^9.0.5", "hast-util-to-html": "^9.0.5",
"hast-util-to-jsx-runtime": "^2.3.6", "hast-util-to-jsx-runtime": "^2.3.6",
"hast-util-to-string": "^3.0.1", "hast-util-to-string": "^3.0.1",
"is-absolute-url": "^4.0.1", "is-absolute-url": "^5.0.0",
"js-yaml": "^4.1.0", "js-yaml": "^4.1.0",
"lightningcss": "^1.30.1", "lightningcss": "^1.30.2",
"mdast-util-find-and-replace": "^3.0.2", "mdast-util-find-and-replace": "^3.0.2",
"mdast-util-to-hast": "^13.2.0", "mdast-util-to-hast": "^13.2.0",
"mdast-util-to-string": "^4.0.0", "mdast-util-to-string": "^4.0.0",
"micromorph": "^0.4.5", "micromorph": "^0.4.5",
"minimatch": "^10.0.3", "minimatch": "^10.0.3",
"pixi.js": "^8.13.1", "pixi.js": "^8.13.2",
"preact": "^10.27.1", "preact": "^10.27.2",
"preact-render-to-string": "^6.6.1", "preact-render-to-string": "^6.6.2",
"pretty-bytes": "^7.0.1", "pretty-bytes": "^7.1.0",
"pretty-time": "^1.1.0", "pretty-time": "^1.1.0",
"reading-time": "^1.5.0", "reading-time": "^1.5.0",
"rehype-autolink-headings": "^7.1.0", "rehype-autolink-headings": "^7.1.0",
@@ -83,9 +83,9 @@
"remark-rehype": "^11.1.2", "remark-rehype": "^11.1.2",
"remark-smartypants": "^3.0.2", "remark-smartypants": "^3.0.2",
"rfdc": "^1.4.1", "rfdc": "^1.4.1",
"satori": "^0.18.2", "satori": "^0.18.3",
"serve-handler": "^6.1.6", "serve-handler": "^6.1.6",
"sharp": "^0.34.3", "sharp": "^0.34.4",
"shiki": "^1.26.2", "shiki": "^1.26.2",
"source-map-support": "^0.5.21", "source-map-support": "^0.5.21",
"to-vfile": "^8.0.0", "to-vfile": "^8.0.0",
@@ -93,7 +93,7 @@
"unified": "^11.0.5", "unified": "^11.0.5",
"unist-util-visit": "^5.0.0", "unist-util-visit": "^5.0.0",
"vfile": "^6.0.3", "vfile": "^6.0.3",
"workerpool": "^9.3.3", "workerpool": "^9.3.4",
"ws": "^8.18.3", "ws": "^8.18.3",
"yargs": "^18.0.0" "yargs": "^18.0.0"
}, },
@@ -101,14 +101,14 @@
"@types/d3": "^7.4.3", "@types/d3": "^7.4.3",
"@types/hast": "^3.0.4", "@types/hast": "^3.0.4",
"@types/js-yaml": "^4.0.9", "@types/js-yaml": "^4.0.9",
"@types/node": "^24.3.1", "@types/node": "^24.7.0",
"@types/pretty-time": "^1.1.5", "@types/pretty-time": "^1.1.5",
"@types/source-map-support": "^0.5.10", "@types/source-map-support": "^0.5.10",
"@types/ws": "^8.18.1", "@types/ws": "^8.18.1",
"@types/yargs": "^17.0.33", "@types/yargs": "^17.0.33",
"esbuild": "^0.25.9", "esbuild": "^0.25.10",
"prettier": "^3.6.2", "prettier": "^3.6.2",
"tsx": "^4.20.5", "tsx": "^4.20.6",
"typescript": "^5.9.2" "typescript": "^5.9.3"
} }
} }

View File

@@ -20,7 +20,6 @@ export default ((userOpts?: Partial<SearchOptions>) => {
return ( return (
<div class={classNames(displayClass, "search")}> <div class={classNames(displayClass, "search")}>
<button class="search-button"> <button class="search-button">
<p>{i18n(cfg.locale).components.search.title}</p>
<svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7">
<title>Search</title> <title>Search</title>
<g class="search-path" fill="none"> <g class="search-path" fill="none">
@@ -28,6 +27,7 @@ export default ((userOpts?: Partial<SearchOptions>) => {
<circle cx="8" cy="8" r="7" /> <circle cx="8" cy="8" r="7" />
</g> </g>
</svg> </svg>
<p>{i18n(cfg.locale).components.search.title}</p>
</button> </button>
<div class="search-container"> <div class="search-container">
<div class="search-space"> <div class="search-space">

View File

@@ -231,8 +231,9 @@ export function renderPage(
) )
const lang = componentData.fileData.frontmatter?.lang ?? cfg.locale?.split("-")[0] ?? "en" const lang = componentData.fileData.frontmatter?.lang ?? cfg.locale?.split("-")[0] ?? "en"
const direction = i18n(cfg.locale).direction ?? "ltr"
const doc = ( const doc = (
<html lang={lang}> <html lang={lang} dir={direction}>
<Head {...componentData} /> <Head {...componentData} />
<body data-slug={slug}> <body data-slug={slug}>
<div id="quartz-root" class="page"> <div id="quartz-root" class="page">

View File

@@ -1,4 +1,4 @@
import FlexSearch from "flexsearch" import FlexSearch, { DefaultDocumentSearchResults } from "flexsearch"
import { ContentDetails } from "../../plugins/emitters/contentIndex" import { ContentDetails } from "../../plugins/emitters/contentIndex"
import { registerEscapeHandler, removeAllChildren } from "./util" import { registerEscapeHandler, removeAllChildren } from "./util"
import { FullSlug, normalizeRelativeURLs, resolveRelative } from "../../util/path" import { FullSlug, normalizeRelativeURLs, resolveRelative } from "../../util/path"
@@ -9,15 +9,21 @@ interface Item {
title: string title: string
content: string content: string
tags: string[] tags: string[]
[key: string]: any
} }
// Can be expanded with things like "term" in the future // Can be expanded with things like "term" in the future
type SearchType = "basic" | "tags" type SearchType = "basic" | "tags"
let searchType: SearchType = "basic" let searchType: SearchType = "basic"
let currentSearchTerm: string = "" let currentSearchTerm: string = ""
const encoder = (str: string) => str.toLowerCase().split(/([^a-z]|[^\x00-\x7F])/) const encoder = (str: string) => {
return str
.toLowerCase()
.split(/\s+/)
.filter((token) => token.length > 0)
}
let index = new FlexSearch.Document<Item>({ let index = new FlexSearch.Document<Item>({
charset: "latin:extra",
encode: encoder, encode: encoder,
document: { document: {
id: "id", id: "id",
@@ -397,7 +403,7 @@ async function setupSearch(searchElement: Element, currentSlug: FullSlug, data:
searchLayout.classList.toggle("display-results", currentSearchTerm !== "") searchLayout.classList.toggle("display-results", currentSearchTerm !== "")
searchType = currentSearchTerm.startsWith("#") ? "tags" : "basic" searchType = currentSearchTerm.startsWith("#") ? "tags" : "basic"
let searchResults: FlexSearch.SimpleDocumentSearchResultSetUnit[] let searchResults: DefaultDocumentSearchResults<Item>
if (searchType === "tags") { if (searchType === "tags") {
currentSearchTerm = currentSearchTerm.substring(1).trim() currentSearchTerm = currentSearchTerm.substring(1).trim()
const separatorIndex = currentSearchTerm.indexOf(" ") const separatorIndex = currentSearchTerm.indexOf(" ")
@@ -410,7 +416,7 @@ async function setupSearch(searchElement: Element, currentSlug: FullSlug, data:
// return at least 10000 documents, so it is enough to filter them by tag (implemented in flexsearch) // return at least 10000 documents, so it is enough to filter them by tag (implemented in flexsearch)
limit: Math.max(numSearchResults, 10000), limit: Math.max(numSearchResults, 10000),
index: ["title", "content"], index: ["title", "content"],
tag: tag, tag: { tags: tag },
}) })
for (let searchResult of searchResults) { for (let searchResult of searchResults) {
searchResult.result = searchResult.result.slice(0, numSearchResults) searchResult.result = searchResult.result.slice(0, numSearchResults)

View File

@@ -8,24 +8,23 @@
} }
& > .search-button { & > .search-button {
background-color: color-mix(in srgb, var(--lightgray) 60%, var(--light)); background-color: transparent;
border: none; border: 1px var(--lightgray) solid;
border-radius: 4px; border-radius: 4px;
font-family: inherit; font-family: inherit;
font-size: inherit; font-size: inherit;
height: 2rem; height: 2rem;
padding: 0; padding: 0 1rem 0 0;
display: flex; display: flex;
align-items: center; align-items: center;
text-align: inherit; text-align: inherit;
cursor: pointer; cursor: pointer;
white-space: nowrap; white-space: nowrap;
width: 100%; width: 100%;
justify-content: space-between;
& > p { & > p {
display: inline; display: inline;
padding: 0 1rem; color: var(--gray);
} }
& svg { & svg {
@@ -36,7 +35,7 @@
.search-path { .search-path {
stroke: var(--darkgray); stroke: var(--darkgray);
stroke-width: 2px; stroke-width: 1.5px;
transition: stroke 0.5s ease; transition: stroke 0.5s ease;
} }
} }

View File

@@ -5,6 +5,7 @@ export default {
title: "غير معنون", title: "غير معنون",
description: "لم يتم تقديم أي وصف", description: "لم يتم تقديم أي وصف",
}, },
direction: "rtl" as const,
components: { components: {
callout: { callout: {
note: "ملاحظة", note: "ملاحظة",

View File

@@ -21,6 +21,7 @@ export interface Translation {
title: string title: string
description: string description: string
} }
direction?: "ltr" | "rtl"
components: { components: {
callout: CalloutTranslation callout: CalloutTranslation
backlinks: { backlinks: {

View File

@@ -5,6 +5,7 @@ export default {
title: "بدون عنوان", title: "بدون عنوان",
description: "توضیح خاصی اضافه نشده است", description: "توضیح خاصی اضافه نشده است",
}, },
direction: "rtl" as const,
components: { components: {
callout: { callout: {
note: "یادداشت", note: "یادداشت",

View File

@@ -488,16 +488,7 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options>>
{ {
data: { hProperties: { className: ["callout-content"] }, hName: "div" }, data: { hProperties: { className: ["callout-content"] }, hName: "div" },
type: "blockquote", type: "blockquote",
children: [ children: [...calloutContent],
{
data: {
hProperties: { className: ["callout-content-inner"] },
hName: "div",
},
type: "blockquote",
children: [...calloutContent],
},
],
}, },
] ]
} }

View File

@@ -1,4 +1,6 @@
import { QuartzTransformerPlugin } from "../types" import { QuartzTransformerPlugin } from "../types"
import rehypeRaw from "rehype-raw"
import { PluggableList } from "unified"
export interface Options { export interface Options {
/** Replace {{ relref }} with quartz wikilinks []() */ /** Replace {{ relref }} with quartz wikilinks []() */
@@ -102,5 +104,9 @@ export const OxHugoFlavouredMarkdown: QuartzTransformerPlugin<Partial<Options>>
} }
return src return src
}, },
htmlPlugins() {
const plugins: PluggableList = [rehypeRaw]
return plugins
},
} }
} }

View File

@@ -44,22 +44,8 @@ ul,
.typst-doc * { .typst-doc * {
color: var(--darkgray); color: var(--darkgray);
fill: var(--darkgray); fill: var(--darkgray);
hyphens: auto; overflow-wrap: break-word;
} text-wrap: pretty;
p,
ul,
text,
a,
li,
ol,
ul,
.katex,
.math,
.typst-doc,
.typst-doc * {
overflow-wrap: anywhere;
/* tr and td removed from list of selectors for overflow-wrap, allowing them to use default 'normal' property value */
} }
.math { .math {
@@ -225,7 +211,7 @@ a {
} }
& .sidebar { & .sidebar {
gap: 2rem; gap: 1.2rem;
top: 0; top: 0;
box-sizing: border-box; box-sizing: border-box;
padding: $topSpacing 2rem 2rem 2rem; padding: $topSpacing 2rem 2rem 2rem;

View File

@@ -11,14 +11,11 @@
& > .callout-content { & > .callout-content {
display: grid; display: grid;
transition: grid-template-rows 0.3s ease; transition: grid-template-rows 0.1s cubic-bezier(0.02, 0.01, 0.47, 1);
overflow: hidden;
& > .callout-content-inner { & > :first-child {
overflow: hidden; margin-top: 0;
& > :first-child {
margin-top: 0;
}
} }
} }
@@ -121,8 +118,19 @@
--callout-icon: var(--callout-icon-quote); --callout-icon: var(--callout-icon-quote);
} }
&.is-collapsed > .callout-title > .fold-callout-icon { &.is-collapsed {
transform: rotateZ(-90deg); & > .callout-title > .fold-callout-icon {
transform: rotateZ(-90deg);
}
.callout-content > :first-child {
transition:
height 0.1s cubic-bezier(0.02, 0.01, 0.47, 1),
margin 0.1s cubic-bezier(0.02, 0.01, 0.47, 1);
overflow-y: clip;
height: 0;
margin-top: -1rem;
}
} }
} }