@3mo/date-time-fields 0.15.0 → 0.16.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 (37) hide show
  1. package/dist/FieldDateTime.js +13 -13
  2. package/dist/FieldDateTimeBase.d.ts +1 -0
  3. package/dist/FieldDateTimeBase.d.ts.map +1 -1
  4. package/dist/FieldDateTimeBase.js +141 -141
  5. package/dist/FieldDateTimeRange.js +46 -46
  6. package/dist/FieldTime.d.ts +49 -4
  7. package/dist/FieldTime.d.ts.map +1 -1
  8. package/dist/FieldTime.js +201 -9
  9. package/dist/custom-elements.json +153 -97
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +2 -0
  13. package/dist/segments/DateTimeSegment.d.ts +20 -0
  14. package/dist/segments/DateTimeSegment.d.ts.map +1 -0
  15. package/dist/segments/DateTimeSegment.js +4 -0
  16. package/dist/segments/DateTimeSegmenter.d.ts +68 -0
  17. package/dist/segments/DateTimeSegmenter.d.ts.map +1 -0
  18. package/dist/segments/DateTimeSegmenter.js +247 -0
  19. package/dist/segments/DateTimeSegmentsController.d.ts +90 -0
  20. package/dist/segments/DateTimeSegmentsController.d.ts.map +1 -0
  21. package/dist/segments/DateTimeSegmentsController.js +235 -0
  22. package/dist/segments/index.d.ts +5 -0
  23. package/dist/segments/index.d.ts.map +1 -0
  24. package/dist/segments/index.js +4 -0
  25. package/dist/segments/segmentsStyles.d.ts +3 -0
  26. package/dist/segments/segmentsStyles.d.ts.map +1 -0
  27. package/dist/segments/segmentsStyles.js +46 -0
  28. package/dist/selection/Calendar.d.ts.map +1 -1
  29. package/dist/selection/Calendar.js +248 -245
  30. package/dist/selection/CalendarDatesController.d.ts +8 -2
  31. package/dist/selection/CalendarDatesController.d.ts.map +1 -1
  32. package/dist/selection/CalendarDatesController.js +35 -6
  33. package/dist/selection/HourList.d.ts +4 -0
  34. package/dist/selection/HourList.d.ts.map +1 -1
  35. package/dist/selection/HourList.js +24 -2
  36. package/dist/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +51 -49
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../segments/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './DateTimeSegment.js';
2
+ export * from './DateTimeSegmenter.js';
3
+ export * from './DateTimeSegmentsController.js';
4
+ export * from './segmentsStyles.js';
@@ -0,0 +1,3 @@
1
+ /** The styling a field gives to a group of date-time segments. */
2
+ export declare const segmentsStyles: import("@a11d/lit").CSSResult;
3
+ //# sourceMappingURL=segmentsStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmentsStyles.d.ts","sourceRoot":"","sources":["../../segments/segmentsStyles.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,eAAO,MAAM,cAAc,+BA2C1B,CAAA"}
@@ -0,0 +1,46 @@
1
+ import { css } from '@a11d/lit';
2
+ /** The styling a field gives to a group of date-time segments. */
3
+ export const segmentsStyles = css `
4
+ [part=segments], [part=segments-range] {
5
+ white-space: nowrap;
6
+ cursor: text;
7
+ /* What a browser gives the <input> of the other fields, which never set either themselves. */
8
+ font-size: 13.333px;
9
+ line-height: normal;
10
+ font-variant-numeric: tabular-nums;
11
+ }
12
+
13
+ [part=segments] {
14
+ display: inline;
15
+ }
16
+
17
+ [part=segment], [part=literal] {
18
+ display: inline;
19
+ }
20
+
21
+ [part=segment] {
22
+ border-radius: 2px;
23
+ padding-inline: 1px;
24
+ outline: none;
25
+ caret-color: transparent;
26
+ user-select: none;
27
+
28
+ &:focus {
29
+ background: var(--mo-color-selected);
30
+ color: var(--mo-color-on-selected);
31
+ }
32
+
33
+ &[data-placeholder] {
34
+ color: transparent;
35
+ }
36
+ }
37
+
38
+ [part=literal] {
39
+ color: transparent;
40
+ }
41
+
42
+ mo-field[active] :is([part=segment][data-placeholder], [part=literal]),
43
+ mo-field[populated] :is([part=segment][data-placeholder], [part=literal]) {
44
+ color: var(--mo-color-gray);
45
+ }
46
+ `;
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../selection/Calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmE,MAAM,WAAW,CAAA;AAGtG,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAErE;;GAEG;AACH,qBACa,QAAS,SAAQ,SAAS;IAC7B,QAAQ,CAAC,SAAS,EAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;IAE3B,KAAK,CAAC,EAAE,aAAa,CAAA;IACqC,SAAS,EAAG,sBAAsB,CAAA;IAC5E,WAAW,UAAQ;IACnC,GAAG,CAAC,EAAE,QAAQ,CAAA;IACd,GAAG,CAAC,EAAE,QAAQ,CAAA;IACF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAA;IAElF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IAE3D,IAAI,yBAA6B;IAC1C,OAAO,CAAC,IAAI,EAAE,sBAAsB,EAAE,cAAc,gDAAsC;IAK1F,IAAI,cAAc,kDAAiD;IAC7D,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAE,SAAS,GAAG,QAAoB;IAWnF,WAAoB,MAAM,kCAwKzB;IAED,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,OAAO,GAKlB;IAED,OAAO,CAAC,aAAa;IAIrB,cAAuB,QAAQ,0CAM9B;IAED,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,MAAM,KAAK,gBAAgB,GAiBlC;IAED,OAAO,CAAC,gBAAgB;IA0BxB,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC;IA0BxE,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,eAAe,CAmBtB;IAED,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,SAAS;CAKjB;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,aAAa,EAAE,QAAQ,CAAA;KACvB;CACD"}
1
+ {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../selection/Calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmE,MAAM,WAAW,CAAA;AAGtG,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAErE;;GAEG;AACH,qBACa,QAAS,SAAQ,SAAS;IAC7B,QAAQ,CAAC,SAAS,EAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;IAE3B,KAAK,CAAC,EAAE,aAAa,CAAA;IACqC,SAAS,EAAG,sBAAsB,CAAA;IAC5E,WAAW,UAAQ;IACnC,GAAG,CAAC,EAAE,QAAQ,CAAA;IACd,GAAG,CAAC,EAAE,QAAQ,CAAA;IACF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAA;IAElF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IAE3D,IAAI,yBAA6B;IAC1C,OAAO,CAAC,IAAI,EAAE,sBAAsB,EAAE,cAAc,gDAAsC;IAK1F,IAAI,cAAc,kDAAiD;IAC7D,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAE,SAAS,GAAG,QAAoB;IAcnF,WAAoB,MAAM,kCAwKzB;IAED,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,OAAO,GAKlB;IAED,OAAO,CAAC,aAAa;IAIrB,cAAuB,QAAQ,0CAM9B;IAED,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,MAAM,KAAK,gBAAgB,GAiBlC;IAED,OAAO,CAAC,gBAAgB;IA0BxB,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC;IA0BxE,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,eAAe,CAmBtB;IAED,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,SAAS;CAKjB;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,aAAa,EAAE,QAAQ,CAAA;KACvB;CACD"}
@@ -43,6 +43,9 @@ let Calendar = Calendar_1 = class Calendar extends Component {
43
43
  async setNavigatingValue(date, behavior = 'instant') {
44
44
  this.datesController.disableObservers = true;
45
45
  this.datesController.navigationDate = date;
46
+ // Only a date beyond the generated range requests an update by itself, so without this the
47
+ // item marked as navigating - and thereby scrolled to - would still be the previous one.
48
+ this.requestUpdate();
46
49
  await this.updateComplete;
47
50
  await new Promise(r => setTimeout(r, 10));
48
51
  this.renderRoot.querySelector(`.${this.view}[data-navigating]`)
@@ -55,168 +58,168 @@ let Calendar = Calendar_1 = class Calendar extends Component {
55
58
  const month = unsafeCSS(FieldDateTimePrecision.Month.key);
56
59
  const week = unsafeCSS(FieldDateTimePrecision.Week.key);
57
60
  const day = unsafeCSS(FieldDateTimePrecision.Day.key);
58
- return css `
59
- :host {
60
- --mo-calendar-item-size: 2.25rem;
61
- flex: 1;
62
- }
63
-
64
- .scroller {
65
- height: min(450px, 100vh);
66
-
67
- display: grid;
68
- position: relative;
69
- scrollbar-width: none;
70
- overflow-x: hidden;
71
- scroll-behavior: smooth;
72
-
73
- &[data-view=${week}], &[data-view=${day}] {
74
- grid-template-columns: repeat(1, 1fr);
75
- }
76
-
77
- &[data-view=${month}] {
78
- grid-template-columns: repeat(3, 1fr);
79
- }
80
-
81
- &[data-view=${year}] {
82
- grid-template-columns: repeat(5, 1fr);
83
- }
84
- }
85
-
86
- .year, .month, .day {
87
- display: flex;
88
- align-items: center;
89
- justify-content: center;
90
- text-align: center;
91
- font-weight: 500;
92
- user-select: none;
93
- }
94
-
95
- .year, .month, .week[data-view=${week}], .day:not([data-view=${week}]) {
96
- transition: 0.2s;
97
- border-radius: var(--mo-border-radius);
98
-
99
- &:hover {
100
- background: var(--mo-color-transparent-gray-3);
101
- }
102
-
103
- &[data-now] {
104
- outline: 2px dashed var(--mo-color-gray-transparent);
105
- }
106
-
107
- &[data-start], &[data-end] {
108
- background: var(--mo-color-accent-transparent);
109
- opacity: 1;
110
- color: color-mix(in srgb, var(--mo-color-accent), var(--mo-color-foreground)) !important;
111
- }
112
-
113
- &[data-in-range] {
114
- background: color-mix(in srgb, var(--mo-color-accent), transparent 92%);
115
- }
116
-
117
- &[data-disabled] {
118
- opacity: 0.38;
119
- pointer-events: none;
120
- }
121
- }
122
-
123
- /* Headings */
124
- .year[data-view=${month}], .month[data-view=${week}], .month[data-view=${day}] {
125
- font-size: 1.125rem;
126
- font-weight: 500;
127
- height: 2rem;
128
- padding: 0.5rem;
129
- }
130
-
131
- /* Selection */
132
- .year[data-view=${year}], .month[data-view=${month}], .week[data-view=${week}], .day[data-view=${day}] {
133
- opacity: 0.875;
134
- font-size: 0.94rem;
135
- cursor: pointer;
136
- height: var(--mo-calendar-item-size);
137
- }
138
-
139
- .year {
140
- &[data-view=${week}], &[data-view=${day}] {
141
- display: none;
142
- }
143
- &:not([data-view=${year}]) {
144
- grid-column: -1 / 1;
145
- border-block-start: 1px solid var(--mo-color-transparent-gray-3);
146
- }
147
- padding-inline: 0.5rem;
148
- }
149
-
150
- .month-container {
151
- width: 100%;
152
- position: relative;
153
- &[data-view=${week}], &[data-view=${day}] {
154
- &::before {
155
- content: ' ';
156
- position: absolute;
157
- display: inline-block;
158
- width: 1px;
159
- height: 100%;
160
- inset-block: 0;
161
- background: var(--mo-color-transparent-gray-3);
162
- }
163
- &::after {
164
- content: ' ';
165
- position: absolute;
166
- display: inline-block;
167
- height: 1px;
168
- width: 100%;
169
- inset-inline: 0;
170
- background: var(--mo-color-transparent-gray-3);
171
- }
172
- }
173
-
174
- & > mo-grid {
175
- padding-inline: 0.5rem;
176
- padding-block-end: 0.5rem;
177
- margin-block-start: -0.375rem;
178
- }
179
-
180
- &[data-view=${month}] {
181
- & > mo-grid {
182
- display: none;
183
- }
184
- }
185
- }
186
-
187
- .weekdays {
188
- text-align: center;
189
- opacity: 0.5;
190
- font-size: 0.75rem;
191
- font-weight: 500;
192
- grid-column: -1 / 1;
193
- user-select: none;
194
- span {
195
- display: flex;
196
- align-items: center;
197
- justify-content: center;
198
- }
199
- }
200
-
201
- .month {
202
- padding-inline: 0.5rem;
203
- }
204
-
205
- .week {
206
- grid-column: 1 / -1;
207
- }
208
-
209
- .week-number {
210
- opacity: 0.5;
211
- display: flex;
212
- align-items: center;
213
- justify-content: center;
214
- }
215
-
216
- .day {
217
- width: var(--mo-calendar-item-size);
218
- height: var(--mo-calendar-item-size);
219
- }
61
+ return css `
62
+ :host {
63
+ --mo-calendar-item-size: 2.25rem;
64
+ flex: 1;
65
+ }
66
+
67
+ .scroller {
68
+ height: min(450px, 100vh);
69
+
70
+ display: grid;
71
+ position: relative;
72
+ scrollbar-width: none;
73
+ overflow-x: hidden;
74
+ scroll-behavior: smooth;
75
+
76
+ &[data-view=${week}], &[data-view=${day}] {
77
+ grid-template-columns: repeat(1, 1fr);
78
+ }
79
+
80
+ &[data-view=${month}] {
81
+ grid-template-columns: repeat(3, 1fr);
82
+ }
83
+
84
+ &[data-view=${year}] {
85
+ grid-template-columns: repeat(5, 1fr);
86
+ }
87
+ }
88
+
89
+ .year, .month, .day {
90
+ display: flex;
91
+ align-items: center;
92
+ justify-content: center;
93
+ text-align: center;
94
+ font-weight: 500;
95
+ user-select: none;
96
+ }
97
+
98
+ .year, .month, .week[data-view=${week}], .day:not([data-view=${week}]) {
99
+ transition: 0.2s;
100
+ border-radius: var(--mo-border-radius);
101
+
102
+ &:hover {
103
+ background: var(--mo-color-transparent-gray-3);
104
+ }
105
+
106
+ &[data-now] {
107
+ outline: 2px dashed var(--mo-color-gray-transparent);
108
+ }
109
+
110
+ &[data-start], &[data-end] {
111
+ background: var(--mo-color-accent-transparent);
112
+ opacity: 1;
113
+ color: color-mix(in srgb, var(--mo-color-accent), var(--mo-color-foreground)) !important;
114
+ }
115
+
116
+ &[data-in-range] {
117
+ background: color-mix(in srgb, var(--mo-color-accent), transparent 92%);
118
+ }
119
+
120
+ &[data-disabled] {
121
+ opacity: 0.38;
122
+ pointer-events: none;
123
+ }
124
+ }
125
+
126
+ /* Headings */
127
+ .year[data-view=${month}], .month[data-view=${week}], .month[data-view=${day}] {
128
+ font-size: 1.125rem;
129
+ font-weight: 500;
130
+ height: 2rem;
131
+ padding: 0.5rem;
132
+ }
133
+
134
+ /* Selection */
135
+ .year[data-view=${year}], .month[data-view=${month}], .week[data-view=${week}], .day[data-view=${day}] {
136
+ opacity: 0.875;
137
+ font-size: 0.94rem;
138
+ cursor: pointer;
139
+ height: var(--mo-calendar-item-size);
140
+ }
141
+
142
+ .year {
143
+ &[data-view=${week}], &[data-view=${day}] {
144
+ display: none;
145
+ }
146
+ &:not([data-view=${year}]) {
147
+ grid-column: -1 / 1;
148
+ border-block-start: 1px solid var(--mo-color-transparent-gray-3);
149
+ }
150
+ padding-inline: 0.5rem;
151
+ }
152
+
153
+ .month-container {
154
+ width: 100%;
155
+ position: relative;
156
+ &[data-view=${week}], &[data-view=${day}] {
157
+ &::before {
158
+ content: ' ';
159
+ position: absolute;
160
+ display: inline-block;
161
+ width: 1px;
162
+ height: 100%;
163
+ inset-block: 0;
164
+ background: var(--mo-color-transparent-gray-3);
165
+ }
166
+ &::after {
167
+ content: ' ';
168
+ position: absolute;
169
+ display: inline-block;
170
+ height: 1px;
171
+ width: 100%;
172
+ inset-inline: 0;
173
+ background: var(--mo-color-transparent-gray-3);
174
+ }
175
+ }
176
+
177
+ & > mo-grid {
178
+ padding-inline: 0.5rem;
179
+ padding-block-end: 0.5rem;
180
+ margin-block-start: -0.375rem;
181
+ }
182
+
183
+ &[data-view=${month}] {
184
+ & > mo-grid {
185
+ display: none;
186
+ }
187
+ }
188
+ }
189
+
190
+ .weekdays {
191
+ text-align: center;
192
+ opacity: 0.5;
193
+ font-size: 0.75rem;
194
+ font-weight: 500;
195
+ grid-column: -1 / 1;
196
+ user-select: none;
197
+ span {
198
+ display: flex;
199
+ align-items: center;
200
+ justify-content: center;
201
+ }
202
+ }
203
+
204
+ .month {
205
+ padding-inline: 0.5rem;
206
+ }
207
+
208
+ .week {
209
+ grid-column: 1 / -1;
210
+ }
211
+
212
+ .week-number {
213
+ opacity: 0.5;
214
+ display: flex;
215
+ align-items: center;
216
+ justify-content: center;
217
+ }
218
+
219
+ .day {
220
+ width: var(--mo-calendar-item-size);
221
+ height: var(--mo-calendar-item-size);
222
+ }
220
223
  `;
221
224
  }
222
225
  get includeWeekNumber() {
@@ -232,74 +235,74 @@ let Calendar = Calendar_1 = class Calendar extends Component {
232
235
  return `day-${date.dayOfWeek}`;
233
236
  }
234
237
  get template() {
235
- return html `
236
- <div class='scroller' data-view=${this.view.key}>
237
- ${repeat(this.datesController.data, d => d.toString(), d => this.getYearTemplate(d))}
238
- </div>
238
+ return html `
239
+ <div class='scroller' data-view=${this.view.key}>
240
+ ${repeat(this.datesController.data, d => d.toString(), d => this.getYearTemplate(d))}
241
+ </div>
239
242
  `;
240
243
  }
241
244
  getYearTemplate(date) {
242
- return html `
243
- ${date.dayOfYear !== 1 ? html.nothing : html `
244
- <div class='year' role='button'
245
- data-view=${this.view.key}
246
- ?data-navigating=${this.isNavigating(date, FieldDateTimePrecision.Year)}
247
- ?data-now=${this.isNow(date, FieldDateTimePrecision.Year)}
248
- ?data-start=${this.isStart(date, FieldDateTimePrecision.Year)}
249
- ?data-end=${this.isEnd(date, FieldDateTimePrecision.Year)}
250
- ?data-in-range=${this.isInRange(date, FieldDateTimePrecision.Year)}
251
- ?data-disabled=${this.isDisabled(date, FieldDateTimePrecision.Year)}
252
- @click=${this.handleItemClick(date, FieldDateTimePrecision.Year)}
253
- ${this.datesController.observerIntersectionNavigation(date, FieldDateTimePrecision.Month, FieldDateTimePrecision.Year)}
254
- >
255
- ${date.format({ year: 'numeric' })}
256
- </div>
257
- `}
258
-
259
- ${this.view < FieldDateTimePrecision.Month || date.day !== 1 ? html.nothing : this.getMonthTemplate(date)}
245
+ return html `
246
+ ${date.dayOfYear !== 1 ? html.nothing : html `
247
+ <div class='year' role='button'
248
+ data-view=${this.view.key}
249
+ ?data-navigating=${this.isNavigating(date, FieldDateTimePrecision.Year)}
250
+ ?data-now=${this.isNow(date, FieldDateTimePrecision.Year)}
251
+ ?data-start=${this.isStart(date, FieldDateTimePrecision.Year)}
252
+ ?data-end=${this.isEnd(date, FieldDateTimePrecision.Year)}
253
+ ?data-in-range=${this.isInRange(date, FieldDateTimePrecision.Year)}
254
+ ?data-disabled=${this.isDisabled(date, FieldDateTimePrecision.Year)}
255
+ @click=${this.handleItemClick(date, FieldDateTimePrecision.Year)}
256
+ ${this.datesController.observerIntersectionNavigation(date, FieldDateTimePrecision.Month, FieldDateTimePrecision.Year)}
257
+ >
258
+ ${date.format({ year: 'numeric' })}
259
+ </div>
260
+ `}
261
+
262
+ ${this.view < FieldDateTimePrecision.Month || date.day !== 1 ? html.nothing : this.getMonthTemplate(date)}
260
263
  `;
261
264
  }
262
265
  static get weekDaysTemplate() {
263
- return html `
264
- <mo-grid class='weekdays' columns='subgrid'>
266
+ return html `
267
+ <mo-grid class='weekdays' columns='subgrid'>
265
268
  ${CalendarDatesController.sampleWeek.map((day, index) => {
266
269
  const { narrow, short, long } = {
267
270
  narrow: day.format({ weekday: 'narrow' }),
268
271
  short: day.format({ weekday: 'short' }),
269
272
  long: day.format({ weekday: 'long' }),
270
273
  };
271
- return html `
272
- <span style='grid-column: day-${index + 1}' title=${long}>
273
- ${long === short ? narrow : short}
274
- </span>
274
+ return html `
275
+ <span style='grid-column: day-${index + 1}' title=${long}>
276
+ ${long === short ? narrow : short}
277
+ </span>
275
278
  `;
276
- })}
277
- </mo-grid>
279
+ })}
280
+ </mo-grid>
278
281
  `;
279
282
  }
280
283
  getMonthTemplate(date) {
281
- return html `
282
- <mo-flex class='month-container' data-view=${this.view.key}>
283
- <div class='month' role='button'
284
- data-view=${this.view.key}
285
- ?data-navigating=${this.isNavigating(date, FieldDateTimePrecision.Month)}
286
- ?data-now=${this.isNow(date, FieldDateTimePrecision.Month)}
287
- ?data-start=${this.isStart(date, FieldDateTimePrecision.Month)}
288
- ?data-end=${this.isEnd(date, FieldDateTimePrecision.Month)}
289
- ?data-in-range=${this.isInRange(date, FieldDateTimePrecision.Month)}
290
- ?data-disabled=${this.isDisabled(date, FieldDateTimePrecision.Month)}
291
- @click=${this.handleItemClick(date, FieldDateTimePrecision.Month)}
292
- ${this.datesController.observerIntersectionNavigation(date, FieldDateTimePrecision.Day)}
293
- >
294
- ${date.format(this.view > FieldDateTimePrecision.Month ? { year: 'numeric', month: 'long' } : { month: 'long' })}
295
- </div>
296
- ${this.view < FieldDateTimePrecision.Week ? html.nothing : html `
297
- <mo-grid justifyContent='center' autoRows='var(--mo-calendar-item-size)' columns=${this.view > FieldDateTimePrecision.Month ? this.columns : 'auto'}>
298
- ${Calendar_1.weekDaysTemplate}
299
- ${this.datesController.data.filter(d => d.year === date.year && d.month === date.month).map((day, _, month) => this.getWeekTemplate(day, month))}
300
- </mo-grid>
301
- `}
302
- </mo-flex>
284
+ return html `
285
+ <mo-flex class='month-container' data-view=${this.view.key}>
286
+ <div class='month' role='button'
287
+ data-view=${this.view.key}
288
+ ?data-navigating=${this.isNavigating(date, FieldDateTimePrecision.Month)}
289
+ ?data-now=${this.isNow(date, FieldDateTimePrecision.Month)}
290
+ ?data-start=${this.isStart(date, FieldDateTimePrecision.Month)}
291
+ ?data-end=${this.isEnd(date, FieldDateTimePrecision.Month)}
292
+ ?data-in-range=${this.isInRange(date, FieldDateTimePrecision.Month)}
293
+ ?data-disabled=${this.isDisabled(date, FieldDateTimePrecision.Month)}
294
+ @click=${this.handleItemClick(date, FieldDateTimePrecision.Month)}
295
+ ${this.datesController.observerIntersectionNavigation(date, FieldDateTimePrecision.Day)}
296
+ >
297
+ ${date.format(this.view > FieldDateTimePrecision.Month ? { year: 'numeric', month: 'long' } : { month: 'long' })}
298
+ </div>
299
+ ${this.view < FieldDateTimePrecision.Week ? html.nothing : html `
300
+ <mo-grid justifyContent='center' autoRows='var(--mo-calendar-item-size)' columns=${this.view > FieldDateTimePrecision.Month ? this.columns : 'auto'}>
301
+ ${Calendar_1.weekDaysTemplate}
302
+ ${this.datesController.data.filter(d => d.year === date.year && d.month === date.month).map((day, _, month) => this.getWeekTemplate(day, month))}
303
+ </mo-grid>
304
+ `}
305
+ </mo-flex>
303
306
  `;
