@charcuterie/ui 4.5.0 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/dist/Card/Card.d.ts +5 -2
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +23 -3
- package/dist/Card/Card.js.map +1 -1
- package/dist/Overlay/OverlayPanel.d.ts.map +1 -1
- package/dist/Overlay/OverlayPanel.js +54 -2
- package/dist/Overlay/OverlayPanel.js.map +1 -1
- package/dist/Overlay/OverlayStack.d.ts +5 -0
- package/dist/Overlay/OverlayStack.d.ts.map +1 -1
- package/dist/Overlay/OverlayStack.js +2 -0
- package/dist/Overlay/OverlayStack.js.map +1 -1
- package/dist/Toast/ToastRegion.d.ts +61 -0
- package/dist/Toast/ToastRegion.d.ts.map +1 -1
- package/dist/Toast/ToastRegion.js +80 -3
- package/dist/Toast/ToastRegion.js.map +1 -1
- package/dist/Toolbar/useToolbarOverflow.d.ts.map +1 -1
- package/dist/Toolbar/useToolbarOverflow.js +39 -0
- package/dist/Toolbar/useToolbarOverflow.js.map +1 -1
- package/package.json +3 -2
- package/src/Accordion/Accordion.mdx +1 -1
- package/src/Accordion/Accordion.stories.tsx +3 -1
- package/src/Accordion/Accordion.test.tsx +4 -4
- package/src/ActionTiles/ActionTiles.mdx +1 -1
- package/src/ActionTiles/ActionTiles.stories.tsx +3 -1
- package/src/ActionTiles/ActionTiles.test.tsx +3 -3
- package/src/AdaptiveGrid/AdaptiveGrid.mdx +1 -1
- package/src/AdaptiveGrid/AdaptiveGrid.stories.tsx +3 -1
- package/src/AdaptiveGrid/AdaptiveGrid.test.tsx +5 -5
- package/src/Alert/Alert.mdx +1 -1
- package/src/Alert/Alert.stories.tsx +3 -1
- package/src/Alert/Alert.test.tsx +2 -2
- package/src/Avatar/Avatar.mdx +1 -1
- package/src/Avatar/Avatar.stories.tsx +4 -1
- package/src/Avatar/Avatar.test.tsx +2 -2
- package/src/Badge/Badge.mdx +1 -1
- package/src/Badge/Badge.stories.tsx +3 -1
- package/src/Badge/Badge.test.tsx +3 -3
- package/src/BadgeButton/BadgeButton.mdx +1 -1
- package/src/BadgeButton/BadgeButton.stories.tsx +3 -1
- package/src/BadgeButton/BadgeButton.test.tsx +2 -2
- package/src/Board/Board.mdx +1 -1
- package/src/Board/Board.stories.tsx +4 -1
- package/src/Board/Board.test.tsx +2 -2
- package/src/Button/Button.mdx +1 -1
- package/src/Button/Button.stories.tsx +3 -1
- package/src/Button/Button.test.tsx +2 -2
- package/src/ButtonLink/ButtonLink.mdx +1 -1
- package/src/ButtonLink/ButtonLink.stories.tsx +3 -1
- package/src/ButtonLink/ButtonLink.test.tsx +3 -3
- package/src/Card/Card.mdx +21 -1
- package/src/Card/Card.stories.tsx +91 -1
- package/src/Card/Card.test.tsx +60 -3
- package/src/Card/Card.tsx +24 -2
- package/src/Checkbox/Checkbox.mdx +1 -1
- package/src/Checkbox/Checkbox.stories.tsx +3 -1
- package/src/Checkbox/Checkbox.test.tsx +4 -4
- package/src/ColorSchemeSwitcher/ColorSchemeSwitcher.mdx +1 -1
- package/src/ColorSchemeSwitcher/ColorSchemeSwitcher.stories.tsx +3 -1
- package/src/ColorSchemeSwitcher/ColorSchemeSwitcher.test.tsx +5 -5
- package/src/ColorSchemeToggle/ColorSchemeToggle.mdx +1 -1
- package/src/ColorSchemeToggle/ColorSchemeToggle.stories.tsx +3 -1
- package/src/ColorSchemeToggle/ColorSchemeToggle.test.tsx +5 -5
- package/src/Combobox/Combobox.mdx +1 -1
- package/src/Combobox/Combobox.stories.tsx +3 -1
- package/src/Combobox/Combobox.test.tsx +2 -2
- package/src/CopyButton/CopyButton.mdx +1 -1
- package/src/CopyButton/CopyButton.stories.tsx +4 -1
- package/src/CopyButton/CopyButton.test.tsx +3 -3
- package/src/DataTable/DataTable.mdx +1 -1
- package/src/DataTable/DataTable.stories.tsx +3 -1
- package/src/DataTable/DataTable.test.tsx +3 -3
- package/src/DatePicker/DatePicker.mdx +1 -1
- package/src/DatePicker/DatePicker.stories.tsx +3 -1
- package/src/DatePicker/DatePicker.test.tsx +3 -3
- package/src/DatePicker/plainDate.test.ts +21 -3
- package/src/Dialog/Dialog.mdx +1 -1
- package/src/Dialog/Dialog.stories.tsx +3 -1
- package/src/Dialog/Dialog.test.tsx +2 -2
- package/src/DropRail/DropRail.mdx +1 -1
- package/src/DropRail/DropRail.stories.tsx +4 -1
- package/src/DropRail/DropRail.test.tsx +4 -4
- package/src/EmptyState/EmptyState.mdx +1 -1
- package/src/EmptyState/EmptyState.stories.tsx +3 -1
- package/src/EmptyState/EmptyState.test.tsx +2 -2
- package/src/Field/Field.mdx +1 -1
- package/src/Field/Field.stories.tsx +3 -1
- package/src/Field/Field.test.tsx +4 -4
- package/src/FileDropZone/FileDropZone.mdx +1 -1
- package/src/FileDropZone/FileDropZone.stories.tsx +3 -1
- package/src/FileDropZone/FileDropZone.test.tsx +3 -3
- package/src/Header/Header.mdx +1 -1
- package/src/Header/Header.stories.tsx +3 -1
- package/src/IconButton/IconButton.mdx +1 -1
- package/src/IconButton/IconButton.stories.tsx +3 -1
- package/src/IconButton/IconButton.test.tsx +2 -2
- package/src/Lightbox/Lightbox.mdx +1 -1
- package/src/Lightbox/Lightbox.stories.tsx +3 -1
- package/src/Lightbox/Lightbox.test.tsx +2 -2
- package/src/Listbox/Listbox.mdx +1 -1
- package/src/Listbox/Listbox.stories.tsx +3 -1
- package/src/Listbox/Listbox.test.tsx +5 -5
- package/src/LiveStatusIndicator/LiveStatusIndicator.mdx +1 -1
- package/src/LiveStatusIndicator/LiveStatusIndicator.stories.tsx +3 -1
- package/src/LiveStatusIndicator/LiveStatusIndicator.test.tsx +2 -2
- package/src/LogViewer/LogViewer.mdx +1 -1
- package/src/LogViewer/LogViewer.stories.tsx +3 -1
- package/src/LogViewer/LogViewer.test.tsx +2 -2
- package/src/Main/Main.mdx +1 -1
- package/src/Main/Main.stories.tsx +3 -1
- package/src/Main/Main.test.tsx +3 -3
- package/src/MarkdownEditor/MarkdownEditor.mdx +1 -1
- package/src/MarkdownEditor/MarkdownEditor.stories.tsx +3 -1
- package/src/MarkdownEditor/MarkdownEditor.test.tsx +4 -4
- package/src/MarkdownLine/MarkdownLine.mdx +1 -1
- package/src/MarkdownLine/MarkdownLine.stories.tsx +4 -1
- package/src/MarkdownLine/MarkdownLine.test.tsx +3 -3
- package/src/MediaTile/MediaTile.stories.tsx +3 -1
- package/src/MediaTile/MediaTile.test.tsx +2 -2
- package/src/Menu/Menu.mdx +1 -1
- package/src/Menu/Menu.stories.tsx +3 -1
- package/src/Modal/Modal.mdx +1 -1
- package/src/Modal/Modal.stories.tsx +3 -1
- package/src/Modal/Modal.test.tsx +3 -3
- package/src/Nav/Nav.mdx +1 -1
- package/src/Nav/Nav.stories.tsx +3 -1
- package/src/Nav/Nav.test.tsx +6 -6
- package/src/NavBar/NavBar.mdx +1 -1
- package/src/NavBar/NavBar.stories.tsx +3 -1
- package/src/NavBar/NavBar.test.tsx +3 -3
- package/src/Overlay/OverlayPanel.tsx +63 -2
- package/src/Overlay/OverlayStack.tsx +7 -1
- package/src/Picker/Picker.mdx +1 -1
- package/src/Picker/Picker.stories.tsx +3 -1
- package/src/Picker/Picker.test.tsx +2 -2
- package/src/Popover/Popover.mdx +1 -1
- package/src/Popover/Popover.stories.tsx +3 -1
- package/src/Popover/Popover.test.tsx +2 -2
- package/src/PortraitTiles/PortraitTiles.mdx +1 -1
- package/src/PortraitTiles/PortraitTiles.stories.tsx +3 -1
- package/src/PortraitTiles/PortraitTiles.test.tsx +5 -5
- package/src/ProgressBar/ProgressBar.mdx +1 -1
- package/src/ProgressBar/ProgressBar.stories.tsx +3 -1
- package/src/ProgressBar/ProgressBar.test.tsx +2 -2
- package/src/QueryBuilder/QueryBuilder.mdx +1 -1
- package/src/QueryBuilder/QueryBuilder.stories.tsx +3 -1
- package/src/QueryBuilder/QueryBuilder.test.tsx +2 -2
- package/src/RadioGroup/RadioGroup.mdx +1 -1
- package/src/RadioGroup/RadioGroup.stories.tsx +3 -1
- package/src/RadioGroup/RadioGroup.test.tsx +2 -2
- package/src/Rail/Rail.mdx +1 -1
- package/src/Rail/Rail.stories.tsx +3 -1
- package/src/Rail/Rail.test.tsx +2 -2
- package/src/RangeSlider/RangeSlider.mdx +1 -1
- package/src/RangeSlider/RangeSlider.stories.tsx +3 -1
- package/src/RangeSlider/RangeSlider.test.tsx +7 -3
- package/src/ReorderList/ReorderList.mdx +1 -1
- package/src/ReorderList/ReorderList.stories.tsx +3 -1
- package/src/ReorderList/ReorderList.test.tsx +7 -7
- package/src/RouterLink/UnstyledLink.stories.tsx +4 -1
- package/src/RouterLink/UnstyledLink.test.tsx +2 -2
- package/src/SearchInput/SearchInput.mdx +1 -1
- package/src/SearchInput/SearchInput.stories.tsx +3 -1
- package/src/SegmentedControl/SegmentedControl.mdx +1 -1
- package/src/SegmentedControl/SegmentedControl.stories.tsx +3 -1
- package/src/SegmentedControl/SegmentedControl.test.tsx +2 -2
- package/src/Select/Select.mdx +1 -1
- package/src/Select/Select.stories.tsx +3 -1
- package/src/Select/Select.test.tsx +4 -4
- package/src/Shell/Shell.mdx +1 -1
- package/src/Shell/Shell.stories.tsx +3 -1
- package/src/Shell/Shell.test.tsx +2 -2
- package/src/Skeleton/Skeleton.mdx +1 -1
- package/src/Skeleton/Skeleton.stories.tsx +3 -1
- package/src/Skeleton/Skeleton.test.tsx +2 -2
- package/src/Slider/Slider.mdx +1 -1
- package/src/Slider/Slider.stories.tsx +3 -1
- package/src/Slider/Slider.test.tsx +2 -2
- package/src/SortableTableHeader/SortableTableHeader.mdx +1 -1
- package/src/SortableTableHeader/SortableTableHeader.stories.tsx +3 -1
- package/src/SortableTableHeader/SortableTableHeader.test.tsx +3 -3
- package/src/Spinner/Spinner.mdx +1 -1
- package/src/Spinner/Spinner.stories.tsx +3 -1
- package/src/Spinner/Spinner.test.tsx +2 -2
- package/src/Stepper/Stepper.mdx +1 -1
- package/src/Stepper/Stepper.stories.tsx +4 -1
- package/src/Stepper/Stepper.test.tsx +7 -7
- package/src/Swatch/Swatch.mdx +1 -1
- package/src/Swatch/Swatch.stories.tsx +4 -1
- package/src/Swatch/Swatch.test.tsx +3 -3
- package/src/Switch/Switch.mdx +1 -1
- package/src/Switch/Switch.stories.tsx +3 -1
- package/src/Switch/Switch.test.tsx +2 -2
- package/src/Tabs/Tabs.mdx +1 -1
- package/src/Tabs/Tabs.stories.tsx +3 -1
- package/src/Tabs/Tabs.test.tsx +3 -3
- package/src/TextLink/TextLink.mdx +1 -1
- package/src/TextLink/TextLink.stories.tsx +3 -1
- package/src/TextLink/TextLink.test.tsx +4 -4
- package/src/TimecodeInput/TimecodeInput.mdx +1 -1
- package/src/TimecodeInput/TimecodeInput.stories.tsx +3 -1
- package/src/Toast/Toast.mdx +1 -1
- package/src/Toast/Toast.stories.tsx +157 -1
- package/src/Toast/Toast.test.tsx +2 -2
- package/src/Toast/ToastRegion.test.tsx +172 -0
- package/src/Toast/ToastRegion.tsx +120 -32
- package/src/Toolbar/Toolbar.mdx +1 -1
- package/src/Toolbar/Toolbar.stories.tsx +3 -1
- package/src/Toolbar/Toolbar.test.tsx +89 -5
- package/src/Toolbar/useToolbarOverflow.ts +43 -0
- package/src/Tooltip/Tooltip.mdx +1 -1
- package/src/Tooltip/Tooltip.stories.tsx +3 -1
- package/src/Tooltip/Tooltip.test.tsx +2 -2
- package/src/VirtualizedGrid/VirtualizedGrid.mdx +1 -1
- package/src/VirtualizedGrid/VirtualizedGrid.stories.tsx +4 -1
- package/src/VirtualizedGrid/VirtualizedGrid.test.tsx +5 -5
- package/src/VisuallyHidden/VisuallyHidden.mdx +1 -1
- package/src/VisuallyHidden/VisuallyHidden.stories.tsx +3 -1
- package/src/markdownEditorCodeMirror/MarkdownEditorCodeMirror.mdx +1 -1
- package/src/markdownEditorCodeMirror/MarkdownEditorCodeMirror.stories.tsx +3 -1
- package/src/markdownEditorCodeMirror/MarkdownEditorCodeMirror.test.tsx +3 -3
- package/src/markdownEditorCodeMirror/MarkdownView.mdx +1 -1
- package/src/markdownEditorCodeMirror/MarkdownView.stories.tsx +4 -1
- package/src/markdownEditorCodeMirror/MarkdownView.test.tsx +44 -20
- package/src/reactRouter/ReactRouterAdapter.stories.tsx +3 -1
- package/src/reactRouter/ReactRouterAdapter.test.tsx +2 -2
|
@@ -10,7 +10,7 @@ import { expectNoAxeViolations } from "../expectNoAxeViolations.testHelpers.ts"
|
|
|
10
10
|
import { mountStory } from "../mountStory.testHelpers.ts"
|
|
11
11
|
import * as stories from "./ReorderList.stories.tsx"
|
|
12
12
|
|
|
13
|
-
const {
|
|
13
|
+
const { Playground, SingleItem } = composeStories(stories)
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* The rows come back in the DOM order the list draws them, which is
|
|
@@ -25,7 +25,7 @@ const getRowLabels = (canvas: ReturnType<typeof within>) =>
|
|
|
25
25
|
.filter((text: string) => text !== "")
|
|
26
26
|
|
|
27
27
|
test("moves a row later with the button, and says where it went", async () => {
|
|
28
|
-
const { canvas } = await mountStory(
|
|
28
|
+
const { canvas } = await mountStory(Playground)
|
|
29
29
|
|
|
30
30
|
await userEvent.click(
|
|
31
31
|
canvas.getByRole("button", {
|
|
@@ -56,7 +56,7 @@ test("moves a row later with the button, and says where it went", async () => {
|
|
|
56
56
|
})
|
|
57
57
|
|
|
58
58
|
test("moves a row earlier, and the ends stay disabled", async () => {
|
|
59
|
-
const { canvas } = await mountStory(
|
|
59
|
+
const { canvas } = await mountStory(Playground)
|
|
60
60
|
|
|
61
61
|
expect(
|
|
62
62
|
canvas.getByRole("button", {
|
|
@@ -93,7 +93,7 @@ test("a one-row list offers no drag handle", async () => {
|
|
|
93
93
|
})
|
|
94
94
|
|
|
95
95
|
test("the handle takes the gesture away from the browser's scroll", async () => {
|
|
96
|
-
const { canvas } = await mountStory(
|
|
96
|
+
const { canvas } = await mountStory(Playground)
|
|
97
97
|
|
|
98
98
|
const grip = canvas.getAllByTitle("Drag to reorder")[0]
|
|
99
99
|
|
|
@@ -118,7 +118,7 @@ test("the handle takes the gesture away from the browser's scroll", async () =>
|
|
|
118
118
|
* passes or fails for a reason the component does not have.
|
|
119
119
|
*/
|
|
120
120
|
test("drags a row past the one below it", async () => {
|
|
121
|
-
const { canvas } = await mountStory(
|
|
121
|
+
const { canvas } = await mountStory(Playground)
|
|
122
122
|
|
|
123
123
|
const grip = canvas.getAllByTitle("Drag to reorder")[0]
|
|
124
124
|
|
|
@@ -159,7 +159,7 @@ test("drags a row past the one below it", async () => {
|
|
|
159
159
|
* and every stray tap on a row reorders the list.
|
|
160
160
|
*/
|
|
161
161
|
test("a press with no movement reorders nothing", async () => {
|
|
162
|
-
const { canvas } = await mountStory(
|
|
162
|
+
const { canvas } = await mountStory(Playground)
|
|
163
163
|
|
|
164
164
|
const grip = canvas.getAllByTitle("Drag to reorder")[0]
|
|
165
165
|
|
|
@@ -184,7 +184,7 @@ test("a press with no movement reorders nothing", async () => {
|
|
|
184
184
|
})
|
|
185
185
|
|
|
186
186
|
test("has no axe violations", async () => {
|
|
187
|
-
const { canvasElement } = await mountStory(
|
|
187
|
+
const { canvasElement } = await mountStory(Playground)
|
|
188
188
|
|
|
189
189
|
await expectNoAxeViolations(canvasElement)
|
|
190
190
|
})
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
import type { ReactNode } from "react"
|
|
3
4
|
|
|
@@ -28,7 +29,9 @@ export default meta
|
|
|
28
29
|
|
|
29
30
|
type Story = StoryObj<typeof meta>
|
|
30
31
|
|
|
31
|
-
export const
|
|
32
|
+
export const Playground: Story = {
|
|
33
|
+
parameters: playgroundParameters,
|
|
34
|
+
}
|
|
32
35
|
|
|
33
36
|
export const Routed: Story = {
|
|
34
37
|
decorators: [
|
|
@@ -6,10 +6,10 @@ import { mountStory } from "../mountStory.testHelpers.ts"
|
|
|
6
6
|
import { expectAgentDrivable } from "../testing/index.ts"
|
|
7
7
|
import * as stories from "./UnstyledLink.stories.tsx"
|
|
8
8
|
|
|
9
|
-
const {
|
|
9
|
+
const { Playground, Routed } = composeStories(stories)
|
|
10
10
|
|
|
11
11
|
test("keeps the caller's paint and works without a router", async () => {
|
|
12
|
-
const { canvas } = await mountStory(
|
|
12
|
+
const { canvas } = await mountStory(Playground)
|
|
13
13
|
const link = expectAgentDrivable(canvas, {
|
|
14
14
|
name: "Jobs",
|
|
15
15
|
role: "link",
|
|
@@ -15,4 +15,4 @@ because the clear button is a primary pointer target rather than a compact toolb
|
|
|
15
15
|
Use `Field` for a visible label, or pass `aria-label` when the surrounding layout already
|
|
16
16
|
names the search.
|
|
17
17
|
|
|
18
|
-
<Canvas of={Stories.
|
|
18
|
+
<Canvas of={Stories.Playground} />
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
import { useState } from "react"
|
|
3
4
|
|
|
@@ -61,7 +62,8 @@ const meta = {
|
|
|
61
62
|
export default meta
|
|
62
63
|
type Story = StoryObj<typeof meta>
|
|
63
64
|
|
|
64
|
-
export const
|
|
65
|
+
export const Playground: Story = {
|
|
66
|
+
parameters: playgroundParameters,
|
|
65
67
|
render: () => <ControlledSearch />,
|
|
66
68
|
}
|
|
67
69
|
|
|
@@ -15,7 +15,7 @@ something without revealing anything had nothing to reuse and hand-rolled its ow
|
|
|
15
15
|
rip-deck's `ColumnPicker` is that hand-roll
|
|
16
16
|
([decision](../../../docs/decisions/2026-07-30-tab-selection-is-a-single-picker.md)).
|
|
17
17
|
|
|
18
|
-
<Canvas of={SegmentedControlStories.
|
|
18
|
+
<Canvas of={SegmentedControlStories.Playground} />
|
|
19
19
|
|
|
20
20
|
## Props
|
|
21
21
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
|
|
3
4
|
import { controlSizeArgType } from "../argTypes.storyHelpers.ts"
|
|
@@ -38,7 +39,8 @@ export default meta
|
|
|
38
39
|
|
|
39
40
|
type Story = StoryObj<typeof meta>
|
|
40
41
|
|
|
41
|
-
export const
|
|
42
|
+
export const Playground: Story = {
|
|
43
|
+
parameters: playgroundParameters,
|
|
42
44
|
args: { items: COLUMN_ITEMS, label: "Columns" },
|
|
43
45
|
}
|
|
44
46
|
|
|
@@ -7,7 +7,7 @@ import { mountStory } from "../mountStory.testHelpers.ts"
|
|
|
7
7
|
import { expectAgentDrivable } from "../testing/index.ts"
|
|
8
8
|
import * as stories from "./SegmentedControl.stories.tsx"
|
|
9
9
|
|
|
10
|
-
const { AllStates,
|
|
10
|
+
const { AllStates, Playground, FullWidth, Interactive } =
|
|
11
11
|
composeStories(stories)
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -25,7 +25,7 @@ const getOptions = (group: HTMLElement) =>
|
|
|
25
25
|
|
|
26
26
|
test("it is a radio group with exactly one option checked", async () => {
|
|
27
27
|
const { canvas, canvasElement } =
|
|
28
|
-
await mountStory(
|
|
28
|
+
await mountStory(Playground)
|
|
29
29
|
|
|
30
30
|
const group = expectAgentDrivable(canvas, {
|
|
31
31
|
name: "Columns",
|
package/src/Select/Select.mdx
CHANGED
|
@@ -37,7 +37,7 @@ that differ only in their Tailwind classes, and **six hand-rolled `role="listbox
|
|
|
37
37
|
controls**. This component is the first twelve. The other six are a different pattern —
|
|
38
38
|
see below.
|
|
39
39
|
|
|
40
|
-
<Canvas of={SelectStories.
|
|
40
|
+
<Canvas of={SelectStories.Playground} />
|
|
41
41
|
|
|
42
42
|
## Props
|
|
43
43
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
|
|
3
4
|
import { controlSizeArgType } from "../argTypes.storyHelpers.ts"
|
|
@@ -72,7 +73,8 @@ export default meta
|
|
|
72
73
|
|
|
73
74
|
type Story = StoryObj<typeof meta>
|
|
74
75
|
|
|
75
|
-
export const
|
|
76
|
+
export const Playground: Story = {
|
|
77
|
+
parameters: playgroundParameters,
|
|
76
78
|
args: { label: "Rip profile", options: PROFILES },
|
|
77
79
|
}
|
|
78
80
|
|
|
@@ -7,12 +7,12 @@ import { mountStory } from "../mountStory.testHelpers.ts"
|
|
|
7
7
|
import { expectAgentDrivable } from "../testing/index.ts"
|
|
8
8
|
import * as stories from "./Select.stories.tsx"
|
|
9
9
|
|
|
10
|
-
const { AllStates, AllVariants,
|
|
10
|
+
const { AllStates, AllVariants, Playground, Sized } =
|
|
11
11
|
composeStories(stories)
|
|
12
12
|
|
|
13
13
|
test("a select is named, and therefore findable", async () => {
|
|
14
14
|
const { canvas, canvasElement } =
|
|
15
|
-
await mountStory(
|
|
15
|
+
await mountStory(Playground)
|
|
16
16
|
|
|
17
17
|
// Twelve of the fleet's fourteen native selects have neither a
|
|
18
18
|
// `<label for>` nor an `aria-label`, so this query returns nothing
|
|
@@ -26,7 +26,7 @@ test("a select is named, and therefore findable", async () => {
|
|
|
26
26
|
})
|
|
27
27
|
|
|
28
28
|
test("choosing reports the value outward", async () => {
|
|
29
|
-
const { canvas } = await mountStory(
|
|
29
|
+
const { canvas } = await mountStory(Playground)
|
|
30
30
|
|
|
31
31
|
const select = expectAgentDrivable(canvas, {
|
|
32
32
|
name: "Rip profile",
|
|
@@ -64,7 +64,7 @@ test("the initial value seeds the DOM and nothing more", async () => {
|
|
|
64
64
|
})
|
|
65
65
|
|
|
66
66
|
test("a disabled option stays announced", async () => {
|
|
67
|
-
const { canvas } = await mountStory(
|
|
67
|
+
const { canvas } = await mountStory(Playground)
|
|
68
68
|
|
|
69
69
|
const select = expectAgentDrivable(canvas, {
|
|
70
70
|
name: "Rip profile",
|
package/src/Shell/Shell.mdx
CHANGED
|
@@ -23,7 +23,7 @@ The owner's ask, verbatim:
|
|
|
23
23
|
> "We need a header component. Apps are all doing it differently, and there's no
|
|
24
24
|
> standardized way to do a sticky header + narrow view... A Unified App Shell basically."
|
|
25
25
|
|
|
26
|
-
<Canvas of={ShellStories.
|
|
26
|
+
<Canvas of={ShellStories.Playground} />
|
|
27
27
|
|
|
28
28
|
## Props
|
|
29
29
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
|
|
3
4
|
import { toStoryChoice } from "../argTypes.storyHelpers.ts"
|
|
@@ -53,7 +54,8 @@ type Story = StoryObj<typeof meta>
|
|
|
53
54
|
* need. Copy it verbatim; only the contents of `actions` and
|
|
54
55
|
* `Main` differ per app.
|
|
55
56
|
*/
|
|
56
|
-
export const
|
|
57
|
+
export const Playground: Story = {
|
|
58
|
+
parameters: playgroundParameters,
|
|
57
59
|
render: (shellProps) => (
|
|
58
60
|
<Shell {...shellProps}>
|
|
59
61
|
<Header
|
package/src/Shell/Shell.test.tsx
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
import * as stories from "./Shell.stories.tsx"
|
|
14
14
|
|
|
15
15
|
const {
|
|
16
|
-
|
|
16
|
+
Playground,
|
|
17
17
|
Interactive,
|
|
18
18
|
Responsive,
|
|
19
19
|
Scrollable,
|
|
@@ -270,7 +270,7 @@ test("header and main are capped at the same width", async () => {
|
|
|
270
270
|
await setViewport(DESKTOP)
|
|
271
271
|
|
|
272
272
|
const { canvas, canvasElement } =
|
|
273
|
-
await mountStory(
|
|
273
|
+
await mountStory(Playground)
|
|
274
274
|
|
|
275
275
|
// The inner rows, not the landmarks: the `<header>` and
|
|
276
276
|
// `<main>` are both full-bleed on purpose, and it is the row
|
|
@@ -23,7 +23,7 @@ means a screen reader reading three empty bars, and an agent finding a "loading"
|
|
|
23
23
|
cannot act on.
|
|
24
24
|
|
|
25
25
|
**The load has to be announced by the region that owns it** — a `Spinner`, or `aria-busy`
|
|
26
|
-
on the container. The `
|
|
26
|
+
on the container. The `Playground` story asserts the skeleton is hidden from assistive
|
|
27
27
|
technology, and `Interactive` asserts it contributes no roles at all. Both are assertions
|
|
28
28
|
axe cannot make for you: there is nothing invalid about a visible placeholder.
|
|
29
29
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
|
|
3
4
|
import {
|
|
@@ -26,7 +27,8 @@ type Story = StoryObj<typeof meta>
|
|
|
26
27
|
* is hidden from AT entirely — otherwise a screen reader reads three
|
|
27
28
|
* empty bars.
|
|
28
29
|
*/
|
|
29
|
-
export const
|
|
30
|
+
export const Playground: Story = {
|
|
31
|
+
parameters: playgroundParameters,
|
|
30
32
|
args: { blockSize: "1.5rem", inlineSize: "12rem" },
|
|
31
33
|
}
|
|
32
34
|
|
|
@@ -6,10 +6,10 @@ import { mountStory } from "../mountStory.testHelpers.ts"
|
|
|
6
6
|
import { expectHiddenFromAgents } from "../testing/index.ts"
|
|
7
7
|
import * as stories from "./Skeleton.stories.tsx"
|
|
8
8
|
|
|
9
|
-
const {
|
|
9
|
+
const { Playground, Interactive } = composeStories(stories)
|
|
10
10
|
|
|
11
11
|
test("a skeleton is hidden from assistive technology", async () => {
|
|
12
|
-
const { canvasElement } = await mountStory(
|
|
12
|
+
const { canvasElement } = await mountStory(Playground)
|
|
13
13
|
|
|
14
14
|
const skeleton = canvasElement.querySelector(
|
|
15
15
|
"div[aria-hidden]",
|
package/src/Slider/Slider.mdx
CHANGED
|
@@ -13,7 +13,7 @@ could not have a scrubber and the choice was a native range input or a hand-roll
|
|
|
13
13
|
a single app. `ProgressBar` looks like the answer and is not — it is **output**, it takes
|
|
14
14
|
no input, and `role="progressbar"` tells assistive technology exactly that.
|
|
15
15
|
|
|
16
|
-
<Canvas of={SliderStories.
|
|
16
|
+
<Canvas of={SliderStories.Playground} />
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
import { useState } from "react"
|
|
3
4
|
|
|
@@ -76,7 +77,8 @@ export default meta
|
|
|
76
77
|
|
|
77
78
|
type Story = StoryObj<typeof meta>
|
|
78
79
|
|
|
79
|
-
export const
|
|
80
|
+
export const Playground: Story = {
|
|
81
|
+
parameters: playgroundParameters,
|
|
80
82
|
args: { label: "Volume", value: 40 },
|
|
81
83
|
}
|
|
82
84
|
|
|
@@ -7,12 +7,12 @@ import { mountStory } from "../mountStory.testHelpers.ts"
|
|
|
7
7
|
import { expectAgentDrivable } from "../testing/index.ts"
|
|
8
8
|
import * as stories from "./Slider.stories.tsx"
|
|
9
9
|
|
|
10
|
-
const { AllStates,
|
|
10
|
+
const { AllStates, Playground, Interactive } =
|
|
11
11
|
composeStories(stories)
|
|
12
12
|
|
|
13
13
|
test("it is a slider a screen reader can name and read", async () => {
|
|
14
14
|
const { canvas, canvasElement } =
|
|
15
|
-
await mountStory(
|
|
15
|
+
await mountStory(Playground)
|
|
16
16
|
|
|
17
17
|
const slider = expectAgentDrivable(canvas, {
|
|
18
18
|
name: "Volume",
|
|
@@ -11,7 +11,7 @@ explicit about that, and the reason is that sorting *data* is app logic that dif
|
|
|
11
11
|
column type, while announcing *that* a column is sorted is markup every table gets wrong the
|
|
12
12
|
same way.
|
|
13
13
|
|
|
14
|
-
<Canvas of={SortableTableHeaderStories.
|
|
14
|
+
<Canvas of={SortableTableHeaderStories.Playground} />
|
|
15
15
|
|
|
16
16
|
## Props
|
|
17
17
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
import { useState } from "react"
|
|
3
4
|
|
|
@@ -40,7 +41,8 @@ export default meta
|
|
|
40
41
|
|
|
41
42
|
type Story = StoryObj<typeof meta>
|
|
42
43
|
|
|
43
|
-
export const
|
|
44
|
+
export const Playground: Story = {
|
|
45
|
+
parameters: playgroundParameters,
|
|
44
46
|
args: { children: "Title", direction: "ascending" },
|
|
45
47
|
render: (args) => (
|
|
46
48
|
<table className={TABLE_CLASS}>
|
|
@@ -7,7 +7,7 @@ import { mountStory } from "../mountStory.testHelpers.ts"
|
|
|
7
7
|
import { expectAgentDrivable } from "../testing/index.ts"
|
|
8
8
|
import * as stories from "./SortableTableHeader.stories.tsx"
|
|
9
9
|
|
|
10
|
-
const { AllVariants,
|
|
10
|
+
const { AllVariants, Playground, Interactive } =
|
|
11
11
|
composeStories(stories)
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -19,7 +19,7 @@ const { AllVariants, Default, Interactive } =
|
|
|
19
19
|
*/
|
|
20
20
|
test("the cell announces the sort, not the glyph", async () => {
|
|
21
21
|
const { canvas, canvasElement } =
|
|
22
|
-
await mountStory(
|
|
22
|
+
await mountStory(Playground)
|
|
23
23
|
|
|
24
24
|
const title = expectAgentDrivable(canvas, {
|
|
25
25
|
name: "Title",
|
|
@@ -68,7 +68,7 @@ test("an unsorted sortable column says `none`", async () => {
|
|
|
68
68
|
* to anything reading the table's structure.
|
|
69
69
|
*/
|
|
70
70
|
test("the header is a columnheader containing a button", async () => {
|
|
71
|
-
const { canvas } = await mountStory(
|
|
71
|
+
const { canvas } = await mountStory(Playground)
|
|
72
72
|
|
|
73
73
|
const header = expectAgentDrivable(canvas, {
|
|
74
74
|
name: "Title",
|
package/src/Spinner/Spinner.mdx
CHANGED
|
@@ -9,7 +9,7 @@ import * as SpinnerStories from "./Spinner.stories";
|
|
|
9
9
|
**Zero of these exist anywhere in the fleet.** Not one repo has a spinner; every app
|
|
10
10
|
renders bare `"loading…"` text. Best effort-to-payoff component in M3.
|
|
11
11
|
|
|
12
|
-
<Canvas of={SpinnerStories.
|
|
12
|
+
<Canvas of={SpinnerStories.Playground} />
|
|
13
13
|
|
|
14
14
|
## Props
|
|
15
15
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
|
|
3
4
|
import { controlSizeArgType } from "../argTypes.storyHelpers.ts"
|
|
@@ -31,7 +32,8 @@ type Story = StoryObj<typeof meta>
|
|
|
31
32
|
* this beats a rotating `<div>`: the state is announced even though
|
|
32
33
|
* nothing is printed.
|
|
33
34
|
*/
|
|
34
|
-
export const
|
|
35
|
+
export const Playground: Story = {
|
|
36
|
+
parameters: playgroundParameters,
|
|
35
37
|
args: {},
|
|
36
38
|
}
|
|
37
39
|
|
|
@@ -6,10 +6,10 @@ import { mountStory } from "../mountStory.testHelpers.ts"
|
|
|
6
6
|
import { expectAgentDrivable } from "../testing/index.ts"
|
|
7
7
|
import * as stories from "./Spinner.stories.tsx"
|
|
8
8
|
|
|
9
|
-
const {
|
|
9
|
+
const { Playground, Interactive } = composeStories(stories)
|
|
10
10
|
|
|
11
11
|
test("the hidden label is the accessible name", async () => {
|
|
12
|
-
const { canvas } = await mountStory(
|
|
12
|
+
const { canvas } = await mountStory(Playground)
|
|
13
13
|
|
|
14
14
|
// A live region takes **no** accessible name from its content, so
|
|
15
15
|
// `Spinner` sets both — text for the announcement, `aria-label`
|
package/src/Stepper/Stepper.mdx
CHANGED
|
@@ -12,7 +12,7 @@ Docket asked for this. Its phases — *"these 3 cards have to be done in order"*
|
|
|
12
12
|
hand-rolled numbered rail with a connector drawn in a `::before`, and a `ProgressBar` per
|
|
13
13
|
phase for the count. Neither says which things go together.
|
|
14
14
|
|
|
15
|
-
<Canvas of={StepperStories.
|
|
15
|
+
<Canvas of={StepperStories.Playground} />
|
|
16
16
|
|
|
17
17
|
## Props
|
|
18
18
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
import { useState } from "react"
|
|
3
4
|
import { Button } from "../Button/Button.tsx"
|
|
@@ -54,7 +55,9 @@ type Story = StoryObj<typeof meta>
|
|
|
54
55
|
* as an empty box in the one position where an empty box reads as
|
|
55
56
|
* an error.
|
|
56
57
|
*/
|
|
57
|
-
export const
|
|
58
|
+
export const Playground: Story = {
|
|
59
|
+
parameters: playgroundParameters,
|
|
60
|
+
}
|
|
58
61
|
|
|
59
62
|
export const AllVariants: Story = {
|
|
60
63
|
render: (stepperProps) => (
|
|
@@ -9,13 +9,13 @@ import * as stories from "./Stepper.stories.tsx"
|
|
|
9
9
|
const {
|
|
10
10
|
AllStates,
|
|
11
11
|
CompactCard,
|
|
12
|
-
|
|
12
|
+
Playground,
|
|
13
13
|
Interactive,
|
|
14
14
|
Responsive,
|
|
15
15
|
} = composeStories(stories)
|
|
16
16
|
|
|
17
17
|
test("the sequence is an ordered list with a name", async () => {
|
|
18
|
-
const { canvas } = await mountStory(
|
|
18
|
+
const { canvas } = await mountStory(Playground)
|
|
19
19
|
|
|
20
20
|
// A `<ol>`, not a stack of divs: the ORDER is the meaning, and a
|
|
21
21
|
// screen reader announcing "list, 3 items" is what carries it.
|
|
@@ -28,7 +28,7 @@ test("the sequence is an ordered list with a name", async () => {
|
|
|
28
28
|
})
|
|
29
29
|
|
|
30
30
|
test("each step is a heading at the level the caller asked for", async () => {
|
|
31
|
-
const { canvas } = await mountStory(
|
|
31
|
+
const { canvas } = await mountStory(Playground)
|
|
32
32
|
|
|
33
33
|
await expect(
|
|
34
34
|
canvas.getByRole("heading", { level: 3, name: /Rip/ }),
|
|
@@ -60,7 +60,7 @@ test("every status is a word, not only a colour", async () => {
|
|
|
60
60
|
})
|
|
61
61
|
|
|
62
62
|
test("the marker is the ordinal, so it renders in a font with no tick glyph", async () => {
|
|
63
|
-
const { canvas } = await mountStory(
|
|
63
|
+
const { canvas } = await mountStory(Playground)
|
|
64
64
|
|
|
65
65
|
// Not `✓`. `docs/decisions/2026-07-29-ship-no-icons-and-no-symbol-
|
|
66
66
|
// glyphs.md` — a glyph the font lacks paints as an empty box, and
|
|
@@ -75,7 +75,7 @@ test("the marker is the ordinal, so it renders in a font with no tick glyph", as
|
|
|
75
75
|
* all — a pseudo-element has nothing to count.
|
|
76
76
|
*/
|
|
77
77
|
test("the last step draws no connector", async () => {
|
|
78
|
-
const { canvas } = await mountStory(
|
|
78
|
+
const { canvas } = await mountStory(Playground)
|
|
79
79
|
|
|
80
80
|
const connectors = canvas
|
|
81
81
|
.getAllByRole("listitem")
|
|
@@ -88,7 +88,7 @@ test("the last step draws no connector", async () => {
|
|
|
88
88
|
})
|
|
89
89
|
|
|
90
90
|
test("each step carries its key into the DOM, so a re-order can animate", async () => {
|
|
91
|
-
const { canvas } = await mountStory(
|
|
91
|
+
const { canvas } = await mountStory(Playground)
|
|
92
92
|
|
|
93
93
|
// React's `key` never reaches the markup. Without this attribute
|
|
94
94
|
// a caller who re-orders `steps` has no way to say which `<li>`
|
|
@@ -124,7 +124,7 @@ test("advancing moves which step is current", async () => {
|
|
|
124
124
|
})
|
|
125
125
|
|
|
126
126
|
test("no axe violations, in either orientation", async () => {
|
|
127
|
-
const vertical = await mountStory(
|
|
127
|
+
const vertical = await mountStory(Playground)
|
|
128
128
|
|
|
129
129
|
await expectNoAxeViolations(vertical.canvasElement)
|
|
130
130
|
|
package/src/Swatch/Swatch.mdx
CHANGED
|
@@ -10,7 +10,7 @@ A colour presented **as content**, with a name attached. It is the one colour th
|
|
|
10
10
|
system does not own: the red sticker on a game controller, the accent castkit pulls off an
|
|
11
11
|
album, a user's tag colour. Not a token — a value from data.
|
|
12
12
|
|
|
13
|
-
<Canvas of={SwatchStories.
|
|
13
|
+
<Canvas of={SwatchStories.Playground} />
|
|
14
14
|
|
|
15
15
|
## Props
|
|
16
16
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
|
|
3
4
|
import {
|
|
@@ -44,7 +45,9 @@ type Story = StoryObj<typeof meta>
|
|
|
44
45
|
* because a colour a screen reader cannot see needs a name it can
|
|
45
46
|
* read.
|
|
46
47
|
*/
|
|
47
|
-
export const
|
|
48
|
+
export const Playground: Story = {
|
|
49
|
+
parameters: playgroundParameters,
|
|
50
|
+
}
|
|
48
51
|
|
|
49
52
|
/**
|
|
50
53
|
* `solid` fills; `outline` keeps the hue and drops the fill. The
|
|
@@ -6,10 +6,10 @@ import { mountStory } from "../mountStory.testHelpers.ts"
|
|
|
6
6
|
import { expectAgentDrivable } from "../testing/index.ts"
|
|
7
7
|
import * as stories from "./Swatch.stories.tsx"
|
|
8
8
|
|
|
9
|
-
const {
|
|
9
|
+
const { Playground, InAList } = composeStories(stories)
|
|
10
10
|
|
|
11
11
|
test("a colour is findable by the name a screen reader can read", async () => {
|
|
12
|
-
const { canvas } = await mountStory(
|
|
12
|
+
const { canvas } = await mountStory(Playground)
|
|
13
13
|
|
|
14
14
|
// The whole contract: a `background-color` is nothing to an agent
|
|
15
15
|
// or a screen reader, so the swatch is an `img` with a name.
|
|
@@ -44,7 +44,7 @@ test("the name survives with no visible label", async () => {
|
|
|
44
44
|
})
|
|
45
45
|
|
|
46
46
|
test("solid rings its fill; the ring is what keeps white visible", async () => {
|
|
47
|
-
const { canvas } = await mountStory(
|
|
47
|
+
const { canvas } = await mountStory(Playground)
|
|
48
48
|
|
|
49
49
|
const dot = canvas.getByRole("img", {
|
|
50
50
|
name: "Red",
|
package/src/Switch/Switch.mdx
CHANGED
|
@@ -15,7 +15,7 @@ immediately — "automatic imports on". ARIA gives the second its own role, and
|
|
|
15
15
|
reader announces "on/off" for a `switch` where it announces "checked/unchecked" for a
|
|
16
16
|
checkbox.
|
|
17
17
|
|
|
18
|
-
<Canvas of={SwitchStories.
|
|
18
|
+
<Canvas of={SwitchStories.Playground} />
|
|
19
19
|
|
|
20
20
|
## Props
|
|
21
21
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
|
|
3
4
|
import { controlSizeArgType } from "../argTypes.storyHelpers.ts"
|
|
@@ -28,7 +29,8 @@ export default meta
|
|
|
28
29
|
|
|
29
30
|
type Story = StoryObj<typeof meta>
|
|
30
31
|
|
|
31
|
-
export const
|
|
32
|
+
export const Playground: Story = {
|
|
33
|
+
parameters: playgroundParameters,
|
|
32
34
|
args: { label: "Automatic imports" },
|
|
33
35
|
}
|
|
34
36
|
|
|
@@ -7,12 +7,12 @@ import { mountStory } from "../mountStory.testHelpers.ts"
|
|
|
7
7
|
import { expectAgentDrivable } from "../testing/index.ts"
|
|
8
8
|
import * as stories from "./Switch.stories.tsx"
|
|
9
9
|
|
|
10
|
-
const { AllStates,
|
|
10
|
+
const { AllStates, Playground, Interactive } =
|
|
11
11
|
composeStories(stories)
|
|
12
12
|
|
|
13
13
|
test("it is a switch a screen reader can name and read", async () => {
|
|
14
14
|
const { canvas, canvasElement } =
|
|
15
|
-
await mountStory(
|
|
15
|
+
await mountStory(Playground)
|
|
16
16
|
|
|
17
17
|
const control = expectAgentDrivable(canvas, {
|
|
18
18
|
name: "Automatic imports",
|
package/src/Tabs/Tabs.mdx
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { playgroundParameters } from "@charcuterie/storybook-config/story-parameters"
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
3
|
|
|
3
4
|
import { toStoryChoice } from "../argTypes.storyHelpers.ts"
|
|
@@ -67,7 +68,8 @@ export default meta
|
|
|
67
68
|
|
|
68
69
|
type Story = StoryObj<typeof meta>
|
|
69
70
|
|
|
70
|
-
export const
|
|
71
|
+
export const Playground: Story = {
|
|
72
|
+
parameters: playgroundParameters,
|
|
71
73
|
args: { label: "Bay 3", tabs: BAY_TABS },
|
|
72
74
|
}
|
|
73
75
|
|