From 1ae5cc09cb2eca6b6f53eb04db9dcc731b696cae Mon Sep 17 00:00:00 2001 From: Malik <48517781+malik-jouda@users.noreply.github.com> Date: Mon, 31 Mar 2025 23:07:40 +0200 Subject: [PATCH] fix(ContextMenu/DropdownMenu): handle RTL mode (#3744) --- src/runtime/components/ContextMenuContent.vue | 5 ++++- src/runtime/components/DropdownMenuContent.vue | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/runtime/components/ContextMenuContent.vue b/src/runtime/components/ContextMenuContent.vue index 7870f0b0..dae9efd6 100644 --- a/src/runtime/components/ContextMenuContent.vue +++ b/src/runtime/components/ContextMenuContent.vue @@ -38,6 +38,7 @@ import { ContextMenu } from 'reka-ui/namespaced' import { useForwardPropsEmits } from 'reka-ui' import { reactiveOmit, createReusableTemplate } from '@vueuse/core' import { useAppConfig } from '#imports' +import { useLocale } from '../composables/useLocale' import { omit, get, isArrayOfArray } from '../utils' import { pickLinkProps } from '../utils/link' import ULinkBase from './LinkBase.vue' @@ -53,11 +54,13 @@ const emits = defineEmits() const slots = defineSlots>() const appConfig = useAppConfig() +const { dir } = useLocale() const contentProps = useForwardPropsEmits(reactiveOmit(props, 'sub', 'items', 'portal', 'labelKey', 'checkedIcon', 'loadingIcon', 'externalIcon', 'class', 'ui', 'uiOverride'), emits) const proxySlots = omit(slots, ['default']) const [DefineItemTemplate, ReuseItemTemplate] = createReusableTemplate<{ item: ContextMenuItem, active?: boolean, index: number }>() +const childrenIcon = computed(() => dir.value === 'rtl' ? appConfig.ui.icons.chevronLeft : appConfig.ui.icons.chevronRight) const groups = computed(() => props.items?.length ? isArrayOfArray(props.items) @@ -86,7 +89,7 @@ const groups = computed(() => - + diff --git a/src/runtime/components/DropdownMenuContent.vue b/src/runtime/components/DropdownMenuContent.vue index 805cc2d2..1cb9d526 100644 --- a/src/runtime/components/DropdownMenuContent.vue +++ b/src/runtime/components/DropdownMenuContent.vue @@ -44,6 +44,7 @@ import { DropdownMenu } from 'reka-ui/namespaced' import { useForwardPropsEmits } from 'reka-ui' import { reactiveOmit, createReusableTemplate } from '@vueuse/core' import { useAppConfig } from '#imports' +import { useLocale } from '../composables/useLocale' import { omit, get, isArrayOfArray } from '../utils' import { pickLinkProps } from '../utils/link' import ULinkBase from './LinkBase.vue' @@ -59,11 +60,13 @@ const emits = defineEmits() const slots = defineSlots>() const appConfig = useAppConfig() +const { dir } = useLocale() const contentProps = useForwardPropsEmits(reactiveOmit(props, 'sub', 'items', 'portal', 'labelKey', 'checkedIcon', 'loadingIcon', 'externalIcon', 'class', 'ui', 'uiOverride'), emits) const proxySlots = omit(slots, ['default']) const [DefineItemTemplate, ReuseItemTemplate] = createReusableTemplate<{ item: DropdownMenuItem, active?: boolean, index: number }>() +const childrenIcon = computed(() => dir.value === 'rtl' ? appConfig.ui.icons.chevronLeft : appConfig.ui.icons.chevronRight) const groups = computed(() => props.items?.length ? isArrayOfArray(props.items) @@ -92,7 +95,7 @@ const groups = computed(() => - + @@ -131,7 +134,6 @@ const groups = computed(() => :ui-override="uiOverride" :portal="portal" :items="(item.children as T)" - side="right" align="start" :align-offset="-4" :side-offset="3"