From d477a3a7a4292714ba29b7470555b9fa4fde5fd1 Mon Sep 17 00:00:00 2001
From: tresabhi <43380238+tresabhi@users.noreply.github.com>
Date: Wed, 26 Aug 2026 13:49:45 -0500
Subject: [PATCH] radix composing styles
---
.../components/DropdownMenu/index.module.css | 0
.../src/components/DropdownMenu/index.tsx | 78 +------------------
packages/website/src/ui/compose.tsx | 35 +++++++++
3 files changed, 39 insertions(+), 74 deletions(-)
create mode 100644 packages/website/src/components/DropdownMenu/index.module.css
create mode 100644 packages/website/src/ui/compose.tsx
diff --git a/packages/website/src/components/DropdownMenu/index.module.css b/packages/website/src/components/DropdownMenu/index.module.css
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/website/src/components/DropdownMenu/index.tsx b/packages/website/src/components/DropdownMenu/index.tsx
index 47d179714..8afe69f1b 100644
--- a/packages/website/src/components/DropdownMenu/index.tsx
+++ b/packages/website/src/components/DropdownMenu/index.tsx
@@ -1,75 +1,5 @@
-import {
- Menubar,
- MenubarCheckboxItem,
- MenubarContent,
- MenubarLabel,
- MenubarRadioGroup,
- MenubarRadioItem,
- MenubarSub,
- MenubarSubContent,
- MenubarSubTrigger,
- MenubarTrigger,
- type MenubarCheckboxItemProps,
- type MenubarContentProps,
- type MenubarLabelProps,
- type MenubarProps,
- type MenubarRadioGroupProps,
- type MenubarRadioItemProps,
- type MenubarSubContentProps,
- type MenubarSubProps,
- type MenubarSubTriggerProps,
- type MenubarTriggerProps,
-} from "radix-ui/menubar";
+import { DropdownMenu as _ } from "radix-ui";
+import { composeRadixComponents } from "../../ui/compose";
+import styles from "./index.module.css";
-function Root(props: MenubarProps) {
- return ;
-}
-
-function Trigger(props: MenubarTriggerProps) {
- return ;
-}
-
-function Content(props: MenubarContentProps) {
- return ;
-}
-
-function Sub(props: MenubarSubProps) {
- return ;
-}
-
-function SubTrigger(props: MenubarSubTriggerProps) {
- return ;
-}
-
-function SubContent(props: MenubarSubContentProps) {
- return ;
-}
-
-function Label(props: MenubarLabelProps) {
- return ;
-}
-
-function CheckboxItem(props: MenubarCheckboxItemProps) {
- return ;
-}
-
-function RadioGroup(props: MenubarRadioGroupProps) {
- return ;
-}
-
-function RadioItem(props: MenubarRadioItemProps) {
- return ;
-}
-
-export const DropdownMenu = {
- Root,
- Trigger,
- Content,
- Sub,
- SubTrigger,
- SubContent,
- Label,
- CheckboxItem,
- RadioGroup,
- RadioItem,
-};
+export const DropdownMenu = composeRadixComponents(_, styles);
diff --git a/packages/website/src/ui/compose.tsx b/packages/website/src/ui/compose.tsx
new file mode 100644
index 000000000..2b405a00d
--- /dev/null
+++ b/packages/website/src/ui/compose.tsx
@@ -0,0 +1,35 @@
+import type { FC } from "react";
+import { classNames } from "./classNames";
+
+function composeRadixComponent(
+ Component: FC,
+ style: CSSModuleClasses[string],
+) {
+ return function (props: Props & { className?: string }) {
+ return (
+
+ );
+ };
+}
+
+export function composeRadixComponents<
+ Components extends Record,
+>(components: Components, styles: CSSModuleClasses) {
+ const mapped: Partial = {};
+
+ for (const key in components) {
+ const isMethod = key[0].toLowerCase() === key[0];
+
+ if (isMethod) {
+ mapped[key] = components[key];
+ continue;
+ }
+
+ mapped[key] = composeRadixComponent(
+ components[key] as FC,
+ styles[key],
+ ) as Components[Extract];
+ }
+
+ return mapped as Components;
+}