diff --git a/aries-site/src/data/structures/tokens.js b/aries-site/src/data/structures/tokens.js
index 4fac5cb9f..68bde1aba 100644
--- a/aries-site/src/data/structures/tokens.js
+++ b/aries-site/src/data/structures/tokens.js
@@ -1,6 +1,7 @@
/* eslint-disable max-len */
import { Figma, Code, Book, Table } from 'grommet-icons';
import { Box, Text } from 'grommet';
+import { ButtonStates } from '../../examples';
export const tokens = [
{
@@ -38,6 +39,24 @@ export const tokens = [
],
tags: [],
},
+ {
+ name: 'Component states',
+ type: 'Getting started',
+ description:
+ 'The state of a component communicates feedback based on user interaction, system status, or both.',
+ preview: {
+ component: () => ,
+ },
+ seoDescription:
+ 'The state of a component communicates feedback based on user interaction, system status, or both.',
+ sections: [],
+ relatedContent: [
+ 'All design tokens',
+ 'Using design tokens in code',
+ 'Using design tokens in Figma',
+ ],
+ tags: [],
+ },
{
name: 'Element',
type: 'Getting started',
diff --git a/aries-site/src/examples/tokens/ComponentStates.js b/aries-site/src/examples/tokens/ComponentStates.js
new file mode 100644
index 000000000..5b9fad64e
--- /dev/null
+++ b/aries-site/src/examples/tokens/ComponentStates.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import styled from 'styled-components';
+import { global, components } from 'hpe-design-tokens';
+import { Box, Button, FormField, TextInput } from 'grommet';
+
+const HoverButton = styled(Button)`
+ background: ${components.hpe.button.primary.hover.background};
+`;
+
+const FocusButton = styled(Button)`
+ outline-color: ${props =>
+ props.theme.global.colors[
+ props.theme.global.colors[global.hpe.focusIndicator.outline.color]
+ ]};
+ outline-width: ${global.hpe.focusIndicator.outline.width};
+ outline-style: ${global.hpe.focusIndicator.outline.style};
+ outline-offset: ${global.hpe.focusIndicator.outlineOffset};
+`;
+
+// eslint-disable-next-line react/prop-types
+export const ButtonStates = ({ size, tabIndex }) => (
+
+
+
+
+
+);
+
+export const ComponentStates = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/aries-site/src/examples/tokens/index.js b/aries-site/src/examples/tokens/index.js
index 6ffcef5bd..28a52acdf 100644
--- a/aries-site/src/examples/tokens/index.js
+++ b/aries-site/src/examples/tokens/index.js
@@ -1,4 +1,5 @@
export * from './BetaNotification';
+export * from './ComponentStates';
export * from './TokenHighlight';
export * from './TokenTypes';
export * from './element';
diff --git a/aries-site/src/pages/design-tokens/component-states.mdx b/aries-site/src/pages/design-tokens/component-states.mdx
new file mode 100644
index 000000000..8159875b6
--- /dev/null
+++ b/aries-site/src/pages/design-tokens/component-states.mdx
@@ -0,0 +1,70 @@
+import { Checkmark } from 'grommet-icons';
+import { Notification } from 'grommet';
+import { Example } from '../../layouts';
+import { ComponentStates } from '../../examples';
+
+
+
+
+
+State gives confidence that an interaction has been registered, that a component can or cannot be interacted with, or that the system is in a particular state.
+
+Design tokens represent these states in a systematic, scalable way to ensure:
+
+- Predictable mapping of design tokens to components
+- Clarity for how the system should expand if new states are added
+
+## Interaction vs application state
+
+A component should be styled based on combination of application state and interaction state.
+
+| State type | Description |
+| --------------- | ------------------------------------------------------------------------------ |
+| **Interaction** | Direct result of user interaction (e.g., the user hovered over a button). |
+| **Application** | Result of the system (e.g., a input has been validated and there is an error). |
+
+
+
+See [validation state combinations](#supported-states) in the table below.
+
+### Interaction state naming
+
+Interaction states use the CSS pseudo-class terminology (hover, focus, active). For the “resting state” of the component, the term “rest” is used.
+
+### Application state naming
+
+Some application states correspond directly to CSS pseudo-classes (e.g., disabled), while others are named more generically to apply across components (e.g., “selected” can refer to a selected dropdown item or checked checkbox).
+
+Application states that have use cases within the design system are represented in the table below.
+
+## Supported states
+
+In this table, “interaction” states are represented as column headings and “application” states are the rows. Checked cells represent valid combinations.
+
+If two application states exist at once, the component should be styled based on the top-most row in the table. For example, if a component is both “readonly” and "selected", it should be styled as "readonly".
+
+
+
+| | rest | hover | focus | active | Notes |
+| ------------- | :-------------------------------------: | :-------------------------------------: | :-------------------------------------: | :-------------------------------------: | ------------------------- |
+| none | | | | | -- |
+| error | | | | | -- |
+| disabled | | -- | -- | -- | -- |
+| readonly | | -- | | -- | -- |
+| selected | | | | | -- |
+| indeterminate | | | | | Only applies to checkbox. |
+| pinned | | | | | -- |
+
+## Component-specific tokens
+
+For each component with [component-specific tokens](/design-tokens/how-to-read-design-tokens#component), the applicable state combinations are provided as design tokens.