@dxc-technology/halstack-react 0.0.0-efa7c74 → 0.0.0-f00a97a

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.
Files changed (268) hide show
  1. package/BackgroundColorContext.d.ts +10 -0
  2. package/BackgroundColorContext.js +1 -4
  3. package/HalstackContext.d.ts +12 -0
  4. package/HalstackContext.js +295 -0
  5. package/accordion/Accordion.d.ts +1 -1
  6. package/accordion/Accordion.js +15 -47
  7. package/accordion/Accordion.stories.tsx +307 -0
  8. package/accordion/Accordion.test.js +72 -0
  9. package/accordion/types.d.ts +8 -8
  10. package/accordion-group/AccordionGroup.d.ts +1 -1
  11. package/accordion-group/AccordionGroup.js +16 -17
  12. package/accordion-group/AccordionGroup.stories.tsx +225 -0
  13. package/accordion-group/AccordionGroup.test.js +151 -0
  14. package/accordion-group/types.d.ts +8 -8
  15. package/alert/Alert.js +6 -3
  16. package/alert/Alert.test.js +92 -0
  17. package/badge/Badge.d.ts +4 -0
  18. package/badge/Badge.js +6 -4
  19. package/badge/types.d.ts +5 -0
  20. package/{radio → badge}/types.js +0 -0
  21. package/bleed/Bleed.d.ts +3 -0
  22. package/bleed/Bleed.js +51 -0
  23. package/bleed/Bleed.stories.tsx +341 -0
  24. package/bleed/types.d.ts +37 -0
  25. package/bleed/types.js +5 -0
  26. package/box/Box.js +24 -34
  27. package/box/Box.test.js +18 -0
  28. package/bulleted-list/BulletedList.d.ts +7 -0
  29. package/bulleted-list/BulletedList.js +123 -0
  30. package/bulleted-list/BulletedList.stories.tsx +200 -0
  31. package/bulleted-list/types.d.ts +11 -0
  32. package/bulleted-list/types.js +5 -0
  33. package/button/Button.d.ts +1 -1
  34. package/button/Button.js +59 -82
  35. package/button/Button.stories.tsx +15 -8
  36. package/button/Button.test.js +35 -0
  37. package/button/types.d.ts +8 -12
  38. package/card/Card.js +25 -28
  39. package/card/Card.stories.tsx +1 -1
  40. package/card/Card.test.js +50 -0
  41. package/checkbox/Checkbox.d.ts +1 -1
  42. package/checkbox/Checkbox.js +45 -41
  43. package/checkbox/Checkbox.stories.tsx +124 -128
  44. package/checkbox/Checkbox.test.js +78 -0
  45. package/checkbox/types.d.ts +8 -4
  46. package/chip/Chip.d.ts +4 -0
  47. package/chip/Chip.js +16 -76
  48. package/chip/Chip.stories.tsx +6 -8
  49. package/chip/Chip.test.js +56 -0
  50. package/chip/types.d.ts +45 -0
  51. package/chip/types.js +5 -0
  52. package/common/variables.js +282 -355
  53. package/date-input/DateInput.js +66 -55
  54. package/date-input/DateInput.stories.tsx +7 -7
  55. package/date-input/DateInput.test.js +479 -0
  56. package/date-input/types.d.ts +16 -9
  57. package/dialog/Dialog.js +50 -53
  58. package/dialog/Dialog.stories.tsx +1 -2
  59. package/dialog/Dialog.test.js +70 -0
  60. package/dialog/types.d.ts +2 -2
  61. package/dropdown/Dropdown.d.ts +1 -1
  62. package/dropdown/Dropdown.js +242 -272
  63. package/dropdown/Dropdown.stories.tsx +312 -0
  64. package/dropdown/Dropdown.test.js +591 -0
  65. package/dropdown/DropdownMenu.d.ts +4 -0
  66. package/dropdown/DropdownMenu.js +80 -0
  67. package/dropdown/DropdownMenuItem.d.ts +4 -0
  68. package/dropdown/DropdownMenuItem.js +92 -0
  69. package/dropdown/types.d.ts +30 -19
  70. package/file-input/FileInput.d.ts +1 -1
  71. package/file-input/FileInput.js +165 -83
  72. package/file-input/FileInput.stories.tsx +507 -0
  73. package/file-input/FileInput.test.js +457 -0
  74. package/file-input/FileItem.js +12 -8
  75. package/file-input/types.d.ts +32 -7
  76. package/flex/Flex.d.ts +4 -0
  77. package/flex/Flex.js +57 -0
  78. package/flex/Flex.stories.tsx +103 -0
  79. package/flex/types.d.ts +21 -0
  80. package/flex/types.js +5 -0
  81. package/footer/Footer.d.ts +1 -1
  82. package/footer/Footer.js +32 -113
  83. package/footer/{Footer.stories.jsx → Footer.stories.tsx} +1 -22
  84. package/footer/Footer.test.js +109 -0
  85. package/footer/Icons.d.ts +2 -0
  86. package/footer/Icons.js +4 -4
  87. package/footer/types.d.ts +21 -17
  88. package/header/Header.js +97 -116
  89. package/header/Header.stories.tsx +46 -36
  90. package/header/Header.test.js +79 -0
  91. package/header/Icons.d.ts +2 -0
  92. package/header/Icons.js +2 -2
  93. package/header/types.d.ts +2 -2
  94. package/heading/Heading.js +1 -1
  95. package/heading/Heading.stories.tsx +3 -2
  96. package/heading/Heading.test.js +186 -0
  97. package/inset/Inset.d.ts +3 -0
  98. package/inset/Inset.js +51 -0
  99. package/inset/Inset.stories.tsx +229 -0
  100. package/inset/types.d.ts +37 -0
  101. package/inset/types.js +5 -0
  102. package/layout/ApplicationLayout.d.ts +20 -0
  103. package/layout/ApplicationLayout.js +71 -135
  104. package/layout/ApplicationLayout.stories.tsx +161 -0
  105. package/layout/Icons.d.ts +5 -0
  106. package/layout/Icons.js +13 -2
  107. package/layout/SidenavContext.d.ts +5 -0
  108. package/layout/SidenavContext.js +19 -0
  109. package/layout/types.d.ts +42 -0
  110. package/layout/types.js +5 -0
  111. package/link/Link.d.ts +3 -2
  112. package/link/Link.js +61 -86
  113. package/link/Link.stories.tsx +99 -52
  114. package/link/Link.test.js +83 -0
  115. package/link/types.d.ts +9 -29
  116. package/main.d.ts +12 -12
  117. package/main.js +64 -58
  118. package/number-input/NumberInput.js +14 -24
  119. package/number-input/NumberInput.stories.tsx +5 -5
  120. package/number-input/NumberInput.test.js +506 -0
  121. package/number-input/types.d.ts +17 -10
  122. package/package.json +14 -10
  123. package/paginator/Paginator.js +19 -46
  124. package/paginator/Paginator.test.js +308 -0
  125. package/paragraph/Paragraph.d.ts +6 -0
  126. package/paragraph/Paragraph.js +38 -0
  127. package/paragraph/Paragraph.stories.tsx +44 -0
  128. package/password-input/PasswordInput.js +23 -19
  129. package/password-input/PasswordInput.stories.tsx +3 -3
  130. package/password-input/PasswordInput.test.js +180 -0
  131. package/password-input/types.d.ts +26 -21
  132. package/progress-bar/ProgressBar.d.ts +2 -2
  133. package/progress-bar/ProgressBar.js +59 -53
  134. package/progress-bar/ProgressBar.stories.jsx +13 -11
  135. package/progress-bar/ProgressBar.test.js +110 -0
  136. package/progress-bar/types.d.ts +3 -4
  137. package/quick-nav/QuickNav.d.ts +4 -0
  138. package/quick-nav/QuickNav.js +118 -0
  139. package/quick-nav/QuickNav.stories.tsx +264 -0
  140. package/quick-nav/types.d.ts +21 -0
  141. package/quick-nav/types.js +5 -0
  142. package/radio-group/Radio.d.ts +4 -0
  143. package/radio-group/Radio.js +141 -0
  144. package/radio-group/RadioGroup.d.ts +4 -0
  145. package/radio-group/RadioGroup.js +281 -0
  146. package/radio-group/RadioGroup.stories.tsx +100 -0
  147. package/radio-group/RadioGroup.test.js +695 -0
  148. package/radio-group/types.d.ts +114 -0
  149. package/radio-group/types.js +5 -0
  150. package/resultsetTable/ResultsetTable.d.ts +1 -1
  151. package/resultsetTable/ResultsetTable.js +9 -4
  152. package/resultsetTable/ResultsetTable.stories.tsx +275 -0
  153. package/resultsetTable/ResultsetTable.test.js +348 -0
  154. package/resultsetTable/types.d.ts +6 -2
  155. package/select/Icons.d.ts +10 -0
  156. package/select/Icons.js +93 -0
  157. package/select/Listbox.d.ts +4 -0
  158. package/select/Listbox.js +199 -0
  159. package/select/Option.d.ts +4 -0
  160. package/select/Option.js +110 -0
  161. package/select/Select.d.ts +4 -0
  162. package/select/Select.js +158 -380
  163. package/select/Select.stories.tsx +231 -176
  164. package/select/Select.test.js +2175 -0
  165. package/select/types.d.ts +210 -0
  166. package/select/types.js +5 -0
  167. package/sidenav/Sidenav.d.ts +6 -5
  168. package/sidenav/Sidenav.js +186 -54
  169. package/sidenav/Sidenav.stories.tsx +154 -139
  170. package/sidenav/Sidenav.test.js +44 -0
  171. package/sidenav/types.d.ts +50 -27
  172. package/slider/Slider.d.ts +1 -1
  173. package/slider/Slider.js +7 -6
  174. package/slider/Slider.stories.tsx +8 -8
  175. package/slider/Slider.test.js +187 -0
  176. package/slider/types.d.ts +4 -0
  177. package/spinner/Spinner.js +3 -3
  178. package/spinner/Spinner.stories.jsx +1 -0
  179. package/spinner/Spinner.test.js +64 -0
  180. package/switch/Switch.d.ts +2 -2
  181. package/switch/Switch.js +129 -57
  182. package/switch/Switch.stories.tsx +21 -43
  183. package/switch/Switch.test.js +212 -0
  184. package/switch/types.d.ts +9 -6
  185. package/table/Table.js +2 -2
  186. package/table/Table.stories.jsx +2 -1
  187. package/table/Table.test.js +26 -0
  188. package/tabs/Tabs.d.ts +1 -1
  189. package/tabs/Tabs.js +17 -19
  190. package/tabs/Tabs.stories.tsx +7 -16
  191. package/tabs/Tabs.test.js +140 -0
  192. package/tabs/types.d.ts +27 -15
  193. package/tabs-nav/NavTabs.d.ts +8 -0
  194. package/tabs-nav/NavTabs.js +125 -0
  195. package/tabs-nav/NavTabs.stories.tsx +170 -0
  196. package/tabs-nav/NavTabs.test.js +82 -0
  197. package/tabs-nav/Tab.d.ts +4 -0
  198. package/tabs-nav/Tab.js +130 -0
  199. package/tabs-nav/types.d.ts +53 -0
  200. package/tabs-nav/types.js +5 -0
  201. package/tag/Tag.d.ts +1 -1
  202. package/tag/Tag.js +18 -28
  203. package/tag/Tag.stories.tsx +26 -29
  204. package/tag/Tag.test.js +60 -0
  205. package/tag/types.d.ts +23 -14
  206. package/text-input/Suggestion.d.ts +4 -0
  207. package/text-input/Suggestion.js +55 -0
  208. package/text-input/TextInput.js +100 -124
  209. package/text-input/TextInput.stories.tsx +473 -0
  210. package/text-input/TextInput.test.js +1712 -0
  211. package/text-input/types.d.ts +44 -23
  212. package/textarea/Textarea.d.ts +4 -0
  213. package/textarea/Textarea.js +39 -79
  214. package/textarea/Textarea.stories.jsx +37 -15
  215. package/textarea/Textarea.test.js +437 -0
  216. package/textarea/types.d.ts +137 -0
  217. package/textarea/types.js +5 -0
  218. package/toggle-group/ToggleGroup.d.ts +1 -1
  219. package/toggle-group/ToggleGroup.js +15 -17
  220. package/toggle-group/ToggleGroup.stories.tsx +27 -32
  221. package/toggle-group/ToggleGroup.test.js +156 -0
  222. package/toggle-group/types.d.ts +47 -26
  223. package/typography/Typography.d.ts +4 -0
  224. package/typography/Typography.js +131 -0
  225. package/typography/Typography.stories.tsx +198 -0
  226. package/typography/types.d.ts +18 -0
  227. package/typography/types.js +5 -0
  228. package/useTheme.d.ts +2 -0
  229. package/useTheme.js +2 -2
  230. package/useTranslatedLabels.d.ts +2 -0
  231. package/useTranslatedLabels.js +20 -0
  232. package/wizard/Wizard.d.ts +1 -1
  233. package/wizard/Wizard.js +112 -58
  234. package/wizard/{Wizard.stories.jsx → Wizard.stories.tsx} +33 -24
  235. package/wizard/Wizard.test.js +141 -0
  236. package/wizard/types.d.ts +13 -12
  237. package/ThemeContext.js +0 -246
  238. package/V3Select/V3Select.js +0 -455
  239. package/V3Select/index.d.ts +0 -27
  240. package/V3Textarea/V3Textarea.js +0 -260
  241. package/V3Textarea/index.d.ts +0 -27
  242. package/chip/index.d.ts +0 -22
  243. package/date/Date.js +0 -373
  244. package/date/index.d.ts +0 -27
  245. package/input-text/Icons.js +0 -22
  246. package/input-text/InputText.js +0 -611
  247. package/input-text/index.d.ts +0 -36
  248. package/radio/Radio.d.ts +0 -4
  249. package/radio/Radio.js +0 -174
  250. package/radio/Radio.stories.tsx +0 -192
  251. package/radio/types.d.ts +0 -54
  252. package/select/index.d.ts +0 -131
  253. package/textarea/index.d.ts +0 -117
  254. package/toggle/Toggle.js +0 -186
  255. package/toggle/index.d.ts +0 -21
  256. package/upload/Upload.js +0 -201
  257. package/upload/buttons-upload/ButtonsUpload.js +0 -111
  258. package/upload/buttons-upload/Icons.js +0 -40
  259. package/upload/dragAndDropArea/DragAndDropArea.js +0 -225
  260. package/upload/dragAndDropArea/Icons.js +0 -39
  261. package/upload/file-upload/FileToUpload.js +0 -115
  262. package/upload/file-upload/Icons.js +0 -66
  263. package/upload/files-upload/FilesToUpload.js +0 -109
  264. package/upload/index.d.ts +0 -15
  265. package/upload/transaction/Icons.js +0 -160
  266. package/upload/transaction/Transaction.js +0 -104
  267. package/upload/transactions/Transactions.js +0 -94
  268. package/wizard/Icons.js +0 -65
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
6
+
7
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
8
+
9
+ var _react = _interopRequireDefault(require("react"));
10
+
11
+ var _react2 = require("@testing-library/react");
12
+
13
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
14
+
15
+ var _ResultsetTable = _interopRequireDefault(require("./ResultsetTable"));
16
+
17
+ // Mocking DOMRect for Radix Primitive Popover
18
+ global.globalThis = global;
19
+
20
+ global.ResizeObserver = /*#__PURE__*/function () {
21
+ function ResizeObserver(cb) {
22
+ (0, _classCallCheck2["default"])(this, ResizeObserver);
23
+ this.cb = cb;
24
+ }
25
+
26
+ (0, _createClass2["default"])(ResizeObserver, [{
27
+ key: "observe",
28
+ value: function observe() {
29
+ this.cb([{
30
+ borderBoxSize: {
31
+ inlineSize: 0,
32
+ blockSize: 0
33
+ }
34
+ }]);
35
+ }
36
+ }, {
37
+ key: "unobserve",
38
+ value: function unobserve() {}
39
+ }]);
40
+ return ResizeObserver;
41
+ }();
42
+
43
+ global.DOMRect = {
44
+ fromRect: function fromRect() {
45
+ return {
46
+ top: 0,
47
+ left: 0,
48
+ bottom: 0,
49
+ right: 0,
50
+ width: 0,
51
+ height: 0
52
+ };
53
+ }
54
+ };
55
+ var columns = [{
56
+ displayValue: "Id",
57
+ isSortable: false
58
+ }, {
59
+ displayValue: "Name",
60
+ isSortable: true
61
+ }, {
62
+ displayValue: "City",
63
+ isSortable: false
64
+ }];
65
+ var rows = [[{
66
+ displayValue: "001",
67
+ sortValue: "001"
68
+ }, {
69
+ displayValue: "Peter",
70
+ sortValue: "Peter"
71
+ }, {
72
+ displayValue: "Oviedo",
73
+ sortValue: "Oviedo"
74
+ }], [{
75
+ displayValue: "002",
76
+ sortValue: "002"
77
+ }, {
78
+ displayValue: "Louis",
79
+ sortValue: "Louis"
80
+ }, {
81
+ displayValue: "Oviedo",
82
+ sortValue: "Oviedo"
83
+ }, {
84
+ displayValue: ""
85
+ }], [{
86
+ displayValue: "003",
87
+ sortValue: "003"
88
+ }, {
89
+ displayValue: "Lana",
90
+ sortValue: "Lana"
91
+ }, {
92
+ displayValue: "Albacete",
93
+ sortValue: "Albacete"
94
+ }], [{
95
+ displayValue: "004",
96
+ sortValue: "004"
97
+ }, {
98
+ displayValue: "Rick",
99
+ sortValue: "Rick"
100
+ }, {
101
+ displayValue: "Albacete",
102
+ sortValue: "Albacete"
103
+ }], [{
104
+ displayValue: "005",
105
+ sortValue: "005"
106
+ }, {
107
+ displayValue: "Mark",
108
+ sortValue: "Mark"
109
+ }, {
110
+ displayValue: "Madrid",
111
+ sortValue: "Madrid"
112
+ }], [{
113
+ displayValue: "006",
114
+ sortValue: "006"
115
+ }, {
116
+ displayValue: "Cris",
117
+ sortValue: "Cris"
118
+ }, {
119
+ displayValue: "Barcelona",
120
+ sortValue: "Barcelona"
121
+ }, {
122
+ displayValue: ""
123
+ }], [{
124
+ displayValue: "007",
125
+ sortValue: "007"
126
+ }, {
127
+ displayValue: "Susan",
128
+ sortValue: "Susan"
129
+ }, {
130
+ displayValue: "Madrid",
131
+ sortValue: "Madrid"
132
+ }], [{
133
+ displayValue: "008",
134
+ sortValue: "008"
135
+ }, {
136
+ displayValue: "Tina",
137
+ sortValue: "Tina"
138
+ }, {
139
+ displayValue: "Barcelona",
140
+ sortValue: "Barcelona"
141
+ }], [{
142
+ displayValue: "009",
143
+ sortValue: "009"
144
+ }, {
145
+ displayValue: "Kevin",
146
+ sortValue: "Kevin"
147
+ }, {
148
+ displayValue: "Oviedo",
149
+ sortValue: "Oviedo"
150
+ }, {
151
+ displayValue: ""
152
+ }], [{
153
+ displayValue: "010",
154
+ sortValue: "010"
155
+ }, {
156
+ displayValue: "Cosmin",
157
+ sortValue: "Cosmin"
158
+ }, {
159
+ displayValue: "Barcelona",
160
+ sortValue: "Barcelona"
161
+ }, {
162
+ displayValue: ""
163
+ }]];
164
+ var rows2 = [[{
165
+ displayValue: "546",
166
+ sortValue: "465"
167
+ }, {
168
+ displayValue: "OtherValue",
169
+ sortValue: "OtherValue"
170
+ }, {
171
+ displayValue: "OtherValue",
172
+ sortValue: "OtherValue"
173
+ }], [{
174
+ displayValue: "978",
175
+ sortValue: "465"
176
+ }, {
177
+ displayValue: "OtherValue",
178
+ sortValue: "OtherValue"
179
+ }, {
180
+ displayValue: "OtherValue",
181
+ sortValue: "OtherValue"
182
+ }, {
183
+ displayValue: ""
184
+ }], [{
185
+ displayValue: "678",
186
+ sortValue: "344"
187
+ }, {
188
+ displayValue: "OtherValue",
189
+ sortValue: "OtherValue"
190
+ }, {
191
+ displayValue: "OtherValue",
192
+ sortValue: "OtherValue"
193
+ }]];
194
+ describe("ResultsetTable component tests", function () {
195
+ test("ResultsetTable rendered correctly", function () {
196
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"], {
197
+ columns: columns,
198
+ rows: rows,
199
+ itemsPerPage: 3
200
+ })),
201
+ getByText = _render.getByText;
202
+
203
+ expect(getByText("Peter")).toBeTruthy();
204
+ });
205
+ test("Resultsettable shows as many rows as itemsPerPage", function () {
206
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"], {
207
+ columns: columns,
208
+ rows: rows,
209
+ itemsPerPage: 3
210
+ })),
211
+ getAllByRole = _render2.getAllByRole;
212
+
213
+ expect(getAllByRole("row").length - 1).toEqual(3);
214
+ });
215
+ test("Resultsettable shows rows on second page", function () {
216
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"], {
217
+ columns: columns,
218
+ rows: rows,
219
+ itemsPerPage: 3
220
+ })),
221
+ getByText = _render3.getByText,
222
+ getAllByRole = _render3.getAllByRole;
223
+
224
+ expect(getByText("Peter")).toBeTruthy();
225
+ expect(getByText("Louis")).toBeTruthy();
226
+ expect(getByText("Lana")).toBeTruthy();
227
+ expect(getAllByRole("row").length - 1).toEqual(3);
228
+ var nextButton = getAllByRole("button")[2];
229
+
230
+ _react2.fireEvent.click(nextButton);
231
+
232
+ expect(getByText("4 to 6 of 10")).toBeTruthy(); // expect(getByText("Page: 2 of 4")).toBeTruthy();
233
+
234
+ expect(getByText("Rick")).toBeTruthy();
235
+ expect(getByText("Mark")).toBeTruthy();
236
+ expect(getByText("Cris")).toBeTruthy();
237
+ expect(getAllByRole("row").length - 1).toEqual(3);
238
+ });
239
+ test("Resultsettable goToPage works as expected", function () {
240
+ window.HTMLElement.prototype.scrollIntoView = function () {};
241
+
242
+ window.HTMLElement.prototype.scrollTo = function () {};
243
+
244
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"], {
245
+ columns: columns,
246
+ showGoToPage: true,
247
+ rows: rows,
248
+ itemsPerPage: 3
249
+ })),
250
+ getByText = _render4.getByText,
251
+ getAllByRole = _render4.getAllByRole,
252
+ getByRole = _render4.getByRole;
253
+
254
+ expect(getByText("Peter")).toBeTruthy();
255
+ expect(getByText("Louis")).toBeTruthy();
256
+ expect(getByText("Lana")).toBeTruthy();
257
+ expect(getAllByRole("row").length - 1).toEqual(3);
258
+ var goToPageSelect = getAllByRole("button")[2];
259
+ (0, _react2.act)(function () {
260
+ _userEvent["default"].click(goToPageSelect);
261
+ });
262
+ var goToPageOption = getByText("2");
263
+ (0, _react2.act)(function () {
264
+ _userEvent["default"].click(goToPageOption);
265
+ });
266
+ expect(getByText("4 to 6 of 10")).toBeTruthy();
267
+ expect(getByText("Rick")).toBeTruthy();
268
+ expect(getByText("Mark")).toBeTruthy();
269
+ expect(getByText("Cris")).toBeTruthy();
270
+ expect(getAllByRole("row").length - 1).toEqual(3);
271
+ });
272
+ test("Resultsettable going to the last page shows only one row", function () {
273
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"], {
274
+ columns: columns,
275
+ rows: rows,
276
+ itemsPerPage: 3
277
+ })),
278
+ getByText = _render5.getByText,
279
+ getAllByRole = _render5.getAllByRole;
280
+
281
+ var lastButton = getAllByRole("button")[3];
282
+
283
+ _react2.fireEvent.click(lastButton);
284
+
285
+ expect(getByText("10 to 10 of 10")).toBeTruthy();
286
+ expect(getAllByRole("row")).toHaveLength(2);
287
+ expect(getByText("Cosmin")).toBeTruthy();
288
+ });
289
+ test("Resultsettable sort rows by column", function () {
290
+ var component = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"], {
291
+ columns: columns,
292
+ rows: rows,
293
+ itemsPerPage: 3
294
+ }));
295
+ expect(component.queryByText("Peter")).toBeTruthy();
296
+
297
+ _react2.fireEvent.click(component.queryByText("Name"));
298
+
299
+ expect(component.queryByText("Tina")).not.toBeTruthy();
300
+ expect(component.queryByText("Cosmin")).toBeTruthy();
301
+
302
+ _react2.fireEvent.click(component.queryByText("Name"));
303
+
304
+ expect(component.queryByText("Tina")).toBeTruthy();
305
+ expect(component.queryByText("Cosmin")).not.toBeTruthy();
306
+ });
307
+ test("Resultsettable change rows should go to first page", function () {
308
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"], {
309
+ columns: columns,
310
+ rows: rows,
311
+ itemsPerPage: 3
312
+ })),
313
+ queryByText = _render6.queryByText,
314
+ rerender = _render6.rerender;
315
+
316
+ expect(queryByText("Peter")).toBeTruthy();
317
+ rerender( /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"], {
318
+ columns: columns,
319
+ rows: rows2,
320
+ itemsPerPage: 3
321
+ }));
322
+ expect(queryByText("1 to 3 of 3")).toBeTruthy();
323
+ });
324
+ test("Resultsettable change itemsPerPage should go to first page", function () {
325
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"], {
326
+ columns: columns,
327
+ rows: rows,
328
+ itemsPerPage: 3,
329
+ itemsPerPageOptions: [2, 3]
330
+ })),
331
+ getAllByRole = _render7.getAllByRole,
332
+ queryByText = _render7.queryByText,
333
+ rerender = _render7.rerender;
334
+
335
+ var lastButton = getAllByRole("button")[3];
336
+
337
+ _react2.fireEvent.click(lastButton);
338
+
339
+ expect(getAllByRole("row").length - 1).toEqual(1);
340
+ rerender( /*#__PURE__*/_react["default"].createElement(_ResultsetTable["default"], {
341
+ columns: columns,
342
+ rows: rows,
343
+ itemsPerPage: 6
344
+ }));
345
+ expect(getAllByRole("row").length - 1).toEqual(6);
346
+ expect(queryByText("Peter")).toBeTruthy();
347
+ });
348
+ });
@@ -31,12 +31,16 @@ declare type Props = {
31
31
  /**
32
32
  * An array of objects representing the columns of the table.
33
33
  */
34
- columns: [Column, ...Column[]];
34
+ columns: Column[];
35
35
  /**
36
36
  * An array of objects representing the rows of the table, you will have
37
37
  * as many objects as columns in the table.
38
38
  */
39
- rows: [Row, ...Row[]];
39
+ rows: Row[][];
40
+ /**
41
+ * If true, a select component for navigation between pages will be displayed.
42
+ */
43
+ showGoToPage?: boolean;
40
44
  /**
41
45
  * Number of items per page.
42
46
  */
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ declare const selectIcons: {
3
+ error: JSX.Element;
4
+ arrowUp: JSX.Element;
5
+ arrowDown: JSX.Element;
6
+ clear: JSX.Element;
7
+ selected: JSX.Element;
8
+ searchOff: JSX.Element;
9
+ };
10
+ export default selectIcons;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var selectIcons = {
13
+ error: /*#__PURE__*/_react["default"].createElement("svg", {
14
+ role: "img",
15
+ xmlns: "http://www.w3.org/2000/svg",
16
+ height: "24px",
17
+ viewBox: "0 0 24 24",
18
+ width: "24px",
19
+ fill: "currentColor"
20
+ }, /*#__PURE__*/_react["default"].createElement("path", {
21
+ d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"
22
+ })),
23
+ arrowUp: /*#__PURE__*/_react["default"].createElement("svg", {
24
+ role: "img",
25
+ xmlns: "http://www.w3.org/2000/svg",
26
+ height: "24px",
27
+ viewBox: "0 0 24 24",
28
+ width: "24px",
29
+ fill: "currentColor"
30
+ }, /*#__PURE__*/_react["default"].createElement("path", {
31
+ d: "M0 0h24v24H0V0z",
32
+ fill: "none"
33
+ }), /*#__PURE__*/_react["default"].createElement("path", {
34
+ d: "M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6 1.41 1.41z"
35
+ })),
36
+ arrowDown: /*#__PURE__*/_react["default"].createElement("svg", {
37
+ role: "img",
38
+ xmlns: "http://www.w3.org/2000/svg",
39
+ height: "24px",
40
+ viewBox: "0 0 24 24",
41
+ width: "24px",
42
+ fill: "currentColor"
43
+ }, /*#__PURE__*/_react["default"].createElement("path", {
44
+ d: "M0 0h24v24H0V0z",
45
+ fill: "none"
46
+ }), /*#__PURE__*/_react["default"].createElement("path", {
47
+ d: "M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z"
48
+ })),
49
+ clear: /*#__PURE__*/_react["default"].createElement("svg", {
50
+ role: "img",
51
+ xmlns: "http://www.w3.org/2000/svg",
52
+ width: "24",
53
+ height: "24",
54
+ viewBox: "0 0 24 24",
55
+ fill: "currentColor"
56
+ }, /*#__PURE__*/_react["default"].createElement("path", {
57
+ d: "M0 0h24v24H0V0z",
58
+ fill: "none"
59
+ }), /*#__PURE__*/_react["default"].createElement("path", {
60
+ d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"
61
+ })),
62
+ selected: /*#__PURE__*/_react["default"].createElement("svg", {
63
+ role: "img",
64
+ xmlns: "http://www.w3.org/2000/svg",
65
+ height: "24px",
66
+ viewBox: "0 0 24 24",
67
+ width: "24px",
68
+ fill: "currentColor"
69
+ }, /*#__PURE__*/_react["default"].createElement("path", {
70
+ d: "M0 0h24v24H0z",
71
+ fill: "none"
72
+ }), /*#__PURE__*/_react["default"].createElement("path", {
73
+ d: "M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"
74
+ })),
75
+ searchOff: /*#__PURE__*/_react["default"].createElement("svg", {
76
+ role: "img",
77
+ xmlns: "http://www.w3.org/2000/svg",
78
+ height: "24px",
79
+ viewBox: "0 0 24 24",
80
+ width: "24px",
81
+ fill: "currentColor"
82
+ }, /*#__PURE__*/_react["default"].createElement("g", null, /*#__PURE__*/_react["default"].createElement("rect", {
83
+ fill: "none",
84
+ height: "24",
85
+ width: "24"
86
+ })), /*#__PURE__*/_react["default"].createElement("g", null, /*#__PURE__*/_react["default"].createElement("g", null, /*#__PURE__*/_react["default"].createElement("path", {
87
+ d: "M15.5,14h-0.79l-0.28-0.27C15.41,12.59,16,11.11,16,9.5C16,5.91,13.09,3,9.5,3C6.08,3,3.28,5.64,3.03,9h2.02 C5.3,6.75,7.18,5,9.5,5C11.99,5,14,7.01,14,9.5S11.99,14,9.5,14c-0.17,0-0.33-0.03-0.5-0.05v2.02C9.17,15.99,9.33,16,9.5,16 c1.61,0,3.09-0.59,4.23-1.57L14,14.71v0.79l5,4.99L20.49,19L15.5,14z"
88
+ }), /*#__PURE__*/_react["default"].createElement("polygon", {
89
+ points: "6.47,10.82 4,13.29 1.53,10.82 0.82,11.53 3.29,14 0.82,16.47 1.53,17.18 4,14.71 6.47,17.18 7.18,16.47 4.71,14 7.18,11.53"
90
+ }))))
91
+ };
92
+ var _default = selectIcons;
93
+ exports["default"] = _default;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { ListboxProps } from "./types";
3
+ declare const _default: React.MemoExoticComponent<({ id, currentValue, options, visualFocusIndex, lastOptionIndex, multiple, optional, optionalItem, searchable, handleOptionOnClick, getSelectWidth, }: ListboxProps) => JSX.Element>;
4
+ export default _default;
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports["default"] = void 0;
11
+
12
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
19
+
20
+ var _useTheme = _interopRequireDefault(require("../useTheme"));
21
+
22
+ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
23
+
24
+ var _Option = _interopRequireDefault(require("./Option"));
25
+
26
+ var _Icons = _interopRequireDefault(require("./Icons"));
27
+
28
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
29
+
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+
32
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
+
34
+ var groupsHaveOptions = function groupsHaveOptions(options) {
35
+ return options !== null && options !== void 0 && options[0].options ? options.some(function (groupOption) {
36
+ var _groupOption$options;
37
+
38
+ return ((_groupOption$options = groupOption.options) === null || _groupOption$options === void 0 ? void 0 : _groupOption$options.length) > 0;
39
+ }) : true;
40
+ };
41
+
42
+ var Listbox = function Listbox(_ref) {
43
+ var id = _ref.id,
44
+ currentValue = _ref.currentValue,
45
+ options = _ref.options,
46
+ visualFocusIndex = _ref.visualFocusIndex,
47
+ lastOptionIndex = _ref.lastOptionIndex,
48
+ multiple = _ref.multiple,
49
+ optional = _ref.optional,
50
+ optionalItem = _ref.optionalItem,
51
+ searchable = _ref.searchable,
52
+ handleOptionOnClick = _ref.handleOptionOnClick,
53
+ getSelectWidth = _ref.getSelectWidth;
54
+ var colorsTheme = (0, _useTheme["default"])();
55
+ var translatedLabels = (0, _useTranslatedLabels["default"])();
56
+ var listboxRef = (0, _react.useRef)(null);
57
+
58
+ var _useState = (0, _react.useState)(null),
59
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
60
+ styles = _useState2[0],
61
+ setStyles = _useState2[1];
62
+
63
+ var globalIndex = optional && !multiple ? 0 : -1; // index for options, starting from 0 to options.length -1
64
+
65
+ var mapOptionFunc = function mapOptionFunc(option, mapIndex) {
66
+ if (option.options) {
67
+ var groupId = "group-".concat(mapIndex);
68
+ return option.options.length > 0 && /*#__PURE__*/_react["default"].createElement("li", {
69
+ key: "group-".concat(mapIndex)
70
+ }, /*#__PURE__*/_react["default"].createElement(GroupList, {
71
+ role: "group",
72
+ "aria-labelledby": groupId
73
+ }, /*#__PURE__*/_react["default"].createElement(GroupLabel, {
74
+ role: "presentation",
75
+ id: groupId
76
+ }, option.label), option.options.map(function (singleOption) {
77
+ globalIndex++;
78
+ return /*#__PURE__*/_react["default"].createElement(_Option["default"], {
79
+ key: "option-".concat(singleOption.value),
80
+ id: "option-".concat(globalIndex),
81
+ option: singleOption,
82
+ onClick: handleOptionOnClick,
83
+ multiple: multiple,
84
+ visualFocused: visualFocusIndex === globalIndex,
85
+ isGroupedOption: true,
86
+ isLastOption: lastOptionIndex === globalIndex,
87
+ isSelected: multiple ? currentValue.includes(singleOption.value) : currentValue === singleOption.value
88
+ });
89
+ })));
90
+ } else {
91
+ globalIndex++;
92
+ return /*#__PURE__*/_react["default"].createElement(_Option["default"], {
93
+ key: "option-".concat(option.value),
94
+ id: "option-".concat(globalIndex),
95
+ option: option,
96
+ onClick: handleOptionOnClick,
97
+ multiple: multiple,
98
+ visualFocused: visualFocusIndex === globalIndex,
99
+ isLastOption: lastOptionIndex === globalIndex,
100
+ isSelected: multiple ? currentValue.includes(option.value) : currentValue === option.value
101
+ });
102
+ }
103
+ };
104
+
105
+ (0, _react.useLayoutEffect)(function () {
106
+ if (currentValue && !multiple) {
107
+ var _listEl$scrollTo;
108
+
109
+ var listEl = listboxRef === null || listboxRef === void 0 ? void 0 : listboxRef.current;
110
+ var selectedListOptionEl = listEl === null || listEl === void 0 ? void 0 : listEl.querySelector("[aria-selected='true']");
111
+ listEl === null || listEl === void 0 ? void 0 : (_listEl$scrollTo = listEl.scrollTo) === null || _listEl$scrollTo === void 0 ? void 0 : _listEl$scrollTo.call(listEl, {
112
+ top: (selectedListOptionEl === null || selectedListOptionEl === void 0 ? void 0 : selectedListOptionEl.offsetTop) - (listEl === null || listEl === void 0 ? void 0 : listEl.clientHeight) / 2
113
+ });
114
+ }
115
+ }, [currentValue, multiple]);
116
+ (0, _react.useLayoutEffect)(function () {
117
+ var _listboxRef$current, _visualFocusedOptionE;
118
+
119
+ var visualFocusedOptionEl = listboxRef === null || listboxRef === void 0 ? void 0 : (_listboxRef$current = listboxRef.current) === null || _listboxRef$current === void 0 ? void 0 : _listboxRef$current.querySelectorAll("[role='option']")[visualFocusIndex];
120
+ visualFocusedOptionEl === null || visualFocusedOptionEl === void 0 ? void 0 : (_visualFocusedOptionE = visualFocusedOptionEl.scrollIntoView) === null || _visualFocusedOptionE === void 0 ? void 0 : _visualFocusedOptionE.call(visualFocusedOptionEl, {
121
+ block: "nearest",
122
+ inline: "start"
123
+ });
124
+ }, [visualFocusIndex]);
125
+
126
+ var handleResize = function handleResize() {
127
+ setStyles({
128
+ width: getSelectWidth()
129
+ });
130
+ };
131
+
132
+ (0, _react.useLayoutEffect)(function () {
133
+ handleResize();
134
+ }, [getSelectWidth]);
135
+ (0, _react.useEffect)(function () {
136
+ window.addEventListener("resize", handleResize);
137
+ return function () {
138
+ window.removeEventListener("resize", handleResize);
139
+ };
140
+ }, [getSelectWidth]);
141
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
142
+ theme: colorsTheme.select
143
+ }, /*#__PURE__*/_react["default"].createElement(ListboxContainer, {
144
+ id: id,
145
+ onClick: function onClick(event) {
146
+ event.stopPropagation();
147
+ },
148
+ onMouseDown: function onMouseDown(event) {
149
+ event.preventDefault();
150
+ },
151
+ ref: listboxRef,
152
+ role: "listbox",
153
+ "aria-multiselectable": multiple,
154
+ "aria-orientation": "vertical",
155
+ style: styles
156
+ }, searchable && (options.length === 0 || !groupsHaveOptions(options)) ? /*#__PURE__*/_react["default"].createElement(OptionsSystemMessage, null, /*#__PURE__*/_react["default"].createElement(NoMatchesFoundIcon, null, _Icons["default"].searchOff), translatedLabels.select.noMatchesErrorMessage) : optional && !multiple && /*#__PURE__*/_react["default"].createElement(_Option["default"], {
157
+ key: "option-".concat(optionalItem.value),
158
+ id: "option-".concat(0),
159
+ option: optionalItem,
160
+ onClick: handleOptionOnClick,
161
+ multiple: multiple,
162
+ visualFocused: visualFocusIndex === 0,
163
+ isGroupedOption: false,
164
+ isLastOption: lastOptionIndex === 0,
165
+ isSelected: multiple ? currentValue.includes(optionalItem.value) : currentValue === optionalItem.value
166
+ }), options.map(mapOptionFunc)));
167
+ };
168
+
169
+ var ListboxContainer = _styledComponents["default"].ul(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n max-height: 304px;\n overflow-y: auto;\n margin: 0;\n padding: 0.25rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n border-radius: 0.25rem;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n cursor: default;\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n"])), function (props) {
170
+ return props.theme.listDialogBackgroundColor;
171
+ }, function (props) {
172
+ return props.theme.listDialogBorderColor;
173
+ }, function (props) {
174
+ return props.theme.listOptionFontColor;
175
+ }, function (props) {
176
+ return props.theme.fontFamily;
177
+ }, function (props) {
178
+ return props.theme.listOptionFontSize;
179
+ }, function (props) {
180
+ return props.theme.listOptionFontStyle;
181
+ }, function (props) {
182
+ return props.theme.listOptionFontWeight;
183
+ });
184
+
185
+ var OptionsSystemMessage = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n padding: 4px 16px;\n color: ", ";\n font-size: 0.875rem;\n line-height: 1.715em;\n"])), function (props) {
186
+ return props.theme.systemMessageFontColor;
187
+ });
188
+
189
+ var NoMatchesFoundIcon = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n height: 16px;\n width: 16px;\n padding: 4px;\n margin-right: 0.25rem;\n"])));
190
+
191
+ var GroupList = _styledComponents["default"].ul(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 0;\n"])));
192
+
193
+ var GroupLabel = _styledComponents["default"].li(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 4px 16px;\n font-weight: ", ";\n line-height: 1.715em;\n"])), function (props) {
194
+ return props.theme.listGroupLabelFontWeight;
195
+ });
196
+
197
+ var _default = /*#__PURE__*/_react["default"].memo(Listbox);
198
+
199
+ exports["default"] = _default;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { OptionProps } from "../select/types";
3
+ declare const _default: React.MemoExoticComponent<({ id, option, onClick, multiple, visualFocused, isGroupedOption, isLastOption, isSelected, }: OptionProps) => JSX.Element>;
4
+ export default _default;