diff --git a/.gitignore b/.gitignore index 1fd114d7..3e07a14d 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,7 @@ node_modules # vitepress .vitepress/cache/ /cache/ + +# Local preview and design files +/.impeccable.md +/docs/zh/markdown-style-preview.md diff --git a/.vitepress/theme/components/DocHeader.vue b/.vitepress/theme/components/DocHeader.vue index 04b83802..b3d598b4 100644 --- a/.vitepress/theme/components/DocHeader.vue +++ b/.vitepress/theme/components/DocHeader.vue @@ -13,15 +13,18 @@ DeepFlow - +
+
- +
+
.item { + width: calc(100% + 8px); + margin-left: -8px; + padding-left: 8px; +} + +.Layout:has(.VPDoc) .VPSidebar .VPSidebarItem.level-1.is-link > .item:hover { + border-radius: 4px; + background-color: var(--df-md-fill-3); +} + +.Layout:has(.VPDoc) .VPDoc { + --vp-c-brand-1: var(--df-md-primary-link); + --vp-c-brand-2: var(--df-md-primary-hover); +} + +.Layout:has(.VPDoc) .vp-doc { + --vp-code-font-size: 1em; + --vp-code-color: var(--df-md-text-1); + --vp-code-bg: var(--df-md-fill-1); + --vp-code-block-bg: var(--df-md-bg-2); + --vp-code-block-divider-color: var(--df-md-border-2); + --vp-code-tab-bg: var(--df-md-fill-1); + --vp-code-tab-divider: var(--df-md-border-1); + --vp-code-tab-text-color: var(--df-md-text-3); + --vp-code-tab-hover-text-color: var(--df-md-text-1); + --vp-code-tab-active-text-color: var(--df-md-text-1); + --vp-code-tab-active-bar-color: var(--df-md-primary-6); + --vp-code-copy-code-border-color: var(--df-md-border-2); + --vp-code-copy-code-bg: var(--df-md-fill-1); + --vp-code-copy-code-hover-border-color: var(--df-md-primary-6); + --vp-code-copy-code-hover-bg: var(--df-md-fill-2); + color: var(--df-md-text-2); + font-family: "PingFang SC", "Microsoft YaHei", system-ui, -apple-system, BlinkMacSystemFont, sans-serif; + font-size: 16px; + line-height: 1.7; + overflow-wrap: break-word; +} + +.Layout:has(.VPDoc) .vp-doc .df-md-kicker { + margin: 0 0 16px; + color: var(--df-md-primary-link); + font-size: 12px; + font-weight: 500; + letter-spacing: 0.08em; + line-height: 1.5; +} + +.Layout:has(.VPDoc) .vp-doc h1, +.Layout:has(.VPDoc) .vp-doc h2, +.Layout:has(.VPDoc) .vp-doc h3, +.Layout:has(.VPDoc) .vp-doc h4 { + color: var(--df-md-text-1); + font-weight: 500; + letter-spacing: -0.02em; +} + +.Layout:has(.VPDoc) .vp-doc h1 { + margin: 0 0 20px; + font-size: 32px; + line-height: 1.3; +} + +.Layout:has(.VPDoc) .vp-doc h2 { + --df-md-heading-padding-top: 16px; + margin-top: 48px; + padding-top: var(--df-md-heading-padding-top); + border-top: 1px solid var(--df-md-border-1); + font-size: 24px; + line-height: 1.35; +} + +.Layout:has(.VPDoc) .vp-doc h2 .header-anchor { + top: var(--df-md-heading-padding-top); +} + +.Layout:has(.VPDoc) .vp-doc h3 { + margin-top: 32px; + font-size: 20px; + line-height: 1.4; +} + +.Layout:has(.VPDoc) .vp-doc h4 { + font-size: 16px; +} + +.Layout:has(.VPDoc) .vp-doc p, +.Layout:has(.VPDoc) .vp-doc li { + line-height: 1.7; +} + +.Layout:has(.VPDoc) .vp-doc p { + margin: 16px 0; +} + +.Layout:has(.VPDoc) .vp-doc strong { + color: var(--df-md-text-1); + font-weight: 500; +} + +.Layout:has(.VPDoc) .vp-doc a:not(.header-anchor) { + color: var(--df-md-primary-link); + text-decoration-color: var(--df-md-primary-link); + text-decoration-thickness: 1px; + text-underline-offset: 3px; +} + +.Layout:has(.VPDoc) .vp-doc a:not(.header-anchor):hover { + color: var(--df-md-primary-hover); + text-decoration-color: var(--df-md-primary-hover); +} + +.Layout:has(.VPDoc) .vp-doc a:focus-visible, +.Layout:has(.VPDoc) .vp-doc button:focus-visible, +.Layout:has(.VPDoc) .vp-doc .vp-code-group input:focus-visible + label { + outline: 2px solid var(--df-md-primary-6); + outline-offset: 3px; +} + +.Layout:has(.VPDoc) .vp-doc :not(pre) > code { + padding: 0.14em 0.34em; + border: 1px solid var(--df-md-border-1); + border-radius: 4px; + background-color: var(--df-md-fill-1); + color: var(--df-md-text-1); + font-size: var(--vp-code-font-size); + font-weight: 500; + overflow-wrap: break-word; +} + +.Layout:has(.VPDoc) .vp-doc blockquote { + margin: 24px 0; + padding: 8px 0 8px 16px; + border-left: 2px solid var(--df-md-primary-6); + color: var(--df-md-text-3); +} + +.Layout:has(.VPDoc) .vp-doc blockquote p { + color: inherit; +} + +.Layout:has(.VPDoc) .vp-doc blockquote > :first-child { + margin-top: 0; +} + +.Layout:has(.VPDoc) .vp-doc blockquote > :last-child { + margin-bottom: 0; +} + +.Layout:has(.VPDoc) .vp-doc ul, +.Layout:has(.VPDoc) .vp-doc ol { + padding-left: 1.4em; +} + +.Layout:has(.VPDoc) .vp-doc li { + padding-left: 0.2em; + margin: 5px 0; +} + +.Layout:has(.VPDoc) .vp-doc li::marker { + color: var(--df-md-primary-link); +} + +.Layout:has(.VPDoc) .vp-doc input[type='checkbox'] { + accent-color: var(--df-md-primary-6); +} + +.Layout:has(.VPDoc) .vp-doc div[class*='language-'] { + margin: 20px 0 24px; + border: 1px solid var(--df-md-border-1); + border-radius: 6px; + background-color: var(--df-md-bg-2); + box-shadow: none; +} + +.Layout:has(.VPDoc) .vp-doc div[class*='language-'] pre { + font-size: 13px; + line-height: 1.7; +} + +.Layout:has(.VPDoc) .vp-doc .vp-code-group { + margin: 20px 0 24px; +} + +.Layout:has(.VPDoc) .vp-doc .vp-code-group .tabs { + border: 1px solid var(--df-md-border-1); + border-bottom: 0; + border-radius: 6px 6px 0 0; +} + +.Layout:has(.VPDoc) .vp-doc .vp-code-group div[class*='language-'] { + margin: 0; + border-radius: 0 0 6px 6px; +} + +.Layout:has(.VPDoc) .vp-doc table { + display: table; + width: 100%; + max-width: 100%; + margin: 20px 0 24px; + overflow-x: auto; + border: 1px solid var(--df-md-border-1); + border-radius: 6px; + border-collapse: separate; + border-spacing: 0; + font-size: 14px; +} + +.Layout:has(.VPDoc) .vp-doc tr, +.Layout:has(.VPDoc) .vp-doc tr:nth-child(2n) { + border: 0; + background-color: var(--df-md-bg-2); +} + +.Layout:has(.VPDoc) .vp-doc th, +.Layout:has(.VPDoc) .vp-doc td { + padding: 10px 12px; + border: 0; + border-bottom: 1px solid var(--df-md-border-1); + color: var(--df-md-text-2); + text-align: left; + vertical-align: top; +} + +.Layout:has(.VPDoc) .vp-doc th { + background-color: var(--df-md-fill-1); + color: var(--df-md-text-1); + font-size: 14px; + font-weight: 500; +} + +.Layout:has(.VPDoc) .vp-doc tr:last-child td { + border-bottom: 0; +} + +.Layout:has(.VPDoc) .vp-doc .custom-block { + margin: 20px 0; + padding: 14px 16px; + border: 1px solid var(--df-md-border-1); + border-radius: 6px; + background-color: var(--df-md-fill-1); + color: var(--df-md-text-2); + box-shadow: none; +} + +.Layout:has(.VPDoc) .vp-doc .custom-block:is(.tip, .success, .warning, .danger) { + padding-block: 12px; +} + +.Layout:has(.VPDoc) .vp-doc .custom-block:is(.tip, .success, .warning, .danger) .custom-block-title { + margin: 0; +} + +.Layout:has(.VPDoc) .vp-doc .custom-block:is(.tip, .success, .warning, .danger) .custom-block-title + p { + margin: 8px 0 0; +} + +.Layout:has(.VPDoc) .vp-doc .custom-block.details { + padding-block: 12px; +} + +.Layout:has(.VPDoc) .vp-doc .custom-block.details > summary { + margin: 0; +} + +.Layout:has(.VPDoc) .vp-doc .custom-block.details[open] > summary + p { + margin: 8px 0 0; +} + +.Layout:has(.VPDoc) .vp-doc .custom-block.tip, +.Layout:has(.VPDoc) .vp-doc .custom-block.success { + --df-md-callout-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 16v-4'/%3E%3Cpath d='M12 8h.01'/%3E%3C/svg%3E"); + border-color: var(--df-md-success-border); + background-color: var(--df-md-success-bg); +} + +.Layout:has(.VPDoc) .vp-doc .custom-block.warning { + --df-md-callout-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m10.29 3.86-8.82 14.14A2 2 0 0 0 3.17 21h17.66a2 2 0 0 0 1.7-3L13.7 3.86a2 2 0 0 0-3.41 0Z'/%3E%3Cpath d='M12 9v4'/%3E%3Cpath d='M12 17h.01'/%3E%3C/svg%3E"); + border-color: var(--df-md-warning-border); + background-color: var(--df-md-warning-bg); +} + +.Layout:has(.VPDoc) .vp-doc .custom-block.danger { + --df-md-callout-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7.86 2h8.28L22 7.86v8.28L16.14 22H7.86L2 16.14V7.86L7.86 2Z'/%3E%3Cpath d='M12 8v4'/%3E%3Cpath d='M12 16h.01'/%3E%3C/svg%3E"); + border-color: var(--df-md-danger-border); + background-color: var(--df-md-danger-bg); +} + +.Layout:has(.VPDoc) .vp-doc .custom-block-title { + color: var(--df-md-text-1); + font-weight: 500; +} + +.Layout:has(.VPDoc) .vp-doc .custom-block.tip .custom-block-title, +.Layout:has(.VPDoc) .vp-doc .custom-block.success .custom-block-title { + color: var(--df-md-success-text); +} + +.Layout:has(.VPDoc) .vp-doc .custom-block.tip .custom-block-title, +.Layout:has(.VPDoc) .vp-doc .custom-block.warning .custom-block-title, +.Layout:has(.VPDoc) .vp-doc .custom-block.danger .custom-block-title { + display: flex; + align-items: center; + gap: 8px; +} + +.Layout:has(.VPDoc) .vp-doc .custom-block.tip .custom-block-title::before, +.Layout:has(.VPDoc) .vp-doc .custom-block.warning .custom-block-title::before, +.Layout:has(.VPDoc) .vp-doc .custom-block.danger .custom-block-title::before { + content: ''; + flex: none; + width: 18px; + height: 18px; + background-color: currentColor; + /* Lucide outlines inherit each title's semantic color. */ + -webkit-mask: var(--df-md-callout-icon) center / contain no-repeat; + mask: var(--df-md-callout-icon) center / contain no-repeat; +} + +.Layout:has(.VPDoc) .vp-doc .custom-block.warning .custom-block-title { + color: var(--df-md-warning-text); +} + +.Layout:has(.VPDoc) .vp-doc .custom-block.danger .custom-block-title { + color: var(--df-md-danger-text); +} + +.Layout:has(.VPDoc) .vp-doc .custom-block p { + color: var(--df-md-text-2); + line-height: 1.7; +} + +.Layout:has(.VPDoc) .vp-doc .footnotes { + color: var(--df-md-text-3); + font-size: 14px; +} + +.Layout:has(.VPDoc) .vp-doc .footnotes-sep { + border-color: var(--df-md-border-1); +} + +@media (max-width: 640px) { + .Layout:has(.VPDoc) .vp-doc h1 { + font-size: 28px; + } + + .Layout:has(.VPDoc) .vp-doc h2 { + margin-top: 40px; + font-size: 22px; + } + + .Layout:has(.VPDoc) .vp-doc h3 { + font-size: 18px; + } + + .Layout:has(.VPDoc) .vp-doc table { + display: block; + white-space: nowrap; + } +} diff --git a/.vitepress/theme/search.css b/.vitepress/theme/search.css new file mode 100644 index 00000000..ee30b884 --- /dev/null +++ b/.vitepress/theme/search.css @@ -0,0 +1,56 @@ +/* The local-search dialog is teleported to body; it shares the DeepFlow tokens. */ +.VPLocalSearchBox { + --vp-c-brand-1: var(--df-md-primary-6); + --vp-c-brand-2: var(--df-md-primary-hover); + --vp-c-text-1: var(--df-md-text-1); + --vp-c-text-2: var(--df-md-text-2); + --vp-c-text-3: var(--df-md-text-3); + --vp-c-divider: var(--df-md-border-2); + --vp-code-color: var(--df-md-text-1); + --vp-code-bg: var(--df-md-fill-1); + --vp-backdrop-bg-color: var(--df-md-mask-bg); + --vp-local-search-bg: var(--df-md-bg-4); + --vp-local-search-result-bg: var(--df-md-bg-4); + --vp-local-search-result-border: var(--df-md-border-1); + --vp-local-search-result-selected-bg: var(--df-md-fill-1); + --vp-local-search-result-selected-border: var(--df-md-primary-6); + --vp-local-search-highlight-bg: var(--df-md-primary-6); + --vp-local-search-highlight-text: var(--df-md-text-on-primary); + color: var(--df-md-text-1); +} + +.VPLocalSearchBox .shell { + border: 1px solid var(--df-md-border-2); +} + +.VPLocalSearchBox .search-bar { + background-color: var(--df-md-fill-1); +} + +.VPLocalSearchBox .search-input { + color: var(--df-md-text-1); +} + +.VPLocalSearchBox .search-input::placeholder, +.VPLocalSearchBox .search-icon, +.VPLocalSearchBox .search-actions, +.VPLocalSearchBox .no-results { + color: var(--df-md-text-3); +} + +.VPLocalSearchBox .result { + background-color: var(--vp-local-search-result-bg); + color: var(--df-md-text-2); +} + +.VPLocalSearchBox .search-keyboard-shortcuts { + color: var(--df-md-text-3); + opacity: 1; +} + +.VPLocalSearchBox .search-keyboard-shortcuts kbd { + background-color: var(--df-md-fill-1); + border-color: var(--df-md-border-2); + color: var(--df-md-text-2); + box-shadow: none; +}