+
+export const Template = ({...args}) => {
+ const [runtimeArgs, updateArgs] = useArgs();
+ const {in: checked} = runtimeArgs;
+ return (
+
+
+ updateArgs({...runtimeArgs, in: !checked})} />}
+ label="Show"
+ />
+
+
+
+
+
+ );
+};
+
+# Collapse
+
+- [Overview](#overview)
+- [Props](#props)
+- [Usage](#usage)
+
+## Overview
+
+Expand from the start edge of the child element. Use the `orientation` prop if you need a horizontal collapse. The
+`collapsedSize` prop can be used to set the minimum width/height when not expanded.
+
+
+
+## Props
+
+
+
+## Usage
+
+Import and use the `Collapse` component in your components as follows.
+
+
+ );
+}`}
+/>
diff --git a/packages/react/src/components/Collapse/Collapse.tsx b/packages/react/src/components/Collapse/Collapse.tsx
new file mode 100644
index 00000000..441545a3
--- /dev/null
+++ b/packages/react/src/components/Collapse/Collapse.tsx
@@ -0,0 +1,67 @@
+/**
+ * Copyright (c) 2024, WSO2 LLC. (https://www.wso2.com).
+ *
+ * WSO2 LLC. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import MuiCollapse from '@mui/material/Collapse';
+import type {CollapseProps as MuiCollapseProps} from '@mui/material/Collapse';
+import type {OverridableComponent, OverridableTypeMap} from '@mui/material/OverridableComponent';
+import type {TransitionProps} from '@mui/material/transitions';
+import clsx from 'clsx';
+import {forwardRef} from 'react';
+import type {ReactElement, Ref, ElementType} from 'react';
+
+export type CollapseProps> = {
+ /**
+ * The component used for the root node. Either a string to use a HTML element or a component.
+ */
+ component?: C;
+} & Omit;
+
+/**
+ * A Transition component to expand from the start edge of the child element.
+ *
+ * Demos:
+ *
+ * - [Card (Oxygen UI)](https://wso2.github.io/oxygen-ui/react/?path=/docs/surfaces-card)
+ * - [Card (MUI)](https://mui.com/material-ui/react-card/)
+ * - [Lists (Oxygen UI)](https://wso2.github.io/oxygen-ui/react/?path=/docs/data-display-list)
+ * - [Lists (MUI)](https://mui.com/material-ui/react-list/)
+ * - [Collapse (Oxygen UI)](https://wso2.github.io/oxygen-ui/react/?path=/docs/utils-collapse)
+ * - [Transitions (MUI)](https://mui.com/material-ui/transitions/)
+ *
+ * API:
+ *
+ * - [Collapse API](https://mui.com/material-ui/api/collapse/)
+ * - inherits [Transition API](http://reactcommunity.org/react-transition-group/transition/#Transition-props)
+ *
+ * @remarks
+ * - ✔️ Props of the [Transition](https://mui.com/material-ui/transitions/) component are also available.
+ * - ✅ `component` prop is supported.
+ * - ✅ The `ref` is forwarded to the root element.
+ *
+ * @template C - The type of the component.
+ * @param props - The props for the Collapse component.
+ * @param ref - The ref to be forwarded to the MuiCollapse component.
+ * @returns The rendered Collapse component.
+ */
+const Collapse: OverridableComponent = forwardRef(
+ ({className, ...rest}: CollapseProps>, ref: Ref): ReactElement => (
+
+ ),
+) as OverridableComponent;
+
+export default Collapse;
diff --git a/packages/react/src/components/Collapse/__tests__/Collapse.test.tsx b/packages/react/src/components/Collapse/__tests__/Collapse.test.tsx
new file mode 100644
index 00000000..c040bf31
--- /dev/null
+++ b/packages/react/src/components/Collapse/__tests__/Collapse.test.tsx
@@ -0,0 +1,32 @@
+/**
+ * Copyright (c) 2024, WSO2 LLC. (https://www.wso2.com).
+ *
+ * WSO2 LLC. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import {render} from '@unit-testing';
+import Collapse from '../Collapse';
+
+describe('Collapse', () => {
+ it('should render successfully', () => {
+ const {baseElement} = render();
+ expect(baseElement).toBeTruthy();
+ });
+
+ it('should match the snapshot', () => {
+ const {baseElement} = render();
+ expect(baseElement).toMatchSnapshot();
+ });
+});
diff --git a/packages/react/src/components/Collapse/__tests__/__snapshots__/Collapse.test.tsx.snap b/packages/react/src/components/Collapse/__tests__/__snapshots__/Collapse.test.tsx.snap
new file mode 100644
index 00000000..ba7832bf
--- /dev/null
+++ b/packages/react/src/components/Collapse/__tests__/__snapshots__/Collapse.test.tsx.snap
@@ -0,0 +1,20 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Collapse should match the snapshot 1`] = `
+
+
+
+
+
+
+
+
+
+`;
diff --git a/packages/react/src/components/Collapse/index.ts b/packages/react/src/components/Collapse/index.ts
new file mode 100644
index 00000000..518ee59a
--- /dev/null
+++ b/packages/react/src/components/Collapse/index.ts
@@ -0,0 +1,20 @@
+/**
+ * Copyright (c) 2024, WSO2 LLC. (https://www.wso2.com).
+ *
+ * WSO2 LLC. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+export {default} from './Collapse';
+export * from './Collapse';
diff --git a/packages/react/src/components/Dialog/Dialog.stories.mdx b/packages/react/src/components/Dialog/Dialog.stories.mdx
new file mode 100644
index 00000000..8324dadd
--- /dev/null
+++ b/packages/react/src/components/Dialog/Dialog.stories.mdx
@@ -0,0 +1,119 @@
+import {XMarkIcon} from '@oxygen-ui/react-icons';
+import {ArgsTable, Source, Story, Canvas, Meta} from '@storybook/addon-docs';
+import {useArgs} from '@storybook/client-api';
+import dedent from 'ts-dedent';
+import Dialog from './Dialog.tsx';
+import StoryConfig from '../../../.storybook/story-config.ts';
+import Box from '../Box/Box.tsx';
+import Button from '../Button/Button.tsx';
+import DialogActions from '../DialogActions/DialogActions.tsx';
+import DialogContent from '../DialogContent/DialogContent.tsx';
+import DialogContentText from '../DialogContentText/DialogContentText.tsx';
+import DialogTitle from '../DialogTitle/DialogTitle.tsx';
+import IconButton from '../IconButton/IconButton.tsx';
+
+export const meta = {
+ component: Dialog,
+ title: StoryConfig.Dialog.hierarchy,
+};
+
+
+
+export const Template = ({...args}) => {
+ const [runtimeArgs, updateArgs] = useArgs();
+ const {open} = runtimeArgs;
+ const handleOpen = () => updateArgs({...runtimeArgs, open: true});
+ const handleClose = () => updateArgs({...runtimeArgs, open: false});
+ return (
+
+
+
+
+ );
+};
+
+# Dialog
+
+- [Overview](#overview)
+- [Props](#props)
+- [Usage](#usage)
+
+## Overview
+
+A Dialog is a type of `modal` window that appears in front of app content to provide critical information or ask for a
+decision. Dialogs disable all app functionality when they appear, and remain on screen until confirmed, dismissed, or a
+required action has been taken.
+
+Dialogs are purposefully interruptive, so they should be used sparingly.
+
+
+
+## Props
+
+
+
+## Usage
+
+Import and use the `Dialog` component in your components as follows.
+
+