igniteui-webcomponents 6.4.0 → 6.5.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 (90) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/components/calendar/base.d.ts +7 -3
  3. package/components/calendar/base.js +10 -14
  4. package/components/calendar/base.js.map +1 -1
  5. package/components/calendar/calendar.d.ts +48 -46
  6. package/components/calendar/calendar.js +259 -242
  7. package/components/calendar/calendar.js.map +1 -1
  8. package/components/calendar/days-view/days-view.d.ts +49 -27
  9. package/components/calendar/days-view/days-view.js +169 -160
  10. package/components/calendar/days-view/days-view.js.map +1 -1
  11. package/components/calendar/helpers.js +40 -28
  12. package/components/calendar/helpers.js.map +1 -1
  13. package/components/calendar/model.d.ts +9 -3
  14. package/components/calendar/model.js +29 -19
  15. package/components/calendar/model.js.map +1 -1
  16. package/components/calendar/months-view/months-view.d.ts +6 -7
  17. package/components/calendar/months-view/months-view.js +24 -27
  18. package/components/calendar/months-view/months-view.js.map +1 -1
  19. package/components/calendar/years-view/years-view.d.ts +6 -5
  20. package/components/calendar/years-view/years-view.js +11 -14
  21. package/components/calendar/years-view/years-view.js.map +1 -1
  22. package/components/checkbox/checkbox-base.d.ts +1 -1
  23. package/components/chip/themes/dark/chip.fluent.css.js +1 -1
  24. package/components/chip/themes/dark/chip.fluent.css.js.map +1 -1
  25. package/components/chip/themes/dark/chip.indigo.css.js +1 -1
  26. package/components/chip/themes/dark/chip.indigo.css.js.map +1 -1
  27. package/components/chip/themes/light/chip.fluent.css.js +1 -1
  28. package/components/chip/themes/light/chip.fluent.css.js.map +1 -1
  29. package/components/chip/themes/light/chip.indigo.css.js +1 -1
  30. package/components/chip/themes/light/chip.indigo.css.js.map +1 -1
  31. package/components/chip/themes/light/chip.shared.css.js +1 -1
  32. package/components/chip/themes/light/chip.shared.css.js.map +1 -1
  33. package/components/chip/themes/shared/chip.indigo.css.js +1 -1
  34. package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
  35. package/components/common/definitions/defineAllComponents.js +2 -0
  36. package/components/common/definitions/defineAllComponents.js.map +1 -1
  37. package/components/date-range-picker/date-range-picker.js +1 -1
  38. package/components/date-range-picker/date-range-picker.js.map +1 -1
  39. package/components/date-time-input/date-time-input.d.ts +4 -1
  40. package/components/date-time-input/date-time-input.js +17 -6
  41. package/components/date-time-input/date-time-input.js.map +1 -1
  42. package/components/file-input/file-input.d.ts +15 -13
  43. package/components/file-input/file-input.js +49 -47
  44. package/components/file-input/file-input.js.map +1 -1
  45. package/components/input/input-base.d.ts +31 -34
  46. package/components/input/input-base.js +58 -83
  47. package/components/input/input-base.js.map +1 -1
  48. package/components/input/input.d.ts +18 -7
  49. package/components/input/input.js +34 -19
  50. package/components/input/input.js.map +1 -1
  51. package/components/mask-input/mask-input-base.d.ts +10 -4
  52. package/components/mask-input/mask-input-base.js +18 -14
  53. package/components/mask-input/mask-input-base.js.map +1 -1
  54. package/components/mask-input/mask-input.d.ts +9 -3
  55. package/components/mask-input/mask-input.js +26 -6
  56. package/components/mask-input/mask-input.js.map +1 -1
  57. package/components/mask-input/validators.js +1 -1
  58. package/components/mask-input/validators.js.map +1 -1
  59. package/components/theme-provider/theme-provider.d.ts +65 -0
  60. package/components/theme-provider/theme-provider.js +58 -0
  61. package/components/theme-provider/theme-provider.js.map +1 -0
  62. package/components/tile-manager/tile.js +6 -3
  63. package/components/tile-manager/tile.js.map +1 -1
  64. package/custom-elements.json +2136 -1596
  65. package/extras/chat-markdown-renderer.d.ts +72 -4
  66. package/extras/chat-markdown-renderer.js +19 -7
  67. package/extras/chat-markdown-renderer.js.map +1 -1
  68. package/igniteui-webcomponents.html-data.json +1 -1
  69. package/index.d.ts +3 -0
  70. package/index.js +2 -0
  71. package/index.js.map +1 -1
  72. package/package.json +1 -1
  73. package/themes/dark/bootstrap.css +1 -1
  74. package/themes/dark/fluent.css +1 -1
  75. package/themes/dark/indigo.css +1 -1
  76. package/themes/dark/material.css +1 -1
  77. package/themes/light/bootstrap.css +1 -1
  78. package/themes/light/fluent.css +1 -1
  79. package/themes/light/indigo.css +1 -1
  80. package/themes/light/material.css +1 -1
  81. package/theming/context.d.ts +36 -0
  82. package/theming/context.js +3 -0
  83. package/theming/context.js.map +1 -0
  84. package/theming/theming-controller.d.ts +7 -1
  85. package/theming/theming-controller.js +48 -12
  86. package/theming/theming-controller.js.map +1 -1
  87. package/theming/utils.d.ts +10 -0
  88. package/theming/utils.js +8 -42
  89. package/theming/utils.js.map +1 -1
  90. package/web-types.json +1 -1
@@ -12,14 +12,13 @@ import { addThemingController } from '../../../theming/theming-controller.js';
12
12
  import { addKeybindings } from '../../common/controllers/key-bindings.js';
13
13
  import { blazorIndirectRender } from '../../common/decorators/blazorIndirectRender.js';
14
14
  import { blazorSuppressComponent } from '../../common/decorators/blazorSuppressComponent.js';
15
- import { watch } from '../../common/decorators/watch.js';
16
15
  import { registerComponent } from '../../common/definitions/register.js';
17
16
  import { EventEmitterMixin } from '../../common/mixins/event-emitter.js';
18
17
  import { partMap } from '../../common/part-map.js';
19
18
  import { addSafeEventListener, chunk, first, last, take, } from '../../common/util.js';
20
19
  import { IgcCalendarBaseComponent } from '../base.js';
21
20
  import { areSameMonth, calendarRange, generateMonth, getViewElement, isDateInRanges, isNextMonth, isPreviousMonth, } from '../helpers.js';
22
- import { CalendarDay, daysInWeek } from '../model.js';
21
+ import { CalendarDay, DAYS_IN_WEEK } from '../model.js';
23
22
  import { all } from '../themes/days.js';
24
23
  import { styles } from '../themes/days-view.base.css.js';
25
24
  import { DateRangeType } from '../types.js';
