diff --git a/packages/radix-vue/README.md b/packages/radix-vue/README.md
index cd20a8523..a025bcaa9 100644
--- a/packages/radix-vue/README.md
+++ b/packages/radix-vue/README.md
@@ -13,4 +13,4 @@ pnpm install radix-vue
## Documentation
-For full documentation, visit [radix-vue.com](https://radix-vue.com).
\ No newline at end of file
+For full documentation, visit [radix-vue.com](https://radix-vue.com).
diff --git a/packages/radix-vue/package.json b/packages/radix-vue/package.json
index f2c6069a7..63e29293f 100644
--- a/packages/radix-vue/package.json
+++ b/packages/radix-vue/package.json
@@ -1,6 +1,6 @@
{
"name": "radix-vue",
- "version": "0.0.1-rc-.7",
+ "version": "0.0.1-rc-.8",
"description": "Vue port for Radix UI Primitives.",
"type": "module",
"main": "./dist/index.umd.cjs",
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuCheckboxItem.vue b/packages/radix-vue/src/ContextMenu/ContextMenuCheckboxItem.vue
index c7f8c9614..a9259df3b 100644
--- a/packages/radix-vue/src/ContextMenu/ContextMenuCheckboxItem.vue
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuCheckboxItem.vue
@@ -1,25 +1,28 @@
-
-export type ContextMenuCheckboxProvideValue = Readonly[>;
-provide(
- "modelValue",
- toRef(() => props.modelValue)
-);
+
-
-
+
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuContent.vue b/packages/radix-vue/src/ContextMenu/ContextMenuContent.vue
index 2a60992e4..02cf5f8d0 100644
--- a/packages/radix-vue/src/ContextMenu/ContextMenuContent.vue
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuContent.vue
@@ -1,102 +1,106 @@
-
+
+
+
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuGroup.vue b/packages/radix-vue/src/ContextMenu/ContextMenuGroup.vue
index db6304e2d..5d6e803fd 100644
--- a/packages/radix-vue/src/ContextMenu/ContextMenuGroup.vue
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuGroup.vue
@@ -37,7 +37,7 @@ const props = withDefaults(defineProps(), {
const emits = defineEmits(["update:modelValue"]);
-const { primitiveElement, currentElement: parentElementRef } =
+const { primitiveElement, currentElement: parentElement } =
usePrimitiveElement();
provide(CONTEXT_MENU_GROUP_INJECTION_KEY, {
@@ -57,7 +57,7 @@ provide(CONTEXT_MENU_GROUP_INJECTION_KEY, {
emits("update:modelValue", modelValueArray);
}
},
- parentElement: parentElementRef,
+ parentElement,
});
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuItem.vue b/packages/radix-vue/src/ContextMenu/ContextMenuItem.vue
index d54fc2dc0..c36fdb029 100644
--- a/packages/radix-vue/src/ContextMenu/ContextMenuItem.vue
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuItem.vue
@@ -1,97 +1,53 @@
-
-
+
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuItemIndicator.vue b/packages/radix-vue/src/ContextMenu/ContextMenuItemIndicator.vue
index 507091601..05a5d2f07 100644
--- a/packages/radix-vue/src/ContextMenu/ContextMenuItemIndicator.vue
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuItemIndicator.vue
@@ -1,13 +1,19 @@
+
+
-
+
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuLabel.vue b/packages/radix-vue/src/ContextMenu/ContextMenuLabel.vue
index 474c7dfc0..a50b1cc61 100644
--- a/packages/radix-vue/src/ContextMenu/ContextMenuLabel.vue
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuLabel.vue
@@ -1,11 +1,13 @@
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuPortal.vue b/packages/radix-vue/src/ContextMenu/ContextMenuPortal.vue
index ff4867f63..bdee234e6 100644
--- a/packages/radix-vue/src/ContextMenu/ContextMenuPortal.vue
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuPortal.vue
@@ -1,3 +1,12 @@
+
+
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuRadioGroup.vue b/packages/radix-vue/src/ContextMenu/ContextMenuRadioGroup.vue
index 260a90699..9e1738308 100644
--- a/packages/radix-vue/src/ContextMenu/ContextMenuRadioGroup.vue
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuRadioGroup.vue
@@ -1,10 +1,13 @@
-
-
+
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuRoot.vue b/packages/radix-vue/src/ContextMenu/ContextMenuRoot.vue
index a7cf5ea96..4e88d4d95 100644
--- a/packages/radix-vue/src/ContextMenu/ContextMenuRoot.vue
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuRoot.vue
@@ -1,12 +1,14 @@
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuSeparator.vue b/packages/radix-vue/src/ContextMenu/ContextMenuSeparator.vue
index 8e0ffb75c..5c15cebcb 100644
--- a/packages/radix-vue/src/ContextMenu/ContextMenuSeparator.vue
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuSeparator.vue
@@ -1,23 +1,21 @@
-
+
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuSub.vue b/packages/radix-vue/src/ContextMenu/ContextMenuSub.vue
new file mode 100644
index 000000000..1b22f08ae
--- /dev/null
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuSub.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuSubContent.vue b/packages/radix-vue/src/ContextMenu/ContextMenuSubContent.vue
new file mode 100644
index 000000000..1ac77dcd3
--- /dev/null
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuSubContent.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuSubTrigger.vue b/packages/radix-vue/src/ContextMenu/ContextMenuSubTrigger.vue
new file mode 100644
index 000000000..08777dea3
--- /dev/null
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuSubTrigger.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/radix-vue/src/ContextMenu/ContextMenuTrigger.vue b/packages/radix-vue/src/ContextMenu/ContextMenuTrigger.vue
index 7e051d57b..0fef4c6e4 100644
--- a/packages/radix-vue/src/ContextMenu/ContextMenuTrigger.vue
+++ b/packages/radix-vue/src/ContextMenu/ContextMenuTrigger.vue
@@ -1,5 +1,5 @@
diff --git a/packages/radix-vue/src/ContextMenu/index.ts b/packages/radix-vue/src/ContextMenu/index.ts
index 12520bbd3..e4cb4ba98 100644
--- a/packages/radix-vue/src/ContextMenu/index.ts
+++ b/packages/radix-vue/src/ContextMenu/index.ts
@@ -11,3 +11,6 @@ export { default as ContextMenuItemIndicator } from "./ContextMenuItemIndicator.
export { default as ContextMenuLabel } from "./ContextMenuLabel.vue";
export { default as ContextMenuRadioGroup } from "./ContextMenuRadioGroup.vue";
export { default as ContextMenuRadioItem } from "./ContextMenuRadioItem.vue";
+export { default as ContextMenuSub } from "./ContextMenuSub.vue";
+export { default as ContextMenuSubContent } from "./ContextMenuSubContent.vue";
+export { default as ContextMenuSubTrigger } from "./ContextMenuSubTrigger.vue";
diff --git a/packages/radix-vue/src/ContextMenu/utils.ts b/packages/radix-vue/src/ContextMenu/utils.ts
new file mode 100644
index 000000000..e964bcb51
--- /dev/null
+++ b/packages/radix-vue/src/ContextMenu/utils.ts
@@ -0,0 +1,8 @@
+import { type InjectionKey, type Ref } from "vue";
+
+type ContextMenuItemContextValue = {
+ modelValue: Ref;
+};
+
+export const CONTEXT_MENU_ITEM_SYMBOL =
+ Symbol() as InjectionKey;
diff --git a/packages/radix-vue/src/index.ts b/packages/radix-vue/src/index.ts
index 2a8c5219a..48fba85f4 100644
--- a/packages/radix-vue/src/index.ts
+++ b/packages/radix-vue/src/index.ts
@@ -131,6 +131,9 @@ export {
ContextMenuLabel,
ContextMenuRadioGroup,
ContextMenuRadioItem,
+ ContextMenuSub,
+ ContextMenuSubContent,
+ ContextMenuSubTrigger,
} from "./ContextMenu";
export {
SelectArrow,
diff --git a/playground/vue3/src/components/Demo/ContextMenuDemo.vue b/playground/vue3/src/components/Demo/ContextMenuDemo.vue
index 719518829..6382308b8 100644
--- a/playground/vue3/src/components/Demo/ContextMenuDemo.vue
+++ b/playground/vue3/src/components/Demo/ContextMenuDemo.vue
@@ -13,7 +13,10 @@ import {
ContextMenuRoot,
ContextMenuSeparator,
ContextMenuTrigger,
-} from '@/ContextMenu'
+ ContextMenuSub,
+ ContextMenuSubContent,
+ ContextMenuSubTrigger
+} from '../../../../../packages/radix-vue/src'
const toggleState = ref(false)
const checkboxOne = ref(false)
@@ -45,45 +48,237 @@ function handleClick() {
:side-offset="5"
>
- Back
- ]
- ⌘+[
-
-
-
- Foward
-
- ⌘+]
+ New Tab
+
+ ⌘+T
+
+
+ More Tools
+
+
+
+
+
+
+
+ Save Page As…
+
+ ⌘+S
+
+
+
+ Create Shortcut…
+
+
+ Name Window…
+
+
+
+ Developer Tools
+
+
+
+
- Reload
-
- ⌘+R
+ New Window
+
+ ⌘+N
- More Tools
-
-
+ New Private Window
+
+ ⇧+⌘+N
+
+
+ More Tools
+
+
+
+
+
+
+
+ Save Page As…
+
+ ⌘+S
+
+
+
+ Create Shortcut…
+
+
+ Name Window…
+
+
+
+ Developer Tools
+
+
+
+ More Tools
+
+
+
+
+
+
+
+ Save Page As…
+
+ ⌘+S
+
+
+
+ Create Shortcut…
+
+
+ Name Window…
+
+
+
+ Developer Tools
+
+
+
+ More Tools
+
+
+
+
+
+
+
+ Save Page As…
+
+ ⌘+S
+
+
+
+ Create Shortcut…
+
+
+ Name Window…
+
+
+
+ Developer Tools
+
+
+
+
+
+
+
+
+ Developer Tools
+
+
+
+
@@ -98,8 +293,6 @@ function handleClick() {
@@ -131,6 +324,7 @@ function handleClick() {
Colm Tuite
+