@dso-toolkit/core 62.2.1 → 62.3.0-ghi-2431.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 (177) hide show
  1. package/dist/cjs/create-identifier-5900c27b.js +19 -0
  2. package/dist/cjs/create-identifier-5900c27b.js.map +1 -0
  3. package/dist/cjs/dso-accordion-section.cjs.entry.js +15 -0
  4. package/dist/cjs/dso-accordion-section.cjs.entry.js.map +1 -1
  5. package/dist/cjs/{dso-alert_5.cjs.entry.js → dso-alert_7.cjs.entry.js} +201 -5
  6. package/dist/cjs/dso-alert_7.cjs.entry.js.map +1 -0
  7. package/dist/cjs/dso-annotation-output_3.cjs.entry.js +3 -1
  8. package/dist/cjs/dso-annotation-output_3.cjs.entry.js.map +1 -1
  9. package/dist/cjs/dso-date-picker-legacy.cjs.entry.js +704 -0
  10. package/dist/cjs/dso-date-picker-legacy.cjs.entry.js.map +1 -0
  11. package/dist/cjs/dso-expandable.cjs.entry.js +1 -1
  12. package/dist/cjs/dso-expandable.cjs.entry.js.map +1 -1
  13. package/dist/cjs/dso-highlight-box.cjs.entry.js +1 -1
  14. package/dist/cjs/dso-highlight-box.cjs.entry.js.map +1 -1
  15. package/dist/cjs/dso-info_2.cjs.entry.js +4 -17
  16. package/dist/cjs/dso-info_2.cjs.entry.js.map +1 -1
  17. package/dist/cjs/dso-list-button.cjs.entry.js +1 -1
  18. package/dist/cjs/dso-list-button.cjs.entry.js.map +1 -1
  19. package/dist/cjs/dso-toolkit.cjs.js +1 -1
  20. package/dist/cjs/loader.cjs.js +1 -1
  21. package/dist/collection/collection-manifest.json +1 -0
  22. package/dist/collection/components/accordion/components/accordion-section.js +15 -0
  23. package/dist/collection/components/accordion/components/accordion-section.js.map +1 -1
  24. package/dist/collection/components/annotation-button/annotation-button.js +1 -1
  25. package/dist/collection/components/annotation-output/annotation-output.js +1 -1
  26. package/dist/collection/components/date-picker-legacy/date-localization.js +30 -0
  27. package/dist/collection/components/date-picker-legacy/date-localization.js.map +1 -0
  28. package/dist/collection/components/date-picker-legacy/date-picker-day.js +20 -0
  29. package/dist/collection/components/date-picker-legacy/date-picker-day.js.map +1 -0
  30. package/dist/collection/components/date-picker-legacy/date-picker-legacy.css +487 -0
  31. package/dist/collection/components/date-picker-legacy/date-picker-legacy.interfaces.js +2 -0
  32. package/dist/collection/components/date-picker-legacy/date-picker-legacy.interfaces.js.map +1 -0
  33. package/dist/collection/components/date-picker-legacy/date-picker-legacy.js +849 -0
  34. package/dist/collection/components/date-picker-legacy/date-picker-legacy.js.map +1 -0
  35. package/dist/collection/components/date-picker-legacy/date-picker-month.js +26 -0
  36. package/dist/collection/components/date-picker-legacy/date-picker-month.js.map +1 -0
  37. package/dist/collection/components/date-picker-legacy/date-utils.js +155 -0
  38. package/dist/collection/components/date-picker-legacy/date-utils.js.map +1 -0
  39. package/dist/collection/components/date-picker-legacy/utils/month-range.js +28 -0
  40. package/dist/collection/components/date-picker-legacy/utils/month-range.js.map +1 -0
  41. package/dist/collection/components/date-picker-legacy/utils/range.js +8 -0
  42. package/dist/collection/components/date-picker-legacy/utils/range.js.map +1 -0
  43. package/dist/collection/components/document-component/document-component.js +44 -1
  44. package/dist/collection/components/document-component/document-component.js.map +1 -1
  45. package/dist/collection/components/document-component/document-component.models.js.map +1 -1
  46. package/dist/collection/components/expandable/expandable.css +0 -12
  47. package/dist/collection/components/expandable/expandable.js +2 -2
  48. package/dist/collection/components/highlight-box/highlight-box.css +2 -0
  49. package/dist/collection/components/list-button/list-button.css +0 -13
  50. package/dist/collection/components/ozon-content/nodes/text.node.js +11 -2
  51. package/dist/collection/components/ozon-content/nodes/text.node.js.map +1 -1
  52. package/dist/collection/components/ozon-content/ozon-content-context.interface.js.map +1 -1
  53. package/dist/collection/components/ozon-content/ozon-content-mapper.js +2 -0
  54. package/dist/collection/components/ozon-content/ozon-content-mapper.js.map +1 -1
  55. package/dist/collection/components/ozon-content/ozon-content-node-context.interface.js.map +1 -1
  56. package/dist/collection/components/ozon-content/ozon-content.css +9 -0
  57. package/dist/collection/components/ozon-content/ozon-content.interfaces.js.map +1 -1
  58. package/dist/collection/components/ozon-content/ozon-content.js +53 -1
  59. package/dist/collection/components/ozon-content/ozon-content.js.map +1 -1
  60. package/dist/collection/components/selectable/selectable.css +1 -24
  61. package/dist/collection/components/selectable/selectable.js +6 -1
  62. package/dist/collection/components/selectable/selectable.js.map +1 -1
  63. package/dist/components/create-identifier.js +17 -0
  64. package/dist/components/create-identifier.js.map +1 -0
  65. package/dist/components/document-component.js +29 -14
  66. package/dist/components/document-component.js.map +1 -1
  67. package/dist/components/dso-accordion-section.js +15 -0
  68. package/dist/components/dso-accordion-section.js.map +1 -1
  69. package/dist/components/dso-date-picker-legacy.d.ts +11 -0
  70. package/dist/components/dso-date-picker-legacy.js +743 -0
  71. package/dist/components/dso-date-picker-legacy.js.map +1 -0
  72. package/dist/components/dso-highlight-box.js +1 -1
  73. package/dist/components/dso-highlight-box.js.map +1 -1
  74. package/dist/components/dso-image-overlay.js +1 -122
  75. package/dist/components/dso-image-overlay.js.map +1 -1
  76. package/dist/components/dso-list-button.js +1 -1
  77. package/dist/components/dso-list-button.js.map +1 -1
  78. package/dist/components/dso-table.js +1 -109
  79. package/dist/components/dso-table.js.map +1 -1
  80. package/dist/components/dsot-document-component-demo.js +34 -22
  81. package/dist/components/dsot-document-component-demo.js.map +1 -1
  82. package/dist/components/expandable.js +1 -1
  83. package/dist/components/expandable.js.map +1 -1
  84. package/dist/{esm/dso-image-overlay.entry.js → components/image-overlay.js} +35 -12
  85. package/dist/components/image-overlay.js.map +1 -0
  86. package/dist/components/index.d.ts +2 -0
  87. package/dist/components/index.js +1 -0
  88. package/dist/components/index.js.map +1 -1
  89. package/dist/components/ozon-content.js +48 -5
  90. package/dist/components/ozon-content.js.map +1 -1
  91. package/dist/components/selectable.js +3 -16
  92. package/dist/components/selectable.js.map +1 -1
  93. package/dist/{esm/dso-table.entry.js → components/table.js} +38 -13
  94. package/dist/{cjs/dso-table.cjs.entry.js.map → components/table.js.map} +1 -1
  95. package/dist/dso-toolkit/dso-toolkit.esm.js +1 -1
  96. package/dist/dso-toolkit/dso-toolkit.esm.js.map +1 -1
  97. package/dist/dso-toolkit/{p-4239e3d6.entry.js → p-0c156f79.entry.js} +2 -2
  98. package/dist/dso-toolkit/{p-4239e3d6.entry.js.map → p-0c156f79.entry.js.map} +1 -1
  99. package/dist/dso-toolkit/p-0fbddb1a.entry.js +2 -0
  100. package/dist/dso-toolkit/p-0fbddb1a.entry.js.map +1 -0
  101. package/dist/dso-toolkit/p-1db9f4a4.entry.js +2 -0
  102. package/dist/dso-toolkit/p-1db9f4a4.entry.js.map +1 -0
  103. package/dist/dso-toolkit/{p-000f7731.entry.js → p-23ec080b.entry.js} +2 -2
  104. package/dist/dso-toolkit/p-23ec080b.entry.js.map +1 -0
  105. package/dist/dso-toolkit/p-4423c2b5.entry.js +2 -0
  106. package/dist/dso-toolkit/p-4423c2b5.entry.js.map +1 -0
  107. package/dist/dso-toolkit/p-5a47a86e.entry.js +2 -0
  108. package/dist/dso-toolkit/{p-caf4d880.entry.js.map → p-5a47a86e.entry.js.map} +1 -1
  109. package/dist/dso-toolkit/{p-47e77e24.entry.js → p-76c0fc1b.entry.js} +2 -2
  110. package/dist/dso-toolkit/p-76c0fc1b.entry.js.map +1 -0
  111. package/dist/dso-toolkit/p-a377846a.entry.js +2 -0
  112. package/dist/dso-toolkit/p-a377846a.entry.js.map +1 -0
  113. package/dist/dso-toolkit/p-c19cfe3f.js +2 -0
  114. package/dist/dso-toolkit/p-c19cfe3f.js.map +1 -0
  115. package/dist/esm/create-identifier-479a4699.js +17 -0
  116. package/dist/esm/create-identifier-479a4699.js.map +1 -0
  117. package/dist/esm/dso-accordion-section.entry.js +15 -0
  118. package/dist/esm/dso-accordion-section.entry.js.map +1 -1
  119. package/dist/esm/{dso-alert_5.entry.js → dso-alert_7.entry.js} +201 -7
  120. package/dist/esm/dso-alert_7.entry.js.map +1 -0
  121. package/dist/esm/dso-annotation-output_3.entry.js +3 -1
  122. package/dist/esm/dso-annotation-output_3.entry.js.map +1 -1
  123. package/dist/esm/dso-date-picker-legacy.entry.js +700 -0
  124. package/dist/esm/dso-date-picker-legacy.entry.js.map +1 -0
  125. package/dist/esm/dso-expandable.entry.js +1 -1
  126. package/dist/esm/dso-expandable.entry.js.map +1 -1
  127. package/dist/esm/dso-highlight-box.entry.js +1 -1
  128. package/dist/esm/dso-highlight-box.entry.js.map +1 -1
  129. package/dist/esm/dso-info_2.entry.js +3 -16
  130. package/dist/esm/dso-info_2.entry.js.map +1 -1
  131. package/dist/esm/dso-list-button.entry.js +1 -1
  132. package/dist/esm/dso-list-button.entry.js.map +1 -1
  133. package/dist/esm/dso-toolkit.js +1 -1
  134. package/dist/esm/loader.js +1 -1
  135. package/dist/types/components/date-picker-legacy/date-localization.d.ts +19 -0
  136. package/dist/types/components/date-picker-legacy/date-picker-day.d.ts +11 -0
  137. package/dist/types/components/date-picker-legacy/date-picker-legacy.d.ts +172 -0
  138. package/dist/types/components/date-picker-legacy/date-picker-legacy.interfaces.d.ts +14 -0
  139. package/dist/types/components/date-picker-legacy/date-picker-month.d.ts +20 -0
  140. package/dist/types/components/date-picker-legacy/date-utils.d.ts +46 -0
  141. package/dist/types/components/date-picker-legacy/utils/month-range.d.ts +2 -0
  142. package/dist/types/components/date-picker-legacy/utils/range.d.ts +1 -0
  143. package/dist/types/components/document-component/document-component.d.ts +9 -1
  144. package/dist/types/components/document-component/document-component.models.d.ts +8 -1
  145. package/dist/types/components/ozon-content/nodes/text.node.d.ts +2 -1
  146. package/dist/types/components/ozon-content/ozon-content-context.interface.d.ts +3 -1
  147. package/dist/types/components/ozon-content/ozon-content-node-context.interface.d.ts +3 -1
  148. package/dist/types/components/ozon-content/ozon-content.d.ts +10 -1
  149. package/dist/types/components/ozon-content/ozon-content.interfaces.d.ts +10 -0
  150. package/dist/types/components/selectable/selectable.d.ts +5 -0
  151. package/dist/types/components.d.ts +175 -4
  152. package/package.json +2 -2
  153. package/dist/cjs/dso-alert_5.cjs.entry.js.map +0 -1
  154. package/dist/cjs/dso-image-overlay.cjs.entry.js +0 -107
  155. package/dist/cjs/dso-image-overlay.cjs.entry.js.map +0 -1
  156. package/dist/cjs/dso-table.cjs.entry.js +0 -92
  157. package/dist/dso-toolkit/p-000f7731.entry.js.map +0 -1
  158. package/dist/dso-toolkit/p-18152675.entry.js +0 -2
  159. package/dist/dso-toolkit/p-18152675.entry.js.map +0 -1
  160. package/dist/dso-toolkit/p-2719a53a.entry.js +0 -2
  161. package/dist/dso-toolkit/p-2719a53a.entry.js.map +0 -1
  162. package/dist/dso-toolkit/p-47e77e24.entry.js.map +0 -1
  163. package/dist/dso-toolkit/p-a91673a9.entry.js +0 -2
  164. package/dist/dso-toolkit/p-a91673a9.entry.js.map +0 -1
  165. package/dist/dso-toolkit/p-ab1f0511.entry.js +0 -2
  166. package/dist/dso-toolkit/p-ab1f0511.entry.js.map +0 -1
  167. package/dist/dso-toolkit/p-caf4d880.entry.js +0 -2
  168. package/dist/dso-toolkit/p-cbeb00cc.entry.js +0 -2
  169. package/dist/dso-toolkit/p-cbeb00cc.entry.js.map +0 -1
  170. package/dist/esm/dso-alert_5.entry.js.map +0 -1
  171. package/dist/esm/dso-image-overlay.entry.js.map +0 -1
  172. package/dist/esm/dso-table.entry.js.map +0 -1
  173. package/dist/esm/polyfills/core-js.js +0 -11
  174. package/dist/esm/polyfills/dom.js +0 -79
  175. package/dist/esm/polyfills/es5-html-element.js +0 -1
  176. package/dist/esm/polyfills/index.js +0 -34
  177. package/dist/esm/polyfills/system.js +0 -6