304
307
  }
305
308
  getWeekTemplate(date, month) {
@@ -309,40 +312,40 @@ let Calendar = Calendar_1 = class Calendar extends Component {
309
312
  if (date !== month.find(d => d.weekOfYear === date.weekOfYear && d.yearOfWeek === date.yearOfWeek)) {
310
313
  return html.nothing;
311
314
  }
312
- return html `
313
- <mo-grid class='week' columns='subgrid'
314
- data-view=${this.view.key}
315
- ?data-navigating=${this.isNavigating(date, FieldDateTimePrecision.Week)}
316
- ?data-now=${this.isNow(date, FieldDateTimePrecision.Week)}
317
- ?data-start=${this.isStart(date, FieldDateTimePrecision.Week)}
318
- ?data-end=${this.isEnd(date, FieldDateTimePrecision.Week)}
319
- ?data-in-range=${this.isInRange(date, FieldDateTimePrecision.Week)}
320
- ?data-disabled=${this.isDisabled(date, FieldDateTimePrecision.Week)}
321
- @click=${this.precision === FieldDateTimePrecision.Day ? html.nothing : this.handleItemClick(date, FieldDateTimePrecision.Week)}
322
- ${this.datesController.observerIntersectionNavigation(date, FieldDateTimePrecision.Week)}
323
- >
324
- ${month.filter(d => d.weekOfYear === date.weekOfYear && d.yearOfWeek === date.yearOfWeek).map(day => this.getDayTemplate(day))}
325
- </mo-grid>
315
+ return html `
316
+ <mo-grid class='week' columns='subgrid'
317
+ data-view=${this.view.key}
318
+ ?data-navigating=${this.isNavigating(date, FieldDateTimePrecision.Week)}
319
+ ?data-now=${this.isNow(date, FieldDateTimePrecision.Week)}
320
+ ?data-start=${this.isStart(date, FieldDateTimePrecision.Week)}
321
+ ?data-end=${this.isEnd(date, FieldDateTimePrecision.Week)}
322
+ ?data-in-range=${this.isInRange(date, FieldDateTimePrecision.Week)}
323
+ ?data-disabled=${this.isDisabled(date, FieldDateTimePrecision.Week)}
324
+ @click=${this.precision === FieldDateTimePrecision.Day ? html.nothing : this.handleItemClick(date, FieldDateTimePrecision.Week)}
325
+ ${this.datesController.observerIntersectionNavigation(date, FieldDateTimePrecision.Week)}
326
+ >
327
+ ${month.filter(d => d.weekOfYear === date.weekOfYear && d.yearOfWeek === date.yearOfWeek).map(day => this.getDayTemplate(day))}
328
+ </mo-grid>
326
329
  `;
327
330
  }
328
331
  getDayTemplate(day) {
329
- return html `
330
- ${this.includeWeekNumber === false || day.dayOfWeek !== 1 ? html.nothing : html `
331
- <div class='week-number' style='grid-column: week-number'>${day.weekOfYear?.format()}</div>
332
- `}
333
- <div tabindex='0' role='button' class='day'
334
- style='grid-column: ${this.getColumnName(day)}'
335
- data-view=${this.view.key}
336
- ?data-navigating=${this.isNavigating(day, FieldDateTimePrecision.Day)}
337
- ?data-now=${this.isNow(day, FieldDateTimePrecision.Day)}
338
- ?data-start=${this.isStart(day, FieldDateTimePrecision.Day)}
339
- ?data-end=${this.isEnd(day, FieldDateTimePrecision.Day)}
340
- ?data-in-range=${this.isInRange(day, FieldDateTimePrecision.Day)}
341
- ?data-disabled=${this.isDisabled(day, FieldDateTimePrecision.Day)}
342
- @click=${this.precision === FieldDateTimePrecision.Week ? html.nothing : this.handleItemClick(day, FieldDateTimePrecision.Day)}
343
- >
344
- ${day.format({ day: 'numeric' })}
345
- </div>
332
+ return html `
333
+ ${this.includeWeekNumber === false || day.dayOfWeek !== 1 ? html.nothing : html `
334
+ <div class='week-number' style='grid-column: week-number'>${day.weekOfYear?.format()}</div>
335
+ `}
336
+ <div tabindex='0' role='button' class='day'
337
+ style='grid-column: ${this.getColumnName(day)}'
338
+ data-view=${this.view.key}
339
+ ?data-navigating=${this.isNavigating(day, FieldDateTimePrecision.Day)}
340
+ ?data-now=${this.isNow(day, FieldDateTimePrecision.Day)}
341
+ ?data-start=${this.isStart(day, FieldDateTimePrecision.Day)}
342
+ ?data-end=${this.isEnd(day, FieldDateTimePrecision.Day)}
343
+ ?data-in-range=${this.isInRange(day, FieldDateTimePrecision.Day)}
344
+ ?data-disabled=${this.isDisabled(day, FieldDateTimePrecision.Day)}
345
+ @click=${this.precision === FieldDateTimePrecision.Week ? html.nothing : this.handleItemClick(day, FieldDateTimePrecision.Day)}
346
+ >
347
+ ${day.format({ day: 'numeric' })}
348
+ </div>
346
349
  `;
347
350
  }
348
351
  isDisabled(date, precision) {
@@ -3,11 +3,17 @@ import type { Calendar } from './Calendar.js';
3
3
  import { FieldDateTimePrecision } from '../FieldDateTimePrecision.js';
4
4
  export declare class CalendarDatesController extends Controller {
5
5
  readonly host: Calendar;
6
+ private static readonly cacheKey;
6
7
  static get today(): import("@3mo/date-time/DateTime.js").DateTime;
7
8
  private static generate;
8
- private static _sampleWeek;
9
- static get sampleWeek(): ReadonlyArray<DateTime>;
9
+ private static _sampleWeek?;
10
+ static get sampleWeek(): readonly import("@3mo/date-time/DateTime.js").DateTime[];
10
11
  private static generateWeek;
12
+ private static readonly connectedControllers;
13
+ hostConnected(): void;
14
+ hostDisconnected(): void;
15
+ /** Discards every generated date and regenerates them for the current calendar. */
16
+ private invalidate;
11
17
  disableObservers: boolean;
12
18
  observerIntersectionNavigation(date: DateTime, ...views: Array<FieldDateTimePrecision>): DirectiveResult<any>;
13
19
  constructor(host: Calendar);
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarDatesController.d.ts","sourceRoot":"","sources":["../../selection/CalendarDatesController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AAGlE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAErE,qBAAa,uBAAwB,SAAQ,UAAU;aAkCxB,IAAI,EAAE,QAAQ;IAhC5C,MAAM,KAAK,KAAK,kDAAqC;IAErD,OAAO,CAAC,MAAM,CAAE,QAAQ;IAMxB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAwB;IAClD,MAAM,KAAK,UAAU,IAAgC,aAAa,CAAC,QAAQ,CAAC,CAAE;IAE9E,OAAO,CAAC,MAAM,CAAC,YAAY;IAW3B,gBAAgB,UAAQ;IAExB,8BAA8B,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,sBAAsB,CAAC;gBAQxD,IAAI,EAAE,QAAQ;IAK5C,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,KAAK,CAAwB;IAErC,IAAI,IAAI,oDASP;IAED,OAAO,CAAC,eAAe,CAAW;IAClC,IAAI,cAAc,kDAAkC;IACpD,IAAI,cAAc,CAAC,KAAK,+CAAA,EAsCvB;CACD"}
1
+ {"version":3,"file":"CalendarDatesController.d.ts","sourceRoot":"","sources":["../../selection/CalendarDatesController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AAIlE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAErE,qBAAa,uBAAwB,SAAQ,UAAU;aAoExB,IAAI,EAAE,QAAQ;IAnE5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAG5D,MAAM,KAAK,KAAK,kDAAqC;IAErD,OAAO,CAAC,MAAM,CAAE,QAAQ;IAMxB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAyB;IACpD,MAAM,KAAK,UAAU,6DAA4F;IAEjH,OAAO,CAAC,MAAM,CAAC,YAAY;IAO3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAqC;IAoBxE,aAAa;IAIb,gBAAgB;IAIzB,mFAAmF;IACnF,OAAO,CAAC,UAAU;IAOlB,gBAAgB,UAAQ;IAExB,8BAA8B,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,sBAAsB,CAAC;gBAQxD,IAAI,EAAE,QAAQ;IAK5C,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,KAAK,CAAwB;IAErC,IAAI,IAAI,oDASP;IAED,OAAO,CAAC,eAAe,CAAW;IAClC,IAAI,cAAc,kDAAkC;IACpD,IAAI,cAAc,CAAC,KAAK,+CAAA,EAsCvB;CACD"}