@vibe/core 4.2.5 → 4.3.0-alpha-9bd83.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/dist/metadata/accessibility/Accordion.md +10 -0
- package/dist/metadata/accessibility/AlertBanner.md +9 -0
- package/dist/metadata/accessibility/Avatar.md +12 -0
- package/dist/metadata/accessibility/AvatarGroup.md +6 -0
- package/dist/metadata/accessibility/BreadcrumbsBar.md +10 -0
- package/dist/metadata/accessibility/Button.md +13 -0
- package/dist/metadata/accessibility/ButtonGroup.md +9 -0
- package/dist/metadata/accessibility/Checkbox.md +13 -0
- package/dist/metadata/accessibility/Chips.md +10 -0
- package/dist/metadata/accessibility/Combobox.md +6 -0
- package/dist/metadata/accessibility/DropdownBasicDropdown.md +10 -0
- package/dist/metadata/accessibility/IconButton.md +26 -0
- package/dist/metadata/accessibility/Info.md +12 -0
- package/dist/metadata/accessibility/Link.md +8 -0
- package/dist/metadata/accessibility/List.md +11 -0
- package/dist/metadata/accessibility/Menu.md +10 -0
- package/dist/metadata/accessibility/MenuButton.md +6 -0
- package/dist/metadata/accessibility/MenuItem.md +8 -0
- package/dist/metadata/accessibility/Modal.md +35 -0
- package/dist/metadata/accessibility/NumberField.md +9 -0
- package/dist/metadata/accessibility/RadioButton.md +11 -0
- package/dist/metadata/accessibility/Search.md +10 -0
- package/dist/metadata/accessibility/Tabs.md +10 -0
- package/dist/metadata/accessibility/TextArea.md +17 -0
- package/dist/metadata/accessibility/TextField.md +16 -0
- package/dist/metadata/accessibility/Toast.md +4 -0
- package/dist/metadata/accessibility/Toggle.md +7 -0
- package/dist/metadata/accessibility/Tooltip.md +11 -0
- package/dist/metadata/components.json +20940 -0
- package/dist/metadata/examples/Accordion.md +136 -0
- package/dist/metadata/examples/AlertBanner.md +85 -0
- package/dist/metadata/examples/AttentionBox.md +267 -0
- package/dist/metadata/examples/Avatar.md +118 -0
- package/dist/metadata/examples/AvatarGroup.md +390 -0
- package/dist/metadata/examples/Badge.md +59 -0
- package/dist/metadata/examples/BaseInput.md +2 -0
- package/dist/metadata/examples/BaseList.md +342 -0
- package/dist/metadata/examples/Box.md +208 -0
- package/dist/metadata/examples/BreadcrumbItem.md +54 -0
- package/dist/metadata/examples/BreadcrumbsBar.md +64 -0
- package/dist/metadata/examples/Button.md +174 -0
- package/dist/metadata/examples/ButtonGroup.md +180 -0
- package/dist/metadata/examples/Checkbox.md +24 -0
- package/dist/metadata/examples/Chips.md +192 -0
- package/dist/metadata/examples/Clickable.md +31 -0
- package/dist/metadata/examples/ColorPicker.md +2 -0
- package/dist/metadata/examples/Combobox.md +438 -0
- package/dist/metadata/examples/Counter.md +188 -0
- package/dist/metadata/examples/DatePicker.md +43 -0
- package/dist/metadata/examples/Dialog.md +521 -0
- package/dist/metadata/examples/DialogContentContainer.md +18 -0
- package/dist/metadata/examples/Divider.md +50 -0
- package/dist/metadata/examples/DropdownBasicDropdown.md +479 -0
- package/dist/metadata/examples/DropdownBoxMode.md +218 -0
- package/dist/metadata/examples/EditableHeading.md +33 -0
- package/dist/metadata/examples/EditableText.md +36 -0
- package/dist/metadata/examples/EmptyState.md +192 -0
- package/dist/metadata/examples/ExpandCollapse.md +77 -0
- package/dist/metadata/examples/Flex.md +916 -0
- package/dist/metadata/examples/Heading.md +124 -0
- package/dist/metadata/examples/HiddenText.md +8 -0
- package/dist/metadata/examples/Icon.md +67 -0
- package/dist/metadata/examples/IconButton.md +141 -0
- package/dist/metadata/examples/Info.md +80 -0
- package/dist/metadata/examples/Label.md +109 -0
- package/dist/metadata/examples/Link.md +52 -0
- package/dist/metadata/examples/List.md +125 -0
- package/dist/metadata/examples/ListItem.md +42 -0
- package/dist/metadata/examples/Loader.md +148 -0
- package/dist/metadata/examples/Menu.md +141 -0
- package/dist/metadata/examples/MenuButton.md +127 -0
- package/dist/metadata/examples/MenuDivider.md +35 -0
- package/dist/metadata/examples/MenuGridItem.md +65 -0
- package/dist/metadata/examples/MenuItem.md +98 -0
- package/dist/metadata/examples/MenuItemButton.md +42 -0
- package/dist/metadata/examples/MenuTitle.md +25 -0
- package/dist/metadata/examples/ModalBasicLayout.md +400 -0
- package/dist/metadata/examples/ModalMediaLayout.md +240 -0
- package/dist/metadata/examples/ModalSideBySideLayout.md +313 -0
- package/dist/metadata/examples/MultiStepIndicator.md +189 -0
- package/dist/metadata/examples/NumberField.md +68 -0
- package/dist/metadata/examples/ProgressBar.md +152 -0
- package/dist/metadata/examples/RadioButton.md +41 -0
- package/dist/metadata/examples/Search.md +24 -0
- package/dist/metadata/examples/Skeleton.md +161 -0
- package/dist/metadata/examples/Slider.md +109 -0
- package/dist/metadata/examples/SplitButton.md +120 -0
- package/dist/metadata/examples/Steps.md +106 -0
- package/dist/metadata/examples/Table.md +449 -0
- package/dist/metadata/examples/Tabs.md +241 -0
- package/dist/metadata/examples/Text.md +188 -0
- package/dist/metadata/examples/TextArea.md +28 -0
- package/dist/metadata/examples/TextField.md +119 -0
- package/dist/metadata/examples/TextWithHighlight.md +2 -0
- package/dist/metadata/examples/ThemeProvider.md +47 -0
- package/dist/metadata/examples/Tipseen.md +111 -0
- package/dist/metadata/examples/Toast.md +127 -0
- package/dist/metadata/examples/Toggle.md +38 -0
- package/dist/metadata/examples/Tooltip.md +53 -0
- package/dist/metadata/examples/VirtualizedGrid.md +54 -0
- package/dist/metadata/examples/VirtualizedList.md +50 -0
- package/dist/metadata/examples/useGridKeyboardNavigationContext.md +61 -0
- package/dist/mocked_classnames/scripts/build-all-metadata.d.ts +1 -0
- package/dist/mocked_classnames/scripts/extract-accessibility.d.ts +4 -0
- package/dist/mocked_classnames/scripts/extract-examples.d.ts +3 -0
- package/dist/scripts/build-all-metadata.d.ts +1 -0
- package/dist/scripts/extract-accessibility.d.ts +4 -0
- package/dist/scripts/extract-examples.d.ts +3 -0
- package/package.json +12 -10
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# Storybook Code Examples
|
|
2
|
+
|
|
3
|
+
## Placements
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
const steps: Step[] = useMemo(() => [{
|
|
7
|
+
key: "FULFILLED",
|
|
8
|
+
status: "fulfilled",
|
|
9
|
+
titleText: "Fulfilled title",
|
|
10
|
+
subtitleText: "Fulfilled subtitle"
|
|
11
|
+
}, {
|
|
12
|
+
key: "ACTIVE",
|
|
13
|
+
status: "active",
|
|
14
|
+
titleText: "Active title",
|
|
15
|
+
subtitleText: "Active subtitle"
|
|
16
|
+
}, {
|
|
17
|
+
key: "PENDING",
|
|
18
|
+
status: "pending",
|
|
19
|
+
titleText: "Pending title",
|
|
20
|
+
subtitleText: "Pending subtitle"
|
|
21
|
+
}], []);
|
|
22
|
+
return <div>
|
|
23
|
+
Vertical
|
|
24
|
+
<MultiStepIndicator id="placements-vertical" textPlacement="vertical" steps={steps} />
|
|
25
|
+
Horizontal
|
|
26
|
+
<MultiStepIndicator id="placements-horizontal" steps={steps} />
|
|
27
|
+
</div>;
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Types
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
const steps: Step[] = useMemo(() => [{
|
|
34
|
+
key: "FULFILLED",
|
|
35
|
+
status: "fulfilled",
|
|
36
|
+
titleText: "Fulfilled title",
|
|
37
|
+
subtitleText: "Fulfilled subtitle"
|
|
38
|
+
}, {
|
|
39
|
+
key: "ACTIVE",
|
|
40
|
+
status: "active",
|
|
41
|
+
titleText: "Active title",
|
|
42
|
+
subtitleText: "Active subtitle"
|
|
43
|
+
}, {
|
|
44
|
+
key: "PENDING",
|
|
45
|
+
status: "pending",
|
|
46
|
+
titleText: "Pending title",
|
|
47
|
+
subtitleText: "Pending subtitle"
|
|
48
|
+
}], []);
|
|
49
|
+
return <div>
|
|
50
|
+
Primary
|
|
51
|
+
<MultiStepIndicator id="types-primary" steps={steps} type="primary" />
|
|
52
|
+
Success
|
|
53
|
+
<MultiStepIndicator id="types-success" steps={steps} type="success" />
|
|
54
|
+
Danger
|
|
55
|
+
<MultiStepIndicator id="types-danger" steps={steps} type="danger" />
|
|
56
|
+
Dark
|
|
57
|
+
<MultiStepIndicator id="types-dark" aria-label="Dark type multi-step indicator" steps={steps} type="dark" />
|
|
58
|
+
</div>;
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Sizes
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
const steps: Step[] = useMemo(() => [{
|
|
65
|
+
key: "FULFILLED",
|
|
66
|
+
status: "fulfilled",
|
|
67
|
+
titleText: "Fulfilled title",
|
|
68
|
+
subtitleText: "Fulfilled subtitle"
|
|
69
|
+
}, {
|
|
70
|
+
key: "ACTIVE",
|
|
71
|
+
status: "active",
|
|
72
|
+
titleText: "Active title",
|
|
73
|
+
subtitleText: "Active subtitle"
|
|
74
|
+
}, {
|
|
75
|
+
key: "PENDING",
|
|
76
|
+
status: "pending",
|
|
77
|
+
titleText: "Pending",
|
|
78
|
+
subtitleText: "Pending subtitle"
|
|
79
|
+
}], []);
|
|
80
|
+
return <div>
|
|
81
|
+
Regular
|
|
82
|
+
<MultiStepIndicator id="sizes-regular" steps={steps} size="regular" />
|
|
83
|
+
Compact
|
|
84
|
+
<MultiStepIndicator id="sizes-compact" steps={steps} size="compact" />
|
|
85
|
+
</div>;
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## FulfilledIcons
|
|
89
|
+
|
|
90
|
+
```tsx
|
|
91
|
+
const steps: Step[] = useMemo(() => [{
|
|
92
|
+
key: "FULFILLED",
|
|
93
|
+
status: "fulfilled",
|
|
94
|
+
titleText: "Fulfilled title",
|
|
95
|
+
subtitleText: "Fulfilled subtitle"
|
|
96
|
+
}, {
|
|
97
|
+
key: "ACTIVE",
|
|
98
|
+
status: "active",
|
|
99
|
+
titleText: "Active title",
|
|
100
|
+
subtitleText: "Active subtitle"
|
|
101
|
+
}, {
|
|
102
|
+
key: "PENDING",
|
|
103
|
+
status: "pending",
|
|
104
|
+
titleText: "Pending title",
|
|
105
|
+
subtitleText: "Pending subtitle"
|
|
106
|
+
}], []);
|
|
107
|
+
return <div>
|
|
108
|
+
Default (check)
|
|
109
|
+
<MultiStepIndicator id="icons-default" steps={steps} />
|
|
110
|
+
Number instead of icon
|
|
111
|
+
<MultiStepIndicator id="icons-numbers" steps={steps} isFulfilledStepDisplayNumber={true} />
|
|
112
|
+
Custom
|
|
113
|
+
<MultiStepIndicator id="icons-custom" steps={steps} fulfilledStepIcon={Upgrade} />
|
|
114
|
+
</div>;
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## TransitionAnimation
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
const initialSteps = useMemo<Step[]>(() => [{
|
|
121
|
+
key: "PENDING",
|
|
122
|
+
status: "pending",
|
|
123
|
+
titleText: "First step title",
|
|
124
|
+
subtitleText: "First subtitle"
|
|
125
|
+
}, {
|
|
126
|
+
key: "PENDING-2",
|
|
127
|
+
status: "pending",
|
|
128
|
+
titleText: "Second step title",
|
|
129
|
+
subtitleText: "Second subtitle"
|
|
130
|
+
}, {
|
|
131
|
+
key: "PENDING-3",
|
|
132
|
+
status: "pending",
|
|
133
|
+
titleText: "Third step title",
|
|
134
|
+
subtitleText: "Third subtitle"
|
|
135
|
+
}], []);
|
|
136
|
+
const [steps, setSteps] = useState<Step[]>(initialSteps);
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
const getNextStepsState = (currentSteps: Step[]): Step[] => {
|
|
139
|
+
const currentStepIndex = currentSteps.findIndex(step => step.status !== "fulfilled");
|
|
140
|
+
if (currentStepIndex === -1) {
|
|
141
|
+
return initialSteps;
|
|
142
|
+
}
|
|
143
|
+
const newSteps = [...currentSteps];
|
|
144
|
+
const stepToUpdate = newSteps[currentStepIndex];
|
|
145
|
+
if (stepToUpdate.status === "pending") {
|
|
146
|
+
newSteps[currentStepIndex] = {
|
|
147
|
+
...stepToUpdate,
|
|
148
|
+
status: "active"
|
|
149
|
+
};
|
|
150
|
+
} else {
|
|
151
|
+
newSteps[currentStepIndex] = {
|
|
152
|
+
...stepToUpdate,
|
|
153
|
+
status: "fulfilled"
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return newSteps;
|
|
157
|
+
};
|
|
158
|
+
const interval = setInterval(() => {
|
|
159
|
+
setSteps(prevSteps => getNextStepsState(prevSteps));
|
|
160
|
+
}, 2000);
|
|
161
|
+
return () => {
|
|
162
|
+
clearInterval(interval);
|
|
163
|
+
};
|
|
164
|
+
}, [initialSteps]);
|
|
165
|
+
return <MultiStepIndicator id="transition-animation" steps={steps} />;
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## MultiStepWizard
|
|
169
|
+
|
|
170
|
+
```tsx
|
|
171
|
+
const steps: Step[] = useMemo(() => [{
|
|
172
|
+
key: "FULFILLED",
|
|
173
|
+
status: "fulfilled",
|
|
174
|
+
titleText: "Step 1",
|
|
175
|
+
subtitleText: "Learn how to use monday CRM"
|
|
176
|
+
}, {
|
|
177
|
+
key: "PENDING",
|
|
178
|
+
status: "pending",
|
|
179
|
+
titleText: "Step 2",
|
|
180
|
+
subtitleText: "Integrate your email"
|
|
181
|
+
}, {
|
|
182
|
+
key: "PENDING-3",
|
|
183
|
+
status: "pending",
|
|
184
|
+
titleText: "Step 3",
|
|
185
|
+
subtitleText: "Import your data"
|
|
186
|
+
}], []);
|
|
187
|
+
return <MultiStepIndicator id="multi-step-wizard" steps={steps} textPlacement="vertical" />;
|
|
188
|
+
```
|
|
189
|
+
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Storybook Code Examples
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
const [value, setValue] = useState(args.value || 0);
|
|
7
|
+
return <div style={{
|
|
8
|
+
width: 300
|
|
9
|
+
}}>
|
|
10
|
+
<NumberField id="overview-number-field" {...args} value={value} onChange={newValue => setValue(newValue)} />
|
|
11
|
+
</div>;
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Sizes
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
const [valueL, setValueL] = useState(2);
|
|
18
|
+
const [valueM, setValueM] = useState(2);
|
|
19
|
+
const [valueS, setValueS] = useState(2);
|
|
20
|
+
return <Flex gap="medium" align="start">
|
|
21
|
+
<NumberField id="size-large" value={valueL} onChange={setValueL} label="Large" size="large" />
|
|
22
|
+
<NumberField id="size-medium" value={valueM} onChange={setValueM} label="Medium" size="medium" />
|
|
23
|
+
<NumberField id="size-small" value={valueS} onChange={setValueS} label="Small" size="small" />
|
|
24
|
+
</Flex>;
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## States
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
const [successValue, setSuccessValue] = useState(10);
|
|
31
|
+
const [errorValue, setErrorValue] = useState(5);
|
|
32
|
+
return <Flex direction="column" gap="medium" align="start">
|
|
33
|
+
<NumberField id="success-state" value={successValue} onChange={setSuccessValue} label="Success State" success infoText="This is a success message" />
|
|
34
|
+
<NumberField id="error-state" value={errorValue} onChange={setErrorValue} label="Error State" error infoText="This is an error message" />
|
|
35
|
+
<NumberField id="readonly-state" value={42} onChange={() => {}} label="Read Only State" readOnly infoText="Read-only field" />
|
|
36
|
+
<NumberField id="disabled-state" value={5} onChange={() => {}} label="Disabled State" disabled infoText="Cannot edit when disabled" />
|
|
37
|
+
</Flex>;
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Validation
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
const [value, setValue] = useState(50);
|
|
44
|
+
const [isValid, setIsValid] = useState(true);
|
|
45
|
+
const handleChange = (newValue: number) => {
|
|
46
|
+
setValue(newValue);
|
|
47
|
+
};
|
|
48
|
+
const handleValidityChange = (valid: boolean) => {
|
|
49
|
+
setIsValid(valid);
|
|
50
|
+
};
|
|
51
|
+
return <Flex direction="column" gap="medium" align="start" style={{
|
|
52
|
+
width: 300
|
|
53
|
+
}}>
|
|
54
|
+
<NumberField id="validation-example" value={value} onChange={handleChange} onValidityChange={handleValidityChange} label="Validation Example (Range: 0-100)" min={0} max={100} allowOutOfBounds success={isValid} error={!isValid} infoText={isValid ? "Value is within valid range!" : "Value is outside the valid range (0-100)"} />
|
|
55
|
+
</Flex>;
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Variants
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
const [iconValue, setIconValue] = useState(1);
|
|
62
|
+
const [infoValue, setInfoValue] = useState(100);
|
|
63
|
+
return <Flex direction="column" gap="medium" align="start">
|
|
64
|
+
<NumberField id="with-icon" value={iconValue} onChange={setIconValue} label="With Icon" leftIcon={TextBig} />
|
|
65
|
+
<NumberField id="with-info" value={infoValue} onChange={setInfoValue} label="With Info Text" infoText="You are doing great!" />
|
|
66
|
+
</Flex>;
|
|
67
|
+
```
|
|
68
|
+
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Storybook Code Examples
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
<div style={{
|
|
7
|
+
width: "400px"
|
|
8
|
+
}}>
|
|
9
|
+
<ProgressBar value={20} size="large" id="overview-linear-progress-bar" aria-label="Overview linear progress bar" {...args} />
|
|
10
|
+
</div>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Regular
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
<Flex direction="column" gap="large">
|
|
17
|
+
<Flex direction="column" gap="small" align="start" style={{
|
|
18
|
+
width: "400px"
|
|
19
|
+
}}>
|
|
20
|
+
<ProgressBar id="regular-linear-progress-bar" aria-label="Regular linear progress bar" indicateProgress value={30} size="large" />
|
|
21
|
+
With label
|
|
22
|
+
</Flex>
|
|
23
|
+
<Flex direction="column" gap="small" align="start" style={{
|
|
24
|
+
width: "400px"
|
|
25
|
+
}}>
|
|
26
|
+
<ProgressBar id="regular-linear-progress-bar-without-label" value={30} size="large" />
|
|
27
|
+
Without label
|
|
28
|
+
</Flex>
|
|
29
|
+
</Flex>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## WithSecondaryValue
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
<div style={{
|
|
36
|
+
width: "400px"
|
|
37
|
+
}}>
|
|
38
|
+
<ProgressBar id="with-secondary-value-linear-progress-bar" aria-label="With secondary value linear progress bar" value={50} indicateProgress valueSecondary={65} size="large" />
|
|
39
|
+
</div>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Multi progress bar
|
|
43
|
+
|
|
44
|
+
```tsx
|
|
45
|
+
const multiValues = useMemo(() => [{
|
|
46
|
+
value: 25,
|
|
47
|
+
color: "var(--primary-color)"
|
|
48
|
+
}, {
|
|
49
|
+
value: 75,
|
|
50
|
+
color: "var(--warning-color)"
|
|
51
|
+
}, {
|
|
52
|
+
value: 100,
|
|
53
|
+
color: "var(--positive-color)"
|
|
54
|
+
}], []);
|
|
55
|
+
return <div style={{
|
|
56
|
+
width: "600px"
|
|
57
|
+
}}>
|
|
58
|
+
<ProgressBar id="multi-progress-bar" aria-label="Multi progress bar" value={25} size="large" indicateProgress multi multiValues={multiValues} />
|
|
59
|
+
</div>;
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Progress bar as a counter
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
<div style={{
|
|
66
|
+
width: 200
|
|
67
|
+
}}>
|
|
68
|
+
<Text type="text1" weight="bold" style={{
|
|
69
|
+
marginBottom: "var(--space-48)"
|
|
70
|
+
}}>
|
|
71
|
+
Loading files
|
|
72
|
+
</Text>
|
|
73
|
+
<Flex justify="space-between" style={{
|
|
74
|
+
marginBottom: "var(--space-4)"
|
|
75
|
+
}}>
|
|
76
|
+
<Flex gap="xs">
|
|
77
|
+
<Text>Items</Text>
|
|
78
|
+
<Icon icon={Info} style={{
|
|
79
|
+
color: "var(--icon-color)"
|
|
80
|
+
}} />
|
|
81
|
+
</Flex>
|
|
82
|
+
<Text>142/200</Text>
|
|
83
|
+
</Flex>
|
|
84
|
+
<ProgressBar id="progress-bar-as-a-counter" aria-label="Progress bar as a counter" value={71} size="large" barStyle="positive" />
|
|
85
|
+
</div>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Progress bar as loading indicator
|
|
89
|
+
|
|
90
|
+
```tsx
|
|
91
|
+
<Box border padding="medium" style={{
|
|
92
|
+
width: 400
|
|
93
|
+
}}>
|
|
94
|
+
<Flex gap="small" style={{
|
|
95
|
+
marginBottom: "var(--space-8)",
|
|
96
|
+
height: 80
|
|
97
|
+
}}>
|
|
98
|
+
<Box style={{
|
|
99
|
+
flexShrink: 0,
|
|
100
|
+
height: "100%"
|
|
101
|
+
}}>
|
|
102
|
+
<img src={Logo} alt="Frame 697.jpg" style={{
|
|
103
|
+
height: "100%"
|
|
104
|
+
}} />
|
|
105
|
+
</Box>
|
|
106
|
+
<Flex direction="column" align="stretch" justify="space-between" style={{
|
|
107
|
+
flex: 1,
|
|
108
|
+
height: "100%"
|
|
109
|
+
}}>
|
|
110
|
+
<Text type="text1" weight="bold">
|
|
111
|
+
Frame 697.jpg
|
|
112
|
+
</Text>
|
|
113
|
+
<Flex justify="space-between">
|
|
114
|
+
<Text>2KB</Text>
|
|
115
|
+
<Text>Saving...</Text>
|
|
116
|
+
</Flex>
|
|
117
|
+
</Flex>
|
|
118
|
+
</Flex>
|
|
119
|
+
<ProgressBar id="progress-bar-as-loading-indicator" aria-label="Progress bar as loading indicator" value={71} />
|
|
120
|
+
</Box>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Exceeding max value
|
|
124
|
+
|
|
125
|
+
```tsx
|
|
126
|
+
<Flex direction="column" gap="large" align="start">
|
|
127
|
+
<Flex direction="column" gap="small" style={{
|
|
128
|
+
width: "400px"
|
|
129
|
+
}}>
|
|
130
|
+
<Text type="text1" weight="bold">
|
|
131
|
+
Standard behavior (capped at 100%)
|
|
132
|
+
</Text>
|
|
133
|
+
<ProgressBar id="standard-progress-bar" ariaLabel="Standard progress bar" value={120} max={100} indicateProgress size="large" />
|
|
134
|
+
<Text type="text2" color="secondary">
|
|
135
|
+
Value: 120, Max: 100 → Shows 100%
|
|
136
|
+
</Text>
|
|
137
|
+
</Flex>
|
|
138
|
+
|
|
139
|
+
<Flex direction="column" gap="small" style={{
|
|
140
|
+
width: "400px"
|
|
141
|
+
}}>
|
|
142
|
+
<Text type="text1" weight="bold">
|
|
143
|
+
Allowing exceeding max
|
|
144
|
+
</Text>
|
|
145
|
+
<ProgressBar id="exceeding-progress-bar" ariaLabel="Exceeding progress bar" value={120} max={100} indicateProgress allowExceedingMax size="large" barStyle="positive" />
|
|
146
|
+
<Text type="text2" color="secondary">
|
|
147
|
+
Value: 120, Max: 100 → Shows 120%
|
|
148
|
+
</Text>
|
|
149
|
+
</Flex>
|
|
150
|
+
</Flex>
|
|
151
|
+
```
|
|
152
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Storybook Code Examples
|
|
2
|
+
|
|
3
|
+
## States
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
<Flex gap="medium">
|
|
7
|
+
<RadioButton id="states-regular" text="Regular" />
|
|
8
|
+
<RadioButton id="states-selected" text="Selected" checked />
|
|
9
|
+
<RadioButton id="states-disabled" text="Disabled" disabled disabledReason="Disabled reason" />
|
|
10
|
+
<RadioButton id="states-disabled-checked" text="Disabled" checked disabled />
|
|
11
|
+
</Flex>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Radio button in items list
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
<Flex direction="column" gap="medium" align="start">
|
|
18
|
+
<div id="inbox-view-label">Inbox view options</div>
|
|
19
|
+
<RadioButton id="inbox-updates" text="Inbox updates" name="radio-buttons-group-4" defaultChecked />
|
|
20
|
+
<RadioButton id="was-mentioned" text="I was mentioned" name="radio-buttons-group-4" />
|
|
21
|
+
<RadioButton id="all-updates" text="All updates" name="radio-buttons-group-4" />
|
|
22
|
+
</Flex>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Controlled Radio buttons
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
29
|
+
const onClickCB = useCallback(() => {
|
|
30
|
+
setSelectedIndex(prev => (prev + 1) % 3);
|
|
31
|
+
}, [setSelectedIndex]);
|
|
32
|
+
const onChange = useCallback(() => {}, []);
|
|
33
|
+
return <Flex direction="column" gap="medium" align="start">
|
|
34
|
+
<div id="controlled-radio-label">Controlled radio buttons</div>
|
|
35
|
+
<Button id="select-next-button" kind="secondary" onClick={onClickCB}>{`Select next radio button (Radio ${(selectedIndex + 1) % 3 + 1}) `}</Button>
|
|
36
|
+
<RadioButton id="radio-1" text="Radio 1" name="radio-buttons-group-5" checked={selectedIndex === 0} onSelect={onChange} />
|
|
37
|
+
<RadioButton id="radio-2" text="Radio 2" name="radio-buttons-group-5" checked={selectedIndex === 1} onSelect={onChange} />
|
|
38
|
+
<RadioButton id="radio-3" text="Radio 3" name="radio-buttons-group-5" checked={selectedIndex === 2} onSelect={onChange} />
|
|
39
|
+
</Flex>;
|
|
40
|
+
```
|
|
41
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Storybook Code Examples
|
|
2
|
+
|
|
3
|
+
## Sizes
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
<>
|
|
7
|
+
<Search id="sizes-small" inputAriaLabel="Small search input" placeholder="Small" size="small" />
|
|
8
|
+
<Search id="sizes-medium" inputAriaLabel="Medium search input" placeholder="Medium" size="medium" />
|
|
9
|
+
<Search id="sizes-large" inputAriaLabel="Large search input" placeholder="Large" size="large" />
|
|
10
|
+
</>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## WithAdditionalAction
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
<Search id="search-with-action" inputAriaLabel="Search with filter action" placeholder="Search with icon" renderAction={<IconButton id="filter-action-button" icon={FilterIcon} aria-label="Filter results" size="small" />} />
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## FilterInCombobox
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
<Combobox id="filter-combobox" searchInputAriaLabel="Filter options" placeholder="Placeholder text here" options={options} size="small" optionLineHeight={28} />
|
|
23
|
+
```
|
|
24
|
+
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Storybook Code Examples
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
<Flex direction="column" gap="small">
|
|
7
|
+
<Skeleton id="overview-skeleton-1" {...args} />
|
|
8
|
+
<Skeleton id="overview-skeleton-2" {...args} />
|
|
9
|
+
<Skeleton id="overview-skeleton-3" {...args} />
|
|
10
|
+
</Flex>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Shapes
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
<Flex align="end" gap="large">
|
|
17
|
+
<Flex direction="column" align="stretch" gap="large">
|
|
18
|
+
<Skeleton id="shapes-circle" type="circle" />
|
|
19
|
+
<Text type="text1">Circle</Text>
|
|
20
|
+
</Flex>
|
|
21
|
+
<Flex direction="column" align="stretch" gap="large">
|
|
22
|
+
<Skeleton id="shapes-square" />
|
|
23
|
+
<Text type="text1">Square</Text>
|
|
24
|
+
</Flex>
|
|
25
|
+
<Flex direction="column" align="stretch" gap="large">
|
|
26
|
+
<Skeleton id="shapes-rectangle" width={112} height={46} />
|
|
27
|
+
<Text type="text1">Rectangle</Text>
|
|
28
|
+
</Flex>
|
|
29
|
+
</Flex>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Text
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
<Flex align="end" gap="large">
|
|
36
|
+
<Flex direction="column" align="stretch" gap="large">
|
|
37
|
+
<Skeleton type="text" size="h1" />
|
|
38
|
+
<Text type="text1">H1</Text>
|
|
39
|
+
</Flex>
|
|
40
|
+
<Flex direction="column" align="stretch" gap="large">
|
|
41
|
+
<Skeleton type="text" size="h2" />
|
|
42
|
+
<Text type="text1">H2</Text>
|
|
43
|
+
</Flex>
|
|
44
|
+
<Flex direction="column" align="stretch" gap="large">
|
|
45
|
+
<Skeleton type="text" size="small" />
|
|
46
|
+
<Text type="text1">Paragraph</Text>
|
|
47
|
+
</Flex>
|
|
48
|
+
</Flex>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## ComplexExample
|
|
52
|
+
|
|
53
|
+
```tsx
|
|
54
|
+
return <Flex align="stretch" direction="column" gap="small">
|
|
55
|
+
<Flex gap="small">
|
|
56
|
+
<Skeleton type="circle" />
|
|
57
|
+
<Skeleton type="text" width={110} size="small" />
|
|
58
|
+
</Flex>
|
|
59
|
+
<Flex align="stretch" gap="medium">
|
|
60
|
+
<Skeleton />
|
|
61
|
+
<Flex align="stretch" direction="column" gap="small">
|
|
62
|
+
<Skeleton type="text" size="h1" />
|
|
63
|
+
<Skeleton type="text" size="h4" />
|
|
64
|
+
<Skeleton type="text" size="h4" />
|
|
65
|
+
<Skeleton type="text" size="h4" />
|
|
66
|
+
<Skeleton type="text" size="h4" width={82} />
|
|
67
|
+
</Flex>
|
|
68
|
+
</Flex>
|
|
69
|
+
</Flex>;
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Update in the system
|
|
73
|
+
|
|
74
|
+
```tsx
|
|
75
|
+
const [showSkeleton, setShowSkeleton] = useState(false);
|
|
76
|
+
const [showBlock, setShowBlock] = useState(false);
|
|
77
|
+
const [showReload, setShowReload] = useState(true);
|
|
78
|
+
const onClickCallback = useCallback(() => {
|
|
79
|
+
setShowReload(false);
|
|
80
|
+
setShowBlock(false);
|
|
81
|
+
setShowSkeleton(true);
|
|
82
|
+
setTimeout(() => {
|
|
83
|
+
setShowSkeleton(false);
|
|
84
|
+
}, 4000);
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
setShowBlock(true);
|
|
87
|
+
}, 4000);
|
|
88
|
+
}, []);
|
|
89
|
+
return <Flex direction="column" gap="large" flex="1">
|
|
90
|
+
{showBlock && <Box border>
|
|
91
|
+
<Flex direction="column" align="start" gap="medium" style={{
|
|
92
|
+
width: "730px",
|
|
93
|
+
padding: "16px"
|
|
94
|
+
}}>
|
|
95
|
+
<Flex gap="small">
|
|
96
|
+
<Avatar src={person} type="img" />
|
|
97
|
+
<Text weight="bold">Julia Martinez</Text>
|
|
98
|
+
</Flex>
|
|
99
|
+
<Text type="text1" element="p">
|
|
100
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
|
|
101
|
+
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
|
|
102
|
+
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
|
103
|
+
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
|
|
104
|
+
deserunt mollit anim id est laborum.
|
|
105
|
+
</Text>
|
|
106
|
+
</Flex>
|
|
107
|
+
<Flex style={{
|
|
108
|
+
marginTop: "var(--space-24)",
|
|
109
|
+
width: "100%"
|
|
110
|
+
}}>
|
|
111
|
+
<Button style={{
|
|
112
|
+
flexGrow: 1,
|
|
113
|
+
flexShrink: 1,
|
|
114
|
+
borderBottom: "none",
|
|
115
|
+
borderRight: "none",
|
|
116
|
+
borderLeft: "none"
|
|
117
|
+
}} leftIcon={ThumbsUp} kind="secondary">
|
|
118
|
+
Like
|
|
119
|
+
</Button>
|
|
120
|
+
<Button style={{
|
|
121
|
+
flexGrow: 1,
|
|
122
|
+
flexShrink: 1,
|
|
123
|
+
borderBottom: "none",
|
|
124
|
+
borderRight: "none"
|
|
125
|
+
}} leftIcon={Reply} kind="secondary">
|
|
126
|
+
Reply
|
|
127
|
+
</Button>
|
|
128
|
+
</Flex>
|
|
129
|
+
</Box>}
|
|
130
|
+
{showSkeleton && <Box border>
|
|
131
|
+
<Flex direction="column" align="stretch" gap="medium" style={{
|
|
132
|
+
width: "730px",
|
|
133
|
+
padding: "16px"
|
|
134
|
+
}}>
|
|
135
|
+
<Flex align="center" gap="small">
|
|
136
|
+
<Skeleton type="circle" width={50} height={50} />
|
|
137
|
+
<Skeleton type="text" size="h5" width={110} />
|
|
138
|
+
</Flex>
|
|
139
|
+
<Flex direction="column" align="stretch" gap="small">
|
|
140
|
+
<Skeleton type="text" size="small" width={655} />
|
|
141
|
+
<Skeleton type="text" size="small" width={680} />
|
|
142
|
+
<Skeleton type="text" size="small" width={670} />
|
|
143
|
+
<Skeleton type="text" size="small" width={675} />
|
|
144
|
+
<Skeleton type="text" size="small" width={400} />
|
|
145
|
+
</Flex>
|
|
146
|
+
</Flex>
|
|
147
|
+
<Flex justify="center" gap={300} style={{
|
|
148
|
+
marginTop: "var(--space-24)",
|
|
149
|
+
width: "100%",
|
|
150
|
+
paddingBlock: "var(--space-8)"
|
|
151
|
+
}}>
|
|
152
|
+
<Skeleton type="text" size="h2" width={60} />
|
|
153
|
+
<Skeleton type="text" size="h2" width={60} />
|
|
154
|
+
</Flex>
|
|
155
|
+
</Box>}
|
|
156
|
+
<Button kind="secondary" onClick={onClickCallback}>
|
|
157
|
+
{showReload ? "Load update" : "Reload update"}
|
|
158
|
+
</Button>
|
|
159
|
+
</Flex>;
|
|
160
|
+
```
|
|
161
|
+
|