@@ -0,0 +1,743 @@
1
+ import { h, proxyCustomElement, HTMLElement, createEvent, Host } from '@stencil/core/internal/client';
2
+ import { c as createIdentifier } from './create-identifier.js';
3
+ import { d as defineCustomElement$2 } from './icon.js';
4
+
5
+ // eslint-disable-next-line @stencil-community/ban-exported-const-enums -- This enum is not part of public API
6
+ var DaysOfWeek;
7
+ (function (DaysOfWeek) {
8
+ DaysOfWeek[DaysOfWeek["Sunday"] = 0] = "Sunday";
9
+ DaysOfWeek[DaysOfWeek["Monday"] = 1] = "Monday";
10
+ DaysOfWeek[DaysOfWeek["Tuesday"] = 2] = "Tuesday";
11
+ DaysOfWeek[DaysOfWeek["Wednesday"] = 3] = "Wednesday";
12
+ DaysOfWeek[DaysOfWeek["Thursday"] = 4] = "Thursday";
13
+ DaysOfWeek[DaysOfWeek["Friday"] = 5] = "Friday";
14
+ DaysOfWeek[DaysOfWeek["Saturday"] = 6] = "Saturday";
15
+ })(DaysOfWeek || (DaysOfWeek = {}));
16
+ function createDate(year, month, day) {
17
+ const dayInt = parseInt(day, 10);
18
+ const monthInt = parseInt(month, 10);
19
+ const yearInt = parseInt(year, 10);
20
+ const isValid = Number.isInteger(yearInt) && // all parts should be integers
21
+ Number.isInteger(monthInt) &&
22
+ Number.isInteger(dayInt) &&
23
+ monthInt > 0 && // month must be 1-12
24
+ monthInt <= 12 &&
25
+ dayInt > 0 && // day must be 1-31
26
+ dayInt <= 31 &&
27
+ yearInt > 0;
28
+ if (isValid) {
29
+ return new Date(yearInt, monthInt - 1, dayInt);
30
+ }
31
+ }
32
+ /**
33
+ * @param value date string in Dutch format D-M-YYYY
34
+ */
35
+ function parseDutchDate(value) {
36
+ if (!value) {
37
+ return;
38
+ }
39
+ const matches = value.split("-");
40
+ if (matches.length === 3 &&
41
+ typeof matches[0] === "string" &&
42
+ typeof matches[1] === "string" &&
43
+ typeof matches[2] === "string" &&
44
+ matches[2].length === 4) {
45
+ return createDate(matches[2], matches[1], matches[0]);
46
+ }
47
+ }
48
+ /**
49
+ * print date in format DD-MM-YYYY
50
+ * @param date
51
+ */
52
+ function printDutchDate(date) {
53
+ if (!date) {
54
+ return "";
55
+ }
56
+ const d = date.getDate().toString(10).padStart(2, "0");
57
+ const m = (date.getMonth() + 1).toString(10).padStart(2, "0");
58
+ const y = date.getFullYear().toString(10).padStart(2, "0");
59
+ return `${d}-${m}-${y}`;
60
+ }
61
+ /**
62
+ * Compare if two dates are equal in terms of day, month, and year
63
+ */
64
+ function isEqual(a, b) {
65
+ if (!a || !b) {
66
+ return false;
67
+ }
68
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
69
+ }
70
+ function addDays(date, days) {
71
+ const d = new Date(date);
72
+ d.setDate(d.getDate() + days);
73
+ return d;
74
+ }
75
+ function startOfWeek(date, firstDayOfWeek = DaysOfWeek.Monday) {
76
+ const d = new Date(date);
77
+ const day = d.getDay();
78
+ const diff = (day < firstDayOfWeek ? 7 : 0) + day - firstDayOfWeek;
79
+ d.setDate(d.getDate() - diff);
80
+ return d;
81
+ }
82
+ function endOfWeek(date, firstDayOfWeek = DaysOfWeek.Monday) {
83
+ const d = new Date(date);
84
+ const day = d.getDay();
85
+ const diff = (day < firstDayOfWeek ? -7 : 0) + 6 - (day - firstDayOfWeek);
86
+ d.setDate(d.getDate() + diff);
87
+ return d;
88
+ }
89
+ function startOfMonth(date) {
90
+ return new Date(date.getFullYear(), date.getMonth(), 1);
91
+ }
92
+ function endOfMonth(date) {
93
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
94
+ }
95
+ function setMonth(date, month) {
96
+ const d = new Date(date);
97
+ d.setMonth(month);
98
+ return d;
99
+ }
100
+ function setYear(date, year) {
101
+ const d = new Date(date);
102
+ d.setFullYear(year);
103
+ return d;
104
+ }
105
+ /**
106
+ * Check if date is within a min and max
107
+ */
108
+ function inRange(date, min, max) {
109
+ return clamp(date, min, max) === date;
110
+ }
111
+ /**
112
+ * Ensures date is within range, returns min or max if out of bounds
113
+ */
114
+ function clamp(date, min, max) {
115
+ const time = date.getTime();
116
+ if (min && min instanceof Date && time < min.getTime()) {
117
+ return min;
118
+ }
119
+ if (max && max instanceof Date && time > max.getTime()) {
120
+ return max;
121
+ }
122
+ return date;
123
+ }
124
+ /**
125
+ * given start and end date, return an (inclusive) array of all dates in between
126
+ * @param start
127
+ * @param end
128
+ */
129
+ function getDaysInRange(start, end) {
130
+ const days = [];
131
+ let current = start;
132
+ while (!isEqual(current, end)) {
133
+ days.push(current);
134
+ current = addDays(current, 1);
135
+ }
136
+ days.push(current);
137
+ return days;
138
+ }
139
+ /**
140
+ * given a date, return an array of dates from a calendar perspective
141
+ * @param date
142
+ * @param firstDayOfWeek
143
+ */
144
+ function getViewOfMonth(date, firstDayOfWeek = DaysOfWeek.Monday) {
145
+ const start = startOfWeek(startOfMonth(date), firstDayOfWeek);
146
+ const end = endOfWeek(endOfMonth(date), firstDayOfWeek);
147
+ return getDaysInRange(start, end);
148
+ }
149
+
150
+ const DatePickerLegacyDay = ({ focusedDay, today, day, onDaySelect, onKeyboardNavigation, focusedDayRef, inRange, }) => {
151
+ const isToday = isEqual(day, today);
152
+ const isFocused = isEqual(day, focusedDay);
153
+ const notCurrentMonth = day.getMonth() !== focusedDay.getMonth();
154
+ const isOutsideRange = !inRange;
155
+ function handleClick(e) {
156
+ onDaySelect(e, day);
157
+ }
158
+ return (h("button", { class: {
159
+ "dso-date__day": true,
160
+ "is-today": isToday,
161
+ }, tabIndex: isFocused ? 0 : -1, onClick: handleClick, onKeyDown: onKeyboardNavigation, disabled: isOutsideRange || notCurrentMonth, type: "button", ref: (el) => {
162
+ if (isFocused && el && focusedDayRef) {
163
+ focusedDayRef(el);
164
+ }
165
+ } },
166
+ h("span", { "aria-hidden": "true" }, day.getDate()),
167
+ h("span", { class: "dso-date__vhidden" }, printDutchDate(day))));
168
+ };
169
+
170
+ function chunk(array, chunkSize) {
171
+ const result = [];
172
+ for (let i = 0; i < array.length; i += chunkSize) {
173
+ result.push(array.slice(i, i + chunkSize));
174
+ }
175
+ return result;
176
+ }
177
+ function mapWithOffset(array, startingOffset, mapFn) {
178
+ return array.map((_, i) => {
179
+ const adjustedIndex = (i + startingOffset) % array.length;
180
+ const item = array[adjustedIndex];
181
+ if (!item) {
182
+ throw new Error("No item found");
183
+ }
184
+ return mapFn(item);
185
+ });
186
+ }
187
+ const DatePickerLegacyMonth = ({ selectedDate, focusedDate, labelledById, localization, firstDayOfWeek, min, max, onDateSelect, onKeyboardNavigation, focusedDayRef, onMouseDown, onFocusIn, }) => {
188
+ const today = new Date();
189
+ const days = getViewOfMonth(focusedDate, firstDayOfWeek);
190
+ return (h("table", { class: "dso-date__table", role: "grid", "aria-labelledby": labelledById, onFocusin: onFocusIn, onMouseDown: onMouseDown },
191
+ h("thead", null,
192
+ h("tr", null, mapWithOffset(localization.dayNames, firstDayOfWeek, (dayName) => (h("th", { class: "dso-date__table-header", scope: "col" },
193
+ h("span", { "aria-hidden": "true" }, dayName.substr(0, 2)),
194
+ h("span", { class: "dso-date__vhidden" }, dayName)))))),
195
+ h("tbody", null, chunk(days, 7).map((week) => (h("tr", { class: "dso-date__row" }, week.map((day) => (h("td", { class: "dso-date__cell", role: "gridcell", "aria-selected": isEqual(day, selectedDate) ? "true" : undefined, "aria-current": isEqual(day, today) ? "date" : undefined },
196
+ h(DatePickerLegacyDay, { day: day, today: today, focusedDay: focusedDate, inRange: inRange(day, min, max), onDaySelect: onDateSelect, onKeyboardNavigation: onKeyboardNavigation, focusedDayRef: focusedDayRef }))))))))));
197
+ };
198
+
199
+ const localization = {
200
+ buttonLabel: "Kies datum",
201
+ placeholder: "dd-mm-jjjj",
202
+ selectedDateMessage: "Geselecteerde datum is",
203
+ prevMonthLabel: "Vorige maand",
204
+ nextMonthLabel: "Volgende maand",
205
+ monthSelectLabel: "Maand",
206
+ yearSelectLabel: "Jaar",
207
+ closeLabel: "Sluiten",
208
+ keyboardInstruction: "Gebruik de pijltjestoetsen om een dag te kiezen",
209
+ calendarHeading: "Kies een datum",
210
+ dayNames: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"],
211
+ monthNames: [
212
+ "Januari",
213
+ "Februari",
214
+ "Maart",
215
+ "April",
216
+ "Mei",
217
+ "Juni",
218
+ "Juli",
219
+ "Augustus",
220
+ "September",
221
+ "Oktober",
222
+ "November",
223
+ "December",
224
+ ],
225
+ monthNamesShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
226
+ };
227
+
228
+ function monthRange(localization, selectedYear, minDate, maxDate) {
229
+ if (minDate && maxDate) {
230
+ const { minYear, minMonth } = { minYear: minDate.getFullYear(), minMonth: minDate.getMonth() };
231
+ const { maxYear, maxMonth } = { maxYear: maxDate.getFullYear(), maxMonth: maxDate.getMonth() };
232
+ return localization.monthNames.filter((_month, index) => {
233
+ if (minYear === selectedYear && maxYear === selectedYear) {
234
+ return index >= minMonth && index >= maxMonth;
235
+ }
236
+ if (minYear === selectedYear) {
237
+ return index >= minMonth;
238
+ }
239
+ if (maxYear === selectedYear) {
240
+ return index <= maxMonth;
241
+ }
242
+ return true;
243
+ });
244
+ }
245
+ if (minDate) {
246
+ const { minYear, minMonth } = { minYear: minDate.getFullYear(), minMonth: minDate.getMonth() };
247
+ return localization.monthNames.filter((_month, index) => minYear === selectedYear && index >= minMonth);
248
+ }
249
+ if (maxDate) {
250
+ const { maxYear, maxMonth } = { maxYear: maxDate.getFullYear(), maxMonth: maxDate.getMonth() };
251
+ return localization.monthNames.filter((_month, index) => maxYear === selectedYear && index <= maxMonth);
252
+ }
253
+ return localization.monthNames;
254
+ }
255
+
256
+ function range(from, to) {
257
+ const result = [];
258
+ for (let i = from; i <= to; i++) {
259
+ result.push(i);
260
+ }
261
+ return result;
262
+ }
263
+
264
+ const datePickerLegacyCss = ".sc-dso-date-picker-legacy-h{display:block}[invalid].sc-dso-date-picker-legacy-h:not([invalid=false]) .dso-date__input.sc-dso-date-picker-legacy{border-color:#ce3f51}.dso-date.sc-dso-date-picker-legacy *.sc-dso-date-picker-legacy,.dso-date.sc-dso-date-picker-legacy *.sc-dso-date-picker-legacy::before,.dso-date.sc-dso-date-picker-legacy *.sc-dso-date-picker-legacy::after{box-sizing:border-box}.dso-date.sc-dso-date-picker-legacy{box-sizing:border-box;color:#191919;display:block;font-family:\"Asap\", sans-serif;margin:0;position:relative;text-align:left;width:100%}.dso-date.sc-dso-date-picker-legacy:not(.dso-visible) .dso-date__dialog.sc-dso-date-picker-legacy{display:none}.dso-date__input.sc-dso-date-picker-legacy{display:block;width:100%;height:40px;padding:6px 14px;font-size:1rem;line-height:1.5;color:#191919;background-color:#fff;background-image:none;border:1px solid #275937;border-radius:4px;transition:border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s}.dso-date__input.sc-dso-date-picker-legacy::-moz-placeholder{color:#666;opacity:1}.dso-date__input.sc-dso-date-picker-legacy:-ms-input-placeholder{color:#666}.dso-date__input.sc-dso-date-picker-legacy::-webkit-input-placeholder{color:#666}.dso-date__input.sc-dso-date-picker-legacy::-ms-expand{background-color:transparent;border:0}.dso-date__input.sc-dso-date-picker-legacy:focus{border-color:#275937;outline:0;box-shadow:inset 0 0 0 1px #275937}.dso-date__input[disabled].sc-dso-date-picker-legacy,.dso-date__input[readonly].sc-dso-date-picker-legacy,fieldset[disabled].sc-dso-date-picker-legacy .dso-date__input.sc-dso-date-picker-legacy{background-color:#fff;opacity:1}.dso-date__input[disabled].sc-dso-date-picker-legacy,fieldset[disabled].sc-dso-date-picker-legacy .dso-date__input.sc-dso-date-picker-legacy{cursor:default}.dso-date__input[disabled].sc-dso-date-picker-legacy{border-color:#e5e5e5;color:#999}.dso-date__input[readonly].sc-dso-date-picker-legacy{border-width:1px}.dso-date__input[type=text].sc-dso-date-picker-legacy{line-height:40px}.dso-date__input[size].sc-dso-date-picker-legacy{width:auto}.dso-date__toggle.sc-dso-date-picker-legacy{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;align-items:center;appearance:none;background:transparent;border:0;border-radius:0;border-bottom-right-radius:4px;border-top-right-radius:4px;color:#39870c;cursor:pointer;display:flex;height:38px;justify-content:center;padding:0;position:absolute;right:0;transform:translateY(-50%);top:50%;user-select:none;width:38px;z-index:101}.dso-date__toggle.sc-dso-date-picker-legacy:disabled{color:#afcf9d;cursor:default}.dso-date__dialog.sc-dso-date-picker-legacy{border-width:1px;display:flex;right:0;min-width:320px;opacity:0;position:absolute;top:100%;transform:scale(0.96) translateZ(0) translateY(-20px);transform-origin:top right;transition:transform 300ms ease, opacity 300ms ease, visibility 300ms ease;visibility:hidden;will-change:transform, opacity, visibility;z-index:210}@media (max-width: 35.9375em){.dso-date__dialog.sc-dso-date-picker-legacy{background:rgba(25, 25, 25, 0.5);bottom:0;position:fixed;left:0;right:0;top:0;transform:translateZ(0);transform-origin:bottom center}}.dso-date__dialog.is-left.sc-dso-date-picker-legacy{left:-11px;right:auto;width:auto}.dso-date__dialog.is-active.sc-dso-date-picker-legacy{opacity:1;transform:scale(1.0001) translateZ(0) translateY(0);visibility:visible}.dso-date__dialog-content.sc-dso-date-picker-legacy{background:#fff;border:1px solid rgba(0, 0, 0, 0.1);border-radius:4px;box-shadow:0 8px 10px 1px rgba(0, 0, 0, 0.4);margin-left:auto;margin-right:-1px;margin-top:8px;max-width:310px;min-width:290px;padding:16px;position:relative;transform:none;width:100%;z-index:210}@media (max-width: 35.9375em){.dso-date__dialog-content.sc-dso-date-picker-legacy{border:0;border-radius:0;border-top-left-radius:4px;border-top-right-radius:4px;bottom:0;left:0;margin:0;max-width:none;min-height:26em;opacity:0;padding:0 8% 20px;position:absolute;transform:translateZ(0) translateY(100%);transition:transform 400ms ease, opacity 400ms ease, visibility 400ms ease;visibility:hidden;will-change:transform, opacity, visibility}.is-active.sc-dso-date-picker-legacy .dso-date__dialog-content.sc-dso-date-picker-legacy{opacity:1;transform:translateZ(0) translateY(0);visibility:visible}}.dso-date__table.sc-dso-date-picker-legacy{border-collapse:collapse;border-spacing:0;color:#191919;font-size:1rem;font-weight:400;line-height:1.25;min-width:280px;table-layout:fixed;text-align:center;width:100%}.dso-date__table-header.sc-dso-date-picker-legacy{font-size:0.875em;font-weight:600;height:36px;line-height:36px;text-align:center;text-decoration:none;text-transform:uppercase}.dso-date__cell.sc-dso-date-picker-legacy{height:40px;padding:1px;text-align:center;width:40px}.dso-date__day.sc-dso-date-picker-legacy{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:transparent;border:0;border-radius:50%;box-shadow:0 0 0 1px transparent;color:#191919;cursor:pointer;display:inline-block;font-family:\"Asap\", sans-serif;font-variant-numeric:tabular-nums;font-weight:400;height:38px;line-height:0;padding:0;position:relative;text-align:center;vertical-align:middle;width:38px;z-index:100}.dso-date__day.is-today.sc-dso-date-picker-legacy{background:transparent;height:36px;box-shadow:0 0 0 1px #39870c;width:36px}.dso-date__day.sc-dso-date-picker-legacy:hover,.dso-date__day.sc-dso-date-picker-legacy:active{background:#39870c;color:#fff}.dso-date__day.sc-dso-date-picker-legacy:focus{background:transparent;box-shadow:0 0 0 2px #275937;color:#191919;height:34px;outline:0;width:34px}[aria-selected=true].sc-dso-date-picker-legacy .dso-date__day.sc-dso-date-picker-legacy{background:#39870c;color:#fff}[aria-selected=true].sc-dso-date-picker-legacy .dso-date__day.sc-dso-date-picker-legacy:focus{background:transparent}[aria-selected=true].sc-dso-date-picker-legacy .dso-date__day.sc-dso-date-picker-legacy:focus span[aria-hidden=true].sc-dso-date-picker-legacy{background:#39870c;border:1px solid #fff;line-height:32px}.dso-date__day.sc-dso-date-picker-legacy:disabled{background:#fff;color:#ccc;cursor:default}.dso-date__day.sc-dso-date-picker-legacy span[aria-hidden=true].sc-dso-date-picker-legacy{border-radius:50%;display:inline-block;height:34px;line-height:34px;width:34px}.dso-date__header.sc-dso-date-picker-legacy{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px;width:100%}.dso-date__header.sc-dso-date-picker-legacy span.sc-dso-date-picker-legacy{font-size:0.875rem}.dso-date__nav.sc-dso-date-picker-legacy{white-space:nowrap}.dso-date__prev.sc-dso-date-picker-legacy,.dso-date__next.sc-dso-date-picker-legacy{-moz-appearance:none;-webkit-appearance:none;align-items:center;appearance:none;background:transparent;border:1px solid #39870c;border-radius:4px;box-sizing:border-box;color:#39870c;cursor:pointer;display:inline-flex;font-size:1em;height:32px;justify-content:center;margin-left:8px;padding:0;width:32px}@media (max-width: 35.9375em){.dso-date__prev.sc-dso-date-picker-legacy,.dso-date__next.sc-dso-date-picker-legacy{height:40px;width:40px}}.dso-date__prev.sc-dso-date-picker-legacy:hover,.dso-date__prev.sc-dso-date-picker-legacy:active,.dso-date__next.sc-dso-date-picker-legacy:hover,.dso-date__next.sc-dso-date-picker-legacy:active{background-color:#39870c;color:#fff}.dso-date__prev.sc-dso-date-picker-legacy:focus,.dso-date__next.sc-dso-date-picker-legacy:focus{background:transparent;color:#39870c}.dso-date__prev.sc-dso-date-picker-legacy:disabled,.dso-date__prev.sc-dso-date-picker-legacy:disabled:hover,.dso-date__next.sc-dso-date-picker-legacy:disabled,.dso-date__next.sc-dso-date-picker-legacy:disabled:hover{background-color:#fff;border-color:#afcf9d;color:#afcf9d;opacity:1}.dso-date__prev.sc-dso-date-picker-legacy svg.sc-dso-date-picker-legacy,.dso-date__next.sc-dso-date-picker-legacy svg.sc-dso-date-picker-legacy{margin:0 auto}.dso-date__select.sc-dso-date-picker-legacy{display:inline-flex;height:28px;line-height:28px;position:relative}.dso-date__select.sc-dso-date-picker-legacy span.sc-dso-date-picker-legacy{margin-right:4px}.dso-date__select.sc-dso-date-picker-legacy select.sc-dso-date-picker-legacy{color:#275937;cursor:pointer;font-size:1rem;height:100%;left:0;opacity:0;position:absolute;top:0;width:100%;z-index:101}.dso-date__select.sc-dso-date-picker-legacy select.sc-dso-date-picker-legacy:focus+.dso-date__select-label.sc-dso-date-picker-legacy{box-shadow:0 0 0 2px #275937}.dso-date__select.sc-dso-date-picker-legacy select.sc-dso-date-picker-legacy:disabled{color:#afcf9d}.dso-date__select-label.sc-dso-date-picker-legacy{align-items:center;border-radius:4px;color:#39870c;display:flex;padding:0 4px 0 8px;pointer-events:none;position:relative;width:100%;z-index:100}.dso-date__select-label.sc-dso-date-picker-legacy span.sc-dso-date-picker-legacy{font-size:1.25rem;font-weight:600;line-height:1.25}.dso-date__select-label.sc-dso-date-picker-legacy svg.sc-dso-date-picker-legacy{width:16px;height:16px}.dso-date__mobile.sc-dso-date-picker-legacy{align-items:center;border-bottom:1px solid rgba(0, 0, 0, 0.12);display:flex;font-size:1em;justify-content:space-between;margin-bottom:20px;margin-left:-10%;overflow:hidden;padding:12px 20px;position:relative;text-overflow:ellipsis;white-space:nowrap;width:120%}@media (min-width: 36em){.dso-date__mobile.sc-dso-date-picker-legacy{border:0;margin:0;overflow:visible;padding:0;position:absolute;right:-16px;top:-16px;width:auto}}.dso-date__mobile-heading.sc-dso-date-picker-legacy{display:inline-block;font-weight:600;max-width:84%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 36em){.dso-date__mobile-heading.sc-dso-date-picker-legacy{display:none}}.dso-date__close.sc-dso-date-picker-legacy{-webkit-appearance:none;align-items:center;appearance:none;background-color:#fff;border:0;border-radius:50%;color:#39870c;cursor:pointer;display:flex;font-size:1em;height:32px;justify-content:center;margin-right:-4px;padding:0;width:32px}@media (min-width: 36em){.dso-date__close.sc-dso-date-picker-legacy{margin-right:0;opacity:0}}.dso-date__close.sc-dso-date-picker-legacy:focus{box-shadow:0 0 0 2px #275937;outline:none}@media (min-width: 36em){.dso-date__close.sc-dso-date-picker-legacy:focus{opacity:1}}.dso-date__vhidden.sc-dso-date-picker-legacy{border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;padding:0;position:absolute;top:0;width:1px}";
265
+
266
+ const keyCode = {
267
+ TAB: 9,
268
+ ESC: 27,
269
+ SPACE: 32,
270
+ PAGE_UP: 33,
271
+ PAGE_DOWN: 34,
272
+ END: 35,
273
+ HOME: 36,
274
+ LEFT: 37,
275
+ UP: 38,
276
+ RIGHT: 39,
277
+ DOWN: 40,
278
+ };
279
+ const DISALLOWED_CHARACTERS = /[^0-9-]+/g;
280
+ const TRANSITION_MS = 300;
281
+ function cleanValue(input, regex) {
282
+ const value = input.value;
283
+ const cursor = input.selectionStart;
284
+ if (!cursor) {
285
+ return value;
286
+ }
287
+ const beforeCursor = value.slice(0, cursor);
288
+ const afterCursor = value.slice(cursor, value.length);
289
+ const filteredBeforeCursor = beforeCursor.replace(regex, "");
290
+ const filterAfterCursor = afterCursor.replace(regex, "");
291
+ const newValue = filteredBeforeCursor + filterAfterCursor;
292
+ const newCursor = filteredBeforeCursor.length;
293
+ input.value = newValue;
294
+ input.selectionStart = input.selectionEnd = newCursor;
295
+ return newValue;
296
+ }
297
+ const DsoDatePickerLegacy$1 = /*@__PURE__*/ proxyCustomElement(class DsoDatePickerLegacy extends HTMLElement {
298
+ constructor() {
299
+ super();
300
+ this.__registerHost();
301
+ this.dsoDateChange = createEvent(this, "dsoDateChange", 7);
302
+ this.dsoBlur = createEvent(this, "dsoBlur", 7);
303
+ this.dsoKeyUp = createEvent(this, "dsoKeyUp", 7);
304
+ this.dsoKeyDown = createEvent(this, "dsoKeyDown", 7);
305
+ this.dsoFocus = createEvent(this, "dsoFocus", 7);
306
+ /**
307
+ * Own Properties
308
+ */
309
+ this.monthSelectId = createIdentifier("DsoDateMonth");
310
+ this.yearSelectId = createIdentifier("DsoDateYear");
311
+ this.dialogLabelId = createIdentifier("DsoDateLabel");
312
+ this.localization = localization;
313
+ this.firstDayOfWeek = DaysOfWeek.Monday;
314
+ /**
315
+ * Local methods.
316
+ */
317
+ this.enableActiveFocus = () => {
318
+ this.activeFocus = true;
319
+ };
320
+ this.disableActiveFocus = () => {
321
+ this.activeFocus = false;
322
+ };
323
+ this.toggleOpen = (e) => {
324
+ e.preventDefault();
325
+ this.open ? this.hide(false) : this.show();
326
+ };
327
+ this.handleEscKey = (event) => {
328
+ if (event.keyCode === keyCode.ESC) {
329
+ this.hide();
330
+ }
331
+ };
332
+ this.handleBlur = (event) => {
333
+ event.stopPropagation();
334
+ this.dsoBlur.emit({
335
+ component: "dso-date-picker-legacy",
336
+ });
337
+ };
338
+ this.handleKeyUp = (event) => {
339
+ event.stopPropagation();
340
+ this.dsoKeyUp.emit({
341
+ component: "dso-date-picker-legacy",
342
+ originalEvent: event,
343
+ });
344
+ };
345
+ this.handleKeyDown = (event) => {
346
+ event.stopPropagation();
347
+ this.dsoKeyDown.emit({
348
+ component: "dso-date-picker-legacy",
349
+ originalEvent: event,
350
+ });
351
+ };
352
+ this.handleFocus = (event) => {
353
+ event.stopPropagation();
354
+ this.dsoFocus.emit({
355
+ component: "dso-date-picker-legacy",
356
+ });
357
+ };
358
+ this.handleTouchStart = (event) => {
359
+ const touch = event.changedTouches[0];
360
+ if (!touch) {
361
+ throw new Error("No touch found");
362
+ }
363
+ this.initialTouchX = touch.pageX;
364
+ this.initialTouchY = touch.pageY;
365
+ };
366
+ this.handleTouchMove = (event) => {
367
+ event.preventDefault();
368
+ };
369
+ this.handleTouchEnd = (event) => {
370
+ var _a, _b;
371
+ const touch = event.changedTouches[0];
372
+ if (!touch) {
373
+ throw new Error("No touch found");
374
+ }
375
+ const distX = touch.pageX - ((_a = this.initialTouchX) !== null && _a !== void 0 ? _a : 0); // get horizontal dist traveled
376
+ const distY = touch.pageY - ((_b = this.initialTouchY) !== null && _b !== void 0 ? _b : 0); // get vertical dist traveled
377
+ const threshold = 70;
378
+ const isHorizontalSwipe = Math.abs(distX) >= threshold && Math.abs(distY) <= threshold;
379
+ const isDownwardsSwipe = Math.abs(distY) >= threshold && Math.abs(distX) <= threshold && distY > 0;
380
+ if (isHorizontalSwipe) {
381
+ this.addMonths(distX < 0 ? 1 : -1);
382
+ }
383
+ else if (isDownwardsSwipe) {
384
+ this.hide(false);
385
+ event.preventDefault();
386
+ }
387
+ this.initialTouchY = undefined;
388
+ this.initialTouchX = undefined;
389
+ };
390
+ this.handleNextMonthClick = (event) => {
391
+ event.preventDefault();
392
+ this.addMonths(1);
393
+ };
394
+ this.handlePreviousMonthClick = (event) => {
395
+ event.preventDefault();
396
+ this.addMonths(-1);
397
+ };
398
+ this.handleFirstFocusableKeydown = (event) => {
399
+ var _a;
400
+ // this ensures focus is trapped inside the dialog
401
+ if (event.keyCode === keyCode.TAB && event.shiftKey) {
402
+ (_a = this.focusedDayNode) === null || _a === void 0 ? void 0 : _a.focus();
403
+ event.preventDefault();
404
+ }
405
+ };
406
+ this.handleKeyboardNavigation = (event) => {
407
+ var _a;
408
+ // handle tab separately, since it needs to be treated
409
+ // differently to other keyboard interactions
410
+ if (event.keyCode === keyCode.TAB && !event.shiftKey) {
411
+ event.preventDefault();
412
+ (_a = this.firstFocusableElement) === null || _a === void 0 ? void 0 : _a.focus();
413
+ return;
414
+ }
415
+ let handled = true;
416
+ switch (event.keyCode) {
417
+ case keyCode.RIGHT:
418
+ this.addDays(1);
419
+ break;
420
+ case keyCode.LEFT:
421
+ this.addDays(-1);
422
+ break;
423
+ case keyCode.DOWN:
424
+ this.addDays(7);
425
+ break;
426
+ case keyCode.UP:
427
+ this.addDays(-7);
428
+ break;
429
+ case keyCode.PAGE_UP:
430
+ if (event.shiftKey) {
431
+ this.addYears(-1);
432
+ }
433
+ else {
434
+ this.addMonths(-1);
435
+ }
436
+ break;
437
+ case keyCode.PAGE_DOWN:
438
+ if (event.shiftKey) {
439
+ this.addYears(1);
440
+ }
441
+ else {
442
+ this.addMonths(1);
443
+ }
444
+ break;
445
+ case keyCode.HOME:
446
+ this.startOfWeek();
447
+ break;
448
+ case keyCode.END:
449
+ this.endOfWeek();
450
+ break;
451
+ default:
452
+ handled = false;
453
+ }
454
+ if (handled) {
455
+ event.preventDefault();
456
+ this.enableActiveFocus();
457
+ }
458
+ };
459
+ this.handleDaySelect = (_event, day) => {
460
+ if (!inRange(day, parseDutchDate(this.min), parseDutchDate(this.max))) {
461
+ return;
462
+ }
463
+ if (day.getMonth() === this.focusedDay.getMonth()) {
464
+ this.setValue(day);
465
+ this.hide();
466
+ }
467
+ else {
468
+ this.setFocusedDay(day);
469
+ }
470
+ };
471
+ this.handleMonthSelect = (e) => {
472
+ // Todo
473
+ if (e.target instanceof HTMLSelectElement) {
474
+ this.setMonth(parseInt(e.target.value, 10));
475
+ }
476
+ };
477
+ this.handleYearSelect = (e) => {
478
+ if (e.target instanceof HTMLSelectElement) {
479
+ this.setYear(parseInt(e.target.value, 10));
480
+ }
481
+ };
482
+ this.handleInputChange = (e) => {
483
+ const target = e.target;
484
+ const cleanedValue = cleanValue(target, DISALLOWED_CHARACTERS);
485
+ this.setValue(cleanedValue);
486
+ };
487
+ this.prepareEvent = (value) => {
488
+ const event = {
489
+ component: "dso-date-picker-legacy",
490
+ value: "",
491
+ valueAsDate: undefined,
492
+ };
493
+ if (value instanceof Date) {
494
+ event.valueAsDate = value;
495
+ }
496
+ else {
497
+ event.value = value;
498
+ event.valueAsDate = parseDutchDate(value);
499
+ }
500
+ if (event.valueAsDate) {
501
+ event.value = printDutchDate(event.valueAsDate);
502
+ }
503
+ if (!event.valueAsDate && this.required) {
504
+ event.error = "required";
505
+ }
506
+ if (event.value && !event.valueAsDate) {
507
+ event.error = "invalid";
508
+ }
509
+ if (event.valueAsDate && (this.min || this.max)) {
510
+ const min = parseDutchDate(this.min);
511
+ const max = parseDutchDate(this.max);
512
+ const clampValue = clamp(event.valueAsDate, min, max);
513
+ if (clampValue !== event.valueAsDate && clampValue === min) {
514
+ event.valueAsDate = undefined;
515
+ event.error = "min-range";
516
+ }
517
+ else if (clampValue !== event.valueAsDate && clampValue === max) {
518
+ event.valueAsDate = undefined;
519
+ event.error = "max-range";
520
+ }
521
+ }
522
+ return event;
523
+ };
524
+ this.processFocusedDayNode = (element) => {
525
+ this.focusedDayNode = element;
526
+ if (this.activeFocus && this.open) {
527
+ setTimeout(() => element.focus(), 0);
528
+ }
529
+ };
530
+ this.activeFocus = false;
531
+ this.focusedDay = new Date();
532
+ this.open = false;
533
+ this.visible = false;
534
+ this.name = "date";
535
+ this.identifier = undefined;
536
+ this.disabled = false;
537
+ this.role = null;
538
+ this.direction = "right";
539
+ this.required = false;
540
+ this.invalid = undefined;
541
+ this.describedBy = undefined;
542
+ this.dsoAutofocus = false;
543
+ this.value = "";
544
+ this.min = undefined;
545
+ this.max = undefined;
546
+ }
547
+ /**
548
+ * Component event handling.
549
+ */
550
+ handleDocumentClick(e) {
551
+ if (!this.open) {
552
+ return;
553
+ }
554
+ const path = e.composedPath();
555
+ for (const target of path) {
556
+ if (target instanceof Node && this.element.contains(target)) {
557
+ return;
558
+ }
559
+ }
560
+ this.hide(false);
561
+ }
562
+ /**
563
+ * Sets focus on the date picker's input. Use this method instead of the global `focus()`.
564
+ */
565
+ async setFocus() {
566
+ var _a;
567
+ return (_a = this.datePickerLegacyInput) === null || _a === void 0 ? void 0 : _a.focus();
568
+ }
569
+ /**
570
+ * Public methods API
571
+ */
572
+ /**
573
+ * Show the calendar modal, moving focus to the calendar inside.
574
+ */
575
+ async show() {
576
+ if (typeof this.hideTimeoutId !== "undefined") {
577
+ clearTimeout(this.hideTimeoutId);
578
+ }
579
+ this.visible = true;
580
+ setTimeout(() => {
581
+ this.open = true;
582
+ this.setFocusedDay(parseDutchDate(this.value) || new Date());
583
+ if (typeof this.focusTimeoutId !== "undefined") {
584
+ clearTimeout(this.focusTimeoutId);
585
+ }
586
+ this.focusTimeoutId = setTimeout(() => { var _a; return (_a = this.monthSelectNode) === null || _a === void 0 ? void 0 : _a.focus(); }, TRANSITION_MS);
587
+ });
588
+ }
589
+ /**
590
+ * Hide the calendar modal. Set `moveFocusToButton` to false to prevent focus
591
+ * returning to the date picker's button. Default is true.
592
+ */
593
+ async hide(moveFocusToButton = true) {
594
+ this.open = false;
595
+ // in cases where calendar is quickly shown and hidden
596
+ // we should avoid moving focus to the button
597
+ if (typeof this.focusTimeoutId !== "undefined") {
598
+ clearTimeout(this.focusTimeoutId);
599
+ }
600
+ this.hideTimeoutId = setTimeout(() => {
601
+ if (moveFocusToButton && this.datePickerLegacyButton) {
602
+ this.datePickerLegacyButton.focus();
603
+ }
604
+ this.visible = false;
605
+ }, TRANSITION_MS + 200);
606
+ }
607
+ addDays(days) {
608
+ this.setFocusedDay(addDays(this.focusedDay, days));
609
+ }
610
+ addMonths(months) {
611
+ this.setMonth(this.focusedDay.getMonth() + months);
612
+ }
613
+ addYears(years) {
614
+ this.setYear(this.focusedDay.getFullYear() + years);
615
+ }
616
+ startOfWeek() {
617
+ this.setFocusedDay(startOfWeek(this.focusedDay, this.firstDayOfWeek));
618
+ }
619
+ endOfWeek() {
620
+ this.setFocusedDay(endOfWeek(this.focusedDay, this.firstDayOfWeek));
621
+ }
622
+ setMonth(month) {
623
+ const min = setMonth(startOfMonth(this.focusedDay), month);
624
+ const max = endOfMonth(min);
625
+ const date = setMonth(this.focusedDay, month);
626
+ this.setFocusedDay(clamp(date, min, max));
627
+ }
628
+ setYear(year) {
629
+ const min = setYear(startOfMonth(this.focusedDay), year);
630
+ const max = endOfMonth(min);
631
+ const date = setYear(this.focusedDay, year);
632
+ this.setFocusedDay(clamp(date, min, max));
633
+ }
634
+ setFocusedDay(day) {
635
+ this.focusedDay = clamp(day, parseDutchDate(this.min), parseDutchDate(this.max));
636
+ }
637
+ setValue(value) {
638
+ const event = this.prepareEvent(value);
639
+ this.value = typeof value === "string" ? value : event.value;
640
+ if (this.value !== this.previousValue) {
641
+ this.dsoDateChange.emit(event);
642
+ this.previousValue = this.value;
643
+ }
644
+ }
645
+ componentWillLoad() {
646
+ const minDate = parseDutchDate(this.min);
647
+ const maxDate = parseDutchDate(this.max);
648
+ if (minDate && minDate > this.focusedDay) {
649
+ this.focusedDay = minDate;
650
+ }
651
+ if (maxDate && maxDate < this.focusedDay) {
652
+ this.focusedDay = maxDate;
653
+ }
654
+ }
655
+ componentDidLoad() {
656
+ const valueAsDate = parseDutchDate(this.value);
657
+ if (valueAsDate) {
658
+ this.previousValue = this.value = printDutchDate(valueAsDate);
659
+ }
660
+ if (this.dsoAutofocus) {
661
+ this.setFocus();
662
+ }
663
+ }
664
+ /**
665
+ * render() function
666
+ * Always the last one in the class.
667
+ */
668
+ render() {
669
+ var _a, _b;
670
+ const valueAsDate = parseDutchDate(this.value);
671
+ const formattedDate = valueAsDate && printDutchDate(valueAsDate);
672
+ const selectedYear = (valueAsDate || this.focusedDay).getFullYear();
673
+ const focusedMonth = this.focusedDay.getMonth();
674
+ const focusedYear = this.focusedDay.getFullYear();
675
+ const minDate = parseDutchDate(this.min);
676
+ const maxDate = parseDutchDate(this.max);
677
+ const prevMonthDisabled = minDate && minDate.getMonth() === focusedMonth && minDate.getFullYear() === focusedYear;
678
+ const nextMonthDisabled = maxDate && maxDate.getMonth() === focusedMonth && maxDate.getFullYear() === focusedYear;
679
+ let minYear = selectedYear - 10;
680
+ let maxYear = selectedYear + 10;
681
+ if (minDate) {
682
+ minYear = Math.max(minYear, minDate.getFullYear());
683
+ }
684
+ if (maxDate) {
685
+ maxYear = Math.min(maxYear, maxDate.getFullYear());
686
+ }
687
+ return (h(Host, null, h("div", { class: { "dso-date": true, "dso-visible": this.visible } }, h("div", { class: "dso-date__input-wrapper" }, h("input", { class: "dso-date__input", value: this.value, placeholder: this.localization.placeholder, id: this.identifier, disabled: this.disabled, role: (_a = this.role) !== null && _a !== void 0 ? _a : undefined, required: this.required ? true : undefined, "aria-autocomplete": "none", "aria-invalid": (_b = this.invalid) === null || _b === void 0 ? void 0 : _b.toString(), "aria-describedby": this.describedBy, onInput: this.handleInputChange, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown, autoComplete: "off", ref: (element) => (this.datePickerLegacyInput = element) }), h("button", { type: "button", class: "dso-date__toggle", onClick: this.toggleOpen, disabled: this.disabled, ref: (element) => (this.datePickerLegacyButton = element) }, h("span", { class: "dso-date__toggle-icon" }, h("dso-icon", { icon: "calendar" })), h("span", { class: "dso-date__vhidden" }, this.localization.buttonLabel, formattedDate && (h("span", null, ", ", this.localization.selectedDateMessage, " ", formattedDate))))), h("div", { class: {
688
+ "dso-date__dialog": true,
689
+ "is-left": this.direction === "left",
690
+ "is-active": this.open,
691
+ }, role: "dialog", "aria-modal": "true", "aria-hidden": this.open ? "false" : "true", "aria-labelledby": this.dialogLabelId, onTouchMove: this.handleTouchMove, onTouchStart: this.handleTouchStart, onTouchEnd: this.handleTouchEnd }, h("div", { class: "dso-date__dialog-content", onKeyDown: this.handleEscKey }, h("div", { class: "dso-date__vhidden dso-date__instructions", "aria-live": "polite" }, this.localization.keyboardInstruction), h("div", { class: "dso-date__mobile", onFocusin: this.disableActiveFocus }, h("label", { class: "dso-date__mobile-heading" }, this.localization.calendarHeading), h("button", { class: "dso-date__close", ref: (element) => (this.firstFocusableElement = element), onKeyDown: this.handleFirstFocusableKeydown, onClick: () => this.hide(), type: "button" }, h("dso-icon", { icon: "times" }), h("span", { class: "dso-date__vhidden" }, this.localization.closeLabel))), h("div", { class: "dso-date__header", onFocusin: this.disableActiveFocus }, h("div", null, h("h2", { id: this.dialogLabelId, class: "dso-date__vhidden", "aria-live": "polite" }, this.localization.monthNames[focusedMonth], " ", this.focusedDay.getFullYear()), h("label", { htmlFor: this.monthSelectId, class: "dso-date__vhidden" }, this.localization.monthSelectLabel), h("div", { class: "dso-date__select" }, h("select", { id: this.monthSelectId, class: "dso-date__select--month", ref: (element) => (this.monthSelectNode = element), onChange: this.handleMonthSelect }, monthRange(this.localization, selectedYear, minDate, maxDate).map((month) => {
692
+ const index = this.localization.monthNames.indexOf(month);
693
+ return (h("option", { key: month, value: index, selected: index === focusedMonth }, month));
694
+ })), h("div", { class: "dso-date__select-label", "aria-hidden": "true" }, h("span", null, this.localization.monthNamesShort[focusedMonth]), h("dso-icon", { icon: "chevron-down" }))), h("label", { htmlFor: this.yearSelectId, class: "dso-date__vhidden" }, this.localization.yearSelectLabel), h("div", { class: "dso-date__select" }, h("select", { id: this.yearSelectId, class: "dso-date__select--year", onChange: this.handleYearSelect }, range(minYear, maxYear).map((year) => (h("option", { key: year, selected: year === focusedYear }, year)))), h("div", { class: "dso-date__select-label", "aria-hidden": "true" }, h("span", null, this.focusedDay.getFullYear()), h("dso-icon", { icon: "chevron-down" })))), h("div", { class: "dso-date__nav" }, h("button", { class: "dso-date__prev", onClick: this.handlePreviousMonthClick, disabled: prevMonthDisabled, type: "button" }, h("dso-icon", { icon: "chevron-left" }), h("span", { class: "dso-date__vhidden" }, this.localization.prevMonthLabel)), h("button", { class: "dso-date__next", onClick: this.handleNextMonthClick, disabled: nextMonthDisabled, type: "button" }, h("dso-icon", { icon: "chevron-right" }), h("span", { class: "dso-date__vhidden" }, this.localization.nextMonthLabel)))), h(DatePickerLegacyMonth, { selectedDate: valueAsDate, focusedDate: this.focusedDay, onDateSelect: this.handleDaySelect, onKeyboardNavigation: this.handleKeyboardNavigation, labelledById: this.dialogLabelId, localization: this.localization, firstDayOfWeek: this.firstDayOfWeek, focusedDayRef: this.processFocusedDayNode, min: minDate, max: maxDate }))))));
695
+ }
696
+ get element() { return this; }
697
+ static get style() { return datePickerLegacyCss; }
698
+ }, [2, "dso-date-picker-legacy", {
699
+ "name": [1],
700
+ "identifier": [1],
701
+ "disabled": [516],
702
+ "role": [1],
703
+ "direction": [1],
704
+ "required": [4],
705
+ "invalid": [516],
706
+ "describedBy": [1, "described-by"],
707
+ "dsoAutofocus": [4, "dso-autofocus"],
708
+ "value": [1537],
709
+ "min": [1],
710
+ "max": [1],
711
+ "activeFocus": [32],
712
+ "focusedDay": [32],
713
+ "open": [32],
714
+ "visible": [32],
715
+ "setFocus": [64],
716
+ "show": [64],
717
+ "hide": [64]
718
+ }, [[6, "click", "handleDocumentClick"]]]);
719
+ function defineCustomElement$1() {
720
+ if (typeof customElements === "undefined") {
721
+ return;
722
+ }
723
+ const components = ["dso-date-picker-legacy", "dso-icon"];
724
+ components.forEach(tagName => { switch (tagName) {
725
+ case "dso-date-picker-legacy":
726
+ if (!customElements.get(tagName)) {
727
+ customElements.define(tagName, DsoDatePickerLegacy$1);
728
+ }
729
+ break;
730
+ case "dso-icon":
731
+ if (!customElements.get(tagName)) {
732
+ defineCustomElement$2();
733
+ }
734
+ break;
735
+ } });
736
+ }
737
+
738
+ const DsoDatePickerLegacy = DsoDatePickerLegacy$1;
739
+ const defineCustomElement = defineCustomElement$1;
740
+
741
+ export { DsoDatePickerLegacy, defineCustomElement };
742
+
743
+ //# sourceMappingURL=dso-date-picker-legacy.js.map