@popsure/dirty-swan 0.33.0 → 0.33.2

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 (237) hide show
  1. package/dist/cjs/index.js +71 -67
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/esm/App.d.ts +3 -0
  4. package/dist/esm/_commonjsHelpers-e7f67fd8.js +23 -0
  5. package/dist/esm/_commonjsHelpers-e7f67fd8.js.map +1 -0
  6. package/dist/esm/components/autocompleteAddress/index.js +2062 -0
  7. package/dist/esm/components/autocompleteAddress/index.js.map +1 -0
  8. package/dist/esm/components/autocompleteAddress/index.stories.js +110 -0
  9. package/dist/esm/components/autocompleteAddress/index.stories.js.map +1 -0
  10. package/dist/esm/components/autocompleteAddress/index.test.js +115 -0
  11. package/dist/esm/components/autocompleteAddress/index.test.js.map +1 -0
  12. package/dist/esm/components/button/index.js +26 -0
  13. package/dist/esm/components/button/index.js.map +1 -0
  14. package/dist/esm/components/cards/cardButton/index.js +6 -0
  15. package/dist/esm/components/cards/cardButton/index.js.map +1 -0
  16. package/dist/esm/components/cards/cardWithLeftIcon/index.js +7 -0
  17. package/dist/esm/components/cards/cardWithLeftIcon/index.js.map +1 -0
  18. package/dist/esm/components/cards/cardWithTopIcon/index.js +7 -0
  19. package/dist/esm/components/cards/cardWithTopIcon/index.js.map +1 -0
  20. package/dist/esm/components/cards/cardWithTopLeftIcon/index.js +7 -0
  21. package/dist/esm/components/cards/cardWithTopLeftIcon/index.js.map +1 -0
  22. package/dist/esm/components/cards/index.js +125 -0
  23. package/dist/esm/components/cards/index.js.map +1 -0
  24. package/dist/esm/components/cards/infoCard/index.js +7 -0
  25. package/dist/esm/components/cards/infoCard/index.js.map +1 -0
  26. package/dist/esm/components/chip/index.js +22 -0
  27. package/dist/esm/components/chip/index.js.map +1 -0
  28. package/dist/esm/components/comparisonTable/components/AccordionItem/AccordionItem.js +32 -0
  29. package/dist/esm/components/comparisonTable/components/AccordionItem/AccordionItem.js.map +1 -0
  30. package/dist/esm/components/comparisonTable/components/AccordionItem/index.js +8 -0
  31. package/dist/esm/components/comparisonTable/components/AccordionItem/index.js.map +1 -0
  32. package/dist/esm/components/comparisonTable/components/Chevron.js +10 -0
  33. package/dist/esm/components/comparisonTable/components/Chevron.js.map +1 -0
  34. package/dist/esm/components/comparisonTable/components/Row/index.js +36 -0
  35. package/dist/esm/components/comparisonTable/components/Row/index.js.map +1 -0
  36. package/dist/esm/components/comparisonTable/components/TableArrows/Arrow.js +10 -0
  37. package/dist/esm/components/comparisonTable/components/TableArrows/Arrow.js.map +1 -0
  38. package/dist/esm/components/comparisonTable/components/TableArrows/index.js +24 -0
  39. package/dist/esm/components/comparisonTable/components/TableArrows/index.js.map +1 -0
  40. package/dist/esm/components/comparisonTable/components/TableButton/index.js +15 -0
  41. package/dist/esm/components/comparisonTable/components/TableButton/index.js.map +1 -0
  42. package/dist/esm/components/comparisonTable/components/TableButton/index.test.js +37 -0
  43. package/dist/esm/components/comparisonTable/components/TableButton/index.test.js.map +1 -0
  44. package/dist/esm/components/comparisonTable/components/TableInfoButton/index.js +22 -0
  45. package/dist/esm/components/comparisonTable/components/TableInfoButton/index.js.map +1 -0
  46. package/dist/esm/components/comparisonTable/components/TableRating/StarIcon.js +10 -0
  47. package/dist/esm/components/comparisonTable/components/TableRating/StarIcon.js.map +1 -0
  48. package/dist/esm/components/comparisonTable/components/TableRating/ZapIcon.js +10 -0
  49. package/dist/esm/components/comparisonTable/components/TableRating/ZapIcon.js.map +1 -0
  50. package/dist/esm/components/comparisonTable/components/TableRating/index.js +27 -0
  51. package/dist/esm/components/comparisonTable/components/TableRating/index.js.map +1 -0
  52. package/dist/esm/components/comparisonTable/components/TableRowHeader/index.js +18 -0
  53. package/dist/esm/components/comparisonTable/components/TableRowHeader/index.js.map +1 -0
  54. package/dist/esm/components/comparisonTable/components/TableRowHeader/index.test.js +82 -0
  55. package/dist/esm/components/comparisonTable/components/TableRowHeader/index.test.js.map +1 -0
  56. package/dist/esm/components/comparisonTable/components/TableTrueFalse.js +13 -0
  57. package/dist/esm/components/comparisonTable/components/TableTrueFalse.js.map +1 -0
  58. package/dist/esm/components/comparisonTable/index.js +1683 -0
  59. package/dist/esm/components/comparisonTable/index.js.map +1 -0
  60. package/dist/esm/components/dateSelector/index.js +2180 -0
  61. package/dist/esm/components/dateSelector/index.js.map +1 -0
  62. package/dist/esm/components/dateSelector/index.test.js +65 -0
  63. package/dist/esm/components/dateSelector/index.test.js.map +1 -0
  64. package/dist/esm/components/downloadButton/index.js +36 -0
  65. package/dist/esm/components/downloadButton/index.js.map +1 -0
  66. package/dist/esm/components/downloadButton/index.stories.js +47 -0
  67. package/dist/esm/components/downloadButton/index.stories.js.map +1 -0
  68. package/dist/esm/components/input/autoSuggestInput/index.js +2157 -0
  69. package/dist/esm/components/input/autoSuggestInput/index.js.map +1 -0
  70. package/dist/esm/components/input/autoSuggestMultiSelect/index.js +41 -0
  71. package/dist/esm/components/input/autoSuggestMultiSelect/index.js.map +1 -0
  72. package/dist/esm/components/input/checkbox/index.js +58 -0
  73. package/dist/esm/components/input/checkbox/index.js.map +1 -0
  74. package/dist/esm/components/input/checkbox/index.stories.js +154 -0
  75. package/dist/esm/components/input/checkbox/index.stories.js.map +1 -0
  76. package/dist/esm/components/input/checkbox/index.test.js +106 -0
  77. package/dist/esm/components/input/checkbox/index.test.js.map +1 -0
  78. package/dist/esm/components/input/currency/index.js +63 -0
  79. package/dist/esm/components/input/currency/index.js.map +1 -0
  80. package/dist/esm/components/input/currency/index.test.js +209 -0
  81. package/dist/esm/components/input/currency/index.test.js.map +1 -0
  82. package/dist/esm/components/input/iban/index.js +33 -0
  83. package/dist/esm/components/input/iban/index.js.map +1 -0
  84. package/dist/esm/components/input/index.js +29 -0
  85. package/dist/esm/components/input/index.js.map +1 -0
  86. package/dist/esm/components/markdown/index.js +22178 -0
  87. package/dist/esm/components/markdown/index.js.map +1 -0
  88. package/dist/esm/components/markdown/index.stories.js +66 -0
  89. package/dist/esm/components/markdown/index.stories.js.map +1 -0
  90. package/dist/esm/components/modal/bottomModal/index.js +35 -0
  91. package/dist/esm/components/modal/bottomModal/index.js.map +1 -0
  92. package/dist/esm/components/modal/bottomOrRegularModal/index.js +36 -0
  93. package/dist/esm/components/modal/bottomOrRegularModal/index.js.map +1 -0
  94. package/dist/esm/components/modal/regularModal/index.js +28 -0
  95. package/dist/esm/components/modal/regularModal/index.js.map +1 -0
  96. package/dist/esm/components/multiDropzone/UploadFileCell/index.js +6 -0
  97. package/dist/esm/components/multiDropzone/UploadFileCell/index.js.map +1 -0
  98. package/dist/esm/components/multiDropzone/index.js +2862 -0
  99. package/dist/esm/components/multiDropzone/index.js.map +1 -0
  100. package/dist/esm/components/multiDropzone/index.test.js +201 -0
  101. package/dist/esm/components/multiDropzone/index.test.js.map +1 -0
  102. package/dist/esm/components/segmentedControl/index.js +42 -0
  103. package/dist/esm/components/segmentedControl/index.js.map +1 -0
  104. package/dist/esm/components/segmentedControl/index.stories.js +62 -0
  105. package/dist/esm/components/segmentedControl/index.stories.js.map +1 -0
  106. package/dist/esm/components/segmentedControl/index.test.js +63 -0
  107. package/dist/esm/components/segmentedControl/index.test.js.map +1 -0
  108. package/dist/esm/components/signaturePad/index.js +560 -0
  109. package/dist/esm/components/signaturePad/index.js.map +1 -0
  110. package/dist/esm/components/signaturePad/index.stories.js +33 -0
  111. package/dist/esm/components/signaturePad/index.stories.js.map +1 -0
  112. package/dist/esm/customRender-4157fcff.js +24102 -0
  113. package/dist/esm/customRender-4157fcff.js.map +1 -0
  114. package/dist/esm/extend-expect-46bdce4a.js +7406 -0
  115. package/dist/esm/extend-expect-46bdce4a.js.map +1 -0
  116. package/dist/esm/index-1463d5e9.js +382 -0
  117. package/dist/esm/index-1463d5e9.js.map +1 -0
  118. package/dist/esm/index-171a0108.js +997 -0
  119. package/dist/esm/index-171a0108.js.map +1 -0
  120. package/dist/esm/index-21239ab0.js +237 -0
  121. package/dist/esm/index-21239ab0.js.map +1 -0
  122. package/dist/esm/index-47663d39.js +48 -0
  123. package/dist/esm/index-47663d39.js.map +1 -0
  124. package/dist/esm/index-6ced5532.js +69 -0
  125. package/dist/esm/index-6ced5532.js.map +1 -0
  126. package/dist/esm/index-db2e797f.js +13 -0
  127. package/dist/esm/index-db2e797f.js.map +1 -0
  128. package/dist/esm/index-dd80248b.js +91 -0
  129. package/dist/esm/index-dd80248b.js.map +1 -0
  130. package/dist/esm/index-e9e37a34.js +62 -0
  131. package/dist/esm/index-e9e37a34.js.map +1 -0
  132. package/dist/esm/index-fb46adf9.js +12 -0
  133. package/dist/esm/index-fb46adf9.js.map +1 -0
  134. package/dist/esm/index.d.ts +2 -0
  135. package/dist/esm/index.js +50 -0
  136. package/dist/esm/index.js.map +1 -0
  137. package/dist/esm/lib/components/autocompleteAddress/index.d.ts +20 -0
  138. package/dist/esm/lib/components/autocompleteAddress/index.stories.d.ts +66 -0
  139. package/dist/esm/lib/components/autocompleteAddress/index.test.d.ts +1 -0
  140. package/dist/esm/lib/components/autocompleteAddress/mapStyle.d.ts +2 -0
  141. package/dist/esm/lib/components/autocompleteAddress/util/index.d.ts +4 -0
  142. package/dist/esm/lib/components/button/icons/index.d.ts +9 -0
  143. package/dist/esm/lib/components/button/index.d.ts +13 -0
  144. package/dist/esm/lib/components/cards/cardButton/index.d.ts +16 -0
  145. package/dist/esm/lib/components/cards/cardWithLeftIcon/index.d.ts +14 -0
  146. package/dist/esm/lib/components/cards/cardWithTopIcon/index.d.ts +15 -0
  147. package/dist/esm/lib/components/cards/cardWithTopLeftIcon/index.d.ts +14 -0
  148. package/dist/esm/lib/components/cards/icons/index.d.ts +13 -0
  149. package/dist/esm/lib/components/cards/index.d.ts +16 -0
  150. package/dist/esm/lib/components/cards/infoCard/index.d.ts +13 -0
  151. package/dist/esm/lib/components/chip/index.d.ts +6 -0
  152. package/dist/esm/lib/components/comparisonTable/components/AccordionItem/AccordionItem.d.ts +9 -0
  153. package/dist/esm/lib/components/comparisonTable/components/AccordionItem/index.d.ts +1 -0
  154. package/dist/esm/lib/components/comparisonTable/components/Chevron.d.ts +4 -0
  155. package/dist/esm/lib/components/comparisonTable/components/Row/index.d.ts +11 -0
  156. package/dist/esm/lib/components/comparisonTable/components/TableArrows/Arrow.d.ts +4 -0
  157. package/dist/esm/lib/components/comparisonTable/components/TableArrows/index.d.ts +10 -0
  158. package/dist/esm/lib/components/comparisonTable/components/TableButton/index.d.ts +8 -0
  159. package/dist/esm/lib/components/comparisonTable/components/TableButton/index.test.d.ts +1 -0
  160. package/dist/esm/lib/components/comparisonTable/components/TableInfoButton/index.d.ts +5 -0
  161. package/dist/esm/lib/components/comparisonTable/components/TableRating/StarIcon.d.ts +4 -0
  162. package/dist/esm/lib/components/comparisonTable/components/TableRating/ZapIcon.d.ts +4 -0
  163. package/dist/esm/lib/components/comparisonTable/components/TableRating/index.d.ts +7 -0
  164. package/dist/esm/lib/components/comparisonTable/components/TableRowHeader/index.d.ts +9 -0
  165. package/dist/esm/lib/components/comparisonTable/components/TableRowHeader/index.test.d.ts +1 -0
  166. package/dist/esm/lib/components/comparisonTable/components/TableTrueFalse.d.ts +5 -0
  167. package/dist/esm/lib/components/comparisonTable/hooks/useComparisonTable.d.ts +14 -0
  168. package/dist/esm/lib/components/comparisonTable/index.d.ts +52 -0
  169. package/dist/esm/lib/components/dateSelector/index.d.ts +23 -0
  170. package/dist/esm/lib/components/dateSelector/index.test.d.ts +1 -0
  171. package/dist/esm/lib/components/downloadButton/index.d.ts +10 -0
  172. package/dist/esm/lib/components/downloadButton/index.stories.d.ts +36 -0
  173. package/dist/esm/lib/components/input/autoSuggestInput/index.d.ts +15 -0
  174. package/dist/esm/lib/components/input/autoSuggestMultiSelect/index.d.ts +11 -0
  175. package/dist/esm/lib/components/input/checkbox/index.d.ts +17 -0
  176. package/dist/esm/lib/components/input/checkbox/index.stories.d.ts +64 -0
  177. package/dist/esm/lib/components/input/checkbox/index.test.d.ts +1 -0
  178. package/dist/esm/lib/components/input/currency/format/index.d.ts +2 -0
  179. package/dist/esm/lib/components/input/currency/index.d.ts +7 -0
  180. package/dist/esm/lib/components/input/currency/index.test.d.ts +1 -0
  181. package/dist/esm/lib/components/input/iban/formatIban/index.d.ts +1 -0
  182. package/dist/esm/lib/components/input/iban/index.d.ts +6 -0
  183. package/dist/esm/lib/components/input/index.d.ts +16 -0
  184. package/dist/esm/lib/components/markdown/index.d.ts +10 -0
  185. package/dist/esm/lib/components/markdown/index.stories.d.ts +44 -0
  186. package/dist/esm/lib/components/modal/bottomModal/index.d.ts +3 -0
  187. package/dist/esm/lib/components/modal/bottomOrRegularModal/index.d.ts +3 -0
  188. package/dist/esm/lib/components/modal/hooks/useOnClose.d.ts +9 -0
  189. package/dist/esm/lib/components/modal/index.d.ts +13 -0
  190. package/dist/esm/lib/components/modal/regularModal/index.d.ts +3 -0
  191. package/dist/esm/lib/components/multiDropzone/UploadFileCell/index.d.ts +10 -0
  192. package/dist/esm/lib/components/multiDropzone/icons/index.d.ts +11 -0
  193. package/dist/esm/lib/components/multiDropzone/index.d.ts +15 -0
  194. package/dist/esm/lib/components/multiDropzone/index.test.d.ts +1 -0
  195. package/dist/esm/lib/components/multiDropzone/types.d.ts +42 -0
  196. package/dist/esm/lib/components/multiDropzone/utils/index.d.ts +11 -0
  197. package/dist/esm/lib/components/segmentedControl/index.d.ts +12 -0
  198. package/dist/esm/lib/components/segmentedControl/index.stories.d.ts +37 -0
  199. package/dist/esm/lib/components/segmentedControl/index.test.d.ts +1 -0
  200. package/dist/esm/lib/components/signaturePad/index.d.ts +19 -0
  201. package/dist/esm/lib/components/signaturePad/index.stories.d.ts +21 -0
  202. package/dist/esm/lib/hooks/useOnClickOutside.d.ts +2 -0
  203. package/dist/esm/lib/index.d.ts +22 -0
  204. package/dist/esm/lib/models/autoSuggestInput/index.d.ts +4 -0
  205. package/dist/esm/lib/models/download.d.ts +1 -0
  206. package/dist/esm/lib/scss/private/base/demo.d.ts +5 -0
  207. package/dist/esm/lib/scss/public/demo.d.ts +2 -0
  208. package/dist/esm/lib/util/calendarDate/index.d.ts +3 -0
  209. package/dist/esm/lib/util/formatBytes/index.d.ts +1 -0
  210. package/dist/esm/lib/util/generateId/index.d.ts +2 -0
  211. package/dist/esm/lib/util/images/index.d.ts +11 -0
  212. package/dist/esm/lib/util/images/index.stories.d.ts +12 -0
  213. package/dist/esm/lib/util/testUtils/customRender.d.ts +7 -0
  214. package/dist/esm/lib/util/testUtils/index.d.ts +2 -0
  215. package/dist/esm/lib/util/zeroFill.d.ts +1 -0
  216. package/dist/esm/mapStyle-1288a869.js +187 -0
  217. package/dist/esm/mapStyle-1288a869.js.map +1 -0
  218. package/dist/esm/scss/private/base/demo.js +80 -0
  219. package/dist/esm/scss/private/base/demo.js.map +1 -0
  220. package/dist/esm/scss/public/demo.js +290 -0
  221. package/dist/esm/scss/public/demo.js.map +1 -0
  222. package/dist/esm/style-inject.es-1f59c1d0.js +29 -0
  223. package/dist/esm/style-inject.es-1f59c1d0.js.map +1 -0
  224. package/dist/esm/tslib.es6-5bc94358.js +104 -0
  225. package/dist/esm/tslib.es6-5bc94358.js.map +1 -0
  226. package/dist/esm/useOnClose-d818a54f.js +46 -0
  227. package/dist/esm/useOnClose-d818a54f.js.map +1 -0
  228. package/dist/esm/util/images/index.stories.js +23 -0
  229. package/dist/esm/util/images/index.stories.js.map +1 -0
  230. package/dist/esm/util/testUtils/customRender.js +7 -0
  231. package/dist/esm/util/testUtils/customRender.js.map +1 -0
  232. package/package.json +1 -1
  233. package/src/lib/components/input/checkbox/index.tsx +2 -1
  234. package/src/lib/components/input/checkbox/styles.module.scss +3 -0
  235. package/src/lib/components/markdown/index.stories.tsx +64 -2
  236. package/src/global.d.ts +0 -1
  237. package/src/lib/components/markdown/example.md +0 -78
