@watermarkinsights/ripple 3.0.1-0 → 3.0.2-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 (224) hide show
  1. package/dist/{ripple/functions-316c1b23.js → cjs/functions-e3f5ae65.js} +188 -2391
  2. package/dist/cjs/global-1e540de6.js +38 -0
  3. package/dist/cjs/http-service-9e8c4dd5.js +57 -0
  4. package/dist/cjs/index-d930307d.js +1392 -0
  5. package/dist/cjs/index.cjs.js +2 -0
  6. package/dist/cjs/interfaces-30a74c1f.js +35 -0
  7. package/dist/cjs/loader.cjs.js +22 -0
  8. package/dist/cjs/priv-chart-popover.cjs.entry.js +89 -0
  9. package/dist/cjs/priv-datepicker.cjs.entry.js +672 -0
  10. package/dist/cjs/priv-navigator-button.cjs.entry.js +29 -0
  11. package/dist/cjs/priv-navigator-item.cjs.entry.js +34 -0
  12. package/dist/cjs/ripple.cjs.js +20 -0
  13. package/dist/cjs/wm-action-menu_2.cjs.entry.js +318 -0
  14. package/dist/cjs/wm-button.cjs.entry.js +152 -0
  15. package/dist/cjs/wm-chart-slice.cjs.entry.js +22 -0
  16. package/dist/cjs/wm-chart.cjs.entry.js +508 -0
  17. package/dist/cjs/wm-datepicker.cjs.entry.js +257 -0
  18. package/dist/cjs/wm-input.cjs.entry.js +110 -0
  19. package/dist/cjs/wm-modal-footer.cjs.entry.js +43 -0
  20. package/dist/cjs/wm-modal-header.cjs.entry.js +45 -0
  21. package/dist/cjs/wm-modal.cjs.entry.js +149 -0
  22. package/dist/cjs/wm-navigator.cjs.entry.js +279 -0
  23. package/dist/cjs/wm-network-uploader.cjs.entry.js +431 -0
  24. package/dist/cjs/wm-option_2.cjs.entry.js +483 -0
  25. package/dist/cjs/wm-pagination.cjs.entry.js +176 -0
  26. package/dist/cjs/wm-search.cjs.entry.js +231 -0
  27. package/dist/cjs/wm-snackbar.cjs.entry.js +160 -0
  28. package/dist/cjs/wm-tab-item_3.cjs.entry.js +316 -0
  29. package/dist/cjs/wm-tag-input.cjs.entry.js +538 -0
  30. package/dist/cjs/wm-timepicker.cjs.entry.js +386 -0
  31. package/dist/cjs/wm-toggletip.cjs.entry.js +128 -0
  32. package/dist/cjs/wm-uploader.cjs.entry.js +342 -0
  33. package/dist/cjs/wm-wrapper.cjs.entry.js +21 -0
  34. package/dist/collection/collection-manifest.json +131 -0
  35. package/dist/{ripple/ripple.css → collection/components/wm-action-menu/wm-action-menu.css} +80 -42
  36. package/dist/collection/components/wm-action-menu/wm-action-menu.js +392 -0
  37. package/dist/collection/components/wm-button/wm-button.css +572 -0
  38. package/dist/collection/components/wm-button/wm-button.js +365 -0
  39. package/dist/collection/components/wm-chart/priv-chart-popover/priv-chart-popover.css +132 -0
  40. package/dist/collection/components/wm-chart/priv-chart-popover/priv-chart-popover.js +232 -0
  41. package/dist/collection/components/wm-chart/wm-chart-slice.js +64 -0
  42. package/dist/collection/components/wm-chart/wm-chart.css +337 -0
  43. package/dist/collection/components/wm-chart/wm-chart.js +710 -0
  44. package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.css +374 -0
  45. package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.js +1003 -0
  46. package/dist/collection/components/wm-datepicker/wm-datepicker.css +211 -0
  47. package/dist/collection/components/wm-datepicker/wm-datepicker.js +439 -0
  48. package/dist/collection/components/wm-input/wm-input.css +220 -0
  49. package/dist/collection/components/wm-input/wm-input.js +302 -0
  50. package/dist/collection/components/wm-menuitem/wm-menuitem.css +118 -0
  51. package/dist/collection/components/wm-menuitem/wm-menuitem.js +411 -0
  52. package/dist/collection/components/wm-modal/wm-modal-footer.css +84 -0
  53. package/dist/collection/components/wm-modal/wm-modal-footer.js +159 -0
  54. package/dist/collection/components/wm-modal/wm-modal-header.css +78 -0
  55. package/dist/collection/components/wm-modal/wm-modal-header.js +109 -0
  56. package/dist/collection/components/wm-modal/wm-modal.css +155 -0
  57. package/dist/collection/components/wm-modal/wm-modal.js +356 -0
  58. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.css +94 -0
  59. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +97 -0
  60. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.css +67 -0
  61. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +114 -0
  62. package/dist/collection/components/wm-navigator/wm-navigator.css +137 -0
  63. package/dist/collection/components/wm-navigator/wm-navigator.js +468 -0
  64. package/dist/collection/components/wm-option/wm-option.css +162 -0
  65. package/dist/collection/components/wm-option/wm-option.js +394 -0
  66. package/dist/collection/components/wm-pagination/wm-pagination.css +217 -0
  67. package/dist/collection/components/wm-pagination/wm-pagination.js +348 -0
  68. package/dist/collection/components/wm-search/wm-search.css +155 -0
  69. package/dist/collection/components/wm-search/wm-search.js +439 -0
  70. package/dist/collection/components/wm-select/wm-select.css +315 -0
  71. package/dist/collection/components/wm-select/wm-select.js +676 -0
  72. package/dist/collection/components/wm-snackbar/wm-snackbar.css +331 -0
  73. package/dist/collection/components/wm-snackbar/wm-snackbar.js +240 -0
  74. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.css +104 -0
  75. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +202 -0
  76. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.css +73 -0
  77. package/dist/{ripple/wm-tab-list.entry.js → collection/components/wm-tabs/wm-tab-list/wm-tab-list.js} +131 -17
  78. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.css +57 -0
  79. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +104 -0
  80. package/dist/collection/components/wm-tag-input/wm-tag-input.css +431 -0
  81. package/dist/collection/components/wm-tag-input/wm-tag-input.js +754 -0
  82. package/dist/collection/components/wm-timepicker/wm-timepicker.css +370 -0
  83. package/dist/collection/components/wm-timepicker/wm-timepicker.js +567 -0
  84. package/dist/collection/components/wm-toggletip/wm-toggletip.css +350 -0
  85. package/dist/collection/components/wm-toggletip/wm-toggletip.js +217 -0
  86. package/dist/collection/components/wm-uploader/wm-network-uploader/wm-network-uploader.css +642 -0
  87. package/dist/collection/components/wm-uploader/wm-network-uploader/wm-network-uploader.js +753 -0
  88. package/dist/collection/components/wm-uploader/wm-uploader.css +666 -0
  89. package/dist/collection/components/wm-uploader/wm-uploader.js +673 -0
  90. package/dist/collection/components/wm-wrapper/wm-wrapper.js +27 -0
  91. package/dist/collection/dev/scripts.js +20 -0
  92. package/dist/collection/global/__mocks__/functions.js +5 -0
  93. package/dist/collection/global/functions.js +420 -0
  94. package/dist/{ripple/app-globals-b5693c90.js → collection/global/global.js} +3 -8
  95. package/dist/{ripple/interfaces-50753346.js → collection/global/interfaces.js} +4 -6
  96. package/dist/collection/global/services/__mocks__/http-service.js +130 -0
  97. package/dist/collection/global/services/http-service.js +50 -0
  98. package/dist/collection/lang/lang.js +5 -0
  99. package/dist/collection/lang/piglatin.js +93 -0
  100. package/dist/esm/functions-0deb7f8e.js +6117 -0
  101. package/dist/esm/global-d6b49e98.js +36 -0
  102. package/dist/{ripple → esm}/http-service-5d037e16.js +0 -0
  103. package/dist/esm/index-5a842e48.js +1363 -0
  104. package/dist/esm/index.js +1 -0
  105. package/dist/esm/interfaces-61c6305b.js +32 -0
  106. package/dist/esm/loader.js +18 -0
  107. package/dist/esm/polyfills/core-js.js +11 -0
  108. package/dist/esm/polyfills/css-shim.js +1 -0
  109. package/dist/esm/polyfills/dom.js +79 -0
  110. package/dist/esm/polyfills/es5-html-element.js +1 -0
  111. package/dist/esm/polyfills/index.js +34 -0
  112. package/dist/esm/polyfills/system.js +6 -0
  113. package/dist/{ripple → esm}/priv-chart-popover.entry.js +2 -2
  114. package/dist/{ripple → esm}/priv-datepicker.entry.js +3 -3
  115. package/dist/{ripple → esm}/priv-navigator-button.entry.js +1 -1
  116. package/dist/{ripple → esm}/priv-navigator-item.entry.js +1 -1
  117. package/dist/esm/ripple.js +18 -0
  118. package/dist/{ripple/wm-action-menu.entry.js → esm/wm-action-menu_2.entry.js} +114 -3
  119. package/dist/{ripple → esm}/wm-button.entry.js +3 -3
  120. package/dist/{ripple → esm}/wm-chart-slice.entry.js +1 -1
  121. package/dist/{ripple → esm}/wm-chart.entry.js +2 -2
  122. package/dist/{ripple → esm}/wm-datepicker.entry.js +27 -32
  123. package/dist/{ripple → esm}/wm-input.entry.js +2 -2
  124. package/dist/{ripple → esm}/wm-modal-footer.entry.js +2 -2
  125. package/dist/{ripple → esm}/wm-modal-header.entry.js +2 -2
  126. package/dist/{ripple → esm}/wm-modal.entry.js +2 -2
  127. package/dist/{ripple → esm}/wm-navigator.entry.js +3 -3
  128. package/dist/{ripple → esm}/wm-network-uploader.entry.js +2 -2
  129. package/dist/{ripple/wm-select.entry.js → esm/wm-option_2.entry.js} +119 -3
  130. package/dist/{ripple → esm}/wm-pagination.entry.js +2 -2
  131. package/dist/{ripple → esm}/wm-search.entry.js +2 -2
  132. package/dist/{ripple → esm}/wm-snackbar.entry.js +2 -2
  133. package/dist/esm/wm-tab-item_3.entry.js +310 -0
  134. package/dist/{ripple → esm}/wm-tag-input.entry.js +2 -2
  135. package/dist/{ripple → esm}/wm-timepicker.entry.js +2 -2
  136. package/dist/{ripple → esm}/wm-toggletip.entry.js +2 -2
  137. package/dist/{ripple → esm}/wm-uploader.entry.js +2 -2
  138. package/dist/{ripple → esm}/wm-wrapper.entry.js +1 -1
  139. package/dist/index.cjs.js +1 -0
  140. package/dist/index.js +1 -0
  141. package/dist/loader/cdn.js +3 -0
  142. package/dist/loader/index.cjs.js +3 -0
  143. package/dist/loader/index.d.ts +13 -0
  144. package/dist/loader/index.es2017.js +3 -0
  145. package/dist/loader/index.js +4 -0
  146. package/dist/loader/package.json +10 -0
  147. package/dist/ripple/index.esm.js +0 -1
  148. package/dist/ripple/p-103f8cae.entry.js +1 -0
  149. package/dist/ripple/p-129d94fa.entry.js +1 -0
  150. package/dist/ripple/p-139fe143.entry.js +1 -0
  151. package/dist/ripple/p-16367805.entry.js +1 -0
  152. package/dist/ripple/p-1d334060.entry.js +1 -0
  153. package/dist/ripple/p-2562f330.entry.js +1 -0
  154. package/dist/ripple/p-278b26ef.entry.js +1 -0
  155. package/dist/ripple/p-2c21bb72.entry.js +1 -0
  156. package/dist/ripple/p-2f5fda71.entry.js +1 -0
  157. package/dist/ripple/p-3e6f04d5.entry.js +1 -0
  158. package/dist/ripple/p-7185de7f.entry.js +1 -0
  159. package/dist/ripple/p-770d0798.entry.js +1 -0
  160. package/dist/ripple/p-846b4c5f.entry.js +1 -0
  161. package/dist/ripple/p-888bec42.js +1 -0
  162. package/dist/ripple/p-90779d53.entry.js +1 -0
  163. package/dist/ripple/p-934543f2.js +1 -0
  164. package/dist/ripple/p-9a087fee.entry.js +1 -0
  165. package/dist/ripple/p-a6d6eae7.js +1 -0
  166. package/dist/ripple/p-a942ad10.entry.js +1 -0
  167. package/dist/ripple/p-bfb4652d.entry.js +1 -0
  168. package/dist/ripple/p-c0fe5201.entry.js +1 -0
  169. package/dist/ripple/p-c2e27acc.entry.js +1 -0
  170. package/dist/ripple/p-c2edda64.entry.js +1 -0
  171. package/dist/ripple/p-d1fdcbcf.entry.js +1 -0
  172. package/dist/ripple/p-d40b6afb.entry.js +1 -0
  173. package/dist/ripple/p-da73db1c.entry.js +1 -0
  174. package/dist/ripple/p-e3843249.js +1 -0
  175. package/dist/ripple/p-ea5cd8b8.js +16 -0
  176. package/dist/ripple/p-ed0f43f4.entry.js +1 -0
  177. package/dist/ripple/p-ffafd363.entry.js +1 -0
  178. package/dist/ripple/ripple.esm.js +1 -125
  179. package/dist/types/components/wm-action-menu/wm-action-menu.d.ts +43 -0
  180. package/dist/types/components/wm-button/wm-button.d.ts +36 -0
  181. package/dist/types/components/wm-chart/priv-chart-popover/priv-chart-popover.d.ts +23 -0
  182. package/dist/types/components/wm-chart/wm-chart-slice.d.ts +8 -0
  183. package/dist/types/components/wm-chart/wm-chart.d.ts +77 -0
  184. package/dist/types/components/wm-datepicker/priv-datepicker/priv-datepicker.d.ts +75 -0
  185. package/dist/types/components/wm-datepicker/wm-datepicker.d.ts +39 -0
  186. package/dist/types/components/wm-input/wm-input.d.ts +30 -0
  187. package/dist/types/components/wm-menuitem/wm-menuitem.d.ts +30 -0
  188. package/dist/types/components/wm-modal/wm-modal-footer.d.ts +15 -0
  189. package/dist/types/components/wm-modal/wm-modal-header.d.ts +12 -0
  190. package/dist/types/components/wm-modal/wm-modal.d.ts +34 -0
  191. package/dist/types/components/wm-navigator/priv-navigator-button/priv-navigator-button.d.ts +10 -0
  192. package/dist/types/components/wm-navigator/priv-navigator-item/priv-navigator-item.d.ts +13 -0
  193. package/dist/types/components/wm-navigator/wm-navigator.d.ts +61 -0
  194. package/dist/types/components/wm-option/wm-option.d.ts +28 -0
  195. package/dist/types/components/wm-pagination/wm-pagination.d.ts +31 -0
  196. package/dist/types/components/wm-search/wm-search.d.ts +78 -0
  197. package/dist/types/components/wm-select/wm-select.d.ts +63 -0
  198. package/dist/types/components/wm-snackbar/wm-snackbar.d.ts +32 -0
  199. package/dist/types/components/wm-tabs/wm-tab-item/wm-tab-item.d.ts +35 -0
  200. package/dist/types/components/wm-tabs/wm-tab-list/wm-tab-list.d.ts +50 -0
  201. package/dist/types/components/wm-tabs/wm-tab-panel/wm-tab-panel.d.ts +20 -0
  202. package/dist/types/components/wm-tag-input/{wm-tag-input.d.ts~ds312_tagInputMaxTags → wm-tag-input.d.ts} +1 -1
  203. package/dist/types/components/wm-timepicker/wm-timepicker.d.ts +59 -0
  204. package/dist/types/components/wm-toggletip/wm-toggletip.d.ts +25 -0
  205. package/dist/types/components/wm-uploader/wm-network-uploader/wm-network-uploader.d.ts +85 -0
  206. package/dist/types/components/wm-uploader/wm-uploader.d.ts +75 -0
  207. package/dist/types/components/wm-wrapper/wm-wrapper.d.ts +7 -0
  208. package/dist/types/{components.d.ts~ds312_tagInputMaxTags → components.d.ts} +0 -0
  209. package/dist/types/global/__mocks__/functions.d.ts +5 -0
  210. package/dist/types/global/global.d.ts +1 -0
  211. package/dist/types/global/interfaces.d.ts +33 -0
  212. package/dist/types/global/services/__mocks__/http-service.d.ts +6 -0
  213. package/dist/types/global/services/http-service.d.ts +4 -0
  214. package/dist/types/lang/lang.d.ts +5 -0
  215. package/dist/types/{stencil-public-runtime.d.ts~ds312_tagInputMaxTags → stencil-public-runtime.d.ts} +190 -182
  216. package/package.json +1 -1
  217. package/dist/ripple/css-shim-bbdf0cc6.js +0 -4
  218. package/dist/ripple/dom-1f98a75f.js +0 -73
  219. package/dist/ripple/index-20b65f86.js +0 -2938
  220. package/dist/ripple/shadow-css-67b66845.js +0 -389
  221. package/dist/ripple/wm-menuitem.entry.js +0 -114
  222. package/dist/ripple/wm-option.entry.js +0 -119
  223. package/dist/ripple/wm-tab-item.entry.js +0 -78
  224. package/dist/ripple/wm-tab-panel.entry.js +0 -38
