@watermarkinsights/ripple 4.0.0-9 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist/cjs/{chartFunctions-33cb3097.js → chartFunctions-f5ded027.js} +1 -1
  2. package/dist/cjs/{functions-833ccc83.js → functions-e7db4a26.js} +67 -824
  3. package/dist/cjs/{global-d57c118b.js → global-b33cf49b.js} +1 -1
  4. package/dist/cjs/{intl-ab07bd0b.js → intl-9ef93563.js} +3 -3
  5. package/dist/cjs/loader.cjs.js +3 -3
  6. package/dist/cjs/priv-chart-popover.cjs.entry.js +1 -1
  7. package/dist/cjs/priv-datepicker.cjs.entry.js +1 -1
  8. package/dist/cjs/ripple.cjs.js +3 -3
  9. package/dist/cjs/wm-action-menu_2.cjs.entry.js +2 -2
  10. package/dist/cjs/wm-button.cjs.entry.js +1 -1
  11. package/dist/cjs/wm-chart.cjs.entry.js +4 -4
  12. package/dist/cjs/wm-datepicker.cjs.entry.js +1 -1
  13. package/dist/cjs/wm-file.cjs.entry.js +7 -4
  14. package/dist/cjs/wm-input.cjs.entry.js +4 -9
  15. package/dist/cjs/wm-line-chart.cjs.entry.js +3 -3
  16. package/dist/cjs/wm-modal-header.cjs.entry.js +2 -2
  17. package/dist/cjs/wm-modal.cjs.entry.js +1 -1
  18. package/dist/cjs/wm-navigation_3.cjs.entry.js +2 -2
  19. package/dist/cjs/wm-navigator.cjs.entry.js +1 -1
  20. package/dist/cjs/wm-option_2.cjs.entry.js +68 -119
  21. package/dist/cjs/wm-pagination.cjs.entry.js +1 -1
  22. package/dist/cjs/wm-progress-indicator_3.cjs.entry.js +4 -4
  23. package/dist/cjs/wm-search.cjs.entry.js +2 -2
  24. package/dist/cjs/wm-snackbar.cjs.entry.js +2 -2
  25. package/dist/cjs/wm-tab-item_3.cjs.entry.js +2 -2
  26. package/dist/cjs/wm-tag-input.cjs.entry.js +521 -617
  27. package/dist/cjs/wm-tag-option.cjs.entry.js +43 -0
  28. package/dist/cjs/wm-timepicker.cjs.entry.js +1 -1
  29. package/dist/cjs/wm-toggletip.cjs.entry.js +1 -1
  30. package/dist/cjs/wm-uploader.cjs.entry.js +2 -2
  31. package/dist/collection/collection-manifest.json +3 -3
  32. package/dist/collection/components/charts/wm-chart/wm-chart.css +0 -1
  33. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-indicator.css +0 -1
  34. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.css +9 -1
  35. package/dist/collection/components/wm-file/wm-file.js +23 -3
  36. package/dist/collection/components/wm-file/wm-file.spec.js +83 -34
  37. package/dist/collection/components/wm-file-list/wm-file-list.spec.js +32 -59
  38. package/dist/collection/components/wm-input/wm-input.js +1 -8
  39. package/dist/collection/components/wm-menuitem/wm-menuitem.js +1 -1
  40. package/dist/collection/components/wm-option/wm-option.css +6 -6
  41. package/dist/collection/components/wm-option/wm-option.js +47 -3
  42. package/dist/collection/components/wm-select/wm-select.e2e.js +60 -114
  43. package/dist/collection/components/wm-select/wm-select.js +80 -141
  44. package/dist/collection/components/wm-select/wm-select.spec.js +9 -11
  45. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.css +0 -1
  46. package/dist/collection/components/wm-tag-input/wm-tag-input.css +19 -22
  47. package/dist/collection/components/wm-tag-input/wm-tag-input.e2e.js +3 -3
  48. package/dist/collection/components/wm-tag-input/wm-tag-input.js +597 -726
  49. package/dist/collection/components/wm-tag-input/wm-tag-option/wm-tag-option.js +241 -0
  50. package/dist/collection/components/wm-uploader/wm-uploader.e2e.js +26 -47
  51. package/dist/collection/components/wm-uploader/wm-uploader.js +3 -3
  52. package/dist/collection/components/wm-uploader/wm-uploader.spec.js +67 -140
  53. package/dist/collection/global/functions.js +22 -10
  54. package/dist/collection/global/intl.js +2 -2
  55. package/dist/collection/lang/lang.spec.js +2 -2
  56. package/dist/esm/{chartFunctions-36eb2d1a.js → chartFunctions-2a4603c6.js} +1 -1
  57. package/dist/esm/{functions-061ab506.js → functions-358a1a02.js} +66 -824
  58. package/dist/esm/{global-509460f7.js → global-ba03a879.js} +1 -1
  59. package/dist/esm/{intl-d698d52f.js → intl-48057c4d.js} +3 -3
  60. package/dist/esm/loader.js +3 -3
  61. package/dist/esm/polyfills/core-js.js +0 -0
  62. package/dist/esm/polyfills/dom.js +0 -0
  63. package/dist/esm/polyfills/es5-html-element.js +0 -0
  64. package/dist/esm/polyfills/index.js +0 -0
  65. package/dist/esm/polyfills/system.js +0 -0
  66. package/dist/esm/priv-chart-popover.entry.js +1 -1
  67. package/dist/esm/priv-datepicker.entry.js +1 -1
  68. package/dist/esm/ripple.js +3 -3
  69. package/dist/esm/wm-action-menu_2.entry.js +2 -2
  70. package/dist/esm/wm-button.entry.js +1 -1
  71. package/dist/esm/wm-chart.entry.js +4 -4
  72. package/dist/esm/wm-datepicker.entry.js +1 -1
  73. package/dist/esm/wm-file.entry.js +7 -4
  74. package/dist/esm/wm-input.entry.js +4 -9
  75. package/dist/esm/wm-line-chart.entry.js +3 -3
  76. package/dist/esm/wm-modal-header.entry.js +2 -2
  77. package/dist/esm/wm-modal.entry.js +1 -1
  78. package/dist/esm/wm-navigation_3.entry.js +2 -2
  79. package/dist/esm/wm-navigator.entry.js +1 -1
  80. package/dist/esm/wm-option_2.entry.js +68 -119
  81. package/dist/esm/wm-pagination.entry.js +1 -1
  82. package/dist/esm/wm-progress-indicator_3.entry.js +4 -4
  83. package/dist/esm/wm-search.entry.js +2 -2
  84. package/dist/esm/wm-snackbar.entry.js +2 -2
  85. package/dist/esm/wm-tab-item_3.entry.js +2 -2
  86. package/dist/esm/wm-tag-input.entry.js +522 -618
  87. package/dist/esm/wm-tag-option.entry.js +39 -0
  88. package/dist/esm/wm-timepicker.entry.js +1 -1
  89. package/dist/esm/wm-toggletip.entry.js +1 -1
  90. package/dist/esm/wm-uploader.entry.js +2 -2
  91. package/dist/esm-es5/{chartFunctions-36eb2d1a.js → chartFunctions-2a4603c6.js} +1 -1
  92. package/dist/esm-es5/functions-358a1a02.js +1 -0
  93. package/dist/esm-es5/global-ba03a879.js +1 -0
  94. package/dist/esm-es5/{intl-d698d52f.js → intl-48057c4d.js} +1 -1
  95. package/dist/esm-es5/loader.js +1 -1
  96. package/dist/esm-es5/priv-chart-popover.entry.js +1 -1
  97. package/dist/esm-es5/priv-datepicker.entry.js +1 -1
  98. package/dist/esm-es5/ripple.js +1 -1
  99. package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
  100. package/dist/esm-es5/wm-button.entry.js +1 -1
  101. package/dist/esm-es5/wm-chart.entry.js +1 -1
  102. package/dist/esm-es5/wm-datepicker.entry.js +1 -1
  103. package/dist/esm-es5/wm-file.entry.js +1 -1
  104. package/dist/esm-es5/wm-input.entry.js +1 -1
  105. package/dist/esm-es5/wm-line-chart.entry.js +1 -1
  106. package/dist/esm-es5/wm-modal-header.entry.js +1 -1
  107. package/dist/esm-es5/wm-modal.entry.js +1 -1
  108. package/dist/esm-es5/wm-navigation_3.entry.js +1 -1
  109. package/dist/esm-es5/wm-navigator.entry.js +1 -1
  110. package/dist/esm-es5/wm-option_2.entry.js +1 -1
  111. package/dist/esm-es5/wm-pagination.entry.js +1 -1
  112. package/dist/esm-es5/wm-progress-indicator_3.entry.js +1 -1
  113. package/dist/esm-es5/wm-search.entry.js +1 -1
  114. package/dist/esm-es5/wm-snackbar.entry.js +1 -1
  115. package/dist/esm-es5/wm-tab-item_3.entry.js +1 -1
  116. package/dist/esm-es5/wm-tag-input.entry.js +1 -1
  117. package/dist/esm-es5/wm-tag-option.entry.js +1 -0
  118. package/dist/esm-es5/wm-timepicker.entry.js +1 -1
  119. package/dist/esm-es5/wm-toggletip.entry.js +1 -1
  120. package/dist/esm-es5/wm-uploader.entry.js +1 -1
  121. package/dist/ripple/{p-3f159fa3.entry.js → p-05ef4092.entry.js} +1 -1
  122. package/dist/ripple/p-11d629cb.system.entry.js +1 -0
  123. package/dist/ripple/p-126fbcdb.entry.js +1 -0
  124. package/dist/ripple/p-12a140e0.system.entry.js +1 -0
  125. package/dist/ripple/{p-e61e2d7f.entry.js → p-191fafc6.entry.js} +1 -1
  126. package/dist/ripple/p-1ab62a21.system.entry.js +1 -0
  127. package/dist/ripple/{p-d8287161.entry.js → p-1e7e2ca4.entry.js} +1 -1
  128. package/dist/ripple/{p-fef28649.system.entry.js → p-1ee49e28.system.entry.js} +1 -1
  129. package/dist/ripple/{p-e82eae12.entry.js → p-299bf10c.entry.js} +1 -1
  130. package/dist/ripple/{p-c20c248a.entry.js → p-2d6bb6d7.entry.js} +1 -1
  131. package/dist/ripple/{p-a31e736a.entry.js → p-366a9608.entry.js} +1 -1
  132. package/dist/ripple/p-3a20b1ed.system.entry.js +1 -0
  133. package/dist/ripple/p-3bb79457.entry.js +1 -0
  134. package/dist/ripple/{p-1f7a67cc.system.js → p-426fa249.system.js} +1 -1
  135. package/dist/ripple/p-44d4705c.system.js +1 -0
  136. package/dist/ripple/p-492dd748.system.entry.js +1 -0
  137. package/dist/ripple/p-4aa8e2cf.entry.js +1 -0
  138. package/dist/ripple/{p-ff891d67.js → p-52f5ec85.js} +1 -1
  139. package/dist/ripple/{p-484d57e1.entry.js → p-546d5c1d.entry.js} +1 -1
  140. package/dist/ripple/{p-d231aed1.system.entry.js → p-585732f7.system.entry.js} +1 -1
  141. package/dist/ripple/p-6767b009.system.js +1 -0
  142. package/dist/ripple/{p-c6ba5d3d.system.entry.js → p-681c9539.system.entry.js} +1 -1
  143. package/dist/ripple/{p-d2c9264d.entry.js → p-68cade03.entry.js} +1 -1
  144. package/dist/ripple/{p-260fd686.system.entry.js → p-6c27afee.system.entry.js} +1 -1
  145. package/dist/ripple/{p-d108107c.entry.js → p-7740db9a.entry.js} +1 -1
  146. package/dist/ripple/{p-055d1c23.system.entry.js → p-7d005413.system.entry.js} +1 -1
  147. package/dist/ripple/{p-c9830db6.system.entry.js → p-7e2c2c46.system.entry.js} +1 -1
  148. package/dist/ripple/p-7fa84884.system.entry.js +1 -0
  149. package/dist/ripple/{p-9a3d8f0b.system.entry.js → p-8b143e9d.system.entry.js} +1 -1
  150. package/dist/ripple/{p-0790bfed.entry.js → p-8ea235b6.entry.js} +1 -1
  151. package/dist/ripple/{p-4eae76a6.entry.js → p-8fadf5dd.entry.js} +1 -1
  152. package/dist/ripple/{p-8df34bf3.system.entry.js → p-94c65a69.system.entry.js} +1 -1
  153. package/dist/ripple/{p-3bd6839a.entry.js → p-9690de6c.entry.js} +1 -1
  154. package/dist/ripple/p-acb0156f.system.entry.js +1 -0
  155. package/dist/ripple/p-ae7290c2.entry.js +1 -0
  156. package/dist/ripple/{p-030b527a.js → p-aea9a33a.js} +1 -1
  157. package/dist/ripple/p-b6e5408c.js +1 -0
  158. package/dist/ripple/p-b75c0973.system.js +1 -0
  159. package/dist/ripple/{p-21f73fee.system.entry.js → p-b858d526.system.entry.js} +1 -1
  160. package/dist/ripple/{p-40b5b7d1.system.entry.js → p-b92c2e16.system.entry.js} +1 -1
  161. package/dist/ripple/p-be79e95d.entry.js +1 -0
  162. package/dist/ripple/{p-b623fdc8.entry.js → p-bfff12b4.entry.js} +1 -1
  163. package/dist/ripple/{p-68d7cf2b.entry.js → p-c028f29c.entry.js} +1 -1
  164. package/dist/ripple/p-c19ed569.entry.js +1 -0
  165. package/dist/ripple/{p-f42031f5.system.js → p-c3da681d.system.js} +1 -1
  166. package/dist/ripple/{p-9b94467e.entry.js → p-c5105455.entry.js} +1 -1
  167. package/dist/ripple/{p-15457a4b.system.entry.js → p-c86a7f4d.system.entry.js} +1 -1
  168. package/dist/ripple/{p-b9283910.entry.js → p-db58d96b.entry.js} +1 -1
  169. package/dist/ripple/p-dd92850a.js +1 -0
  170. package/dist/ripple/p-e39e6c2b.entry.js +1 -0
  171. package/dist/ripple/{p-a8ea87d1.system.entry.js → p-ec831e59.system.entry.js} +1 -1
  172. package/dist/ripple/{p-f1029090.system.entry.js → p-ee51efe0.system.entry.js} +1 -1
  173. package/dist/ripple/{p-777ced5b.entry.js → p-eec01bbe.entry.js} +1 -1
  174. package/dist/ripple/{p-5ed1b0a2.system.entry.js → p-f339d590.system.entry.js} +1 -1
  175. package/dist/ripple/{p-5b593411.system.entry.js → p-f3407959.system.entry.js} +1 -1
  176. package/dist/ripple/{p-da727af8.system.entry.js → p-f3a374ff.system.entry.js} +1 -1
  177. package/dist/ripple/{p-867b20a9.system.entry.js → p-f43fda55.system.entry.js} +1 -1
  178. package/dist/ripple/ripple.esm.js +1 -1
  179. package/dist/ripple/ripple.js +1 -1
  180. package/dist/types/components/wm-file/wm-file.d.ts +1 -1
  181. package/dist/types/components/wm-input/wm-input.d.ts +0 -1
  182. package/dist/types/components/wm-option/wm-option.d.ts +2 -0
  183. package/dist/types/components/wm-select/wm-select.d.ts +7 -7
  184. package/dist/types/components/wm-tag-input/wm-tag-input.d.ts +65 -85
  185. package/dist/types/components/wm-tag-input/wm-tag-option/wm-tag-option.d.ts +18 -0
  186. package/dist/types/components/wm-uploader/wm-uploader.d.ts +1 -1
  187. package/dist/types/components.d.ts +30 -27
  188. package/dist/types/global/functions.d.ts +2 -1
  189. package/dist/types/global/intl.d.ts +2 -2
  190. package/package.json +1 -1
  191. package/dist/cjs/wm-tag-input-row.cjs.entry.js +0 -23
  192. package/dist/collection/components/wm-tag-input/wm-tag-input-row/wm-tag-input-row.js +0 -122
  193. package/dist/collection/components/wm-tag-input/wm-tag-input.spec.js +0 -1039
  194. package/dist/esm/wm-tag-input-row.entry.js +0 -19
  195. package/dist/esm-es5/functions-061ab506.js +0 -1
  196. package/dist/esm-es5/global-509460f7.js +0 -1
  197. package/dist/esm-es5/wm-tag-input-row.entry.js +0 -1
  198. package/dist/ripple/p-1c3ba701.system.entry.js +0 -1
  199. package/dist/ripple/p-4a8c95b9.system.entry.js +0 -1
  200. package/dist/ripple/p-5f2c09f6.entry.js +0 -1
  201. package/dist/ripple/p-647a4a4a.system.entry.js +0 -1
  202. package/dist/ripple/p-7011accc.entry.js +0 -1
  203. package/dist/ripple/p-707383d5.system.js +0 -1
  204. package/dist/ripple/p-7c2e47bc.system.entry.js +0 -1
  205. package/dist/ripple/p-839d7e0f.system.js +0 -1
  206. package/dist/ripple/p-928cc755.system.entry.js +0 -1
  207. package/dist/ripple/p-9888c825.js +0 -1
  208. package/dist/ripple/p-a5308115.js +0 -1
  209. package/dist/ripple/p-b45a2fc3.entry.js +0 -1
  210. package/dist/ripple/p-b4b57baf.system.entry.js +0 -1
  211. package/dist/ripple/p-c15f29e5.system.js +0 -1
  212. package/dist/ripple/p-d38882eb.entry.js +0 -1
  213. package/dist/ripple/p-d601c5a1.entry.js +0 -1
  214. package/dist/ripple/p-d68678d2.entry.js +0 -1
  215. package/dist/ripple/p-e703d9cd.entry.js +0 -1
  216. package/dist/ripple/p-eb0d569a.system.entry.js +0 -1
  217. package/dist/types/components/wm-tag-input/wm-tag-input-row/wm-tag-input-row.d.ts +0 -11
