diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx
index d7d37a71e7..0bc9fc5bac 100644
--- a/.storybook/preview.tsx
+++ b/.storybook/preview.tsx
@@ -101,6 +101,7 @@ const preview: Preview = {
},
options: {
storySort: {
+ method: "alphabetical",
order: ["Documentation", ["Introduction", "Colors", "Icons"], "Component Library"],
},
},
diff --git a/libs/components/src/avatar/avatar.mdx b/libs/components/src/avatar/avatar.mdx
new file mode 100644
index 0000000000..c6c5ff78ba
--- /dev/null
+++ b/libs/components/src/avatar/avatar.mdx
@@ -0,0 +1,67 @@
+import { Meta, Story, Primary, Controls } from "@storybook/addon-docs";
+
+import * as stories from "./avatar.stories";
+
+
+
+# Avatar
+
+Avatars display a unique color that helps a user visually recognize their logged in account.
+
+A variance in color across the avatar component is important as it is used in Account Switching as a
+visual indicator to recognize which of a personal or work account a user is logged into.
+
+
+
+
+## Size
+
+### Large: 64px
+
+
+
+### Default: 48px
+
+
+
+### Small 28px
+
+
+
+## Background color
+
+The Background color can be set 3 ways. The color is generated using the following order of
+priority:
+
+- Color
+- ID
+- Text, usually set to the user's Name field
+
+
+Use the user 'ID' field if `Name` is not defined.
+
+
+## Outline
+
+If the avatar is displayed on one of the theme's `background` color variables or is interactive,
+display the avatar with a 1 pixel `secondary-500` border to meet WCAG AA graphic contrast guidelines
+for interactive elements.
+
+
+
+## Avatar as a button
+
+The Avatar can be used as a button.
+
+Typically this is only in the navigation on client apps where account switching is used and in the
+web app for the account menu indicator.
+
+When the avatar is used as a button, the following states should be used:
+
+`TODO:` [Jira add stories](https://bitwarden.atlassian.net/browse/CL-101) for button avatars.
+[See Figma](https://www.figma.com/file/Zt3YSeb6E6lebAffrNLa0h/Tailwind-Component-Library?type=design&node-id=9730-31746&mode=design&t=IjDIHDb6FZl6bUQW-4)
+
+## Accessibility
+
+Avatar background color should have 3.1:1 contrast with it’s background; or include the
+`secondary-500` border Avatar text should have 4.5:1 contrast with the avatar background color
diff --git a/libs/components/src/badge/badge.mdx b/libs/components/src/badge/badge.mdx
new file mode 100644
index 0000000000..1c91944997
--- /dev/null
+++ b/libs/components/src/badge/badge.mdx
@@ -0,0 +1,67 @@
+import { Meta, Story, Primary, Controls } from "@storybook/addon-docs";
+
+import * as stories from "./badge.stories";
+
+
+
+# Badge
+
+The Badge directive can be used on a `` (non clickable events), or an `` or `` tag
+for interactive events. The Focus and Hover states only apply to badges used for interactive events.
+
+Typically Badges are only used with text set to `text-xs`. If additional sizes are needed, the
+component configurations may be reviewed and adjusted.
+
+
+
+
+## Styles
+
+### Primary
+
+The primary badge is used to indicate an active status (example: device management page) or provide
+additional information (example: type of emergency access granted).
+
+
+
+### Secondary
+
+The secondary badge style is typically is a default badge style. It is often used to indicate
+neutral information.
+
+
+
+### Success
+
+The success badge is used to indicate a positive status, OR to indicate a feature requires a Premium
+subscription. See [Premium Badge](?path=/docs/web-premium-badge--docs)
+
+
+
+### Danger
+
+The danger badge is used to indicate a negative status.
+
+
+
+### Warning
+
+The warning badge is used to indicate a status waiting on an additional action from the active user.
+
+
+
+### Info
+
+The info badge is used to indicate a low emphasis informative information.
+
+
+
+## Badges as counters
+
+Badges can be used as part of links or buttons to provide a counter. See the
+[Toggle Group](?path=/docs/component-library-toggle-group--docs) component.
+
+## Accessibility
+
+Be sure to use the correct html tag based on the purpose or function of the badge. Follow color WCAG
+color contrast guidelines for small text.
diff --git a/libs/components/src/banner/banner.mdx b/libs/components/src/banner/banner.mdx
index 84c71cde95..9f6aeb2aa7 100644
--- a/libs/components/src/banner/banner.mdx
+++ b/libs/components/src/banner/banner.mdx
@@ -10,7 +10,7 @@ Banners are used for important communication with the user that needs to be seen
little effect on the experience. Banners appear at the top of the user's screen on page load and
persist across all pages a user navigates to.
-- They should always be dismissable and never use a timeout. If a user dismisses a banner, it should
+- They should always be dismissible and never use a timeout. If a user dismisses a banner, it should
not reappear during that same active session.
- Use banners sparingly, as they can feel intrusive to the user if they appear unexpectedly. Their
effectiveness may decrease if too many are used.
diff --git a/libs/components/src/breadcrumbs/breadcrumbs.mdx b/libs/components/src/breadcrumbs/breadcrumbs.mdx
new file mode 100644
index 0000000000..9dd23c530d
--- /dev/null
+++ b/libs/components/src/breadcrumbs/breadcrumbs.mdx
@@ -0,0 +1,54 @@
+import { Meta, Story, Primary, Controls } from "@storybook/addon-docs";
+
+import * as stories from "./breadcrumbs.stories";
+
+
+
+# Breadcrumbs
+
+Breadcrumbs are used to help users understand where they are in a products navigation. Typically
+Bitwarden uses this component to indicate the user's current location in a set of data organized in
+containers (Collections, Folders, or Projects).
+
+
+
+
+## Display
+
+Breadcrumbs display above the page title. The current page should not appear as a breadcrumb link.
+See [Header with Breadcrumbs](?path=/story/web-header--with-breadcrumbs).
+
+### Top Level
+
+When a user is 1 level deep into a tree, the top level is displayed as a single link above the page
+title.
+
+
+
+### Second Level
+
+When a user is 2 or more levels deep into a tree, the top level is displayed followed by an
+
+ icon, and the following pages.
+
+
+
+### Overflow
+
+When a user is several levels deep into a tree, the top level or 2 are displayed followed by an
+
+ icon button, and then the page directly above the current page.
+
+When the user selects the icon button, a menu opens displaying
+the pages between the top level and the previous page.
+
+
+
+### Small screens
+
+If a screen's width is not large enough to display the full breadcrumb path, display a link to the
+previous page and an icon to take the user back to the previous
+page.
+
+`TODO:` [Jira add stories](https://bitwarden.atlassian.net/browse/CL-102) for responsive screen
+width/small screens
diff --git a/libs/components/src/button/button.mdx b/libs/components/src/button/button.mdx
index fddbda36fb..6dcbbbbfac 100644
--- a/libs/components/src/button/button.mdx
+++ b/libs/components/src/button/button.mdx
@@ -33,31 +33,6 @@ Groups within page content, dialog footers or forms should have the `primary` ca
to left. Groups in headers and navigational areas should have the `primary` call to action on the
right.
-## Accessibility
-
-Please follow these guidelines to ensure that buttons are accessible to all users.
-
-### Color contrast
-
-All button styles are WCAG compliant when displayed on `background` and `background-alt` colors. To
-use a button on a different background, double check that the color contrast is sufficient in both
-the light and dark themes.
-
-### Loading Buttons
-
-Include an `aria-label` attribute that defaults to “loading” but can be configurable per
-implementation. On click, the screen reader should announce the `aria-label`. Once the action is
-compelted, use another messaging pattern to alert the user that the action is complete (example:
-success toast).
-
-### Submit and async actions
-
-Both submit and async action buttons use a loading button state while an action is taken. If your
-button is preforming a long running task in the background like a server API call, be sure to review
-the [Async Actions Directive](?path=/story/component-library-async-actions-overview--page).
-
-
-
## Styles
There are 3 main styles for the button: Primary, Secondary, and Danger.
@@ -96,3 +71,39 @@ Typically button widths expand with their text. In some causes though buttons ma
where the width is fixed and the text wraps to 2 lines if exceeding the button’s width.
+
+## Accessibility
+
+Please follow these guidelines to ensure that buttons are accessible to all users.
+
+### Color contrast
+
+All button styles are WCAG compliant when displayed on `background` and `background-alt` colors. To
+use a button on a different background, double check that the color contrast is sufficient in both
+the light and dark themes.
+
+### Loading Buttons
+
+Include an `aria-label` attribute that defaults to "loading" but can be configurable per
+implementation. On click, the screen reader should announce the `aria-label`. Once the action is
+completed, use another messaging pattern to alert the user that the action is complete (example:
+success toast).
+
+### Submit and async actions
+
+Both submit and async action buttons use a loading button state while an action is taken. If your
+button is preforming a long running task in the background like a server API call, be sure to review
+the [Async Actions Directive](?path=/story/component-library-async-actions-overview--page).
+
+
+
+### appA11yTitle
+
+`appA11yTitle` is a directive that auto assigns the same string to the `title` and `aria-label`
+attributes.
+
+When a button uses accessible content (e.i. actual text), DO NOT include this as it adds redundant
+content for someone using assistive technology.
+
+`appA11yTitle` should only be used if the element it applies to does not include accessible text,
+e.i. an icon.
diff --git a/libs/components/src/callout/callout.mdx b/libs/components/src/callout/callout.mdx
new file mode 100644
index 0000000000..a40a970f89
--- /dev/null
+++ b/libs/components/src/callout/callout.mdx
@@ -0,0 +1,66 @@
+import { Meta, Story, Primary, Controls } from "@storybook/addon-docs";
+
+import * as stories from "./callout.stories";
+
+
+
+# Callouts
+
+Callouts are used to communicate important information to the user. Callouts should be used
+sparingly, as they command a large amount of visual attention. Avoid using more than 1 callout in
+the same location.
+
+## Styles
+
+Icons should remain consistent across these types. Do not change the icon without consulting a
+designer. Use the following guidelines to help choose the correct type of callout.
+
+### Success
+
+Use the success callout to communicate a positive messaging to the user.
+
+**Example:** a positive report results shows a success callout.
+
+The success callout may also be used for the information related to a premium membership. In this
+case, replace the icon with
+
+
+
+### Info
+
+Use an info callout to call attention to important information the user should be aware of, but has
+low risk of the user receiving and unintended or irreversible results if they do not read the
+information.
+
+**Example:** in the Domain Claiming modal, an info callout is used to tell the user the domain will
+automatically be checked.
+
+
+
+### Warning
+
+Use a warning callout if the user is about to perform an action that may have unintended or
+irreversible results.
+
+**Example:** the warning callout is used before the change master password and encryption key form
+to alert the user that they will be logged out.
+
+
+
+### Danger
+
+Use the danger callout to communicate an action the user is about to take is dangerous and typically
+not reversible.
+
+The danger callout can also be used to alert the user of an error or errors, such as a server side
+errors after form submit or failed communication request.
+
+
+
+## Accessibility
+
+Use the `role=”alert”` only if the callout is appearing on a page after the user takes an action. If
+the content is static, do not use the alert role. This will cause a screen reader to announce the
+callout content on page load.
+
+Ensure the title's color contrast remains WCAG compliant with the callout's background.
diff --git a/libs/components/src/color-password/color-password.mdx b/libs/components/src/color-password/color-password.mdx
new file mode 100644
index 0000000000..d01c81b007
--- /dev/null
+++ b/libs/components/src/color-password/color-password.mdx
@@ -0,0 +1,34 @@
+import { Meta, Story, Primary, Controls } from "@storybook/addon-docs";
+
+import * as stories from "./color-password.stories";
+
+
+
+# Color password
+
+The color password is used primarily in the Generator pages and in the Login type form. It includes
+the logic for displaying letters as `text-main`, numbers as `primary`, and special symbols as
+`danger`.
+
+
+
+
+## Password Count
+
+The password count option is used in the Login type form. It is used to highlight each character's
+position in the password string.
+
+
+
+## Wrapped Password
+
+When the password length is longer than the container's width, it should wrap as shown below.
+
+
+
+
+
+## Accessibility
+
+The colors used in the colored password should maintain WCAG compliant contrast with theme
+`background` and `background-alt` colors.
diff --git a/libs/components/src/dialog/dialog/dialog.mdx b/libs/components/src/dialog/dialog/dialog.mdx
new file mode 100644
index 0000000000..f1f7692d4c
--- /dev/null
+++ b/libs/components/src/dialog/dialog/dialog.mdx
@@ -0,0 +1,73 @@
+import { Meta, Story, Primary, Controls } from "@storybook/addon-docs";
+
+import * as stories from "./dialog.stories";
+
+
+
+# Dialog
+
+Dialogs are used throughout the app to help the user focus on a specific action. Use this dialog
+component when content exceeds 384px width or there are a high number of interactive elements
+needed. **Example:** The web app's edit vault item form dialog
+
+For alerts or simple confirmation actions, like speedbumps, use the
+[Simple Dialog](?path=/docs/component-library-dialogs-simple-dialog--docs).
+
+Dialogs's should be used sparingly as they do call extra attention to themselves and can be
+interruptive if overused.
+
+
+
+
+## Size
+
+There are 3 main dialog sizes:
+
+### Large
+
+Use the large size for dialogs that have many interactive elements or tabbed content.
+
+**Tailwind styling:**
+
+`max-w-3xl` 48rem
+
+
+
+### Default
+
+Use the Default size for most dialogs that require some content and a few interactive elements.
+**Example:** master password confirmation dialog
+
+**Tailwind styling:**
+
+`max-w-xl` 36rem
+
+
+
+### Small
+
+**Tailwind styling:**
+
+`max-w-sm` 24rem
+
+
+
+## Long Title
+
+If a dialog's title is too long to fully display. It should be truncated and on hover shown in a
+tooltip.
+
+
+
+## Loading
+
+Similar to a page loading state, a Dialog that takes more than a few seconds to load should use a
+loading state.
+
+
+
+## Tab Content
+
+Use tabs to separate related content within a dialog.
+
+
diff --git a/libs/components/src/dialog/dialogs.mdx b/libs/components/src/dialog/dialogs.mdx
new file mode 100644
index 0000000000..8ff46ad381
--- /dev/null
+++ b/libs/components/src/dialog/dialogs.mdx
@@ -0,0 +1,56 @@
+import { Meta, Story, Source } from "@storybook/addon-docs";
+
+
+
+# Dialog
+
+Dialogs are used throughout the app to help the user focus on a specific action.
+
+Use the main [Dialog Component](?path=/docs/component-library-dialogs-dialog--docs). when content
+exceeds 384px width or there are a high number of interactive elements needed. **Example:** The web
+app's edit vault item form dialog
+
+For alerts or simple confirmation actions, like speedbumps, use the
+[Simple Dialog](?path=/docs/component-library-dialogs-simple-dialog--docs).
+
+Dialogs's should be used sparingly as they do call extra attention to themselves and can be
+interruptive if overused.
+
+## Placement
+
+Dialogs should be centered vertically and horizontally on screen. Dialogs height should expand to
+fit its content until there are 2rems of margin on the top/bottom of the dialog; in this case, the
+dialog should become scrollable.
+
+A backdrop should be used to hide the content below the dialog. Use `#000000` with `30% opacity`.
+
+
+
+## Accessibility
+
+### Component behavior
+
+- Dialog include `role="dialog"`
+- The Dialog title is an `