@@ -30,230 +29,236 @@ let IgcDaysViewComponent = class IgcDaysViewComponent extends EventEmitterMixin(
30
29
  static register() {
31
30
  registerComponent(IgcDaysViewComponent_1);
32
31
  }
32
+ get _rangeStart() {
33
+ return this._hasValues ? first(this._values) : undefined;
34
+ }
35
+ get _rangeEnd() {
36
+ return this._hasValues ? last(this._values) : undefined;
37
+ }
33
38
  set rangePreviewDate(value) {
34
39
  this._rangePreviewDate = value ? CalendarDay.from(value) : undefined;
35
40
  }
36
41
  get rangePreviewDate() {
37
42
  return this._rangePreviewDate?.native;
38
43
  }
39
- get _weekdayOptions() {
40
- return { weekday: this.weekDayFormat };
41
- }
42
- datesChange() {
43
- this.dates = Array.from(generateMonth(this._activeDate, this._firstDayOfWeek));
44
- }
45
44
  constructor() {
46
45
  super();
46
+ this._dates = [];
47
47
  this.active = false;
48
48
  this.hideLeadingDays = false;
49
49
  this.hideTrailingDays = false;
50
50
  this.weekDayFormat = 'narrow';
51
- this._labelOptions = {
52
- weekday: 'long',
53
- year: 'numeric',
54
- month: 'long',
55
- day: 'numeric',
56
- };
57
- this._ariaWeekdayOptions = { weekday: 'long' };
58
51
  addThemingController(this, all);
59
- addKeybindings(this).setActivateHandler(this.handleInteraction);
60
- addSafeEventListener(this, 'click', this.handleInteraction);
52
+ addKeybindings(this).setActivateHandler(this._handleInteraction);
53
+ addSafeEventListener(this, 'click', this._handleInteraction);
61
54
  }
62
55
  connectedCallback() {
63
56
  super.connectedCallback();
64
57
  this.role = 'grid';
65
58
  }
66
- focusActiveDate(options) {
67
- this.activeDay.focus(options);
59
+ update(props) {
60
+ if (props.has('activeDate') || props.has('weekStart')) {
61
+ this._dates = Array.from(generateMonth(this._activeDate, this._firstDayOfWeek));
62
+ }
63
+ super.update(props);
68
64
  }
69
- handleInteraction(event) {
65
+ _handleInteraction(event) {
70
66
  const value = getViewElement(event);
71
67
  if (value !== -1) {
72
68
  const date = CalendarDay.from(new Date(value));
73
69
  if (this._rangePreviewDate) {
74
- this.setRangePreviewDate();
70
+ this._setRangePreviewDate();
75
71
  }
76
- if (this.selectDate(date)) {
72
+ if (this._selectDate(date)) {
77
73
  this.emitEvent('igcChange', { detail: date.native });
78
74
  }
79
75
  if (event.type === 'click') {
80
- event.stopPropagation();
81
76
  this.emitEvent('igcActiveDateChange', { detail: date.native });
82
77
  this._activeDate = date;
83
78
  }
84
79
  }
85
80
  }
86
- _selectMultiple(day) {
87
- const values = this._values;
88
- const idx = values.findIndex((v) => v.equalTo(day));
89
- idx < 0 ? values.push(day) : values.splice(idx, 1);
90
- values.sort((a, b) => a.timestamp - b.timestamp);
91
- this._values = Array.from(values);
92
- }
93
- _selectRange(day) {
94
- let values = this._values;
95
- if (values.length !== 1) {
96
- values = [day];
97
- }
98
- else {
99
- const beginning = first(values);
100
- if (beginning.equalTo(day)) {
101
- this._values = [];
102
- return;
103
- }
104
- values = beginning.greaterThan(day)
105
- ? Array.from(calendarRange({ start: day, end: beginning }))
106
- : Array.from(calendarRange({ start: beginning, end: day }));
107
- values.push(last(values).add('day', 1));
108
- }
109
- this._values = values.filter((v) => !isDateInRanges(v, this._disabledDates));
110
- }
111
- selectDate(value) {
81
+ _selectDate(value) {
112
82
  if (isDateInRanges(value, this._disabledDates)) {
113
83
  return false;
114
84
  }
115
- if (this._isSingle) {
116
- if (this._value?.equalTo(value)) {
117
- return false;
118
- }
119
- this._value = value;
85
+ switch (this.selection) {
86
+ case 'single':
87
+ if (this._value?.equalTo(value)) {
88
+ return false;
89
+ }
90
+ this._value = value;
91
+ break;
92
+ case 'multiple':
93
+ this._selectMultiple(value);
94
+ break;
95
+ case 'range':
96
+ this._selectRange(value);
97
+ break;
120
98
  }
121
- if (this._isMultiple) {
122
- this._selectMultiple(value);
99
+ return true;
100
+ }
101
+ _selectMultiple(day) {
102
+ const idx = this._values.findIndex((v) => v.equalTo(day));
103
+ if (idx < 0) {
104
+ this._values.push(day);
123
105
  }
124
- if (this._isRange) {
125
- this._selectRange(value);
106
+ else {
107
+ this._values.splice(idx, 1);
126
108
  }
127
- return true;
109
+ this._values = this._values.toSorted((a, b) => a.timestamp - b.timestamp);
128
110
  }
129
- isSelected(day) {
130
- if (isDateInRanges(day, this._disabledDates)) {
131
- return false;
111
+ _selectRange(day) {
112
+ if (this._values.length !== 1) {
113
+ this._values = [day];
114
+ return;
132
115
  }
133
- if (this._isSingle) {
134
- return !!this._value && this._value.equalTo(day);
116
+ const rangeStart = this._rangeStart;
117
+ if (rangeStart.equalTo(day)) {
118
+ this._values = [];
119
+ return;
135
120
  }
136
- if (!this._hasValues) {
121
+ const [start, end] = rangeStart.greaterThan(day)
122
+ ? [day, rangeStart]
123
+ : [rangeStart, day];
124
+ const range = Array.from(calendarRange({ start, end }));
125
+ range.push(last(range).add('day', 1));
126
+ this._values = range.filter((v) => !isDateInRanges(v, this._disabledDates));
127
+ }
128
+ _isSelected(day) {
129
+ if (isDateInRanges(day, this._disabledDates)) {
137
130
  return false;
138
131
  }
139
- if (this._isMultiple) {
140
- return isDateInRanges(day, [
141
- {
142
- type: DateRangeType.Specific,
143
- dateRange: this.values,
144
- },
145
- ]);
132
+ switch (this.selection) {
133
+ case 'single':
134
+ return Boolean(this._value?.equalTo(day));
135
+ case 'multiple':
136
+ return (this._hasValues &&
137
+ isDateInRanges(day, [
138
+ { type: DateRangeType.Specific, dateRange: this.values },
139
+ ]));
140
+ case 'range':
141
+ return (this._hasValues &&
142
+ isDateInRanges(day, [
143
+ {
144
+ type: DateRangeType.Between,
145
+ dateRange: [this._rangeStart.native, this._rangeEnd.native],
146
+ },
147
+ ]));
146
148
  }
147
- return isDateInRanges(day, [
148
- {
149
- type: DateRangeType.Between,
150
- dateRange: [first(this._values).native, last(this._values).native],
151
- },
152
- ]);
153
149
  }
154
- setRangePreviewDate(day) {
150
+ _setRangePreviewDate(day) {
155
151
  this._rangePreviewDate = day;
156
152
  this.emitEvent('igcRangePreviewDateChange', {
157
153
  detail: day ? day.native : undefined,
158
154
  });
159
155
  }
160
- changeRangePreview(day) {
156
+ _changeRangePreview(day) {
161
157
  if (this._values.length === 1 && !first(this._values).equalTo(day)) {
162
- this.setRangePreviewDate(day);
158
+ this._setRangePreviewDate(day);
163
159
  }
164
160
  }
165
- clearRangePreview() {
161
+ _clearRangePreview() {
166
162
  if (this._rangePreviewDate) {
167
- this.setRangePreviewDate();
163
+ this._setRangePreviewDate();
168
164
  }
169
165
  }
170
- isFirstInRange(day) {
171
- if (!this._isRange || !this._hasValues) {
172
- return false;
173
- }
174
- const target = this._rangePreviewDate?.lessThan(first(this._values))
166
+ _getEffectiveRangeStart() {
167
+ if (!this._rangeStart)
168
+ return undefined;
169
+ return this._rangePreviewDate?.lessThan(this._rangeStart)
175
170
  ? this._rangePreviewDate
176
- : first(this._values);
177
- return target.equalTo(day);
171
+ : this._rangeStart;
178
172
  }
179
- isLastInRange(day) {
180
- if (!this._isRange || !this._hasValues) {
181
- return false;
182
- }
183
- const target = this._rangePreviewDate?.greaterThan(last(this._values))
173
+ _getEffectiveRangeEnd() {
174
+ if (!this._rangeEnd)
175
+ return undefined;
176
+ return this._rangePreviewDate?.greaterThan(this._rangeEnd)
184
177
  ? this._rangePreviewDate
185
- : last(this._values);
186
- return target.equalTo(day);
178
+ : this._rangeEnd;
179
+ }
180
+ _isFirstInRange(day) {
181
+ const effectiveStart = this._getEffectiveRangeStart();
182
+ return this._isRange && Boolean(effectiveStart?.equalTo(day));
187
183
  }
188
- isRangeDate(day) {
189
- const isSingleRange = this._values.length === 1;
190
- if (!this._hasValues || (isSingleRange && !this._rangePreviewDate)) {
184
+ _isLastInRange(day) {
185
+ const effectiveEnd = this._getEffectiveRangeEnd();
186
+ return this._isRange && Boolean(effectiveEnd?.equalTo(day));
187
+ }
188
+ _isRangeDate(day) {
189
+ if (!this._hasValues)
191
190
  return false;
192
- }
193
- const min = first(this._values);
194
- const max = isSingleRange ? this._rangePreviewDate : last(this._values);
191
+ const isSingleSelection = this._values.length === 1;
192
+ if (isSingleSelection && !this._rangePreviewDate)
193
+ return false;
194
+ const max = isSingleSelection ? this._rangePreviewDate : this._rangeEnd;
195
195
  return isDateInRanges(day, [
196
196
  {
197
197
  type: DateRangeType.Between,
198
- dateRange: [min.native, max.native],
198
+ dateRange: [this._rangeStart.native, max.native],
199
199
  },
200
200
  ]);
201
201
  }
202
- isRangePreview(day) {
203
- if (!(this._hasValues && this._rangePreviewDate)) {
202
+ _isRangePreview(day) {
203
+ if (!this._hasValues || !this._rangePreviewDate)
204
204
  return false;
205
- }
206
205
  return isDateInRanges(day, [
207
206
  {
208
207
  type: DateRangeType.Between,
209
- dateRange: [first(this._values).native, this._rangePreviewDate.native],
208
+ dateRange: [this._rangeStart.native, this._rangePreviewDate.native],
210
209
  },
211
210
  ]);
212
211
  }
213
- intlFormatDay(day) {
214
- const fmt = getDateFormatter().getIntlFormatter(this.locale, this._labelOptions);
212
+ _intlFormatDay(day) {
213
+ const fmt = getDateFormatter().getIntlFormatter(this.locale, {
214
+ weekday: 'long',
215
+ year: 'numeric',
216
+ month: 'long',
217
+ day: 'numeric',
218
+ });
215
219
  if (this._rangePreviewDate?.equalTo(day)) {
216
220
  return fmt.formatRange(first(this._values).native, this._rangePreviewDate.native);
217
221
  }
218
- if (this.isFirstInRange(day) || this.isLastInRange(day)) {
222
+ if (this._isFirstInRange(day) || this._isLastInRange(day)) {
219
223
  return fmt.formatRange(first(this._values).native, last(this._values).native);
220
224
  }
221
225
  return fmt.format(day.native);
222
226
  }
223
- getDayHandlers(day) {
224
- const range = this._isRange;
225
- const changePreview = range
226
- ? this.changeRangePreview.bind(this, day)
227
- : nothing;
228
- const clearPreview = range ? this.clearRangePreview : nothing;
229
- return { changePreview, clearPreview };
227
+ _getDayHandlers(day) {
228
+ if (!this._isRange) {
229
+ return { changePreview: nothing, clearPreview: nothing };
230
+ }
231
+ return {
232
+ changePreview: this._changeRangePreview.bind(this, day),
233
+ clearPreview: this._clearRangePreview.bind(this),
234
+ };
230
235
  }
231
- getDayProperties(day, today) {
232
- const isRange = this._isRange;
233
- const disabled = isDateInRanges(day, this._disabledDates);
234
- const hiddenLeading = this.hideLeadingDays && isPreviousMonth(day, this._activeDate);
235
- const hiddenTrailing = this.hideTrailingDays && isNextMonth(day, this._activeDate);
236
- const hidden = hiddenLeading || hiddenTrailing;
236
+ _getDayProperties(day, today) {
237
237
  const inactive = !areSameMonth(day, this._activeDate);
238
+ const disabled = isDateInRanges(day, this._disabledDates);
239
+ const hidden = (this.hideLeadingDays && isPreviousMonth(day, this._activeDate)) ||
240
+ (this.hideTrailingDays && isNextMonth(day, this._activeDate));
238
241
  return {
239
242
  disabled: disabled || hidden,
240
- first: this.isFirstInRange(day),
241
- last: this.isLastInRange(day),
242
- range: isRange && this.isRangeDate(day),
243
- preview: isRange && this.isRangePreview(day),
243
+ first: this._isFirstInRange(day),
244
+ last: this._isLastInRange(day),
245
+ range: this._isRange && this._isRangeDate(day),
246
+ preview: this._isRange && this._isRangePreview(day),
244
247
  current: !inactive && day.equalTo(today),
245
248
  inactive,
246
249
  hidden,
247
250
  weekend: day.weekend,
248
- single: !isRange,
249
- selected: !disabled && this.isSelected(day),
250
- special: isDateInRanges(day, this._specialDates) && !inactive,
251
+ single: !this._isRange,
252
+ selected: !disabled && this._isSelected(day),
253
+ special: !inactive && isDateInRanges(day, this._specialDates),
251
254
  };
252
255
  }
253
- renderDay(day, today) {
254
- const ariaLabel = this.intlFormatDay(day);
255
- const { changePreview, clearPreview } = this.getDayHandlers(day);
256
- const props = this.getDayProperties(day, today);
256
+ focusActiveDate(options) {
257
+ this._activeDay?.focus(options);
258
+ }
259
+ _renderDayWithProps(day, props) {
260
+ const ariaLabel = this._intlFormatDay(day);
261
+ const { changePreview, clearPreview } = this._getDayHandlers(day);
257
262
  return html `
258
263
  <span part=${partMap({ date: true, ...props })}>
259
264
  <span
@@ -266,15 +271,15 @@ let IgcDaysViewComponent = class IgcDaysViewComponent extends EventEmitterMixin(
266
271
  tabindex=${day.equalTo(this._activeDate) ? 0 : -1}
267
272
  @focus=${changePreview}
268
273
  @blur=${clearPreview}
269
- @mouseenter=${changePreview}
270
- @mouseleave=${clearPreview}
274
+ @pointerenter=${changePreview}
275
+ @pointerleave=${clearPreview}
271
276
  >
272
277
  ${day.date}
273
278
  </span>
274
279
  </span>
275
280
  `;
276
281
  }
277
- renderHeaderWeekNumber() {
282
+ _renderHeaderWeekNumber() {
278
283
  return html `
279
284
  <span role="columnheader" part="label week-number first">
280
285
  <span part="week-number-inner first">
@@ -283,7 +288,7 @@ let IgcDaysViewComponent = class IgcDaysViewComponent extends EventEmitterMixin(
283
288
  </span>
284
289
  `;
285
290
  }
286
- renderWeekNumber(start, last) {
291
+ _renderWeekNumber(start, last) {
287
292
  return html `
288
293
  <span role="rowheader" part=${partMap({ 'week-number': true, last })}>
289
294
  <span part=${partMap({ 'week-number-inner': true, last })}>
@@ -292,12 +297,16 @@ let IgcDaysViewComponent = class IgcDaysViewComponent extends EventEmitterMixin(
292
297
  </span>
293
298
  `;
294
299
  }
295
- renderHeaders() {
296
- const label = getDateFormatter().getIntlFormatter(this.locale, this._weekdayOptions);
297
- const aria = getDateFormatter().getIntlFormatter(this.locale, this._ariaWeekdayOptions);
298
- const days = take(generateMonth(this._activeDate, this._firstDayOfWeek), daysInWeek);
300
+ _renderHeaders() {
301
+ const label = getDateFormatter().getIntlFormatter(this.locale, {
302
+ weekday: this.weekDayFormat,
303
+ });
304
+ const aria = getDateFormatter().getIntlFormatter(this.locale, {
305
+ weekday: 'long',
306
+ });
307
+ const days = take(generateMonth(this._activeDate, this._firstDayOfWeek), DAYS_IN_WEEK);
299
308
  const weekNumber = this.showWeekNumbers
300
- ? this.renderHeaderWeekNumber()
309
+ ? this._renderHeaderWeekNumber()
301
310
  : nothing;
302
311
  const headers = days.map((day) => html `
303
312
  <span
@@ -312,35 +321,39 @@ let IgcDaysViewComponent = class IgcDaysViewComponent extends EventEmitterMixin(
312
321
  <div role="row" part="days-row first">${weekNumber}${headers}</div>
313
322
  `;
314
323
  }
315
- *renderWeeks() {
324
+ *_renderWeeks() {
316
325
  const today = CalendarDay.today;
317
- const weeks = Array.from(chunk(this.dates, daysInWeek));
318
- const last = weeks.length - 1;
326
+ const weeks = Array.from(chunk(this._dates, DAYS_IN_WEEK));
327
+ const lastIndex = weeks.length - 1;
328
+ const dayPropertiesMap = new Map();
329
+ for (const day of this._dates) {
330
+ dayPropertiesMap.set(day.timestamp, this._getDayProperties(day, today));
331
+ }
319
332
  for (const [idx, week] of weeks.entries()) {
320
- let hidden = false;
321
- if (idx === 0 || idx === last) {
322
- hidden = week.every((day) => this.getDayProperties(day, today).hidden);
323
- }
333
+ const isEdgeWeek = idx === 0 || idx === lastIndex;
334
+ const isLast = idx === lastIndex;
335
+ const hidden = isEdgeWeek &&
336
+ week.every((day) => dayPropertiesMap.get(day.timestamp).hidden);
324
337
  yield html `
325
338
  <div role="row" part="days-row" aria-hidden=${hidden}>
326
339
  ${this.showWeekNumbers
327
- ? this.renderWeekNumber(week[0], idx === last)
340
+ ? this._renderWeekNumber(week[0], isLast)
328
341
  : nothing}
329
- ${week.map((day) => this.renderDay(day, today))}
342
+ ${week.map((day) => this._renderDayWithProps(day, dayPropertiesMap.get(day.timestamp)))}
330
343
  </div>
331
344
  `;
332
345
  }
333
346
  }
334
347
  render() {
335
- return html `${this.renderHeaders()}${this.renderWeeks()}`;
348
+ return html `${this._renderHeaders()}${this._renderWeeks()}`;
336
349
  }
337
350
  };
338
351
  __decorate([
339
352
  state()
340
- ], IgcDaysViewComponent.prototype, "dates", void 0);
353
+ ], IgcDaysViewComponent.prototype, "_dates", void 0);
341
354
  __decorate([
342
355
  query('[tabindex="0"]')
343
- ], IgcDaysViewComponent.prototype, "activeDay", void 0);
356
+ ], IgcDaysViewComponent.prototype, "_activeDay", void 0);
344
357
  __decorate([
345
358
  property({ type: Boolean })
346
359
  ], IgcDaysViewComponent.prototype, "active", void 0);
@@ -356,10 +369,6 @@ __decorate([
356
369
  __decorate([
357
370
  property({ attribute: 'week-day-format' })
358
371
  ], IgcDaysViewComponent.prototype, "weekDayFormat", void 0);
359
- __decorate([
360
- watch('weekStart'),
361
- watch('activeDate')
362
- ], IgcDaysViewComponent.prototype, "datesChange", null);
363
372
  IgcDaysViewComponent = IgcDaysViewComponent_1 = __decorate([
364
373
  blazorSuppressComponent,
365
374
  blazorIndirectRender
@@ -1 +1 @@
1
- {"version":3,"file":"days-view.js","sourceRoot":"","sources":["../../../../src/components/calendar/days-view/days-view.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,GACL,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,WAAW,EACX,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,aAAa,EAAqC,MAAM,aAAa,CAAC;AAuBhE,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,iBAAiB,CAGjE,wBAAwB,CAAC;;aACF,YAAO,GAAG,eAAe,AAAlB,CAAmB;aACnC,WAAM,GAAG,MAAM,AAAT,CAAU;IAGvB,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,sBAAoB,CAAC,CAAC;IAC1C,CAAC;IA4BD,IAAW,gBAAgB,CAAC,KAAK;QAC/B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,CAAC;IAED,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACxC,CAAC;IASD,IAAY,eAAe;QACzB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;IACzC,CAAC;IAYS,WAAW;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CACrB,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CACtD,CAAC;IACJ,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QAtDH,WAAM,GAAG,KAAK,CAAC;QAOf,oBAAe,GAAG,KAAK,CAAC;QAOxB,qBAAgB,GAAG,KAAK,CAAC;QAiBzB,kBAAa,GAAgC,QAAQ,CAAC;QAMrD,kBAAa,GAA+B;YAClD,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,SAAS;SACf,CAAC;QACM,wBAAmB,GAA+B,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAa5E,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChC,cAAc,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChE,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9D,CAAC;IAEe,iBAAiB;QAC/B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;IACrB,CAAC;IAGM,eAAe,CAAC,OAAsB;QAC3C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAES,iBAAiB,CAAC,KAAY;QACtC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAE/C,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAE3B,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,GAAgB;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpD,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAEO,YAAY,CAAC,GAAgB;QACnC,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAE1B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAEhC,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC;gBACjC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC3D,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAE9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAC/C,CAAC;IACJ,CAAC;IAEO,UAAU,CAAC,KAAkB;QACnC,IAAI,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,GAAgB;QACjC,IAAI,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,cAAc,CAAC,GAAG,EAAE;gBACzB;oBACE,IAAI,EAAE,aAAa,CAAC,QAAQ;oBAC5B,SAAS,EAAE,IAAI,CAAC,MAAM;iBACvB;aACF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,cAAc,CAAC,GAAG,EAAE;YACzB;gBACE,IAAI,EAAE,aAAa,CAAC,OAAO;gBAC3B,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;aACnE;SACF,CAAC,CAAC;IACL,CAAC;IAGO,mBAAmB,CAAC,GAAiB;QAC3C,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,2BAA2B,EAAE;YAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SACrC,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,GAAgB;QACzC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAIO,cAAc,CAAC,GAAgB;QACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC,CAAC,IAAI,CAAC,iBAAiB;YACxB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAExB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAEO,aAAa,CAAC,GAAgB;QACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpE,CAAC,CAAC,IAAI,CAAC,iBAAiB;YACxB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEvB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAEO,WAAW,CAAC,GAAgB;QAClC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;QAEhD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACnE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzE,OAAO,cAAc,CAAC,GAAG,EAAE;YACzB;gBACE,IAAI,EAAE,aAAa,CAAC,OAAO;gBAC3B,SAAS,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;aACpC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,GAAgB;QACrC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,cAAc,CAAC,GAAG,EAAE;YACzB;gBACE,IAAI,EAAE,aAAa,CAAC,OAAO;gBAC3B,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;aACvE;SACF,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,GAAgB;QACpC,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC,gBAAgB,CAC7C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,aAAa,CACnB,CAAC;QAGF,IAAI,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,OAAO,GAAG,CAAC,WAAW,CACpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAC1B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAC9B,CAAC;QACJ,CAAC;QAGD,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,GAAG,CAAC,WAAW,CACpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAC1B,CAAC;QACJ,CAAC;QAGD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAEO,cAAc,CAAC,GAAgB;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,MAAM,aAAa,GAAG,KAAK;YACzB,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC;QACZ,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC;QAE9D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;IACzC,CAAC;IAEO,gBAAgB,CAAC,GAAgB,EAAE,KAAkB;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAE1D,MAAM,aAAa,GACjB,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,cAAc,GAClB,IAAI,CAAC,gBAAgB,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9D,MAAM,MAAM,GAAG,aAAa,IAAI,cAAc,CAAC;QAC/C,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAEtD,OAAO;YACL,QAAQ,EAAE,QAAQ,IAAI,MAAM;YAC5B,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAC/B,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC7B,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YACvC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAC5C,OAAO,EAAE,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;YACxC,QAAQ;YACR,MAAM;YACN,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,CAAC,OAAO;YAChB,QAAQ,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAC3C,OAAO,EAAE,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ;SAC9D,CAAC;IACJ,CAAC;IAES,SAAS,CAAC,GAAgB,EAAE,KAAkB;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAEjE,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAEhD,OAAO,IAAI,CAAA;mBACI,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;;;iBAGnC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;uBACnC,SAAS;0BACN,KAAK,CAAC,QAAQ;0BACd,KAAK,CAAC,QAAQ;uBACjB,GAAG,CAAC,SAAS;qBACf,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;mBACxC,aAAa;kBACd,YAAY;wBACN,aAAa;wBACb,YAAY;;YAExB,GAAG,CAAC,IAAI;;;KAGf,CAAC;IACJ,CAAC;IAES,sBAAsB;QAC9B,OAAO,IAAI,CAAA;;;YAGH,IAAI,CAAC,eAAe,CAAC,SAAS;;;KAGrC,CAAC;IACJ,CAAC;IAES,gBAAgB,CAAC,KAAkB,EAAE,IAAa;QAC1D,OAAO,IAAI,CAAA;oCACqB,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;qBACrD,OAAO,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI;;;KAGjB,CAAC;IACJ,CAAC;IAES,aAAa;QACrB,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC,gBAAgB,CAC/C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,eAAe,CACrB,CAAC;QACF,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC,gBAAgB,CAC9C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,mBAAmB,CACzB,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CACf,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,EACrD,UAAU,CACX,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe;YACrC,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAC/B,CAAC,CAAC,OAAO,CAAC;QAEZ,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAA;;;;uBAII,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;;qCAET,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;;OAEtD,CACF,CAAC;QAEF,OAAO,IAAI,CAAA;8CAC+B,UAAU,GAAG,OAAO;KAC7D,CAAC;IACJ,CAAC;IAES,CAAC,WAAW;QACpB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAE9B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1C,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBAC9B,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,IAAI,CAAA;sDACsC,MAAM;YAChD,IAAI,CAAC,eAAe;gBACpB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;gBAC9C,CAAC,CAAC,OAAO;YACT,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;;OAElD,CAAC;QACJ,CAAC;IACH,CAAC;IAEkB,MAAM;QACvB,OAAO,IAAI,CAAA,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IAC5D,CAAC;;AAjbO;IADP,KAAK,EAAE;mDACsB;AAGtB;IADP,KAAK,CAAC,gBAAgB,CAAC;uDACQ;AAIzB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oDACN;AAOf;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;6DAC7B;AAOxB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;8DAC7B;AAIhC;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;4DAG9B;AAWM;IADN,QAAQ,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;2DACkB;AAgBnD;IAFT,KAAK,CAAC,WAAW,CAAC;IAClB,KAAK,CAAC,YAAY,CAAC;uDAKnB;AAvEkB,oBAAoB;IAFxC,uBAAuB;IACvB,oBAAoB;GACA,oBAAoB,CA+bxC;eA/boB,oBAAoB","sourcesContent":["import { getDateFormatter } from 'igniteui-i18n-core';\nimport { html, nothing } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { addThemingController } from '../../../theming/theming-controller.js';\nimport { addKeybindings } from '../../common/controllers/key-bindings.js';\nimport { blazorIndirectRender } from '../../common/decorators/blazorIndirectRender.js';\nimport { blazorSuppressComponent } from '../../common/decorators/blazorSuppressComponent.js';\nimport { watch } from '../../common/decorators/watch.js';\nimport { registerComponent } from '../../common/definitions/register.js';\nimport type { Constructor } from '../../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../../common/mixins/event-emitter.js';\nimport { partMap } from '../../common/part-map.js';\nimport {\n addSafeEventListener,\n chunk,\n first,\n last,\n take,\n} from '../../common/util.js';\nimport { IgcCalendarBaseComponent } from '../base.js';\nimport {\n areSameMonth,\n calendarRange,\n generateMonth,\n getViewElement,\n isDateInRanges,\n isNextMonth,\n isPreviousMonth,\n} from '../helpers.js';\nimport { CalendarDay, daysInWeek } from '../model.js';\nimport { all } from '../themes/days.js';\nimport { styles } from '../themes/days-view.base.css.js';\nimport { DateRangeType, type IgcCalendarComponentEventMap } from '../types.js';\n\nexport interface IgcDaysViewEventMap extends IgcCalendarComponentEventMap {\n igcActiveDateChange: CustomEvent<Date>;\n igcRangePreviewDateChange: CustomEvent<Date>;\n}\n\n/**\n * Instantiate a days view as a separate component in the calendar.\n *\n * @element igc-days-view\n *\n * @fires igcActiveDateChange - Emitted when the active date changes.\n * @fires igcRangePreviewDateChange - Emitted when the range preview date changes.\n *\n * @csspart days-row - The days row container.\n * @csspart label - The label container.\n * @csspart label-inner - The inner label container.\n * @csspart week-number - The week number container.\n * @csspart week-number-inner - The inner week number container.\n */\n@blazorSuppressComponent\n@blazorIndirectRender\nexport default class IgcDaysViewComponent extends EventEmitterMixin<\n IgcDaysViewEventMap,\n Constructor<IgcCalendarBaseComponent>\n>(IgcCalendarBaseComponent) {\n public static readonly tagName = 'igc-days-view';\n public static styles = styles;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(IgcDaysViewComponent);\n }\n\n @state()\n private dates!: CalendarDay[];\n\n @query('[tabindex=\"0\"]')\n private activeDay!: HTMLElement;\n\n /** The active state of the component. */\n @property({ type: Boolean })\n public active = false;\n\n /**\n * Whether to show leading days which do not belong to the current month.\n * @attr hide-leading-days\n */\n @property({ type: Boolean, attribute: 'hide-leading-days' })\n public hideLeadingDays = false;\n\n /**\n * Whether to show trailing days which do not belong to the current month.\n * @attr hide-trailing-days\n */\n @property({ type: Boolean, attribute: 'hide-trailing-days' })\n public hideTrailingDays = false;\n\n /** The range preview date. */\n @property({ attribute: false })\n public set rangePreviewDate(value) {\n this._rangePreviewDate = value ? CalendarDay.from(value) : undefined;\n }\n\n public get rangePreviewDate() {\n return this._rangePreviewDate?.native;\n }\n\n /**\n * The format of the days. Defaults to narrow.\n * @attr week-day-format\n */\n @property({ attribute: 'week-day-format' })\n public weekDayFormat: 'long' | 'short' | 'narrow' = 'narrow';\n\n private get _weekdayOptions(): Intl.DateTimeFormatOptions {\n return { weekday: this.weekDayFormat };\n }\n\n private _labelOptions: Intl.DateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n };\n private _ariaWeekdayOptions: Intl.DateTimeFormatOptions = { weekday: 'long' };\n\n @watch('weekStart')\n @watch('activeDate')\n protected datesChange() {\n this.dates = Array.from(\n generateMonth(this._activeDate, this._firstDayOfWeek)\n );\n }\n\n constructor() {\n super();\n\n addThemingController(this, all);\n addKeybindings(this).setActivateHandler(this.handleInteraction);\n addSafeEventListener(this, 'click', this.handleInteraction);\n }\n\n public override connectedCallback() {\n super.connectedCallback();\n this.role = 'grid';\n }\n\n /** Focuses the active date. */\n public focusActiveDate(options?: FocusOptions) {\n this.activeDay.focus(options);\n }\n\n protected handleInteraction(event: Event) {\n const value = getViewElement(event);\n\n if (value !== -1) {\n const date = CalendarDay.from(new Date(value));\n\n if (this._rangePreviewDate) {\n this.setRangePreviewDate();\n }\n\n if (this.selectDate(date)) {\n this.emitEvent('igcChange', { detail: date.native });\n }\n\n if (event.type === 'click') {\n // XXX: Why ?\n event.stopPropagation();\n this.emitEvent('igcActiveDateChange', { detail: date.native });\n this._activeDate = date;\n }\n }\n }\n\n private _selectMultiple(day: CalendarDay) {\n const values = this._values;\n const idx = values.findIndex((v) => v.equalTo(day));\n\n idx < 0 ? values.push(day) : values.splice(idx, 1);\n values.sort((a, b) => a.timestamp - b.timestamp);\n this._values = Array.from(values);\n }\n\n private _selectRange(day: CalendarDay) {\n let values = this._values;\n\n if (values.length !== 1) {\n values = [day];\n } else {\n const beginning = first(values);\n\n if (beginning.equalTo(day)) {\n this._values = [];\n return;\n }\n\n values = beginning.greaterThan(day)\n ? Array.from(calendarRange({ start: day, end: beginning }))\n : Array.from(calendarRange({ start: beginning, end: day }));\n\n values.push(last(values).add('day', 1));\n }\n\n this._values = values.filter(\n (v) => !isDateInRanges(v, this._disabledDates)\n );\n }\n\n private selectDate(value: CalendarDay) {\n if (isDateInRanges(value, this._disabledDates)) {\n return false;\n }\n\n if (this._isSingle) {\n if (this._value?.equalTo(value)) {\n return false;\n }\n this._value = value;\n }\n\n if (this._isMultiple) {\n this._selectMultiple(value);\n }\n\n if (this._isRange) {\n this._selectRange(value);\n }\n\n return true;\n }\n\n private isSelected(day: CalendarDay) {\n if (isDateInRanges(day, this._disabledDates)) {\n return false;\n }\n\n if (this._isSingle) {\n return !!this._value && this._value.equalTo(day);\n }\n\n if (!this._hasValues) {\n return false;\n }\n\n if (this._isMultiple) {\n return isDateInRanges(day, [\n {\n type: DateRangeType.Specific,\n dateRange: this.values,\n },\n ]);\n }\n return isDateInRanges(day, [\n {\n type: DateRangeType.Between,\n dateRange: [first(this._values).native, last(this._values).native],\n },\n ]);\n }\n\n // XXX: Range interaction\n private setRangePreviewDate(day?: CalendarDay) {\n this._rangePreviewDate = day;\n this.emitEvent('igcRangePreviewDateChange', {\n detail: day ? day.native : undefined,\n });\n }\n\n private changeRangePreview(day: CalendarDay) {\n if (this._values.length === 1 && !first(this._values).equalTo(day)) {\n this.setRangePreviewDate(day);\n }\n }\n\n private clearRangePreview() {\n if (this._rangePreviewDate) {\n this.setRangePreviewDate();\n }\n }\n\n // XXX: Ranges\n\n private isFirstInRange(day: CalendarDay) {\n if (!this._isRange || !this._hasValues) {\n return false;\n }\n\n const target = this._rangePreviewDate?.lessThan(first(this._values))\n ? this._rangePreviewDate\n : first(this._values);\n\n return target.equalTo(day);\n }\n\n private isLastInRange(day: CalendarDay) {\n if (!this._isRange || !this._hasValues) {\n return false;\n }\n\n const target = this._rangePreviewDate?.greaterThan(last(this._values))\n ? this._rangePreviewDate\n : last(this._values);\n\n return target.equalTo(day);\n }\n\n private isRangeDate(day: CalendarDay) {\n const isSingleRange = this._values.length === 1;\n\n if (!this._hasValues || (isSingleRange && !this._rangePreviewDate)) {\n return false;\n }\n\n const min = first(this._values);\n const max = isSingleRange ? this._rangePreviewDate! : last(this._values);\n\n return isDateInRanges(day, [\n {\n type: DateRangeType.Between,\n dateRange: [min.native, max.native],\n },\n ]);\n }\n\n private isRangePreview(day: CalendarDay) {\n if (!(this._hasValues && this._rangePreviewDate)) {\n return false;\n }\n\n return isDateInRanges(day, [\n {\n type: DateRangeType.Between,\n dateRange: [first(this._values).native, this._rangePreviewDate.native],\n },\n ]);\n }\n\n private intlFormatDay(day: CalendarDay) {\n const fmt = getDateFormatter().getIntlFormatter(\n this.locale,\n this._labelOptions\n );\n\n // Range selection in progress\n if (this._rangePreviewDate?.equalTo(day)) {\n return fmt.formatRange(\n first(this._values).native,\n this._rangePreviewDate.native\n );\n }\n\n // Range selection finished\n if (this.isFirstInRange(day) || this.isLastInRange(day)) {\n return fmt.formatRange(\n first(this._values).native,\n last(this._values).native\n );\n }\n\n // Default\n return fmt.format(day.native);\n }\n\n private getDayHandlers(day: CalendarDay) {\n const range = this._isRange;\n const changePreview = range\n ? this.changeRangePreview.bind(this, day)\n : nothing;\n const clearPreview = range ? this.clearRangePreview : nothing;\n\n return { changePreview, clearPreview };\n }\n\n private getDayProperties(day: CalendarDay, today: CalendarDay) {\n const isRange = this._isRange;\n const disabled = isDateInRanges(day, this._disabledDates);\n\n const hiddenLeading =\n this.hideLeadingDays && isPreviousMonth(day, this._activeDate);\n const hiddenTrailing =\n this.hideTrailingDays && isNextMonth(day, this._activeDate);\n\n const hidden = hiddenLeading || hiddenTrailing;\n const inactive = !areSameMonth(day, this._activeDate);\n\n return {\n disabled: disabled || hidden,\n first: this.isFirstInRange(day),\n last: this.isLastInRange(day),\n range: isRange && this.isRangeDate(day),\n preview: isRange && this.isRangePreview(day),\n current: !inactive && day.equalTo(today),\n inactive,\n hidden,\n weekend: day.weekend,\n single: !isRange,\n selected: !disabled && this.isSelected(day),\n special: isDateInRanges(day, this._specialDates) && !inactive,\n };\n }\n\n protected renderDay(day: CalendarDay, today: CalendarDay) {\n const ariaLabel = this.intlFormatDay(day);\n const { changePreview, clearPreview } = this.getDayHandlers(day);\n\n const props = this.getDayProperties(day, today);\n\n return html`\n <span part=${partMap({ date: true, ...props })}>\n <span\n role=\"gridcell\"\n part=${partMap({ 'date-inner': true, ...props })}\n aria-label=${ariaLabel}\n aria-disabled=${props.disabled}\n aria-selected=${props.selected}\n data-value=${day.timestamp}\n tabindex=${day.equalTo(this._activeDate) ? 0 : -1}\n @focus=${changePreview}\n @blur=${clearPreview}\n @mouseenter=${changePreview}\n @mouseleave=${clearPreview}\n >\n ${day.date}\n </span>\n </span>\n `;\n }\n\n protected renderHeaderWeekNumber() {\n return html`\n <span role=\"columnheader\" part=\"label week-number first\">\n <span part=\"week-number-inner first\">\n ${this.resourceStrings.weekLabel}\n </span>\n </span>\n `;\n }\n\n protected renderWeekNumber(start: CalendarDay, last: boolean) {\n return html`\n <span role=\"rowheader\" part=${partMap({ 'week-number': true, last })}>\n <span part=${partMap({ 'week-number-inner': true, last })}>\n ${start.week}\n </span>\n </span>\n `;\n }\n\n protected renderHeaders() {\n const label = getDateFormatter().getIntlFormatter(\n this.locale,\n this._weekdayOptions\n );\n const aria = getDateFormatter().getIntlFormatter(\n this.locale,\n this._ariaWeekdayOptions\n );\n const days = take(\n generateMonth(this._activeDate, this._firstDayOfWeek),\n daysInWeek\n );\n\n const weekNumber = this.showWeekNumbers\n ? this.renderHeaderWeekNumber()\n : nothing;\n\n const headers = days.map(\n (day) => html`\n <span\n role=\"columnheader\"\n part=\"label\"\n aria-label=${aria.format(day.native)}\n >\n <span part=\"label-inner\">${label.format(day.native)}</span>\n </span>\n `\n );\n\n return html`\n <div role=\"row\" part=\"days-row first\">${weekNumber}${headers}</div>\n `;\n }\n\n protected *renderWeeks() {\n const today = CalendarDay.today;\n const weeks = Array.from(chunk(this.dates, daysInWeek));\n const last = weeks.length - 1;\n\n for (const [idx, week] of weeks.entries()) {\n let hidden = false;\n if (idx === 0 || idx === last) {\n hidden = week.every((day) => this.getDayProperties(day, today).hidden);\n }\n yield html`\n <div role=\"row\" part=\"days-row\" aria-hidden=${hidden}>\n ${this.showWeekNumbers\n ? this.renderWeekNumber(week[0], idx === last)\n : nothing}\n ${week.map((day) => this.renderDay(day, today))}\n </div>\n `;\n }\n }\n\n protected override render() {\n return html`${this.renderHeaders()}${this.renderWeeks()}`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-days-view': IgcDaysViewComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"days-view.js","sourceRoot":"","sources":["../../../../src/components/calendar/days-view/days-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { getDateFormatter } from 'igniteui-i18n-core';\nimport { html, nothing, type PropertyValues, type TemplateResult } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { addThemingController } from '../../../theming/theming-controller.js';\nimport { addKeybindings } from '../../common/controllers/key-bindings.js';\nimport { blazorIndirectRender } from '../../common/decorators/blazorIndirectRender.js';\nimport { blazorSuppressComponent } from '../../common/decorators/blazorSuppressComponent.js';\nimport { registerComponent } from '../../common/definitions/register.js';\nimport type { Constructor } from '../../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../../common/mixins/event-emitter.js';\nimport { partMap } from '../../common/part-map.js';\nimport {\n addSafeEventListener,\n chunk,\n first,\n last,\n take,\n} from '../../common/util.js';\nimport { IgcCalendarBaseComponent } from '../base.js';\nimport {\n areSameMonth,\n calendarRange,\n generateMonth,\n getViewElement,\n isDateInRanges,\n isNextMonth,\n isPreviousMonth,\n} from '../helpers.js';\nimport { CalendarDay, DAYS_IN_WEEK } from '../model.js';\nimport { all } from '../themes/days.js';\nimport { styles } from '../themes/days-view.base.css.js';\nimport { DateRangeType, type IgcCalendarComponentEventMap } from '../types.js';\n\nexport interface IgcDaysViewEventMap extends IgcCalendarComponentEventMap {\n igcActiveDateChange: CustomEvent<Date>;\n igcRangePreviewDateChange: CustomEvent<Date>;\n}\n\ninterface DayProperties {\n disabled: boolean;\n first: boolean;\n last: boolean;\n range: boolean;\n preview: boolean;\n current: boolean;\n inactive: boolean;\n hidden: boolean;\n weekend: boolean;\n single: boolean;\n selected: boolean;\n special: boolean;\n}\n\n/**\n * Instantiate a days view as a separate component in the calendar.\n *\n * @element igc-days-view\n *\n * @fires igcActiveDateChange - Emitted when the active date changes.\n * @fires igcRangePreviewDateChange - Emitted when the range preview date changes.\n *\n * @csspart days-row - The days row container.\n * @csspart label - The label container.\n * @csspart label-inner - The inner label container.\n * @csspart week-number - The week number container.\n * @csspart week-number-inner - The inner week number container.\n */\n@blazorSuppressComponent\n@blazorIndirectRender\nexport default class IgcDaysViewComponent extends EventEmitterMixin<\n IgcDaysViewEventMap,\n Constructor<IgcCalendarBaseComponent>\n>(IgcCalendarBaseComponent) {\n public static readonly tagName = 'igc-days-view';\n public static styles = styles;\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDaysViewComponent);\n }\n\n //#region Internal properties and state\n\n @state()\n private _dates: CalendarDay[] = [];\n\n @query('[tabindex=\"0\"]')\n private _activeDay?: HTMLElement;\n\n /** Returns the first date in the current range selection. */\n private get _rangeStart(): CalendarDay | undefined {\n return this._hasValues ? first(this._values) : undefined;\n }\n\n /** Returns the last date in the current range selection. */\n private get _rangeEnd(): CalendarDay | undefined {\n return this._hasValues ? last(this._values) : undefined;\n }\n\n //#endregion\n\n //#region Public attributes and properties\n\n /** The active state of the component. */\n @property({ type: Boolean })\n public active = false;\n\n /**\n * Whether to show leading days which do not belong to the current month.\n * @attr hide-leading-days\n */\n @property({ type: Boolean, attribute: 'hide-leading-days' })\n public hideLeadingDays = false;\n\n /**\n * Whether to show trailing days which do not belong to the current month.\n * @attr hide-trailing-days\n */\n @property({ type: Boolean, attribute: 'hide-trailing-days' })\n public hideTrailingDays = false;\n\n /** The range preview date. */\n @property({ attribute: false })\n public set rangePreviewDate(value: Date | undefined) {\n this._rangePreviewDate = value ? CalendarDay.from(value) : undefined;\n }\n\n public get rangePreviewDate(): Date | undefined {\n return this._rangePreviewDate?.native;\n }\n\n /**\n * The format of the days. Defaults to narrow.\n * @attr week-day-format\n */\n @property({ attribute: 'week-day-format' })\n public weekDayFormat: 'long' | 'short' | 'narrow' = 'narrow';\n\n //#endregion\n\n //#region Lifecycle hooks\n\n constructor() {\n super();\n\n addThemingController(this, all);\n addKeybindings(this).setActivateHandler(this._handleInteraction);\n addSafeEventListener(this, 'click', this._handleInteraction);\n }\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n this.role = 'grid';\n }\n\n /** @internal */\n protected override update(props: PropertyValues<this>): void {\n if (props.has('activeDate') || props.has('weekStart')) {\n this._dates = Array.from(\n generateMonth(this._activeDate, this._firstDayOfWeek)\n );\n }\n\n super.update(props);\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected _handleInteraction(event: Event): void {\n const value = getViewElement(event);\n\n if (value !== -1) {\n const date = CalendarDay.from(new Date(value));\n\n if (this._rangePreviewDate) {\n this._setRangePreviewDate();\n }\n\n if (this._selectDate(date)) {\n this.emitEvent('igcChange', { detail: date.native });\n }\n\n if (event.type === 'click') {\n this.emitEvent('igcActiveDateChange', { detail: date.native });\n this._activeDate = date;\n }\n }\n }\n\n //#endregion\n\n //#region Internal selection methods\n\n private _selectDate(value: CalendarDay): boolean {\n if (isDateInRanges(value, this._disabledDates)) {\n return false;\n }\n\n switch (this.selection) {\n case 'single':\n if (this._value?.equalTo(value)) {\n return false;\n }\n this._value = value;\n break;\n case 'multiple':\n this._selectMultiple(value);\n break;\n case 'range':\n this._selectRange(value);\n break;\n }\n\n return true;\n }\n\n private _selectMultiple(day: CalendarDay): void {\n const idx = this._values.findIndex((v) => v.equalTo(day));\n\n if (idx < 0) {\n this._values.push(day);\n } else {\n this._values.splice(idx, 1);\n }\n\n this._values = this._values.toSorted((a, b) => a.timestamp - b.timestamp);\n }\n\n private _selectRange(day: CalendarDay): void {\n // Start a new range selection\n if (this._values.length !== 1) {\n this._values = [day];\n return;\n }\n\n const rangeStart = this._rangeStart!;\n\n // Clicking the same date clears the selection\n if (rangeStart.equalTo(day)) {\n this._values = [];\n return;\n }\n\n // Build the complete range, ensuring correct order\n const [start, end] = rangeStart.greaterThan(day)\n ? [day, rangeStart]\n : [rangeStart, day];\n\n const range = Array.from(calendarRange({ start, end }));\n range.push(last(range).add('day', 1));\n\n // Filter out disabled dates\n this._values = range.filter((v) => !isDateInRanges(v, this._disabledDates));\n }\n\n private _isSelected(day: CalendarDay): boolean {\n if (isDateInRanges(day, this._disabledDates)) {\n return false;\n }\n\n switch (this.selection) {\n case 'single':\n return Boolean(this._value?.equalTo(day));\n\n case 'multiple':\n return (\n this._hasValues &&\n isDateInRanges(day, [\n { type: DateRangeType.Specific, dateRange: this.values },\n ])\n );\n\n case 'range':\n return (\n this._hasValues &&\n isDateInRanges(day, [\n {\n type: DateRangeType.Between,\n dateRange: [this._rangeStart!.native, this._rangeEnd!.native],\n },\n ])\n );\n }\n }\n\n //#endregion\n\n //#region Range helpers\n\n private _setRangePreviewDate(day?: CalendarDay): void {\n this._rangePreviewDate = day;\n this.emitEvent('igcRangePreviewDateChange', {\n detail: day ? day.native : undefined,\n });\n }\n\n private _changeRangePreview(day: CalendarDay): void {\n if (this._values.length === 1 && !first(this._values).equalTo(day)) {\n this._setRangePreviewDate(day);\n }\n }\n\n private _clearRangePreview(): void {\n if (this._rangePreviewDate) {\n this._setRangePreviewDate();\n }\n }\n\n /** Gets the effective start of the visual range, accounting for preview. */\n private _getEffectiveRangeStart(): CalendarDay | undefined {\n if (!this._rangeStart) return undefined;\n\n return this._rangePreviewDate?.lessThan(this._rangeStart)\n ? this._rangePreviewDate\n : this._rangeStart;\n }\n\n /** Gets the effective end of the visual range, accounting for preview. */\n private _getEffectiveRangeEnd(): CalendarDay | undefined {\n if (!this._rangeEnd) return undefined;\n\n return this._rangePreviewDate?.greaterThan(this._rangeEnd)\n ? this._rangePreviewDate\n : this._rangeEnd;\n }\n\n private _isFirstInRange(day: CalendarDay): boolean {\n const effectiveStart = this._getEffectiveRangeStart();\n return this._isRange && Boolean(effectiveStart?.equalTo(day));\n }\n\n private _isLastInRange(day: CalendarDay): boolean {\n const effectiveEnd = this._getEffectiveRangeEnd();\n return this._isRange && Boolean(effectiveEnd?.equalTo(day));\n }\n\n private _isRangeDate(day: CalendarDay): boolean {\n if (!this._hasValues) return false;\n\n const isSingleSelection = this._values.length === 1;\n if (isSingleSelection && !this._rangePreviewDate) return false;\n\n const max = isSingleSelection ? this._rangePreviewDate! : this._rangeEnd!;\n\n return isDateInRanges(day, [\n {\n type: DateRangeType.Between,\n dateRange: [this._rangeStart!.native, max.native],\n },\n ]);\n }\n\n private _isRangePreview(day: CalendarDay): boolean {\n if (!this._hasValues || !this._rangePreviewDate) return false;\n\n return isDateInRanges(day, [\n {\n type: DateRangeType.Between,\n dateRange: [this._rangeStart!.native, this._rangePreviewDate.native],\n },\n ]);\n }\n\n //#endregion\n\n //#region Internal methods\n\n private _intlFormatDay(day: CalendarDay): string {\n const fmt = getDateFormatter().getIntlFormatter(this.locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n\n // Range selection in progress\n if (this._rangePreviewDate?.equalTo(day)) {\n return fmt.formatRange(\n first(this._values).native,\n this._rangePreviewDate.native\n );\n }\n\n // Range selection finished\n if (this._isFirstInRange(day) || this._isLastInRange(day)) {\n return fmt.formatRange(\n first(this._values).native,\n last(this._values).native\n );\n }\n\n // Default\n return fmt.format(day.native);\n }\n\n private _getDayHandlers(day: CalendarDay) {\n if (!this._isRange) {\n return { changePreview: nothing, clearPreview: nothing };\n }\n\n return {\n changePreview: this._changeRangePreview.bind(this, day),\n clearPreview: this._clearRangePreview.bind(this),\n };\n }\n\n private _getDayProperties(\n day: CalendarDay,\n today: CalendarDay\n ): DayProperties {\n const inactive = !areSameMonth(day, this._activeDate);\n const disabled = isDateInRanges(day, this._disabledDates);\n\n const hidden =\n (this.hideLeadingDays && isPreviousMonth(day, this._activeDate)) ||\n (this.hideTrailingDays && isNextMonth(day, this._activeDate));\n\n return {\n disabled: disabled || hidden,\n first: this._isFirstInRange(day),\n last: this._isLastInRange(day),\n range: this._isRange && this._isRangeDate(day),\n preview: this._isRange && this._isRangePreview(day),\n current: !inactive && day.equalTo(today),\n inactive,\n hidden,\n weekend: day.weekend,\n single: !this._isRange,\n selected: !disabled && this._isSelected(day),\n special: !inactive && isDateInRanges(day, this._specialDates),\n };\n }\n\n //#endregion\n\n //#region Public methods\n\n /** Focuses the active date. */\n public focusActiveDate(options?: FocusOptions): void {\n this._activeDay?.focus(options);\n }\n\n //#endregion\n\n protected _renderDayWithProps(\n day: CalendarDay,\n props: DayProperties\n ): TemplateResult {\n const ariaLabel = this._intlFormatDay(day);\n const { changePreview, clearPreview } = this._getDayHandlers(day);\n\n return html`\n <span part=${partMap({ date: true, ...props })}>\n <span\n role=\"gridcell\"\n part=${partMap({ 'date-inner': true, ...props })}\n aria-label=${ariaLabel}\n aria-disabled=${props.disabled}\n aria-selected=${props.selected}\n data-value=${day.timestamp}\n tabindex=${day.equalTo(this._activeDate) ? 0 : -1}\n @focus=${changePreview}\n @blur=${clearPreview}\n @pointerenter=${changePreview}\n @pointerleave=${clearPreview}\n >\n ${day.date}\n </span>\n </span>\n `;\n }\n\n protected _renderHeaderWeekNumber() {\n return html`\n <span role=\"columnheader\" part=\"label week-number first\">\n <span part=\"week-number-inner first\">\n ${this.resourceStrings.weekLabel}\n </span>\n </span>\n `;\n }\n\n protected _renderWeekNumber(start: CalendarDay, last: boolean) {\n return html`\n <span role=\"rowheader\" part=${partMap({ 'week-number': true, last })}>\n <span part=${partMap({ 'week-number-inner': true, last })}>\n ${start.week}\n </span>\n </span>\n `;\n }\n\n protected _renderHeaders() {\n const label = getDateFormatter().getIntlFormatter(this.locale, {\n weekday: this.weekDayFormat,\n });\n const aria = getDateFormatter().getIntlFormatter(this.locale, {\n weekday: 'long',\n });\n const days = take(\n generateMonth(this._activeDate, this._firstDayOfWeek),\n DAYS_IN_WEEK\n );\n\n const weekNumber = this.showWeekNumbers\n ? this._renderHeaderWeekNumber()\n : nothing;\n\n const headers = days.map(\n (day) => html`\n <span\n role=\"columnheader\"\n part=\"label\"\n aria-label=${aria.format(day.native)}\n >\n <span part=\"label-inner\">${label.format(day.native)}</span>\n </span>\n `\n );\n\n return html`\n <div role=\"row\" part=\"days-row first\">${weekNumber}${headers}</div>\n `;\n }\n\n protected *_renderWeeks(): Generator<TemplateResult> {\n const today = CalendarDay.today;\n const weeks = Array.from(chunk(this._dates, DAYS_IN_WEEK));\n const lastIndex = weeks.length - 1;\n\n // Pre-compute day properties for all dates to avoid redundant calculations\n const dayPropertiesMap = new Map<number, DayProperties>();\n for (const day of this._dates) {\n dayPropertiesMap.set(day.timestamp, this._getDayProperties(day, today));\n }\n\n for (const [idx, week] of weeks.entries()) {\n const isEdgeWeek = idx === 0 || idx === lastIndex;\n const isLast = idx === lastIndex;\n\n // Only check hidden state for first and last weeks\n const hidden =\n isEdgeWeek &&\n week.every((day) => dayPropertiesMap.get(day.timestamp)!.hidden);\n\n yield html`\n <div role=\"row\" part=\"days-row\" aria-hidden=${hidden}>\n ${this.showWeekNumbers\n ? this._renderWeekNumber(week[0], isLast)\n : nothing}\n ${week.map((day) =>\n this._renderDayWithProps(day, dayPropertiesMap.get(day.timestamp)!)\n )}\n </div>\n `;\n }\n }\n\n protected override render() {\n return html`${this._renderHeaders()}${this._renderWeeks()}`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-days-view': IgcDaysViewComponent;\n }\n}\n"]}