@@ -0,0 +1,201 @@
1
+ import { b as __awaiter, c as __generator, _ as __assign, a as __rest } from '../../tslib.es6-5bc94358.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { c as customRender, a as act, f as fireEvent } from '../../customRender-4157fcff.js';
4
+ import '../../extend-expect-46bdce4a.js';
5
+ import MultiDropZone from './index.js';
6
+ import 'react';
7
+ import 'react-dom';
8
+ import '../../_commonjsHelpers-e7f67fd8.js';
9
+ import 'react-dom/test-utils';
10
+ import 'os';
11
+ import 'tty';
12
+ import '../../index-e9e37a34.js';
13
+ import '../../index-dd80248b.js';
14
+ import '../../index-21239ab0.js';
15
+ import '../../index-fb46adf9.js';
16
+ import '../../style-inject.es-1f59c1d0.js';
17
+ import '../../index-6ced5532.js';
18
+
19
+ var mockOnFileSelect = jest.fn();
20
+ var mockOnRemoveFile = jest.fn();
21
+ var file = new File(['DummyFile'], 'dummy.png', { type: 'image/png' });
22
+ var inputTestId = "ds-drop-input";
23
+ var spinnerTestId = "ds-filecell-spinner";
24
+ var progressbarTestId = "ds-filecell-progressbar";
25
+ var uploadedFilesMock = {
26
+ id: "123",
27
+ name: "File name",
28
+ progress: 100,
29
+ type: "jpg",
30
+ };
31
+ var setup = function (_a) {
32
+ var _b = _a.uploadedFiles, uploadedFiles = _b === void 0 ? [] : _b, _c = _a.uploading, uploading = _c === void 0 ? false : _c, rest = __rest(_a, ["uploadedFiles", "uploading"]);
33
+ return customRender(jsx(MultiDropZone, __assign({}, rest, { uploadedFiles: uploadedFiles, uploading: uploading, onFileSelect: mockOnFileSelect, onRemoveFile: mockOnRemoveFile }), void 0));
34
+ };
35
+ describe('MultiDropzone component', function () {
36
+ it("should call onFileSelect on files change", function () { return __awaiter(void 0, void 0, void 0, function () {
37
+ var _a, getByTestId, user, files;
38
+ return __generator(this, function (_b) {
39
+ switch (_b.label) {
40
+ case 0:
41
+ _a = setup({}), getByTestId = _a.getByTestId, user = _a.user;
42
+ files = [file, file];
43
+ return [4 /*yield*/, user.upload(getByTestId(inputTestId), files)];
44
+ case 1:
45
+ _b.sent();
46
+ expect(mockOnFileSelect).toHaveBeenCalledWith(files);
47
+ return [2 /*return*/];
48
+ }
49
+ });
50
+ }); });
51
+ describe('Error states', function () {
52
+ it("should show max files error message", function () {
53
+ var screen = setup({
54
+ maxFiles: 1,
55
+ uploadedFiles: [uploadedFilesMock, __assign(__assign({}, uploadedFilesMock), { id: "222" })],
56
+ });
57
+ expect(screen.getByText("Too many files.")).toBeVisible();
58
+ });
59
+ it("should show max file size error message", function () { return __awaiter(void 0, void 0, void 0, function () {
60
+ var _a, getByTestId, getByText, user, bigFile;
61
+ return __generator(this, function (_b) {
62
+ switch (_b.label) {
63
+ case 0:
64
+ _a = setup({ maxSize: 10 }), getByTestId = _a.getByTestId, getByText = _a.getByText, user = _a.user;
65
+ bigFile = file;
66
+ Object.defineProperty(bigFile, 'size', { value: 1024 });
67
+ return [4 /*yield*/, user.upload(getByTestId(inputTestId), [bigFile])];
68
+ case 1:
69
+ _b.sent();
70
+ expect(getByText("File is too large. It must be less than 10 Bytes.")).toBeInTheDocument();
71
+ return [2 /*return*/];
72
+ }
73
+ });
74
+ }); });
75
+ it("should show wrong filetype error message", function () { return __awaiter(void 0, void 0, void 0, function () {
76
+ var _a, getByTestId, getByText, input;
77
+ return __generator(this, function (_b) {
78
+ switch (_b.label) {
79
+ case 0:
80
+ _a = setup({ accept: "document" }), getByTestId = _a.getByTestId, getByText = _a.getByText;
81
+ input = getByTestId(inputTestId);
82
+ return [4 /*yield*/, act(function () { return __awaiter(void 0, void 0, void 0, function () {
83
+ return __generator(this, function (_a) {
84
+ // Keeping fireevent to emulate file change like drop
85
+ // Using userevent.upload doesn't work since input has an accept/html validation
86
+ fireEvent.change(input, { target: { files: [file] } });
87
+ return [2 /*return*/];
88
+ });
89
+ }); })];
90
+ case 1:
91
+ _b.sent();
92
+ expect(getByText("File type must be one of DOC, DOCX, PDF")).toBeInTheDocument();
93
+ return [2 /*return*/];
94
+ }
95
+ });
96
+ }); });
97
+ it("should remove wrong filetype error message", function () { return __awaiter(void 0, void 0, void 0, function () {
98
+ var _a, getByAltText, getByTestId, queryByText, user, input;
99
+ return __generator(this, function (_b) {
100
+ switch (_b.label) {
101
+ case 0:
102
+ _a = setup({ accept: "document" }), getByAltText = _a.getByAltText, getByTestId = _a.getByTestId, queryByText = _a.queryByText, user = _a.user;
103
+ input = getByTestId(inputTestId);
104
+ return [4 /*yield*/, act(function () { return __awaiter(void 0, void 0, void 0, function () {
105
+ return __generator(this, function (_a) {
106
+ // Keeping fireevent to emulate file change like drop
107
+ // Using userevent.upload doesn't work since input has an accept/html validation
108
+ fireEvent.change(input, { target: { files: [file] } });
109
+ return [2 /*return*/];
110
+ });
111
+ }); })];
112
+ case 1:
113
+ _b.sent();
114
+ return [4 /*yield*/, user.click(getByAltText("remove"))];
115
+ case 2:
116
+ _b.sent();
117
+ expect(queryByText("File type must be one of DOC, DOCX, PDF")).not.toBeInTheDocument();
118
+ return [2 /*return*/];
119
+ }
120
+ });
121
+ }); });
122
+ });
123
+ describe('Copy text', function () {
124
+ it("should show uploader text", function () {
125
+ var screen = setup({});
126
+ expect(screen.getByText("Choose file or drag & drop")).toBeInTheDocument();
127
+ });
128
+ it("should show uploader text translated", function () {
129
+ var instructionsText = "Drag drop file";
130
+ var screen = setup({
131
+ textOverrides: { instructionsText: instructionsText }
132
+ });
133
+ expect(screen.getByText(instructionsText)).toBeInTheDocument();
134
+ });
135
+ it("should show image accept file type label", function () {
136
+ var screen = setup({ accept: "image" });
137
+ expect(screen.getByText("Supports HEIC, BMP, JPEG, JPG, PNG")).toBeInTheDocument();
138
+ });
139
+ it("should show document accept file type label", function () {
140
+ var screen = setup({ accept: "document" });
141
+ expect(screen.getByText("Supports DOC, DOCX, PDF")).toBeInTheDocument();
142
+ });
143
+ it("should custom document accept file type label", function () {
144
+ var screen = setup({ accept: {
145
+ "application/pdf": [".pdf"],
146
+ "image/jpg": [".jpg"],
147
+ } });
148
+ expect(screen.getByText("Supports PDF, JPG")).toBeInTheDocument();
149
+ });
150
+ it("should show disabled text if is uploading", function () {
151
+ var screen = setup({ uploading: true });
152
+ expect(screen.getByText("Please wait while uploading file...")).toBeInTheDocument();
153
+ });
154
+ });
155
+ describe('Uploaded files', function () {
156
+ it("should show uploaded files", function () {
157
+ var screen = setup({
158
+ uploadedFiles: [uploadedFilesMock],
159
+ });
160
+ expect(screen.getByText(uploadedFilesMock.name)).toBeInTheDocument();
161
+ });
162
+ it("should call onRemoveFile with uploaded file id", function () {
163
+ var screen = setup({
164
+ uploadedFiles: [uploadedFilesMock],
165
+ });
166
+ screen.getByAltText("remove").click();
167
+ expect(mockOnRemoveFile).toBeCalledWith(uploadedFilesMock.id);
168
+ });
169
+ it("should show uploaded file with uploading label", function () {
170
+ var screen = setup({
171
+ uploadedFiles: [__assign(__assign({}, uploadedFilesMock), { progress: 50 })],
172
+ });
173
+ expect(screen.getByText("Uploading...")).toBeInTheDocument();
174
+ });
175
+ it("should show uploaded file with progress bar", function () {
176
+ var screen = setup({
177
+ uploadedFiles: [__assign(__assign({}, uploadedFilesMock), { progress: 50 })],
178
+ });
179
+ expect(screen.getByTestId(progressbarTestId)).toBeInTheDocument();
180
+ });
181
+ it("should show uploaded file with no progress bar", function () {
182
+ var screen = setup({
183
+ uploadedFiles: [__assign(__assign({}, uploadedFilesMock), { progress: 50, showProgressBar: false })],
184
+ });
185
+ expect(screen.queryByTestId(progressbarTestId)).not.toBeInTheDocument();
186
+ });
187
+ it("should show uploaded file with loading spinner", function () {
188
+ var screen = setup({
189
+ uploadedFiles: [__assign(__assign({}, uploadedFilesMock), { progress: 50, showLoadingSpinner: true })],
190
+ });
191
+ expect(screen.getByTestId(spinnerTestId)).toBeInTheDocument();
192
+ });
193
+ it("should show uploaded file with no loading spinner", function () {
194
+ var screen = setup({
195
+ uploadedFiles: [__assign(__assign({}, uploadedFilesMock), { progress: 50, showLoadingSpinner: false })],
196
+ });
197
+ expect(screen.queryByTestId(spinnerTestId)).not.toBeInTheDocument();
198
+ });
199
+ });
200
+ });
201
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sources":["../../../../../src/lib/components/multiDropzone/index.test.tsx"],"sourcesContent":["import { act, fireEvent, render } from '../../util/testUtils';\nimport '@testing-library/jest-dom';\n\nimport MultiDropzone, { MultiDropzoneProps } from '.';\n\nconst mockOnFileSelect = jest.fn();\nconst mockOnRemoveFile = jest.fn();\nconst file = new File(['DummyFile'], 'dummy.png', { type: 'image/png' });\n\nconst inputTestId = \"ds-drop-input\";\nconst spinnerTestId = \"ds-filecell-spinner\";\nconst progressbarTestId = \"ds-filecell-progressbar\";\nconst uploadedFilesMock = {\n id: \"123\",\n name: \"File name\",\n progress: 100,\n type: \"jpg\",\n};\n\nconst setup = ({\n uploadedFiles = [],\n uploading = false,\n ...rest\n}: Partial<MultiDropzoneProps>) => {\n return render(\n <MultiDropzone\n {...rest}\n uploadedFiles={uploadedFiles}\n uploading={uploading}\n onFileSelect={mockOnFileSelect}\n onRemoveFile={mockOnRemoveFile}\n />\n );\n};\n\ndescribe('MultiDropzone component', () => {\n it(\"should call onFileSelect on files change\", async () => {\n const { getByTestId, user } = setup({});\n const files = [file, file];\n\n await user.upload(getByTestId(inputTestId), files);\n\n expect(mockOnFileSelect).toHaveBeenCalledWith(files);\n });\n\n describe('Error states', () => {\n it(\"should show max files error message\", () => {\n const screen = setup({\n maxFiles: 1,\n uploadedFiles: [uploadedFilesMock, {\n ...uploadedFilesMock,\n id: \"222\"\n }],\n });\n \n expect(screen.getByText(\"Too many files.\")).toBeVisible();\n });\n\n it(\"should show max file size error message\", async () => {\n const { getByTestId, getByText, user } = setup({ maxSize: 10 });\n const bigFile = file;\n Object.defineProperty(bigFile, 'size', { value: 1024 });\n\n await user.upload(getByTestId(inputTestId), [bigFile]);\n\n expect(\n getByText(\"File is too large. It must be less than 10 Bytes.\")\n ).toBeInTheDocument();\n });\n\n it(\"should show wrong filetype error message\", async () => {\n const { getByTestId, getByText } = setup({ accept: \"document\" });\n const input = getByTestId(inputTestId);\n\n await act(async () => {\n // Keeping fireevent to emulate file change like drop\n // Using userevent.upload doesn't work since input has an accept/html validation\n fireEvent.change(input, { target: { files: [file] } });\n });\n\n expect(\n getByText(\"File type must be one of DOC, DOCX, PDF\")\n ).toBeInTheDocument();\n });\n\n it(\"should remove wrong filetype error message\", async () => {\n const { getByAltText, getByTestId, queryByText, user } = setup({ accept: \"document\" });\n const input = getByTestId(inputTestId);\n\n await act(async () => {\n // Keeping fireevent to emulate file change like drop\n // Using userevent.upload doesn't work since input has an accept/html validation\n fireEvent.change(input, { target: { files: [file] } });\n });\n\n await user.click(getByAltText(\"remove\"));\n\n expect(queryByText(\"File type must be one of DOC, DOCX, PDF\")).not.toBeInTheDocument();\n });\n });\n\n describe('Copy text', () => {\n it(\"should show uploader text\", () => {\n const screen = setup({});\n\n expect(screen.getByText(\"Choose file or drag & drop\")).toBeInTheDocument();\n });\n\n it(\"should show uploader text translated\", () => {\n const instructionsText = \"Drag drop file\";\n const screen = setup({\n textOverrides: { instructionsText }\n });\n\n expect(screen.getByText(instructionsText)).toBeInTheDocument();\n });\n\n it(\"should show image accept file type label\", () => {\n const screen = setup({ accept: \"image\" });\n\n expect(\n screen.getByText(\"Supports HEIC, BMP, JPEG, JPG, PNG\")\n ).toBeInTheDocument();\n });\n\n it(\"should show document accept file type label\", () => {\n const screen = setup({ accept: \"document\" });\n\n expect(\n screen.getByText(\"Supports DOC, DOCX, PDF\")\n ).toBeInTheDocument();\n });\n\n it(\"should custom document accept file type label\", () => {\n const screen = setup({ accept: {\n \"application/pdf\": [\".pdf\"],\n \"image/jpg\": [\".jpg\"],\n } });\n\n expect(\n screen.getByText(\"Supports PDF, JPG\")\n ).toBeInTheDocument();\n });\n\n it(\"should show disabled text if is uploading\", () => {\n const screen = setup({ uploading: true });\n\n expect(\n screen.getByText(\"Please wait while uploading file...\")\n ).toBeInTheDocument();\n });\n });\n\n describe('Uploaded files', () => {\n it(\"should show uploaded files\", () => {\n const screen = setup({\n uploadedFiles: [uploadedFilesMock],\n });\n\n expect(\n screen.getByText(uploadedFilesMock.name)\n ).toBeInTheDocument();\n });\n\n it(\"should call onRemoveFile with uploaded file id\", () => {\n const screen = setup({\n uploadedFiles: [uploadedFilesMock],\n });\n\n screen.getByAltText(\"remove\").click();\n\n expect(mockOnRemoveFile).toBeCalledWith(uploadedFilesMock.id);\n });\n\n it(\"should show uploaded file with uploading label\", () => {\n const screen = setup({\n uploadedFiles: [{ ...uploadedFilesMock, progress: 50 }],\n });\n\n expect(screen.getByText(\"Uploading...\")).toBeInTheDocument();\n });\n\n it(\"should show uploaded file with progress bar\", () => {\n const screen = setup({\n uploadedFiles: [{\n ...uploadedFilesMock,\n progress: 50,\n }],\n });\n\n expect(screen.getByTestId(progressbarTestId)).toBeInTheDocument();\n });\n\n it(\"should show uploaded file with no progress bar\", () => {\n const screen = setup({\n uploadedFiles: [{\n ...uploadedFilesMock,\n progress: 50,\n showProgressBar: false\n }],\n });\n\n expect(screen.queryByTestId(progressbarTestId)).not.toBeInTheDocument();\n });\n\n it(\"should show uploaded file with loading spinner\", () => {\n const screen = setup({\n uploadedFiles: [{\n ...uploadedFilesMock,\n progress: 50,\n showLoadingSpinner: true\n }],\n });\n\n expect(screen.getByTestId(spinnerTestId)).toBeInTheDocument();\n });\n\n it(\"should show uploaded file with no loading spinner\", () => {\n const screen = setup({\n uploadedFiles: [{\n ...uploadedFilesMock,\n progress: 50,\n showLoadingSpinner: false\n }],\n });\n\n expect(screen.queryByTestId(spinnerTestId)).not.toBeInTheDocument();\n });\n });\n});\n"],"names":["render","_jsx","MultiDropzone"],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { _ as __assign } from '../../tslib.es6-5bc94358.js';
2
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
+ import { useState, useRef, useEffect } from 'react';
4
+ import { s as styleInject } from '../../style-inject.es-1f59c1d0.js';
5
+
6
+ var css_248z = ".style-module_background-container__2Gjka {\n position: relative;\n display: inline-block;\n background-color: var(--ds-primary-100);\n border-radius: 8px;\n padding: 0 8px;\n}\n\n.style-module_chip-container__7XeKn {\n display: flex;\n align-items: center;\n}\n\n.style-module_chip__3rgLT {\n cursor: pointer;\n z-index: 2;\n padding-left: 16px;\n padding-right: 16px;\n}\n\n.style-module_select-chip-background__YCAyw {\n position: absolute;\n background-color: white;\n border-radius: 8px;\n top: 8px;\n z-index: 1;\n transition: width 0.3s, left 0.3s;\n}";
7
+ var styles = {"background-container":"style-module_background-container__2Gjka","chip-container":"style-module_chip-container__7XeKn","chip":"style-module_chip__3rgLT","select-chip-background":"style-module_select-chip-background__YCAyw"};
8
+ styleInject(css_248z);
9
+
10
+ var SegmentedControl = function (_a) {
11
+ var _b = _a.className, className = _b === void 0 ? '' : _b, values = _a.values, selectedIndex = _a.selectedIndex, onChange = _a.onChange;
12
+ var _c = useState({ left: 0, width: 0 }), selectedChipBackgroundWidthLeft = _c[0], setSelectedChipBackgroundWidthLeft = _c[1];
13
+ var chipContainer = useRef(null);
14
+ var height = typeof values[0] === 'string' ? 48 : 66;
15
+ useEffect(function () {
16
+ var _a;
17
+ var selectedChip = (_a = chipContainer.current) === null || _a === void 0 ? void 0 : _a.children[selectedIndex];
18
+ var left = selectedChip.offsetLeft;
19
+ var width = selectedChip.offsetWidth;
20
+ setSelectedChipBackgroundWidthLeft({ left: left, width: width });
21
+ }, [selectedIndex]);
22
+ return (jsx("div", __assign({ className: className }, { children: jsxs("div", __assign({ className: styles['background-container'] }, { children: [jsx("div", __assign({ ref: chipContainer, className: styles['chip-container'], style: { height: height + "px" } }, { children: values.map(function (value, index) {
23
+ return (jsx("div", __assign({ role: "button", tabIndex: 0, onKeyDown: function (e) {
24
+ if (e.key === 'Enter') {
25
+ onChange(index);
26
+ }
27
+ }, onClick: function () {
28
+ onChange(index);
29
+ }, className: styles.chip }, { children: typeof value === 'string' ? (jsx("div", __assign({ className: "p-h4 ta-center " + (selectedIndex === index ? '' : 'tc-primary-500') }, { children: value }), void 0)) : (jsxs(Fragment, { children: [jsx("div", __assign({ className: "p-h4 ta-center " + (selectedIndex === index ? '' : 'tc-primary-500') }, { children: value.title }), void 0),
30
+ jsx("div", __assign({ className: "p-p--small ta-center " + (selectedIndex === index
31
+ ? 'tc-grey-500'
32
+ : 'tc-primary-500') }, { children: value.subtitle }), void 0)] }, void 0)) }), typeof value === 'string' ? value : value.title));
33
+ }) }), void 0),
34
+ jsx("div", { className: styles['select-chip-background'], style: {
35
+ width: selectedChipBackgroundWidthLeft.width + "px",
36
+ height: height - 16 + "px",
37
+ left: selectedChipBackgroundWidthLeft.left + "px",
38
+ } }, void 0)] }), void 0) }), void 0));
39
+ };
40
+
41
+ export { SegmentedControl };
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/lib/components/segmentedControl/index.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport styles from './style.module.scss';\n\ninterface TitleWithSubtitle {\n title: string;\n subtitle: string;\n}\n\nexport interface SegmentedControlProps {\n className?: string;\n values: Array<TitleWithSubtitle> | Array<string>;\n selectedIndex: number;\n onChange: (selectedIndex: number) => void;\n}\n\nconst SegmentedControl = ({\n className = '',\n values,\n selectedIndex,\n onChange,\n}: SegmentedControlProps) => {\n const [selectedChipBackgroundWidthLeft, setSelectedChipBackgroundWidthLeft] =\n useState<{\n left: number;\n width: number;\n }>({ left: 0, width: 0 });\n const chipContainer = useRef<HTMLDivElement | null>(null);\n const height = typeof values[0] === 'string' ? 48 : 66;\n\n useEffect(() => {\n const selectedChip = chipContainer.current?.children[\n selectedIndex\n ] as HTMLDivElement;\n const left = selectedChip.offsetLeft;\n const width = selectedChip.offsetWidth;\n setSelectedChipBackgroundWidthLeft({ left, width });\n }, [selectedIndex]);\n\n return (\n <div className={className}>\n <div className={styles['background-container']}>\n <div\n ref={chipContainer}\n className={styles['chip-container']}\n style={{ height: `${height}px` }}\n >\n {values.map((value: TitleWithSubtitle | string, index: number) => {\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n onChange(index);\n }\n }}\n onClick={() => {\n onChange(index);\n }}\n className={styles.chip}\n key={typeof value === 'string' ? value : value.title}\n >\n {typeof value === 'string' ? (\n <div\n className={`p-h4 ta-center ${\n selectedIndex === index ? '' : 'tc-primary-500'\n }`}\n >\n {value}\n </div>\n ) : (\n <>\n <div\n className={`p-h4 ta-center ${\n selectedIndex === index ? '' : 'tc-primary-500'\n }`}\n >\n {value.title}\n </div>\n <div\n className={`p-p--small ta-center ${\n selectedIndex === index\n ? 'tc-grey-500'\n : 'tc-primary-500'\n }`}\n >\n {value.subtitle}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n <div\n className={styles['select-chip-background']}\n style={{\n width: `${selectedChipBackgroundWidthLeft.width}px`,\n height: `${height - 16}px`,\n left: `${selectedChipBackgroundWidthLeft.left}px`,\n }}\n />\n </div>\n </div>\n );\n};\n\nexport { SegmentedControl };\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;IAeM,gBAAgB,GAAG,UAAC,EAKF;QAJtB,iBAAc,EAAd,SAAS,mBAAG,EAAE,KAAA,EACd,MAAM,YAAA,EACN,aAAa,mBAAA,EACb,QAAQ,cAAA;IAEF,IAAA,KACJ,QAAQ,CAGL,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAJpB,+BAA+B,QAAA,EAAE,kCAAkC,QAI/C,CAAC;IAC5B,IAAM,aAAa,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAC1D,IAAM,MAAM,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,EAAE,GAAG,EAAE,CAAC;IAEvD,SAAS,CAAC;;QACR,IAAM,YAAY,GAAG,MAAA,aAAa,CAAC,OAAO,0CAAE,QAAQ,CAClD,aAAa,CACI,CAAC;QACpB,IAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC;QACrC,IAAM,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC;QACvC,kCAAkC,CAAC,EAAE,IAAI,MAAA,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC;KACrD,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,QACEA,sBAAK,SAAS,EAAE,SAAS,gBACvBC,uBAAK,SAAS,EAAE,MAAM,CAAC,sBAAsB,CAAC,iBAC5CD,sBACE,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,EACnC,KAAK,EAAE,EAAE,MAAM,EAAK,MAAM,OAAI,EAAE,gBAE/B,MAAM,CAAC,GAAG,CAAC,UAAC,KAAiC,EAAE,KAAa;wBAC3D,QACEA,sBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,UAAC,CAAC;gCACX,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;oCACrB,QAAQ,CAAC,KAAK,CAAC,CAAC;iCACjB;6BACF,EACD,OAAO,EAAE;gCACP,QAAQ,CAAC,KAAK,CAAC,CAAC;6BACjB,EACD,SAAS,EAAE,MAAM,CAAC,IAAI,gBAGrB,OAAO,KAAK,KAAK,QAAQ,IACxBA,sBACE,SAAS,EAAE,qBACT,aAAa,KAAK,KAAK,GAAG,EAAE,GAAG,gBAAgB,CAC/C,gBAED,KAAK,YACF,KAENC,4BACED,sBACE,SAAS,EAAE,qBACT,aAAa,KAAK,KAAK,GAAG,EAAE,GAAG,gBAAgB,CAC/C,gBAED,KAAK,CAAC,KAAK,YACR;oCACNA,sBACE,SAAS,EAAE,2BACT,aAAa,KAAK,KAAK;8CACnB,aAAa;8CACb,gBAAgB,CACpB,gBAED,KAAK,CAAC,QAAQ,YACX,YACL,CACJ,KA7BI,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CA8BhD,EACN;qBACH,CAAC,YACE;gBACNA,aACE,SAAS,EAAE,MAAM,CAAC,wBAAwB,CAAC,EAC3C,KAAK,EAAE;wBACL,KAAK,EAAK,+BAA+B,CAAC,KAAK,OAAI;wBACnD,MAAM,EAAK,MAAM,GAAG,EAAE,OAAI;wBAC1B,IAAI,EAAK,+BAA+B,CAAC,IAAI,OAAI;qBAClD,WACD,aACE,YACF,EACN;AACJ;;;;"}
@@ -0,0 +1,62 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useState } from 'react';
3
+ import { SegmentedControl } from './index.js';
4
+ import '../../tslib.es6-5bc94358.js';
5
+ import '../../style-inject.es-1f59c1d0.js';
6
+
7
+ var story = {
8
+ title: 'JSX/SegmentedControl',
9
+ component: SegmentedControl,
10
+ argTypes: {
11
+ values: {
12
+ description: 'Array containing the text that needs to be displayed',
13
+ table: {
14
+ type: {
15
+ summary: 'string[] OR { title: string; subtitle: string;}[]'
16
+ },
17
+ },
18
+ },
19
+ selectedIndex: {
20
+ description: 'The currently selected index',
21
+ },
22
+ onChange: {
23
+ action: true,
24
+ table: {
25
+ category: "Callbacks",
26
+ },
27
+ },
28
+ },
29
+ args: {
30
+ values: ['Earth', 'Sun', 'Moon'],
31
+ selectedIndex: 0,
32
+ },
33
+ parameters: {
34
+ componentSubtitle: 'A segmented control is a linear set of two or more segments, each of which functions as a mutually exclusive button.',
35
+ },
36
+ };
37
+ var SegmentedControlStory = function (_a) {
38
+ var onChange = _a.onChange, selectedIndex = _a.selectedIndex, values = _a.values;
39
+ var _b = useState(selectedIndex), index = _b[0], setIndex = _b[1];
40
+ var handleOnChange = function (newIndex) {
41
+ onChange === null || onChange === void 0 ? void 0 : onChange(newIndex);
42
+ setIndex(newIndex);
43
+ };
44
+ return (jsx(SegmentedControl, { values: values, selectedIndex: index, onChange: handleOnChange }, void 0));
45
+ };
46
+ SegmentedControlStory.storyName = "SegmentedControl";
47
+ var SegmentedControlWithSubtitle = function (_a) {
48
+ var onChange = _a.onChange, selectedIndex = _a.selectedIndex; _a.values;
49
+ var _b = useState(selectedIndex), index = _b[0], setIndex = _b[1];
50
+ var handleOnChange = function (newIndex) {
51
+ onChange === null || onChange === void 0 ? void 0 : onChange(newIndex);
52
+ setIndex(newIndex);
53
+ };
54
+ return (jsx(SegmentedControl, { values: [
55
+ { title: 'Basic', subtitle: '€288,65' },
56
+ { title: 'Premium', subtitle: '€288,65' },
57
+ ], selectedIndex: index, onChange: handleOnChange }, void 0));
58
+ };
59
+
60
+ export default story;
61
+ export { SegmentedControlStory, SegmentedControlWithSubtitle };
62
+ //# sourceMappingURL=index.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.stories.js","sources":["../../../../../src/lib/components/segmentedControl/index.stories.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { SegmentedControl, SegmentedControlProps } from '.';\n\nconst story = {\n title: 'JSX/SegmentedControl',\n component: SegmentedControl,\n argTypes: {\n values: {\n description: 'Array containing the text that needs to be displayed',\n table: {\n type: { \n summary: 'string[] OR { title: string; subtitle: string;}[]'\n },\n },\n },\n selectedIndex: {\n description: 'The currently selected index',\n },\n onChange: {\n action: true,\n table: {\n category: \"Callbacks\",\n },\n },\n },\n args: {\n values: ['Earth', 'Sun', 'Moon'],\n selectedIndex: 0,\n },\n parameters: {\n componentSubtitle: 'A segmented control is a linear set of two or more segments, each of which functions as a mutually exclusive button.',\n },\n};\n\nexport const SegmentedControlStory = ({\n onChange,\n selectedIndex,\n values\n}: SegmentedControlProps) => {\n const [index, setIndex] = useState(selectedIndex);\n\n const handleOnChange = (newIndex: number) => {\n onChange?.(newIndex);\n setIndex(newIndex);\n };\n\n return (\n <SegmentedControl\n values={values}\n selectedIndex={index}\n onChange={handleOnChange}\n />\n );\n};\n\nSegmentedControlStory.storyName = \"SegmentedControl\";\n\nexport const SegmentedControlWithSubtitle = ({\n onChange,\n selectedIndex,\n values\n}: SegmentedControlProps) => {\n const [index, setIndex] = useState(selectedIndex);\n\n const handleOnChange = (newIndex: number) => {\n onChange?.(newIndex);\n setIndex(newIndex);\n };\n\n return (\n <SegmentedControl\n values={[\n { title: 'Basic', subtitle: '€288,65' },\n { title: 'Premium', subtitle: '€288,65' },\n ]}\n selectedIndex={index}\n onChange={handleOnChange}\n />\n );\n};\n\nexport default story;\n"],"names":["_jsx"],"mappings":";;;;;;IAGM,KAAK,GAAG;IACZ,KAAK,EAAE,sBAAsB;IAC7B,SAAS,EAAE,gBAAgB;IAC3B,QAAQ,EAAE;QACR,MAAM,EAAE;YACN,WAAW,EAAE,sDAAsD;YACnE,KAAK,EAAE;gBACL,IAAI,EAAE;oBACJ,OAAO,EAAE,mDAAmD;iBAC7D;aACF;SACF;QACD,aAAa,EAAE;YACb,WAAW,EAAE,8BAA8B;SAC5C;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE;gBACL,QAAQ,EAAE,WAAW;aACtB;SACF;KACF;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;QAChC,aAAa,EAAE,CAAC;KACjB;IACD,UAAU,EAAE;QACV,iBAAiB,EAAE,sHAAsH;KAC1I;EACD;IAEW,qBAAqB,GAAG,UAAC,EAId;QAHtB,QAAQ,cAAA,EACR,aAAa,mBAAA,EACb,MAAM,YAAA;IAEA,IAAA,KAAoB,QAAQ,CAAC,aAAa,CAAC,EAA1C,KAAK,QAAA,EAAE,QAAQ,QAA2B,CAAC;IAElD,IAAM,cAAc,GAAG,UAAC,QAAgB;QACtC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,QAAQ,CAAC,CAAC;QACrB,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACpB,CAAC;IAEF,QACEA,IAAC,gBAAgB,IACf,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,KAAK,EACpB,QAAQ,EAAE,cAAc,WACxB,EACF;AACJ,EAAE;AAEF,qBAAqB,CAAC,SAAS,GAAG,kBAAkB,CAAC;IAExC,4BAA4B,GAAG,UAAC,EAIrB;QAHtB,QAAQ,cAAA,EACR,aAAa,mBAAA;IAGP,IAAA,KAAoB,QAAQ,CAAC,aAAa,CAAC,EAA1C,KAAK,QAAA,EAAE,QAAQ,QAA2B,CAAC;IAElD,IAAM,cAAc,GAAG,UAAC,QAAgB;QACtC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,QAAQ,CAAC,CAAC;QACrB,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACpB,CAAC;IAEF,QACEA,IAAC,gBAAgB,IACf,MAAM,EAAE;YACN,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE;YACvC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;SAC1C,EACD,aAAa,EAAE,KAAK,EACpB,QAAQ,EAAE,cAAc,WACxB,EACF;AACJ;;;;;"}
@@ -0,0 +1,63 @@
1
+ import { b as __awaiter, c as __generator } from '../../tslib.es6-5bc94358.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { c as customRender } from '../../customRender-4157fcff.js';
4
+ import { SegmentedControl } from './index.js';
5
+ import 'react';
6
+ import 'react-dom';
7
+ import '../../_commonjsHelpers-e7f67fd8.js';
8
+ import 'react-dom/test-utils';
9
+ import '../../style-inject.es-1f59c1d0.js';
10
+
11
+ var setup = function (onChange) {
12
+ if (onChange === void 0) { onChange = function () { }; }
13
+ return customRender(jsx(SegmentedControl, { values: ['kg', 'lbs'], onChange: onChange, selectedIndex: 0 }, void 0));
14
+ };
15
+ describe('SegmentedControl component', function () {
16
+ it('Should provide the index of the clicked button', function () { return __awaiter(void 0, void 0, void 0, function () {
17
+ var callback, _a, getAllByRole, user, buttons;
18
+ return __generator(this, function (_b) {
19
+ switch (_b.label) {
20
+ case 0:
21
+ callback = jest.fn();
22
+ _a = setup(callback), getAllByRole = _a.getAllByRole, user = _a.user;
23
+ buttons = getAllByRole('button');
24
+ // click first button
25
+ return [4 /*yield*/, user.click(buttons[0])];
26
+ case 1:
27
+ // click first button
28
+ _b.sent();
29
+ // click second button
30
+ return [4 /*yield*/, user.click(buttons[1])];
31
+ case 2:
32
+ // click second button
33
+ _b.sent();
34
+ expect(callback.mock.calls).toEqual([[0], [1]]);
35
+ return [2 /*return*/];
36
+ }
37
+ });
38
+ }); });
39
+ it('Should provide the index of the selected button on key down', function () { return __awaiter(void 0, void 0, void 0, function () {
40
+ var callback, _a, getAllByRole, user, buttons;
41
+ return __generator(this, function (_b) {
42
+ switch (_b.label) {
43
+ case 0:
44
+ callback = jest.fn();
45
+ _a = setup(callback), getAllByRole = _a.getAllByRole, user = _a.user;
46
+ buttons = getAllByRole('button');
47
+ // focus first button and select with keyboard
48
+ buttons[0].focus();
49
+ return [4 /*yield*/, user.keyboard('{enter}')];
50
+ case 1:
51
+ _b.sent();
52
+ // focus second button and select with keyboard
53
+ buttons[1].focus();
54
+ return [4 /*yield*/, user.keyboard('{enter}')];
55
+ case 2:
56
+ _b.sent();
57
+ expect(callback.mock.calls).toEqual([[0], [1]]);
58
+ return [2 /*return*/];
59
+ }
60
+ });
61
+ }); });
62
+ });
63
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sources":["../../../../../src/lib/components/segmentedControl/index.test.tsx"],"sourcesContent":["import { render } from '../../util/testUtils';\n\nimport { SegmentedControl } from '.';\n\nconst setup = (onChange: (selectedIndex: number) => void = () => {}) => {\n return render(\n <SegmentedControl\n values={['kg', 'lbs']}\n onChange={onChange}\n selectedIndex={0}\n />\n );\n};\n\ndescribe('SegmentedControl component', () => {\n it('Should provide the index of the clicked button', async () => {\n const callback = jest.fn();\n const { getAllByRole, user } = setup(callback);\n const buttons = getAllByRole('button');\n\n // click first button\n await user.click(buttons[0]);\n\n // click second button\n await user.click(buttons[1]);\n\n expect(callback.mock.calls).toEqual([[0], [1]]);\n });\n\n it('Should provide the index of the selected button on key down', async () => {\n const callback = jest.fn();\n const { getAllByRole, user } = setup(callback);\n const buttons = getAllByRole('button');\n\n // focus first button and select with keyboard\n buttons[0].focus();\n await user.keyboard('{enter}');\n\n // focus second button and select with keyboard\n buttons[1].focus();\n await user.keyboard('{enter}');\n\n expect(callback.mock.calls).toEqual([[0], [1]]);\n });\n});\n"],"names":["render","_jsx"],"mappings":";;;;;;;;;;AAIA,IAAM,KAAK,GAAG,UAAC,QAAoD;IAApD,yBAAA,EAAA,0BAAoD;IACjE,OAAOA,YAAM,CACXC,IAAC,gBAAgB,IACf,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EACrB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,CAAC,WAChB,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,QAAQ,CAAC,4BAA4B,EAAE;IACrC,EAAE,CAAC,gDAAgD,EAAE;;;;;oBAC7C,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;oBACrB,KAAyB,KAAK,CAAC,QAAQ,CAAC,EAAtC,YAAY,kBAAA,EAAE,IAAI,UAAA,CAAqB;oBACzC,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;;oBAGvC,qBAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAA;;;oBAA5B,SAA4B,CAAC;;oBAG7B,qBAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAA;;;oBAA5B,SAA4B,CAAC;oBAE7B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;;;SACjD,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE;;;;;oBAC1D,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;oBACrB,KAAyB,KAAK,CAAC,QAAQ,CAAC,EAAtC,YAAY,kBAAA,EAAE,IAAI,UAAA,CAAqB;oBACzC,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;;oBAGvC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;oBACnB,qBAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAA;;oBAA9B,SAA8B,CAAC;;oBAG/B,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;oBACnB,qBAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAA;;oBAA9B,SAA8B,CAAC;oBAE/B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;;;SACjD,CAAC,CAAC;AACL,CAAC,CAAC"}