diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index 9b99fa01b..549b1dbf8 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -48,6 +48,7 @@ export { useNodeFontStatus } from '#vue/shared/font-status/use' export { usePropScrub } from '#vue/controls/prop-scrub/use' export { toolCursor } from '#vue/editor/tool-cursor' export { testId, testIdSelector } from '#vue/testing/test-id' +export { vTestId } from '#vue/testing/v-test-id' export type { RequiredTestIdProps, TestId, diff --git a/packages/vue/src/testing/v-test-id.ts b/packages/vue/src/testing/v-test-id.ts new file mode 100644 index 000000000..3298c3fe5 --- /dev/null +++ b/packages/vue/src/testing/v-test-id.ts @@ -0,0 +1,17 @@ +import type { Directive } from 'vue' + +import type { TestId } from './test-id' + +function applyTestId(el: HTMLElement, value?: TestId | null) { + if (value) el.setAttribute('data-test-id', value) + else el.removeAttribute('data-test-id') +} + +export const vTestId: Directive = { + mounted(el, binding) { + applyTestId(el, binding.value) + }, + updated(el, binding) { + applyTestId(el, binding.value) + } +} diff --git a/src/components/AppMenu.vue b/src/components/AppMenu.vue index 3f0387ea6..5b582373c 100644 --- a/src/components/AppMenu.vue +++ b/src/components/AppMenu.vue @@ -19,7 +19,7 @@ import { import IconChevronRight from '~icons/lucide/chevron-right' -import { testId as testIdAttr, useI18n } from '@open-pencil/vue' +import { vTestId, useI18n } from '@open-pencil/vue' import { useMenuUI } from '@/components/ui/menu' import { IS_TAURI } from '@/constants' import { useAppMenu } from '@/app/shell/menu/app-menu' @@ -91,7 +91,7 @@ const subMenuCls = useMenuUI({ content: 'min-w-44' }) {{ menu.label }} diff --git a/src/components/CanvasMenu.vue b/src/components/CanvasMenu.vue index 69fb38299..b9b0b8e67 100644 --- a/src/components/CanvasMenu.vue +++ b/src/components/CanvasMenu.vue @@ -9,7 +9,7 @@ import { ContextMenuPortal } from 'reka-ui' import { - testId as testIdAttr, + vTestId, useEditorCommands, useI18n, useMenuModel, @@ -126,7 +126,7 @@ const contextCommandTestIds: Record = { -import { inputNumberValue, testId as testIdAttr, type TestIdProps } from '@open-pencil/vue' +import { inputNumberValue, vTestId, type TestIdProps } from '@open-pencil/vue' import { usePickerSliderUI } from './ui/picker-slider' type PickerSliderDisplay = { @@ -64,7 +64,7 @@ function thumbLeft(): string {