@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,1003 @@
1
+ import { h, Component, Prop, Element, Event, Listen, State } from "@stencil/core";
2
+ import { forceUpdate } from "@stencil/core";
3
+ import { intl, hasRoomRight, shouldOpenUp } from "../../../global/functions";
4
+ export class PrivDatepicker {
5
+ constructor() {
6
+ this.disabled = false;
7
+ this.isExpanded = false;
8
+ this.view = "day";
9
+ this.date = new Date();
10
+ this.selectedYear = this.date.getUTCFullYear();
11
+ this.selectedMonth = this.date.getUTCMonth() + 1;
12
+ this.selectedDay = this.date.getUTCDate();
13
+ this.monthInFocus = this.selectedMonth;
14
+ this.yearInFocus = this.selectedYear;
15
+ this.dayInFocus = this.selectedDay;
16
+ this.monthNumInFocus = this.selectedMonth;
17
+ this.parentId = "";
18
+ this.popupClicked = true;
19
+ this.buttonClicked = true;
20
+ this.prevClicked = true;
21
+ this.nextClicked = true;
22
+ this.openUp = false;
23
+ this.calendar_months = [
24
+ intl.formatMessage({
25
+ id: "date.january",
26
+ defaultMessage: "January",
27
+ description: "Month of the year",
28
+ }),
29
+ intl.formatMessage({
30
+ id: "date.february",
31
+ defaultMessage: "February",
32
+ description: "Month of the year",
33
+ }),
34
+ intl.formatMessage({
35
+ id: "date.march",
36
+ defaultMessage: "March",
37
+ description: "Month of the year",
38
+ }),
39
+ intl.formatMessage({
40
+ id: "date.april",
41
+ defaultMessage: "April",
42
+ description: "Month of the year",
43
+ }),
44
+ intl.formatMessage({
45
+ id: "date.may",
46
+ defaultMessage: "May",
47
+ description: "Month of the year",
48
+ }),
49
+ intl.formatMessage({
50
+ id: "date.june",
51
+ defaultMessage: "June",
52
+ description: "Month of the year",
53
+ }),
54
+ intl.formatMessage({
55
+ id: "date.july",
56
+ defaultMessage: "July",
57
+ description: "Month of the year",
58
+ }),
59
+ intl.formatMessage({
60
+ id: "date.august",
61
+ defaultMessage: "August",
62
+ description: "Month of the year",
63
+ }),
64
+ intl.formatMessage({
65
+ id: "date.september",
66
+ defaultMessage: "September",
67
+ description: "Month of the year",
68
+ }),
69
+ intl.formatMessage({
70
+ id: "date.october",
71
+ defaultMessage: "October",
72
+ description: "Month of the year",
73
+ }),
74
+ intl.formatMessage({
75
+ id: "date.november",
76
+ defaultMessage: "November",
77
+ description: "Month of the year",
78
+ }),
79
+ intl.formatMessage({
80
+ id: "date.december",
81
+ defaultMessage: "December",
82
+ description: "Month of the year",
83
+ }),
84
+ ];
85
+ this.weekdays = [
86
+ intl.formatMessage({ id: "date.sunday", defaultMessage: "Sunday" }),
87
+ intl.formatMessage({ id: "date.monday", defaultMessage: "Monday" }),
88
+ intl.formatMessage({ id: "date.tuesday", defaultMessage: "Tuesday" }),
89
+ intl.formatMessage({ id: "date.wednesday", defaultMessage: "Wednesday" }),
90
+ intl.formatMessage({ id: "date.thursday", defaultMessage: "Thursday" }),
91
+ intl.formatMessage({ id: "date.friday", defaultMessage: "Friday" }),
92
+ intl.formatMessage({ id: "date.saturday", defaultMessage: "Saturday" }),
93
+ ];
94
+ this.renderCalendarDate = (date, index) => {
95
+ let monthOfDate = this.removeZeroes(String(date[1]));
96
+ let dayOfDate = this.removeZeroes(String(date[2]));
97
+ let isThisMonth = monthOfDate === this.monthInFocus ? "current-month" : "";
98
+ const dateId = date[0] + date[1] + date[2];
99
+ const isToday = this.isDateToday(date);
100
+ return (h("div", { role: "gridcell", id: `cell-${dateId}-${this.parentId}`, class: `date-cell ${isThisMonth}`, "aria-selected": false, "aria-label": `${isToday
101
+ ? `${intl.formatMessage({
102
+ id: "date.today",
103
+ defaultMessage: "today",
104
+ description: "calendar button",
105
+ })}, `
106
+ : ""}${this.weekdays[index]}, ${this.calendar_months[monthOfDate - 1]} ${dayOfDate}, ${date[0]}`, onClick: (ev) => {
107
+ this.handleTriggeredDate(ev.target);
108
+ }, onKeyDown: (ev) => this.trapFocusEnd(ev), "data-month": date[1], "data-year": date[0], onBlur: (ev) => ev.stopPropagation() }, dayOfDate));
109
+ };
110
+ }
111
+ handleKey(ev) {
112
+ this.prevClicked = false;
113
+ this.nextClicked = false;
114
+ switch (ev.keyCode) {
115
+ // Enter
116
+ case 13:
117
+ ev.preventDefault();
118
+ //Clunky exception for blur validation. Remove when blur reworked.
119
+ !ev.target.id.includes("popup-title") && ev.target.click();
120
+ break;
121
+ //escape
122
+ case 27:
123
+ ev.preventDefault();
124
+ if (this.isExpanded) {
125
+ ev.stopPropagation(); // prevents closing of parent modal
126
+ this.togglePopup();
127
+ this.buttonEl.focus();
128
+ }
129
+ break;
130
+ // Page Up
131
+ case 33:
132
+ ev.preventDefault();
133
+ this.backOneMonth();
134
+ break;
135
+ // Page Down
136
+ case 34:
137
+ ev.preventDefault();
138
+ this.forwardOneMonth();
139
+ break;
140
+ // Home
141
+ case 36:
142
+ ev.preventDefault();
143
+ this.unfocusCell();
144
+ this.dayInFocus = 1;
145
+ forceUpdate(this.el);
146
+ break;
147
+ // End
148
+ case 35:
149
+ ev.preventDefault();
150
+ this.unfocusCell();
151
+ this.dayInFocus = this.getMonthDays(this.monthInFocus, this.yearInFocus);
152
+ forceUpdate(this.el);
153
+ break;
154
+ //left
155
+ case 37:
156
+ ev.preventDefault();
157
+ if (this.view === "day") {
158
+ this.unfocusCell();
159
+ if (this.dayInFocus === 1) {
160
+ const newMonth = this.getPreviousMonth(this.monthInFocus, this.yearInFocus);
161
+ this.monthInFocus = newMonth.month;
162
+ this.yearInFocus = newMonth.year;
163
+ this.dayInFocus = this.getMonthDays(this.monthInFocus, this.yearInFocus);
164
+ }
165
+ else {
166
+ this.dayInFocus -= 1;
167
+ }
168
+ }
169
+ else {
170
+ this.unfocusMonth();
171
+ if (this.monthNumInFocus === 0) {
172
+ this.monthNumInFocus = 11;
173
+ }
174
+ else {
175
+ this.monthNumInFocus -= 1;
176
+ }
177
+ }
178
+ break;
179
+ //right
180
+ case 39:
181
+ ev.preventDefault();
182
+ if (this.view === "day") {
183
+ this.unfocusCell();
184
+ if (this.dayInFocus === this.getMonthDays(this.monthInFocus, this.yearInFocus)) {
185
+ const newMonth = this.getNextMonth(this.monthInFocus, this.yearInFocus);
186
+ this.monthInFocus = newMonth.month;
187
+ this.yearInFocus = newMonth.year;
188
+ this.dayInFocus = 1;
189
+ }
190
+ else {
191
+ this.dayInFocus += 1;
192
+ }
193
+ }
194
+ else {
195
+ this.unfocusMonth();
196
+ if (this.monthNumInFocus === 11) {
197
+ this.monthNumInFocus = 0;
198
+ }
199
+ else {
200
+ this.monthNumInFocus += 1;
201
+ }
202
+ }
203
+ break;
204
+ //up
205
+ case 38:
206
+ ev.preventDefault();
207
+ if (this.view === "day") {
208
+ this.unfocusCell();
209
+ if (this.dayInFocus < 8) {
210
+ const newMonth = this.getPreviousMonth(this.monthInFocus, this.yearInFocus);
211
+ this.monthInFocus = newMonth.month;
212
+ this.yearInFocus = newMonth.year;
213
+ const numDaysToSubtract = 7 - this.dayInFocus;
214
+ this.dayInFocus = this.getMonthDays(this.monthInFocus, this.yearInFocus) - numDaysToSubtract;
215
+ }
216
+ else {
217
+ this.dayInFocus -= 7;
218
+ }
219
+ }
220
+ else {
221
+ this.unfocusMonth();
222
+ if (this.monthNumInFocus < 3) {
223
+ this.monthNumInFocus += 9;
224
+ }
225
+ else {
226
+ this.monthNumInFocus -= 3;
227
+ }
228
+ }
229
+ break;
230
+ //down
231
+ case 40:
232
+ ev.preventDefault();
233
+ if (!this.isExpanded) {
234
+ this.openPopup();
235
+ }
236
+ else {
237
+ if (this.view === "day") {
238
+ //If the down arrow is pressed from the month button or the arrow buttons, focus should shift to the current cell in focus
239
+ if (!(document.activeElement.shadowRoot || document).activeElement.classList.contains("date-cell")) {
240
+ this.focusCell();
241
+ break;
242
+ }
243
+ this.unfocusCell();
244
+ const changeoverDate = this.getMonthDays(this.monthInFocus, this.yearInFocus) - 7;
245
+ if (this.dayInFocus > changeoverDate) {
246
+ const newMonth = this.getNextMonth(this.monthInFocus, this.yearInFocus);
247
+ this.monthInFocus = newMonth.month;
248
+ this.yearInFocus = newMonth.year;
249
+ this.dayInFocus = this.dayInFocus - changeoverDate;
250
+ }
251
+ else {
252
+ this.dayInFocus += 7;
253
+ }
254
+ }
255
+ else {
256
+ //If the down arrow is pressed from the arrow buttons or the title box, focus should shift to the current month in focus
257
+ const activeEl = (document.activeElement.shadowRoot || document).activeElement;
258
+ if (activeEl.tagName === "BUTTON" || activeEl.id.includes("popup-title-year")) {
259
+ this.focusMonth();
260
+ break;
261
+ }
262
+ this.unfocusMonth();
263
+ if (this.monthNumInFocus > 8) {
264
+ this.monthNumInFocus -= 9;
265
+ }
266
+ else {
267
+ this.monthNumInFocus += 3;
268
+ }
269
+ }
270
+ }
271
+ break;
272
+ }
273
+ }
274
+ toggleTabbingOn(ev) {
275
+ var keys = ["Tab", 9, "ArrowUp", 38, "ArrowDown", 40, "ArrowLeft", 37, "ArrowRight", 39, "Enter", 13];
276
+ var key = ev.key || ev.keyCode;
277
+ if (keys.includes(key)) {
278
+ this.popupEl && this.popupEl.classList.add("user-is-tabbing");
279
+ }
280
+ }
281
+ //Using mousedown prevents this from running when the keydown listener emits ".click()" for when enter is pressed.
282
+ toggleTabbingOff() {
283
+ this.popupEl && this.popupEl.classList.remove("user-is-tabbing");
284
+ }
285
+ blurHandler() {
286
+ if (!this.popupClicked && !this.buttonClicked && this.isExpanded) {
287
+ this.closePopup();
288
+ }
289
+ this.popupClicked = false;
290
+ this.buttonClicked = false;
291
+ }
292
+ setDateValuesForView() {
293
+ this.selectedYear = this.date.getUTCFullYear();
294
+ this.selectedMonth = this.date.getUTCMonth() + 1;
295
+ this.selectedDay = this.date.getUTCDate();
296
+ this.monthInFocus = this.selectedMonth;
297
+ this.yearInFocus = this.selectedYear;
298
+ this.dayInFocus = this.selectedDay;
299
+ this.monthNumInFocus = this.selectedMonth - 1;
300
+ }
301
+ togglePopup() {
302
+ this.isExpanded ? this.closePopup() : this.openPopup();
303
+ this.buttonClicked = true;
304
+ }
305
+ updateLiveRegion(text) {
306
+ let liveRegion = this.el.querySelector("#live-region");
307
+ liveRegion.innerHTML = text;
308
+ }
309
+ closePopup() {
310
+ this.isExpanded = false;
311
+ this.popupEl.classList.remove("open");
312
+ window.setTimeout(() => {
313
+ //not using display none in order to get measurements of the popup while hidden
314
+ this.popupEl.style.visibility = "hidden";
315
+ }, 250);
316
+ //Reset values so that menu reopens to day view with selected date in focus
317
+ if (this.view === "day") {
318
+ this.unfocusCell();
319
+ }
320
+ this.monthInFocus = this.selectedMonth;
321
+ this.yearInFocus = this.selectedYear;
322
+ this.dayInFocus = this.selectedDay;
323
+ this.changeView("day");
324
+ window.requestAnimationFrame(() => {
325
+ //For instances where the app is checking for errors in the date on blur
326
+ // trigger blur, but keep focus on button
327
+ this.popupClosed.emit();
328
+ this.buttonEl.focus();
329
+ });
330
+ }
331
+ openPopup() {
332
+ this.panelPosition();
333
+ this.setDateValuesForView();
334
+ this.prevClicked = false;
335
+ this.nextClicked = false;
336
+ this.popupEl.style.visibility = "visible";
337
+ window.requestAnimationFrame(() => {
338
+ this.popupEl.classList.add("open");
339
+ });
340
+ this.isExpanded = true;
341
+ this.focusCell();
342
+ }
343
+ panelPosition() {
344
+ // getting a ref to the input el (in datepicker.tsx)
345
+ let host = document.getElementById(this.parentId);
346
+ const labelHeight = host.shadowRoot.querySelector(".label-wrapper").clientHeight;
347
+ this.openUp = shouldOpenUp(host, this.popupEl, labelHeight);
348
+ if (hasRoomRight(host, 336)) {
349
+ this.popupEl.style.left = "0";
350
+ this.popupEl.style.right = "auto";
351
+ }
352
+ else {
353
+ this.popupEl.style.right = "0";
354
+ this.popupEl.style.left = "auto";
355
+ }
356
+ }
357
+ changeView(newView) {
358
+ this.view = newView;
359
+ //Ensure month view always opens to the month last visited in date view
360
+ this.monthNumInFocus = this.monthInFocus - 1;
361
+ }
362
+ getMonthDays(month, year) {
363
+ const months30 = [4, 6, 9, 11];
364
+ const leapYear = year % 4 === 0;
365
+ return month === 2 ? (leapYear ? 29 : 28) : months30.includes(month) ? 30 : 31;
366
+ }
367
+ zeroPad(value, length) {
368
+ if (!String.prototype.padStart) {
369
+ String.prototype.padStart = function padStart(targetLength, padString) {
370
+ targetLength = targetLength - this.length;
371
+ if (targetLength > padString.length) {
372
+ padString += padString.repeat(targetLength / padString.length);
373
+ }
374
+ return padString.slice(0, targetLength) + String(this);
375
+ };
376
+ }
377
+ return `${value.toString()}`.padStart(length, "0");
378
+ }
379
+ // 1 => Sunday, 7 => Saturday
380
+ getMonthFirstDay(month, year) {
381
+ return +new Date(year, month - 1, 1, 12, 0, 0).getDay() + 1;
382
+ }
383
+ getPreviousMonth(month, year) {
384
+ const prevMonth = month > 1 ? month - 1 : 12;
385
+ const prevMonthYear = month > 1 ? year : year - 1;
386
+ return { month: prevMonth, year: prevMonthYear };
387
+ }
388
+ getNextMonth(month, year) {
389
+ const nextMonth = month < 12 ? month + 1 : 1;
390
+ const nextMonthYear = month < 12 ? year : year + 1;
391
+ return { month: nextMonth, year: nextMonthYear };
392
+ }
393
+ getCalendarDates(month, year) {
394
+ // Get number of days in the month and the month's first day
395
+ const monthDays = this.getMonthDays(month, year);
396
+ const monthFirstDay = this.getMonthFirstDay(month, year);
397
+ // Get number of days to be displayed from previous and next months
398
+ // These ensure a total of 42 days (6 weeks) displayed on the calendar
399
+ const daysFromPrevMonth = monthFirstDay - 1;
400
+ let daysFromNextMonth = 42 - (daysFromPrevMonth + monthDays);
401
+ daysFromNextMonth = daysFromNextMonth > 6 ? daysFromNextMonth - 7 : daysFromNextMonth;
402
+ // Get the previous and next months and years
403
+ const { month: prevMonth, year: prevMonthYear } = this.getPreviousMonth(month, year);
404
+ const { month: nextMonth, year: nextMonthYear } = this.getNextMonth(month, year);
405
+ // Get number of days in previous month
406
+ const prevMonthDays = this.getMonthDays(prevMonth, prevMonthYear);
407
+ // Builds dates to be displayed from previous month. The initialized array is "filled" with an arbitrary number because IE and Edge won't map over an array with empty values.
408
+ const prevMonthDates = [...new Array(daysFromPrevMonth).fill("1")].map((_, index) => {
409
+ const day = index + 1 + (prevMonthDays - daysFromPrevMonth);
410
+ return [prevMonthYear.toString(), this.zeroPad(prevMonth, 2), this.zeroPad(day, 2)];
411
+ });
412
+ // Builds dates to be displayed from current month. The initialized array is "filled" with an arbitrary number because IE and Edge won't map over an array with empty values.
413
+ const thisMonthDates = [...new Array(monthDays).fill("1")].map((_, index) => {
414
+ const day = index + 1;
415
+ return [year.toString(), this.zeroPad(month, 2), this.zeroPad(day, 2)];
416
+ });
417
+ // Builds dates to be displayed from next month. The initialized array is "filled" with an arbitrary number because IE and Edge won't map over an array with empty values.
418
+ const nextMonthDates = [...new Array(daysFromNextMonth).fill("1")].map((_, index) => {
419
+ const day = index + 1;
420
+ return [nextMonthYear.toString(), this.zeroPad(nextMonth, 2), this.zeroPad(day, 2)];
421
+ });
422
+ // Combines all dates from previous, current and next months
423
+ return [...prevMonthDates, ...thisMonthDates, ...nextMonthDates];
424
+ }
425
+ forwardOneMonth() {
426
+ this.unfocusCell();
427
+ const newMonth = this.getNextMonth(this.monthInFocus, this.yearInFocus);
428
+ this.monthInFocus = newMonth.month;
429
+ this.yearInFocus = newMonth.year;
430
+ const totalDays = this.getMonthDays(this.monthInFocus, this.yearInFocus);
431
+ if (this.dayInFocus > this.getMonthDays(this.monthInFocus, this.yearInFocus)) {
432
+ this.dayInFocus = totalDays;
433
+ }
434
+ this.updateLiveRegion(`Displaying ${this.calendar_months[this.monthInFocus - 1]}, ${this.yearInFocus}`);
435
+ }
436
+ backOneMonth() {
437
+ this.unfocusCell();
438
+ const newMonth = this.getPreviousMonth(this.monthInFocus, this.yearInFocus);
439
+ this.monthInFocus = newMonth.month;
440
+ this.yearInFocus = newMonth.year;
441
+ const totalDays = this.getMonthDays(this.monthInFocus, this.yearInFocus);
442
+ if (this.dayInFocus > this.getMonthDays(this.monthInFocus, this.yearInFocus)) {
443
+ this.dayInFocus = totalDays;
444
+ }
445
+ this.updateLiveRegion(`Viewing ${this.calendar_months[this.monthInFocus - 1]}, ${this.yearInFocus}`);
446
+ }
447
+ handleTriggeredDate(el) {
448
+ this.cellTriggered.emit(el);
449
+ // change of input value will trigger the function updating selectedDate
450
+ this.closePopup();
451
+ }
452
+ handleSelectedDate() {
453
+ //Remove old selection status
454
+ if (this.selectedDate) {
455
+ this.selectedDate.removeAttribute("aria-selected");
456
+ }
457
+ //Update selected date to new date inputted/selected
458
+ this.selectedDate = this.getCellById(this.selectedYear, this.selectedMonth, this.selectedDay);
459
+ if (this.selectedDate) {
460
+ this.selectedDate.setAttribute("aria-selected", "true");
461
+ }
462
+ }
463
+ getCellById(year, month, day) {
464
+ const id = year + this.zeroPad(month, 2) + this.zeroPad(day, 2);
465
+ return this.el.querySelector(`#cell-${id}-${this.parentId}`);
466
+ }
467
+ unfocusCell() {
468
+ const cellToUnfocus = this.getCellById(this.yearInFocus, this.monthInFocus, this.dayInFocus);
469
+ cellToUnfocus.tabIndex = -1;
470
+ }
471
+ focusCell() {
472
+ //These two lines of code prevent an error from happening when the day in focus does not exist in a new month selected, e.g., May 31 is in focus, then the user selects "November". It will return focus in the date view to the last day of the month so that focus doesn't fly out of the popup.
473
+ const maxDays = this.getMonthDays(this.monthInFocus, this.yearInFocus);
474
+ this.dayInFocus = this.dayInFocus > maxDays ? maxDays : this.dayInFocus;
475
+ const cellToFocus = this.getCellById(this.yearInFocus, this.monthInFocus, this.dayInFocus);
476
+ if (cellToFocus) {
477
+ cellToFocus.tabIndex = 0;
478
+ cellToFocus.focus();
479
+ }
480
+ }
481
+ unfocusMonth() {
482
+ const monthToUnfocus = this.el.querySelector(`#month-${this.monthNumInFocus}-${this.parentId}`);
483
+ monthToUnfocus.tabIndex = -1;
484
+ }
485
+ focusMonth() {
486
+ const monthToFocus = this.el.querySelector(`#month-${this.monthNumInFocus}-${this.parentId}`);
487
+ monthToFocus.tabIndex = 0;
488
+ monthToFocus.focus();
489
+ }
490
+ removeZeroes(date) {
491
+ return +date < 10 ? +date.slice(1) : +date;
492
+ }
493
+ isDateToday(date) {
494
+ const today = new Date();
495
+ const todayDateArray = [
496
+ today.getFullYear().toString(),
497
+ (today.getMonth() + 1).toString(),
498
+ today.getDate().toString(),
499
+ ];
500
+ //Compare today's date to date and return true if they match
501
+ return todayDateArray.reduce((result, val, index) => result && this.removeZeroes(date[index]).toString() === val, true);
502
+ }
503
+ renderMonths(month, index) {
504
+ return (h("div", { id: `month-${index}-${this.parentId}`, class: `month ${this.selectedMonth - 1 === index ? "selected" : ""}`, role: "gridcell", tabindex: index + 1 === this.monthInFocus ? 0 : -1, onKeyDown: (ev) => this.trapFocusEnd(ev), onBlur: (ev) => ev.stopPropagation(), onClick: () => {
505
+ this.monthInFocus = index + 1;
506
+ this.changeView("day");
507
+ } }, month));
508
+ }
509
+ trapFocusLeft(ev) {
510
+ if (ev.shiftKey && ev.keyCode === 9) {
511
+ ev.preventDefault();
512
+ this.focusCellInView();
513
+ }
514
+ }
515
+ trapFocusEnd(ev) {
516
+ if (!ev.shiftKey && ev.keyCode === 9) {
517
+ ev.preventDefault();
518
+ this.prevButton.focus();
519
+ }
520
+ }
521
+ trapFocusRight(ev) {
522
+ if (!ev.shiftKey && ev.keyCode === 9) {
523
+ ev.preventDefault();
524
+ this.focusCellInView();
525
+ }
526
+ }
527
+ focusCellInView() {
528
+ if (this.view === "day") {
529
+ this.focusCell();
530
+ }
531
+ else {
532
+ this.focusMonth();
533
+ }
534
+ }
535
+ componentDidUpdate() {
536
+ this.handleSelectedDate();
537
+ if (this.isExpanded) {
538
+ this.prevClicked
539
+ ? this.prevButton.focus()
540
+ : this.nextClicked
541
+ ? this.nextButton.focus()
542
+ : this.view === "day"
543
+ ? this.focusCell()
544
+ : this.focusMonth();
545
+ }
546
+ }
547
+ componentDidLoad() {
548
+ this.handleSelectedDate();
549
+ this.setDateValuesForView();
550
+ }
551
+ toggleBusyAttribute(state) {
552
+ this.el.querySelector("#wm-container").setAttribute("aria-busy", state);
553
+ }
554
+ render() {
555
+ const dates = this.getCalendarDates(this.monthInFocus, this.yearInFocus);
556
+ return (h("div", { class: "container", id: "wm-container" },
557
+ h("button", { disabled: this.disabled, onClick: this.togglePopup.bind(this), "aria-describedby": `date-input-${this.parentId}`, ref: (el) => (this.buttonEl = el), "aria-expanded": `${this.isExpanded}`, class: "toggle", id: `toggle-${this.parentId}` },
558
+ h("span", { class: "calendar", title: intl.formatMessage({
559
+ id: "date.calendarView",
560
+ defaultMessage: "Calendar View",
561
+ description: "Calendar button",
562
+ }) })),
563
+ h("div", { class: `popup ${this.view}-view ${this.openUp ? "expand-upwards" : ""}`, id: `popup-${this.parentId}`, ref: (el) => (this.popupEl = el), onClick: () => (this.popupClicked = true), role: "application", "aria-describedby": "application" }, this.view === "day" ? (h("div", { class: "day-view" },
564
+ h("div", { class: "calendar-header" },
565
+ h("button", { onClick: () => {
566
+ this.prevClicked = true;
567
+ this.popupClicked = true;
568
+ this.backOneMonth();
569
+ }, onKeyDown: (ev) => this.trapFocusLeft(ev), ref: (el) => (this.prevButton = el), class: "arw-btn", "aria-label": intl.formatMessage({
570
+ id: "date.selectPreviousMonth",
571
+ defaultMessage: "Select previous month",
572
+ description: "Calendar button",
573
+ }) },
574
+ h("span", { class: "mdi" }, "\uF141")),
575
+ h("div", { id: `popup-title-month-${this.parentId}`, class: "title-box", tabindex: 0, role: "button", onKeyDown: (ev) => {
576
+ if (ev.keyCode === 13 || ev.keyCode === 32) {
577
+ ev.preventDefault();
578
+ this.changeView("month");
579
+ }
580
+ }, onClick: this.changeView.bind(this, "month"), "aria-label": `${intl.formatMessage({
581
+ id: "date.currentMonth",
582
+ defaultMessage: "current month",
583
+ description: "Calendar button",
584
+ })}: ${this.calendar_months[this.monthInFocus - 1]}
585
+ ${this.yearInFocus}.`, "aria-describedby": "month-title" },
586
+ h("span", { class: "title", "aria-hidden": "true" },
587
+ this.calendar_months[this.monthInFocus - 1],
588
+ " ",
589
+ this.yearInFocus)),
590
+ h("button", { onClick: () => {
591
+ this.nextClicked = true;
592
+ this.popupClicked = true;
593
+ this.forwardOneMonth();
594
+ }, onKeyDown: (ev) => this.trapFocusRight(ev), "aria-label": intl.formatMessage({
595
+ id: "date.selectNextMonth",
596
+ defaultMessage: "Select next month",
597
+ description: "Calendar button",
598
+ }), ref: (el) => (this.nextButton = el), class: "arw-btn" },
599
+ h("span", { class: "mdi" }, "\uF142"))),
600
+ h("div", { "aria-labelledby": `popup-title-month-${this.parentId}`, role: "grid", class: "date-grid" },
601
+ h("div", { role: "rowgroup", class: "date-header" },
602
+ h("div", { role: "row", class: "header-row" },
603
+ h("div", { role: "columnheader", class: "header-cell" },
604
+ h("span", null, intl.formatMessage({
605
+ id: "date.su",
606
+ defaultMessage: "Su",
607
+ description: "Abbreviated day of the week",
608
+ }))),
609
+ h("div", { role: "columnheader", class: "header-cell" },
610
+ h("span", null, intl.formatMessage({
611
+ id: "date.mo",
612
+ defaultMessage: "Mo",
613
+ description: "Abbreviated day of the week",
614
+ }))),
615
+ h("div", { role: "columnheader", class: "header-cell" },
616
+ h("span", null, intl.formatMessage({
617
+ id: "date.tu",
618
+ defaultMessage: "Tu",
619
+ description: "Abbreviated day of the week",
620
+ }))),
621
+ h("div", { role: "columnheader", class: "header-cell" },
622
+ h("span", null, intl.formatMessage({
623
+ id: "date.we",
624
+ defaultMessage: "We",
625
+ description: "Abbreviated day of the week",
626
+ }))),
627
+ h("div", { role: "columnheader", class: "header-cell" },
628
+ h("span", null, intl.formatMessage({
629
+ id: "date.th",
630
+ defaultMessage: "Th",
631
+ description: "Abbreviated day of the week",
632
+ }))),
633
+ h("div", { role: "columnheader", class: "header-cell" },
634
+ h("span", null, intl.formatMessage({
635
+ id: "date.fr",
636
+ defaultMessage: "Fr",
637
+ description: "Abbreviated day of the week",
638
+ }))),
639
+ h("div", { role: "columnheader", class: "header-cell" },
640
+ h("span", null, intl.formatMessage({
641
+ id: "date.sa",
642
+ defaultMessage: "Sa",
643
+ description: "Abbreviated day of the week",
644
+ }))))),
645
+ h("div", { role: "rowgroup" },
646
+ h("div", { role: "row", class: "date-row" }, dates.slice(0, 7).map((date, i) => this.renderCalendarDate(date, i))),
647
+ h("div", { role: "row" }, dates.slice(7, 14).map((date, i) => this.renderCalendarDate(date, i))),
648
+ h("div", { role: "row" }, dates.slice(14, 21).map((date, i) => this.renderCalendarDate(date, i))),
649
+ h("div", { role: "row" }, dates.slice(21, 28).map((date, i) => this.renderCalendarDate(date, i))),
650
+ h("div", { role: "row" }, dates.slice(28, 35).map((date, i) => this.renderCalendarDate(date, i))),
651
+ dates.length > 35 ? (h("div", { role: "row" }, dates.slice(35).map((date, i) => this.renderCalendarDate(date, i)))) : (""))))) : (h("div", { class: "month-view" },
652
+ h("div", { class: "calendar-header" },
653
+ h("button", { onClick: () => {
654
+ this.prevClicked = true;
655
+ this.popupClicked = true;
656
+ this.yearInFocus -= 1;
657
+ this.updateLiveRegion(`${this.yearInFocus} selected.`);
658
+ }, onKeyDown: (ev) => this.trapFocusLeft(ev), "aria-label": intl.formatMessage({
659
+ id: "date.selectPreviousYear",
660
+ defaultMessage: "Select previous year",
661
+ description: "Calendar button",
662
+ }), ref: (el) => (this.prevButton = el), class: "arw-btn" },
663
+ h("span", { class: "mdi" }, "\uF141")),
664
+ h("div", { id: `popup-title-year-${this.parentId}`, tabindex: 0, class: "title-box year", role: "button", onClick: this.changeView.bind(this, "day"), onKeyDown: (ev) => {
665
+ if (ev.keyCode === 13 || ev.keyCode === 32) {
666
+ ev.preventDefault();
667
+ this.changeView("day");
668
+ }
669
+ }, "aria-labelledby": "year-title" },
670
+ h("span", { class: "title" }, this.yearInFocus)),
671
+ h("button", { onClick: () => {
672
+ this.nextClicked = true;
673
+ this.popupClicked = true;
674
+ this.yearInFocus += 1;
675
+ this.updateLiveRegion(`${this.yearInFocus} selected.`);
676
+ }, "aria-label": intl.formatMessage({
677
+ id: "date.selectNextYear",
678
+ defaultMessage: "Select next year",
679
+ description: "Calendar button",
680
+ }), onKeyDown: (ev) => this.trapFocusRight(ev), ref: (el) => (this.nextButton = el), class: "arw-btn" },
681
+ h("span", { class: "mdi" }, "\uF142"))),
682
+ h("div", { "aria-labelledby": `popup-title-year-${this.parentId}`, role: "grid", class: "months" },
683
+ h("div", { role: "row", class: "month-row" }, this.calendar_months
684
+ .slice(0, 3)
685
+ .map((month, index) => this.renderMonths(month, index))),
686
+ h("div", { role: "row", class: "month-row" }, this.calendar_months
687
+ .slice(3, 6)
688
+ .map((month, index) => this.renderMonths(month, index + 3))),
689
+ h("div", { role: "row", class: "month-row" }, this.calendar_months
690
+ .slice(6, 9)
691
+ .map((month, index) => this.renderMonths(month, index + 6))),
692
+ h("div", { role: "row", class: "month-row" }, this.calendar_months
693
+ .slice(9)
694
+ .map((month, index) => this.renderMonths(month, index + 9))))))),
695
+ this.isExpanded && h("div", { id: "live-region", "aria-live": "polite", "aria-relevant": "text", class: "sr-only" }),
696
+ h("div", { id: "month-title", class: "sr-only" }, intl.formatMessage({
697
+ id: "date.selectMonth",
698
+ defaultMessage: "Activate to select a month.",
699
+ description: "Calendar button",
700
+ })),
701
+ h("div", { id: "year-title", class: "sr-only" }, intl.formatMessage({
702
+ id: "date.selectYear",
703
+ defaultMessage: "Activate to select a year.",
704
+ description: "Calendar button",
705
+ })),
706
+ h("div", { id: "application", class: "sr-only" }, intl.formatMessage({
707
+ id: "date.instructions",
708
+ defaultMessage: "Use arrows to select a date in the table. Tab left or right to buttons for selecting previous month, next month, or the month selection table.",
709
+ }))));
710
+ }
711
+ static get is() { return "priv-datepicker"; }
712
+ static get originalStyleUrls() { return {
713
+ "$": ["priv-datepicker.scss"]
714
+ }; }
715
+ static get styleUrls() { return {
716
+ "$": ["priv-datepicker.css"]
717
+ }; }
718
+ static get properties() { return {
719
+ "disabled": {
720
+ "type": "boolean",
721
+ "mutable": false,
722
+ "complexType": {
723
+ "original": "boolean",
724
+ "resolved": "boolean",
725
+ "references": {}
726
+ },
727
+ "required": false,
728
+ "optional": false,
729
+ "docs": {
730
+ "tags": [],
731
+ "text": ""
732
+ },
733
+ "attribute": "disabled",
734
+ "reflect": false,
735
+ "defaultValue": "false"
736
+ },
737
+ "isExpanded": {
738
+ "type": "boolean",
739
+ "mutable": true,
740
+ "complexType": {
741
+ "original": "boolean",
742
+ "resolved": "boolean",
743
+ "references": {}
744
+ },
745
+ "required": false,
746
+ "optional": false,
747
+ "docs": {
748
+ "tags": [],
749
+ "text": ""
750
+ },
751
+ "attribute": "is-expanded",
752
+ "reflect": true,
753
+ "defaultValue": "false"
754
+ },
755
+ "view": {
756
+ "type": "string",
757
+ "mutable": true,
758
+ "complexType": {
759
+ "original": "string",
760
+ "resolved": "string",
761
+ "references": {}
762
+ },
763
+ "required": false,
764
+ "optional": false,
765
+ "docs": {
766
+ "tags": [],
767
+ "text": ""
768
+ },
769
+ "attribute": "view",
770
+ "reflect": true,
771
+ "defaultValue": "\"day\""
772
+ },
773
+ "date": {
774
+ "type": "unknown",
775
+ "mutable": true,
776
+ "complexType": {
777
+ "original": "Date",
778
+ "resolved": "Date",
779
+ "references": {
780
+ "Date": {
781
+ "location": "global"
782
+ }
783
+ }
784
+ },
785
+ "required": false,
786
+ "optional": false,
787
+ "docs": {
788
+ "tags": [],
789
+ "text": ""
790
+ },
791
+ "defaultValue": "new Date()"
792
+ },
793
+ "selectedYear": {
794
+ "type": "number",
795
+ "mutable": true,
796
+ "complexType": {
797
+ "original": "number",
798
+ "resolved": "number",
799
+ "references": {}
800
+ },
801
+ "required": false,
802
+ "optional": false,
803
+ "docs": {
804
+ "tags": [],
805
+ "text": ""
806
+ },
807
+ "attribute": "selected-year",
808
+ "reflect": false,
809
+ "defaultValue": "this.date.getUTCFullYear()"
810
+ },
811
+ "selectedMonth": {
812
+ "type": "number",
813
+ "mutable": true,
814
+ "complexType": {
815
+ "original": "number",
816
+ "resolved": "number",
817
+ "references": {}
818
+ },
819
+ "required": false,
820
+ "optional": false,
821
+ "docs": {
822
+ "tags": [],
823
+ "text": ""
824
+ },
825
+ "attribute": "selected-month",
826
+ "reflect": false,
827
+ "defaultValue": "this.date.getUTCMonth() + 1"
828
+ },
829
+ "selectedDay": {
830
+ "type": "number",
831
+ "mutable": true,
832
+ "complexType": {
833
+ "original": "number",
834
+ "resolved": "number",
835
+ "references": {}
836
+ },
837
+ "required": false,
838
+ "optional": false,
839
+ "docs": {
840
+ "tags": [],
841
+ "text": ""
842
+ },
843
+ "attribute": "selected-day",
844
+ "reflect": false,
845
+ "defaultValue": "this.date.getUTCDate()"
846
+ },
847
+ "monthInFocus": {
848
+ "type": "number",
849
+ "mutable": true,
850
+ "complexType": {
851
+ "original": "number",
852
+ "resolved": "number",
853
+ "references": {}
854
+ },
855
+ "required": false,
856
+ "optional": false,
857
+ "docs": {
858
+ "tags": [],
859
+ "text": ""
860
+ },
861
+ "attribute": "month-in-focus",
862
+ "reflect": false,
863
+ "defaultValue": "this.selectedMonth"
864
+ },
865
+ "yearInFocus": {
866
+ "type": "number",
867
+ "mutable": true,
868
+ "complexType": {
869
+ "original": "number",
870
+ "resolved": "number",
871
+ "references": {}
872
+ },
873
+ "required": false,
874
+ "optional": false,
875
+ "docs": {
876
+ "tags": [],
877
+ "text": ""
878
+ },
879
+ "attribute": "year-in-focus",
880
+ "reflect": false,
881
+ "defaultValue": "this.selectedYear"
882
+ },
883
+ "dayInFocus": {
884
+ "type": "number",
885
+ "mutable": true,
886
+ "complexType": {
887
+ "original": "number",
888
+ "resolved": "number",
889
+ "references": {}
890
+ },
891
+ "required": false,
892
+ "optional": false,
893
+ "docs": {
894
+ "tags": [],
895
+ "text": ""
896
+ },
897
+ "attribute": "day-in-focus",
898
+ "reflect": false,
899
+ "defaultValue": "this.selectedDay"
900
+ },
901
+ "parentId": {
902
+ "type": "string",
903
+ "mutable": true,
904
+ "complexType": {
905
+ "original": "string",
906
+ "resolved": "string",
907
+ "references": {}
908
+ },
909
+ "required": false,
910
+ "optional": false,
911
+ "docs": {
912
+ "tags": [],
913
+ "text": ""
914
+ },
915
+ "attribute": "parent-id",
916
+ "reflect": true,
917
+ "defaultValue": "\"\""
918
+ }
919
+ }; }
920
+ static get states() { return {
921
+ "monthNumInFocus": {}
922
+ }; }
923
+ static get events() { return [{
924
+ "method": "cellTriggered",
925
+ "name": "cellTriggered",
926
+ "bubbles": true,
927
+ "cancelable": true,
928
+ "composed": true,
929
+ "docs": {
930
+ "tags": [],
931
+ "text": ""
932
+ },
933
+ "complexType": {
934
+ "original": "HTMLElement",
935
+ "resolved": "HTMLElement",
936
+ "references": {
937
+ "HTMLElement": {
938
+ "location": "global"
939
+ }
940
+ }
941
+ }
942
+ }, {
943
+ "method": "toggleButtonClicked",
944
+ "name": "toggleButtonClicked",
945
+ "bubbles": true,
946
+ "cancelable": true,
947
+ "composed": true,
948
+ "docs": {
949
+ "tags": [],
950
+ "text": ""
951
+ },
952
+ "complexType": {
953
+ "original": "HTMLButtonElement",
954
+ "resolved": "HTMLButtonElement",
955
+ "references": {
956
+ "HTMLButtonElement": {
957
+ "location": "global"
958
+ }
959
+ }
960
+ }
961
+ }, {
962
+ "method": "popupClosed",
963
+ "name": "popupClosed",
964
+ "bubbles": true,
965
+ "cancelable": true,
966
+ "composed": true,
967
+ "docs": {
968
+ "tags": [],
969
+ "text": ""
970
+ },
971
+ "complexType": {
972
+ "original": "any",
973
+ "resolved": "any",
974
+ "references": {}
975
+ }
976
+ }]; }
977
+ static get elementRef() { return "el"; }
978
+ static get listeners() { return [{
979
+ "name": "keydown",
980
+ "method": "handleKey",
981
+ "target": undefined,
982
+ "capture": false,
983
+ "passive": false
984
+ }, {
985
+ "name": "keydown",
986
+ "method": "toggleTabbingOn",
987
+ "target": undefined,
988
+ "capture": false,
989
+ "passive": false
990
+ }, {
991
+ "name": "mousedown",
992
+ "method": "toggleTabbingOff",
993
+ "target": "window",
994
+ "capture": false,
995
+ "passive": true
996
+ }, {
997
+ "name": "click",
998
+ "method": "blurHandler",
999
+ "target": "document",
1000
+ "capture": false,
1001
+ "passive": false
1002
+ }]; }
1003
+ }