) => (
+
+);
diff --git a/packages/react-components/react-field/src/stories/InputField/InputFieldDescription.md b/packages/react-components/react-field/src/stories/InputField/InputFieldDescription.md
new file mode 100644
index 00000000000000..71f31c59b2dac3
--- /dev/null
+++ b/packages/react-components/react-field/src/stories/InputField/InputFieldDescription.md
@@ -0,0 +1,3 @@
+InputField is a combination of Label, an Input, and validation and hint text.
+
+InputField does not handle input validation, but it does allow a validation message to be displayed.
diff --git a/packages/react-components/react-field/src/stories/InputField/InputFieldHint.stories.tsx b/packages/react-components/react-field/src/stories/InputField/InputFieldHint.stories.tsx
new file mode 100644
index 00000000000000..074c449d53f1bf
--- /dev/null
+++ b/packages/react-components/react-field/src/stories/InputField/InputFieldHint.stories.tsx
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { InputField } from '@fluentui/react-field';
+
+export const Hint = () => ;
+
+Hint.parameters = {
+ docs: {
+ description: {
+ story: 'Hint text provides additional descriptive information about the field',
+ },
+ },
+};
diff --git a/packages/react-components/react-field/src/stories/InputField/InputFieldHorizontal.stories.tsx b/packages/react-components/react-field/src/stories/InputField/InputFieldHorizontal.stories.tsx
new file mode 100644
index 00000000000000..fd6e9c66e1cbd7
--- /dev/null
+++ b/packages/react-components/react-field/src/stories/InputField/InputFieldHorizontal.stories.tsx
@@ -0,0 +1,40 @@
+import * as React from 'react';
+import { makeStyles, tokens } from '@fluentui/react-components';
+import { InputField } from '@fluentui/react-field';
+
+const useStyles = makeStyles({
+ stack: {
+ display: 'inline-grid',
+ rowGap: tokens.spacingVerticalM,
+ width: '400px',
+ },
+});
+
+export const Horizontal = () => {
+ const styles = useStyles();
+ return (
+
+
+
+
+
+
+ );
+};
+
+Horizontal.storyName = 'Field orientation: horizontal';
+Horizontal.parameters = {
+ docs: {
+ description: {
+ story:
+ 'The field can have a horizontal orientation. If multiple fields are stacked together and all the same ' +
+ 'width, the inputs will be vertically aligned as well.',
+ },
+ },
+};
diff --git a/packages/react-components/react-field/src/stories/InputField/InputFieldLabel.stories.tsx b/packages/react-components/react-field/src/stories/InputField/InputFieldLabel.stories.tsx
new file mode 100644
index 00000000000000..e943bf7f39d5ee
--- /dev/null
+++ b/packages/react-components/react-field/src/stories/InputField/InputFieldLabel.stories.tsx
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { InputField } from '@fluentui/react-field';
+
+export const Label = () => ;
+
+Label.parameters = {
+ docs: {
+ description: {
+ story: 'The field label is placed above the field component by default.',
+ },
+ },
+};
diff --git a/packages/react-components/react-field/src/stories/InputField/InputFieldRequired.stories.tsx b/packages/react-components/react-field/src/stories/InputField/InputFieldRequired.stories.tsx
new file mode 100644
index 00000000000000..2259f02bc7997a
--- /dev/null
+++ b/packages/react-components/react-field/src/stories/InputField/InputFieldRequired.stories.tsx
@@ -0,0 +1,14 @@
+import * as React from 'react';
+import { InputField } from '@fluentui/react-field';
+
+export const Required = () => ;
+
+Required.parameters = {
+ docs: {
+ description: {
+ story:
+ 'When a field is marked as `required`, the label has a red asterisk, ' +
+ 'and the input gets the required property for accessiblity tools.',
+ },
+ },
+};
diff --git a/packages/react-components/react-field/src/stories/InputField/InputFieldSize.stories.tsx b/packages/react-components/react-field/src/stories/InputField/InputFieldSize.stories.tsx
new file mode 100644
index 00000000000000..7ad08b50c362d7
--- /dev/null
+++ b/packages/react-components/react-field/src/stories/InputField/InputFieldSize.stories.tsx
@@ -0,0 +1,22 @@
+import * as React from 'react';
+import { makeStyles, tokens } from '@fluentui/react-components';
+import { InputField } from '@fluentui/react-field';
+
+const useStyles = makeStyles({
+ stack: {
+ display: 'inline-grid',
+ rowGap: tokens.spacingVerticalM,
+ width: '400px',
+ },
+});
+
+export const Size = () => {
+ const styles = useStyles();
+ return (
+
+
+
+
+
+ );
+};
diff --git a/packages/react-components/react-field/src/stories/InputField/InputFieldValidationState.stories.tsx b/packages/react-components/react-field/src/stories/InputField/InputFieldValidationState.stories.tsx
new file mode 100644
index 00000000000000..333666e2bed275
--- /dev/null
+++ b/packages/react-components/react-field/src/stories/InputField/InputFieldValidationState.stories.tsx
@@ -0,0 +1,57 @@
+import * as React from 'react';
+import { makeStyles, tokens } from '@fluentui/react-components';
+import { InputField } from '@fluentui/react-field';
+import { SparkleFilled } from '@fluentui/react-icons';
+
+const useStyles = makeStyles({
+ stack: {
+ display: 'inline-grid',
+ rowGap: tokens.spacingVerticalM,
+ width: '400px',
+ },
+});
+
+export const ValidationState = () => {
+ const styles = useStyles();
+ return (
+
+
+
+
+ }
+ validationMessage="This validation message has a custom icon"
+ orientation="horizontal"
+ />
+
+ );
+};
+
+ValidationState.parameters = {
+ docs: {
+ description: {
+ story:
+ 'The `validationState` property modifies the appearance of the validation message, and for some input types, ' +
+ 'an error validationState also applies visual indication such as a red border.' +
+ '
' +
+ 'Use the `validationMessage` property to display an associated message. ' +
+ 'You can optionally override the default icon with `validationMessageIcon`.',
+ },
+ },
+};
diff --git a/packages/react-components/react-field/src/stories/InputField/index.stories.tsx b/packages/react-components/react-field/src/stories/InputField/index.stories.tsx
new file mode 100644
index 00000000000000..046108475c631d
--- /dev/null
+++ b/packages/react-components/react-field/src/stories/InputField/index.stories.tsx
@@ -0,0 +1,24 @@
+import { InputField } from '@fluentui/react-field';
+
+import descriptionMd from './InputFieldDescription.md';
+import bestPracticesMd from './InputFieldBestPractices.md';
+
+export { Default } from './InputFieldDefault.stories';
+export { Label } from './InputFieldLabel.stories';
+export { Horizontal } from './InputFieldHorizontal.stories';
+export { Required } from './InputFieldRequired.stories';
+export { ValidationState } from './InputFieldValidationState.stories';
+export { Size } from './InputFieldSize.stories';
+export { Hint } from './InputFieldHint.stories';
+
+export default {
+ title: 'Components/Field/InputField',
+ component: InputField,
+ parameters: {
+ docs: {
+ description: {
+ component: [descriptionMd, bestPracticesMd].join('\n'),
+ },
+ },
+ },
+};