@kirbydesign/designsystem 12.0.0-dev-67d5287 → 12.0.0-dev-9f721bb
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.
- package/fesm2022/kirbydesign-designsystem-accordion.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-avatar.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-badge.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-button.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-calendar.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-card.mjs +24 -24
- package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs +14 -6
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-divider.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs +19 -8
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-flag.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-form-field.mjs +32 -32
- package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-gesture.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-header.mjs +19 -19
- package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
- package/fesm2022/kirbydesign-designsystem-icon.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-list.mjs +49 -46
- package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +8 -8
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-menu.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal.mjs +59 -50
- package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-page.mjs +69 -48
- package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-radio.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-range.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-segmented-control.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-segmented-control.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +16 -7
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared.mjs +21 -21
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-spinner.mjs +9 -9
- package/fesm2022/kirbydesign-designsystem-spinner.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +14 -14
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tabs.mjs +17 -17
- package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs +305 -303
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-toggle.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem.mjs +10 -10
- package/package.json +2 -2
- package/types/kirbydesign-designsystem-card.d.ts +2 -2
- package/types/kirbydesign-designsystem-card.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-checkbox.d.ts +7 -1
- package/types/kirbydesign-designsystem-checkbox.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-empty-state.d.ts +11 -0
- package/types/kirbydesign-designsystem-empty-state.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-list.d.ts +5 -0
- package/types/kirbydesign-designsystem-list.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-modal.d.ts +2 -1
- package/types/kirbydesign-designsystem-modal.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-page.d.ts +4 -0
- package/types/kirbydesign-designsystem-page.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-shared-floating.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-testing-base.d.ts +5 -0
- package/types/kirbydesign-designsystem-testing-base.d.ts.map +1 -1
|
@@ -371,7 +371,7 @@ var CalendarComponent = class CalendarComponent {
|
|
|
371
371
|
static {
|
|
372
372
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
373
373
|
minVersion: "12.0.0",
|
|
374
|
-
version: "22.2.
|
|
374
|
+
version: "22.2.3",
|
|
375
375
|
ngImport: i0,
|
|
376
376
|
type: CalendarComponent,
|
|
377
377
|
deps: [
|
|
@@ -386,7 +386,7 @@ var CalendarComponent = class CalendarComponent {
|
|
|
386
386
|
static {
|
|
387
387
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
388
388
|
minVersion: "17.0.0",
|
|
389
|
-
version: "22.2.
|
|
389
|
+
version: "22.2.3",
|
|
390
390
|
type: CalendarComponent,
|
|
391
391
|
isStandalone: true,
|
|
392
392
|
selector: "kirby-calendar",
|
|
@@ -417,8 +417,8 @@ var CalendarComponent = class CalendarComponent {
|
|
|
417
417
|
host: { properties: { "class.has-year-navigator": "this._hasYearNavigator" } },
|
|
418
418
|
usesOnChanges: true,
|
|
419
419
|
ngImport: i0,
|
|
420
|
-
template: "<div class=\"header\">\n <div class=\"month-navigator\">\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('previousMonth')\"\n [attr.aria-disabled]=\"_canNavigateBack ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(-1)\"\n >\n <kirby-icon name=\"arrow-back\" aria-hidden=\"true\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\" [id]=\"_tableMonthId\" aria-live=\"polite\" aria-atomic=\"true\">\n <span class=\"month\">{{ activeMonthName }}</span>\n @if (!_hasYearNavigator) {\n <span class=\"year\">{{ activeYear }}</span>\n }\n </div>\n\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('nextMonth')\"\n [attr.aria-disabled]=\"_canNavigateForward ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(1)\"\n >\n <kirby-icon name=\"arrow-more\" aria-hidden=\"true\"></kirby-icon>\n </button>\n </div>\n @if (_hasYearNavigator) {\n <kirby-dropdown\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n [attr.aria-label]=\"translations.get('selectYear')\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n ></kirby-dropdown>\n }\n</div>\n\n<table [attr.aria-labelledby]=\"_tableMonthId\" role=\"grid\">\n <thead>\n <tr>\n @for (weekDay of _weekDays; track weekDay.fullName) {\n <th scope=\"col\">\n <span aria-hidden=\"true\">{{ weekDay.firstLetterCapitalized }}</span>\n <span class=\"kirby-visually-hidden\">{{ weekDay.fullName }}</span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @for (week of _month; track $index) {\n <tr>\n @for (day of week; track day.date + '-' + day.monthIndex + '-' + day.year) {\n <td [attr.aria-selected]=\"day.isSelected ? true : false\">\n <button\n kirby-button\n type=\"button\"\n (click)=\"_onDateSelected(day)\"\n (keydown)=\"_onDateKeydown($event)\"\n class=\"day\"\n [class.current-month]=\"day.isCurrentMonth\"\n [class.weekend]=\"day.isWeekend\"\n [class.today]=\"day.isToday\"\n [class.selectable]=\"day.isSelectable\"\n [class.selected]=\"day.isSelected\"\n [class.focussed]=\"day.isFocussed\"\n [class.past]=\"day.isPast\"\n [attr.aria-label]=\"day.ariaLabel\"\n [attr.aria-disabled]=\"day.isSelectable ? null : true\"\n [noDecoration]=\"day.isSelected
|
|
421
|
-
styles: [":host{font-size:var(--kirby-font-size-n);color:var(--kirby-color-content-base)}table{width:100%;border-collapse:collapse;-webkit-user-select:none;user-select:none;margin-bottom:var(--kirby-spacing-xxs)}th,td{text-align:center;padding:0}th:first-child,td:first-child{padding-left:var(--kirby-spacing-xxs)}th:last-child,td:last-child{padding-right:var(--kirby-spacing-xxs)}th{height:50px;border-bottom:
|
|
420
|
+
template: "<div class=\"header\">\n <div class=\"month-navigator\">\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('previousMonth')\"\n [attr.aria-disabled]=\"_canNavigateBack ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(-1)\"\n >\n <kirby-icon name=\"arrow-back\" aria-hidden=\"true\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\" [id]=\"_tableMonthId\" aria-live=\"polite\" aria-atomic=\"true\">\n <span class=\"month\">{{ activeMonthName }}</span>\n @if (!_hasYearNavigator) {\n <span class=\"year\">{{ activeYear }}</span>\n }\n </div>\n\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('nextMonth')\"\n [attr.aria-disabled]=\"_canNavigateForward ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(1)\"\n >\n <kirby-icon name=\"arrow-more\" aria-hidden=\"true\"></kirby-icon>\n </button>\n </div>\n @if (_hasYearNavigator) {\n <kirby-dropdown\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n [attr.aria-label]=\"translations.get('selectYear')\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n ></kirby-dropdown>\n }\n</div>\n\n<table [attr.aria-labelledby]=\"_tableMonthId\" role=\"grid\">\n <thead>\n <tr>\n @for (weekDay of _weekDays; track weekDay.fullName) {\n <th scope=\"col\">\n <span aria-hidden=\"true\">{{ weekDay.firstLetterCapitalized }}</span>\n <span class=\"kirby-visually-hidden\">{{ weekDay.fullName }}</span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @for (week of _month; track $index) {\n <tr>\n @for (day of week; track day.date + '-' + day.monthIndex + '-' + day.year) {\n <td [attr.aria-selected]=\"day.isSelected ? true : false\">\n <button\n kirby-button\n type=\"button\"\n (click)=\"_onDateSelected(day)\"\n (keydown)=\"_onDateKeydown($event)\"\n class=\"day\"\n [class.current-month]=\"day.isCurrentMonth\"\n [class.weekend]=\"day.isWeekend\"\n [class.today]=\"day.isToday\"\n [class.selectable]=\"day.isSelectable\"\n [class.selected]=\"day.isSelected\"\n [class.focussed]=\"day.isFocussed\"\n [class.past]=\"day.isPast\"\n [attr.aria-label]=\"day.ariaLabel\"\n [attr.aria-disabled]=\"day.isSelectable ? null : true\"\n [noDecoration]=\"!day.isSelected\"\n [disabled]=\"day.isFocusable ? null : true\"\n [tabIndex]=\"day.isFocussed ? 0 : -1\"\n >\n {{ day.date }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n",
|
|
421
|
+
styles: [":host{font-size:var(--kirby-font-size-n);color:var(--kirby-color-content-base)}table{width:100%;border-collapse:collapse;-webkit-user-select:none;user-select:none;margin-bottom:var(--kirby-spacing-xxs)}th,td{text-align:center;padding:0}th:first-child,td:first-child{padding-left:var(--kirby-spacing-xxs)}th:last-child,td:last-child{padding-right:var(--kirby-spacing-xxs)}th{height:50px;border-bottom:var(--kirby-stroke-xs) solid var(--kirby-color-border-base-quiet)}.header,th,td{background-color:transparent}.header{display:flex;justify-content:space-between;margin:var(--kirby-spacing-xxs);margin-bottom:0}.month-navigator{display:flex;flex-grow:1;align-items:center;justify-content:space-between}.month-and-year{-webkit-user-select:none;user-select:none;font-weight:var(--kirby-font-weight-bold)}.month-and-year .month{margin-right:var(--kirby-spacing-xxs)}:host(.has-year-navigator) .month-navigator{flex-grow:0}:host(.has-year-navigator) .month-and-year{width:80px;margin:0 var(--kirby-spacing-xxs);text-align:center}:host(.has-year-navigator) .month{margin-right:0}.day{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--kirby-spacing-xl) * .5);min-width:var(--kirby-spacing-xl);min-height:var(--kirby-spacing-xl);width:var(--kirby-spacing-xl);height:var(--kirby-spacing-xl);margin:var(--kirby-spacing-xxxs) 0;font-size:var(--kirby-font-size-n);padding-inline:0}.day:focus{z-index:var(--kirby-z-index-default)}.day.selectable:not(.current-month,.selected){color:var(--kirby-color-content-base-quiet)}.day.today:not(.selected,:focus-visible){border:var(--kirby-stroke-xs) solid var(--kirby-color-border-base)}\n"],
|
|
422
422
|
dependencies: [
|
|
423
423
|
{
|
|
424
424
|
kind: "component",
|
|
@@ -468,7 +468,7 @@ var CalendarComponent = class CalendarComponent {
|
|
|
468
468
|
};
|
|
469
469
|
i0.ɵɵngDeclareClassMetadata({
|
|
470
470
|
minVersion: "12.0.0",
|
|
471
|
-
version: "22.2.
|
|
471
|
+
version: "22.2.3",
|
|
472
472
|
ngImport: i0,
|
|
473
473
|
type: CalendarComponent,
|
|
474
474
|
decorators: [{
|
|
@@ -481,8 +481,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
481
481
|
],
|
|
482
482
|
selector: "kirby-calendar",
|
|
483
483
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
484
|
-
template: "<div class=\"header\">\n <div class=\"month-navigator\">\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('previousMonth')\"\n [attr.aria-disabled]=\"_canNavigateBack ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(-1)\"\n >\n <kirby-icon name=\"arrow-back\" aria-hidden=\"true\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\" [id]=\"_tableMonthId\" aria-live=\"polite\" aria-atomic=\"true\">\n <span class=\"month\">{{ activeMonthName }}</span>\n @if (!_hasYearNavigator) {\n <span class=\"year\">{{ activeYear }}</span>\n }\n </div>\n\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('nextMonth')\"\n [attr.aria-disabled]=\"_canNavigateForward ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(1)\"\n >\n <kirby-icon name=\"arrow-more\" aria-hidden=\"true\"></kirby-icon>\n </button>\n </div>\n @if (_hasYearNavigator) {\n <kirby-dropdown\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n [attr.aria-label]=\"translations.get('selectYear')\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n ></kirby-dropdown>\n }\n</div>\n\n<table [attr.aria-labelledby]=\"_tableMonthId\" role=\"grid\">\n <thead>\n <tr>\n @for (weekDay of _weekDays; track weekDay.fullName) {\n <th scope=\"col\">\n <span aria-hidden=\"true\">{{ weekDay.firstLetterCapitalized }}</span>\n <span class=\"kirby-visually-hidden\">{{ weekDay.fullName }}</span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @for (week of _month; track $index) {\n <tr>\n @for (day of week; track day.date + '-' + day.monthIndex + '-' + day.year) {\n <td [attr.aria-selected]=\"day.isSelected ? true : false\">\n <button\n kirby-button\n type=\"button\"\n (click)=\"_onDateSelected(day)\"\n (keydown)=\"_onDateKeydown($event)\"\n class=\"day\"\n [class.current-month]=\"day.isCurrentMonth\"\n [class.weekend]=\"day.isWeekend\"\n [class.today]=\"day.isToday\"\n [class.selectable]=\"day.isSelectable\"\n [class.selected]=\"day.isSelected\"\n [class.focussed]=\"day.isFocussed\"\n [class.past]=\"day.isPast\"\n [attr.aria-label]=\"day.ariaLabel\"\n [attr.aria-disabled]=\"day.isSelectable ? null : true\"\n [noDecoration]=\"day.isSelected
|
|
485
|
-
styles: [":host{font-size:var(--kirby-font-size-n);color:var(--kirby-color-content-base)}table{width:100%;border-collapse:collapse;-webkit-user-select:none;user-select:none;margin-bottom:var(--kirby-spacing-xxs)}th,td{text-align:center;padding:0}th:first-child,td:first-child{padding-left:var(--kirby-spacing-xxs)}th:last-child,td:last-child{padding-right:var(--kirby-spacing-xxs)}th{height:50px;border-bottom:
|
|
484
|
+
template: "<div class=\"header\">\n <div class=\"month-navigator\">\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('previousMonth')\"\n [attr.aria-disabled]=\"_canNavigateBack ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(-1)\"\n >\n <kirby-icon name=\"arrow-back\" aria-hidden=\"true\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\" [id]=\"_tableMonthId\" aria-live=\"polite\" aria-atomic=\"true\">\n <span class=\"month\">{{ activeMonthName }}</span>\n @if (!_hasYearNavigator) {\n <span class=\"year\">{{ activeYear }}</span>\n }\n </div>\n\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('nextMonth')\"\n [attr.aria-disabled]=\"_canNavigateForward ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(1)\"\n >\n <kirby-icon name=\"arrow-more\" aria-hidden=\"true\"></kirby-icon>\n </button>\n </div>\n @if (_hasYearNavigator) {\n <kirby-dropdown\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n [attr.aria-label]=\"translations.get('selectYear')\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n ></kirby-dropdown>\n }\n</div>\n\n<table [attr.aria-labelledby]=\"_tableMonthId\" role=\"grid\">\n <thead>\n <tr>\n @for (weekDay of _weekDays; track weekDay.fullName) {\n <th scope=\"col\">\n <span aria-hidden=\"true\">{{ weekDay.firstLetterCapitalized }}</span>\n <span class=\"kirby-visually-hidden\">{{ weekDay.fullName }}</span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @for (week of _month; track $index) {\n <tr>\n @for (day of week; track day.date + '-' + day.monthIndex + '-' + day.year) {\n <td [attr.aria-selected]=\"day.isSelected ? true : false\">\n <button\n kirby-button\n type=\"button\"\n (click)=\"_onDateSelected(day)\"\n (keydown)=\"_onDateKeydown($event)\"\n class=\"day\"\n [class.current-month]=\"day.isCurrentMonth\"\n [class.weekend]=\"day.isWeekend\"\n [class.today]=\"day.isToday\"\n [class.selectable]=\"day.isSelectable\"\n [class.selected]=\"day.isSelected\"\n [class.focussed]=\"day.isFocussed\"\n [class.past]=\"day.isPast\"\n [attr.aria-label]=\"day.ariaLabel\"\n [attr.aria-disabled]=\"day.isSelectable ? null : true\"\n [noDecoration]=\"!day.isSelected\"\n [disabled]=\"day.isFocusable ? null : true\"\n [tabIndex]=\"day.isFocussed ? 0 : -1\"\n >\n {{ day.date }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n",
|
|
485
|
+
styles: [":host{font-size:var(--kirby-font-size-n);color:var(--kirby-color-content-base)}table{width:100%;border-collapse:collapse;-webkit-user-select:none;user-select:none;margin-bottom:var(--kirby-spacing-xxs)}th,td{text-align:center;padding:0}th:first-child,td:first-child{padding-left:var(--kirby-spacing-xxs)}th:last-child,td:last-child{padding-right:var(--kirby-spacing-xxs)}th{height:50px;border-bottom:var(--kirby-stroke-xs) solid var(--kirby-color-border-base-quiet)}.header,th,td{background-color:transparent}.header{display:flex;justify-content:space-between;margin:var(--kirby-spacing-xxs);margin-bottom:0}.month-navigator{display:flex;flex-grow:1;align-items:center;justify-content:space-between}.month-and-year{-webkit-user-select:none;user-select:none;font-weight:var(--kirby-font-weight-bold)}.month-and-year .month{margin-right:var(--kirby-spacing-xxs)}:host(.has-year-navigator) .month-navigator{flex-grow:0}:host(.has-year-navigator) .month-and-year{width:80px;margin:0 var(--kirby-spacing-xxs);text-align:center}:host(.has-year-navigator) .month{margin-right:0}.day{display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--kirby-spacing-xl) * .5);min-width:var(--kirby-spacing-xl);min-height:var(--kirby-spacing-xl);width:var(--kirby-spacing-xl);height:var(--kirby-spacing-xl);margin:var(--kirby-spacing-xxxs) 0;font-size:var(--kirby-font-size-n);padding-inline:0}.day:focus{z-index:var(--kirby-z-index-default)}.day.selectable:not(.current-month,.selected){color:var(--kirby-color-content-base-quiet)}.day.today:not(.selected,:focus-visible){border:var(--kirby-stroke-xs) solid var(--kirby-color-border-base)}\n"]
|
|
486
486
|
}]
|
|
487
487
|
}],
|
|
488
488
|
ctorParameters: () => [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-calendar.mjs","names":[],"sources":["../../calendar/src/calendar.component.ts","../../calendar/src/calendar.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n LOCALE_ID,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n add,\n eachDayOfInterval,\n endOfWeek,\n format,\n getYear,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n isWeekend,\n lastDayOfWeek,\n Locale as LocaleDateFns,\n startOfDay,\n startOfMonth,\n startOfWeek,\n} from 'date-fns';\nimport { fromZonedTime, toZonedTime } from 'date-fns-tz';\nimport { da, de, enGB, enUS } from 'date-fns/locale';\n\nimport { capitalizeFirstLetter } from '@kirbydesign/core';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { DropdownComponent } from '@kirbydesign/designsystem/dropdown';\nimport { UniqueIdGenerator } from '@kirbydesign/designsystem/helpers';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\n\nimport { TranslationService } from '@kirbydesign/designsystem/shared';\nimport { CalendarDay, CalendarDayMetadata } from './interfaces/calendar-day';\nimport { CalendarYearNavigatorConfig } from './interfaces/calendar-year-navigator-config';\n\nexport type Locale = LocaleDateFns;\n\ninterface WeekDay {\n firstLetterCapitalized: string;\n fullName: string;\n}\n\nenum TimeUnit {\n years = 'years',\n months = 'months',\n weeks = 'weeks',\n days = 'days',\n hours = 'hours',\n minutes = 'minutes',\n seconds = 'seconds',\n milliseconds = 'milliseconds',\n}\n\n@Component({\n imports: [DropdownComponent, ButtonComponent, IconComponent],\n selector: 'kirby-calendar',\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CalendarComponent implements OnInit, OnChanges {\n @Output() dateChange = new EventEmitter<Date>();\n @Output() dateSelect = new EventEmitter<Date>();\n @Output() yearSelect = new EventEmitter<number>();\n @Output() previousMonthClicked = new EventEmitter<Date>();\n @Output() nextMonthClicked = new EventEmitter<Date>();\n @Input() timezone: 'local' | 'UTC' = 'local';\n @Input() disableWeekends = false;\n @Input() disablePastDates = false;\n @Input() disableFutureDates = false;\n @Input() alwaysEnableToday = false;\n\n @Input() set locales(locales: { [key: string]: Locale }) {\n console.warn(\n `Supplying additional locales to the Kirby Calendar Component via an input property is deprecated and should not be used.\n A future update will allow injecting additional locales via a provider instead.`\n );\n }\n @Input() customLocales: { [key: string]: Locale } = {};\n /**\n * @deprecated This input is no longer needed. The year selection dropdown now always uses popover positioning.\n * This input will be removed in a future major version.\n */\n @Input() set usePopover(_value: boolean) {\n console.warn(\n `[Kirby Calendar] The 'usePopover' input is deprecated and no longer has any effect. \n The year selection dropdown now always uses popover positioning. This input will be removed in a future major version.`\n );\n }\n /**\n * Configuration for the year navigator.\n *\n * Internally, calendar component:\n * - bases yearNavigatorOptions.from and yearNavigatorOptions.to on todayDate if a number is provided\n * - prioritizes minDate and maxDate over yearNavigatorOptions.from and yearNavigatorOptions.to\n */\n @Input() yearNavigatorOptions: CalendarYearNavigatorConfig;\n\n _tableMonthId = UniqueIdGenerator.scopedTo('kirby-calendar-month').next();\n _month: CalendarDay[][];\n _weekDays: WeekDay[];\n private selectedDay: CalendarDay;\n private focussedDay: CalendarDay;\n // NOTE: Internally, all Dates\n // are normalized to point to local timezone midnight, regardless of the timezone\n // setting.\n private activeMonth: Date;\n private _selectedDate: Date;\n private _disabledDates: Date[] = [];\n private _enabledDates: Date[] = [];\n private _todayDate: Date;\n private _minDate: Date;\n private _maxDate: Date;\n private focussedDate: Date;\n private locale: Locale;\n private timeZoneName: string;\n private includedLocales = { da, de, enGB, enUS };\n\n get selectedDate(): Date {\n return this._selectedDate;\n }\n\n @Input() set selectedDate(valueLocalOrUTC: Date | null) {\n const value = this.normalizeDate(valueLocalOrUTC);\n\n if (valueLocalOrUTC) {\n this.setActiveMonth(value);\n }\n\n if (this.hasDateChanged(value, this._selectedDate)) {\n this.onSelectedDateChange(value);\n this.focusDate(value);\n this._selectedDate = value;\n }\n }\n\n get disabledDates(): Date[] {\n return this._disabledDates;\n }\n\n @Input() set disabledDates(value: Date[]) {\n this._disabledDates = (value || []).map((date) => this.normalizeDate(date));\n }\n\n get enabledDates(): Date[] {\n return this._enabledDates;\n }\n\n @Input() set enabledDates(value: Date[]) {\n this._enabledDates = (value || []).map((date) => this.normalizeDate(date));\n }\n\n get todayDate(): Date {\n return this._todayDate;\n }\n\n @Input() set todayDate(value: Date) {\n this._todayDate = this.normalizeDate(value);\n }\n\n get minDate(): Date {\n return this._minDate;\n }\n\n @Input() set minDate(value: Date) {\n if (value && this.activeMonth && isBefore(this.activeMonth, value)) {\n this.setActiveMonth(value);\n }\n this._minDate = this.normalizeDate(value);\n }\n\n get maxDate(): Date {\n return this._maxDate;\n }\n\n @Input() set maxDate(value: Date) {\n if (value && this.activeMonth && isAfter(this.activeMonth, value)) {\n this.setActiveMonth(value);\n }\n this._maxDate = this.normalizeDate(value);\n }\n\n get activeMonthName(): string {\n return capitalizeFirstLetter(this.formatWithLocale(this.activeMonth, 'MMMM'));\n }\n\n get activeYear(): string {\n return this.formatWithLocale(this.activeMonth, 'yyyy');\n }\n\n /**\n * Gets navigable years for year navigator based on yearNavigatorOptions.\n */\n get navigableYears(): string[] {\n const dateOfFirstNavigableYear =\n this.minDate || this.getDateFromNavigableYear(this.yearNavigatorOptions.from);\n\n const dateOfLastNavigableYear =\n this.maxDate || this.getDateFromNavigableYear(this.yearNavigatorOptions.to);\n\n return this.getYearsBetweenDates(dateOfFirstNavigableYear, dateOfLastNavigableYear);\n }\n\n get navigatedYear(): number {\n return this.navigableYears.indexOf(this.activeYear);\n }\n\n @HostBinding('class.has-year-navigator')\n get _hasYearNavigator() {\n return !!this.yearNavigatorOptions;\n }\n\n private getTodayDate() {\n return startOfDay(this.todayDate ?? new Date());\n }\n\n constructor(\n @Inject(LOCALE_ID) locale: string,\n private elementRef: ElementRef,\n private cdr: ChangeDetectorRef,\n public translations: TranslationService\n ) {\n this.locale = this.mapLocale(locale);\n this.timeZoneName = Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n private formatWithLocale(date: Date, formatString: string): string {\n return format(date, formatString, {\n locale: this.locale,\n });\n }\n\n private mapLocale(locale: string): Locale {\n if (locale === 'en') {\n locale = 'enGB'; // if english locale is provided without region, we default to GB\n }\n locale = locale.replace('-', '');\n const availableLocales = { ...this.includedLocales, ...this.locales, ...this.customLocales };\n return availableLocales[locale] || this.includedLocales.enGB; // Default to enGB if injected locale doesnt exist\n }\n\n private formatDateLabel(): string {\n const localeDateFormats = {\n da: 'd. MMMM',\n de: 'd. MMMM',\n 'en-GB': 'd MMMM',\n 'en-US': 'MMMM d',\n };\n\n const defaultDateFormat = localeDateFormats['en-US'];\n const dateFormat = localeDateFormats[this.locale.code] || defaultDateFormat;\n return dateFormat;\n }\n\n ngOnInit() {\n this.focussedDate = this.getTodayDate();\n this._weekDays = this.getWeekDays();\n this.setActiveMonth(this.selectedDate);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.activeMonth) return;\n if (\n changes.disableWeekends ||\n changes.disablePastDates ||\n changes.disableFutureDates ||\n changes.disabledDates ||\n changes.enabledDates ||\n changes.minDate ||\n changes.maxDate ||\n changes.todayDate ||\n changes.timezone\n ) {\n this.refreshActiveMonth();\n }\n }\n\n private setActiveMonth(date: Date = new Date()) {\n if (!this.activeMonth || !isSameMonth(this.activeMonth, date)) {\n this.activeMonth = startOfMonth(date);\n this.refreshActiveMonth();\n }\n }\n\n // For leniency, the component will accept any Date that points to either UTC midnight\n // or to local timezone midnight although we will internally normalize the representation\n // of all received dates to point to local timezone midnight.\n // We currently log no warnings if the date doesn't match the timezone setting or\n // if it doesn't point to midnight.\n private normalizeDate(dateLocalOrUTC: Date) {\n if (!dateLocalOrUTC) return;\n\n if (startOfDay(dateLocalOrUTC).getTime() === dateLocalOrUTC.getTime()) {\n // date is local timezone midnight\n return dateLocalOrUTC;\n }\n if (\n startOfDay(toZonedTime(dateLocalOrUTC, this.timeZoneName)).getTime() ===\n toZonedTime(dateLocalOrUTC, this.timeZoneName).getTime()\n ) {\n // the date is a UTC midnight; create the equivalent local timezone midnight date\n const normalizedUTCdate = toZonedTime(dateLocalOrUTC, this.timeZoneName);\n return normalizedUTCdate;\n }\n // does not point to midnight so we make it\n return startOfDay(dateLocalOrUTC);\n }\n\n private getWeekDays(): WeekDay[] {\n const now = new Date();\n const week = eachDayOfInterval({\n start: startOfWeek(now, { locale: this.locale }),\n end: endOfWeek(now, { locale: this.locale }),\n });\n\n const weekdayNarrowFormat = 'EEEEE';\n const weekdayWideFormat = 'EEEE';\n\n return week.map((date) => ({\n firstLetterCapitalized: this.formatWithLocale(date, weekdayNarrowFormat),\n fullName: this.formatWithLocale(date, weekdayWideFormat),\n }));\n }\n\n private hasDateChanged(newDate: Date, previousDate: Date): boolean {\n if (!newDate && !previousDate) {\n return false;\n }\n if (newDate instanceof Date && !previousDate) {\n return true;\n }\n return !isSameDay(newDate, previousDate);\n }\n\n private isDisabledDate(date: Date): boolean {\n return this.disabledDates.some((disabledDate) => isSameDay(disabledDate, date));\n }\n\n private isEnabledDate(date: Date): boolean {\n return (\n this._enabledDates.length === 0 ||\n this.enabledDates.some((enabledDate) => isSameDay(enabledDate, date))\n );\n }\n\n refreshActiveMonth() {\n if (!this.activeMonth) return;\n\n const monthStart = startOfMonth(this.activeMonth);\n const startOfFirstWeek = startOfWeek(monthStart, { locale: this.locale });\n\n const totalNumberOfDays = 42; // Always show 42 days (6 weeks) in calendar\n const daysArray = Array.from(Array(totalNumberOfDays).keys());\n const today = this.getTodayDate();\n\n const calendarDays: CalendarDay[] = daysArray.map((number) => {\n const dateOfCalendarDay = add(startOfFirstWeek, { [TimeUnit.days]: number });\n\n const calendarDay: CalendarDay = {\n date: dateOfCalendarDay.getDate(),\n monthIndex: dateOfCalendarDay.getMonth(),\n year: dateOfCalendarDay.getFullYear(),\n ariaLabel: this.formatWithLocale(dateOfCalendarDay, this.formatDateLabel()),\n ...this.getCalendarDayMetadata(dateOfCalendarDay, today, monthStart),\n };\n if (calendarDay.isSelected) {\n this.selectedDay = calendarDay;\n }\n if (calendarDay.isFocussed) {\n this.focussedDay = calendarDay;\n }\n return calendarDay;\n });\n this._month = this.chunk(calendarDays, 7);\n }\n\n private getCalendarDayMetadata(date: Date, today: Date, monthStart: Date): CalendarDayMetadata {\n return {\n isToday: isSameDay(today, date),\n isPast: isBefore(date, today),\n isFuture: isAfter(date, today),\n isWeekend: isWeekend(date),\n isCurrentMonth: isSameMonth(date, monthStart),\n isSelectable: this.isSelectable(date, today),\n isFocusable: this.isWithinAllowedRange(date, today),\n isSelected: isSameDay(this.selectedDate, date),\n isFocussed: isSameDay(this.focussedDate, date),\n };\n }\n\n private isSelectable(date: Date, today: Date): boolean {\n if (this.alwaysEnableToday && isSameDay(today, date)) return true;\n\n if (!this.isWithinAllowedRange(date, today)) return false;\n if (this.isDisabledDate(date)) return false;\n if (!this.isEnabledDate(date)) return false;\n if (this.disableWeekends && isWeekend(date)) return false;\n\n return true;\n }\n\n private isWithinAllowedRange(date: Date, today: Date): boolean {\n if (this.disablePastDates && isBefore(date, today)) return false;\n if (this.disableFutureDates && isAfter(date, today)) return false;\n if (this.minDate && isBefore(date, this.minDate)) return false;\n if (this.maxDate && isAfter(date, this.maxDate)) return false;\n\n return true;\n }\n\n private chunk(array: any[], size: number) {\n const results = [];\n while (array.length) {\n results.push(array.splice(0, size));\n }\n return results;\n }\n\n private onSelectedDateChange(newDate: Date): void {\n if (this.selectedDay) {\n this.selectedDay.isSelected = false;\n }\n\n const newDay = this.getDay(newDate);\n if (newDay) {\n newDay.isSelected = true;\n this.selectedDay = newDay;\n }\n }\n\n _onDateSelected(newDay: CalendarDay) {\n if (!newDay.isSelectable) return;\n\n let newDate = new Date(newDay.year, newDay.monthIndex, newDay.date);\n\n if (this.timezone === 'UTC') {\n newDate = fromZonedTime(this.subtractTimezoneOffset(newDate), this.timeZoneName);\n }\n\n const dateToEmit = newDate;\n\n if (this.hasDateChanged(newDate, this._selectedDate)) {\n this.setActiveMonth(newDate);\n this.onSelectedDateChange(newDate);\n this.selectedDate = newDate;\n this.dateChange.emit(dateToEmit);\n }\n this.dateSelect.emit(dateToEmit);\n }\n\n _changeMonth(index: number) {\n if (index > 0 && !this._canNavigateForward) return;\n if (index < 0 && !this._canNavigateBack) return;\n\n this.changeActiveView(index, TimeUnit.months);\n index > 0\n ? this.nextMonthClicked.emit(this.activeMonth)\n : this.previousMonthClicked.emit(this.activeMonth);\n }\n\n _changeYear(year: string) {\n const yearNumeric = Number(year);\n this.changeActiveView(yearNumeric - getYear(this.activeMonth), TimeUnit.years);\n this.yearSelect.emit(yearNumeric);\n }\n\n private changeActiveView(index: number, unit: TimeUnit) {\n if (index === 0) return;\n this.activeMonth = add(this.activeMonth, { [unit]: index });\n this.focussedDate = add(this.focussedDate, { [unit]: index });\n\n this.refreshActiveMonth();\n }\n\n get _canNavigateBack(): boolean {\n const today = this.getTodayDate();\n const reachedPastDatesLimit = this.disablePastDates && isSameMonth(this.activeMonth, today);\n\n const reachedOrExceededMinDate =\n this.minDate &&\n (isSameMonth(this.activeMonth, this.minDate) || isBefore(this.activeMonth, this.minDate));\n\n return !reachedPastDatesLimit && !reachedOrExceededMinDate;\n }\n\n get _canNavigateForward(): boolean {\n const today = this.getTodayDate();\n const reachedFutureDatesLimit = this.disableFutureDates && isSameMonth(this.activeMonth, today);\n\n const reachedOrExceededMaxDate =\n this.maxDate &&\n (isSameMonth(this.activeMonth, this.maxDate) || isAfter(this.activeMonth, this.maxDate));\n\n return !reachedFutureDatesLimit && !reachedOrExceededMaxDate;\n }\n\n private getDay(date: Date) {\n let foundDay: CalendarDay = null;\n if (date) {\n for (const week of this._month) {\n foundDay = week.find((day) => {\n return day.isCurrentMonth && day.date === date.getDate();\n });\n if (foundDay) {\n break;\n }\n }\n }\n return foundDay;\n }\n\n private subtractTimezoneOffset(date: Date): Date {\n const timezoneOffsetInMs = date.getTimezoneOffset() * 60 * 1000;\n return new Date(date.getTime() - timezoneOffsetInMs);\n }\n\n private getDateFromNavigableYear(navigableYear: number | Date): Date {\n if (navigableYear instanceof Date) return navigableYear;\n const today = this.todayDate || new Date();\n return new Date(today.getFullYear() + navigableYear, 0, 1);\n }\n\n private getYearsBetweenDates(startDate: Date, endDate: Date): string[] {\n // Ensure years are ordered correctly if parameters are switched:\n const [startYear, endYear] = [startDate.getFullYear(), endDate.getFullYear()].sort();\n const numberOfYears = endYear - startYear;\n return Array.from({ length: numberOfYears + 1 }, (_, i) => (startYear + i).toString());\n }\n\n private setFocussedDay(newDate: Date) {\n const newDay = this.getDay(newDate);\n if (!newDay) return;\n\n if (this.focussedDay) {\n this.focussedDay.isFocussed = false;\n }\n newDay.isFocussed = true;\n this.focussedDay = newDay;\n }\n\n private focusDate(newDate: Date | null) {\n if (!newDate) return;\n\n newDate = this.normalizeDate(newDate);\n\n if (this.timezone === 'UTC') {\n newDate = fromZonedTime(this.subtractTimezoneOffset(newDate), this.timeZoneName);\n }\n\n const today = this.getTodayDate();\n if (!this.isWithinAllowedRange(newDate, today)) return;\n\n if (!this.hasDateChanged(newDate, this.focussedDate)) return;\n\n this.setActiveMonth(newDate);\n this.setFocussedDay(newDate);\n this.focussedDate = newDate;\n\n this.cdr.detectChanges(); //sync focussed class to template before setting focus\n const elementMarkedForFocus = this.elementRef.nativeElement.querySelector('.focussed');\n elementMarkedForFocus.focus();\n }\n\n _onDateKeydown(event: KeyboardEvent) {\n const { key, shiftKey } = event;\n let newDate;\n\n switch (key) {\n case 'ArrowUp':\n newDate = add(this.focussedDate, { days: -7 });\n break;\n case 'ArrowDown':\n newDate = add(this.focussedDate, { days: 7 });\n break;\n case 'ArrowRight':\n newDate = add(this.focussedDate, { days: 1 });\n break;\n case 'ArrowLeft':\n newDate = add(this.focussedDate, { days: -1 });\n break;\n case 'Home':\n newDate = startOfWeek(this.focussedDate, { locale: this.locale });\n break;\n case 'End':\n newDate = lastDayOfWeek(this.focussedDate, { locale: this.locale });\n break;\n case 'PageUp':\n newDate = shiftKey\n ? add(this.focussedDate, { years: -1 })\n : add(this.focussedDate, { months: -1 });\n break;\n case 'PageDown':\n newDate = shiftKey\n ? add(this.focussedDate, { years: 1 })\n : add(this.focussedDate, { months: 1 });\n break;\n default:\n return;\n }\n\n event.preventDefault();\n this.focusDate(newDate);\n }\n}\n","<div class=\"header\">\n <div class=\"month-navigator\">\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('previousMonth')\"\n [attr.aria-disabled]=\"_canNavigateBack ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(-1)\"\n >\n <kirby-icon name=\"arrow-back\" aria-hidden=\"true\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\" [id]=\"_tableMonthId\" aria-live=\"polite\" aria-atomic=\"true\">\n <span class=\"month\">{{ activeMonthName }}</span>\n @if (!_hasYearNavigator) {\n <span class=\"year\">{{ activeYear }}</span>\n }\n </div>\n\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('nextMonth')\"\n [attr.aria-disabled]=\"_canNavigateForward ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(1)\"\n >\n <kirby-icon name=\"arrow-more\" aria-hidden=\"true\"></kirby-icon>\n </button>\n </div>\n @if (_hasYearNavigator) {\n <kirby-dropdown\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n [attr.aria-label]=\"translations.get('selectYear')\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n ></kirby-dropdown>\n }\n</div>\n\n<table [attr.aria-labelledby]=\"_tableMonthId\" role=\"grid\">\n <thead>\n <tr>\n @for (weekDay of _weekDays; track weekDay.fullName) {\n <th scope=\"col\">\n <span aria-hidden=\"true\">{{ weekDay.firstLetterCapitalized }}</span>\n <span class=\"kirby-visually-hidden\">{{ weekDay.fullName }}</span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @for (week of _month; track $index) {\n <tr>\n @for (day of week; track day.date + '-' + day.monthIndex + '-' + day.year) {\n <td [attr.aria-selected]=\"day.isSelected ? true : false\">\n <button\n kirby-button\n type=\"button\"\n (click)=\"_onDateSelected(day)\"\n (keydown)=\"_onDateKeydown($event)\"\n class=\"day\"\n [class.current-month]=\"day.isCurrentMonth\"\n [class.weekend]=\"day.isWeekend\"\n [class.today]=\"day.isToday\"\n [class.selectable]=\"day.isSelectable\"\n [class.selected]=\"day.isSelected\"\n [class.focussed]=\"day.isFocussed\"\n [class.past]=\"day.isPast\"\n [attr.aria-label]=\"day.ariaLabel\"\n [attr.aria-disabled]=\"day.isSelectable ? null : true\"\n [noDecoration]=\"day.isSelected ? false : true\"\n [attentionLevel]=\"day.isSelected ? '1' : null\"\n [disabled]=\"day.isFocusable ? null : true\"\n [tabIndex]=\"day.isFocussed ? 0 : -1\"\n >\n {{ day.date }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-calendar.mjs","names":[],"sources":["../../calendar/src/calendar.component.ts","../../calendar/src/calendar.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n LOCALE_ID,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n add,\n eachDayOfInterval,\n endOfWeek,\n format,\n getYear,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n isWeekend,\n lastDayOfWeek,\n Locale as LocaleDateFns,\n startOfDay,\n startOfMonth,\n startOfWeek,\n} from 'date-fns';\nimport { fromZonedTime, toZonedTime } from 'date-fns-tz';\nimport { da, de, enGB, enUS } from 'date-fns/locale';\n\nimport { capitalizeFirstLetter } from '@kirbydesign/core';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { DropdownComponent } from '@kirbydesign/designsystem/dropdown';\nimport { UniqueIdGenerator } from '@kirbydesign/designsystem/helpers';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\n\nimport { TranslationService } from '@kirbydesign/designsystem/shared';\nimport { CalendarDay, CalendarDayMetadata } from './interfaces/calendar-day';\nimport { CalendarYearNavigatorConfig } from './interfaces/calendar-year-navigator-config';\n\nexport type Locale = LocaleDateFns;\n\ninterface WeekDay {\n firstLetterCapitalized: string;\n fullName: string;\n}\n\nenum TimeUnit {\n years = 'years',\n months = 'months',\n weeks = 'weeks',\n days = 'days',\n hours = 'hours',\n minutes = 'minutes',\n seconds = 'seconds',\n milliseconds = 'milliseconds',\n}\n\n@Component({\n imports: [DropdownComponent, ButtonComponent, IconComponent],\n selector: 'kirby-calendar',\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CalendarComponent implements OnInit, OnChanges {\n @Output() dateChange = new EventEmitter<Date>();\n @Output() dateSelect = new EventEmitter<Date>();\n @Output() yearSelect = new EventEmitter<number>();\n @Output() previousMonthClicked = new EventEmitter<Date>();\n @Output() nextMonthClicked = new EventEmitter<Date>();\n @Input() timezone: 'local' | 'UTC' = 'local';\n @Input() disableWeekends = false;\n @Input() disablePastDates = false;\n @Input() disableFutureDates = false;\n @Input() alwaysEnableToday = false;\n\n @Input() set locales(locales: { [key: string]: Locale }) {\n console.warn(\n `Supplying additional locales to the Kirby Calendar Component via an input property is deprecated and should not be used.\n A future update will allow injecting additional locales via a provider instead.`\n );\n }\n @Input() customLocales: { [key: string]: Locale } = {};\n /**\n * @deprecated This input is no longer needed. The year selection dropdown now always uses popover positioning.\n * This input will be removed in a future major version.\n */\n @Input() set usePopover(_value: boolean) {\n console.warn(\n `[Kirby Calendar] The 'usePopover' input is deprecated and no longer has any effect. \n The year selection dropdown now always uses popover positioning. This input will be removed in a future major version.`\n );\n }\n /**\n * Configuration for the year navigator.\n *\n * Internally, calendar component:\n * - bases yearNavigatorOptions.from and yearNavigatorOptions.to on todayDate if a number is provided\n * - prioritizes minDate and maxDate over yearNavigatorOptions.from and yearNavigatorOptions.to\n */\n @Input() yearNavigatorOptions: CalendarYearNavigatorConfig;\n\n _tableMonthId = UniqueIdGenerator.scopedTo('kirby-calendar-month').next();\n _month: CalendarDay[][];\n _weekDays: WeekDay[];\n private selectedDay: CalendarDay;\n private focussedDay: CalendarDay;\n // NOTE: Internally, all Dates\n // are normalized to point to local timezone midnight, regardless of the timezone\n // setting.\n private activeMonth: Date;\n private _selectedDate: Date;\n private _disabledDates: Date[] = [];\n private _enabledDates: Date[] = [];\n private _todayDate: Date;\n private _minDate: Date;\n private _maxDate: Date;\n private focussedDate: Date;\n private locale: Locale;\n private timeZoneName: string;\n private includedLocales = { da, de, enGB, enUS };\n\n get selectedDate(): Date {\n return this._selectedDate;\n }\n\n @Input() set selectedDate(valueLocalOrUTC: Date | null) {\n const value = this.normalizeDate(valueLocalOrUTC);\n\n if (valueLocalOrUTC) {\n this.setActiveMonth(value);\n }\n\n if (this.hasDateChanged(value, this._selectedDate)) {\n this.onSelectedDateChange(value);\n this.focusDate(value);\n this._selectedDate = value;\n }\n }\n\n get disabledDates(): Date[] {\n return this._disabledDates;\n }\n\n @Input() set disabledDates(value: Date[]) {\n this._disabledDates = (value || []).map((date) => this.normalizeDate(date));\n }\n\n get enabledDates(): Date[] {\n return this._enabledDates;\n }\n\n @Input() set enabledDates(value: Date[]) {\n this._enabledDates = (value || []).map((date) => this.normalizeDate(date));\n }\n\n get todayDate(): Date {\n return this._todayDate;\n }\n\n @Input() set todayDate(value: Date) {\n this._todayDate = this.normalizeDate(value);\n }\n\n get minDate(): Date {\n return this._minDate;\n }\n\n @Input() set minDate(value: Date) {\n if (value && this.activeMonth && isBefore(this.activeMonth, value)) {\n this.setActiveMonth(value);\n }\n this._minDate = this.normalizeDate(value);\n }\n\n get maxDate(): Date {\n return this._maxDate;\n }\n\n @Input() set maxDate(value: Date) {\n if (value && this.activeMonth && isAfter(this.activeMonth, value)) {\n this.setActiveMonth(value);\n }\n this._maxDate = this.normalizeDate(value);\n }\n\n get activeMonthName(): string {\n return capitalizeFirstLetter(this.formatWithLocale(this.activeMonth, 'MMMM'));\n }\n\n get activeYear(): string {\n return this.formatWithLocale(this.activeMonth, 'yyyy');\n }\n\n /**\n * Gets navigable years for year navigator based on yearNavigatorOptions.\n */\n get navigableYears(): string[] {\n const dateOfFirstNavigableYear =\n this.minDate || this.getDateFromNavigableYear(this.yearNavigatorOptions.from);\n\n const dateOfLastNavigableYear =\n this.maxDate || this.getDateFromNavigableYear(this.yearNavigatorOptions.to);\n\n return this.getYearsBetweenDates(dateOfFirstNavigableYear, dateOfLastNavigableYear);\n }\n\n get navigatedYear(): number {\n return this.navigableYears.indexOf(this.activeYear);\n }\n\n @HostBinding('class.has-year-navigator')\n get _hasYearNavigator() {\n return !!this.yearNavigatorOptions;\n }\n\n private getTodayDate() {\n return startOfDay(this.todayDate ?? new Date());\n }\n\n constructor(\n @Inject(LOCALE_ID) locale: string,\n private elementRef: ElementRef,\n private cdr: ChangeDetectorRef,\n public translations: TranslationService\n ) {\n this.locale = this.mapLocale(locale);\n this.timeZoneName = Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n private formatWithLocale(date: Date, formatString: string): string {\n return format(date, formatString, {\n locale: this.locale,\n });\n }\n\n private mapLocale(locale: string): Locale {\n if (locale === 'en') {\n locale = 'enGB'; // if english locale is provided without region, we default to GB\n }\n locale = locale.replace('-', '');\n const availableLocales = { ...this.includedLocales, ...this.locales, ...this.customLocales };\n return availableLocales[locale] || this.includedLocales.enGB; // Default to enGB if injected locale doesnt exist\n }\n\n private formatDateLabel(): string {\n const localeDateFormats = {\n da: 'd. MMMM',\n de: 'd. MMMM',\n 'en-GB': 'd MMMM',\n 'en-US': 'MMMM d',\n };\n\n const defaultDateFormat = localeDateFormats['en-US'];\n const dateFormat = localeDateFormats[this.locale.code] || defaultDateFormat;\n return dateFormat;\n }\n\n ngOnInit() {\n this.focussedDate = this.getTodayDate();\n this._weekDays = this.getWeekDays();\n this.setActiveMonth(this.selectedDate);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.activeMonth) return;\n if (\n changes.disableWeekends ||\n changes.disablePastDates ||\n changes.disableFutureDates ||\n changes.disabledDates ||\n changes.enabledDates ||\n changes.minDate ||\n changes.maxDate ||\n changes.todayDate ||\n changes.timezone\n ) {\n this.refreshActiveMonth();\n }\n }\n\n private setActiveMonth(date: Date = new Date()) {\n if (!this.activeMonth || !isSameMonth(this.activeMonth, date)) {\n this.activeMonth = startOfMonth(date);\n this.refreshActiveMonth();\n }\n }\n\n // For leniency, the component will accept any Date that points to either UTC midnight\n // or to local timezone midnight although we will internally normalize the representation\n // of all received dates to point to local timezone midnight.\n // We currently log no warnings if the date doesn't match the timezone setting or\n // if it doesn't point to midnight.\n private normalizeDate(dateLocalOrUTC: Date) {\n if (!dateLocalOrUTC) return;\n\n if (startOfDay(dateLocalOrUTC).getTime() === dateLocalOrUTC.getTime()) {\n // date is local timezone midnight\n return dateLocalOrUTC;\n }\n if (\n startOfDay(toZonedTime(dateLocalOrUTC, this.timeZoneName)).getTime() ===\n toZonedTime(dateLocalOrUTC, this.timeZoneName).getTime()\n ) {\n // the date is a UTC midnight; create the equivalent local timezone midnight date\n const normalizedUTCdate = toZonedTime(dateLocalOrUTC, this.timeZoneName);\n return normalizedUTCdate;\n }\n // does not point to midnight so we make it\n return startOfDay(dateLocalOrUTC);\n }\n\n private getWeekDays(): WeekDay[] {\n const now = new Date();\n const week = eachDayOfInterval({\n start: startOfWeek(now, { locale: this.locale }),\n end: endOfWeek(now, { locale: this.locale }),\n });\n\n const weekdayNarrowFormat = 'EEEEE';\n const weekdayWideFormat = 'EEEE';\n\n return week.map((date) => ({\n firstLetterCapitalized: this.formatWithLocale(date, weekdayNarrowFormat),\n fullName: this.formatWithLocale(date, weekdayWideFormat),\n }));\n }\n\n private hasDateChanged(newDate: Date, previousDate: Date): boolean {\n if (!newDate && !previousDate) {\n return false;\n }\n if (newDate instanceof Date && !previousDate) {\n return true;\n }\n return !isSameDay(newDate, previousDate);\n }\n\n private isDisabledDate(date: Date): boolean {\n return this.disabledDates.some((disabledDate) => isSameDay(disabledDate, date));\n }\n\n private isEnabledDate(date: Date): boolean {\n return (\n this._enabledDates.length === 0 ||\n this.enabledDates.some((enabledDate) => isSameDay(enabledDate, date))\n );\n }\n\n refreshActiveMonth() {\n if (!this.activeMonth) return;\n\n const monthStart = startOfMonth(this.activeMonth);\n const startOfFirstWeek = startOfWeek(monthStart, { locale: this.locale });\n\n const totalNumberOfDays = 42; // Always show 42 days (6 weeks) in calendar\n const daysArray = Array.from(Array(totalNumberOfDays).keys());\n const today = this.getTodayDate();\n\n const calendarDays: CalendarDay[] = daysArray.map((number) => {\n const dateOfCalendarDay = add(startOfFirstWeek, { [TimeUnit.days]: number });\n\n const calendarDay: CalendarDay = {\n date: dateOfCalendarDay.getDate(),\n monthIndex: dateOfCalendarDay.getMonth(),\n year: dateOfCalendarDay.getFullYear(),\n ariaLabel: this.formatWithLocale(dateOfCalendarDay, this.formatDateLabel()),\n ...this.getCalendarDayMetadata(dateOfCalendarDay, today, monthStart),\n };\n if (calendarDay.isSelected) {\n this.selectedDay = calendarDay;\n }\n if (calendarDay.isFocussed) {\n this.focussedDay = calendarDay;\n }\n return calendarDay;\n });\n this._month = this.chunk(calendarDays, 7);\n }\n\n private getCalendarDayMetadata(date: Date, today: Date, monthStart: Date): CalendarDayMetadata {\n return {\n isToday: isSameDay(today, date),\n isPast: isBefore(date, today),\n isFuture: isAfter(date, today),\n isWeekend: isWeekend(date),\n isCurrentMonth: isSameMonth(date, monthStart),\n isSelectable: this.isSelectable(date, today),\n isFocusable: this.isWithinAllowedRange(date, today),\n isSelected: isSameDay(this.selectedDate, date),\n isFocussed: isSameDay(this.focussedDate, date),\n };\n }\n\n private isSelectable(date: Date, today: Date): boolean {\n if (this.alwaysEnableToday && isSameDay(today, date)) return true;\n\n if (!this.isWithinAllowedRange(date, today)) return false;\n if (this.isDisabledDate(date)) return false;\n if (!this.isEnabledDate(date)) return false;\n if (this.disableWeekends && isWeekend(date)) return false;\n\n return true;\n }\n\n private isWithinAllowedRange(date: Date, today: Date): boolean {\n if (this.disablePastDates && isBefore(date, today)) return false;\n if (this.disableFutureDates && isAfter(date, today)) return false;\n if (this.minDate && isBefore(date, this.minDate)) return false;\n if (this.maxDate && isAfter(date, this.maxDate)) return false;\n\n return true;\n }\n\n private chunk(array: any[], size: number) {\n const results = [];\n while (array.length) {\n results.push(array.splice(0, size));\n }\n return results;\n }\n\n private onSelectedDateChange(newDate: Date): void {\n if (this.selectedDay) {\n this.selectedDay.isSelected = false;\n }\n\n const newDay = this.getDay(newDate);\n if (newDay) {\n newDay.isSelected = true;\n this.selectedDay = newDay;\n }\n }\n\n _onDateSelected(newDay: CalendarDay) {\n if (!newDay.isSelectable) return;\n\n let newDate = new Date(newDay.year, newDay.monthIndex, newDay.date);\n\n if (this.timezone === 'UTC') {\n newDate = fromZonedTime(this.subtractTimezoneOffset(newDate), this.timeZoneName);\n }\n\n const dateToEmit = newDate;\n\n if (this.hasDateChanged(newDate, this._selectedDate)) {\n this.setActiveMonth(newDate);\n this.onSelectedDateChange(newDate);\n this.selectedDate = newDate;\n this.dateChange.emit(dateToEmit);\n }\n this.dateSelect.emit(dateToEmit);\n }\n\n _changeMonth(index: number) {\n if (index > 0 && !this._canNavigateForward) return;\n if (index < 0 && !this._canNavigateBack) return;\n\n this.changeActiveView(index, TimeUnit.months);\n index > 0\n ? this.nextMonthClicked.emit(this.activeMonth)\n : this.previousMonthClicked.emit(this.activeMonth);\n }\n\n _changeYear(year: string) {\n const yearNumeric = Number(year);\n this.changeActiveView(yearNumeric - getYear(this.activeMonth), TimeUnit.years);\n this.yearSelect.emit(yearNumeric);\n }\n\n private changeActiveView(index: number, unit: TimeUnit) {\n if (index === 0) return;\n this.activeMonth = add(this.activeMonth, { [unit]: index });\n this.focussedDate = add(this.focussedDate, { [unit]: index });\n\n this.refreshActiveMonth();\n }\n\n get _canNavigateBack(): boolean {\n const today = this.getTodayDate();\n const reachedPastDatesLimit = this.disablePastDates && isSameMonth(this.activeMonth, today);\n\n const reachedOrExceededMinDate =\n this.minDate &&\n (isSameMonth(this.activeMonth, this.minDate) || isBefore(this.activeMonth, this.minDate));\n\n return !reachedPastDatesLimit && !reachedOrExceededMinDate;\n }\n\n get _canNavigateForward(): boolean {\n const today = this.getTodayDate();\n const reachedFutureDatesLimit = this.disableFutureDates && isSameMonth(this.activeMonth, today);\n\n const reachedOrExceededMaxDate =\n this.maxDate &&\n (isSameMonth(this.activeMonth, this.maxDate) || isAfter(this.activeMonth, this.maxDate));\n\n return !reachedFutureDatesLimit && !reachedOrExceededMaxDate;\n }\n\n private getDay(date: Date) {\n let foundDay: CalendarDay = null;\n if (date) {\n for (const week of this._month) {\n foundDay = week.find((day) => {\n return day.isCurrentMonth && day.date === date.getDate();\n });\n if (foundDay) {\n break;\n }\n }\n }\n return foundDay;\n }\n\n private subtractTimezoneOffset(date: Date): Date {\n const timezoneOffsetInMs = date.getTimezoneOffset() * 60 * 1000;\n return new Date(date.getTime() - timezoneOffsetInMs);\n }\n\n private getDateFromNavigableYear(navigableYear: number | Date): Date {\n if (navigableYear instanceof Date) return navigableYear;\n const today = this.todayDate || new Date();\n return new Date(today.getFullYear() + navigableYear, 0, 1);\n }\n\n private getYearsBetweenDates(startDate: Date, endDate: Date): string[] {\n // Ensure years are ordered correctly if parameters are switched:\n const [startYear, endYear] = [startDate.getFullYear(), endDate.getFullYear()].sort();\n const numberOfYears = endYear - startYear;\n return Array.from({ length: numberOfYears + 1 }, (_, i) => (startYear + i).toString());\n }\n\n private setFocussedDay(newDate: Date) {\n const newDay = this.getDay(newDate);\n if (!newDay) return;\n\n if (this.focussedDay) {\n this.focussedDay.isFocussed = false;\n }\n newDay.isFocussed = true;\n this.focussedDay = newDay;\n }\n\n private focusDate(newDate: Date | null) {\n if (!newDate) return;\n\n newDate = this.normalizeDate(newDate);\n\n if (this.timezone === 'UTC') {\n newDate = fromZonedTime(this.subtractTimezoneOffset(newDate), this.timeZoneName);\n }\n\n const today = this.getTodayDate();\n if (!this.isWithinAllowedRange(newDate, today)) return;\n\n if (!this.hasDateChanged(newDate, this.focussedDate)) return;\n\n this.setActiveMonth(newDate);\n this.setFocussedDay(newDate);\n this.focussedDate = newDate;\n\n this.cdr.detectChanges(); //sync focussed class to template before setting focus\n const elementMarkedForFocus = this.elementRef.nativeElement.querySelector('.focussed');\n elementMarkedForFocus.focus();\n }\n\n _onDateKeydown(event: KeyboardEvent) {\n const { key, shiftKey } = event;\n let newDate;\n\n switch (key) {\n case 'ArrowUp':\n newDate = add(this.focussedDate, { days: -7 });\n break;\n case 'ArrowDown':\n newDate = add(this.focussedDate, { days: 7 });\n break;\n case 'ArrowRight':\n newDate = add(this.focussedDate, { days: 1 });\n break;\n case 'ArrowLeft':\n newDate = add(this.focussedDate, { days: -1 });\n break;\n case 'Home':\n newDate = startOfWeek(this.focussedDate, { locale: this.locale });\n break;\n case 'End':\n newDate = lastDayOfWeek(this.focussedDate, { locale: this.locale });\n break;\n case 'PageUp':\n newDate = shiftKey\n ? add(this.focussedDate, { years: -1 })\n : add(this.focussedDate, { months: -1 });\n break;\n case 'PageDown':\n newDate = shiftKey\n ? add(this.focussedDate, { years: 1 })\n : add(this.focussedDate, { months: 1 });\n break;\n default:\n return;\n }\n\n event.preventDefault();\n this.focusDate(newDate);\n }\n}\n","<div class=\"header\">\n <div class=\"month-navigator\">\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('previousMonth')\"\n [attr.aria-disabled]=\"_canNavigateBack ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(-1)\"\n >\n <kirby-icon name=\"arrow-back\" aria-hidden=\"true\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\" [id]=\"_tableMonthId\" aria-live=\"polite\" aria-atomic=\"true\">\n <span class=\"month\">{{ activeMonthName }}</span>\n @if (!_hasYearNavigator) {\n <span class=\"year\">{{ activeYear }}</span>\n }\n </div>\n\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('nextMonth')\"\n [attr.aria-disabled]=\"_canNavigateForward ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(1)\"\n >\n <kirby-icon name=\"arrow-more\" aria-hidden=\"true\"></kirby-icon>\n </button>\n </div>\n @if (_hasYearNavigator) {\n <kirby-dropdown\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n [attr.aria-label]=\"translations.get('selectYear')\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n ></kirby-dropdown>\n }\n</div>\n\n<table [attr.aria-labelledby]=\"_tableMonthId\" role=\"grid\">\n <thead>\n <tr>\n @for (weekDay of _weekDays; track weekDay.fullName) {\n <th scope=\"col\">\n <span aria-hidden=\"true\">{{ weekDay.firstLetterCapitalized }}</span>\n <span class=\"kirby-visually-hidden\">{{ weekDay.fullName }}</span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @for (week of _month; track $index) {\n <tr>\n @for (day of week; track day.date + '-' + day.monthIndex + '-' + day.year) {\n <td [attr.aria-selected]=\"day.isSelected ? true : false\">\n <button\n kirby-button\n type=\"button\"\n (click)=\"_onDateSelected(day)\"\n (keydown)=\"_onDateKeydown($event)\"\n class=\"day\"\n [class.current-month]=\"day.isCurrentMonth\"\n [class.weekend]=\"day.isWeekend\"\n [class.today]=\"day.isToday\"\n [class.selectable]=\"day.isSelectable\"\n [class.selected]=\"day.isSelected\"\n [class.focussed]=\"day.isFocussed\"\n [class.past]=\"day.isPast\"\n [attr.aria-label]=\"day.ariaLabel\"\n [attr.aria-disabled]=\"day.isSelectable ? null : true\"\n [noDecoration]=\"!day.isSelected\"\n [disabled]=\"day.isFocusable ? null : true\"\n [tabIndex]=\"day.isFocussed ? 0 : -1\"\n >\n {{ day.date }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n"],"mappings":";;;;;;;;;;;AAoDA,IAAK;CAAL,SAAK,UAAQ;CACX,SAAA,WAAA;CACA,SAAA,YAAA;CACA,SAAA,WAAA;CACA,SAAA,UAAA;CACA,SAAA,WAAA;CACA,SAAA,aAAA;CACA,SAAA,aAAA;CACA,SAAA,kBAAA;AACF,EAAA,CATK,aAAA,WAAQ,CAAA,EAAA;AAkBb,IAAa,oBAAb,MAAa,kBAAiB;CAY5B,IAAa,QAAQ,SAAkC;EACrD,QAAQ,KACN;wFACkF;CAEtF;CAMA,IAAa,WAAW,QAAe;EACrC,QAAQ,KACN;+HACyH;CAE7H;CA8BA,IAAI,eAAY;EACd,OAAO,KAAK;CACd;CAEA,IAAa,aAAa,iBAA4B;EACpD,MAAM,QAAQ,KAAK,cAAc,eAAe;EAEhD,IAAI,iBACF,KAAK,eAAe,KAAK;EAG3B,IAAI,KAAK,eAAe,OAAO,KAAK,aAAa,GAAG;GAClD,KAAK,qBAAqB,KAAK;GAC/B,KAAK,UAAU,KAAK;GACpB,KAAK,gBAAgB;EACvB;CACF;CAEA,IAAI,gBAAa;EACf,OAAO,KAAK;CACd;CAEA,IAAa,cAAc,OAAa;EACtC,KAAK,kBAAkB,SAAS,CAAA,EAAA,CAAI,KAAK,SAAS,KAAK,cAAc,IAAI,CAAC;CAC5E;CAEA,IAAI,eAAY;EACd,OAAO,KAAK;CACd;CAEA,IAAa,aAAa,OAAa;EACrC,KAAK,iBAAiB,SAAS,CAAA,EAAA,CAAI,KAAK,SAAS,KAAK,cAAc,IAAI,CAAC;CAC3E;CAEA,IAAI,YAAS;EACX,OAAO,KAAK;CACd;CAEA,IAAa,UAAU,OAAW;EAChC,KAAK,aAAa,KAAK,cAAc,KAAK;CAC5C;CAEA,IAAI,UAAO;EACT,OAAO,KAAK;CACd;CAEA,IAAa,QAAQ,OAAW;EAC9B,IAAI,SAAS,KAAK,eAAe,SAAS,KAAK,aAAa,KAAK,GAC/D,KAAK,eAAe,KAAK;EAE3B,KAAK,WAAW,KAAK,cAAc,KAAK;CAC1C;CAEA,IAAI,UAAO;EACT,OAAO,KAAK;CACd;CAEA,IAAa,QAAQ,OAAW;EAC9B,IAAI,SAAS,KAAK,eAAe,QAAQ,KAAK,aAAa,KAAK,GAC9D,KAAK,eAAe,KAAK;EAE3B,KAAK,WAAW,KAAK,cAAc,KAAK;CAC1C;CAEA,IAAI,kBAAe;EACjB,OAAO,sBAAsB,KAAK,iBAAiB,KAAK,aAAa,MAAM,CAAC;CAC9E;CAEA,IAAI,aAAU;EACZ,OAAO,KAAK,iBAAiB,KAAK,aAAa,MAAM;CACvD;CAKA,IAAI,iBAAc;EAChB,MAAM,2BACJ,KAAK,WAAW,KAAK,yBAAyB,KAAK,qBAAqB,IAAI;EAE9E,MAAM,0BACJ,KAAK,WAAW,KAAK,yBAAyB,KAAK,qBAAqB,EAAE;EAE5E,OAAO,KAAK,qBAAqB,0BAA0B,uBAAuB;CACpF;CAEA,IAAI,gBAAa;EACf,OAAO,KAAK,eAAe,QAAQ,KAAK,UAAU;CACpD;CAEA,IACI,oBAAiB;EACnB,OAAO,CAAC,CAAC,KAAK;CAChB;CAEQ,eAAY;EAClB,OAAO,WAAW,KAAK,6BAAa,IAAI,KAAI,CAAE;CAChD;CAEA,YACqB,QACX,YACA,KACD,cAAgC;EAF/B,KAAA,aAAA;EACA,KAAA,MAAA;EACD,KAAA,eAAA;EA/JC,KAAA,aAAa,IAAI,aAAY;EAC7B,KAAA,aAAa,IAAI,aAAY;EAC7B,KAAA,aAAa,IAAI,aAAY;EAC7B,KAAA,uBAAuB,IAAI,aAAY;EACvC,KAAA,mBAAmB,IAAI,aAAY;EACpC,KAAA,WAA4B;EAC5B,KAAA,kBAAkB;EAClB,KAAA,mBAAmB;EACnB,KAAA,qBAAqB;EACrB,KAAA,oBAAoB;EAQpB,KAAA,gBAA2C,CAAA;EAoBpD,KAAA,gBAAgB,kBAAkB,SAAS,sBAAsB,CAAC,CAAC,KAAI;EAU/D,KAAA,iBAAyB,CAAA;EACzB,KAAA,gBAAwB,CAAA;EAOxB,KAAA,kBAAkB;GAAE;GAAI;GAAI;GAAM;EAAI;EA0G5C,KAAK,SAAS,KAAK,UAAU,MAAM;EACnC,KAAK,eAAe,KAAK,eAAc,CAAE,CAAC,gBAAe,CAAE,CAAC;CAC9D;CAEQ,iBAAiB,MAAY,cAAoB;EACvD,OAAO,OAAO,MAAM,cAAc,EAChC,QAAQ,KAAK,OACd,CAAA;CACH;CAEQ,UAAU,QAAc;EAC9B,IAAI,WAAW,MACb,SAAS;EAEX,SAAS,OAAO,QAAQ,KAAK,EAAE;EAE/B,OAAO;GADoB,GAAG,KAAK;GAAiB,GAAG,KAAK;GAAS,GAAG,KAAK;EACtE,EAAiB,WAAW,KAAK,gBAAgB;CAC1D;CAEQ,kBAAe;EACrB,MAAM,oBAAoB;GACxB,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,SAAS;EACV;EAED,MAAM,oBAAoB,kBAAkB;EAE5C,OADmB,kBAAkB,KAAK,OAAO,SAAS;CAE5D;CAEA,WAAQ;EACN,KAAK,eAAe,KAAK,aAAY;EACrC,KAAK,YAAY,KAAK,YAAW;EACjC,KAAK,eAAe,KAAK,YAAY;CACvC;CAEA,YAAY,SAAsB;EAChC,IAAI,CAAC,KAAK,aAAa;EACvB,IACE,QAAQ,mBACR,QAAQ,oBACR,QAAQ,sBACR,QAAQ,iBACR,QAAQ,gBACR,QAAQ,WACR,QAAQ,WACR,QAAQ,aACR,QAAQ,UAER,KAAK,mBAAkB;CAE3B;CAEQ,eAAe,uBAAa,IAAI,KAAI,GAAE;EAC5C,IAAI,CAAC,KAAK,eAAe,CAAC,YAAY,KAAK,aAAa,IAAI,GAAG;GAC7D,KAAK,cAAc,aAAa,IAAI;GACpC,KAAK,mBAAkB;EACzB;CACF;CAOQ,cAAc,gBAAoB;EACxC,IAAI,CAAC,gBAAgB;EAErB,IAAI,WAAW,cAAc,CAAC,CAAC,QAAO,MAAO,eAAe,QAAO,GAEjE,OAAO;EAET,IACE,WAAW,YAAY,gBAAgB,KAAK,YAAY,CAAC,CAAC,CAAC,QAAO,MAClE,YAAY,gBAAgB,KAAK,YAAY,CAAC,CAAC,QAAO,GAItD,OAD0B,YAAY,gBAAgB,KAAK,YACpD;EAGT,OAAO,WAAW,cAAc;CAClC;CAEQ,cAAW;EACjB,MAAM,sBAAM,IAAI,KAAI;EACpB,MAAM,OAAO,kBAAkB;GAC7B,OAAO,YAAY,KAAK,EAAE,QAAQ,KAAK,OAAM,CAAE;GAC/C,KAAK,UAAU,KAAK,EAAE,QAAQ,KAAK,OAAM,CAAE;EAC5C,CAAA;EAED,MAAM,sBAAsB;EAC5B,MAAM,oBAAoB;EAE1B,OAAO,KAAK,KAAK,UAAU;GACzB,wBAAwB,KAAK,iBAAiB,MAAM,mBAAmB;GACvE,UAAU,KAAK,iBAAiB,MAAM,iBAAiB;EACxD,EAAC;CACJ;CAEQ,eAAe,SAAe,cAAkB;EACtD,IAAI,CAAC,WAAW,CAAC,cACf,OAAO;EAET,IAAI,mBAAmB,QAAQ,CAAC,cAC9B,OAAO;EAET,OAAO,CAAC,UAAU,SAAS,YAAY;CACzC;CAEQ,eAAe,MAAU;EAC/B,OAAO,KAAK,cAAc,MAAM,iBAAiB,UAAU,cAAc,IAAI,CAAC;CAChF;CAEQ,cAAc,MAAU;EAC9B,OACE,KAAK,cAAc,WAAW,KAC9B,KAAK,aAAa,MAAM,gBAAgB,UAAU,aAAa,IAAI,CAAC;CAExE;CAEA,qBAAkB;EAChB,IAAI,CAAC,KAAK,aAAa;EAEvB,MAAM,aAAa,aAAa,KAAK,WAAW;EAChD,MAAM,mBAAmB,YAAY,YAAY,EAAE,QAAQ,KAAK,OAAM,CAAE;EAGxE,MAAM,YAAY,MAAM,KAAK,MAAM,EAAiB,CAAC,CAAC,KAAI,CAAE;EAC5D,MAAM,QAAQ,KAAK,aAAY;EAE/B,MAAM,eAA8B,UAAU,KAAK,WAAU;GAC3D,MAAM,oBAAoB,IAAI,kBAAkB,GAAG,SAAS,OAAO,OAAM,CAAE;GAE3E,MAAM,cAA2B;IAC/B,MAAM,kBAAkB,QAAO;IAC/B,YAAY,kBAAkB,SAAQ;IACtC,MAAM,kBAAkB,YAAW;IACnC,WAAW,KAAK,iBAAiB,mBAAmB,KAAK,gBAAe,CAAE;IAC1E,GAAG,KAAK,uBAAuB,mBAAmB,OAAO,UAAU;GACpE;GACD,IAAI,YAAY,YACd,KAAK,cAAc;GAErB,IAAI,YAAY,YACd,KAAK,cAAc;GAErB,OAAO;EACT,CAAC;EACD,KAAK,SAAS,KAAK,MAAM,cAAc,CAAC;CAC1C;CAEQ,uBAAuB,MAAY,OAAa,YAAgB;EACtE,OAAO;GACL,SAAS,UAAU,OAAO,IAAI;GAC9B,QAAQ,SAAS,MAAM,KAAK;GAC5B,UAAU,QAAQ,MAAM,KAAK;GAC7B,WAAW,UAAU,IAAI;GACzB,gBAAgB,YAAY,MAAM,UAAU;GAC5C,cAAc,KAAK,aAAa,MAAM,KAAK;GAC3C,aAAa,KAAK,qBAAqB,MAAM,KAAK;GAClD,YAAY,UAAU,KAAK,cAAc,IAAI;GAC7C,YAAY,UAAU,KAAK,cAAc,IAAI;EAC9C;CACH;CAEQ,aAAa,MAAY,OAAW;EAC1C,IAAI,KAAK,qBAAqB,UAAU,OAAO,IAAI,GAAG,OAAO;EAE7D,IAAI,CAAC,KAAK,qBAAqB,MAAM,KAAK,GAAG,OAAO;EACpD,IAAI,KAAK,eAAe,IAAI,GAAG,OAAO;EACtC,IAAI,CAAC,KAAK,cAAc,IAAI,GAAG,OAAO;EACtC,IAAI,KAAK,mBAAmB,UAAU,IAAI,GAAG,OAAO;EAEpD,OAAO;CACT;CAEQ,qBAAqB,MAAY,OAAW;EAClD,IAAI,KAAK,oBAAoB,SAAS,MAAM,KAAK,GAAG,OAAO;EAC3D,IAAI,KAAK,sBAAsB,QAAQ,MAAM,KAAK,GAAG,OAAO;EAC5D,IAAI,KAAK,WAAW,SAAS,MAAM,KAAK,OAAO,GAAG,OAAO;EACzD,IAAI,KAAK,WAAW,QAAQ,MAAM,KAAK,OAAO,GAAG,OAAO;EAExD,OAAO;CACT;CAEQ,MAAM,OAAc,MAAY;EACtC,MAAM,UAAU,CAAA;EAChB,OAAO,MAAM,QACX,QAAQ,KAAK,MAAM,OAAO,GAAG,IAAI,CAAC;EAEpC,OAAO;CACT;CAEQ,qBAAqB,SAAa;EACxC,IAAI,KAAK,aACP,KAAK,YAAY,aAAa;EAGhC,MAAM,SAAS,KAAK,OAAO,OAAO;EAClC,IAAI,QAAQ;GACV,OAAO,aAAa;GACpB,KAAK,cAAc;EACrB;CACF;CAEA,gBAAgB,QAAmB;EACjC,IAAI,CAAC,OAAO,cAAc;EAE1B,IAAI,UAAU,IAAI,KAAK,OAAO,MAAM,OAAO,YAAY,OAAO,IAAI;EAElE,IAAI,KAAK,aAAa,OACpB,UAAU,cAAc,KAAK,uBAAuB,OAAO,GAAG,KAAK,YAAY;EAGjF,MAAM,aAAa;EAEnB,IAAI,KAAK,eAAe,SAAS,KAAK,aAAa,GAAG;GACpD,KAAK,eAAe,OAAO;GAC3B,KAAK,qBAAqB,OAAO;GACjC,KAAK,eAAe;GACpB,KAAK,WAAW,KAAK,UAAU;EACjC;EACA,KAAK,WAAW,KAAK,UAAU;CACjC;CAEA,aAAa,OAAa;EACxB,IAAI,QAAQ,KAAK,CAAC,KAAK,qBAAqB;EAC5C,IAAI,QAAQ,KAAK,CAAC,KAAK,kBAAkB;EAEzC,KAAK,iBAAiB,OAAO,SAAS,MAAM;EAC5C,QAAQ,IACJ,KAAK,iBAAiB,KAAK,KAAK,WAAW,IAC3C,KAAK,qBAAqB,KAAK,KAAK,WAAW;CACrD;CAEA,YAAY,MAAY;EACtB,MAAM,cAAc,OAAO,IAAI;EAC/B,KAAK,iBAAiB,cAAc,QAAQ,KAAK,WAAW,GAAG,SAAS,KAAK;EAC7E,KAAK,WAAW,KAAK,WAAW;CAClC;CAEQ,iBAAiB,OAAe,MAAc;EACpD,IAAI,UAAU,GAAG;EACjB,KAAK,cAAc,IAAI,KAAK,aAAa,GAAG,OAAO,MAAK,CAAE;EAC1D,KAAK,eAAe,IAAI,KAAK,cAAc,GAAG,OAAO,MAAK,CAAE;EAE5D,KAAK,mBAAkB;CACzB;CAEA,IAAI,mBAAgB;EAClB,MAAM,QAAQ,KAAK,aAAY;EAC/B,MAAM,wBAAwB,KAAK,oBAAoB,YAAY,KAAK,aAAa,KAAK;EAE1F,MAAM,2BACJ,KAAK,YACJ,YAAY,KAAK,aAAa,KAAK,OAAO,KAAK,SAAS,KAAK,aAAa,KAAK,OAAO;EAEzF,OAAO,CAAC,yBAAyB,CAAC;CACpC;CAEA,IAAI,sBAAmB;EACrB,MAAM,QAAQ,KAAK,aAAY;EAC/B,MAAM,0BAA0B,KAAK,sBAAsB,YAAY,KAAK,aAAa,KAAK;EAE9F,MAAM,2BACJ,KAAK,YACJ,YAAY,KAAK,aAAa,KAAK,OAAO,KAAK,QAAQ,KAAK,aAAa,KAAK,OAAO;EAExF,OAAO,CAAC,2BAA2B,CAAC;CACtC;CAEQ,OAAO,MAAU;EACvB,IAAI,WAAwB;EAC5B,IAAI,MACF,KAAK,MAAM,QAAQ,KAAK,QAAQ;GAC9B,WAAW,KAAK,MAAM,QAAO;IAC3B,OAAO,IAAI,kBAAkB,IAAI,SAAS,KAAK,QAAO;GACxD,CAAC;GACD,IAAI,UACF;EAEJ;EAEF,OAAO;CACT;CAEQ,uBAAuB,MAAU;EACvC,MAAM,qBAAqB,KAAK,kBAAiB,IAAK,KAAK;EAC3D,OAAO,IAAI,KAAK,KAAK,QAAO,IAAK,kBAAkB;CACrD;CAEQ,yBAAyB,eAA4B;EAC3D,IAAI,yBAAyB,MAAM,OAAO;EAC1C,MAAM,QAAQ,KAAK,6BAAa,IAAI,KAAI;EACxC,OAAO,IAAI,KAAK,MAAM,YAAW,IAAK,eAAe,GAAG,CAAC;CAC3D;CAEQ,qBAAqB,WAAiB,SAAa;EAEzD,MAAM,CAAC,WAAW,WAAW,CAAC,UAAU,YAAW,GAAI,QAAQ,YAAW,CAAE,CAAC,CAAC,KAAI;EAClF,MAAM,gBAAgB,UAAU;EAChC,OAAO,MAAM,KAAK,EAAE,QAAQ,gBAAgB,EAAC,IAAK,GAAG,OAAO,YAAY,EAAA,CAAG,SAAQ,CAAE;CACvF;CAEQ,eAAe,SAAa;EAClC,MAAM,SAAS,KAAK,OAAO,OAAO;EAClC,IAAI,CAAC,QAAQ;EAEb,IAAI,KAAK,aACP,KAAK,YAAY,aAAa;EAEhC,OAAO,aAAa;EACpB,KAAK,cAAc;CACrB;CAEQ,UAAU,SAAoB;EACpC,IAAI,CAAC,SAAS;EAEd,UAAU,KAAK,cAAc,OAAO;EAEpC,IAAI,KAAK,aAAa,OACpB,UAAU,cAAc,KAAK,uBAAuB,OAAO,GAAG,KAAK,YAAY;EAGjF,MAAM,QAAQ,KAAK,aAAY;EAC/B,IAAI,CAAC,KAAK,qBAAqB,SAAS,KAAK,GAAG;EAEhD,IAAI,CAAC,KAAK,eAAe,SAAS,KAAK,YAAY,GAAG;EAEtD,KAAK,eAAe,OAAO;EAC3B,KAAK,eAAe,OAAO;EAC3B,KAAK,eAAe;EAEpB,KAAK,IAAI,cAAa;EAEtB,AAD8B,KAAK,WAAW,cAAc,cAAc,WAC1E,CAAA,CAAsB,MAAK;CAC7B;CAEA,eAAe,OAAoB;EACjC,MAAM,EAAE,KAAK,aAAa;EAC1B,IAAI;EAEJ,QAAQ,KAAR;GACE,KAAK;IACH,UAAU,IAAI,KAAK,cAAc,EAAE,MAAM,GAAE,CAAE;IAC7C;GACF,KAAK;IACH,UAAU,IAAI,KAAK,cAAc,EAAE,MAAM,EAAC,CAAE;IAC5C;GACF,KAAK;IACH,UAAU,IAAI,KAAK,cAAc,EAAE,MAAM,EAAC,CAAE;IAC5C;GACF,KAAK;IACH,UAAU,IAAI,KAAK,cAAc,EAAE,MAAM,GAAE,CAAE;IAC7C;GACF,KAAK;IACH,UAAU,YAAY,KAAK,cAAc,EAAE,QAAQ,KAAK,OAAM,CAAE;IAChE;GACF,KAAK;IACH,UAAU,cAAc,KAAK,cAAc,EAAE,QAAQ,KAAK,OAAM,CAAE;IAClE;GACF,KAAK;IACH,UAAU,WACN,IAAI,KAAK,cAAc,EAAE,OAAO,GAAE,CAAE,IACpC,IAAI,KAAK,cAAc,EAAE,QAAQ,GAAE,CAAE;IACzC;GACF,KAAK;IACH,UAAU,WACN,IAAI,KAAK,cAAc,EAAE,OAAO,EAAC,CAAE,IACnC,IAAI,KAAK,cAAc,EAAE,QAAQ,EAAC,CAAE;IACxC;GACF,SACE;EACJ;EAEA,MAAM,eAAc;EACpB,KAAK,UAAU,OAAO;CACxB;CA9hBW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAiB,MAAA;IAAA,EAAA,OA6JlB,UAAS;IAAA,EAAA,OAAA,GAAA,WAAA;IAAA,EAAA,OAAA,GAAA,kBAAA;IAAA,EAAA,OAAA,GAAA,mBAAA;GAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CA7JR;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAiB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,UAAA;IAAA,iBAAA;IAAA,kBAAA;IAAA,oBAAA;IAAA,mBAAA;IAAA,SAAA;IAAA,eAAA;IAAA,YAAA;IAAA,sBAAA;IAAA,cAAA;IAAA,eAAA;IAAA,cAAA;IAAA,WAAA;IAAA,SAAA;IAAA,SAAA;GAAA;GAAA,SAAA;IAAA,YAAA;IAAA,YAAA;IAAA,YAAA;IAAA,sBAAA;IAAA,kBAAA;GAAA;GAAA,MAAA,EAAA,YAAA,EAAA,4BAAA,yBAAA,EAAA;GAAA,eAAA;GAAA,UAAA;GAAA,UCtE9B;GAwFA,QAAA,CAAA,snDAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDxBY;KAAiB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,kBAAA,QAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAE;KAAe,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAE;KAAa,UAAA;KAAA,QAAA,CAAA,QAAA,MAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;AAMhD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAP7B,MAAA;EACU,MAAA,CAAA;GAAA,SAAA;IAAC;IAAmB;IAAiB;GAAa;GAAC,UAClD;GAAgB,iBAGT,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,snDAAA;EAAA,CAAA;;;;;;IA+J5C,MAAA;IAAO,MAAA,CAAA,SAAS;;;;;;;;EA5JlB,YAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EACA,YAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EACA,YAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EACA,sBAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EACA,kBAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EACA,UAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EACA,iBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EACA,kBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EACA,oBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EACA,mBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,SAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAMA,eAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAKA,YAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAaA,sBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EA0BA,cAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAkBA,eAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAQA,cAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAQA,WAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAQA,SAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAWA,SAAA,CAAA,EAAA,MAAA,MAAA,CAAA;;GAgCA,MAAA;GAAY,MAAA,CAAA,0BAA0B"}
|
|
@@ -10,7 +10,7 @@ var CardFooterComponent = class CardFooterComponent {
|
|
|
10
10
|
static {
|
|
11
11
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
12
12
|
minVersion: "12.0.0",
|
|
13
|
-
version: "22.2.
|
|
13
|
+
version: "22.2.3",
|
|
14
14
|
ngImport: i0,
|
|
15
15
|
type: CardFooterComponent,
|
|
16
16
|
deps: [],
|
|
@@ -20,7 +20,7 @@ var CardFooterComponent = class CardFooterComponent {
|
|
|
20
20
|
static {
|
|
21
21
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
22
22
|
minVersion: "14.0.0",
|
|
23
|
-
version: "22.2.
|
|
23
|
+
version: "22.2.3",
|
|
24
24
|
type: CardFooterComponent,
|
|
25
25
|
isStandalone: true,
|
|
26
26
|
selector: "kirby-card-footer",
|
|
@@ -35,7 +35,7 @@ var CardFooterComponent = class CardFooterComponent {
|
|
|
35
35
|
};
|
|
36
36
|
i0.ɵɵngDeclareClassMetadata({
|
|
37
37
|
minVersion: "12.0.0",
|
|
38
|
-
version: "22.2.
|
|
38
|
+
version: "22.2.3",
|
|
39
39
|
ngImport: i0,
|
|
40
40
|
type: CardFooterComponent,
|
|
41
41
|
decorators: [{
|
|
@@ -63,7 +63,7 @@ var CardHeaderComponent = class CardHeaderComponent {
|
|
|
63
63
|
static {
|
|
64
64
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
65
65
|
minVersion: "12.0.0",
|
|
66
|
-
version: "22.2.
|
|
66
|
+
version: "22.2.3",
|
|
67
67
|
ngImport: i0,
|
|
68
68
|
type: CardHeaderComponent,
|
|
69
69
|
deps: [],
|
|
@@ -73,7 +73,7 @@ var CardHeaderComponent = class CardHeaderComponent {
|
|
|
73
73
|
static {
|
|
74
74
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
75
75
|
minVersion: "17.0.0",
|
|
76
|
-
version: "22.2.
|
|
76
|
+
version: "22.2.3",
|
|
77
77
|
type: CardHeaderComponent,
|
|
78
78
|
isStandalone: true,
|
|
79
79
|
selector: "kirby-card-header",
|
|
@@ -97,7 +97,7 @@ var CardHeaderComponent = class CardHeaderComponent {
|
|
|
97
97
|
};
|
|
98
98
|
i0.ɵɵngDeclareClassMetadata({
|
|
99
99
|
minVersion: "12.0.0",
|
|
100
|
-
version: "22.2.
|
|
100
|
+
version: "22.2.3",
|
|
101
101
|
ngImport: i0,
|
|
102
102
|
type: CardHeaderComponent,
|
|
103
103
|
decorators: [{
|
|
@@ -143,7 +143,7 @@ var CardAsButtonDirective = class CardAsButtonDirective {
|
|
|
143
143
|
static {
|
|
144
144
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
145
145
|
minVersion: "12.0.0",
|
|
146
|
-
version: "22.2.
|
|
146
|
+
version: "22.2.3",
|
|
147
147
|
ngImport: i0,
|
|
148
148
|
type: CardAsButtonDirective,
|
|
149
149
|
deps: [{ token: i0.ElementRef }],
|
|
@@ -153,7 +153,7 @@ var CardAsButtonDirective = class CardAsButtonDirective {
|
|
|
153
153
|
static {
|
|
154
154
|
this.ɵdir = i0.ɵɵngDeclareDirective({
|
|
155
155
|
minVersion: "14.0.0",
|
|
156
|
-
version: "22.2.
|
|
156
|
+
version: "22.2.3",
|
|
157
157
|
type: CardAsButtonDirective,
|
|
158
158
|
isStandalone: true,
|
|
159
159
|
selector: "kirby-card[click]",
|
|
@@ -177,7 +177,7 @@ var CardAsButtonDirective = class CardAsButtonDirective {
|
|
|
177
177
|
};
|
|
178
178
|
i0.ɵɵngDeclareClassMetadata({
|
|
179
179
|
minVersion: "12.0.0",
|
|
180
|
-
version: "22.2.
|
|
180
|
+
version: "22.2.3",
|
|
181
181
|
ngImport: i0,
|
|
182
182
|
type: CardAsButtonDirective,
|
|
183
183
|
decorators: [{
|
|
@@ -243,9 +243,9 @@ var CardComponent = class CardComponent {
|
|
|
243
243
|
}
|
|
244
244
|
get surface() {
|
|
245
245
|
const theme = this.themeColor;
|
|
246
|
-
if (!theme || theme.isDefault) return variantSurfaces[this.variant];
|
|
247
|
-
if (theme.isLight) return "base";
|
|
248
|
-
if (theme.isWhite) return "raised";
|
|
246
|
+
if (!theme || theme.isDefault || this.variant === "outlined") return variantSurfaces[this.variant];
|
|
247
|
+
if (theme.isLight || theme.isMedium) return "base";
|
|
248
|
+
if (theme.isWhite || theme.isSuccess || theme.isWarning || theme.isDanger) return "raised";
|
|
249
249
|
if (theme.isPrimary || theme.isSecondary || theme.isTertiary || theme.isDark) return "brand";
|
|
250
250
|
return null;
|
|
251
251
|
}
|
|
@@ -262,7 +262,7 @@ var CardComponent = class CardComponent {
|
|
|
262
262
|
medium: 720,
|
|
263
263
|
large: 1024
|
|
264
264
|
});
|
|
265
|
-
this.variant = "
|
|
265
|
+
this.variant = "elevated";
|
|
266
266
|
}
|
|
267
267
|
ngOnInit() {
|
|
268
268
|
this.resizeObserverService.observe(this.elementRef, (entry) => this.handleResize(entry));
|
|
@@ -288,7 +288,7 @@ var CardComponent = class CardComponent {
|
|
|
288
288
|
static {
|
|
289
289
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
290
290
|
minVersion: "12.0.0",
|
|
291
|
-
version: "22.2.
|
|
291
|
+
version: "22.2.3",
|
|
292
292
|
ngImport: i0,
|
|
293
293
|
type: CardComponent,
|
|
294
294
|
deps: [
|
|
@@ -302,7 +302,7 @@ var CardComponent = class CardComponent {
|
|
|
302
302
|
static {
|
|
303
303
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
304
304
|
minVersion: "16.1.0",
|
|
305
|
-
version: "22.2.
|
|
305
|
+
version: "22.2.3",
|
|
306
306
|
type: CardComponent,
|
|
307
307
|
isStandalone: true,
|
|
308
308
|
selector: "kirby-card",
|
|
@@ -315,7 +315,7 @@ var CardComponent = class CardComponent {
|
|
|
315
315
|
variant: [
|
|
316
316
|
"variant",
|
|
317
317
|
"variant",
|
|
318
|
-
(value) => value ?? "
|
|
318
|
+
(value) => value ?? "elevated"
|
|
319
319
|
]
|
|
320
320
|
},
|
|
321
321
|
host: { properties: {
|
|
@@ -324,14 +324,14 @@ var CardComponent = class CardComponent {
|
|
|
324
324
|
} },
|
|
325
325
|
ngImport: i0,
|
|
326
326
|
template: "<ng-content select=\"kirby-card-header\"></ng-content>\n<div class=\"content-wrapper\" [class.padding]=\"hasPadding\">\n <ng-content></ng-content>\n</div>\n<ng-content select=\"kirby-card-footer\"></ng-content>\n",
|
|
327
|
-
styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}ion-item-option.success{background-color:var(--kirby-color-fill-success);color:var(--kirby-color-content-success)}@media(hover:hover){ion-item-option.success:hover{background-color:var(--kirby-color-fill-success-hover);color:var(--kirby-color-content-success-hover)}}ion-item-option.success:active{background-color:var(--kirby-color-fill-success-active);color:var(--kirby-color-content-success-active)}ion-item-option.warning{background-color:var(--kirby-color-fill-warning);color:var(--kirby-color-content-warning)}@media(hover:hover){ion-item-option.warning:hover{background-color:var(--kirby-color-fill-warning-hover);color:var(--kirby-color-content-warning-hover)}}ion-item-option.warning:active{background-color:var(--kirby-color-fill-warning-active);color:var(--kirby-color-content-warning-active)}ion-item-option.danger{background-color:var(--kirby-color-fill-danger);color:var(--kirby-color-content-danger)}@media(hover:hover){ion-item-option.danger:hover{background-color:var(--kirby-color-fill-danger-hover);color:var(--kirby-color-content-danger-hover)}}ion-item-option.danger:active{background-color:var(--kirby-color-fill-danger-active);color:var(--kirby-color-content-danger-active)}:host{--kirby-card-main-background-color: var(--kirby-color-fill-base);--kirby-card-main-color: var(--kirby-color-content-base);--kirby-card-
|
|
327
|
+
styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}ion-item-option.success{background-color:var(--kirby-color-fill-success);color:var(--kirby-color-content-success)}@media(hover:hover){ion-item-option.success:hover{background-color:var(--kirby-color-fill-success-hover);color:var(--kirby-color-content-success-hover)}}ion-item-option.success:active{background-color:var(--kirby-color-fill-success-active);color:var(--kirby-color-content-success-active)}ion-item-option.warning{background-color:var(--kirby-color-fill-warning);color:var(--kirby-color-content-warning)}@media(hover:hover){ion-item-option.warning:hover{background-color:var(--kirby-color-fill-warning-hover);color:var(--kirby-color-content-warning-hover)}}ion-item-option.warning:active{background-color:var(--kirby-color-fill-warning-active);color:var(--kirby-color-content-warning-active)}ion-item-option.danger{background-color:var(--kirby-color-fill-danger);color:var(--kirby-color-content-danger)}@media(hover:hover){ion-item-option.danger:hover{background-color:var(--kirby-color-fill-danger-hover);color:var(--kirby-color-content-danger-hover)}}ion-item-option.danger:active{background-color:var(--kirby-color-fill-danger-active);color:var(--kirby-color-content-danger-active)}:host{--kirby-card-main-background-color: var(--kirby-color-fill-base);--kirby-card-main-color: var(--kirby-color-content-base);--kirby-card-border: var(--kirby-stroke-xs) solid var(--kirby-color-border-base-quiet);--kirby-card-footer-background-color: var(--kirby-color-fill-base);--kirby-card-footer-color: var(--kirby-color-content-base);--kirby-inputs-background-color: var(--kirby-dark-overlay);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-color-hover: var(--kirby-semi-dark);--kirby-inputs-elevation: none;--kirby-divider-color: var(--kirby-background-color)}:host.kirby-color-brightness-light{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-color-hover: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2)}:host.kirby-color-brightness-dark{--kirby-inputs-background-color: var(--kirby-white-overlay);--kirby-inputs-background-color-hover: var(--kirby-white-overlay-30);--kirby-inputs-background-color-active: var(--kirby-white-overlay-40);--kirby-inputs-color: var(--kirby-white);--kirby-inputs-indicator-background-color: var(--kirby-white);--kirby-inputs-indicator-color: var(--kirby-black);--kirby-inputs-placeholder-color: var(--kirby-white-overlay-50);--kirby-inputs-color-hover: var(--kirby-white-overlay-50);--kirby-inputs-elevation: none}:host{border-radius:var(--kirby-border-radius-n);box-shadow:var(--kirby-card-elevation);color:var(--kirby-card-main-color);background-color:var(--kirby-card-main-background-color);background-image:var(--kirby-card-background-image);background-repeat:var(--kirby-card-background-repeat, no-repeat);background-position:var(--kirby-card-background-position, center);background-size:var(--kirby-card-background-size, cover);border:var(--kirby-card-border);box-sizing:border-box;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;position:relative;z-index:var(--kirby-z-index-default);width:var(--kirby-card-width, auto)}:host.flat,:host.outlined{--kirby-card-elevation: 0 0 transparent}:host.outlined{--kirby-card-main-background-color: transparent;--kirby-card-border: var(--kirby-stroke-xs) solid var(--kirby-color-border-base-silent)}:host.outlined:has(kirby-card-header.flagged){border:none}:host.outlined:has(kirby-card-header.flagged) .content-wrapper{border-inline:var(--kirby-card-border);border-block-end:var(--kirby-card-border);border-bottom-left-radius:var(--kirby-border-radius-n);border-bottom-right-radius:var(--kirby-border-radius-n)}:host[role=button]{--kirby-card-state-layer-opacity: var(--kirby-opacity-0);cursor:pointer;outline:none}:host[role=button]:after{content:\"\";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:calc(var(--kirby-z-index-default) + 1);background-color:var(--kirby-card-main-color);opacity:var(--kirby-card-state-layer-opacity);transition:opacity 80ms linear 0ms}@media(hover:hover){:host[role=button]:hover{--kirby-card-state-layer-opacity: var(--kirby-opacity-5)}}:host[role=button]:active,:host[role=button].interaction-state-active{--kirby-card-state-layer-opacity: var(--kirby-opacity-10)}:host[role=button]:focus-visible{transition:all 80ms linear 0ms;box-shadow:var(--kirby-card-elevation),var(--kirby-focus-ring-md-combined-inset);--kirby-card-border: var(--kirby-stroke-xs) solid var(--kirby-color-border-focus)}.content-wrapper ::ng-deep>*{--kirby-content-border-top-radius: 0;--kirby-content-border-bottom-radius: 0}.content-wrapper ::ng-deep>:first-child{--kirby-content-border-top-radius: calc(var(--kirby-border-radius-n) - var(--kirby-stroke-xs))}.content-wrapper ::ng-deep>:last-child{--kirby-content-border-bottom-radius: calc( var(--kirby-border-radius-n) - var(--kirby-stroke-xs) )}.content-wrapper.padding{padding-top:var(--kirby-card-padding-top, var(--kirby-spacing-s));padding-bottom:var(--kirby-card-padding-bottom, var(--kirby-spacing-s));padding-inline:var(--kirby-spacing-s)}:host:has(kirby-card-header) .content-wrapper ::ng-deep>:first-child{--kirby-content-border-top-radius: 0}:host:has(kirby-card-footer) .content-wrapper ::ng-deep>:last-child{--kirby-content-border-bottom-radius: 0}:host(.success:not(.outlined)){--kirby-card-main-background-color: var(--kirby-color-fill-success);--kirby-card-main-color: var(--kirby-color-content-success);--kirby-card-main-border-color: var(--kirby-color-border-success)}:host(.warning:not(.outlined)){--kirby-card-main-background-color: var(--kirby-color-fill-warning);--kirby-card-main-color: var(--kirby-color-content-warning);--kirby-card-main-border-color: var(--kirby-color-border-warning)}:host(.danger:not(.outlined)){--kirby-card-main-background-color: var(--kirby-color-fill-danger);--kirby-card-main-color: var(--kirby-color-content-danger);--kirby-card-main-border-color: var(--kirby-color-border-danger)}\n"],
|
|
328
328
|
changeDetection: i0.ChangeDetectionStrategy.Eager
|
|
329
329
|
});
|
|
330
330
|
}
|
|
331
331
|
};
|
|
332
332
|
i0.ɵɵngDeclareClassMetadata({
|
|
333
333
|
minVersion: "12.0.0",
|
|
334
|
-
version: "22.2.
|
|
334
|
+
version: "22.2.3",
|
|
335
335
|
ngImport: i0,
|
|
336
336
|
type: CardComponent,
|
|
337
337
|
decorators: [{
|
|
@@ -340,7 +340,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
340
340
|
selector: "kirby-card",
|
|
341
341
|
changeDetection: ChangeDetectionStrategy.Eager,
|
|
342
342
|
template: "<ng-content select=\"kirby-card-header\"></ng-content>\n<div class=\"content-wrapper\" [class.padding]=\"hasPadding\">\n <ng-content></ng-content>\n</div>\n<ng-content select=\"kirby-card-footer\"></ng-content>\n",
|
|
343
|
-
styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}ion-item-option.success{background-color:var(--kirby-color-fill-success);color:var(--kirby-color-content-success)}@media(hover:hover){ion-item-option.success:hover{background-color:var(--kirby-color-fill-success-hover);color:var(--kirby-color-content-success-hover)}}ion-item-option.success:active{background-color:var(--kirby-color-fill-success-active);color:var(--kirby-color-content-success-active)}ion-item-option.warning{background-color:var(--kirby-color-fill-warning);color:var(--kirby-color-content-warning)}@media(hover:hover){ion-item-option.warning:hover{background-color:var(--kirby-color-fill-warning-hover);color:var(--kirby-color-content-warning-hover)}}ion-item-option.warning:active{background-color:var(--kirby-color-fill-warning-active);color:var(--kirby-color-content-warning-active)}ion-item-option.danger{background-color:var(--kirby-color-fill-danger);color:var(--kirby-color-content-danger)}@media(hover:hover){ion-item-option.danger:hover{background-color:var(--kirby-color-fill-danger-hover);color:var(--kirby-color-content-danger-hover)}}ion-item-option.danger:active{background-color:var(--kirby-color-fill-danger-active);color:var(--kirby-color-content-danger-active)}:host{--kirby-card-main-background-color: var(--kirby-color-fill-base);--kirby-card-main-color: var(--kirby-color-content-base);--kirby-card-
|
|
343
|
+
styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}ion-item-option.success{background-color:var(--kirby-color-fill-success);color:var(--kirby-color-content-success)}@media(hover:hover){ion-item-option.success:hover{background-color:var(--kirby-color-fill-success-hover);color:var(--kirby-color-content-success-hover)}}ion-item-option.success:active{background-color:var(--kirby-color-fill-success-active);color:var(--kirby-color-content-success-active)}ion-item-option.warning{background-color:var(--kirby-color-fill-warning);color:var(--kirby-color-content-warning)}@media(hover:hover){ion-item-option.warning:hover{background-color:var(--kirby-color-fill-warning-hover);color:var(--kirby-color-content-warning-hover)}}ion-item-option.warning:active{background-color:var(--kirby-color-fill-warning-active);color:var(--kirby-color-content-warning-active)}ion-item-option.danger{background-color:var(--kirby-color-fill-danger);color:var(--kirby-color-content-danger)}@media(hover:hover){ion-item-option.danger:hover{background-color:var(--kirby-color-fill-danger-hover);color:var(--kirby-color-content-danger-hover)}}ion-item-option.danger:active{background-color:var(--kirby-color-fill-danger-active);color:var(--kirby-color-content-danger-active)}:host{--kirby-card-main-background-color: var(--kirby-color-fill-base);--kirby-card-main-color: var(--kirby-color-content-base);--kirby-card-border: var(--kirby-stroke-xs) solid var(--kirby-color-border-base-quiet);--kirby-card-footer-background-color: var(--kirby-color-fill-base);--kirby-card-footer-color: var(--kirby-color-content-base);--kirby-inputs-background-color: var(--kirby-dark-overlay);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-color-hover: var(--kirby-semi-dark);--kirby-inputs-elevation: none;--kirby-divider-color: var(--kirby-background-color)}:host.kirby-color-brightness-light{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-color-hover: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2)}:host.kirby-color-brightness-dark{--kirby-inputs-background-color: var(--kirby-white-overlay);--kirby-inputs-background-color-hover: var(--kirby-white-overlay-30);--kirby-inputs-background-color-active: var(--kirby-white-overlay-40);--kirby-inputs-color: var(--kirby-white);--kirby-inputs-indicator-background-color: var(--kirby-white);--kirby-inputs-indicator-color: var(--kirby-black);--kirby-inputs-placeholder-color: var(--kirby-white-overlay-50);--kirby-inputs-color-hover: var(--kirby-white-overlay-50);--kirby-inputs-elevation: none}:host{border-radius:var(--kirby-border-radius-n);box-shadow:var(--kirby-card-elevation);color:var(--kirby-card-main-color);background-color:var(--kirby-card-main-background-color);background-image:var(--kirby-card-background-image);background-repeat:var(--kirby-card-background-repeat, no-repeat);background-position:var(--kirby-card-background-position, center);background-size:var(--kirby-card-background-size, cover);border:var(--kirby-card-border);box-sizing:border-box;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;position:relative;z-index:var(--kirby-z-index-default);width:var(--kirby-card-width, auto)}:host.flat,:host.outlined{--kirby-card-elevation: 0 0 transparent}:host.outlined{--kirby-card-main-background-color: transparent;--kirby-card-border: var(--kirby-stroke-xs) solid var(--kirby-color-border-base-silent)}:host.outlined:has(kirby-card-header.flagged){border:none}:host.outlined:has(kirby-card-header.flagged) .content-wrapper{border-inline:var(--kirby-card-border);border-block-end:var(--kirby-card-border);border-bottom-left-radius:var(--kirby-border-radius-n);border-bottom-right-radius:var(--kirby-border-radius-n)}:host[role=button]{--kirby-card-state-layer-opacity: var(--kirby-opacity-0);cursor:pointer;outline:none}:host[role=button]:after{content:\"\";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:calc(var(--kirby-z-index-default) + 1);background-color:var(--kirby-card-main-color);opacity:var(--kirby-card-state-layer-opacity);transition:opacity 80ms linear 0ms}@media(hover:hover){:host[role=button]:hover{--kirby-card-state-layer-opacity: var(--kirby-opacity-5)}}:host[role=button]:active,:host[role=button].interaction-state-active{--kirby-card-state-layer-opacity: var(--kirby-opacity-10)}:host[role=button]:focus-visible{transition:all 80ms linear 0ms;box-shadow:var(--kirby-card-elevation),var(--kirby-focus-ring-md-combined-inset);--kirby-card-border: var(--kirby-stroke-xs) solid var(--kirby-color-border-focus)}.content-wrapper ::ng-deep>*{--kirby-content-border-top-radius: 0;--kirby-content-border-bottom-radius: 0}.content-wrapper ::ng-deep>:first-child{--kirby-content-border-top-radius: calc(var(--kirby-border-radius-n) - var(--kirby-stroke-xs))}.content-wrapper ::ng-deep>:last-child{--kirby-content-border-bottom-radius: calc( var(--kirby-border-radius-n) - var(--kirby-stroke-xs) )}.content-wrapper.padding{padding-top:var(--kirby-card-padding-top, var(--kirby-spacing-s));padding-bottom:var(--kirby-card-padding-bottom, var(--kirby-spacing-s));padding-inline:var(--kirby-spacing-s)}:host:has(kirby-card-header) .content-wrapper ::ng-deep>:first-child{--kirby-content-border-top-radius: 0}:host:has(kirby-card-footer) .content-wrapper ::ng-deep>:last-child{--kirby-content-border-bottom-radius: 0}:host(.success:not(.outlined)){--kirby-card-main-background-color: var(--kirby-color-fill-success);--kirby-card-main-color: var(--kirby-color-content-success);--kirby-card-main-border-color: var(--kirby-color-border-success)}:host(.warning:not(.outlined)){--kirby-card-main-background-color: var(--kirby-color-fill-warning);--kirby-card-main-color: var(--kirby-color-content-warning);--kirby-card-main-border-color: var(--kirby-color-border-warning)}:host(.danger:not(.outlined)){--kirby-card-main-background-color: var(--kirby-color-fill-danger);--kirby-card-main-color: var(--kirby-color-content-danger);--kirby-card-main-border-color: var(--kirby-color-border-danger)}\n"]
|
|
344
344
|
}]
|
|
345
345
|
}],
|
|
346
346
|
ctorParameters: () => [
|
|
@@ -360,7 +360,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
360
360
|
sizes: [{ type: Input }],
|
|
361
361
|
variant: [{
|
|
362
362
|
type: Input,
|
|
363
|
-
args: [{ transform: (value) => value ?? "
|
|
363
|
+
args: [{ transform: (value) => value ?? "elevated" }]
|
|
364
364
|
}],
|
|
365
365
|
hostClasses: [{
|
|
366
366
|
type: HostBinding,
|
|
@@ -378,7 +378,7 @@ var CardModule = class CardModule {
|
|
|
378
378
|
static {
|
|
379
379
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
380
380
|
minVersion: "12.0.0",
|
|
381
|
-
version: "22.2.
|
|
381
|
+
version: "22.2.3",
|
|
382
382
|
ngImport: i0,
|
|
383
383
|
type: CardModule,
|
|
384
384
|
deps: [],
|
|
@@ -388,7 +388,7 @@ var CardModule = class CardModule {
|
|
|
388
388
|
static {
|
|
389
389
|
this.ɵmod = i0.ɵɵngDeclareNgModule({
|
|
390
390
|
minVersion: "14.0.0",
|
|
391
|
-
version: "22.2.
|
|
391
|
+
version: "22.2.3",
|
|
392
392
|
ngImport: i0,
|
|
393
393
|
type: CardModule,
|
|
394
394
|
imports: [
|
|
@@ -411,7 +411,7 @@ var CardModule = class CardModule {
|
|
|
411
411
|
static {
|
|
412
412
|
this.ɵinj = i0.ɵɵngDeclareInjector({
|
|
413
413
|
minVersion: "12.0.0",
|
|
414
|
-
version: "22.2.
|
|
414
|
+
version: "22.2.3",
|
|
415
415
|
ngImport: i0,
|
|
416
416
|
type: CardModule,
|
|
417
417
|
imports: [CommonModule]
|
|
@@ -420,7 +420,7 @@ var CardModule = class CardModule {
|
|
|
420
420
|
};
|
|
421
421
|
i0.ɵɵngDeclareClassMetadata({
|
|
422
422
|
minVersion: "12.0.0",
|
|
423
|
-
version: "22.2.
|
|
423
|
+
version: "22.2.3",
|
|
424
424
|
ngImport: i0,
|
|
425
425
|
type: CardModule,
|
|
426
426
|
decorators: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-card.mjs","names":[],"sources":["../../card/src/card-footer/card-footer.component.ts","../../card/src/card-footer/card-footer.component.html","../../card/src/card-header/card-header.component.ts","../../card/src/card-header/card-header.component.html","../../card/src/card-as-button/card-as-button.directive.ts","../../card/src/card.component.ts","../../card/src/card.component.html","../../card/src/card.module.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-card-footer',\n templateUrl: './card-footer.component.html',\n styleUrls: ['./card-footer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardFooterComponent {\n @HostBinding('class.has-padding')\n @Input()\n hasPadding: boolean = true;\n}\n","<footer>\n <ng-content></ng-content>\n</footer>\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\nimport { CardFlagLevel } from '../card-flag-level';\n\n@Component({\n selector: 'kirby-card-header',\n templateUrl: './card-header.component.html',\n styleUrls: ['./card-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardHeaderComponent {\n @Input() title: string;\n @Input() subtitle: string;\n @Input() isTitleBold: boolean;\n @Input()\n flagged: CardFlagLevel = null;\n @HostBinding('class.has-padding')\n @Input()\n hasPadding: boolean = true;\n\n @HostBinding('class')\n get _cssClass() {\n return [this.flagged, this.flagged ? 'flagged' : null];\n }\n}\n","@if (title) {\n <p class=\"title\" [class.bold]=\"isTitleBold\">{{ title }}</p>\n}\n@if (subtitle) {\n <p class=\"subtitle\">{{ subtitle }}</p>\n}\n<ng-content></ng-content>\n","import { Directive, ElementRef, HostBinding, HostListener } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kirby-card[click]',\n})\nexport class CardAsButtonDirective {\n @HostBinding('attr.role') role: string = 'button';\n @HostBinding('attr.tabindex') tabindex: number = 0;\n @HostBinding('class.interaction-state-active') _pressed = false;\n\n constructor(private clickableElement: ElementRef) {}\n\n @HostListener('keydown.space', ['$event'])\n @HostListener('keydown.enter', ['$event'])\n _onKeydownHandler(event: KeyboardEvent) {\n if (event.currentTarget !== event.target) return; // Do not handle keydown events for nested elements - let event bubbling take place as normal\n\n this._pressed = true;\n this.clickableElement.nativeElement.click(event);\n /*\n * Prevent default event from firing so the UA wont\n * catch this event and e.g. scroll the page on space,\n * which is the default behavior in major browsers\n */\n\n event.preventDefault();\n }\n\n @HostListener('keyup.space')\n @HostListener('keyup.enter')\n @HostListener('blur')\n _onInactiveHandler() {\n this._pressed = false;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\nimport { ResizeObserverService, ThemeColorDirective } from '@kirbydesign/designsystem/shared';\n\nexport type CardVariant = 'elevated' | 'flat' | 'outlined' | 'base' | 'raised' | 'brand';\n\nconst variantSurfaces: Record<CardVariant, string> = {\n elevated: 'raised',\n flat: 'raised',\n outlined: 'base',\n base: 'base',\n raised: 'raised',\n brand: 'brand',\n};\n\n@Component({\n selector: 'kirby-card',\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class CardComponent implements OnInit, OnDestroy {\n private themeColor = inject(ThemeColorDirective, { optional: true, self: true });\n\n @Input() title: string;\n @Input() subtitle: string;\n\n @HostBinding('style.--kirby-card-background-image')\n _backgroundImage: string;\n\n @Input()\n set backgroundImageUrl(value: string) {\n this._backgroundImage = `url('${value}')`;\n }\n\n @Input()\n hasPadding: boolean;\n\n private sizesSortedByBreakpoint = this.sortSizesByBreakpoint({\n small: 360,\n medium: 720,\n large: 1024,\n });\n\n @Input()\n set sizes(value: { [size: string]: number }) {\n if (typeof value === 'string') {\n console.error(\n 'Sizes property cannot be a string. Please ensure the size property is bound as an expression:\\n[sizes]=\"{...}\"'\n );\n }\n this.sizesSortedByBreakpoint = this.sortSizesByBreakpoint(value);\n }\n\n /**\n * `base`, `raised` (default) and `brand` set the surface directly.\n * `elevated` and `flat` are raised surfaces, `outlined` is a base surface.\n * A `themeColor` takes precedence over the surface of the variant.\n */\n @Input({ transform: (value: CardVariant | null | undefined) => value ?? 'raised' })\n variant: CardVariant = 'raised';\n\n @HostBinding('class')\n get hostClasses(): string {\n const surface = this.surface;\n return surface ? `${this.variant} kirby-surface-${surface}` : this.variant;\n }\n\n // For backwards compatibility, a theme color takes precedence over the variant\n private get surface(): string | null {\n const theme = this.themeColor;\n if (!theme || theme.isDefault) return variantSurfaces[this.variant];\n\n if (theme.isLight) return 'base';\n if (theme.isWhite) return 'raised';\n if (theme.isPrimary || theme.isSecondary || theme.isTertiary || theme.isDark) return 'brand';\n return null;\n }\n\n constructor(\n private elementRef: ElementRef,\n private resizeObserverService: ResizeObserverService,\n private renderer: Renderer2\n ) {}\n\n ngOnInit() {\n this.resizeObserverService.observe(this.elementRef, (entry) => this.handleResize(entry));\n }\n\n ngOnDestroy() {\n this.resizeObserverService.unobserve(this.elementRef);\n }\n\n private sortSizesByBreakpoint(sizes: { [size: string]: number }): [string, number][] {\n return Object.entries(sizes).sort(this.compareSizesByBreakpoint);\n }\n\n private compareSizesByBreakpoint(a: [string, number], b: [string, number]): number {\n return a[1] > b[1] ? 1 : b[1] > a[1] ? -1 : 0;\n }\n\n private handleResize(entry: ResizeObserverEntry) {\n const sizeAttributeName = 'size';\n const smallestBreakpointName = this.sizesSortedByBreakpoint[0][0];\n const smallestBreakpointWidth = this.sizesSortedByBreakpoint[0][1];\n if (entry.contentRect.width < smallestBreakpointWidth) {\n this.renderer.setAttribute(entry.target, sizeAttributeName, `<${smallestBreakpointName}`);\n } else {\n this.sizesSortedByBreakpoint.forEach(([size, width]) => {\n if (entry.contentRect.width >= width) {\n this.renderer.setAttribute(entry.target, sizeAttributeName, size);\n }\n });\n }\n }\n}\n","<ng-content select=\"kirby-card-header\"></ng-content>\n<div class=\"content-wrapper\" [class.padding]=\"hasPadding\">\n <ng-content></ng-content>\n</div>\n<ng-content select=\"kirby-card-footer\"></ng-content>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ThemeColorDirective } from '@kirbydesign/designsystem/shared';\nimport { CardComponent } from './card.component';\nimport { CardHeaderComponent } from './card-header/card-header.component';\nimport { CardFooterComponent } from './card-footer/card-footer.component';\nimport { CardAsButtonDirective } from './card-as-button/card-as-button.directive';\n\nconst imports = [CardComponent, CardFooterComponent, CardHeaderComponent, CardAsButtonDirective];\n@NgModule({\n imports: [CommonModule, ThemeColorDirective, ...imports],\n exports: [...imports, ThemeColorDirective],\n})\nexport class CardModule {}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-card.mjs","names":[],"sources":["../../card/src/card-footer/card-footer.component.ts","../../card/src/card-footer/card-footer.component.html","../../card/src/card-header/card-header.component.ts","../../card/src/card-header/card-header.component.html","../../card/src/card-as-button/card-as-button.directive.ts","../../card/src/card.component.ts","../../card/src/card.component.html","../../card/src/card.module.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-card-footer',\n templateUrl: './card-footer.component.html',\n styleUrls: ['./card-footer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardFooterComponent {\n @HostBinding('class.has-padding')\n @Input()\n hasPadding: boolean = true;\n}\n","<footer>\n <ng-content></ng-content>\n</footer>\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\nimport { CardFlagLevel } from '../card-flag-level';\n\n@Component({\n selector: 'kirby-card-header',\n templateUrl: './card-header.component.html',\n styleUrls: ['./card-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardHeaderComponent {\n @Input() title: string;\n @Input() subtitle: string;\n @Input() isTitleBold: boolean;\n @Input()\n flagged: CardFlagLevel = null;\n @HostBinding('class.has-padding')\n @Input()\n hasPadding: boolean = true;\n\n @HostBinding('class')\n get _cssClass() {\n return [this.flagged, this.flagged ? 'flagged' : null];\n }\n}\n","@if (title) {\n <p class=\"title\" [class.bold]=\"isTitleBold\">{{ title }}</p>\n}\n@if (subtitle) {\n <p class=\"subtitle\">{{ subtitle }}</p>\n}\n<ng-content></ng-content>\n","import { Directive, ElementRef, HostBinding, HostListener } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kirby-card[click]',\n})\nexport class CardAsButtonDirective {\n @HostBinding('attr.role') role: string = 'button';\n @HostBinding('attr.tabindex') tabindex: number = 0;\n @HostBinding('class.interaction-state-active') _pressed = false;\n\n constructor(private clickableElement: ElementRef) {}\n\n @HostListener('keydown.space', ['$event'])\n @HostListener('keydown.enter', ['$event'])\n _onKeydownHandler(event: KeyboardEvent) {\n if (event.currentTarget !== event.target) return; // Do not handle keydown events for nested elements - let event bubbling take place as normal\n\n this._pressed = true;\n this.clickableElement.nativeElement.click(event);\n /*\n * Prevent default event from firing so the UA wont\n * catch this event and e.g. scroll the page on space,\n * which is the default behavior in major browsers\n */\n\n event.preventDefault();\n }\n\n @HostListener('keyup.space')\n @HostListener('keyup.enter')\n @HostListener('blur')\n _onInactiveHandler() {\n this._pressed = false;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\nimport { ResizeObserverService, ThemeColorDirective } from '@kirbydesign/designsystem/shared';\n\nexport type CardVariant = 'elevated' | 'flat' | 'outlined' | 'base' | 'raised' | 'brand';\n\nconst variantSurfaces: Record<CardVariant, string> = {\n elevated: 'raised',\n flat: 'raised',\n outlined: 'base',\n base: 'base',\n raised: 'raised',\n brand: 'brand',\n};\n\n@Component({\n selector: 'kirby-card',\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class CardComponent implements OnInit, OnDestroy {\n private themeColor = inject(ThemeColorDirective, { optional: true, self: true });\n\n @Input() title: string;\n @Input() subtitle: string;\n\n @HostBinding('style.--kirby-card-background-image')\n _backgroundImage: string;\n\n @Input()\n set backgroundImageUrl(value: string) {\n this._backgroundImage = `url('${value}')`;\n }\n\n @Input()\n hasPadding: boolean;\n\n private sizesSortedByBreakpoint = this.sortSizesByBreakpoint({\n small: 360,\n medium: 720,\n large: 1024,\n });\n\n @Input()\n set sizes(value: { [size: string]: number }) {\n if (typeof value === 'string') {\n console.error(\n 'Sizes property cannot be a string. Please ensure the size property is bound as an expression:\\n[sizes]=\"{...}\"'\n );\n }\n this.sizesSortedByBreakpoint = this.sortSizesByBreakpoint(value);\n }\n\n /**\n * `base`, `raised` and `brand` set the surface directly.\n * `elevated` (default) and `flat` are raised surfaces, `outlined` is a base surface.\n * A `themeColor` takes precedence over the surface of the variant.\n */\n @Input({ transform: (value: CardVariant | null | undefined) => value ?? 'elevated' })\n variant: CardVariant = 'elevated';\n\n @HostBinding('class')\n get hostClasses(): string {\n const surface = this.surface;\n return surface ? `${this.variant} kirby-surface-${surface}` : this.variant;\n }\n\n private get surface(): string | null {\n const theme = this.themeColor;\n if (!theme || theme.isDefault || this.variant === 'outlined') {\n return variantSurfaces[this.variant];\n }\n\n if (theme.isLight || theme.isMedium) return 'base';\n if (theme.isWhite || theme.isSuccess || theme.isWarning || theme.isDanger) return 'raised';\n if (theme.isPrimary || theme.isSecondary || theme.isTertiary || theme.isDark) return 'brand';\n return null;\n }\n\n constructor(\n private elementRef: ElementRef,\n private resizeObserverService: ResizeObserverService,\n private renderer: Renderer2\n ) {}\n\n ngOnInit() {\n this.resizeObserverService.observe(this.elementRef, (entry) => this.handleResize(entry));\n }\n\n ngOnDestroy() {\n this.resizeObserverService.unobserve(this.elementRef);\n }\n\n private sortSizesByBreakpoint(sizes: { [size: string]: number }): [string, number][] {\n return Object.entries(sizes).sort(this.compareSizesByBreakpoint);\n }\n\n private compareSizesByBreakpoint(a: [string, number], b: [string, number]): number {\n return a[1] > b[1] ? 1 : b[1] > a[1] ? -1 : 0;\n }\n\n private handleResize(entry: ResizeObserverEntry) {\n const sizeAttributeName = 'size';\n const smallestBreakpointName = this.sizesSortedByBreakpoint[0][0];\n const smallestBreakpointWidth = this.sizesSortedByBreakpoint[0][1];\n if (entry.contentRect.width < smallestBreakpointWidth) {\n this.renderer.setAttribute(entry.target, sizeAttributeName, `<${smallestBreakpointName}`);\n } else {\n this.sizesSortedByBreakpoint.forEach(([size, width]) => {\n if (entry.contentRect.width >= width) {\n this.renderer.setAttribute(entry.target, sizeAttributeName, size);\n }\n });\n }\n }\n}\n","<ng-content select=\"kirby-card-header\"></ng-content>\n<div class=\"content-wrapper\" [class.padding]=\"hasPadding\">\n <ng-content></ng-content>\n</div>\n<ng-content select=\"kirby-card-footer\"></ng-content>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ThemeColorDirective } from '@kirbydesign/designsystem/shared';\nimport { CardComponent } from './card.component';\nimport { CardHeaderComponent } from './card-header/card-header.component';\nimport { CardFooterComponent } from './card-footer/card-footer.component';\nimport { CardAsButtonDirective } from './card-as-button/card-as-button.directive';\n\nconst imports = [CardComponent, CardFooterComponent, CardHeaderComponent, CardAsButtonDirective];\n@NgModule({\n imports: [CommonModule, ThemeColorDirective, ...imports],\n exports: [...imports, ThemeColorDirective],\n})\nexport class CardModule {}\n"],"mappings":";;;;;AAQA,IAAa,sBAAb,MAAa,oBAAmB;CANhC,cAAA;EASE,KAAA,aAAsB;CACvB;CAJY;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAmB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAnB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAmB,cAAA;GAAA,UAAA;GAAA,QAAA,EAAA,YAAA,aAAA;GAAA,MAAA,EAAA,YAAA,EAAA,qBAAA,kBAAA,EAAA;GAAA,UAAA;GAAA,UCRhC;GAGA,QAAA,CAAA,8RAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;ADKa,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAN/B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAmB,iBAGZ,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,8RAAA;EAAA,CAAA;;;EAG9C,MAAA;EAAY,MAAA,CAAA,mBAAmB;CAC/B,GAAA,EAAA,MAAA,MAAA,CAAA,EAAA;;AEAH,IAAa,sBAAb,MAAa,oBAAmB;CANhC,cAAA;EAWE,KAAA,UAAyB;EAGzB,KAAA,aAAsB;CAMvB;CAJC,IACI,YAAS;EACX,OAAO,CAAC,KAAK,SAAS,KAAK,UAAU,YAAY,IAAI;CACvD;CAbW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAmB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAnB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAmB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,OAAA;IAAA,UAAA;IAAA,aAAA;IAAA,SAAA;IAAA,YAAA;GAAA;GAAA,MAAA,EAAA,YAAA;IAAA,qBAAA;IAAA,SAAA;GAAA,EAAA;GAAA,UAAA;GAAA,UCVhC;GAOA,QAAA,CAAA,q6CAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;ADGa,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAN/B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAmB,iBAGZ,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,q6CAAA;EAAA,CAAA;;;EAG9C,OAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EACA,UAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EACA,aAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EACA,SAAA,CAAA,EAAA,MAAA,MAAA,CAAA;;GAEA,MAAA;GAAY,MAAA,CAAA,mBAAmB;EAC/B,GAAA,EAAA,MAAA,MAAA,CAAA;;GAGA,MAAA;GAAY,MAAA,CAAA,OAAO;;;;AEdtB,IAAa,wBAAb,MAAa,sBAAqB;CAKhC,YAAoB,kBAA4B;EAA5B,KAAA,mBAAA;EAJM,KAAA,OAAe;EACX,KAAA,WAAmB;EACF,KAAA,WAAW;CAEP;CAInD,kBAAkB,OAAoB;EACpC,IAAI,MAAM,kBAAkB,MAAM,QAAQ;EAE1C,KAAK,WAAW;EAChB,KAAK,iBAAiB,cAAc,MAAM,KAAK;EAO/C,MAAM,eAAc;CACtB;CAKA,qBAAkB;EAChB,KAAK,WAAW;CAClB;CA5BW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAqB,MAAA,CAAA,EAAA,OAAA,GAAA,WAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAArB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAqB,cAAA;GAAA,UAAA;GAAA,MAAA;IAAA,WAAA;KAAA,iBAAA;KAAA,iBAAA;KAAA,eAAA;KAAA,eAAA;KAAA,QAAA;IAAA;IAAA,YAAA;KAAA,aAAA;KAAA,iBAAA;KAAA,kCAAA;IAAA;GAAA;GAAA,UAAA;EAAA,CAAA;CAAA;;AAArB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EAJjC,MAAA;EAAU,MAAA,CAAA,EAET,UAAU,oBACX,CAAA;;;;;GAEE,MAAA;GAAY,MAAA,CAAA,WAAW;;;GACvB,MAAA;GAAY,MAAA,CAAA,eAAe;;;GAC3B,MAAA;GAAY,MAAA,CAAA,gCAAgC;;;GAI5C,MAAA;GAAa,MAAA,CAAA,iBAAiB,CAAC,QAAQ,CAAC;;GACxC,MAAA;GAAa,MAAA,CAAA,iBAAiB,CAAC,QAAQ,CAAC;;;;IAexC,MAAA;IAAa,MAAA,CAAA,aAAa;;;IAC1B,MAAA;IAAa,MAAA,CAAA,aAAa;;;IAC1B,MAAA;IAAa,MAAA,CAAA,MAAM;;;;;AChBtB,MAAM,kBAA+C;CACnD,UAAU;CACV,MAAM;CACN,UAAU;CACV,MAAM;CACN,QAAQ;CACR,OAAO;AACR;AAQD,IAAa,gBAAb,MAAa,cAAa;CASxB,IACI,mBAAmB,OAAa;EAClC,KAAK,mBAAmB,QAAQ,MAAK;CACvC;CAWA,IACI,MAAM,OAAiC;EACzC,IAAI,OAAO,UAAU,UACnB,QAAQ,MACN,kHAAgH;EAGpH,KAAK,0BAA0B,KAAK,sBAAsB,KAAK;CACjE;CAUA,IACI,cAAW;EACb,MAAM,UAAU,KAAK;EACrB,OAAO,UAAU,GAAG,KAAK,QAAO,iBAAkB,YAAY,KAAK;CACrE;CAEA,IAAY,UAAO;EACjB,MAAM,QAAQ,KAAK;EACnB,IAAI,CAAC,SAAS,MAAM,aAAa,KAAK,YAAY,YAChD,OAAO,gBAAgB,KAAK;EAG9B,IAAI,MAAM,WAAW,MAAM,UAAU,OAAO;EAC5C,IAAI,MAAM,WAAW,MAAM,aAAa,MAAM,aAAa,MAAM,UAAU,OAAO;EAClF,IAAI,MAAM,aAAa,MAAM,eAAe,MAAM,cAAc,MAAM,QAAQ,OAAO;EACrF,OAAO;CACT;CAEA,YACU,YACA,uBACA,UAAmB;EAFnB,KAAA,aAAA;EACA,KAAA,wBAAA;EACA,KAAA,WAAA;EA7DF,KAAA,aAAa,OAAO,qBAAqB;GAAE,UAAU;GAAM,MAAM;EAAI,CAAE;EAgBvE,KAAA,0BAA0B,KAAK,sBAAsB;GAC3D,OAAO;GACP,QAAQ;GACR,OAAO;EACR,CAAA;EAkBD,KAAA,UAAuB;CAwBpB;CAEH,WAAQ;EACN,KAAK,sBAAsB,QAAQ,KAAK,aAAa,UAAU,KAAK,aAAa,KAAK,CAAC;CACzF;CAEA,cAAW;EACT,KAAK,sBAAsB,UAAU,KAAK,UAAU;CACtD;CAEQ,sBAAsB,OAAiC;EAC7D,OAAO,OAAO,QAAQ,KAAK,CAAC,CAAC,KAAK,KAAK,wBAAwB;CACjE;CAEQ,yBAAyB,GAAqB,GAAmB;EACvE,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK;CAC9C;CAEQ,aAAa,OAA0B;EAC7C,MAAM,oBAAoB;EAC1B,MAAM,yBAAyB,KAAK,wBAAwB,EAAE,CAAC;EAC/D,MAAM,0BAA0B,KAAK,wBAAwB,EAAE,CAAC;EAChE,IAAI,MAAM,YAAY,QAAQ,yBAC5B,KAAK,SAAS,aAAa,MAAM,QAAQ,mBAAmB,IAAI,wBAAwB;OAExF,KAAK,wBAAwB,SAAS,CAAC,MAAM,WAAU;GACrD,IAAI,MAAM,YAAY,SAAS,OAC7B,KAAK,SAAS,aAAa,MAAM,QAAQ,mBAAmB,IAAI;EAEpE,CAAC;CAEL;CA9FW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAa,MAAA;IAAA,EAAA,OAAA,GAAA,WAAA;IAAA,EAAA,OAAA,GAAA,sBAAA;IAAA,EAAA,OAAA,GAAA,UAAA;GAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAb;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAa,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,OAAA;IAAA,UAAA;IAAA,oBAAA;IAAA,YAAA;IAAA,OAAA;IAAA,SAAA;KAAA;KAAA;MAsCH,UAA0C,SAAS;IAAU;GAAA;GAAA,MAAA,EAAA,YAAA;IAAA,uCAAA;IAAA,SAAA;GAAA,EAAA;GAAA,UAAA;GAAA,UCpEpF;GAKA,QAAA,CAAA,6pNAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;ADyBa,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA;EANzB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAY,iBAGL,wBAAwB;GAAK,UAAA;GAAA,QAAA,CAAA,6pNAAA;EAAA,CAAA;;;;;;;;EAK7C,OAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EACA,UAAA,CAAA,EAAA,MAAA,MAAA,CAAA;;GAEA,MAAA;GAAY,MAAA,CAAA,qCAAqC;;EAGjD,oBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAKA,YAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EASA,OAAA,CAAA,EAAA,MAAA,MAAA,CAAA;;GAeA,MAAA;GAAM,MAAA,CAAA,EAAE,YAAY,UAA0C,SAAS,WAAU,CAAE;;;GAGnF,MAAA;GAAY,MAAA,CAAA,OAAO;;;;AE9DtB,MAAM,UAAU;CAAC;CAAe;CAAqB;CAAqB;AAAqB;AAK/F,IAAa,aAAb,MAAa,WAAU;CAAV;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAU,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAV;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAU,SAAA;IAHX;IAAc;IAFT;IAAe;IAAqB;IAAqB;GAAqB;GAAA,SAAA;IAA9E;IAAe;IAAqB;IAAqB;IAGlD;GAAmB;EAAA,CAAA;CAAA;CAE9B;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAU,SAAA,CAHX,YAAY;EAAA,CAAA;CAAA;;AAGX,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EAJtB,MAAA;EAAS,MAAA,CAAA;GACR,SAAS;IAAC;IAAc;IAAqB,GAAG;GAAO;GACvD,SAAS,CAAC,GAAG,SAAS,mBAAmB;EAC1C,CAAA"}
|