refactor: Improve RTL support by adopting logical CSS properties.

pull/5071/head
ws-rush 7 months ago
parent 66cf64e6d1
commit f3f6d006cf

@ -208,16 +208,16 @@ describe('node/markdown/plugins/snippet', () => {
const lines = [
'.body-content {',
'/* #region foo */',
' padding-left: 15px;',
' padding-inline-start: 15px;',
'/* #endregion foo */',
' padding-right: 15px;',
' padding-inline-end: 15px;',
'}'
]
const result = findRegion(lines, 'foo')
expect(result).not.toBeNull()
if (result) {
expect(lines.slice(result.start, result.end).join('\n')).toBe(
' padding-left: 15px;'
' padding-inline-start: 15px;'
)
}
})

@ -1,8 +0,0 @@
{
"plugins": {
"postcss-rtlcss": {
"ltrPrefix": ":where([dir=\"ltr\"])",
"rtlPrefix": ":where([dir=\"rtl\"])"
}
}
}

@ -27,7 +27,7 @@ const showModal = ref(false)
position: fixed;
z-index: 200;
top: 0;
left: 0;
inset-inline-start: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
@ -49,7 +49,7 @@ const showModal = ref(false)
.model-footer {
margin-top: 8px;
text-align: right;
text-align: end;
}
.modal-button {

@ -13,7 +13,6 @@
"@lunariajs/core": "^0.1.1",
"markdown-it-mathjax3": "^4.3.2",
"open-cli": "^8.0.0",
"postcss-rtlcss": "^5.7.1",
"vitepress": "workspace:*",
"vitepress-plugin-group-icons": "^1.6.5",
"vitepress-plugin-llms": "^1.9.3"

@ -29,7 +29,7 @@ const showModal = ref(false)
position: fixed;
z-index: 200;
top: 0;
left: 0;
inset-inline-start: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
@ -51,7 +51,7 @@ const showModal = ref(false)
.model-footer {
margin-top: 8px;
text-align: right;
text-align: end;
}
.modal-button {

@ -333,9 +333,6 @@ importers:
open-cli:
specifier: ^8.0.0
version: 8.0.0
postcss-rtlcss:
specifier: ^5.7.1
version: 5.7.1(postcss@8.5.6)
vitepress:
specifier: workspace:*
version: link:..
@ -2545,12 +2542,6 @@ packages:
resolution: {integrity: sha512-ryc8D/B5E/YnlWHkNMnRvNntPc4GwU1/+iDBjiXVz1SUjDRqlxYX5Ic0IaDLA/cQ+g7/x+jUzEjv2K16u1J+wA==}
engines: {node: '>=8'}
postcss-rtlcss@5.7.1:
resolution: {integrity: sha512-zE68CuARv5StOG/UQLa0W1Y/raUTzgJlfjtas43yh3/G1BFmoPEaHxPRHgeowXRFFhW33FehrNgsljxRLmPVWw==}
engines: {node: '>=18.0.0'}
peerDependencies:
postcss: ^8.4.21
postcss-selector-parser@7.1.0:
resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
engines: {node: '>=4'}
@ -2729,11 +2720,6 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
rtlcss@4.3.0:
resolution: {integrity: sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==}
engines: {node: '>=12.0.0'}
hasBin: true
run-applescript@7.1.0:
resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
engines: {node: '>=18'}
@ -2889,10 +2875,6 @@ packages:
resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==}
engines: {node: '>=18'}
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
strip-literal@3.1.0:
resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
@ -5338,11 +5320,6 @@ snapshots:
'@polka/url': 1.0.0-next.29
trouter: 4.0.0
postcss-rtlcss@5.7.1(postcss@8.5.6):
dependencies:
postcss: 8.5.6
rtlcss: 4.3.0
postcss-selector-parser@7.1.0:
dependencies:
cssesc: 3.0.0
@ -5547,13 +5524,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.53.2
fsevents: 2.3.3
rtlcss@4.3.0:
dependencies:
escalade: 3.2.0
picocolors: 1.1.1
postcss: 8.5.6
strip-json-comments: 3.1.1
run-applescript@7.1.0: {}
run-parallel@1.2.0:
@ -5710,8 +5680,6 @@ snapshots:
strip-final-newline@4.0.0: {}
strip-json-comments@3.1.1: {}
strip-literal@3.1.0:
dependencies:
js-tokens: 9.0.1

@ -1,5 +1,5 @@
<script setup lang="ts">
import { computed, provide, useSlots } from 'vue'
import { computed, provide, useSlots, watchEffect } from 'vue'
import VPBackdrop from './components/VPBackdrop.vue'
import VPContent from './components/VPContent.vue'
import VPFooter from './components/VPFooter.vue'
@ -17,14 +17,21 @@ const {
close: closeSidebar
} = useSidebarControl()
registerWatchers({ closeSidebar })
const { frontmatter } = useData()
const data = useData()
registerWatchers({ closeSidebar })
const slots = useSlots()
const heroImageSlotExists = computed(() => !!slots['home-hero-image'])
provide(layoutInfoInjectionKey, { heroImageSlotExists })
watchEffect(() => {
if (typeof window !== 'undefined') {
document.documentElement.dir = data.site.value.dir
}
})
</script>
<template>

@ -17,7 +17,7 @@ withDefaults(defineProps<Props>(), {
<style>
.VPBadge {
display: inline-block;
margin-left: 2px;
margin-inline-start: 2px;
border: 1px solid transparent;
border-radius: 12px;
padding: 0 10px;

@ -82,14 +82,14 @@ const { isHome, hasSidebar } = useLayout()
.VPContent.has-sidebar {
margin: var(--vp-layout-top-height, 0px) 0 0;
padding-left: var(--vp-sidebar-width);
padding-inline-start: var(--vp-sidebar-width);
}
}
@media (min-width: 1440px) {
.VPContent.has-sidebar {
padding-right: calc((100% - var(--vp-layout-max-width)) / 2);
padding-left: calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width));
padding-inline-end: calc((100% - var(--vp-layout-max-width)) / 2);
padding-inline-start: calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width));
}
}
</style>

