@getflip/swirl-components 0.425.0 → 0.426.1

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.
@@ -106,7 +106,9 @@ function getWeekDays(firstDayOfWeek, locale) {
106
106
  return [
107
107
  Intl.DateTimeFormat(locale, {
108
108
  weekday: 'short'
109
- }).format(date),
109
+ })
110
+ .format(date)
111
+ .slice(0, 3),
110
112
  Intl.DateTimeFormat(locale, {
111
113
  weekday: 'long'
112
114
  }).format(date)
@@ -172,12 +174,96 @@ const WCDatepicker = class {
172
174
  this.showTodayButton = false;
173
175
  this.showYearStepper = false;
174
176
  this.startDate = getISODateString(new Date());
177
+ this.maxSearchDays = 365;
178
+ this.goToRangeStartOnSelect = true;
175
179
  this.init = () => {
176
180
  this.currentDate = this.startDate
177
181
  ? removeTimezoneOffset(new Date(this.startDate))
178
182
  : new Date();
179
183
  this.updateWeekdays();
180
184
  };
185
+ this.getAvailableDate = (date, direction) => {
186
+ let potentialDate;
187
+ let outOfRange = false;
188
+ switch (direction) {
189
+ case 'previousDay':
190
+ potentialDate = getPreviousDay(date);
191
+ break;
192
+ case 'nextDay':
193
+ potentialDate = getNextDay(date);
194
+ break;
195
+ case 'previousSameWeekDay':
196
+ potentialDate = subDays(date, 7);
197
+ break;
198
+ case 'nextSameWeekDay':
199
+ potentialDate = addDays(date, 7);
200
+ break;
201
+ case 'firstOfMonth':
202
+ potentialDate = getFirstOfMonth(date);
203
+ break;
204
+ case 'lastOfMonth':
205
+ potentialDate = getLastOfMonth(date);
206
+ break;
207
+ case 'previousMonth':
208
+ potentialDate = getPreviousMonth(date);
209
+ break;
210
+ case 'nextMonth':
211
+ potentialDate = getNextMonth(date);
212
+ break;
213
+ case 'previousYear':
214
+ potentialDate = getPreviousYear(date);
215
+ break;
216
+ case 'nextYear':
217
+ potentialDate = getNextYear(date);
218
+ break;
219
+ }
220
+ while (this.disableDate(potentialDate) && !outOfRange) {
221
+ switch (direction) {
222
+ case 'previousDay':
223
+ case 'lastOfMonth':
224
+ potentialDate = getPreviousDay(potentialDate);
225
+ break;
226
+ case 'nextDay':
227
+ case 'firstOfMonth':
228
+ case 'previousMonth':
229
+ case 'nextMonth':
230
+ case 'previousYear':
231
+ case 'nextYear':
232
+ potentialDate = getNextDay(potentialDate);
233
+ break;
234
+ case 'previousSameWeekDay':
235
+ potentialDate = subDays(potentialDate, 7);
236
+ break;
237
+ case 'nextSameWeekDay':
238
+ potentialDate = addDays(potentialDate, 7);
239
+ break;
240
+ }
241
+ switch (direction) {
242
+ case 'firstOfMonth':
243
+ case 'lastOfMonth':
244
+ case 'previousYear':
245
+ case 'nextYear':
246
+ outOfRange = potentialDate.getMonth() !== date.getMonth();
247
+ break;
248
+ case 'previousMonth':
249
+ outOfRange = potentialDate.getMonth() !== date.getMonth() - 1;
250
+ break;
251
+ case 'nextMonth':
252
+ outOfRange = potentialDate.getMonth() !== date.getMonth() + 1;
253
+ break;
254
+ default:
255
+ outOfRange = !isDateInRange(potentialDate, {
256
+ from: subDays(date, this.maxSearchDays),
257
+ to: addDays(date, this.maxSearchDays)
258
+ });
259
+ break;
260
+ }
261
+ }
262
+ if (outOfRange) {
263
+ return date;
264
+ }
265
+ return potentialDate;
266
+ };
181
267
  this.nextMonth = () => {
182
268
  this.updateCurrentDate(getNextMonth(this.currentDate));
183
269
  };
@@ -211,9 +297,12 @@ const WCDatepicker = class {
211
297
  };
212
298
  this.onMonthSelect = (event) => {
213
299
  const month = +event.target.value - 1;
214
- const date = new Date(this.currentDate);
215
- date.setMonth(month);
216
- this.updateCurrentDate(date);
300
+ const currentDay = this.currentDate.getDate();
301
+ const targetDate = new Date(this.currentDate.getFullYear(), month, 1);
302
+ const lastDayOfTargetMonth = getLastOfMonth(targetDate).getDate();
303
+ const clampedDay = Math.min(currentDay, lastDayOfTargetMonth);
304
+ const updatedDate = new Date(this.currentDate.getFullYear(), month, clampedDay);
305
+ this.updateCurrentDate(updatedDate);
217
306
  };
218
307
  this.onYearSelect = (event) => {
219
308
  let year = +event.target.value;
@@ -230,9 +319,15 @@ const WCDatepicker = class {
230
319
  year = 9999;
231
320
  input.value = String(year);
232
321
  }
233
- const date = new Date(this.currentDate);
234
- date.setFullYear(year);
235
- this.updateCurrentDate(date);
322
+ const currentDay = this.currentDate.getDate();
323
+ const currentMonth = this.currentDate.getMonth();
324
+ const targetDate = new Date();
325
+ targetDate.setFullYear(year, currentMonth, 1);
326
+ const lastDayOfTargetMonth = getLastOfMonth(targetDate).getDate();
327
+ const clampedDay = Math.min(currentDay, lastDayOfTargetMonth);
328
+ const updatedDate = new Date();
329
+ updatedDate.setFullYear(year, currentMonth, clampedDay);
330
+ this.updateCurrentDate(updatedDate);
236
331
  };
237
332
  this.onKeyDown = (event) => {
238
333
  if (this.disabled) {
@@ -240,45 +335,45 @@ const WCDatepicker = class {
240
335
  }
241
336
  if (event.code === 'ArrowLeft') {
242
337
  event.preventDefault();
243
- this.updateCurrentDate(getPreviousDay(this.currentDate), true);
338
+ this.updateCurrentDate(this.getAvailableDate(this.currentDate, 'previousDay'), true);
244
339
  }
245
340
  else if (event.code === 'ArrowRight') {
246
341
  event.preventDefault();
247
- this.updateCurrentDate(getNextDay(this.currentDate), true);
342
+ this.updateCurrentDate(this.getAvailableDate(this.currentDate, 'nextDay'), true);
248
343
  }
249
344
  else if (event.code === 'ArrowUp') {
250
345
  event.preventDefault();
251
- this.updateCurrentDate(subDays(this.currentDate, 7), true);
346
+ this.updateCurrentDate(this.getAvailableDate(this.currentDate, 'previousSameWeekDay'), true);
252
347
  }
253
348
  else if (event.code === 'ArrowDown') {
254
349
  event.preventDefault();
255
- this.updateCurrentDate(addDays(this.currentDate, 7), true);
350
+ this.updateCurrentDate(this.getAvailableDate(this.currentDate, 'nextSameWeekDay'), true);
256
351
  }
257
352
  else if (event.code === 'PageUp') {
258
353
  event.preventDefault();
259
354
  if (event.shiftKey) {
260
- this.updateCurrentDate(getPreviousYear(this.currentDate), true);
355
+ this.updateCurrentDate(this.getAvailableDate(this.currentDate, 'previousYear'), true);
261
356
  }
262
357
  else {
263
- this.updateCurrentDate(getPreviousMonth(this.currentDate), true);
358
+ this.updateCurrentDate(this.getAvailableDate(this.currentDate, 'previousMonth'), true);
264
359
  }
265
360
  }
266
361
  else if (event.code === 'PageDown') {
267
362
  event.preventDefault();
268
363
  if (event.shiftKey) {
269
- this.updateCurrentDate(getNextYear(this.currentDate), true);
364
+ this.updateCurrentDate(this.getAvailableDate(this.currentDate, 'nextYear'), true);
270
365
  }
271
366
  else {
272
- this.updateCurrentDate(getNextMonth(this.currentDate), true);
367
+ this.updateCurrentDate(this.getAvailableDate(this.currentDate, 'nextMonth'), true);
273
368
  }
274
369
  }
275
370
  else if (event.code === 'Home') {
276
371
  event.preventDefault();
277
- this.updateCurrentDate(getFirstOfMonth(this.currentDate), true);
372
+ this.updateCurrentDate(this.getAvailableDate(this.currentDate, 'firstOfMonth'), true);
278
373
  }
279
374
  else if (event.code === 'End') {
280
375
  event.preventDefault();
281
- this.updateCurrentDate(getLastOfMonth(this.currentDate), true);
376
+ this.updateCurrentDate(this.getAvailableDate(this.currentDate, 'lastOfMonth'), true);
282
377
  }
283
378
  else if (event.code === 'Space' || event.code === 'Enter') {
284
379
  event.preventDefault();
@@ -318,13 +413,17 @@ const WCDatepicker = class {
318
413
  : new Date();
319
414
  }
320
415
  watchValue() {
321
- if (Boolean(this.value)) {
322
- if (Array.isArray(this.value) && this.value.length >= 1) {
323
- this.currentDate = this.value[0];
324
- }
325
- else if (this.value instanceof Date) {
326
- this.currentDate = this.value;
327
- }
416
+ if (!Boolean(this.value)) {
417
+ return;
418
+ }
419
+ if (Array.isArray(this.value)) {
420
+ this.currentDate =
421
+ this.value.length > 1 && !this.goToRangeStartOnSelect
422
+ ? this.value[1]
423
+ : this.value[0];
424
+ }
425
+ else if (this.value instanceof Date) {
426
+ this.currentDate = this.value;
328
427
  }
329
428
  }
330
429
  componentDidRender() {
@@ -351,14 +450,36 @@ const WCDatepicker = class {
351
450
  return calendarRows;
352
451
  }
353
452
  getTitle() {
354
- if (!Boolean(this.currentDate)) {
453
+ if (!Boolean(this.value)) {
355
454
  return;
356
455
  }
357
- return Intl.DateTimeFormat(this.locale, {
358
- day: 'numeric',
359
- month: 'long',
360
- year: 'numeric'
361
- }).format(this.currentDate);
456
+ if (this.isRangeValue(this.value)) {
457
+ const startDate = Intl.DateTimeFormat(this.locale, {
458
+ day: 'numeric',
459
+ month: 'long',
460
+ year: 'numeric'
461
+ }).format(this.value[0]);
462
+ const endDate = this.value[1]
463
+ ? Intl.DateTimeFormat(this.locale, {
464
+ day: 'numeric',
465
+ month: 'long',
466
+ year: 'numeric'
467
+ }).format(this.value[1])
468
+ : undefined;
469
+ if (Boolean(endDate)) {
470
+ return `${startDate} - ${endDate}`;
471
+ }
472
+ else {
473
+ return startDate;
474
+ }
475
+ }
476
+ else {
477
+ return Intl.DateTimeFormat(this.locale, {
478
+ day: 'numeric',
479
+ month: 'long',
480
+ year: 'numeric'
481
+ }).format(this.value);
482
+ }
362
483
  }
363
484
  focusDate(date) {
364
485
  var _a;
@@ -374,7 +495,11 @@ const WCDatepicker = class {
374
495
  const monthChanged = month !== this.currentDate.getMonth() ||
375
496
  year !== this.currentDate.getFullYear();
376
497
  if (monthChanged) {
377
- this.changeMonth.emit({ month: getMonth(date), year: getYear(date) });
498
+ this.changeMonth.emit({
499
+ month: getMonth(date),
500
+ year: getYear(date),
501
+ day: date.getDate()
502
+ });
378
503
  if (moveFocus) {
379
504
  this.moveFocusAfterMonthChanged = true;
380
505
  }
@@ -419,7 +544,7 @@ const WCDatepicker = class {
419
544
  return (index.h(index.Host, null, index.h("div", { "aria-disabled": String(this.disabled), "aria-label": this.labels.picker, class: {
420
545
  [this.getClassName()]: true,
421
546
  [`${this.getClassName()}--disabled`]: this.disabled
422
- }, role: "group" }, index.h("div", { class: this.getClassName('header') }, index.h("span", { "aria-atomic": "true", "aria-live": "polite", class: "visually-hidden" }, this.getTitle()), this.showYearStepper && (index.h("button", { "aria-label": this.labels.previousYearButton, class: this.getClassName('previous-year-button'), disabled: this.disabled, innerHTML: this.previousYearButtonContent || undefined, onClick: this.previousYear, type: "button" }, index.h("svg", { fill: "none", height: "24", "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", stroke: "currentColor", viewBox: "0 0 24 24", width: "24" }, index.h("polyline", { points: "11 17 6 12 11 7" }), index.h("polyline", { points: "18 17 13 12 18 7" })))), this.showMonthStepper && (index.h("button", { "aria-label": this.labels.previousMonthButton, class: this.getClassName('previous-month-button'), disabled: this.disabled, innerHTML: this.previousMonthButtonContent || undefined, onClick: this.previousMonth, type: "button" }, index.h("svg", { fill: "none", height: "24", "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", stroke: "currentColor", viewBox: "0 0 24 24", width: "24" }, index.h("polyline", { points: "15 18 9 12 15 6" })))), index.h("span", { class: this.getClassName('current-month') }, index.h("select", { "aria-label": this.labels.monthSelect, class: this.getClassName('month-select'), disabled: this.disabled, name: "month", onChange: this.onMonthSelect }, getMonths(this.locale).map((month, index$1) => (index.h("option", { key: month, selected: this.currentDate.getMonth() === index$1, value: index$1 + 1 }, month)))), index.h("input", { "aria-label": this.labels.yearSelect, class: this.getClassName('year-select'), disabled: this.disabled, max: 9999, maxLength: 4, min: 1, name: "year", onChange: this.onYearSelect, type: "number", value: this.currentDate.getFullYear() })), this.showMonthStepper && (index.h("button", { "aria-label": this.labels.nextMonthButton, class: this.getClassName('next-month-button'), disabled: this.disabled, innerHTML: this.nextMonthButtonContent || undefined, onClick: this.nextMonth, type: "button" }, index.h("svg", { fill: "none", height: "24", "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", stroke: "currentColor", viewBox: "0 0 24 24", width: "24" }, index.h("polyline", { points: "9 18 15 12 9 6" })))), this.showYearStepper && (index.h("button", { "aria-label": this.labels.nextYearButton, class: this.getClassName('next-year-button'), disabled: this.disabled, innerHTML: this.nextYearButtonContent || undefined, onClick: this.nextYear, type: "button" }, index.h("svg", { fill: "none", height: "24", "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", stroke: "currentColor", viewBox: "0 0 24 24", width: "24" }, index.h("polyline", { points: "13 17 18 12 13 7" }), index.h("polyline", { points: "6 17 11 12 6 7" }))))), index.h("div", { class: this.getClassName('body') }, index.h("table", { class: this.getClassName('calendar'), onKeyDown: this.onKeyDown, role: "grid" }, index.h("thead", { class: this.getClassName('calendar-header') }, index.h("tr", { class: this.getClassName('weekday-row') }, this.weekdays.map((weekday) => (index.h("th", { abbr: weekday[1], class: this.getClassName('weekday'), key: weekday[0], scope: "col" }, index.h("span", null, weekday[0])))))), index.h("tbody", null, this.getCalendarRows().map((calendarRow) => {
547
+ }, role: "group" }, index.h("div", { class: this.getClassName('header') }, index.h("span", { "aria-atomic": "true", "aria-live": "polite", class: "visually-hidden" }, this.getTitle()), this.showYearStepper && (index.h("button", { "aria-label": this.labels.previousYearButton, class: this.getClassName('previous-year-button'), disabled: this.disabled, innerHTML: this.previousYearButtonContent || undefined, onClick: this.previousYear, type: "button" }, index.h("svg", { fill: "none", height: "24", "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", stroke: "currentColor", viewBox: "0 0 24 24", width: "24" }, index.h("polyline", { points: "11 17 6 12 11 7" }), index.h("polyline", { points: "18 17 13 12 18 7" })))), this.showMonthStepper && (index.h("button", { "aria-label": this.labels.previousMonthButton, class: this.getClassName('previous-month-button'), disabled: this.disabled, innerHTML: this.previousMonthButtonContent || undefined, onClick: this.previousMonth, type: "button" }, index.h("svg", { fill: "none", height: "24", "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", stroke: "currentColor", viewBox: "0 0 24 24", width: "24" }, index.h("polyline", { points: "15 18 9 12 15 6" })))), index.h("span", { class: this.getClassName('current-month') }, index.h("select", { title: this.labels.monthSelect, "aria-label": this.labels.monthSelect, class: this.getClassName('month-select'), disabled: this.disabled, name: "month", onChange: this.onMonthSelect }, getMonths(this.locale).map((month, index$1) => (index.h("option", { key: month, selected: this.currentDate.getMonth() === index$1, value: index$1 + 1 }, month)))), index.h("input", { title: this.labels.yearSelect, "aria-label": this.labels.yearSelect, class: this.getClassName('year-select'), disabled: this.disabled, max: 9999, maxLength: 4, min: 1, name: "year", onChange: this.onYearSelect, type: "number", value: this.currentDate.getFullYear() })), this.showMonthStepper && (index.h("button", { "aria-label": this.labels.nextMonthButton, class: this.getClassName('next-month-button'), disabled: this.disabled, innerHTML: this.nextMonthButtonContent || undefined, onClick: this.nextMonth, type: "button" }, index.h("svg", { fill: "none", height: "24", "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", stroke: "currentColor", viewBox: "0 0 24 24", width: "24" }, index.h("polyline", { points: "9 18 15 12 9 6" })))), this.showYearStepper && (index.h("button", { "aria-label": this.labels.nextYearButton, class: this.getClassName('next-year-button'), disabled: this.disabled, innerHTML: this.nextYearButtonContent || undefined, onClick: this.nextYear, type: "button" }, index.h("svg", { fill: "none", height: "24", "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", stroke: "currentColor", viewBox: "0 0 24 24", width: "24" }, index.h("polyline", { points: "13 17 18 12 13 7" }), index.h("polyline", { points: "6 17 11 12 6 7" }))))), index.h("div", { class: this.getClassName('body') }, index.h("table", { class: this.getClassName('calendar'), onKeyDown: this.onKeyDown, role: "grid" }, index.h("thead", { class: this.getClassName('calendar-header') }, index.h("tr", { class: this.getClassName('weekday-row') }, this.weekdays.map((weekday) => (index.h("th", { "aria-label": weekday[1], abbr: weekday[1], class: this.getClassName('weekday'), key: weekday[0], scope: "col" }, index.h("span", null, weekday[0])))))), index.h("tbody", null, this.getCalendarRows().map((calendarRow) => {
423
548
  const rowKey = `row-${calendarRow[0].getMonth()}-${calendarRow[0].getDate()}`;
424
549
  return (index.h("tr", { class: this.getClassName('calendar-row'), key: rowKey }, calendarRow.map((day) => {
425
550
  var _a, _b, _c, _d, _e;
@@ -464,11 +589,12 @@ const WCDatepicker = class {
464
589
  : isToday
465
590
  ? 'em'
466
591
  : 'span';
467
- return (index.h("td", { "aria-disabled": String(isDisabled), "aria-selected": isSelected ? 'true' : undefined, class: className, "data-date": getISODateString(day), key: cellKey, onClick: this.onClick, onMouseEnter: this.onMouseEnter, onMouseLeave: this.onMouseLeave, role: "gridcell", tabIndex: isSameDay(day, this.currentDate) && !this.disabled
592
+ return (index.h("td", { "aria-disabled": String(isDisabled), "aria-selected": isSelected ? 'true' : undefined, "aria-current": isToday ? 'date' : isSelected ? 'true' : undefined, class: className, "data-date": getISODateString(day), key: cellKey, onClick: this.onClick, onMouseEnter: this.onMouseEnter, onMouseLeave: this.onMouseLeave, role: "gridcell", tabIndex: isSameDay(day, this.currentDate) && !this.disabled
468
593
  ? 0
469
594
  : -1 }, index.h(Tag, { "aria-hidden": "true" }, day.getDate()), index.h("span", { class: "visually-hidden" }, Intl.DateTimeFormat(this.locale, {
470
595
  day: 'numeric',
471
- month: 'long'
596
+ month: 'long',
597
+ year: 'numeric'
472
598
  }).format(day))));
473
599
  })));
474
600
  })))), showFooter && (index.h("div", { class: this.getClassName('footer') }, this.showTodayButton && (index.h("button", { class: this.getClassName('today-button'), disabled: this.disabled, innerHTML: this.todayButtonContent || undefined, onClick: this.showToday, type: "button" }, this.labels.todayButton)), this.showClearButton && (index.h("button", { class: this.getClassName('clear-button'), disabled: this.disabled, innerHTML: this.clearButtonContent || undefined, onClick: this.clear, type: "button" }, this.labels.clearButton)))))));
@@ -47,10 +47,13 @@
47
47
  .button:disabled,
48
48
  .button.button--disabled {
49
49
  color: var(--s-text-disabled);
50
- background-color: var(--swirl-ghost-button-background-disabled);
51
50
  cursor: default;
52
51
  }
53
52
 
53
+ .button:disabled:where(:not(.button--variant-ghost)), .button.button--disabled:where(:not(.button--variant-ghost)) {
54
+ background-color: var(--swirl-ghost-button-background-disabled);
55
+ }
56
+
54
57
  .button:disabled .button__icon, .button.button--disabled .button__icon {
55
58
  color: var(--s-icon-disabled);
56
59
  }
@@ -422,7 +425,8 @@
422
425
 
423
426
  .button--variant-translucent {
424
427
  color: var(--s-text-default);
425
- outline: var(--s-border-width-default) solid var(--s-border-translucent-outline);
428
+ outline: var(--s-border-width-default) solid
429
+ var(--s-border-translucent-outline);
426
430
  outline-offset: calc(var(--s-border-width-default) * -1);
427
431
  background: var(--s-translucent-medium-default);
428
432
  box-shadow: var(--s-shadow-level-2);
@@ -452,7 +456,6 @@
452
456
  color: var(--s-icon-default);
453
457
  }
454
458
 
455
-
456
459
  .button--icon-position-end .button__icon {
457
460
  margin-right: calc(-1 * var(--s-space-4));
458
461
  margin-left: 0;
@@ -1,4 +1,6 @@
1
1
  :host {
2
+ --swirl-table-shadow-rgba: rgba(23, 23, 23, 0.2);
3
+
2
4
  position: relative;
3
5
  display: block;
4
6
  }
@@ -7,6 +9,10 @@
7
9
  box-sizing: border-box;
8
10
  }
9
11
 
12
+ :host-context(html.theme-dark) {
13
+ --swirl-table-shadow-rgba: rgba(0, 0, 0, 0.2);
14
+ }
15
+
10
16
  .table--keyboard-move:focus-within {
11
17
  --swirl-table-moving-row-border: var(--s-border-width-default) solid
12
18
  var(--s-border-highlight);
@@ -23,13 +29,14 @@
23
29
  }
24
30
 
25
31
  .table__container--scrolled {
26
- --swirl-table-sticky-right-shadow: 4px 0 16px -4px rgba(23, 23, 23, 0.04),
27
- 2px 0 4px -2px rgba(23, 23, 23, 0.04);
32
+ --swirl-table-sticky-right-shadow: 4px 0 16px -4px var(--swirl-table-shadow-rgba),
33
+ 2px 0 4px -2px var(--swirl-table-shadow-rgba);
28
34
  }
29
35
 
30
36
  .table__container--scrollable:not(.table__container--scrolled-to-end) {
31
- --swirl-table-sticky-left-shadow: 0px 4px 16px 0px rgba(23, 23, 23, 0.04),
32
- 0px 1px 4px 0px rgba(23, 23, 23, 0.04);
37
+ --swirl-table-sticky-left-shadow: 0px 4px 16px 0px
38
+ var(--swirl-table-shadow-rgba),
39
+ 0px 1px 4px 0px var(--swirl-table-shadow-rgba);
33
40
  }
34
41
 
35
42
  .table__table {