diff --git a/packages/primitives/src/icons/double-circle-16.svg b/packages/primitives/src/icons/double-circle-16.svg
new file mode 100644
index 00000000..1f64e80d
--- /dev/null
+++ b/packages/primitives/src/icons/double-circle-16.svg
@@ -0,0 +1,21 @@
+
+
+
diff --git a/packages/primitives/src/icons/visibility-16.svg b/packages/primitives/src/icons/visibility-16.svg
new file mode 100644
index 00000000..4b7fae9d
--- /dev/null
+++ b/packages/primitives/src/icons/visibility-16.svg
@@ -0,0 +1,26 @@
+
+
+
diff --git a/packages/primitives/src/icons/visibility-off-16.svg b/packages/primitives/src/icons/visibility-off-16.svg
new file mode 100644
index 00000000..96cf5649
--- /dev/null
+++ b/packages/primitives/src/icons/visibility-off-16.svg
@@ -0,0 +1,21 @@
+
+
+
diff --git a/packages/react/.storybook/story-config.ts b/packages/react/.storybook/story-config.ts
index a4849194..875ec8ee 100644
--- a/packages/react/.storybook/story-config.ts
+++ b/packages/react/.storybook/story-config.ts
@@ -54,11 +54,15 @@ export type Stories =
| 'Divider'
| 'Drawer'
| 'Footer'
+ | 'FormHelperText'
+ | 'FormControl'
| 'Grid'
| 'Header'
| 'IconButton'
| 'Icons'
| 'Image'
+ | 'Input'
+ | 'InputLabel'
| 'LinearProgress'
| 'Link'
| 'List'
@@ -71,6 +75,7 @@ export type Stories =
| 'MenuItem'
| 'UserDropdownMenu'
| 'Navbar'
+ | 'OutlinedInput'
| 'SignIn'
| 'Stepper'
| 'TextField'
@@ -166,6 +171,12 @@ const StoryConfig: StorybookConfig = {
Footer: {
hierarchy: `${StorybookCategories.Navigation}/Footer`,
},
+ FormHelperText: {
+ hierarchy: `${StorybookCategories.Inputs}/Form Helper Text`,
+ },
+ FormControl: {
+ hierarchy: `${StorybookCategories.Inputs}/Form Control`,
+ },
Grid: {
hierarchy: `${StorybookCategories.Layout}/Grid`,
},
@@ -183,6 +194,12 @@ const StoryConfig: StorybookConfig = {
Image: {
hierarchy: `${StorybookCategories.DataDisplay}/Image`,
},
+ Input: {
+ hierarchy: `${StorybookCategories.Inputs}/Input`,
+ },
+ InputLabel: {
+ hierarchy: `${StorybookCategories.Inputs}/Input Label`,
+ },
IconButton: {
hierarchy: `${StorybookCategories.Inputs}/Icon Button`,
},
@@ -204,6 +221,9 @@ const StoryConfig: StorybookConfig = {
Navbar: {
hierarchy: `${StorybookCategories.Navigation}/Navbar`,
},
+ OutlinedInput: {
+ hierarchy: `${StorybookCategories.Inputs}/Outlined Input`,
+ },
List: {
hierarchy: `${StorybookCategories.DataDisplay}/List`,
},
diff --git a/packages/react/src/components/FormControl/FormControl.stories.mdx b/packages/react/src/components/FormControl/FormControl.stories.mdx
new file mode 100644
index 00000000..235cc57c
--- /dev/null
+++ b/packages/react/src/components/FormControl/FormControl.stories.mdx
@@ -0,0 +1,99 @@
+import {ArgsTable, Source, Story, Canvas, Meta} from '@storybook/addon-docs';
+import dedent from 'ts-dedent';
+import StoryConfig from '../../../.storybook/story-config.ts';
+import FormControl from './FormControl.tsx';
+import InputLabel from '../InputLabel';
+import Input from '../Input';
+
+export const meta = {
+ component: FormControl,
+ title: StoryConfig.FormControl.hierarchy,
+};
+
+
+
+export const Template = args => {
+ return (
+
+ Form Input Label
+
+
+
+ )
+}
+
+# Form Control
+
+- [Overview](#overview)
+- [Props](#props)
+- [Usage](#usage)
+- [Variants](#variants)
+
+## Overview
+
+Used to apply a common state to form inputs; `FormLabel`, `FormHelperText`, `Input`, `InputLabel`.
+
+
+
+## Props
+
+
+
+## Usage
+
+Import and use the `FormControl` component in your components as follows.
+
+
+
+## Variants
+
+### Color
+
+#### Primary
+
+
+
+#### Secondary
+
+
+
+### Error
+
+
+
+### Focused
+
+
+
+### Disabled
+
+
diff --git a/packages/react/src/components/FormControl/FormControl.tsx b/packages/react/src/components/FormControl/FormControl.tsx
new file mode 100644
index 00000000..29f09f29
--- /dev/null
+++ b/packages/react/src/components/FormControl/FormControl.tsx
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) 2023, WSO2 LLC. (https://www.wso2.com). All Rights Reserved.
+ *
+ * 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 MuiFormControl, {FormControlProps as MuiFormControlProps} from '@mui/material/FormControl';
+import clsx from 'clsx';
+import {ElementType, FC, ReactElement} from 'react';
+import {WithWrapperProps} from '../../models';
+import {composeComponentDisplayName} from '../../utils';
+import './form-control.scss';
+
+export type FormControlProps = {
+ component?: C;
+} & Omit, 'component'>;
+
+const COMPONENT_NAME: string = 'FormControl';
+
+const FormControl: FC & WithWrapperProps = (
+ props: FormControlProps,
+): ReactElement => {
+ const {className, ...rest} = props;
+
+ const classes: string = clsx('oxygen-form-control', className);
+
+ return ;
+};
+
+FormControl.displayName = composeComponentDisplayName(COMPONENT_NAME);
+FormControl.muiName = COMPONENT_NAME;
+FormControl.defaultProps = {};
+
+export default FormControl;
diff --git a/packages/react/src/components/FormControl/__test__/FormControl.test.tsx b/packages/react/src/components/FormControl/__test__/FormControl.test.tsx
new file mode 100644
index 00000000..37ae54eb
--- /dev/null
+++ b/packages/react/src/components/FormControl/__test__/FormControl.test.tsx
@@ -0,0 +1,32 @@
+/**
+ * Copyright (c) 2023, WSO2 LLC. (https://www.wso2.com). All Rights Reserved.
+ *
+ * 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 FormControl from '../FormControl';
+
+describe('FormControl', () => {
+ 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/FormControl/__test__/__snapshots__/FormControl.test.tsx.snap b/packages/react/src/components/FormControl/__test__/__snapshots__/FormControl.test.tsx.snap
new file mode 100644
index 00000000..f370a7e9
--- /dev/null
+++ b/packages/react/src/components/FormControl/__test__/__snapshots__/FormControl.test.tsx.snap
@@ -0,0 +1,11 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`FormControl should match the snapshot 1`] = `
+
+
+
+
+
+`;
diff --git a/packages/react/src/components/FormControl/form-control.scss b/packages/react/src/components/FormControl/form-control.scss
new file mode 100644
index 00000000..e0f7c5b6
--- /dev/null
+++ b/packages/react/src/components/FormControl/form-control.scss
@@ -0,0 +1,21 @@
+/**
+ * Copyright (c) 2023, WSO2 LLC. (https://www.wso2.com). All Rights Reserved.
+ *
+ * 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.
+ */
+
+.oxygen-form-control {
+ /* Add Styles */
+}
diff --git a/packages/react/src/components/FormControl/index.ts b/packages/react/src/components/FormControl/index.ts
new file mode 100644
index 00000000..0b3076a3
--- /dev/null
+++ b/packages/react/src/components/FormControl/index.ts
@@ -0,0 +1,20 @@
+/**
+ * Copyright (c) 2023, WSO2 LLC. (https://www.wso2.com). All Rights Reserved.
+ *
+ * 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 './FormControl';
+export type {FormControlProps} from './FormControl';
diff --git a/packages/react/src/components/FormHelperText/FormHelperText.stories.mdx b/packages/react/src/components/FormHelperText/FormHelperText.stories.mdx
new file mode 100644
index 00000000..83c1ef2c
--- /dev/null
+++ b/packages/react/src/components/FormHelperText/FormHelperText.stories.mdx
@@ -0,0 +1,52 @@
+import {ArgsTable, Source, Story, Canvas, Meta} from '@storybook/addon-docs';
+import dedent from 'ts-dedent';
+import StoryConfig from '../../../.storybook/story-config.ts';
+import FormHelperText from './FormHelperText.tsx';
+
+export const meta = {
+ component: FormHelperText,
+ title: StoryConfig.FormHelperText.hierarchy,
+};
+
+
+
+export const Template = args =>
+
+# Form Helper Text
+
+- [Overview](#overview)
+- [Props](#props)
+- [Usage](#usage)
+
+## Overview
+
+Use `FormHelperText` to get data from the user.
+
+
+
+## Props
+
+
+
+## Usage
+
+Import and use the `FormHelperText` component in your components as follows.
+
+