@kirbydesign/designsystem 12.0.0-dev-67d5287 → 12.0.0-dev-286cdc0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/fesm2022/kirbydesign-designsystem-accordion.mjs +12 -12
  2. package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
  3. package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
  4. package/fesm2022/kirbydesign-designsystem-avatar.mjs +5 -5
  5. package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
  6. package/fesm2022/kirbydesign-designsystem-badge.mjs +5 -5
  7. package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
  8. package/fesm2022/kirbydesign-designsystem-button.mjs +5 -5
  9. package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
  10. package/fesm2022/kirbydesign-designsystem-calendar.mjs +7 -7
  11. package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
  12. package/fesm2022/kirbydesign-designsystem-card.mjs +24 -24
  13. package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
  14. package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
  15. package/fesm2022/kirbydesign-designsystem-checkbox.mjs +14 -6
  16. package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
  17. package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
  18. package/fesm2022/kirbydesign-designsystem-divider.mjs +5 -5
  19. package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
  20. package/fesm2022/kirbydesign-designsystem-dropdown.mjs +10 -10
  21. package/fesm2022/kirbydesign-designsystem-empty-state.mjs +19 -8
  22. package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
  23. package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
  24. package/fesm2022/kirbydesign-designsystem-flag.mjs +5 -5
  25. package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
  26. package/fesm2022/kirbydesign-designsystem-form-field.mjs +32 -32
  27. package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
  28. package/fesm2022/kirbydesign-designsystem-gesture.mjs +3 -3
  29. package/fesm2022/kirbydesign-designsystem-header.mjs +19 -19
  30. package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
  31. package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
  32. package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
  33. package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
  34. package/fesm2022/kirbydesign-designsystem-item.mjs +12 -12
  35. package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
  36. package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
  37. package/fesm2022/kirbydesign-designsystem-list.mjs +49 -46
  38. package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
  39. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +8 -8
  40. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
  41. package/fesm2022/kirbydesign-designsystem-menu.mjs +5 -5
  42. package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
  43. package/fesm2022/kirbydesign-designsystem-modal.mjs +59 -50
  44. package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
  45. package/fesm2022/kirbydesign-designsystem-page.mjs +69 -48
  46. package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
  47. package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
  48. package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
  49. package/fesm2022/kirbydesign-designsystem-radio.mjs +12 -12
  50. package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
  51. package/fesm2022/kirbydesign-designsystem-range.mjs +5 -5
  52. package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
  53. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +5 -5
  54. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
  55. package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
  56. package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
  57. package/fesm2022/kirbydesign-designsystem-segmented-control.mjs +5 -5
  58. package/fesm2022/kirbydesign-designsystem-segmented-control.mjs.map +1 -1
  59. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +16 -7
  60. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
  61. package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
  62. package/fesm2022/kirbydesign-designsystem-shared.mjs +21 -21
  63. package/fesm2022/kirbydesign-designsystem-slide-button.mjs +3 -3
  64. package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
  65. package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
  66. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +12 -12
  67. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
  68. package/fesm2022/kirbydesign-designsystem-tabs.mjs +15 -15
  69. package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
  70. package/fesm2022/kirbydesign-designsystem-testing-base.mjs +305 -303
  71. package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
  72. package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
  73. package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
  74. package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
  75. package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
  76. package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
  77. package/fesm2022/kirbydesign-designsystem-toggle.mjs +5 -5
  78. package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
  79. package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
  80. package/fesm2022/kirbydesign-designsystem.mjs +10 -10
  81. package/package.json +2 -2
  82. package/types/kirbydesign-designsystem-card.d.ts +2 -2
  83. package/types/kirbydesign-designsystem-card.d.ts.map +1 -1
  84. package/types/kirbydesign-designsystem-checkbox.d.ts +7 -1
  85. package/types/kirbydesign-designsystem-checkbox.d.ts.map +1 -1
  86. package/types/kirbydesign-designsystem-empty-state.d.ts +11 -0
  87. package/types/kirbydesign-designsystem-empty-state.d.ts.map +1 -1
  88. package/types/kirbydesign-designsystem-list.d.ts +5 -0
  89. package/types/kirbydesign-designsystem-list.d.ts.map +1 -1
  90. package/types/kirbydesign-designsystem-modal.d.ts +2 -1
  91. package/types/kirbydesign-designsystem-modal.d.ts.map +1 -1
  92. package/types/kirbydesign-designsystem-page.d.ts +4 -0
  93. package/types/kirbydesign-designsystem-page.d.ts.map +1 -1
  94. package/types/kirbydesign-designsystem-shared-floating.d.ts.map +1 -1
  95. package/types/kirbydesign-designsystem-testing-base.d.ts +5 -0
  96. 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.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.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 ? 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",
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:1px 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:1px solid var(--kirby-color-border-base)}\n"],
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.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 ? 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",
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:1px 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:1px solid var(--kirby-color-border-base)}\n"]
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":"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"}
@@ -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.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.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.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.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.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.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.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.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.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 = "raised";
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.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.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 ?? "raised"
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-main-border-color: var(--kirby-color-border-base-quiet);--kirby-card-border-width: 1px;--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);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, var(--kirby-card-border-width) solid var(--kirby-card-main-border-color));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.outlined{--kirby-card-main-background-color: transparent}:host.outlined:has(kirby-card-header.flagged){border:none}:host.outlined:has(kirby-card-header.flagged) .content-wrapper{border-block-end:var(--kirby-card-border, var(--kirby-card-border-width) solid var(--kirby-card-main-border-color));border-inline-start:var(--kirby-card-border, var(--kirby-card-border-width) solid var(--kirby-card-main-border-color));border-inline-end:var(--kirby-card-border, var(--kirby-card-border-width) solid var(--kirby-card-main-border-color));border-bottom-left-radius:var(--kirby-border-radius-n);border-bottom-right-radius:var(--kirby-border-radius-n)}:host[role=button]{cursor:pointer;outline:none}@media(hover:hover){:host[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-base-hover);--kirby-card-main-color: var(--kirby-color-content-base-hover);--kirby-card-main-border-color: var(--kirby-color-border-base-quiet-hover)}}:host[role=button]:active,:host[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-base-active);--kirby-card-main-color: var(--kirby-color-content-base-active);--kirby-card-main-border-color: var(--kirby-color-border-base-quiet-active)}:host[role=button]:focus-visible{transition:all 80ms linear 0ms;box-shadow:var(--kirby-focus-ring-md-combined-inset);--kirby-card-border: var(--kirby-card-border-width) 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-card-border-width) )}.content-wrapper ::ng-deep>:last-child{--kirby-content-border-bottom-radius: calc( var(--kirby-border-radius-n) - var(--kirby-card-border-width) )}.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)}@media(hover:hover){:host(.success:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-success-hover);--kirby-card-main-color: var(--kirby-color-content-success-hover);--kirby-card-main-border-color: var(--kirby-color-border-success-hover)}}:host(.success:not(.outlined))[role=button]:active,:host(.success:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-success-active);--kirby-card-main-color: var(--kirby-color-content-success-active);--kirby-card-main-border-color: var(--kirby-color-border-success-active)}: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)}@media(hover:hover){:host(.warning:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-warning-hover);--kirby-card-main-color: var(--kirby-color-content-warning-hover);--kirby-card-main-border-color: var(--kirby-color-border-warning-hover)}}:host(.warning:not(.outlined))[role=button]:active,:host(.warning:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-warning-active);--kirby-card-main-color: var(--kirby-color-content-warning-active);--kirby-card-main-border-color: var(--kirby-color-border-warning-active)}: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)}@media(hover:hover){:host(.danger:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-danger-hover);--kirby-card-main-color: var(--kirby-color-content-danger-hover);--kirby-card-main-border-color: var(--kirby-color-border-danger-hover)}}:host(.danger:not(.outlined))[role=button]:active,:host(.danger:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-danger-active);--kirby-card-main-color: var(--kirby-color-content-danger-active);--kirby-card-main-border-color: var(--kirby-color-border-danger-active)}:host(.medium:not(.outlined)){--kirby-card-main-background-color: var(--kirby-color-fill-neutral);--kirby-card-main-color: var(--kirby-color-content-neutral);--kirby-card-main-border-color: var(--kirby-color-border-neutral)}\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-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]{cursor:pointer;outline:none}@media(hover:hover){:host[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-base-hover);--kirby-card-main-color: var(--kirby-color-content-base-hover);--kirby-card-main-border-color: var(--kirby-color-border-base-quiet-hover)}}:host[role=button]:active,:host[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-base-active);--kirby-card-main-color: var(--kirby-color-content-base-active);--kirby-card-main-border-color: var(--kirby-color-border-base-quiet-active)}: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)}@media(hover:hover){:host(.success:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-success-hover);--kirby-card-main-color: var(--kirby-color-content-success-hover);--kirby-card-main-border-color: var(--kirby-color-border-success-hover)}}:host(.success:not(.outlined))[role=button]:active,:host(.success:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-success-active);--kirby-card-main-color: var(--kirby-color-content-success-active);--kirby-card-main-border-color: var(--kirby-color-border-success-active)}: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)}@media(hover:hover){:host(.warning:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-warning-hover);--kirby-card-main-color: var(--kirby-color-content-warning-hover);--kirby-card-main-border-color: var(--kirby-color-border-warning-hover)}}:host(.warning:not(.outlined))[role=button]:active,:host(.warning:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-warning-active);--kirby-card-main-color: var(--kirby-color-content-warning-active);--kirby-card-main-border-color: var(--kirby-color-border-warning-active)}: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)}@media(hover:hover){:host(.danger:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-danger-hover);--kirby-card-main-color: var(--kirby-color-content-danger-hover);--kirby-card-main-border-color: var(--kirby-color-border-danger-hover)}}:host(.danger:not(.outlined))[role=button]:active,:host(.danger:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-danger-active);--kirby-card-main-color: var(--kirby-color-content-danger-active);--kirby-card-main-border-color: var(--kirby-color-border-danger-active)}\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.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-main-border-color: var(--kirby-color-border-base-quiet);--kirby-card-border-width: 1px;--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);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, var(--kirby-card-border-width) solid var(--kirby-card-main-border-color));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.outlined{--kirby-card-main-background-color: transparent}:host.outlined:has(kirby-card-header.flagged){border:none}:host.outlined:has(kirby-card-header.flagged) .content-wrapper{border-block-end:var(--kirby-card-border, var(--kirby-card-border-width) solid var(--kirby-card-main-border-color));border-inline-start:var(--kirby-card-border, var(--kirby-card-border-width) solid var(--kirby-card-main-border-color));border-inline-end:var(--kirby-card-border, var(--kirby-card-border-width) solid var(--kirby-card-main-border-color));border-bottom-left-radius:var(--kirby-border-radius-n);border-bottom-right-radius:var(--kirby-border-radius-n)}:host[role=button]{cursor:pointer;outline:none}@media(hover:hover){:host[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-base-hover);--kirby-card-main-color: var(--kirby-color-content-base-hover);--kirby-card-main-border-color: var(--kirby-color-border-base-quiet-hover)}}:host[role=button]:active,:host[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-base-active);--kirby-card-main-color: var(--kirby-color-content-base-active);--kirby-card-main-border-color: var(--kirby-color-border-base-quiet-active)}:host[role=button]:focus-visible{transition:all 80ms linear 0ms;box-shadow:var(--kirby-focus-ring-md-combined-inset);--kirby-card-border: var(--kirby-card-border-width) 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-card-border-width) )}.content-wrapper ::ng-deep>:last-child{--kirby-content-border-bottom-radius: calc( var(--kirby-border-radius-n) - var(--kirby-card-border-width) )}.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)}@media(hover:hover){:host(.success:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-success-hover);--kirby-card-main-color: var(--kirby-color-content-success-hover);--kirby-card-main-border-color: var(--kirby-color-border-success-hover)}}:host(.success:not(.outlined))[role=button]:active,:host(.success:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-success-active);--kirby-card-main-color: var(--kirby-color-content-success-active);--kirby-card-main-border-color: var(--kirby-color-border-success-active)}: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)}@media(hover:hover){:host(.warning:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-warning-hover);--kirby-card-main-color: var(--kirby-color-content-warning-hover);--kirby-card-main-border-color: var(--kirby-color-border-warning-hover)}}:host(.warning:not(.outlined))[role=button]:active,:host(.warning:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-warning-active);--kirby-card-main-color: var(--kirby-color-content-warning-active);--kirby-card-main-border-color: var(--kirby-color-border-warning-active)}: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)}@media(hover:hover){:host(.danger:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-danger-hover);--kirby-card-main-color: var(--kirby-color-content-danger-hover);--kirby-card-main-border-color: var(--kirby-color-border-danger-hover)}}:host(.danger:not(.outlined))[role=button]:active,:host(.danger:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-danger-active);--kirby-card-main-color: var(--kirby-color-content-danger-active);--kirby-card-main-border-color: var(--kirby-color-border-danger-active)}:host(.medium:not(.outlined)){--kirby-card-main-background-color: var(--kirby-color-fill-neutral);--kirby-card-main-color: var(--kirby-color-content-neutral);--kirby-card-main-border-color: var(--kirby-color-border-neutral)}\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-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]{cursor:pointer;outline:none}@media(hover:hover){:host[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-base-hover);--kirby-card-main-color: var(--kirby-color-content-base-hover);--kirby-card-main-border-color: var(--kirby-color-border-base-quiet-hover)}}:host[role=button]:active,:host[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-base-active);--kirby-card-main-color: var(--kirby-color-content-base-active);--kirby-card-main-border-color: var(--kirby-color-border-base-quiet-active)}: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)}@media(hover:hover){:host(.success:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-success-hover);--kirby-card-main-color: var(--kirby-color-content-success-hover);--kirby-card-main-border-color: var(--kirby-color-border-success-hover)}}:host(.success:not(.outlined))[role=button]:active,:host(.success:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-success-active);--kirby-card-main-color: var(--kirby-color-content-success-active);--kirby-card-main-border-color: var(--kirby-color-border-success-active)}: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)}@media(hover:hover){:host(.warning:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-warning-hover);--kirby-card-main-color: var(--kirby-color-content-warning-hover);--kirby-card-main-border-color: var(--kirby-color-border-warning-hover)}}:host(.warning:not(.outlined))[role=button]:active,:host(.warning:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-warning-active);--kirby-card-main-color: var(--kirby-color-content-warning-active);--kirby-card-main-border-color: var(--kirby-color-border-warning-active)}: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)}@media(hover:hover){:host(.danger:not(.outlined))[role=button]:hover{--kirby-card-main-background-color: var(--kirby-color-fill-danger-hover);--kirby-card-main-color: var(--kirby-color-content-danger-hover);--kirby-card-main-border-color: var(--kirby-color-border-danger-hover)}}:host(.danger:not(.outlined))[role=button]:active,:host(.danger:not(.outlined))[role=button].interaction-state-active{--kirby-card-main-background-color: var(--kirby-color-fill-danger-active);--kirby-card-main-color: var(--kirby-color-content-danger-active);--kirby-card-main-border-color: var(--kirby-color-border-danger-active)}\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 ?? "raised" }]
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.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.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.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.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":"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"}