@haiilo/catalyst 10.4.0 → 10.7.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 (156) hide show
  1. package/dist/catalyst/catalyst.css +2 -2
  2. package/dist/catalyst/catalyst.esm.js +1 -1
  3. package/dist/catalyst/catalyst.esm.js.map +1 -1
  4. package/dist/catalyst/index.esm.js +1 -1
  5. package/dist/catalyst/index.esm.js.map +1 -1
  6. package/dist/catalyst/p-2c8ac8cf.js +2 -0
  7. package/dist/catalyst/p-2c8ac8cf.js.map +1 -0
  8. package/dist/catalyst/p-b2ec6eb3.entry.js +10 -0
  9. package/dist/catalyst/p-b2ec6eb3.entry.js.map +1 -0
  10. package/dist/catalyst/scss/_variables.scss +0 -1
  11. package/dist/catalyst/scss/core/_form.scss +2 -2
  12. package/dist/cjs/{cat-alert_28.cjs.entry.js → cat-alert_29.cjs.entry.js} +387 -218
  13. package/dist/cjs/cat-alert_29.cjs.entry.js.map +1 -0
  14. package/dist/cjs/catalyst.cjs.js +1 -1
  15. package/dist/cjs/index.cjs.js +4 -1
  16. package/dist/cjs/index.cjs.js.map +1 -1
  17. package/dist/cjs/loader.cjs.js +1 -1
  18. package/dist/cjs/{of-45281229.js → of-f2844da8.js} +12 -4
  19. package/dist/cjs/of-f2844da8.js.map +1 -0
  20. package/dist/collection/collection-manifest.json +1 -0
  21. package/dist/collection/components/cat-button/cat-button.css +12 -2
  22. package/dist/collection/components/cat-checkbox/cat-checkbox.css +2 -1
  23. package/dist/collection/components/cat-date/cat-date.css +2 -96
  24. package/dist/collection/components/cat-date/cat-date.js +77 -245
  25. package/dist/collection/components/cat-date/cat-date.js.map +1 -1
  26. package/dist/collection/components/cat-date/cat-date.spec.js +2 -1
  27. package/dist/collection/components/cat-date/cat-date.spec.js.map +1 -1
  28. package/dist/collection/components/cat-date-inline/cat-date-inline.css +166 -0
  29. package/dist/collection/components/cat-date-inline/cat-date-inline.e2e.js +11 -0
  30. package/dist/collection/components/cat-date-inline/cat-date-inline.e2e.js.map +1 -0
  31. package/dist/collection/components/cat-date-inline/cat-date-inline.js +505 -0
  32. package/dist/collection/components/cat-date-inline/cat-date-inline.js.map +1 -0
  33. package/dist/collection/components/cat-date-inline/cat-date-inline.spec.js +16 -0
  34. package/dist/collection/components/cat-date-inline/cat-date-inline.spec.js.map +1 -0
  35. package/dist/collection/components/{cat-date → cat-date-inline}/cat-date-locale.js +22 -1
  36. package/dist/collection/components/cat-date-inline/cat-date-locale.js.map +1 -0
  37. package/dist/collection/components/cat-date-inline/cat-date-math.js.map +1 -0
  38. package/dist/collection/components/cat-datepicker/cat-datepicker.js +2 -2
  39. package/dist/collection/components/cat-datepicker-inline/cat-datepicker-inline.js +2 -2
  40. package/dist/collection/components/cat-dropdown/cat-dropdown.js +29 -2
  41. package/dist/collection/components/cat-dropdown/cat-dropdown.js.map +1 -1
  42. package/dist/collection/components/cat-form-group/cat-form-group.js +4 -1
  43. package/dist/collection/components/cat-form-group/cat-form-group.js.map +1 -1
  44. package/dist/collection/components/cat-i18n/cat-i18n-registry.js +6 -0
  45. package/dist/collection/components/cat-i18n/cat-i18n-registry.js.map +1 -1
  46. package/dist/collection/components/cat-icon/cat-icon-registry.js +4 -2
  47. package/dist/collection/components/cat-icon/cat-icon-registry.js.map +1 -1
  48. package/dist/collection/components/cat-icon/cat-icon.js +1 -1
  49. package/dist/collection/components/cat-input/cat-input.js +4 -4
  50. package/dist/collection/components/cat-notification/cat-notification.js +3 -0
  51. package/dist/collection/components/cat-notification/cat-notification.js.map +1 -1
  52. package/dist/collection/components/cat-pagination/cat-pagination.js +2 -2
  53. package/dist/collection/components/cat-radio/cat-radio.css +1 -1
  54. package/dist/collection/components/cat-radio/cat-radio.js +1 -1
  55. package/dist/collection/components/cat-radio-group/cat-radio-group.js +1 -1
  56. package/dist/collection/components/cat-scrollable/cat-scrollable.js +3 -3
  57. package/dist/collection/components/cat-select/cat-select.js +5 -5
  58. package/dist/collection/components/cat-select-demo/cat-select-demo.js +1 -1
  59. package/dist/collection/components/cat-skeleton/cat-skeleton.js +1 -1
  60. package/dist/collection/components/cat-spinner/cat-spinner.js +2 -2
  61. package/dist/collection/components/cat-tab/cat-tab.js +1 -1
  62. package/dist/collection/components/cat-tabs/cat-tabs.js +1 -1
  63. package/dist/collection/components/cat-textarea/cat-textarea.js +3 -3
  64. package/dist/collection/components/cat-time/cat-time-locale.js +3 -0
  65. package/dist/collection/components/cat-time/cat-time-locale.js.map +1 -1
  66. package/dist/collection/components/cat-time/cat-time.js +39 -8
  67. package/dist/collection/components/cat-time/cat-time.js.map +1 -1
  68. package/dist/collection/components/cat-toggle/cat-toggle.css +1 -1
  69. package/dist/collection/components/cat-toggle/cat-toggle.js +1 -1
  70. package/dist/collection/components/cat-tooltip/cat-tooltip.js +7 -2
  71. package/dist/collection/components/cat-tooltip/cat-tooltip.js.map +1 -1
  72. package/dist/collection/scss/_variables.scss +0 -1
  73. package/dist/collection/scss/core/_form.scss +2 -2
  74. package/dist/components/cat-button2.js +1 -1
  75. package/dist/components/cat-button2.js.map +1 -1
  76. package/dist/components/cat-checkbox2.js +1 -1
  77. package/dist/components/cat-checkbox2.js.map +1 -1
  78. package/dist/components/cat-date-inline.d.ts +11 -0
  79. package/dist/components/cat-date-inline.js +8 -0
  80. package/dist/components/cat-date-inline.js.map +1 -0
  81. package/dist/components/cat-date-inline2.js +386 -0
  82. package/dist/components/cat-date-inline2.js.map +1 -0
  83. package/dist/components/cat-date.js +83 -283
  84. package/dist/components/cat-date.js.map +1 -1
  85. package/dist/components/cat-datepicker-inline.js +2 -2
  86. package/dist/components/cat-datepicker.js +2 -2
  87. package/dist/components/cat-dropdown2.js +8 -2
  88. package/dist/components/cat-dropdown2.js.map +1 -1
  89. package/dist/components/cat-form-group.js +1 -1
  90. package/dist/components/cat-form-group.js.map +1 -1
  91. package/dist/components/cat-i18n-registry.js +6 -0
  92. package/dist/components/cat-i18n-registry.js.map +1 -1
  93. package/dist/components/cat-icon-registry.js +4 -2
  94. package/dist/components/cat-icon-registry.js.map +1 -1
  95. package/dist/components/cat-icon2.js +1 -1
  96. package/dist/components/cat-input2.js +4 -4
  97. package/dist/components/cat-pagination.js +2 -2
  98. package/dist/components/cat-radio-group.js +1 -1
  99. package/dist/components/cat-radio.js +2 -2
  100. package/dist/components/cat-radio.js.map +1 -1
  101. package/dist/components/cat-scrollable2.js +8 -6
  102. package/dist/components/cat-scrollable2.js.map +1 -1
  103. package/dist/components/cat-select-demo.js +3 -3
  104. package/dist/components/cat-select-demo.js.map +1 -1
  105. package/dist/components/cat-select2.js.map +1 -1
  106. package/dist/components/cat-skeleton2.js +1 -1
  107. package/dist/components/cat-spinner2.js +2 -2
  108. package/dist/components/cat-tab.js +1 -1
  109. package/dist/components/cat-tabs.js +1 -1
  110. package/dist/components/cat-textarea.js +3 -3
  111. package/dist/components/cat-time.js +37 -8
  112. package/dist/components/cat-time.js.map +1 -1
  113. package/dist/components/cat-toggle.js +2 -2
  114. package/dist/components/cat-toggle.js.map +1 -1
  115. package/dist/components/cat-tooltip.js +2 -2
  116. package/dist/components/cat-tooltip.js.map +1 -1
  117. package/dist/components/floating-ui.dom.esm.js +38 -30
  118. package/dist/components/floating-ui.dom.esm.js.map +1 -1
  119. package/dist/components/from.js +1 -1
  120. package/dist/components/from.js.map +1 -1
  121. package/dist/components/index.js +3 -0
  122. package/dist/components/index.js.map +1 -1
  123. package/dist/components/of.js.map +1 -1
  124. package/dist/esm/{cat-alert_28.entry.js → cat-alert_29.entry.js} +387 -219
  125. package/dist/esm/cat-alert_29.entry.js.map +1 -0
  126. package/dist/esm/catalyst.js +1 -1
  127. package/dist/esm/index.js +5 -2
  128. package/dist/esm/index.js.map +1 -1
  129. package/dist/esm/loader.js +1 -1
  130. package/dist/esm/{of-19888f3b.js → of-53334b95.js} +12 -4
  131. package/dist/esm/of-53334b95.js.map +1 -0
  132. package/dist/types/components/cat-date/cat-date.d.ts +11 -31
  133. package/dist/types/components/cat-date-inline/cat-date-inline.d.ts +81 -0
  134. package/dist/types/components/{cat-date → cat-date-inline}/cat-date-locale.d.ts +5 -0
  135. package/dist/types/components/cat-dropdown/cat-dropdown.d.ts +9 -0
  136. package/dist/types/components/cat-form-group/cat-form-group.d.ts +3 -0
  137. package/dist/types/components/cat-i18n/cat-i18n-registry.d.ts +6 -0
  138. package/dist/types/components/cat-icon/cat-icon-registry.d.ts +1 -0
  139. package/dist/types/components/cat-notification/cat-notification.d.ts +3 -0
  140. package/dist/types/components/cat-time/cat-time-locale.d.ts +1 -0
  141. package/dist/types/components/cat-time/cat-time.d.ts +6 -1
  142. package/dist/types/components/cat-tooltip/cat-tooltip.d.ts +5 -0
  143. package/dist/types/components.d.ts +209 -5
  144. package/package.json +2 -2
  145. package/dist/catalyst/p-81800b65.js +0 -2
  146. package/dist/catalyst/p-81800b65.js.map +0 -1
  147. package/dist/catalyst/p-8a1d505d.entry.js +0 -10
  148. package/dist/catalyst/p-8a1d505d.entry.js.map +0 -1
  149. package/dist/cjs/cat-alert_28.cjs.entry.js.map +0 -1
  150. package/dist/cjs/of-45281229.js.map +0 -1
  151. package/dist/collection/components/cat-date/cat-date-locale.js.map +0 -1
  152. package/dist/collection/components/cat-date/cat-date-math.js.map +0 -1
  153. package/dist/esm/cat-alert_28.entry.js.map +0 -1
  154. package/dist/esm/of-19888f3b.js.map +0 -1
  155. /package/dist/collection/components/{cat-date → cat-date-inline}/cat-date-math.js +0 -0
  156. /package/dist/types/components/{cat-date → cat-date-inline}/cat-date-math.d.ts +0 -0
