@3mo/date-time-fields 0.14.0 → 0.14.2

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.
@@ -55,168 +55,168 @@ let Calendar = Calendar_1 = class Calendar extends Component {
55
55
  const month = unsafeCSS(FieldDateTimePrecision.Month.key);
56
56
  const week = unsafeCSS(FieldDateTimePrecision.Week.key);
57
57
  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
- }
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
+ }
220
220
  `;
221
221
  }
222
222
  get includeWeekNumber() {
@@ -232,74 +232,74 @@ let Calendar = Calendar_1 = class Calendar extends Component {
232
232
  return `day-${date.dayOfWeek}`;
233
233
  }
234
234
  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>
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>
239
239
  `;
240
240
  }
241
241
  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)}
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)}
260
260
  `;
261
261
  }
262
262
  static get weekDaysTemplate() {
263
- return html `
264
- <mo-grid class='weekdays' columns='subgrid'>
263
+ return html `
264
+ <mo-grid class='weekdays' columns='subgrid'>
265
265
  ${CalendarDatesController.sampleWeek.map((day, index) => {
266
266
  const { narrow, short, long } = {
267
267
  narrow: day.format({ weekday: 'narrow' }),
268
268
  short: day.format({ weekday: 'short' }),
269
269
  long: day.format({ weekday: 'long' }),
270
270
  };
271
- return html `
272
- <span style='grid-column: day-${index + 1}' title=${long}>
273
- ${long === short ? narrow : short}
274
- </span>
271
+ return html `
272
+ <span style='grid-column: day-${index + 1}' title=${long}>
273
+ ${long === short ? narrow : short}
274
+ </span>
275
275
  `;
276
- })}
277
- </mo-grid>
276
+ })}
277
+ </mo-grid>
278
278
  `;
279
279
  }
280
280
  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>
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>
303
303
  `;
304
304
  }
305
305
  getWeekTemplate(date, month) {
@@ -309,40 +309,40 @@ let Calendar = Calendar_1 = class Calendar extends Component {
309
309
  if (date !== month.find(d => d.weekOfYear === date.weekOfYear && d.yearOfWeek === date.yearOfWeek)) {
310
310
  return html.nothing;
311
311
  }
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>
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>
326
326
  `;
327
327
  }
328
328
  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>
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>
346
346
  `;
347
347
  }
348
348
  isDisabled(date, precision) {