@@ -1,24 +1,32 @@
1
1
  jest.mock("../../global/services/http-service");
2
2
  import { newSpecPage } from "@stencil/core/testing";
3
3
  import { Uploader } from "./wm-uploader";
4
+ import { File } from "../wm-file/wm-file";
4
5
  // mock ResizeObserver
5
6
  global.ResizeObserver = jest.fn().mockImplementation(() => ({
6
7
  observe: jest.fn(),
7
8
  unobserve: jest.fn(),
8
9
  disconnect: jest.fn(),
9
10
  }));
11
+ // mock MutationObserver
12
+ global.MutationObserver = jest.fn().mockImplementation(() => ({
13
+ observe: jest.fn(),
14
+ unobserve: jest.fn(),
15
+ disconnect: jest.fn(),
16
+ }));
10
17
  describe("wm-uploader", () => {
11
18
  let html, page;
12
- // max-size of 200Mb should be ignored: max is 100 and dev can only set to a smaller value.
13
19
  beforeEach(async () => {
14
20
  html = `<wm-uploader
15
21
  id="uploader1"
16
22
  button-text="Upload new document"
17
- max-size="200"
23
+ max-size="200 MB"
18
24
  max-files="5"
19
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
20
- ></wm-uploader>`;
21
- page = await newSpecPage({ components: [Uploader], html });
25
+ >
26
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
27
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
28
+ </wm-uploader>`;
29
+ page = await newSpecPage({ components: [Uploader, File], html });
22
30
  await page.waitForChanges();
23
31
  });
24
32
  afterEach(() => {
@@ -33,9 +41,8 @@ describe("wm-uploader", () => {
33
41
  button-text="Upload new document"
34
42
  label="example label"
35
43
  required-field="true"
36
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
37
44
  ></wm-uploader>`;
38
- page = await newSpecPage({ components: [Uploader], html });
45
+ page = await newSpecPage({ components: [Uploader, File], html });
39
46
  await page.waitForChanges();
40
47
  inputEl = page.root.shadowRoot.querySelector("input");
41
48
  expect(inputEl).toEqualAttribute("aria-label", "example label, Upload new document");
@@ -44,9 +51,8 @@ describe("wm-uploader", () => {
44
51
  id="uploader1"
45
52
  button-text="Upload new document"
46
53
  required-field="true"
47
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
48
54
  ></wm-uploader>`;
49
- page = await newSpecPage({ components: [Uploader], html });
55
+ page = await newSpecPage({ components: [Uploader, File], html });
50
56
  await page.waitForChanges();
51
57
  inputEl = page.root.shadowRoot.querySelector("input");
52
58
  expect(inputEl).toEqualAttribute("aria-label", "Upload new document");
@@ -55,9 +61,8 @@ describe("wm-uploader", () => {
55
61
  button-text="Upload new document"
56
62
  label="Upload new document"
57
63
  required-field="true"
58
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
59
64
  ></wm-uploader>`;
60
- page = await newSpecPage({ components: [Uploader], html });
65
+ page = await newSpecPage({ components: [Uploader, File], html });
61
66
  await page.waitForChanges();
62
67
  inputEl = page.root.shadowRoot.querySelector("input");
63
68
  expect(inputEl).toEqualAttribute("aria-label", "Upload new document");
@@ -66,36 +71,6 @@ describe("wm-uploader", () => {
66
71
  const labelEl = page.root.shadowRoot.querySelector("label");
67
72
  expect(labelEl.textContent).toBe("Upload new document");
68
73
  });
69
- it("renders the file list", async () => {
70
- const fileEls = page.root.shadowRoot.querySelectorAll("wm-file");
71
- expect(fileEls.length).toBe(2);
72
- });
73
- it("sorts by name or date if prop is set accordingly", async () => {
74
- // name
75
- html = `<wm-uploader
76
- id="uploader1"
77
- sort-by="name"
78
- button-text="Upload new document"
79
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
80
- ></wm-uploader>`;
81
- page = await newSpecPage({ components: [Uploader], html });
82
- await page.waitForChanges();
83
- let fileEls = page.root.shadowRoot.querySelectorAll("wm-file");
84
- expect(JSON.parse(fileEls[0].getAttribute("file")).id).toBe("file1");
85
- expect(JSON.parse(fileEls[1].getAttribute("file")).id).toBe("file2");
86
- // date
87
- html = `<wm-uploader
88
- id="uploader1"
89
- sort-by="date"
90
- button-text="Upload new document"
91
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
92
- ></wm-uploader>`;
93
- page = await newSpecPage({ components: [Uploader], html });
94
- await page.waitForChanges();
95
- fileEls = page.root.shadowRoot.querySelectorAll("wm-file");
96
- expect(JSON.parse(fileEls[0].getAttribute("file")).id).toBe("file2");
97
- expect(JSON.parse(fileEls[1].getAttribute("file")).id).toBe("file1");
98
- });
99
74
  it("uploads files", async () => {
100
75
  const input = page.root.shadowRoot.querySelector("input");
101
76
  // fake files which the components uploadFiles() function will process
@@ -129,121 +104,68 @@ describe("wm-uploader", () => {
129
104
  expect(validFiles[1].size).toBe(123456);
130
105
  });
131
106
  it("disables button when upload is in progress", async () => {
132
- html = `<wm-uploader
133
- id="uploader1"
134
- button-text="Upload new document"
135
- label="Upload new document"
136
- required-field="true"
137
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z", "progress": "10"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
138
- ></wm-uploader>`;
139
- page = await newSpecPage({ components: [Uploader], html });
107
+ html = `<wm-uploader id="uploader1">
108
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB" progress="30"></wm-file>
109
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
110
+ </wm-uploader>`;
111
+ page = await newSpecPage({ components: [Uploader, File], html });
140
112
  await page.waitForChanges();
141
113
  const labelEl = page.root.shadowRoot.querySelector("label");
142
114
  expect(labelEl).toHaveClass("disabled");
143
115
  });
144
- it("emits the file ID in the custom event when a file action event is received", async () => {
145
- let fakePreviewEvent = new CustomEvent("wmIntFilePreviewed");
146
- // @ts-ignore
147
- fakePreviewEvent.detail = "previewid";
148
- let fakeDownloadEvent = new CustomEvent("wmIntFileDownloaded");
149
- // @ts-ignore
150
- fakeDownloadEvent.detail = "downloadid";
151
- let fakeDeleteEvent = new CustomEvent("wmIntFileDeleted");
152
- // @ts-ignore
153
- fakeDeleteEvent.detail = "deleteid";
154
- const wmUploaderPreviewFileSpy = jest.fn();
155
- const wmUploaderDownloadFileSpy = jest.fn();
156
- const wmUploaderDeleteFileSpy = jest.fn();
157
- const wmFilePreviewSpy = jest.fn();
158
- const wmFileDownloadSpy = jest.fn();
159
- const wmFileDeleteSpy = jest.fn();
160
- page.root.addEventListener("wmUploaderPreviewFile", wmUploaderPreviewFileSpy);
161
- page.root.addEventListener("wmUploaderDownloadFile", wmUploaderDownloadFileSpy);
162
- page.root.addEventListener("wmUploaderDeleteFile", wmUploaderDeleteFileSpy);
163
- page.root.addEventListener("wmFilePreview", wmFilePreviewSpy);
164
- page.root.addEventListener("wmFileDownload", wmFileDownloadSpy);
165
- page.root.addEventListener("wmFileDelete", wmFileDeleteSpy);
166
- page.root.dispatchEvent(fakePreviewEvent);
167
- expect(wmUploaderPreviewFileSpy.mock.calls[0][0].detail).toBe("previewid");
168
- expect(wmFilePreviewSpy.mock.calls[0][0].detail).toBe("previewid");
169
- page.root.dispatchEvent(fakeDownloadEvent);
170
- expect(wmUploaderDownloadFileSpy.mock.calls[0][0].detail).toBe("downloadid");
171
- expect(wmFileDownloadSpy.mock.calls[0][0].detail).toBe("downloadid");
172
- page.root.dispatchEvent(fakeDeleteEvent);
173
- expect(wmUploaderDeleteFileSpy.mock.calls[0][0].detail).toBe("deleteid");
174
- expect(wmFileDeleteSpy.mock.calls[0][0].detail).toBe("deleteid");
175
- });
176
116
  it("renders max-files text, if set", async () => {
177
117
  let html, page;
178
118
  html = `<wm-uploader
179
119
  id="uploader1"
180
120
  button-text="Upload new document"
181
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
182
121
  ></wm-uploader>`;
183
- page = await newSpecPage({ components: [Uploader], html });
122
+ page = await newSpecPage({ components: [Uploader, File], html });
184
123
  await page.waitForChanges();
185
124
  let fileCountEl = page.root.shadowRoot.querySelector("#file-count");
186
125
  expect(fileCountEl).toBeFalsy();
187
126
  html = `<wm-uploader
188
- id="uploader1"
189
- max-files="3"
190
- button-text="Upload new document"
191
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
192
- ></wm-uploader>`;
193
- page = await newSpecPage({ components: [Uploader], html });
127
+ id="uploader1"
128
+ max-files="3"
129
+ >
130
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
131
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
132
+ </wm-uploader>`;
133
+ page = await newSpecPage({ components: [Uploader, File], html });
194
134
  await page.waitForChanges();
195
135
  fileCountEl = page.root.shadowRoot.querySelector("#file-count");
196
136
  expect(fileCountEl).toBeTruthy();
197
137
  expect(fileCountEl.textContent).toBe("2 of 3 Files");
198
- html = `<wm-uploader
199
- id="uploader1"
200
- max-files="2"
201
- button-text="Upload new document"
202
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
203
- ></wm-uploader>`;
204
138
  });
205
139
  it("renders max-size text, if set", async () => {
206
140
  let html, page;
207
141
  html = `<wm-uploader
208
142
  id="uploader1"
209
143
  button-text="Upload new document"
210
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
211
144
  ></wm-uploader>`;
212
- page = await newSpecPage({ components: [Uploader], html });
145
+ page = await newSpecPage({ components: [Uploader, File], html });
213
146
  await page.waitForChanges();
214
147
  let maxSizeEl = page.root.shadowRoot.querySelector("#max-size");
215
148
  expect(maxSizeEl).toBeFalsy();
216
149
  html = `<wm-uploader
217
150
  id="uploader1"
218
- max-size="25"
151
+ max-size="25 MB"
219
152
  button-text="Upload new document"
220
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
221
153
  ></wm-uploader>`;
222
- page = await newSpecPage({ components: [Uploader], html });
223
- await page.waitForChanges();
224
- maxSizeEl = page.root.shadowRoot.querySelector("#max-size");
225
- expect(maxSizeEl).toBeTruthy();
226
- expect(maxSizeEl.textContent).toBe("Maximum file size 25MB");
227
- // max-size of 250MB is ignored, defaulting to the cap of 100MB
228
- html = `<wm-uploader
229
- id="uploader1"
230
- max-size="250"
231
- button-text="Upload new document"
232
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
233
- ></wm-uploader>`;
234
- page = await newSpecPage({ components: [Uploader], html });
154
+ page = await newSpecPage({ components: [Uploader, File], html });
235
155
  await page.waitForChanges();
236
156
  maxSizeEl = page.root.shadowRoot.querySelector("#max-size");
237
157
  expect(maxSizeEl).toBeTruthy();
158
+ expect(maxSizeEl.textContent).toBe("Maximum file size 25 MB");
238
159
  });
239
160
  it("announces error when max-files has been reached and button clicked", async () => {
240
161
  html = `<wm-uploader
241
162
  id="uploader1"
242
163
  max-files="2"
243
- button-text="Upload new document"
244
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
245
- ></wm-uploader>`;
246
- page = await newSpecPage({ components: [Uploader], html });
164
+ >
165
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
166
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
167
+ </wm-uploader>`;
168
+ page = await newSpecPage({ components: [Uploader, File], html });
247
169
  await page.waitForChanges();
248
170
  const input = page.root.shadowRoot.querySelector("input");
249
171
  input.click();
@@ -256,52 +178,57 @@ describe("wm-uploader", () => {
256
178
  expect(message).toBe("Accepted file types: .pdf, .txt, .log, .xml, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .gif, .jpg, .jpeg, .png, .csv");
257
179
  html = `<wm-uploader
258
180
  id="uploader1"
259
- max-size="250"
260
181
  file-types="jpeg"
261
182
  button-text="Upload new document"
262
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
183
+ files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "1/28/2020"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2/14/2019"}]'
263
184
  ></wm-uploader>`;
264
- page = await newSpecPage({ components: [Uploader], html });
185
+ page = await newSpecPage({ components: [Uploader, File], html });
265
186
  await page.waitForChanges();
266
187
  message = page.root.shadowRoot.querySelector("#accepted-types").textContent;
267
188
  expect(message).toBe("Accepted file type: .jpeg");
268
189
  });
269
190
  it("provides wm-files with the proper show-info", async () => {
270
- // default
271
- let wmFileEl = await page.root.shadowRoot.querySelector("wm-file");
272
- expect(wmFileEl).toEqualAttribute("show-info", "time");
191
+ // defaults to time
192
+ let infoEl = await page.root.querySelector("wm-file").shadowRoot.querySelector(".file-info");
193
+ expect(infoEl.textContent).toBe("1/28/2020");
273
194
  // size
274
195
  html = `<wm-uploader
275
196
  id="uploader1"
276
197
  button-text="Upload new document"
277
198
  show-info="size"
278
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
279
- ></wm-uploader>`;
280
- page = await newSpecPage({ components: [Uploader], html });
281
- await page.waitForChanges();
282
- wmFileEl = await page.root.shadowRoot.querySelector("wm-file");
283
- expect(wmFileEl).toEqualAttribute("show-info", "size");
199
+ >
200
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
201
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
202
+ </wm-uploader>`;
203
+ page = await newSpecPage({ components: [Uploader, File], html });
204
+ await page.waitForChanges();
205
+ infoEl = await page.root.querySelector("wm-file").shadowRoot.querySelector(".file-info");
206
+ expect(infoEl.textContent).toBe("28 KB");
284
207
  // time
285
208
  html = `<wm-uploader
286
209
  id="uploader1"
287
210
  button-text="Upload new document"
288
211
  show-info="time"
289
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
290
- ></wm-uploader>`;
291
- page = await newSpecPage({ components: [Uploader], html });
292
- await page.waitForChanges();
293
- wmFileEl = await page.root.shadowRoot.querySelector("wm-file");
294
- expect(wmFileEl).toEqualAttribute("show-info", "time");
212
+ >
213
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
214
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
215
+ </wm-uploader>`;
216
+ page = await newSpecPage({ components: [Uploader, File], html });
217
+ await page.waitForChanges();
218
+ infoEl = await page.root.querySelector("wm-file").shadowRoot.querySelector(".file-info");
219
+ expect(infoEl.textContent).toBe("1/28/2020");
295
220
  // none
296
221
  html = `<wm-uploader
297
222
  id="uploader1"
298
223
  button-text="Upload new document"
299
224
  show-info="none"
300
- files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "2020-01-28T22:29:10.397Z"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2019-02-14T12:21:05.397Z"}]'
301
- ></wm-uploader>`;
302
- page = await newSpecPage({ components: [Uploader], html });
303
- await page.waitForChanges();
304
- wmFileEl = await page.root.shadowRoot.querySelector("wm-file");
305
- expect(wmFileEl).toEqualAttribute("show-info", "none");
225
+ >
226
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
227
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
228
+ </wm-uploader>`;
229
+ page = await newSpecPage({ components: [Uploader, File], html });
230
+ await page.waitForChanges();
231
+ infoEl = await page.root.querySelector("wm-file").shadowRoot.querySelector(".file-info");
232
+ expect(infoEl).toBe(null);
306
233
  });
307
234
  });
@@ -486,16 +486,6 @@ export function measureText(originEl, placeholderText) {
486
486
  document.body.removeChild(measurementEl);
487
487
  return boundingClientRect;
488
488
  }
489
- export function safeParseJSON(toParse) {
490
- // JSON.parse will throw an exception if the string provided is not in the proper format
491
- // instead of the exception, just return null and let other logic check
492
- try {
493
- return JSON.parse(toParse);
494
- }
495
- catch (e) {
496
- return null;
497
- }
498
- }
499
489
  export function truncateText(textEl, text, availableSpace, endAmt) {
500
490
  const cloneEl = document.createElement("div");
501
491
  cloneEl.style.visibility = "hidden";
@@ -585,3 +575,25 @@ export function handleDisabledAttribute(el, isDisabled) {
585
575
  el.removeAttribute("disabled");
586
576
  }
587
577
  }
578
+ // get the prev/next element with an option to circle through the list
579
+ export function findPrev(list, item, loop = false) {
580
+ if (!!list && !item)
581
+ return list[list.length - 1]; // if list was passed but no item, get the last item
582
+ if (!list.includes(item))
583
+ return; // if list is empty or doesn't include item
584
+ let current = list.indexOf(item);
585
+ let beforeFirst = loop ? list.length - 1 : 0; // before first item can be first (hard stop) or back to last
586
+ let prev = current > 0 ? current - 1 : beforeFirst;
587
+ return list[prev];
588
+ }
589
+ export function findNext(list, item, loop = false) {
590
+ if (!!list && !item)
591
+ return list[0]; // if list was passed but no item, get the first item
592
+ if (!list.includes(item))
593
+ return; // if list is empty or doesn't include item
594
+ let current = list.indexOf(item);
595
+ const last = list.length - 1;
596
+ let afterLast = loop ? 0 : last; // after last item can be last (hard stop) or back to first
597
+ let next = current !== last ? current + 1 : afterLast;
598
+ return list[next];
599
+ }
@@ -118,7 +118,7 @@ export const uploaderMessages = {
118
118
  }, { x: fileListLength, y: maxFiles }),
119
119
  getFileTooLarge: (maxSize) => intl.formatMessage({
120
120
  id: "uploader.fileTooLarge",
121
- defaultMessage: "The selected file is too large. Maximum file size is {size}Mb",
121
+ defaultMessage: "The selected file is too large. Maximum file size is {size}",
122
122
  }, { size: maxSize }),
123
123
  getFilesUploading: (numFilesUploading) => intl.formatMessage({
124
124
  id: "uploader.filesUploading",
@@ -130,7 +130,7 @@ export const uploaderMessages = {
130
130
  }, { validTypes }),
131
131
  getMaxSize: (maxSize) => intl.formatMessage({
132
132
  id: "uploader.maxSize",
133
- defaultMessage: "Maximum file size {maxSize}MB",
133
+ defaultMessage: "Maximum file size {maxSize}",
134
134
  description: "An indicator of the maximum file size the uploader allows",
135
135
  }, {
136
136
  maxSize: maxSize,
@@ -13,8 +13,8 @@ describe("translations", () => {
13
13
  !Object.keys(es).includes(Object.keys(en)[i]) && missingES.push(Object.keys(en)[i]);
14
14
  !Object.keys(pig).includes(Object.keys(en)[i]) && missingPIG.push(Object.keys(en)[i]);
15
15
  }
16
- expect(missingFR.length).toBe(26);
17
- expect(missingES.length).toBe(30);
16
+ expect(missingFR.length).toBe(0);
17
+ expect(missingES.length).toBe(0);
18
18
  expect(missingPIG.length).toBe(0);
19
19
  });
20
20
  });
@@ -1,5 +1,5 @@
1
1
  import { h } from './index-294d486f.js';
2
- import { i as intl, c as checkForActiveElInShadow, e as getPosition, f as findParentWithScrollbar, d as debounce } from './functions-061ab506.js';
2
+ import { i as intl, c as checkForActiveElInShadow, e as getPosition, f as findParentWithScrollbar, d as debounce } from './functions-358a1a02.js';
3
3
 
4
4
  const colors = {
5
5
  salmon: "#ff5f4e",