diff --git a/packages/components/src/_components/checkbox/checkbox.stories.ts b/packages/components/src/_components/checkbox/checkbox.stories.ts
deleted file mode 100644
index 8ef5c86d0..000000000
--- a/packages/components/src/_components/checkbox/checkbox.stories.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import '../../solid-components';
-import { storybookDefaults, storybookTemplate } from '../../../scripts/storybook/helper';
-import { withActions } from '@storybook/addon-actions/decorator';
-
-const { argTypes, args, parameters } = storybookDefaults('sd-checkbox');
-const { generateTemplate } = storybookTemplate('sd-checkbox');
-
-export default {
- title: 'Components/sd-checkbox',
- component: 'sd-checkbox',
- args,
- argTypes,
- parameters: {...parameters},
- decorators: [withActions] as any
-};
-
-
-/**
- * Default: This shows sd-checkbox in its default state.
- */
-
-export const Default = {
- render: (args: any) => {
- return generateTemplate({ args });
- }
-};
diff --git a/packages/components/src/_components/checkbox/checkbox.styles.ts b/packages/components/src/_components/checkbox/checkbox.styles.ts
deleted file mode 100644
index 2a59e6b43..000000000
--- a/packages/components/src/_components/checkbox/checkbox.styles.ts
+++ /dev/null
@@ -1,118 +0,0 @@
-import { css } from 'lit';
-import componentStyles from '../../styles/component.styles';
-
-export default css`
- ${componentStyles}
-
- :host {
- display: inline-block;
- }
-
- .checkbox {
- display: inline-flex;
- align-items: top;
- font-family: var(--sd-input-font-family);
- font-weight: var(--sd-input-font-weight);
- color: var(--sd-input-label-color);
- vertical-align: middle;
- cursor: pointer;
- }
-
- .checkbox--small {
- --toggle-size: var(--sd-toggle-size-small);
- font-size: var(--sd-input-font-size-small);
- }
-
- .checkbox--medium {
- --toggle-size: var(--sd-toggle-size-medium);
- font-size: var(--sd-input-font-size-medium);
- }
-
- .checkbox--large {
- --toggle-size: var(--sd-toggle-size-large);
- font-size: var(--sd-input-font-size-large);
- }
-
- .checkbox__control {
- flex: 0 0 auto;
- position: relative;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- width: var(--toggle-size);
- height: var(--toggle-size);
- border: solid var(--sd-input-border-width) var(--sd-input-border-color);
- border-radius: 2px;
- background-color: var(--sd-input-background-color);
- color: var(--sd-color-neutral-0);
- transition: var(--sd-transition-fast) border-color, var(--sd-transition-fast) background-color,
- var(--sd-transition-fast) color, var(--sd-transition-fast) box-shadow;
- }
-
- .checkbox__input {
- position: absolute;
- opacity: 0;
- padding: 0;
- margin: 0;
- pointer-events: none;
- }
-
- .checkbox__checked-icon,
- .checkbox__indeterminate-icon {
- display: inline-flex;
- width: var(--toggle-size);
- height: var(--toggle-size);
- }
-
- /* Hover */
- .checkbox:not(.checkbox--checked):not(.checkbox--disabled) .checkbox__control:hover {
- border-color: var(--sd-input-border-color-hover);
- background-color: var(--sd-input-background-color-hover);
- }
-
- /* Focus */
- .checkbox:not(.checkbox--checked):not(.checkbox--disabled) .checkbox__input:focus-visible ~ .checkbox__control {
- outline: var(--sd-focus-ring);
- outline-offset: var(--sd-focus-ring-offset);
- }
-
- /* Checked/indeterminate */
- .checkbox--checked .checkbox__control,
- .checkbox--indeterminate .checkbox__control {
- border-color: var(--sd-color-primary-600);
- background-color: var(--sd-color-primary-600);
- }
-
- /* Checked/indeterminate + hover */
- .checkbox.checkbox--checked:not(.checkbox--disabled) .checkbox__control:hover,
- .checkbox.checkbox--indeterminate:not(.checkbox--disabled) .checkbox__control:hover {
- border-color: var(--sd-color-primary-500);
- background-color: var(--sd-color-primary-500);
- }
-
- /* Checked/indeterminate + focus */
- .checkbox.checkbox--checked:not(.checkbox--disabled) .checkbox__input:focus-visible ~ .checkbox__control,
- .checkbox.checkbox--indeterminate:not(.checkbox--disabled) .checkbox__input:focus-visible ~ .checkbox__control {
- outline: var(--sd-focus-ring);
- outline-offset: var(--sd-focus-ring-offset);
- }
-
- /* Disabled */
- .checkbox--disabled {
- opacity: 0.5;
- cursor: not-allowed;
- }
-
- .checkbox__label {
- display: inline-block;
- color: var(--sd-input-label-color);
- line-height: var(--toggle-size);
- margin-inline-start: 0.5em;
- user-select: none;
- }
-
- :host([required]) .checkbox__label::after {
- content: var(--sd-input-required-content);
- margin-inline-start: var(--sd-input-required-content-offset);
- }
-`;
diff --git a/packages/components/src/components/checkbox-group/checkbox-group.stories.ts b/packages/components/src/components/checkbox-group/checkbox-group.stories.ts
new file mode 100644
index 000000000..4398174c7
--- /dev/null
+++ b/packages/components/src/components/checkbox-group/checkbox-group.stories.ts
@@ -0,0 +1,141 @@
+import '../../solid-components';
+import { html } from 'lit-html';
+import { storybookDefaults, storybookHelpers, storybookTemplate } from '../../../scripts/storybook/helper';
+import { userEvent } from '@storybook/testing-library';
+import { waitUntil } from '@open-wc/testing-helpers';
+
+const { argTypes, parameters } = storybookDefaults('sd-checkbox-group');
+const { generateTemplate } = storybookTemplate('sd-checkbox-group');
+const { overrideArgs } = storybookHelpers('sd-checkbox-group');
+
+export default {
+ title: 'Components/sd-checkbox-group',
+ component: 'sd-checkbox-group',
+ args: overrideArgs([
+ { type: 'slot', name: 'label', value: `` },
+ {
+ type: 'slot',
+ name: 'default',
+ value: `