@@ -0,0 +1,279 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-d930307d.js');
6
+ const interfaces = require('./interfaces-30a74c1f.js');
7
+ const functions = require('./functions-e3f5ae65.js');
8
+ const httpService = require('./http-service-9e8c4dd5.js');
9
+
10
+ const wmNavigatorCss = ":host,wm-navigator{height:100%;min-width:0;position:relative;display:inline-block}:host .wrapper,wm-navigator .wrapper{overflow:auto;font-size:1.125rem;min-width:13.125rem;width:auto;max-height:80vh;text-align:left;position:absolute;z-index:50;top:100%;right:20px;left:auto;background:#fff;letter-spacing:normal;-webkit-box-shadow:0 4px 15px 0 rgba(0, 0, 0, 0.2);-moz-box-shadow:0 4px 15px 0 rgba(0, 0, 0, 0.2);box-shadow:0 4px 15px 0 rgba(0, 0, 0, 0.2);-ms-transition:transform 0.25s ease;-webkit-transition:transform 0.25s ease;-moz-transition:transform 0.25s ease;transition:transform 0.25s ease;-ms-transform-origin:center top;-webkit-transform-origin:center top;-moz-transform-origin:center top;transform-origin:center top;-ms-transform:scale(1, 1);-webkit-transform:scale(1, 1);-moz-transform:scale(1, 1);transform:scale(1, 1)}:host .wrapper .user,wm-navigator .wrapper .user{background:#f4f4f4;padding:0.625rem 1.25rem;font-size:0.875rem}:host .wrapper .user p,wm-navigator .wrapper .user p{margin:0}:host .wrapper .user p:first-child,wm-navigator .wrapper .user p:first-child{font-weight:700;text-transform:capitalize}:host .wrapper h2,wm-navigator .wrapper h2{background:#2e1b46;color:#fff;font-weight:700;margin:0;padding:0.625rem 1.25rem;font-size:0.875rem}:host .wrapper [role=listbox],wm-navigator .wrapper [role=listbox]{list-style:none;margin:0;padding-left:0}:host .wrapper.hide,wm-navigator .wrapper.hide{-ms-transform:scale(1, 0);-webkit-transform:scale(1, 0);-moz-transform:scale(1, 0);transform:scale(1, 0)}:host .wrapper.right,wm-navigator .wrapper.right{right:auto;left:20px}:host img,wm-navigator img{transform:scale(0.8);transform-origin:left center;display:block}:host .logout,wm-navigator .logout{text-align:center;text-transform:capitalize}priv-navigator-item:focus{outline:none}";
11
+
12
+ const Navigator = class {
13
+ constructor(hostRef) {
14
+ index.registerInstance(this, hostRef);
15
+ this.wmNavigatorLogout = index.createEvent(this, "wmNavigatorLogout", 7);
16
+ this.authType = 1; // 1: none or off, 2: username-password or username_password_sso, 3: saml or saml_sso
17
+ // The new way is to retrieve user info from an endpoint
18
+ // dev needs to opt-in by setting loadFromUserinfo to true
19
+ this.loadFromUserinfo = false;
20
+ // comp can check whether the info was successfully retrieved with:
21
+ this.retrievedInfo = !this.loadFromUserinfo; // when in endpoint mode, only render after get request completed
22
+ // used either way to store the products
23
+ this.parsedProducts = [];
24
+ /**
25
+ * Event emitted from child wm-navigator-button updates the state, which is then passed down as a prop by wm-navigator.
26
+ */
27
+ this.isOpen = false;
28
+ this.openRight = false; // whether the menu should open on the right side
29
+ this.isTabbing = false;
30
+ /**
31
+ * Value is set to the index of the current product on load.
32
+ * Keyboard navigation updates the state to keep track of focus in the dropdown.
33
+ * State resets to the index of the current product when the dropdown closes.
34
+ */
35
+ this.itemIndexToFocus = 0;
36
+ }
37
+ async componentWillLoad() {
38
+ if (!this.userName) {
39
+ console.error("wm-navigator: user-name is a required property.");
40
+ }
41
+ await this.parseData();
42
+ this.setFocusIndex();
43
+ }
44
+ // async because we need the http request to complete before proceeding
45
+ async parseData() {
46
+ if (!!this.loadFromUserinfo) {
47
+ await httpService.getRequest("/platform/navigator/userinfo")
48
+ .then((response) => {
49
+ this.email = response.email;
50
+ this.currentProductId = response.current_product_id;
51
+ this.parsedProducts = this.productKeysToCamelCase(response.products);
52
+ this.logoutUrl = this.logoutUrl ? this.logoutUrl : response.logout_url;
53
+ this.connectionName = this.connectionName ? this.connectionName : response.connection_name;
54
+ if (!!this.email && !!this.currentProductId) {
55
+ this.retrievedInfo = true;
56
+ }
57
+ })
58
+ .catch((errStatus) => {
59
+ console.error(errStatus);
60
+ });
61
+ }
62
+ else {
63
+ this.currentProductId = interfaces.getWmMode(this.el);
64
+ if (!!this.products) {
65
+ if (typeof this.products === "string") {
66
+ this.parsedProducts = JSON.parse(this.products);
67
+ }
68
+ else {
69
+ this.parsedProducts = this.products;
70
+ }
71
+ this.parsedProducts = this.productKeysToCamelCase(this.parsedProducts);
72
+ }
73
+ }
74
+ // products is initialized as empty array in case nothing is passed
75
+ this.parsedProducts.sort((a, b) => (a.name < b.name ? -1 : 1));
76
+ }
77
+ productKeysToCamelCase(products) {
78
+ products = products.map((product) => {
79
+ const keys = Object.keys(product);
80
+ let newProduct = {};
81
+ keys.forEach((key) => {
82
+ newProduct[functions.snakeCaseToCamelCase(key)] = product[key];
83
+ });
84
+ return newProduct;
85
+ });
86
+ return products;
87
+ }
88
+ /**
89
+ * Sets index to focus on open to the selected product. This index resets it when the menu closes.
90
+ */
91
+ setFocusIndex() {
92
+ if (this.parsedProducts.length > 1) {
93
+ const currentProduct = this.getProduct(this.currentProductId);
94
+ if (currentProduct) {
95
+ this.itemIndexToFocus = this.parsedProducts.indexOf(currentProduct);
96
+ }
97
+ }
98
+ }
99
+ toggleTabbingOn() {
100
+ this.isTabbing = true;
101
+ }
102
+ toggleTabbingOff() {
103
+ this.isTabbing = false;
104
+ }
105
+ handleKeys(ev) {
106
+ switch (ev.key) {
107
+ case "Escape":
108
+ ev.preventDefault();
109
+ this.closeMenu();
110
+ break;
111
+ case "ArrowDown":
112
+ case "ArrowUp":
113
+ ev.preventDefault();
114
+ if (!this.isOpen) {
115
+ this.itemIndexToFocus = functions.getNewIndexToFocus(this.itemIndexToFocus, ev.key, this.navigatorItems.length);
116
+ this.openMenu();
117
+ }
118
+ break;
119
+ }
120
+ }
121
+ handleKeydown(ev) {
122
+ const key = ev.detail.key;
123
+ const item = ev.detail.navItem;
124
+ switch (key) {
125
+ case "Tab":
126
+ this.closeMenu();
127
+ break;
128
+ case "Enter":
129
+ case " ":
130
+ item.click();
131
+ break;
132
+ case "ArrowDown":
133
+ case "ArrowUp":
134
+ const oldIndex = this.itemIndexToFocus;
135
+ this.itemIndexToFocus = functions.getNewIndexToFocus(this.itemIndexToFocus, key, this.navigatorItems.length);
136
+ this.focusItem();
137
+ this.unfocusItem(oldIndex);
138
+ break;
139
+ }
140
+ }
141
+ handleClick(ev) {
142
+ const isElOrChild = ev.target === this.el || this.el.contains(ev.target);
143
+ if (!isElOrChild && this.isOpen) {
144
+ this.closeMenu();
145
+ }
146
+ }
147
+ handleButtonClick() {
148
+ this.isOpen ? this.closeMenu() : this.openMenu();
149
+ }
150
+ openMenu() {
151
+ if (this.wrapperEl) {
152
+ const wrapperWidth = this.wrapperEl.clientWidth;
153
+ const spaceLeft = this.el.getBoundingClientRect().left;
154
+ const spaceRight = document.documentElement.clientWidth - this.el.getBoundingClientRect().right;
155
+ this.openRight = wrapperWidth > spaceLeft && spaceRight > spaceLeft;
156
+ }
157
+ this.isOpen = true;
158
+ this.focusItem();
159
+ }
160
+ closeMenu() {
161
+ this.isOpen = false;
162
+ this.buttonFocusHandler();
163
+ this.unfocusItem(this.itemIndexToFocus);
164
+ this.setFocusIndex();
165
+ }
166
+ focusItem() {
167
+ const newSelection = this.navigatorItems[this.itemIndexToFocus];
168
+ newSelection.tabIndex = 0;
169
+ newSelection.focused = true;
170
+ window.requestAnimationFrame(() => newSelection.focus());
171
+ }
172
+ unfocusItem(index) {
173
+ const oldSelection = this.navigatorItems[index];
174
+ oldSelection.tabIndex = -1;
175
+ oldSelection.focused = false;
176
+ }
177
+ buttonFocusHandler() {
178
+ const hostButton = this.el.shadowRoot.querySelector("priv-navigator-button");
179
+ const button = hostButton.shadowRoot.querySelector("button");
180
+ window.requestAnimationFrame(() => button.focus());
181
+ }
182
+ /**
183
+ * HELPERS FOR RENDER
184
+ */
185
+ renderUserInfo() {
186
+ return (index.h("div", { class: "user", id: "wm-nav-user", "aria-label": functions.intl.formatMessage({
187
+ id: "navigator.userinfoLabel",
188
+ defaultMessage: "for {name}, email {email}",
189
+ }, { name: this.userName, email: this.email }) }, index.h("p", null, this.userName), index.h("p", null, this.email)));
190
+ }
191
+ setAltText() {
192
+ if (this.parsedProducts.length > 1) {
193
+ return functions.intl.formatMessage({
194
+ id: "navigator.userinfoAndProductNavigator",
195
+ defaultMessage: "User information and product navigator",
196
+ });
197
+ }
198
+ else {
199
+ return functions.intl.formatMessage({
200
+ id: "navigator.userinfo",
201
+ defaultMessage: "User information",
202
+ });
203
+ }
204
+ }
205
+ renderHeading() {
206
+ return (index.h("h2", null, functions.intl.formatMessage({
207
+ id: "navigator.watermarkApps",
208
+ defaultMessage: "Watermark Apps",
209
+ description: "Applications made by Watermark Insights",
210
+ })));
211
+ }
212
+ renderList() {
213
+ return (index.h("ul", { role: "listbox", "aria-label": `${functions.intl.formatMessage({
214
+ id: "navigator.WatermarkAppNavigation",
215
+ defaultMessage: "Watermark App Navigation",
216
+ description: "list of applications by Watermark Insights",
217
+ })}`, "aria-describedby": "wm-nav-user" }, this.parsedProducts.length > 1 && this.renderProductOptions(), this.renderLogoutOption()));
218
+ }
219
+ renderProductOptions() {
220
+ return this.parsedProducts.map((product) => {
221
+ let name, icon, isSelected, clickRedirect;
222
+ name = product.name;
223
+ icon = product.iconUrl;
224
+ clickRedirect = this.setProductOnClick(product.id);
225
+ if (!!name && !!icon) {
226
+ isSelected = this.currentProductId === product.id;
227
+ return (index.h("priv-navigator-item", { selected: isSelected, id: product.id, onClick: clickRedirect, role: "option", "aria-label": name }, index.h("img", { src: icon, alt: name })));
228
+ }
229
+ });
230
+ }
231
+ setProductOnClick(productId) {
232
+ const product = this.getProduct(productId);
233
+ if (this.currentProductId === productId) {
234
+ return () => { };
235
+ }
236
+ else if (product) {
237
+ if (!!this.loadFromUserinfo || this.authType === 2) {
238
+ return () => (window.location.href = product.linkUrl);
239
+ }
240
+ else if (this.authType === 3) {
241
+ // products passed as prop, saml
242
+ const connName = this.connectionName ? `/?connection_name=${this.connectionName}` : "";
243
+ return () => (window.location.href = product.samlLinkUrl + connName);
244
+ }
245
+ }
246
+ }
247
+ renderLogoutOption() {
248
+ return (index.h("priv-navigator-item", { class: "logout", selected: !(this.parsedProducts.length > 1), id: "nav-logout", onClick: this.setLogoutOnclick(), role: "option" }, index.h("span", { class: "logout" }, functions.intl.formatMessage({
249
+ id: "navigator.logout",
250
+ defaultMessage: "Log Out",
251
+ }))));
252
+ }
253
+ setLogoutOnclick() {
254
+ // The logout item will always emit a custom event on click so that the dev can run any business logic specific to the app on logout (e.g., clearing local storage).
255
+ // It will only redirect if the dev has set the logoutUrl. If some sort of custom redirect is needed, the logoutUrl should not be set.
256
+ return () => {
257
+ this.wmNavigatorLogout.emit();
258
+ if (this.logoutUrl) {
259
+ window.location.href = this.logoutUrl;
260
+ }
261
+ };
262
+ }
263
+ get navigatorItems() {
264
+ return Array.from(this.el.shadowRoot.querySelectorAll("priv-navigator-item"));
265
+ }
266
+ getProduct(id) {
267
+ return this.parsedProducts.find((product) => product.id === id);
268
+ }
269
+ render() {
270
+ return this.retrievedInfo ? (index.h(index.Host, { class: this.isTabbing ? "user-is-tabbing" : "" }, index.h("priv-navigator-button", { expanded: this.isOpen, altText: this.setAltText(), isTabbing: this.isTabbing }), index.h("div", { class: `wrapper ${this.isOpen ? "" : "hide"} ${this.openRight ? "right" : ""}`, ref: (el) => (this.wrapperEl = el) }, this.renderUserInfo(), this.parsedProducts.length > 1 && this.renderHeading(), this.renderList()))) : ("");
271
+ }
272
+ get el() { return index.getElement(this); }
273
+ static get watchers() { return {
274
+ "products": ["parseData"]
275
+ }; }
276
+ };
277
+ Navigator.style = wmNavigatorCss;
278
+
279
+ exports.wm_navigator = Navigator;