@dxc-technology/halstack-react 0.0.0-7c194f8 → 0.0.0-7c2b794
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/HalstackContext.d.ts +29 -15
- package/HalstackContext.js +1 -1
- package/accordion/Accordion.js +1 -1
- package/accordion-group/AccordionGroup.d.ts +2 -3
- package/accordion-group/AccordionGroup.js +3 -3
- package/accordion-group/AccordionGroupAccordion.js +2 -2
- package/accordion-group/AccordionGroupContext.d.ts +3 -0
- package/accordion-group/AccordionGroupContext.js +8 -0
- package/action-icon/ActionIcon.d.ts +4 -0
- package/action-icon/ActionIcon.js +47 -0
- package/action-icon/ActionIcon.stories.tsx +41 -0
- package/action-icon/ActionIcon.test.js +64 -0
- package/action-icon/types.d.ts +26 -0
- package/action-icon/types.js +5 -0
- package/badge/Badge.d.ts +1 -1
- package/badge/Badge.js +140 -29
- package/badge/Badge.stories.tsx +210 -0
- package/badge/Badge.test.js +30 -0
- package/badge/types.d.ts +52 -3
- package/button/Button.js +3 -2
- package/button/Button.stories.tsx +32 -50
- package/button/Button.test.js +3 -1
- package/button/types.d.ts +1 -1
- package/common/coreTokens.js +2 -2
- package/common/variables.d.ts +29 -15
- package/common/variables.js +36 -22
- package/container/Container.js +1 -1
- package/contextual-menu/ContextualMenu.d.ts +7 -0
- package/contextual-menu/ContextualMenu.js +71 -0
- package/contextual-menu/ContextualMenu.stories.tsx +182 -0
- package/contextual-menu/ContextualMenu.test.js +71 -0
- package/contextual-menu/MenuItemAction.d.ts +4 -0
- package/contextual-menu/MenuItemAction.js +46 -0
- package/contextual-menu/types.d.ts +22 -0
- package/contextual-menu/types.js +5 -0
- package/date-input/types.d.ts +2 -2
- package/divider/Divider.d.ts +4 -0
- package/divider/Divider.js +36 -0
- package/divider/Divider.stories.tsx +223 -0
- package/divider/Divider.test.js +38 -0
- package/divider/types.d.ts +19 -0
- package/divider/types.js +5 -0
- package/dropdown/Dropdown.js +9 -7
- package/dropdown/types.d.ts +1 -1
- package/footer/Footer.d.ts +1 -1
- package/footer/Footer.js +25 -12
- package/footer/Footer.stories.tsx +19 -0
- package/footer/Icons.d.ts +1 -0
- package/footer/Icons.js +65 -1
- package/footer/types.d.ts +6 -0
- package/header/types.d.ts +2 -2
- package/icon/Icon.d.ts +4 -0
- package/icon/Icon.js +33 -0
- package/icon/Icon.stories.tsx +26 -0
- package/icon/types.d.ts +4 -0
- package/icon/types.js +5 -0
- package/image/Image.stories.tsx +3 -1
- package/layout/ApplicationLayout.d.ts +1 -1
- package/layout/ApplicationLayout.js +1 -1
- package/main.d.ts +5 -2
- package/main.js +22 -1
- package/nav-tabs/NavTabs.d.ts +1 -2
- package/nav-tabs/NavTabs.js +9 -6
- package/nav-tabs/NavTabs.stories.tsx +6 -4
- package/nav-tabs/NavTabs.test.js +3 -2
- package/nav-tabs/NavTabsContext.d.ts +3 -0
- package/nav-tabs/NavTabsContext.js +8 -0
- package/nav-tabs/Tab.js +8 -7
- package/number-input/NumberInput.d.ts +0 -7
- package/number-input/NumberInput.js +24 -5
- package/number-input/NumberInput.test.js +165 -6
- package/number-input/NumberInputContext.d.ts +3 -0
- package/number-input/NumberInputContext.js +8 -0
- package/number-input/types.d.ts +6 -0
- package/package.json +2 -2
- package/radio-group/RadioGroup.js +1 -1
- package/resultset-table/ResultsetTable.d.ts +4 -1
- package/resultset-table/ResultsetTable.js +13 -6
- package/resultset-table/ResultsetTable.stories.tsx +102 -5
- package/resultset-table/ResultsetTable.test.js +66 -0
- package/resultset-table/types.d.ts +6 -0
- package/select/Option.js +8 -1
- package/select/Select.js +33 -23
- package/select/types.d.ts +2 -2
- package/sidenav/Sidenav.js +3 -2
- package/slider/Slider.js +5 -6
- package/status-light/StatusLight.d.ts +4 -0
- package/status-light/StatusLight.js +51 -0
- package/status-light/StatusLight.stories.tsx +74 -0
- package/status-light/StatusLight.test.js +25 -0
- package/status-light/types.d.ts +17 -0
- package/status-light/types.js +5 -0
- package/table/DropdownTheme.js +62 -0
- package/table/Table.d.ts +6 -2
- package/table/Table.js +82 -8
- package/table/Table.stories.tsx +304 -2
- package/table/Table.test.js +92 -0
- package/table/types.d.ts +42 -0
- package/tabs/Tab.js +7 -4
- package/tabs/Tabs.js +4 -5
- package/tabs/Tabs.stories.tsx +1 -1
- package/text-input/TextInput.js +58 -71
- package/text-input/TextInput.test.js +96 -79
- package/useTheme.d.ts +29 -15
- package/utils/FocusLock.js +3 -0
- package/wizard/types.d.ts +1 -1
- package/common/OpenSans.css +0 -69
- package/common/fonts/OpenSans-Bold.ttf +0 -0
- package/common/fonts/OpenSans-BoldItalic.ttf +0 -0
- package/common/fonts/OpenSans-ExtraBold.ttf +0 -0
- package/common/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
- package/common/fonts/OpenSans-Italic.ttf +0 -0
- package/common/fonts/OpenSans-Light.ttf +0 -0
- package/common/fonts/OpenSans-LightItalic.ttf +0 -0
- package/common/fonts/OpenSans-Regular.ttf +0 -0
- package/common/fonts/OpenSans-SemiBold.ttf +0 -0
- package/common/fonts/OpenSans-SemiBoldItalic.ttf +0 -0
- /package/{layout → sidenav}/SidenavContext.d.ts +0 -0
- /package/{layout → sidenav}/SidenavContext.js +0 -0
package/table/Table.stories.tsx
CHANGED
|
@@ -3,6 +3,7 @@ import DxcTable from "./Table";
|
|
|
3
3
|
import Title from "../../.storybook/components/Title";
|
|
4
4
|
import ExampleContainer from "../../.storybook/components/ExampleContainer";
|
|
5
5
|
import { HalstackProvider } from "../HalstackContext";
|
|
6
|
+
import { userEvent, within } from "@storybook/testing-library";
|
|
6
7
|
|
|
7
8
|
export default {
|
|
8
9
|
title: "Table",
|
|
@@ -17,11 +18,240 @@ const opinionatedTheme = {
|
|
|
17
18
|
},
|
|
18
19
|
};
|
|
19
20
|
|
|
21
|
+
const advancedTheme = {
|
|
22
|
+
table: {
|
|
23
|
+
actionIconColor: "#1B75BB",
|
|
24
|
+
hoverActionIconColor: "#1B75BB",
|
|
25
|
+
activeActionIconColor: "#1B75BB",
|
|
26
|
+
focusActionIconColor: "#1B75BB",
|
|
27
|
+
hoverButtonBackgroundColor: "#cccccc",
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const icon1 = (
|
|
32
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
|
|
33
|
+
<path d="M0 0h24v24H0V0z" fill="none" />
|
|
34
|
+
<path d="M7.77 6.76L6.23 5.48.82 12l5.41 6.52 1.54-1.28L3.42 12l4.35-5.24zM7 13h2v-2H7v2zm10-2h-2v2h2v-2zm-6 2h2v-2h-2v2zm6.77-7.52l-1.54 1.28L20.58 12l-4.35 5.24 1.54 1.28L23.18 12l-5.41-6.52z" />
|
|
35
|
+
</svg>
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const actions = [
|
|
39
|
+
{
|
|
40
|
+
title: "icon",
|
|
41
|
+
onClick: (value?) => {
|
|
42
|
+
console.log(value);
|
|
43
|
+
},
|
|
44
|
+
options: [
|
|
45
|
+
{
|
|
46
|
+
value: "1",
|
|
47
|
+
label: "Amazon with a very long text",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
value: "2",
|
|
51
|
+
label: "Ebay",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
value: "3",
|
|
55
|
+
label: "Apple",
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
title: "icon",
|
|
61
|
+
onClick: (value?) => {
|
|
62
|
+
console.log(value);
|
|
63
|
+
},
|
|
64
|
+
options: [
|
|
65
|
+
{
|
|
66
|
+
value: "1",
|
|
67
|
+
label: "Amazon with a very long text",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
value: "2",
|
|
71
|
+
label: "Ebay",
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
value: "3",
|
|
75
|
+
label: "Apple",
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
disabled: true,
|
|
81
|
+
title: "icon",
|
|
82
|
+
onClick: (value?) => {
|
|
83
|
+
console.log(value);
|
|
84
|
+
},
|
|
85
|
+
options: [
|
|
86
|
+
{
|
|
87
|
+
value: "1",
|
|
88
|
+
label: "Amazon with a very long text",
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
value: "2",
|
|
92
|
+
label: "Ebay",
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
value: "3",
|
|
96
|
+
label: "Apple",
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
icon: icon1,
|
|
102
|
+
title: "icon",
|
|
103
|
+
onClick: () => {},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
icon: icon1,
|
|
107
|
+
title: "icon",
|
|
108
|
+
onClick: () => {},
|
|
109
|
+
disabled: true,
|
|
110
|
+
},
|
|
111
|
+
];
|
|
112
|
+
|
|
20
113
|
export const Chromatic = () => (
|
|
21
114
|
<>
|
|
22
115
|
<ExampleContainer>
|
|
23
116
|
<Title title="Default" theme="light" level={4} />
|
|
24
117
|
<DxcTable>
|
|
118
|
+
<tr>
|
|
119
|
+
<th>header 1</th>
|
|
120
|
+
<th>header 2</th>
|
|
121
|
+
<th>actions</th>
|
|
122
|
+
</tr>
|
|
123
|
+
<tr>
|
|
124
|
+
<td>cell 1</td>
|
|
125
|
+
<td>cell 2</td>
|
|
126
|
+
<td>
|
|
127
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
128
|
+
</td>
|
|
129
|
+
</tr>
|
|
130
|
+
<tr>
|
|
131
|
+
<td>cell 4</td>
|
|
132
|
+
<td>cell 5</td>
|
|
133
|
+
<td>
|
|
134
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
135
|
+
</td>
|
|
136
|
+
</tr>
|
|
137
|
+
<tr>
|
|
138
|
+
<td>cell 7</td>
|
|
139
|
+
<td>cell 8</td>
|
|
140
|
+
<td>
|
|
141
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
142
|
+
</td>
|
|
143
|
+
</tr>
|
|
144
|
+
</DxcTable>
|
|
145
|
+
</ExampleContainer>
|
|
146
|
+
<ExampleContainer>
|
|
147
|
+
<Title title="Custom actionsCell theme" theme="light" level={4} />
|
|
148
|
+
<HalstackProvider advancedTheme={advancedTheme}>
|
|
149
|
+
<DxcTable>
|
|
150
|
+
<tr>
|
|
151
|
+
<th>header 1</th>
|
|
152
|
+
<th>header 2</th>
|
|
153
|
+
<th>actions</th>
|
|
154
|
+
</tr>
|
|
155
|
+
<tr>
|
|
156
|
+
<td>cell 1</td>
|
|
157
|
+
<td>cell 2</td>
|
|
158
|
+
<td>
|
|
159
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
160
|
+
</td>
|
|
161
|
+
</tr>
|
|
162
|
+
<tr>
|
|
163
|
+
<td>cell 4</td>
|
|
164
|
+
<td>cell 5</td>
|
|
165
|
+
<td>
|
|
166
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
167
|
+
</td>
|
|
168
|
+
</tr>
|
|
169
|
+
<tr>
|
|
170
|
+
<td>cell 7</td>
|
|
171
|
+
<td>cell 8</td>
|
|
172
|
+
<td>
|
|
173
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
174
|
+
</td>
|
|
175
|
+
</tr>
|
|
176
|
+
</DxcTable>
|
|
177
|
+
</HalstackProvider>
|
|
178
|
+
</ExampleContainer>
|
|
179
|
+
<ExampleContainer>
|
|
180
|
+
<Title title="With scrollbar" theme="light" level={4} />
|
|
181
|
+
<div
|
|
182
|
+
style={{ height: 200 + "px", display: "flex", flexDirection: "row", width: 100 + "%", marginBottom: 50 + "px" }}
|
|
183
|
+
>
|
|
184
|
+
<DxcTable>
|
|
185
|
+
<tr>
|
|
186
|
+
<th>
|
|
187
|
+
header<br></br>subheader
|
|
188
|
+
</th>
|
|
189
|
+
<th>
|
|
190
|
+
header<br></br>subheader
|
|
191
|
+
</th>
|
|
192
|
+
<th>
|
|
193
|
+
header<br></br>subheader
|
|
194
|
+
</th>
|
|
195
|
+
</tr>
|
|
196
|
+
<tr>
|
|
197
|
+
<td>
|
|
198
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
|
|
199
|
+
dolore magna aliqua.
|
|
200
|
+
</td>
|
|
201
|
+
<td>
|
|
202
|
+
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
|
|
203
|
+
consequat.
|
|
204
|
+
</td>
|
|
205
|
+
<td>
|
|
206
|
+
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
|
|
207
|
+
</td>
|
|
208
|
+
</tr>
|
|
209
|
+
<tr>
|
|
210
|
+
<td>cell data</td>
|
|
211
|
+
<td>cell data</td>
|
|
212
|
+
<td>cell data</td>
|
|
213
|
+
</tr>
|
|
214
|
+
<tr>
|
|
215
|
+
<td>cell data</td>
|
|
216
|
+
<td>cell data</td>
|
|
217
|
+
<td>cell data</td>
|
|
218
|
+
</tr>
|
|
219
|
+
<tr>
|
|
220
|
+
<td>cell data</td>
|
|
221
|
+
<td>cell data</td>
|
|
222
|
+
<td>cell data</td>
|
|
223
|
+
</tr>
|
|
224
|
+
<tr>
|
|
225
|
+
<td>cell data</td>
|
|
226
|
+
<td>cell data</td>
|
|
227
|
+
<td>cell data</td>
|
|
228
|
+
</tr>
|
|
229
|
+
<tr>
|
|
230
|
+
<td>cell data</td>
|
|
231
|
+
<td>cell data</td>
|
|
232
|
+
<td>cell data</td>
|
|
233
|
+
</tr>
|
|
234
|
+
<tr>
|
|
235
|
+
<td>cell data</td>
|
|
236
|
+
<td>cell data</td>
|
|
237
|
+
<td>cell data</td>
|
|
238
|
+
</tr>
|
|
239
|
+
<tr>
|
|
240
|
+
<td>cell data</td>
|
|
241
|
+
<td>cell data</td>
|
|
242
|
+
<td>cell data</td>
|
|
243
|
+
</tr>
|
|
244
|
+
<tr>
|
|
245
|
+
<td>cell data</td>
|
|
246
|
+
<td>cell data</td>
|
|
247
|
+
<td>cell data</td>
|
|
248
|
+
</tr>
|
|
249
|
+
</DxcTable>
|
|
250
|
+
</div>
|
|
251
|
+
</ExampleContainer>
|
|
252
|
+
<ExampleContainer>
|
|
253
|
+
<Title title="Default reduced" theme="light" level={4} />
|
|
254
|
+
<DxcTable mode="reduced">
|
|
25
255
|
<tr>
|
|
26
256
|
<th>header 1</th>
|
|
27
257
|
<th>header 2</th>
|
|
@@ -45,11 +275,11 @@ export const Chromatic = () => (
|
|
|
45
275
|
</DxcTable>
|
|
46
276
|
</ExampleContainer>
|
|
47
277
|
<ExampleContainer>
|
|
48
|
-
<Title title="
|
|
278
|
+
<Title title="Reduced with scrollbar" theme="light" level={4} />
|
|
49
279
|
<div
|
|
50
280
|
style={{ height: 200 + "px", display: "flex", flexDirection: "row", width: 100 + "%", marginBottom: 50 + "px" }}
|
|
51
281
|
>
|
|
52
|
-
<DxcTable>
|
|
282
|
+
<DxcTable mode="reduced">
|
|
53
283
|
<tr>
|
|
54
284
|
<th>
|
|
55
285
|
header<br></br>subheader
|
|
@@ -117,6 +347,37 @@ export const Chromatic = () => (
|
|
|
117
347
|
</DxcTable>
|
|
118
348
|
</div>
|
|
119
349
|
</ExampleContainer>
|
|
350
|
+
<ExampleContainer>
|
|
351
|
+
<Title title="Reduced table with actions" theme="light" level={4} />
|
|
352
|
+
<DxcTable mode="reduced">
|
|
353
|
+
<tr>
|
|
354
|
+
<th>header 1</th>
|
|
355
|
+
<th>header 2</th>
|
|
356
|
+
<th>header 3</th>
|
|
357
|
+
</tr>
|
|
358
|
+
<tr>
|
|
359
|
+
<td>cell 1</td>
|
|
360
|
+
<td>cell 2</td>
|
|
361
|
+
<td>
|
|
362
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
363
|
+
</td>
|
|
364
|
+
</tr>
|
|
365
|
+
<tr>
|
|
366
|
+
<td>cell 4</td>
|
|
367
|
+
<td>cell 5</td>
|
|
368
|
+
<td>
|
|
369
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
370
|
+
</td>
|
|
371
|
+
</tr>
|
|
372
|
+
<tr>
|
|
373
|
+
<td>cell 7</td>
|
|
374
|
+
<td>cell 8</td>
|
|
375
|
+
<td>
|
|
376
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
377
|
+
</td>
|
|
378
|
+
</tr>
|
|
379
|
+
</DxcTable>
|
|
380
|
+
</ExampleContainer>
|
|
120
381
|
<Title title="Margins" theme="light" level={2} />
|
|
121
382
|
<ExampleContainer>
|
|
122
383
|
<Title title="Xxsmall margin" theme="light" level={4} />
|
|
@@ -354,3 +615,44 @@ export const Chromatic = () => (
|
|
|
354
615
|
</ExampleContainer>
|
|
355
616
|
</>
|
|
356
617
|
);
|
|
618
|
+
|
|
619
|
+
const ActionsCellDropdown = () => (
|
|
620
|
+
<ExampleContainer>
|
|
621
|
+
<Title title="Dropdown Action" theme="light" level={4} />
|
|
622
|
+
<DxcTable>
|
|
623
|
+
<tr>
|
|
624
|
+
<th>header 1</th>
|
|
625
|
+
<th>header 2</th>
|
|
626
|
+
<th>actions</th>
|
|
627
|
+
</tr>
|
|
628
|
+
<tr>
|
|
629
|
+
<td>cell 1</td>
|
|
630
|
+
<td>cell 2</td>
|
|
631
|
+
<td>
|
|
632
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
633
|
+
</td>
|
|
634
|
+
</tr>
|
|
635
|
+
<tr>
|
|
636
|
+
<td>cell 4</td>
|
|
637
|
+
<td>cell 5</td>
|
|
638
|
+
<td>
|
|
639
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
640
|
+
</td>
|
|
641
|
+
</tr>
|
|
642
|
+
<tr>
|
|
643
|
+
<td>cell 7</td>
|
|
644
|
+
<td>cell 8</td>
|
|
645
|
+
<td>
|
|
646
|
+
<DxcTable.ActionsCell actions={actions} />
|
|
647
|
+
</td>
|
|
648
|
+
</tr>
|
|
649
|
+
</DxcTable>
|
|
650
|
+
</ExampleContainer>
|
|
651
|
+
);
|
|
652
|
+
|
|
653
|
+
export const DropdownAction = ActionsCellDropdown.bind({});
|
|
654
|
+
DropdownAction.play = async ({ canvasElement }) => {
|
|
655
|
+
const canvas = within(canvasElement);
|
|
656
|
+
const nextButton = canvas.getAllByRole("button")[8];
|
|
657
|
+
await userEvent.click(nextButton);
|
|
658
|
+
};
|
package/table/Table.test.js
CHANGED
|
@@ -1,9 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
7
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
4
8
|
var _react = _interopRequireDefault(require("react"));
|
|
5
9
|
var _react2 = require("@testing-library/react");
|
|
6
10
|
var _Table = _interopRequireDefault(require("./Table.tsx"));
|
|
11
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
12
|
+
global.globalThis = global;
|
|
13
|
+
global.DOMRect = {
|
|
14
|
+
fromRect: function fromRect() {
|
|
15
|
+
return {
|
|
16
|
+
top: 0,
|
|
17
|
+
left: 0,
|
|
18
|
+
bottom: 0,
|
|
19
|
+
right: 0,
|
|
20
|
+
width: 0,
|
|
21
|
+
height: 0
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
global.ResizeObserver = /*#__PURE__*/function () {
|
|
26
|
+
function ResizeObserver() {
|
|
27
|
+
(0, _classCallCheck2["default"])(this, ResizeObserver);
|
|
28
|
+
}
|
|
29
|
+
(0, _createClass2["default"])(ResizeObserver, [{
|
|
30
|
+
key: "observe",
|
|
31
|
+
value: function observe() {}
|
|
32
|
+
}, {
|
|
33
|
+
key: "unobserve",
|
|
34
|
+
value: function unobserve() {}
|
|
35
|
+
}, {
|
|
36
|
+
key: "disconnect",
|
|
37
|
+
value: function disconnect() {}
|
|
38
|
+
}]);
|
|
39
|
+
return ResizeObserver;
|
|
40
|
+
}();
|
|
41
|
+
var icon = /*#__PURE__*/_react["default"].createElement("svg", {
|
|
42
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
43
|
+
height: "24px",
|
|
44
|
+
viewBox: "0 0 24 24",
|
|
45
|
+
width: "24px",
|
|
46
|
+
fill: "currentColor"
|
|
47
|
+
}, /*#__PURE__*/_react["default"].createElement("path", {
|
|
48
|
+
d: "M0 0h24v24H0V0zm0 0h24v24H0V0z",
|
|
49
|
+
fill: "none"
|
|
50
|
+
}), /*#__PURE__*/_react["default"].createElement("path", {
|
|
51
|
+
d: "M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z"
|
|
52
|
+
}));
|
|
7
53
|
describe("Table component tests", function () {
|
|
8
54
|
test("Table renders with correct content", function () {
|
|
9
55
|
var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Table["default"], null, /*#__PURE__*/_react["default"].createElement("thead", null, /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("th", null, "header-1"), /*#__PURE__*/_react["default"].createElement("th", null, "header-2"), /*#__PURE__*/_react["default"].createElement("th", null, "header-3"))), /*#__PURE__*/_react["default"].createElement("tbody", null, /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", null, "cell-1"), /*#__PURE__*/_react["default"].createElement("td", null, "cell-2"), /*#__PURE__*/_react["default"].createElement("td", null, "cell-3")), /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", null, "cell-4"), /*#__PURE__*/_react["default"].createElement("td", null, "cell-5"), /*#__PURE__*/_react["default"].createElement("td", null, "cell-6"))))),
|
|
@@ -18,4 +64,50 @@ describe("Table component tests", function () {
|
|
|
18
64
|
expect(getByText("cell-5")).toBeTruthy();
|
|
19
65
|
expect(getByText("cell-6")).toBeTruthy();
|
|
20
66
|
});
|
|
67
|
+
test("Table ActionsCell", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
68
|
+
var onSelectOption, onClick, actions, _render2, getAllByRole, getByRole, getByText, dropdown, option, action;
|
|
69
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
70
|
+
while (1) switch (_context.prev = _context.next) {
|
|
71
|
+
case 0:
|
|
72
|
+
onSelectOption = jest.fn();
|
|
73
|
+
onClick = jest.fn();
|
|
74
|
+
actions = [{
|
|
75
|
+
icon: icon,
|
|
76
|
+
title: "icon1",
|
|
77
|
+
onClick: onSelectOption,
|
|
78
|
+
options: [{
|
|
79
|
+
value: "1",
|
|
80
|
+
label: "Amazon"
|
|
81
|
+
}, {
|
|
82
|
+
value: "2",
|
|
83
|
+
label: "Ebay"
|
|
84
|
+
}, {
|
|
85
|
+
value: "3",
|
|
86
|
+
label: "Aliexpress"
|
|
87
|
+
}]
|
|
88
|
+
}, {
|
|
89
|
+
icon: icon,
|
|
90
|
+
title: "icon2",
|
|
91
|
+
onClick: onClick
|
|
92
|
+
}];
|
|
93
|
+
_render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Table["default"], null, /*#__PURE__*/_react["default"].createElement("thead", null, /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("th", null, "header-1"), /*#__PURE__*/_react["default"].createElement("th", null, "header-2"), /*#__PURE__*/_react["default"].createElement("th", null, "header-3"))), /*#__PURE__*/_react["default"].createElement("tbody", null, /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", null, "cell-1"), /*#__PURE__*/_react["default"].createElement("td", null, "cell-2"), /*#__PURE__*/_react["default"].createElement("td", null, "cell-3")), /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", null, "cell-4"), /*#__PURE__*/_react["default"].createElement("td", null, "cell-5"), /*#__PURE__*/_react["default"].createElement("td", null, /*#__PURE__*/_react["default"].createElement(_Table["default"].ActionsCell, {
|
|
94
|
+
actions: actions
|
|
95
|
+
})))))), getAllByRole = _render2.getAllByRole, getByRole = _render2.getByRole, getByText = _render2.getByText;
|
|
96
|
+
dropdown = getAllByRole("button")[1];
|
|
97
|
+
(0, _react2.act)(function () {
|
|
98
|
+
_userEvent["default"].click(dropdown);
|
|
99
|
+
});
|
|
100
|
+
expect(getByRole("menu")).toBeTruthy();
|
|
101
|
+
option = getByText("Aliexpress");
|
|
102
|
+
_userEvent["default"].click(option);
|
|
103
|
+
expect(onSelectOption).toHaveBeenCalledWith("3");
|
|
104
|
+
action = getAllByRole("button")[0];
|
|
105
|
+
_userEvent["default"].click(action);
|
|
106
|
+
expect(onClick).toHaveBeenCalled();
|
|
107
|
+
case 13:
|
|
108
|
+
case "end":
|
|
109
|
+
return _context.stop();
|
|
110
|
+
}
|
|
111
|
+
}, _callee);
|
|
112
|
+
})));
|
|
21
113
|
});
|
package/table/types.d.ts
CHANGED
|
@@ -6,6 +6,42 @@ type Margin = {
|
|
|
6
6
|
left?: Space;
|
|
7
7
|
right?: Space;
|
|
8
8
|
};
|
|
9
|
+
type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
|
|
10
|
+
type Option = {
|
|
11
|
+
/**
|
|
12
|
+
* Option display value.
|
|
13
|
+
*/
|
|
14
|
+
label?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Element or path used as the icon that will be placed next to the
|
|
17
|
+
* option label.
|
|
18
|
+
*/
|
|
19
|
+
icon?: string | SVG;
|
|
20
|
+
/**
|
|
21
|
+
* Option inner value.
|
|
22
|
+
*/
|
|
23
|
+
value: string;
|
|
24
|
+
};
|
|
25
|
+
export type DeepPartial<T> = {
|
|
26
|
+
[P in keyof T]?: Partial<T[P]>;
|
|
27
|
+
};
|
|
28
|
+
export type ActionCellsPropsType = {
|
|
29
|
+
actions: Array<{
|
|
30
|
+
icon: string | SVG;
|
|
31
|
+
title: string;
|
|
32
|
+
onClick: () => void;
|
|
33
|
+
disabled?: boolean;
|
|
34
|
+
tabIndex?: number;
|
|
35
|
+
options?: never;
|
|
36
|
+
} | {
|
|
37
|
+
icon?: never;
|
|
38
|
+
title: string;
|
|
39
|
+
onClick: (value?: string) => void;
|
|
40
|
+
disabled?: boolean;
|
|
41
|
+
tabIndex?: number;
|
|
42
|
+
options: Option[];
|
|
43
|
+
}>;
|
|
44
|
+
};
|
|
9
45
|
type Props = {
|
|
10
46
|
/**
|
|
11
47
|
* The center section of the table. Can be used to render custom
|
|
@@ -17,5 +53,11 @@ type Props = {
|
|
|
17
53
|
* You can pass an object with 'top', 'bottom', 'left' and 'right' properties in order to specify different margin sizes.
|
|
18
54
|
*/
|
|
19
55
|
margin?: Space | Margin;
|
|
56
|
+
/**
|
|
57
|
+
* Determines the visual style and layout
|
|
58
|
+
* - "default": Default table size.
|
|
59
|
+
* - "reduced": More compact table with less spacing for high density information.
|
|
60
|
+
*/
|
|
61
|
+
mode?: "default" | "reduced";
|
|
20
62
|
};
|
|
21
63
|
export default Props;
|
package/tabs/Tab.js
CHANGED
|
@@ -46,7 +46,8 @@ var Tab = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
46
46
|
}, /*#__PURE__*/_react["default"].createElement(MainLabelContainer, {
|
|
47
47
|
notificationNumber: tab.notificationNumber,
|
|
48
48
|
hasLabelAndIcon: hasLabelAndIcon,
|
|
49
|
-
iconPosition: iconPosition
|
|
49
|
+
iconPosition: iconPosition,
|
|
50
|
+
disabled: tab.isDisabled
|
|
50
51
|
}, tab.icon && /*#__PURE__*/_react["default"].createElement(TabIconContainer, {
|
|
51
52
|
hasLabelAndIcon: hasLabelAndIcon,
|
|
52
53
|
iconPosition: iconPosition
|
|
@@ -61,11 +62,13 @@ var Tab = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
61
62
|
textAlign: "center",
|
|
62
63
|
letterSpacing: "0.025em",
|
|
63
64
|
lineHeight: "1.715em"
|
|
64
|
-
}, tab.label)), tab.notificationNumber && /*#__PURE__*/_react["default"].createElement(BadgeContainer, {
|
|
65
|
+
}, tab.label)), tab.notificationNumber && !tab.isDisabled && /*#__PURE__*/_react["default"].createElement(BadgeContainer, {
|
|
65
66
|
hasLabelAndIcon: hasLabelAndIcon,
|
|
66
67
|
iconPosition: iconPosition
|
|
67
68
|
}, /*#__PURE__*/_react["default"].createElement(_Badge["default"], {
|
|
68
|
-
|
|
69
|
+
mode: "notification",
|
|
70
|
+
size: "small",
|
|
71
|
+
label: typeof tab.notificationNumber === "number" && tab.notificationNumber
|
|
69
72
|
})));
|
|
70
73
|
});
|
|
71
74
|
var TabContainer = _styledComponents["default"].button(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n text-transform: ", ";\n overflow: hidden;\n flex-shrink: 0;\n border: 0;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n user-select: none;\n vertical-align: middle;\n justify-content: center;\n min-width: 90px;\n max-width: 360px;\n padding: ", ";\n height: ", ";\n min-height: ", ";\n background-color: ", ";\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n &:focus {\n outline: ", " solid 1px;\n outline-offset: -1px;\n }\n svg {\n color: ", ";\n }\n\n &[aria-selected=\"true\"] {\n background-color: ", ";\n svg {\n color: ", ";\n }\n opacity: 1;\n }\n\n &:disabled {\n background-color: ", " !important;\n cursor: not-allowed !important;\n pointer-events: all;\n font-style: ", ";\n outline: none !important;\n\n svg {\n color: ", ";\n }\n > div {\n opacity: 0.5;\n }\n }\n"])), function (props) {
|
|
@@ -103,7 +106,7 @@ var BadgeContainer = _styledComponents["default"].div(_templateObject2 || (_temp
|
|
|
103
106
|
var MainLabelContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: ", ";\n align-items: center;\n margin-left: ", ";\n"])), function (props) {
|
|
104
107
|
return props.hasLabelAndIcon && props.iconPosition === "top" && "column" || "row";
|
|
105
108
|
}, function (props) {
|
|
106
|
-
return props.notificationNumber ? typeof props.notificationNumber === "number" ? "
|
|
109
|
+
return props.notificationNumber && !props.disabled ? typeof props.notificationNumber === "number" ? "36px" : "18px" : "unset";
|
|
107
110
|
});
|
|
108
111
|
var TabIconContainer = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n margin-bottom: ", ";\n margin-right: ", ";\n\n img,\n svg {\n height: 22px;\n width: 22px;\n }\n"])), function (props) {
|
|
109
112
|
return props.hasLabelAndIcon && props.iconPosition === "top" && "8px" || "";
|
package/tabs/Tabs.js
CHANGED
|
@@ -40,14 +40,13 @@ var useResize = function useResize(refTabList) {
|
|
|
40
40
|
viewWidth = _useState2[0],
|
|
41
41
|
setViewWidth = _useState2[1];
|
|
42
42
|
var handleWindowSizeChange = (0, _react.useCallback)(function () {
|
|
43
|
-
var _refTabList$current;
|
|
44
|
-
setViewWidth(refTabList === null || refTabList === void 0 ? void 0 : (_refTabList$current = refTabList.current) === null || _refTabList$current === void 0 ? void 0 : _refTabList$current.offsetWidth);
|
|
43
|
+
var _refTabList$current$o, _refTabList$current;
|
|
44
|
+
setViewWidth((_refTabList$current$o = refTabList === null || refTabList === void 0 ? void 0 : (_refTabList$current = refTabList.current) === null || _refTabList$current === void 0 ? void 0 : _refTabList$current.offsetWidth) !== null && _refTabList$current$o !== void 0 ? _refTabList$current$o : 0);
|
|
45
45
|
}, [refTabList]);
|
|
46
46
|
(0, _react.useEffect)(function () {
|
|
47
|
-
|
|
47
|
+
handleWindowSizeChange();
|
|
48
48
|
window.addEventListener("resize", handleWindowSizeChange);
|
|
49
49
|
return function () {
|
|
50
|
-
window.removeEventListener("load", handleWindowSizeChange);
|
|
51
50
|
window.removeEventListener("resize", handleWindowSizeChange);
|
|
52
51
|
};
|
|
53
52
|
}, [handleWindowSizeChange]);
|
|
@@ -349,7 +348,7 @@ var Tabs = _styledComponents["default"].div(_templateObject3 || (_templateObject
|
|
|
349
348
|
}, function (props) {
|
|
350
349
|
return props.theme.unselectedBackgroundColor;
|
|
351
350
|
});
|
|
352
|
-
var ScrollIndicator = _styledComponents["default"].button(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: ", ";\n justify-content: center;\n min-width: ", ";\n height: ", "px;\n padding: 0;\n border: none;\n background-color: #ffffff;\n font-size: 1.25rem;\n cursor: pointer;\n\n &:hover {\n background-color: ", ";\n }\n &:focus {\n outline: ", " solid 1px;\n outline-offset: -1px;\n }\n &:active {\n background-color: ", ";\n }\n &:disabled {\n cursor: default;\n svg {\n visibility: hidden;\n }\n &:focus {\n outline: none;\n }\n &:hover,\n &:active {\n background-color: transparent !important;\n }\n }\n\n svg {\n align-self: center;\n height: 20px;\n width: 20px;\n fill: ", ";\n }\n"])), function (props) {
|
|
351
|
+
var ScrollIndicator = _styledComponents["default"].button(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: ", ";\n justify-content: center;\n min-width: ", ";\n height: ", "px;\n padding: 0;\n border: none;\n background-color: #ffffff;\n font-size: 1.25rem;\n cursor: pointer;\n\n &:hover {\n background-color: ", ";\n }\n &:focus {\n outline: ", " solid 1px;\n outline-offset: -1px;\n }\n &:active {\n background-color: ", ";\n }\n &:disabled {\n cursor: default;\n display: none;\n svg {\n visibility: hidden;\n }\n &:focus {\n outline: none;\n }\n &:hover,\n &:active {\n background-color: transparent !important;\n }\n }\n\n svg {\n align-self: center;\n height: 20px;\n width: 20px;\n fill: ", ";\n }\n"])), function (props) {
|
|
353
352
|
return props.enabled ? "flex" : "none";
|
|
354
353
|
}, function (props) {
|
|
355
354
|
return props.theme.scrollButtonsWidth;
|
package/tabs/Tabs.stories.tsx
CHANGED
|
@@ -71,7 +71,7 @@ const firstDisabledTabs: any = [
|
|
|
71
71
|
|
|
72
72
|
const tabsNotification = tabs.map((tab, index) => ({
|
|
73
73
|
...tab,
|
|
74
|
-
notificationNumber: (index === 0 && true) || (index === 1 && 5) || (index === 2 && 200),
|
|
74
|
+
notificationNumber: (index === 0 && true) || (index === 1 && 5) || (index === 2 && 100) || (index === 3 && 200),
|
|
75
75
|
}));
|
|
76
76
|
|
|
77
77
|
const tabsIcon = tabs.map((tab, index) =>
|