From 5cc257a00f2a75caf8aab49f0a6c5862994c7f5e Mon Sep 17 00:00:00 2001 From: vamsikrishnamathala Date: Mon, 25 Aug 2025 16:32:04 +0530 Subject: [PATCH 1/6] chore: added accordion to propel --- packages/propel/src/accordion/accordion.tsx | 65 +++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 packages/propel/src/accordion/accordion.tsx diff --git a/packages/propel/src/accordion/accordion.tsx b/packages/propel/src/accordion/accordion.tsx new file mode 100644 index 00000000000..918e531bd7d --- /dev/null +++ b/packages/propel/src/accordion/accordion.tsx @@ -0,0 +1,65 @@ +import { Accordion as BaseAccordion } from "@base-ui-components/react/accordion"; +import { PlusIcon } from "lucide-react"; +import * as React from "react"; + +export interface AccordionItem { + id: string; + title: React.ReactNode; + content: React.ReactNode; + disabled?: boolean; +} + +export interface AccordionProps { + items: AccordionItem[]; + allowMultiple?: boolean; + defaultValue?: string[]; + className?: string; + itemClassName?: string; + triggerClassName?: string; + panelClassName?: string; + icon?: React.ReactNode; +} + +export const Accordion: React.FC = ({ + items, + allowMultiple = false, + defaultValue = [], + className = "", + itemClassName = "", + triggerClassName = "", + panelClassName = "", + icon = ( + + ), +}) => { + return ( + + {items.map((item) => ( + + + + {item.title} + {icon} + + + +
{item.content}
+
+
+ ))} +
+ ); +}; From 0fe7536617bed45000a7d995c44d6a6ea62d44bf Mon Sep 17 00:00:00 2001 From: vamsikrishnamathala Date: Mon, 25 Aug 2025 16:51:30 +0530 Subject: [PATCH 2/6] fix: lint errors --- packages/propel/package.json | 3 +- packages/propel/src/accordion/accordion.tsx | 64 ++++++++++----------- 2 files changed, 32 insertions(+), 35 deletions(-) diff --git a/packages/propel/package.json b/packages/propel/package.json index b18bd730c65..d716fc0bb98 100644 --- a/packages/propel/package.json +++ b/packages/propel/package.json @@ -23,7 +23,8 @@ "./combobox": "./src/combobox/index.ts", "./tooltip": "./src/tooltip/index.ts", "./styles/fonts": "./src/styles/fonts/index.css", - "./switch": "./src/switch/index.ts" + "./switch": "./src/switch/index.ts", + "./accordion": "./src/accordion/index.ts" }, "dependencies": { "@base-ui-components/react": "^1.0.0-beta.2", diff --git a/packages/propel/src/accordion/accordion.tsx b/packages/propel/src/accordion/accordion.tsx index 918e531bd7d..67f85afdb99 100644 --- a/packages/propel/src/accordion/accordion.tsx +++ b/packages/propel/src/accordion/accordion.tsx @@ -28,38 +28,34 @@ export const Accordion: React.FC = ({ itemClassName = "", triggerClassName = "", panelClassName = "", - icon = ( - - ), -}) => { - return ( - - {items.map((item) => ( - - - - {item.title} - {icon} - - - , +}) => ( + + {items.map((item) => ( + + + -
{item.content}
-
-
- ))} -
- ); -}; + {item.title} + {icon} + + + +
{item.content}
+
+ + ))} + +); From 82e79360b4763f2955d9c565694df5e3e9b47ab2 Mon Sep 17 00:00:00 2001 From: vamsikrishnamathala Date: Mon, 25 Aug 2025 17:22:08 +0530 Subject: [PATCH 3/6] fix: updated export path --- packages/propel/src/accordion/index.ts | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/propel/src/accordion/index.ts diff --git a/packages/propel/src/accordion/index.ts b/packages/propel/src/accordion/index.ts new file mode 100644 index 00000000000..52d56b7eecf --- /dev/null +++ b/packages/propel/src/accordion/index.ts @@ -0,0 +1 @@ +export * from "./accordion"; \ No newline at end of file From 39207f1cefcf6876efd97ad15ec30db119425131 Mon Sep 17 00:00:00 2001 From: vamsikrishnamathala Date: Mon, 25 Aug 2025 18:16:46 +0530 Subject: [PATCH 4/6] fix: lint errors --- packages/propel/src/accordion/accordion.tsx | 4 +++- packages/propel/src/accordion/index.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/propel/src/accordion/accordion.tsx b/packages/propel/src/accordion/accordion.tsx index 67f85afdb99..b9799f25cca 100644 --- a/packages/propel/src/accordion/accordion.tsx +++ b/packages/propel/src/accordion/accordion.tsx @@ -28,7 +28,9 @@ export const Accordion: React.FC = ({ itemClassName = "", triggerClassName = "", panelClassName = "", - icon = , + icon = ( + + ), }) => ( Date: Mon, 25 Aug 2025 20:52:03 +0530 Subject: [PATCH 5/6] chore: made accordion into compound component --- packages/propel/src/accordion/accordion.tsx | 119 ++++++++++++-------- 1 file changed, 71 insertions(+), 48 deletions(-) diff --git a/packages/propel/src/accordion/accordion.tsx b/packages/propel/src/accordion/accordion.tsx index b9799f25cca..6f31c8f3219 100644 --- a/packages/propel/src/accordion/accordion.tsx +++ b/packages/propel/src/accordion/accordion.tsx @@ -1,63 +1,86 @@ -import { Accordion as BaseAccordion } from "@base-ui-components/react/accordion"; +import { Accordion as BaseAccordion } from "@base-ui-components/react"; import { PlusIcon } from "lucide-react"; import * as React from "react"; -export interface AccordionItem { - id: string; - title: React.ReactNode; - content: React.ReactNode; +interface AccordionRootProps { + defaultValue?: string[]; + allowMultiple?: boolean; + className?: string; + children: React.ReactNode; +} + +interface AccordionItemProps { + value: string; disabled?: boolean; + className?: string; + children: React.ReactNode; } -export interface AccordionProps { - items: AccordionItem[]; - allowMultiple?: boolean; - defaultValue?: string[]; +interface AccordionTriggerProps { className?: string; - itemClassName?: string; - triggerClassName?: string; - panelClassName?: string; icon?: React.ReactNode; + children: React.ReactNode; + asChild?: boolean; + iconClassName?: string; } -export const Accordion: React.FC = ({ - items, - allowMultiple = false, +interface AccordionContentProps { + className?: string; + contentWrapperClassName?: string; + children: React.ReactNode; +} + +const AccordionRoot: React.FC = ({ defaultValue = [], + allowMultiple = false, className = "", - itemClassName = "", - triggerClassName = "", - panelClassName = "", - icon = ( - - ), + children, }) => ( - - {items.map((item) => ( - - - - {item.title} - {icon} - - - -
{item.content}
-
-
- ))} + + {children} ); + +const AccordionItem: React.FC = ({ value, disabled, className = "", children }) => ( + + {children} + +); + +const AccordionTrigger: React.FC = ({ + className = "", + icon = , + iconClassName = "", + children, + asChild = false, +}) => ( + + {asChild ? ( + {children} + ) : ( + + {children} +
{icon}
+
+ )} +
+); + +const AccordionContent: React.FC = ({ + className = "", + contentWrapperClassName = "", + children, +}) => ( + +
{children}
+
+); + +export const Accordion = { + Root: AccordionRoot, + Item: AccordionItem, + Trigger: AccordionTrigger, + Content: AccordionContent, +}; From 505cff71647a84008d395752270f9a29867ba930 Mon Sep 17 00:00:00 2001 From: vamsikrishnamathala Date: Thu, 28 Aug 2025 13:23:21 +0530 Subject: [PATCH 6/6] fix: coderabbit suggestions --- packages/propel/src/accordion/accordion.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/propel/src/accordion/accordion.tsx b/packages/propel/src/accordion/accordion.tsx index 6f31c8f3219..1d99019667b 100644 --- a/packages/propel/src/accordion/accordion.tsx +++ b/packages/propel/src/accordion/accordion.tsx @@ -49,7 +49,7 @@ const AccordionItem: React.FC = ({ value, disabled, classNam const AccordionTrigger: React.FC = ({ className = "", - icon = , + icon =