@ -121,15 +121,15 @@ const pageName = computed(() =>
display: none;
order: 2;
flex-grow: 1;
padding-left: 32px;
padding-inline-start: 32px;
width: 100%;
max-width: 256px;
}
.left-aside {
order: 1;
padding-left: unset;
padding-right: 32px;
padding-inline-start: unset;
padding-inline-end: 32px;
}
.aside-container {

@ -50,8 +50,8 @@ useActiveAnchor(container, marker)
.content {
position: relative;
border-left: 1px solid var(--vp-c-divider);
padding-left: 16px;
border-inline-start: 1px solid var(--vp-c-divider);
padding-inline-start: 16px;
font-size: 13px;
font-weight: 500;
}
@ -59,7 +59,7 @@ useActiveAnchor(container, marker)
.outline-marker {
position: absolute;
top: 32px;
left: -1px;
inset-inline-start: -1px;
z-index: 0;
opacity: 0;
width: 2px;

@ -112,7 +112,7 @@ const showFooter = computed(
}
.edit-link-icon {
margin-right: 8px;
margin-inline-end: 8px;
}
.prev-next {
@ -144,8 +144,8 @@ const showFooter = computed(
}
.pager-link.next {
margin-left: auto;
text-align: right;
margin-inline-start: auto;
text-align: end;
}
.desc {

@ -27,8 +27,8 @@ defineProps<{
}
.nested {
padding-right: 16px;
padding-left: 16px;
padding-inline-end: 16px;
padding-inline-start: 16px;
}
.outline-link {
@ -50,6 +50,6 @@ defineProps<{
}
.outline-link.nested {
padding-left: 13px;
padding-inline-start: 13px;
}
</style>

@ -45,7 +45,7 @@ defineProps<{
<div v-if="linkText" class="link-text">
<p class="link-text-value">
{{ linkText }} <span class="vpi-arrow-right link-text-icon" />
{{ linkText }} <span class="vpi-arrow-right link-text-icon vp-icon-directional" />
</p>
</div>
</article>
@ -118,6 +118,6 @@ defineProps<{
}
.link-text-icon {
margin-left: 6px;
margin-inline-start: 6px;
}
</style>

@ -112,12 +112,12 @@ function onBlur() {
}
.option-icon {
margin-right: 0px;
margin-inline-end: 0px;
font-size: 16px;
}
.text-icon {
margin-left: 4px;
margin-inline-start: 4px;
font-size: 14px;
}
@ -129,7 +129,7 @@ function onBlur() {
.menu {
position: absolute;
top: calc(var(--vp-nav-height) / 2 + 20px);
right: 0;
inset-inline-end: 0;
opacity: 0;
visibility: hidden;
transition: opacity 0.25s, visibility 0.25s, transform 0.25s;

@ -111,7 +111,7 @@ const { heroImageSlotExists } = inject(layoutInfoInjectionKey)!
@media (min-width: 960px) {
.VPHero.has-image .container {
text-align: left;
text-align: start;
}
}

@ -39,8 +39,8 @@ const { width: vw } = useWindowSize({
.vp-doc :deep(.VPHomeSponsors),
.vp-doc :deep(.VPTeamPage) {
margin-left: var(--vp-offset, calc(50% - 50vw));
margin-right: var(--vp-offset, calc(50% - 50vw));
margin-inline-start: var(--vp-offset, calc(50% - 50vw));
margin-inline-end: var(--vp-offset, calc(50% - 50vw));
}
.vp-doc :deep(.VPHomeSponsors h2) {

@ -84,7 +84,7 @@ const classes = computed(() => {
}
.VPLocalNav.has-sidebar {
padding-left: var(--vp-sidebar-width);
padding-inline-start: var(--vp-sidebar-width);
}
.VPLocalNav.empty {
@ -126,7 +126,7 @@ const classes = computed(() => {
}
.menu-icon {
margin-right: 8px;
margin-inline-end: 8px;
font-size: 14px;
}

@ -114,12 +114,16 @@ function scrollToTop() {
.icon {
display: inline-block;
vertical-align: middle;
margin-left: 2px;
margin-inline-start: 2px;
font-size: 14px;
transform: rotate(0) /*rtl:rotate(180deg)*/;
transform: rotate(0);
transition: transform 0.25s;
}
:where([dir="rtl"]) .icon {
transform: rotate(180deg);
}
@media (min-width: 960px) {
.VPLocalNavOutlineDropdown button {
font-size: 14px;
@ -131,15 +135,14 @@ function scrollToTop() {
}
.open > .icon {
/*rtl:ignore*/
transform: rotate(90deg);
}
.items {
position: absolute;
top: 40px;
right: 16px;
left: 16px;
inset-inline-end: 16px;
inset-inline-start: 16px;
display: grid;
gap: 1px;
border: 1px solid var(--vp-c-border);
@ -152,8 +155,8 @@ function scrollToTop() {
@media (min-width: 960px) {
.items {
right: auto;
left: calc(var(--vp-sidebar-width) + 32px);
inset-inline-end: auto;
inset-inline-start: calc(var(--vp-sidebar-width) + 32px);
width: 320px;
}
}

@ -843,7 +843,7 @@ function onMouseMove(e: MouseEvent) {
.excerpt-gradient-bottom {
position: absolute;
bottom: -1px;
left: 0;
inset-inline-start: 0;
width: 100%;
height: 8px;
background: linear-gradient(transparent, var(--vp-local-search-result-bg));
@ -853,7 +853,7 @@ function onMouseMove(e: MouseEvent) {
.excerpt-gradient-top {
position: absolute;
top: -1px;
left: 0;
inset-inline-start: 0;
width: 100%;
height: 8px;
background: linear-gradient(var(--vp-local-search-result-bg), transparent);

@ -73,6 +73,6 @@ defineProps<{
}
.VPMenu :deep(.action) {
padding-left: 24px;
padding-inline-start: 24px;
}
</style>

@ -56,7 +56,7 @@ defineOptions({ inheritAttrs: false })
font-size: 14px;
font-weight: 500;
color: var(--vp-c-text-1);
text-align: left;
text-align: start;
white-space: nowrap;
transition:
background-color 0.25s,

@ -41,8 +41,7 @@ watchEffect(() => {
.VPNav {
position: relative;
top: var(--vp-layout-top-height, 0px);
/*rtl:ignore*/
left: 0;
inset-inline-start: 0;
z-index: var(--vp-z-index-nav);
width: 100%;
pointer-events: none;

@ -146,7 +146,7 @@ watchPostEffect(() => {
.VPNavBar.has-sidebar .title {
position: absolute;
top: 0;
left: 0;
inset-inline-start: 0;
z-index: 2;
padding: 0 32px;
width: var(--vp-sidebar-width);
@ -157,7 +157,7 @@ watchPostEffect(() => {
@media (min-width: 1440px) {
.VPNavBar.has-sidebar .title {
padding-left: max(32px, calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));
padding-inline-start: max(32px, calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));
width: calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px);
}
}
@ -170,15 +170,15 @@ watchPostEffect(() => {
.VPNavBar.has-sidebar .content {
position: relative;
z-index: 1;
padding-left: var(--vp-sidebar-width);
padding-right: 32px;
padding-inline-start: var(--vp-sidebar-width);
padding-inline-end: 32px;
}
}
@media (min-width: 1440px) {
.VPNavBar.has-sidebar .content {
padding-left: calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width));
padding-right: calc((100% - var(--vp-layout-max-width)) / 2 + 32px);
padding-inline-start: calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width));
padding-inline-end: calc((100% - var(--vp-layout-max-width)) / 2 + 32px);
}
}
@ -201,8 +201,8 @@ watchPostEffect(() => {
}
.content-body {
margin-right: -100vw;
padding-right: 100vw;
margin-inline-end: -100vw;
padding-inline-end: 100vw;
}
}
@ -217,8 +217,8 @@ watchPostEffect(() => {
.menu + .social-links::before,
.translations + .appearance::before,
.appearance + .social-links::before {
margin-right: 8px;
margin-left: 8px;
margin-inline-end: 8px;
margin-inline-start: 8px;
width: 1px;
height: 24px;
background-color: var(--vp-c-divider);
@ -227,15 +227,15 @@ watchPostEffect(() => {
.menu + .appearance::before,
.translations + .appearance::before {
margin-right: 16px;
margin-inline-end: 16px;
}
.appearance + .social-links::before {
margin-left: 16px;
margin-inline-start: 16px;
}
.social-links {
margin-right: -8px;
margin-inline-end: -8px;
}
.divider {
@ -245,13 +245,13 @@ watchPostEffect(() => {
@media (min-width: 960px) {
.VPNavBar.has-sidebar .divider {
padding-left: var(--vp-sidebar-width);
padding-inline-start: var(--vp-sidebar-width);
}
}
@media (min-width: 1440px) {
.VPNavBar.has-sidebar .divider {
padding-left: calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width));
padding-inline-start: calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width));
}
}

@ -64,7 +64,7 @@ const hasExtraContent = computed(
<style scoped>
.VPNavBarExtra {
display: none;
margin-right: -12px;
margin-inline-end: -12px;
}
@media (min-width: 768px) {
@ -99,7 +99,7 @@ const hasExtraContent = computed(
}
.appearance-action {
margin-right: -2px;
margin-inline-end: -2px;
}
.social-links-list {

@ -48,9 +48,9 @@ defineEmits<{
overflow: hidden;
}
.VPNavBarHamburger:hover .top { top: 0; left: 0; transform: translateX(4px); }
.VPNavBarHamburger:hover .middle { top: 6px; left: 0; transform: translateX(0); }
.VPNavBarHamburger:hover .bottom { top: 12px; left: 0; transform: translateX(8px); }
.VPNavBarHamburger:hover .top { top: 0; inset-inline-start: 0; transform: translateX(4px); }
.VPNavBarHamburger:hover .middle { top: 6px; inset-inline-start: 0; transform: translateX(0); }
.VPNavBarHamburger:hover .bottom { top: 12px; inset-inline-start: 0; transform: translateX(8px); }
.VPNavBarHamburger.active .top { top: 6px; transform: translateX(0) rotate(225deg); }
.VPNavBarHamburger.active .middle { top: 6px; transform: translateX(16px); }
@ -73,7 +73,7 @@ defineEmits<{
transition: top .25s, background-color .5s, transform .25s;
}
.top { top: 0; left: 0; transform: translateX(0); }
.middle { top: 6px; left: 0; transform: translateX(8px); }
.bottom { top: 12px; left: 0; transform: translateX(4px); }
.top { top: 0; inset-inline-start: 0; transform: translateX(0); }
.middle { top: 6px; inset-inline-start: 0; transform: translateX(8px); }
.bottom { top: 12px; inset-inline-start: 0; transform: translateX(4px); }
</style>

@ -160,13 +160,13 @@ const provider = __ALGOLIA__ ? 'algolia' : __VP_LOCAL_SEARCH__ ? 'local' : ''
@media (min-width: 768px) {
.VPNavBarSearch {
flex-grow: 1;
padding-left: 24px;
padding-inline-start: 24px;
}
}
@media (min-width: 960px) {
.VPNavBarSearch {
padding-left: 32px;
padding-inline-start: 32px;
}
}
</style>

@ -70,7 +70,7 @@ const target = computed(() =>
}
:deep(.logo) {
margin-right: 8px;
margin-inline-end: 8px;
height: var(--vp-nav-logo-height);
}
</style>

@ -36,7 +36,7 @@ const { closeScreen } = inject(navInjectionKey)!
<style scoped>
.VPNavScreenMenuGroupLink {
display: block;
margin-left: 12px;
margin-inline-start: 12px;
line-height: 32px;
font-size: 14px;
font-weight: 400;

@ -61,15 +61,16 @@ function toggle() {
}
.icon.lang {
margin-right: 8px;
margin-inline-end: 8px;
}
.icon.chevron {
margin-left: 4px;
margin-inline-start: 4px;
}
.list {
padding: 4px 0 0 24px;
padding-inline-start: 24px;
}
.link {

@ -69,7 +69,7 @@ watch(
position: fixed;
top: var(--vp-layout-top-height, 0px);
bottom: 0;
left: 0;
inset-inline-start: 0;
z-index: var(--vp-z-index-sidebar);
padding: 32px 32px 96px;
width: calc(100vw - 64px);
@ -84,6 +84,10 @@ watch(
overscroll-behavior: contain;
}
:where([dir="rtl"]) .VPSidebar {
transform: translateX(100%);
}
.VPSidebar.open {
opacity: 1;
visibility: visible;
@ -111,7 +115,7 @@ watch(
@media (min-width: 1440px) {
.VPSidebar {
padding-left: max(32px, calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));
padding-inline-start: max(32px, calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));
width: calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px);
}
}
@ -120,11 +124,10 @@ watch(
.curtain {
position: sticky;
top: calc(var(--vp-nav-height) * -1);
left: 0;
inset-inline-start: 0;
z-index: 1;
margin-top: calc(var(--vp-nav-height) * -1);
margin-right: -32px;
margin-left: -32px;
margin-inline: -32px;
height: var(--vp-nav-height);
background-color: var(--vp-sidebar-bg-color);
}

@ -130,7 +130,7 @@ function onCaretClick() {
position: absolute;
top: 6px;
bottom: 6px;
left: -17px;
inset-inline-start: -17px;
width: 2px;
border-radius: 2px;
transition: background-color 0.25s;
@ -208,7 +208,7 @@ function onCaretClick() {
display: flex;
justify-content: center;
align-items: center;
margin-right: -7px;
margin-inline-end: -7px;
width: 32px;
height: 32px;
color: var(--vp-c-text-3);
@ -227,13 +227,16 @@ function onCaretClick() {
.caret-icon {
font-size: 18px;
/*rtl:ignore*/
transform: rotate(90deg);
transition: transform 0.25s;
}
.VPSidebarItem.collapsed .caret-icon {
transform: rotate(0)/*rtl:rotate(180deg)*/;
transform: rotate(0);
}
:where([dir="rtl"]) .VPSidebarItem.collapsed .caret-icon {
transform: rotate(180deg);
}
.VPSidebarItem.level-1 .items,
@ -241,8 +244,8 @@ function onCaretClick() {
.VPSidebarItem.level-3 .items,
.VPSidebarItem.level-4 .items,
.VPSidebarItem.level-5 .items {
border-left: 1px solid var(--vp-c-divider);
padding-left: 16px;
border-inline-start: 1px solid var(--vp-c-divider);
padding-inline-start: 16px;
}
.VPSidebarItem.collapsed .items {

@ -21,7 +21,7 @@ watch(() => route.path, () => backToTop.value.focus())
.VPSkipLink {
position: fixed;
top: 8px;
left: 8px;
inset-inline-start: 8px;
padding: 8px 16px;
z-index: 999;
border-radius: 8px;
@ -43,7 +43,7 @@ watch(() => route.path, () => backToTop.value.focus())
@media (min-width: 1280px) {
.VPSkipLink {
top: 14px;
left: 16px;
inset-inline-start: 16px;
}
}
</style>

@ -50,7 +50,7 @@
.icon :deep([class^='vpi-']) {
position: absolute;
top: 3px;
left: 3px;
inset-inline-start: 3px;
width: 12px;
height: 12px;
color: var(--vp-c-text-2);

@ -154,9 +154,9 @@ withDefaults(defineProps<Props>(), {
.avatar-img {
position: absolute;
top: 0;
right: 0;
inset-inline-end: 0;
bottom: 0;
left: 0;
inset-inline-start: 0;
border-radius: 50%;
object-fit: cover;
}
@ -219,7 +219,7 @@ withDefaults(defineProps<Props>(), {
}
.sp-icon {
margin-right: 8px;
margin-inline-end: 8px;
font-size: 16px;
}
</style>

@ -43,7 +43,7 @@
.title-line {
position: absolute;
top: 16px;
left: 0;
inset-inline-start: 0;
width: 100%;
height: 1px;
background-color: var(--vp-c-divider);

@ -1,5 +1,5 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="vp-icon-directional">
<path
d="M19,11H7.4l5.3-5.3c0.4-0.4,0.4-1,0-1.4s-1-0.4-1.4,0l-7,7c-0.1,0.1-0.2,0.2-0.2,0.3c-0.1,0.2-0.1,0.5,0,0.8c0.1,0.1,0.1,0.2,0.2,0.3l7,7c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3c0.4-0.4,0.4-1,0-1.4L7.4,13H19c0.6,0,1-0.4,1-1S19.6,11,19,11z"
/>

@ -1,5 +1,5 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="vp-icon-directional">
<path
d="M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"
/>

@ -1,5 +1,5 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewBox="0 0 24 24" class="vp-icon-directional">
<path d="M15,19c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4l6-6c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4L10.4,12l5.3,5.3c0.4,0.4,0.4,1,0,1.4C15.5,18.9,15.3,19,15,19z" />
</svg>
</template>

@ -1,5 +1,5 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewBox="0 0 24 24" class="vp-icon-directional">
<path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z" />
</svg>
</template>

@ -249,3 +249,7 @@ mjx-container > svg {
display: inline-block;
margin: auto;
}
:where([dir='rtl']) .vp-icon-directional {
transform: rotate(180deg);
}

@ -5,8 +5,7 @@
.vp-code-group .tabs {
position: relative;
display: flex;
margin-right: -24px;
margin-left: -24px;
margin-inline: -24px;
padding: 0 12px;
background-color: var(--vp-code-tab-bg);
overflow-x: auto;
@ -16,8 +15,7 @@
@media (min-width: 640px) {
.vp-code-group .tabs {
margin-right: 0;
margin-left: 0;
margin-inline: 0;
border-radius: 8px 8px 0 0;
}
}
@ -44,9 +42,9 @@
.vp-code-group .tabs label::after {
position: absolute;
right: 8px;
inset-inline-end: 8px;
bottom: -1px;
left: 8px;
inset-inline-start: 8px;
z-index: 1;
height: 2px;
border-radius: 2px;

@ -45,8 +45,8 @@
.vp-doc .header-anchor {
position: absolute;
top: 0;
left: 0;
margin-left: -0.87em;
inset-inline-start: 0;
margin-inline-start: -0.87em;
font-weight: 500;
user-select: none;
opacity: 0;
@ -102,8 +102,8 @@
.vp-doc blockquote {
margin: 16px 0;
border-left: 2px solid var(--vp-c-divider);
padding-left: 16px;
border-inline-start: 2px solid var(--vp-c-divider);
padding-inline-start: 16px;
transition: border-color 0.5s;
color: var(--vp-c-text-2);
}
@ -138,7 +138,7 @@
.vp-doc ul,
.vp-doc ol {
padding-left: 1.25rem;
padding-inline-start: 1.25rem;
margin: 16px 0;
}
@ -187,7 +187,7 @@
}
.vp-doc th {
text-align: left;
text-align: start;
font-size: 14px;
font-weight: 600;
color: var(--vp-c-text-2);
@ -359,7 +359,7 @@
.vp-doc [class*='language-'] code .diff::before {
position: absolute;
left: 10px;
inset-inline-start: 10px;
}
.vp-doc [class*='language-'] .has-focused-lines .line:not(.has-focus) {
@ -548,7 +548,7 @@
:is(.vp-external-link-icon, .vp-doc a[href*='://'], .vp-doc a[target='_blank']):not(:is(.no-icon, svg a, :has(img, svg)))::after {
display: inline-block;
margin-top: -1px;
margin-left: 4px;
margin-inline-start: 4px;
width: 11px;
height: 11px;
background: currentColor;

Loading…
Cancel
Save