@@ -0,0 +1,386 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
+ import { c as catI18nRegistry } from './cat-i18n-registry.js';
3
+ import { d as defineCustomElement$3 } from './cat-button2.js';
4
+ import { d as defineCustomElement$2 } from './cat-icon2.js';
5
+ import { d as defineCustomElement$1 } from './cat-spinner2.js';
6
+
7
+ function getDays(language, weekday = 'long') {
8
+ const date = new Date();
9
+ const firstDayOfWeek = (date.getUTCDate() - date.getUTCDay() + 7) % 7;
10
+ const format = new Intl.DateTimeFormat(language, { weekday }).format;
11
+ return [...Array(7).keys()].map(day => format(new Date(date.getTime()).setUTCDate(firstDayOfWeek + day)));
12
+ }
13
+ function getMonths(language, month = 'long') {
14
+ const date = new Date(0);
15
+ const format = new Intl.DateTimeFormat(language, { month }).format;
16
+ return [...Array(12).keys()].map(month => format(new Date(date.getTime()).setUTCMonth(month)));
17
+ }
18
+ function getWeekInfo(language) {
19
+ const locale = new Intl.Locale(language);
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ const weekInfo = locale.getWeekInfo?.() ?? locale.weekInfo;
22
+ return {
23
+ firstDay: weekInfo?.firstDay ?? 1,
24
+ minDays: weekInfo?.minDays ?? 4,
25
+ weekend: weekInfo?.weekend ?? [6, 7]
26
+ };
27
+ }
28
+ function getFormat(language) {
29
+ const format = new Intl.DateTimeFormat(language, { year: 'numeric', month: '2-digit', day: '2-digit' })
30
+ .format(new Date(3456, 10, 22))
31
+ .replace('3456', 'YYYY')
32
+ .replace('56', 'YY')
33
+ .replace('11', 'MM')
34
+ .replace('22', 'DD');
35
+ return /^(YYYY|YY|MM|DD)\W(YYYY|YY|MM|DD)\W(YYYY|YY|MM|DD)$/.test(format) ? format : 'DD-MM-YYYY';
36
+ }
37
+ function getLocale(language) {
38
+ return {
39
+ prevYear: catI18nRegistry.t('datepicker.prevYear'),
40
+ nextYear: catI18nRegistry.t('datepicker.nextYear'),
41
+ prevMonth: catI18nRegistry.t('datepicker.prevMonth'),
42
+ nextMonth: catI18nRegistry.t('datepicker.nextMonth'),
43
+ arrowKeys: catI18nRegistry.t('datepicker.arrowKeys'),
44
+ today: catI18nRegistry.t('datepicker.today'),
45
+ change: catI18nRegistry.t('datepicker.change'),
46
+ choose: catI18nRegistry.t('datepicker.choose'),
47
+ clear: catI18nRegistry.t('datepicker.clear'),
48
+ formatStr: getFormat(language),
49
+ weekInfo: getWeekInfo(language),
50
+ days: {
51
+ short: getDays(language, 'short'),
52
+ long: getDays(language, 'long')
53
+ },
54
+ months: {
55
+ short: getMonths(language, 'short'),
56
+ long: getMonths(language, 'long')
57
+ },
58
+ now: () => {
59
+ const date = new Date();
60
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate());
61
+ },
62
+ fromLocalISO: (date) => {
63
+ const [match, year, month, day] = date?.match(/^(\d{4})-(\d{2})-(\d{2})/) ?? [];
64
+ return match ? new Date(Number(year), Number(month) - 1, Number(day)) : null;
65
+ },
66
+ toLocalISO: (date) => {
67
+ const year = date.getFullYear();
68
+ const month = (date.getMonth() + 1).toString().padStart(2, '0');
69
+ const day = date.getDate().toString().padStart(2, '0');
70
+ return `${year}-${month}-${day}`;
71
+ },
72
+ toLocalStr: (date) => new Intl.DateTimeFormat(language, {
73
+ year: 'numeric',
74
+ month: 'long',
75
+ day: 'numeric',
76
+ weekday: 'long'
77
+ }).format(date)
78
+ };
79
+ }
80
+
81
+ function isLeapYear(year) {
82
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
83
+ }
84
+ function addDays(date, n) {
85
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate() + n);
86
+ }
87
+ function addMonth(date, n) {
88
+ const [year, month, day] = [date.getFullYear(), date.getMonth(), date.getDate()];
89
+ const maxDays = [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
90
+ const newDate = new Date(date);
91
+ newDate.setDate(1);
92
+ newDate.setMonth(newDate.getMonth() + n);
93
+ newDate.setDate(Math.min(day, maxDays[(month + (n % 12) + 12) % 12]));
94
+ return newDate;
95
+ }
96
+ function isSameYear(date1, date2) {
97
+ return !!date1 && !!date2 && date1.getFullYear() === date2.getFullYear();
98
+ }
99
+ function isSameMonth(date1, date2) {
100
+ return !!date1 && !!date2 && date1.getMonth() === date2.getMonth() && isSameYear(date1, date2);
101
+ }
102
+ function isSameDay(date1, date2) {
103
+ return !!date1 && !!date2 && date1.getDate() === date2.getDate() && isSameMonth(date1, date2);
104
+ }
105
+ function clampDate(min, date, max) {
106
+ return new Date(Math.min(Math.max(date.getTime(), min?.getTime() ?? -Infinity), max?.getTime() ?? Infinity));
107
+ }
108
+
109
+ const catDateInlineCss = ":host{display:inline-block}:host([hidden]){display:none}.picker{display:flex;flex-direction:column;min-width:19.5rem;max-width:30rem}.picker.picker-weeks{min-width:17.5rem;max-width:28rem}.picker.picker-small{min-width:16rem;max-width:23rem}.picker.picker-small.picker-weeks{min-width:14rem;max-width:21rem}.picker-head{display:flex;gap:0.5rem;align-items:center}.picker-head h3{font-size:1.125rem;line-height:1.5rem;font-weight:var(--cat-font-weight-head, 600);font-feature-settings:\"pnum\";flex:1;text-align:center;margin:0}.picker-small .picker-head{gap:0.25rem}.picker-small .picker-head h3{font-size:0.9375rem;line-height:1.25rem;font-weight:var(--cat-font-weight-head, 600);font-feature-settings:\"pnum\"}.picker-grid{display:grid;grid-template-rows:2rem repeat(6, 1fr);grid-template-columns:repeat(7, 1fr);grid-template-areas:\"h h h h h h h\" \"d d d d d d d\" \"d d d d d d d\" \"d d d d d d d\" \"d d d d d d d\" \"d d d d d d d\" \"d d d d d d d\";margin:1rem 0 0.5rem}.picker-weeks .picker-grid{grid-template-columns:2rem repeat(7, 1fr);grid-template-areas:\". h h h h h h h\" \"w d d d d d d d\" \"w d d d d d d d\" \"w d d d d d d d\" \"w d d d d d d d\" \"w d d d d d d d\" \"w d d d d d d d\";}.picker-small .picker-grid{margin:0.5rem 0}.picker-grid-head{grid-area:h;display:grid;grid-template-columns:repeat(7, 1fr);place-items:end center;padding-bottom:0.5rem}.picker-grid-weeks{grid-area:w;display:grid;grid-template-rows:repeat(6, 1fr);place-items:center right;padding-right:0.5rem}.picker-grid-days{grid-area:d;display:grid;grid-template-rows:repeat(6, 1fr);grid-template-columns:repeat(7, 1fr)}.picker-grid-head>*,.picker-grid-weeks>*{font-size:0.75rem;line-height:1rem;font-weight:600;color:rgb(var(--cat-font-color-muted, 81, 92, 108)) !important;text-decoration:none}.date-other{opacity:0.5}.date-disabled{opacity:0.25}.picker-foot{display:flex;gap:1rem;align-items:center;width:min-content;min-width:100%;justify-content:space-between}.picker-small .picker-foot{gap:0.5rem}.cursor-help{margin:0;font-size:0.875rem;line-height:1.125rem;font-weight:var(--cat-font-weight-body, 400);color:rgb(var(--cat-font-color-muted, 81, 92, 108)) !important;text-align:center;flex:1}.cursor-help:first-child{text-align:left}.cursor-help:last-child{text-align:right}.cursor-help:only-child{text-align:center}.picker-small .cursor-help{font-size:0.75rem;line-height:1rem;font-weight:var(--cat-font-weight-body, 400)}.cursor-aria{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.date-range{--cat-border-radius-m:0}";
110
+ const CatDateInlineStyle0 = catDateInlineCss;
111
+
112
+ const CatDateInline = /*@__PURE__*/ proxyCustomElement(class CatDateInline extends HTMLElement {
113
+ constructor() {
114
+ super();
115
+ this.__registerHost();
116
+ this.__attachShadow();
117
+ this.catChange = createEvent(this, "catChange", 7);
118
+ this.language = catI18nRegistry.getLocale();
119
+ this.locale = getLocale(this.language);
120
+ // additonally store the focus date to ensure correct focus after potential re-render
121
+ this.focusDate = null;
122
+ this.viewDate = this.locale.now();
123
+ this.noClear = false;
124
+ this.noHint = false;
125
+ this.noToday = false;
126
+ this.noWeeks = false;
127
+ this.size = 'm';
128
+ this.min = undefined;
129
+ this.max = undefined;
130
+ this.range = false;
131
+ this.value = undefined;
132
+ }
133
+ get focusedDate() {
134
+ const [all, year, month, day] = this.hostElement.shadowRoot
135
+ ?.querySelector(`[data-date]:focus`)
136
+ ?.dataset.date?.match(/^(\d{4})-(\d{2})-(\d{2})/) ?? [];
137
+ return all ? new Date(Number(year), Number(month) - 1, Number(day)) : null;
138
+ }
139
+ componentWillLoad() {
140
+ // select the initial value
141
+ const [startDate, endDate] = this.getValue();
142
+ this.select(startDate);
143
+ if (this.range && endDate) {
144
+ this.select(endDate);
145
+ }
146
+ }
147
+ componentDidRender() {
148
+ if (this.focusDate) {
149
+ // re-focus the previously focused date after re-render
150
+ this.hostElement.shadowRoot
151
+ ?.querySelector(`[data-date="${this.locale.toLocalISO(this.focusDate)}"]`)
152
+ ?.doFocus();
153
+ this.focusDate = null;
154
+ }
155
+ }
156
+ onKeyDown(e) {
157
+ if (!['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(e.key)) {
158
+ return;
159
+ }
160
+ const focusedDate = this.focusedDate;
161
+ if (!focusedDate) {
162
+ e.preventDefault();
163
+ const [startDate] = this.getValue();
164
+ this.focus(startDate || this.locale.now());
165
+ }
166
+ else if (e.key === 'ArrowLeft') {
167
+ e.preventDefault();
168
+ this.focus(e.shiftKey ? addMonth(focusedDate, -1) : addDays(focusedDate, -1));
169
+ }
170
+ else if (e.key === 'ArrowRight') {
171
+ e.preventDefault();
172
+ this.focus(e.shiftKey ? addMonth(focusedDate, 1) : addDays(focusedDate, 1));
173
+ }
174
+ else if (e.key === 'ArrowUp') {
175
+ e.preventDefault();
176
+ this.focus(addDays(focusedDate, -7));
177
+ }
178
+ else if (e.key === 'ArrowDown') {
179
+ e.preventDefault();
180
+ this.focus(addDays(focusedDate, 7));
181
+ }
182
+ }
183
+ /**
184
+ * Select a date in the picker.
185
+ *
186
+ * @param date The date to select.
187
+ */
188
+ async select(date) {
189
+ if (!date) {
190
+ return this.clear();
191
+ }
192
+ const oldValue = this.value;
193
+ const [minDate, maxDate] = this.getMinMaxDate();
194
+ const newDate = clampDate(minDate, new Date(date.getFullYear(), date.getMonth(), date.getDate()), maxDate);
195
+ this.focus(newDate);
196
+ if (this.range) {
197
+ const [startDate, endDate] = this.getValue();
198
+ if (!startDate || endDate || newDate < startDate) {
199
+ this.value = this.toRangeValue(newDate, null);
200
+ }
201
+ else {
202
+ this.value = this.toRangeValue(startDate, newDate);
203
+ }
204
+ }
205
+ else {
206
+ this.value = this.locale.toLocalISO(newDate);
207
+ }
208
+ if (oldValue !== this.value) {
209
+ this.catChange.emit(this.value);
210
+ }
211
+ }
212
+ /**
213
+ * Clear the picker.
214
+ */
215
+ async clear() {
216
+ const oldValue = this.value;
217
+ this.value = undefined;
218
+ if (oldValue !== this.value) {
219
+ this.catChange.emit(this.value);
220
+ }
221
+ }
222
+ /**
223
+ * Resets the view of the picker.
224
+ */
225
+ async resetView() {
226
+ const [minDate, maxDate] = this.getMinMaxDate();
227
+ const [dateStart] = this.getValue();
228
+ this.viewDate = dateStart ?? clampDate(minDate, this.locale.now(), maxDate);
229
+ }
230
+ render() {
231
+ const [minDate, maxDate] = this.getMinMaxDate();
232
+ const dateGrid = this.dateGrid(this.viewDate.getFullYear(), this.viewDate.getMonth());
233
+ const [dateStart, dateEnd] = this.getValue();
234
+ return (h(Host, { key: '2b21e43ebc9a69988b475f2eae1eb2f2aeee97cb' }, h("div", { key: '3f256483614d09440bee07be4e8996bc1c187d2b', class: { picker: true, 'picker-small': this.size === 's', 'picker-weeks': !this.noWeeks } }, h("div", { key: 'c9d82a518d78439164e99240fa13afabcc81e267', class: "picker-head" }, h("cat-button", { key: 'bcc803acb0ac2d7947fa53615ca105d77063e9f9', icon: "$cat:datepicker-year-prev", iconOnly: true, size: "xs", variant: "text", "a11y-label": this.locale.prevYear, disabled: isSameYear(this.viewDate, minDate), onClick: () => this.navigate('prev', 'year'), "data-dropdown-no-close": true }), h("cat-button", { key: '3626bbe3e1a79c08d7a6257cb78ce398ceb1b750', icon: "$cat:datepicker-month-prev", iconOnly: true, size: "xs", variant: "text", "a11y-label": this.locale.prevMonth, disabled: isSameMonth(this.viewDate, minDate), onClick: () => this.navigate('prev', 'month'), "data-dropdown-no-close": true }), h("h3", { key: '92462a6702792afd573c91f0c12e2bae599378ae' }, this.getHeadline()), h("cat-button", { key: '4ce63e1451b820098feea0ff2f45d9b7d0b5cc28', icon: "$cat:datepicker-month-next", iconOnly: true, size: "xs", variant: "text", "a11y-label": this.locale.nextMonth, disabled: isSameMonth(this.viewDate, maxDate), onClick: () => this.navigate('next', 'month'), "data-dropdown-no-close": true }), h("cat-button", { key: '97adedac70ce8f19ba0725ca6a1bb836a1d8c0c3', icon: "$cat:datepicker-year-next", iconOnly: true, size: "xs", variant: "text", "a11y-label": this.locale.nextYear, disabled: isSameYear(this.viewDate, maxDate), onClick: () => this.navigate('next', 'year'), "data-dropdown-no-close": true })), h("div", { key: '9bbc58c07f911e928cd231a784604abada3698ea', class: "picker-grid", onFocusin: () => this.setAriaLive(this.locale.arrowKeys) }, h("div", { key: '2eff946487bfdbce49521b513d6065bd42c78ac0', class: "picker-grid-head" }, Array.from(Array(7), (_, i) => (h("abbr", { title: this.locale.days.long[i] }, this.locale.days.short[i])))), !this.noWeeks && (h("div", { class: "picker-grid-weeks" }, dateGrid
235
+ .filter((_, i) => i % 7 === 0)
236
+ .map(day => (h("div", null, this.getWeekNumber(day)))))), h("div", { key: '48f7b239e8ccb0d56b4f7c80d8892b79c2908990', class: "picker-grid-days" }, dateGrid.map(day => {
237
+ const isStartDate = isSameDay(dateStart, day);
238
+ const isEndDate = isSameDay(dateEnd, day);
239
+ const isRange = !!dateStart && !!dateEnd && day > dateStart && day < dateEnd;
240
+ const isToday = isSameDay(this.locale.now(), day);
241
+ return (h("cat-button", { class: {
242
+ 'cat-date-item': true,
243
+ 'date-other': !isSameMonth(this.viewDate, day),
244
+ 'date-today': isToday,
245
+ 'date-start': this.range && isStartDate,
246
+ 'date-range': this.range && isRange,
247
+ 'date-end': this.range && isEndDate,
248
+ 'date-focusable': this.canFocus(day),
249
+ 'date-disabled': !this.canClick(day)
250
+ }, size: this.size, nativeAttributes: !this.canFocus(day) ? { tabindex: '-1' } : {}, variant: isStartDate || isEndDate ? 'filled' : isToday ? 'outlined' : 'text', a11yLabel: this.locale.toLocalStr(day), active: isStartDate || isEndDate || isRange, color: isStartDate || isEndDate || isToday ? 'primary' : 'secondary', disabled: !this.canClick(day), onClick: () => this.select(day), "data-date": this.locale.toLocalISO(day) }, day.getDate()));
251
+ }))), h("div", { key: 'e6c30b78568d92d3a17936fdff4c7fec1ac4965f', class: "picker-foot" }, !this.noToday && this.canClick(this.locale.now()) && (h("cat-button", { size: "s", "data-dropdown-no-close": true, onClick: () => this.select(this.locale.now()) }, this.locale.today)), !this.noHint && h("p", { class: "cursor-help" }, this.locale.arrowKeys), !this.noClear && (h("cat-button", { size: "s", disabled: !this.value, "data-dropdown-no-close": true, onClick: () => this.clear() }, this.locale.clear)))), h("p", { key: 'e31cabf38ed3545ddd4acc32c2540eb5706bc17c', class: "cursor-aria", "aria-live": "polite" })));
252
+ }
253
+ focus(date) {
254
+ const [minDate, maxDate] = this.getMinMaxDate();
255
+ this.focusDate = clampDate(minDate, date, maxDate);
256
+ this.viewDate = new Date(this.focusDate.getFullYear(), this.focusDate.getMonth());
257
+ this.hostElement.shadowRoot
258
+ ?.querySelector(`[data-date="${this.locale.toLocalISO(this.focusDate)}"]`)
259
+ ?.doFocus();
260
+ }
261
+ navigate(direction, period) {
262
+ this.viewDate = new Date(direction === 'prev'
263
+ ? period === 'year'
264
+ ? this.viewDate.setFullYear(this.viewDate.getFullYear() - 1)
265
+ : this.viewDate.setMonth(this.viewDate.getMonth() - 1)
266
+ : period === 'year'
267
+ ? this.viewDate.setFullYear(this.viewDate.getFullYear() + 1)
268
+ : this.viewDate.setMonth(this.viewDate.getMonth() + 1));
269
+ // announce the new month and year
270
+ this.setAriaLive(this.getHeadline());
271
+ }
272
+ setAriaLive(text) {
273
+ const node = this.hostElement.shadowRoot?.querySelector('.cursor-aria');
274
+ if (node) {
275
+ node.innerHTML = text;
276
+ }
277
+ }
278
+ dateGrid(year, month) {
279
+ const firstDayOfWeek = new Date(year, month, 1).getDay();
280
+ const daysInMonth = new Date(year, month + 1, 0).getDate();
281
+ const days = [...Array(daysInMonth).keys()];
282
+ const daysBefore = [...Array(firstDayOfWeek).keys()].map(day => new Date(year, month, day - firstDayOfWeek).getDate());
283
+ const daysAfter = [...Array(42 - days.length - daysBefore.length).keys()];
284
+ return [
285
+ ...daysBefore.map(day => new Date(year, month - 1, day + 1)),
286
+ ...days.map(day => new Date(year, month, day + 1)),
287
+ ...daysAfter.map(day => new Date(year, month + 1, day + 1))
288
+ ];
289
+ }
290
+ getHeadline() {
291
+ return `${this.locale.months.long[this.viewDate.getMonth()]} ${this.viewDate.getFullYear()}`;
292
+ }
293
+ getWeekNumber(date, iso8601 = true) {
294
+ const currentDate = new Date(date.getTime());
295
+ const dayNum = iso8601 ? currentDate.getDay() || 7 : currentDate.getDay();
296
+ currentDate.setDate(currentDate.getDate() + 4 - dayNum);
297
+ const yearStart = new Date(currentDate.getFullYear(), 0, 1);
298
+ return Math.ceil(((+currentDate - +yearStart) / 86400000 + 1) / 7);
299
+ }
300
+ canFocus(date) {
301
+ const now = this.locale.now();
302
+ const [minDate] = this.getMinMaxDate();
303
+ const focusedDate = this.focusedDate;
304
+ const [startDate] = this.getValue();
305
+ if (focusedDate && isSameMonth(focusedDate, this.viewDate)) {
306
+ return isSameMonth(focusedDate, date) && isSameDay(focusedDate, date);
307
+ }
308
+ else if (startDate && isSameMonth(startDate, this.viewDate)) {
309
+ return isSameMonth(startDate, date) && isSameDay(startDate, date);
310
+ }
311
+ else if (isSameMonth(this.viewDate, now) && (!minDate || minDate <= now)) {
312
+ return isSameMonth(this.viewDate, date) && isSameDay(now, date);
313
+ }
314
+ const minDay = isSameMonth(date, minDate) ? minDate?.getDate() ?? 1 : 1;
315
+ return isSameMonth(this.viewDate, date) && date.getDate() === minDay;
316
+ }
317
+ canClick(date) {
318
+ const [minDate, maxDate] = this.getMinMaxDate();
319
+ return (!minDate || minDate <= date) && (!maxDate || maxDate >= date);
320
+ }
321
+ getMinMaxDate() {
322
+ const minDate = this.locale.fromLocalISO(this.min);
323
+ const maxDate = this.locale.fromLocalISO(this.max);
324
+ return [minDate, maxDate];
325
+ }
326
+ getValue() {
327
+ if (this.range) {
328
+ const [startDate, endDate] = JSON.parse(this.value || '[]');
329
+ return [this.locale.fromLocalISO(startDate), this.locale.fromLocalISO(endDate)];
330
+ }
331
+ else {
332
+ return [this.locale.fromLocalISO(this.value), null];
333
+ }
334
+ }
335
+ toRangeValue(startDate, endDate) {
336
+ return JSON.stringify([startDate, endDate].map(date => (date ? this.locale.toLocalISO(date) : null)));
337
+ }
338
+ get hostElement() { return this; }
339
+ static get style() { return CatDateInlineStyle0; }
340
+ }, [1, "cat-date-inline", {
341
+ "noClear": [4, "no-clear"],
342
+ "noHint": [4, "no-hint"],
343
+ "noToday": [4, "no-today"],
344
+ "noWeeks": [4, "no-weeks"],
345
+ "size": [1],
346
+ "min": [1],
347
+ "max": [1],
348
+ "range": [4],
349
+ "value": [1025],
350
+ "viewDate": [32],
351
+ "select": [64],
352
+ "clear": [64],
353
+ "resetView": [64]
354
+ }, [[0, "keydown", "onKeyDown"]]]);
355
+ function defineCustomElement() {
356
+ if (typeof customElements === "undefined") {
357
+ return;
358
+ }
359
+ const components = ["cat-date-inline", "cat-button", "cat-icon", "cat-spinner"];
360
+ components.forEach(tagName => { switch (tagName) {
361
+ case "cat-date-inline":
362
+ if (!customElements.get(tagName)) {
363
+ customElements.define(tagName, CatDateInline);
364
+ }
365
+ break;
366
+ case "cat-button":
367
+ if (!customElements.get(tagName)) {
368
+ defineCustomElement$3();
369
+ }
370
+ break;
371
+ case "cat-icon":
372
+ if (!customElements.get(tagName)) {
373
+ defineCustomElement$2();
374
+ }
375
+ break;
376
+ case "cat-spinner":
377
+ if (!customElements.get(tagName)) {
378
+ defineCustomElement$1();
379
+ }
380
+ break;
381
+ } });
382
+ }
383
+
384
+ export { CatDateInline as C, clampDate as c, defineCustomElement as d, getLocale as g };
385
+
386
+ //# sourceMappingURL=cat-date-inline2.js.map
@@ -0,0 +1 @@
1
+ {"file":"cat-date-inline2.js","mappings":"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","names":["i18n"],"sources":["src/components/cat-date-inline/cat-date-locale.ts","src/components/cat-date-inline/cat-date-math.ts","src/components/cat-date-inline/cat-date-inline.scss?tag=cat-date-inline&encapsulation=shadow","src/components/cat-date-inline/cat-date-inline.tsx"],"sourcesContent":["import { catI18nRegistry as i18n } from '../cat-i18n/cat-i18n-registry';\n\nfunction getDays(language: string, weekday: 'long' | 'short' | 'narrow' = 'long') {\n const date = new Date();\n const firstDayOfWeek = (date.getUTCDate() - date.getUTCDay() + 7) % 7;\n const format = new Intl.DateTimeFormat(language, { weekday }).format;\n return [...Array(7).keys()].map(day => format(new Date(date.getTime()).setUTCDate(firstDayOfWeek + day)));\n}\n\nfunction getMonths(language: string, month: 'long' | 'short' = 'long') {\n const date = new Date(0);\n const format = new Intl.DateTimeFormat(language, { month }).format;\n return [...Array(12).keys()].map(month => format(new Date(date.getTime()).setUTCMonth(month)));\n}\n\nfunction getWeekInfo(language: string) {\n const locale = new Intl.Locale(language);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const weekInfo = (locale as any).getWeekInfo?.() ?? (locale as any).weekInfo;\n return {\n firstDay: weekInfo?.firstDay ?? 1,\n minDays: weekInfo?.minDays ?? 4,\n weekend: weekInfo?.weekend ?? [6, 7]\n };\n}\n\nfunction getFormat(language: string) {\n const format = new Intl.DateTimeFormat(language, { year: 'numeric', month: '2-digit', day: '2-digit' })\n .format(new Date(3456, 10, 22))\n .replace('3456', 'YYYY')\n .replace('56', 'YY')\n .replace('11', 'MM')\n .replace('22', 'DD');\n return /^(YYYY|YY|MM|DD)\\W(YYYY|YY|MM|DD)\\W(YYYY|YY|MM|DD)$/.test(format) ? format : 'DD-MM-YYYY';\n}\n\nexport function getLocale(language: string) {\n return {\n prevYear: i18n.t('datepicker.prevYear'),\n nextYear: i18n.t('datepicker.nextYear'),\n prevMonth: i18n.t('datepicker.prevMonth'),\n nextMonth: i18n.t('datepicker.nextMonth'),\n arrowKeys: i18n.t('datepicker.arrowKeys'),\n today: i18n.t('datepicker.today'),\n change: i18n.t('datepicker.change'),\n choose: i18n.t('datepicker.choose'),\n clear: i18n.t('datepicker.clear'),\n formatStr: getFormat(language),\n weekInfo: getWeekInfo(language),\n days: {\n short: getDays(language, 'short'),\n long: getDays(language, 'long')\n },\n months: {\n short: getMonths(language, 'short'),\n long: getMonths(language, 'long')\n },\n now: () => {\n const date = new Date();\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n },\n fromLocalISO: (date?: string | null) => {\n const [match, year, month, day] = date?.match(/^(\\d{4})-(\\d{2})-(\\d{2})/) ?? [];\n return match ? new Date(Number(year), Number(month) - 1, Number(day)) : null;\n },\n toLocalISO: (date: Date) => {\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n return `${year}-${month}-${day}`;\n },\n toLocalStr: (date: Date) =>\n new Intl.DateTimeFormat(language, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n weekday: 'long'\n }).format(date)\n };\n}\n","export function isLeapYear(year: number): boolean {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\nexport function addDays(date: Date, n: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + n);\n}\n\nexport function addMonth(date: Date, n: number): Date {\n const [year, month, day] = [date.getFullYear(), date.getMonth(), date.getDate()];\n const maxDays = [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n const newDate = new Date(date);\n newDate.setDate(1);\n newDate.setMonth(newDate.getMonth() + n);\n newDate.setDate(Math.min(day, maxDays[(month + (n % 12) + 12) % 12]));\n return newDate;\n}\n\nexport function isSameYear(date1: Date | null, date2: Date | null): boolean {\n return !!date1 && !!date2 && date1.getFullYear() === date2.getFullYear();\n}\n\nexport function isSameMonth(date1: Date | null, date2: Date | null): boolean {\n return !!date1 && !!date2 && date1.getMonth() === date2.getMonth() && isSameYear(date1, date2);\n}\n\nexport function isSameDay(date1: Date | null, date2: Date | null): boolean {\n return !!date1 && !!date2 && date1.getDate() === date2.getDate() && isSameMonth(date1, date2);\n}\n\nexport function clampDate(min: Date | null, date: Date, max: Date | null): Date {\n return new Date(Math.min(Math.max(date.getTime(), min?.getTime() ?? -Infinity), max?.getTime() ?? Infinity));\n}\n","@use 'variables' as *;\n@use 'mixins' as *;\n\n:host {\n display: inline-block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.picker {\n display: flex;\n flex-direction: column;\n min-width: calc(2rem + 7 * 2.5rem);\n max-width: calc(2rem + 7 * 4rem);\n\n &.picker-weeks {\n min-width: calc(7 * 2.5rem);\n max-width: calc(7 * 4rem);\n }\n\n &.picker-small {\n min-width: calc(2rem + 7 * 2rem);\n max-width: calc(2rem + 7 * 3rem);\n\n &.picker-weeks {\n min-width: calc(7 * 2rem);\n max-width: calc(7 * 3rem);\n }\n }\n}\n\n.picker-head {\n display: flex;\n gap: 0.5rem;\n align-items: center;\n\n h3 {\n @include cat-head(4);\n flex: 1;\n text-align: center;\n margin: 0;\n }\n\n .picker-small & {\n gap: 0.25rem;\n\n h3 {\n @include cat-head(5);\n }\n }\n}\n\n.picker-grid {\n display: grid;\n /* stylelint-disable declaration-block-no-redundant-longhand-properties */\n grid-template-rows: 2rem repeat(6, 1fr);\n grid-template-columns: repeat(7, 1fr);\n grid-template-areas:\n 'h h h h h h h'\n 'd d d d d d d'\n 'd d d d d d d'\n 'd d d d d d d'\n 'd d d d d d d'\n 'd d d d d d d'\n 'd d d d d d d';\n /* stylelint-enable declaration-block-no-redundant-longhand-properties */\n margin: 1rem 0 0.5rem;\n\n .picker-weeks & {\n /* stylelint-disable declaration-block-no-redundant-longhand-properties */\n grid-template-columns: 2rem repeat(7, 1fr);\n grid-template-areas:\n '. h h h h h h h'\n 'w d d d d d d d'\n 'w d d d d d d d'\n 'w d d d d d d d'\n 'w d d d d d d d'\n 'w d d d d d d d'\n 'w d d d d d d d';\n /* stylelint-enable declaration-block-no-redundant-longhand-properties */\n }\n\n .picker-small & {\n margin: 0.5rem 0;\n }\n}\n\n.picker-grid-head {\n grid-area: h;\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n place-items: end center;\n padding-bottom: 0.5rem;\n}\n\n.picker-grid-weeks {\n grid-area: w;\n display: grid;\n grid-template-rows: repeat(6, 1fr);\n place-items: center right;\n padding-right: 0.5rem;\n}\n\n.picker-grid-days {\n grid-area: d;\n display: grid;\n grid-template-rows: repeat(6, 1fr);\n grid-template-columns: repeat(7, 1fr);\n}\n\n.picker-grid-head > *,\n.picker-grid-weeks > * {\n @include cat-body('xs', 600);\n color: cat-token('color.ui.font.muted') !important;\n text-decoration: none;\n}\n\n.date-other {\n opacity: 0.5;\n}\n\n.date-disabled {\n opacity: 0.25;\n}\n\n.picker-foot {\n display: flex;\n gap: 1rem;\n align-items: center;\n width: min-content;\n min-width: 100%;\n justify-content: space-between;\n\n .picker-small & {\n gap: 0.5rem;\n }\n}\n\n.cursor-help {\n margin: 0;\n @include cat-body('s');\n color: cat-token('color.ui.font.muted') !important;\n text-align: center;\n flex: 1;\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n }\n\n &:only-child {\n text-align: center;\n }\n\n .picker-small & {\n @include cat-body('xs');\n }\n}\n\n.cursor-aria {\n @include cat-visually-hidden;\n}\n\n.date-range {\n --cat-border-radius-m: 0;\n}\n","import { Component, Element, Event, EventEmitter, Host, Listen, Method, Prop, State, h } from '@stencil/core';\nimport { catI18nRegistry as i18n } from '../cat-i18n/cat-i18n-registry';\nimport { getLocale } from './cat-date-locale';\nimport { addDays, addMonth, clampDate, isSameDay, isSameMonth, isSameYear } from './cat-date-math';\n\n/**\n * An inline date picker component to select a date.\n */\n@Component({\n tag: 'cat-date-inline',\n styleUrl: 'cat-date-inline.scss',\n shadow: true\n})\nexport class CatDateInline {\n private readonly language = i18n.getLocale();\n private readonly locale = getLocale(this.language);\n // additonally store the focus date to ensure correct focus after potential re-render\n private focusDate: Date | null = null;\n\n @Element() hostElement!: HTMLElement;\n\n @State() viewDate: Date = this.locale.now();\n\n /**\n * Hides the clear button.\n */\n @Prop() noClear = false;\n\n /**\n * Hides the arrow navigation hint.\n */\n @Prop() noHint = false;\n\n /**\n * Hides the today button.\n */\n @Prop() noToday = false;\n\n /**\n * Hides the week numbers.\n */\n @Prop() noWeeks = false;\n\n /**\n * The size of the date picker.\n */\n @Prop() size: 's' | 'm' = 'm';\n\n /**\n * A minimum value for the date, given in local ISO 8601 date format YYYY-MM-DD.\n */\n @Prop() min?: string;\n\n /**\n * A maximum value for the date, given in local ISO 8601 date format YYYY-MM-DD.\n */\n @Prop() max?: string;\n\n /**\n * Allow the selection of a range of dates, i.e. start and end date.\n */\n @Prop() range = false;\n\n /**\n * The value of the control, given in local ISO 8601 date format YYYY-MM-DD.\n */\n @Prop({ mutable: true }) value?: string;\n\n /**\n * Emitted when the value is changed.\n */\n @Event() catChange!: EventEmitter<string>;\n\n private get focusedDate() {\n const [all, year, month, day] =\n this.hostElement.shadowRoot\n ?.querySelector<HTMLCatButtonElement>(`[data-date]:focus`)\n ?.dataset.date?.match(/^(\\d{4})-(\\d{2})-(\\d{2})/) ?? [];\n return all ? new Date(Number(year), Number(month) - 1, Number(day)) : null;\n }\n\n componentWillLoad() {\n // select the initial value\n const [startDate, endDate] = this.getValue();\n this.select(startDate);\n if (this.range && endDate) {\n this.select(endDate);\n }\n }\n\n componentDidRender() {\n if (this.focusDate) {\n // re-focus the previously focused date after re-render\n this.hostElement.shadowRoot\n ?.querySelector<HTMLCatButtonElement>(`[data-date=\"${this.locale.toLocalISO(this.focusDate)}\"]`)\n ?.doFocus();\n this.focusDate = null;\n }\n }\n\n @Listen('keydown')\n onKeyDown(e: KeyboardEvent) {\n if (!['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(e.key)) {\n return;\n }\n const focusedDate = this.focusedDate;\n if (!focusedDate) {\n e.preventDefault();\n const [startDate] = this.getValue();\n this.focus(startDate || this.locale.now());\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n this.focus(e.shiftKey ? addMonth(focusedDate, -1) : addDays(focusedDate, -1));\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n this.focus(e.shiftKey ? addMonth(focusedDate, 1) : addDays(focusedDate, 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n this.focus(addDays(focusedDate, -7));\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n this.focus(addDays(focusedDate, 7));\n }\n }\n\n /**\n * Select a date in the picker.\n *\n * @param date The date to select.\n */\n @Method()\n async select(date: Date | null): Promise<void> {\n if (!date) {\n return this.clear();\n }\n const oldValue = this.value;\n const [minDate, maxDate] = this.getMinMaxDate();\n const newDate = clampDate(minDate, new Date(date.getFullYear(), date.getMonth(), date.getDate()), maxDate);\n this.focus(newDate);\n\n if (this.range) {\n const [startDate, endDate] = this.getValue();\n if (!startDate || endDate || newDate < startDate) {\n this.value = this.toRangeValue(newDate, null);\n } else {\n this.value = this.toRangeValue(startDate, newDate);\n }\n } else {\n this.value = this.locale.toLocalISO(newDate);\n }\n\n if (oldValue !== this.value) {\n this.catChange.emit(this.value);\n }\n }\n\n /**\n * Clear the picker.\n */\n @Method()\n async clear(): Promise<void> {\n const oldValue = this.value;\n this.value = undefined;\n if (oldValue !== this.value) {\n this.catChange.emit(this.value);\n }\n }\n\n /**\n * Resets the view of the picker.\n */\n @Method()\n async resetView(): Promise<void> {\n const [minDate, maxDate] = this.getMinMaxDate();\n const [dateStart] = this.getValue();\n this.viewDate = dateStart ?? clampDate(minDate, this.locale.now(), maxDate);\n }\n\n render() {\n const [minDate, maxDate] = this.getMinMaxDate();\n const dateGrid = this.dateGrid(this.viewDate.getFullYear(), this.viewDate.getMonth());\n const [dateStart, dateEnd] = this.getValue();\n return (\n <Host>\n <div class={{ picker: true, 'picker-small': this.size === 's', 'picker-weeks': !this.noWeeks }}>\n <div class=\"picker-head\">\n <cat-button\n icon=\"$cat:datepicker-year-prev\"\n iconOnly\n size=\"xs\"\n variant=\"text\"\n a11y-label={this.locale.prevYear}\n disabled={isSameYear(this.viewDate, minDate)}\n onClick={() => this.navigate('prev', 'year')}\n data-dropdown-no-close\n ></cat-button>\n <cat-button\n icon=\"$cat:datepicker-month-prev\"\n iconOnly\n size=\"xs\"\n variant=\"text\"\n a11y-label={this.locale.prevMonth}\n disabled={isSameMonth(this.viewDate, minDate)}\n onClick={() => this.navigate('prev', 'month')}\n data-dropdown-no-close\n ></cat-button>\n <h3>{this.getHeadline()}</h3>\n <cat-button\n icon=\"$cat:datepicker-month-next\"\n iconOnly\n size=\"xs\"\n variant=\"text\"\n a11y-label={this.locale.nextMonth}\n disabled={isSameMonth(this.viewDate, maxDate)}\n onClick={() => this.navigate('next', 'month')}\n data-dropdown-no-close\n ></cat-button>\n <cat-button\n icon=\"$cat:datepicker-year-next\"\n iconOnly\n size=\"xs\"\n variant=\"text\"\n a11y-label={this.locale.nextYear}\n disabled={isSameYear(this.viewDate, maxDate)}\n onClick={() => this.navigate('next', 'year')}\n data-dropdown-no-close\n ></cat-button>\n </div>\n <div class=\"picker-grid\" onFocusin={() => this.setAriaLive(this.locale.arrowKeys)}>\n <div class=\"picker-grid-head\">\n {Array.from(Array(7), (_, i) => (\n <abbr title={this.locale.days.long[i]}>{this.locale.days.short[i]}</abbr>\n ))}\n </div>\n {!this.noWeeks && (\n <div class=\"picker-grid-weeks\">\n {dateGrid\n .filter((_, i) => i % 7 === 0)\n .map(day => (\n <div>{this.getWeekNumber(day)}</div>\n ))}\n </div>\n )}\n <div class=\"picker-grid-days\">\n {dateGrid.map(day => {\n const isStartDate = isSameDay(dateStart, day);\n const isEndDate = isSameDay(dateEnd, day);\n const isRange = !!dateStart && !!dateEnd && day > dateStart && day < dateEnd;\n const isToday = isSameDay(this.locale.now(), day);\n return (\n <cat-button\n class={{\n 'cat-date-item': true,\n 'date-other': !isSameMonth(this.viewDate, day),\n 'date-today': isToday,\n 'date-start': this.range && isStartDate,\n 'date-range': this.range && isRange,\n 'date-end': this.range && isEndDate,\n 'date-focusable': this.canFocus(day),\n 'date-disabled': !this.canClick(day)\n }}\n size={this.size}\n nativeAttributes={!this.canFocus(day) ? { tabindex: '-1' } : {}}\n variant={isStartDate || isEndDate ? 'filled' : isToday ? 'outlined' : 'text'}\n a11yLabel={this.locale.toLocalStr(day)}\n active={isStartDate || isEndDate || isRange}\n color={isStartDate || isEndDate || isToday ? 'primary' : 'secondary'}\n disabled={!this.canClick(day)}\n onClick={() => this.select(day)}\n data-date={this.locale.toLocalISO(day)}\n >\n {day.getDate()}\n </cat-button>\n );\n })}\n </div>\n </div>\n <div class=\"picker-foot\">\n {!this.noToday && this.canClick(this.locale.now()) && (\n <cat-button size=\"s\" data-dropdown-no-close onClick={() => this.select(this.locale.now())}>\n {this.locale.today}\n </cat-button>\n )}\n {!this.noHint && <p class=\"cursor-help\">{this.locale.arrowKeys}</p>}\n {!this.noClear && (\n <cat-button size=\"s\" disabled={!this.value} data-dropdown-no-close onClick={() => this.clear()}>\n {this.locale.clear}\n </cat-button>\n )}\n </div>\n </div>\n <p class=\"cursor-aria\" aria-live=\"polite\"></p>\n </Host>\n );\n }\n\n private focus(date: Date) {\n const [minDate, maxDate] = this.getMinMaxDate();\n this.focusDate = clampDate(minDate, date, maxDate);\n this.viewDate = new Date(this.focusDate.getFullYear(), this.focusDate.getMonth());\n this.hostElement.shadowRoot\n ?.querySelector<HTMLCatButtonElement>(`[data-date=\"${this.locale.toLocalISO(this.focusDate)}\"]`)\n ?.doFocus();\n }\n\n private navigate(direction: 'prev' | 'next', period: 'year' | 'month') {\n this.viewDate = new Date(\n direction === 'prev'\n ? period === 'year'\n ? this.viewDate.setFullYear(this.viewDate.getFullYear() - 1)\n : this.viewDate.setMonth(this.viewDate.getMonth() - 1)\n : period === 'year'\n ? this.viewDate.setFullYear(this.viewDate.getFullYear() + 1)\n : this.viewDate.setMonth(this.viewDate.getMonth() + 1)\n );\n // announce the new month and year\n this.setAriaLive(this.getHeadline());\n }\n\n private setAriaLive(text: string) {\n const node = this.hostElement.shadowRoot?.querySelector('.cursor-aria');\n if (node) {\n node.innerHTML = text;\n }\n }\n\n private dateGrid(year: number, month: number) {\n const firstDayOfWeek = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const days = [...Array(daysInMonth).keys()];\n const daysBefore = [...Array(firstDayOfWeek).keys()].map(day =>\n new Date(year, month, day - firstDayOfWeek).getDate()\n );\n const daysAfter = [...Array(42 - days.length - daysBefore.length).keys()];\n return [\n ...daysBefore.map(day => new Date(year, month - 1, day + 1)),\n ...days.map(day => new Date(year, month, day + 1)),\n ...daysAfter.map(day => new Date(year, month + 1, day + 1))\n ];\n }\n\n private getHeadline() {\n return `${this.locale.months.long[this.viewDate.getMonth()]} ${this.viewDate.getFullYear()}`;\n }\n\n private getWeekNumber(date: Date, iso8601 = true) {\n const currentDate = new Date(date.getTime());\n const dayNum = iso8601 ? currentDate.getDay() || 7 : currentDate.getDay();\n currentDate.setDate(currentDate.getDate() + 4 - dayNum);\n const yearStart = new Date(currentDate.getFullYear(), 0, 1);\n return Math.ceil(((+currentDate - +yearStart) / 86400000 + 1) / 7);\n }\n\n private canFocus(date: Date): boolean {\n const now = this.locale.now();\n const [minDate] = this.getMinMaxDate();\n const focusedDate = this.focusedDate;\n const [startDate] = this.getValue();\n if (focusedDate && isSameMonth(focusedDate, this.viewDate)) {\n return isSameMonth(focusedDate, date) && isSameDay(focusedDate, date);\n } else if (startDate && isSameMonth(startDate, this.viewDate)) {\n return isSameMonth(startDate, date) && isSameDay(startDate, date);\n } else if (isSameMonth(this.viewDate, now) && (!minDate || minDate <= now)) {\n return isSameMonth(this.viewDate, date) && isSameDay(now, date);\n }\n const minDay = isSameMonth(date, minDate) ? minDate?.getDate() ?? 1 : 1;\n return isSameMonth(this.viewDate, date) && date.getDate() === minDay;\n }\n\n private canClick(date: Date) {\n const [minDate, maxDate] = this.getMinMaxDate();\n return (!minDate || minDate <= date) && (!maxDate || maxDate >= date);\n }\n\n private getMinMaxDate() {\n const minDate = this.locale.fromLocalISO(this.min);\n const maxDate = this.locale.fromLocalISO(this.max);\n return [minDate, maxDate];\n }\n\n private getValue(): [Date | null, Date | null] {\n if (this.range) {\n const [startDate, endDate] = JSON.parse(this.value || '[]') as [string | null, string | null];\n return [this.locale.fromLocalISO(startDate), this.locale.fromLocalISO(endDate)];\n } else {\n return [this.locale.fromLocalISO(this.value), null];\n }\n }\n\n private toRangeValue(startDate: Date | null, endDate: Date | null): string {\n return JSON.stringify([startDate, endDate].map(date => (date ? this.locale.toLocalISO(date) : null)));\n }\n}\n"],"version":3}