@skyux/layout 14.0.0-alpha.8 → 14.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import { ObserversModule } from '@angular/cdk/observers';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i0 from '@angular/core';
6
- import { Injectable, EventEmitter, Output, Input, HostBinding, SkipSelf, ViewEncapsulation, Component, ElementRef, HostListener, ViewChild, ContentChildren, Optional, inject, NgModule, ChangeDetectionStrategy, Directive, InjectionToken, numberAttribute, booleanAttribute, ContentChild, TemplateRef, contentChildren, effect, Inject, input, signal, computed, viewChild, ChangeDetectorRef, afterRenderEffect } from '@angular/core';
6
+ import { Injectable, EventEmitter, Output, Input, HostBinding, SkipSelf, ViewEncapsulation, Component, ElementRef, HostListener, ViewChild, ContentChildren, Optional, inject, NgModule, ChangeDetectionStrategy, Directive, InjectionToken, numberAttribute, booleanAttribute, ContentChild, signal, TemplateRef, contentChildren, effect, Inject, input, computed, viewChild, ChangeDetectorRef, afterRenderEffect } from '@angular/core';
7
7
  import * as i2 from '@angular/router';
8
8
  import { RouterModule } from '@angular/router';
9
9
  import * as i3 from '@skyux/router';
@@ -13,11 +13,11 @@ import { SkyThemeComponentClassDirective, SkyThemeModule } from '@skyux/theme';
13
13
  import { Subject, BehaviorSubject, forkJoin } from 'rxjs';
14
14
  import { takeUntil, take } from 'rxjs/operators';
15
15
  import * as i1$1 from '@skyux/core';
16
- import { SkyMediaQueryService, SkyContentInfoProvider, SkyLogService, SkyIdService, SkyTrimModule, SkyCoreAdapterService, SkyIdModule } from '@skyux/core';
16
+ import { SkyMediaQueryService, SkyContentInfoProvider, SkyLogService, SkyIdService, SkyTrimModule, SkyCoreAdapterService, _SkyAnimationEndHandlerDirective, SkyIdModule, _SkyTransitionEndHandlerDirective } from '@skyux/core';
17
17
  import { toSignal } from '@angular/core/rxjs-interop';
18
18
  import * as i1$2 from '@skyux/icon';
19
19
  import { SkyIconModule } from '@skyux/icon';
20
- import * as i3$1 from '@skyux/i18n';
20
+ import * as i5$1 from '@skyux/i18n';
21
21
  import { SkyLibResourcesService, SkyI18nModule } from '@skyux/i18n';
22
22
  import * as i1$3 from '@skyux/help-inline';
23
23
  import { SkyHelpInlineModule } from '@skyux/help-inline';
@@ -25,9 +25,8 @@ import * as i3$2 from '@angular/forms';
25
25
  import { FormsModule } from '@angular/forms';
26
26
  import * as i4 from '@skyux/forms';
27
27
  import { SkyCheckboxModule } from '@skyux/forms';
28
- import * as i2$2 from '@skyux/indicators';
28
+ import * as i3$1 from '@skyux/indicators';
29
29
  import { SkyWaitModule } from '@skyux/indicators';
30
- import { trigger, transition, style, query, group, animate, state } from '@angular/animations';
31
30
  import * as i1$4 from '@skyux/modals';
32
31
  import { SkyModalModule } from '@skyux/modals';
33
32
 
@@ -407,7 +406,7 @@ class SkyBackToTopComponent {
407
406
  this.#_scrollToTopClick.complete();
408
407
  }
409
408
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyBackToTopComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
410
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyBackToTopComponent, isStandalone: false, selector: "sky-back-to-top", ngImport: i0, template: "<div\n class=\"sky-back-to-top\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-3': 'modern'\n }\"\n>\n <button\n class=\"sky-btn sky-btn-link-inline\"\n type=\"button\"\n (click)=\"onScrollToTopClick()\"\n >\n {{ 'skyux_back_to_top' | skyLibResources }}\n </button>\n</div>\n", styles: [".sky-back-to-top:not(.sky-theme-modern *){--sky-override-back-to-top-padding: var(--sky-margin-stacked-sm) var(--sky-margin-inline-lg);--sky-override-back-to-top-background-color: #ffffff}.sky-back-to-top{display:flex;align-items:center;width:100%;background-color:var(--sky-override-back-to-top-background-color, var(--sky-color-background-container-base));padding:var(--sky-override-back-to-top-padding, var(--sky-comp-back_to_top-space-inset-top) var(--sky-comp-back_to_top-space-inset-right) var(--sky-comp-back_to_top-space-inset-bottom) var(--sky-comp-back_to_top-space-inset-left))}\n"], dependencies: [{ kind: "directive", type: i2$1.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "pipe", type: i3$1.SkyLibResourcesPipe, name: "skyLibResources" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
409
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyBackToTopComponent, isStandalone: false, selector: "sky-back-to-top", ngImport: i0, template: "<div\n class=\"sky-back-to-top\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-3': 'modern'\n }\"\n>\n <button\n class=\"sky-btn sky-btn-link-inline\"\n type=\"button\"\n (click)=\"onScrollToTopClick()\"\n >\n {{ 'skyux_back_to_top' | skyLibResources }}\n </button>\n</div>\n", styles: [".sky-back-to-top:not(.sky-theme-modern *){--sky-override-back-to-top-padding: var(--sky-margin-stacked-sm) var(--sky-margin-inline-lg);--sky-override-back-to-top-background-color: #ffffff}.sky-back-to-top{display:flex;align-items:center;width:100%;background-color:var(--sky-override-back-to-top-background-color, var(--sky-color-background-container-base));padding:var(--sky-override-back-to-top-padding, var(--sky-comp-back_to_top-space-inset-top) var(--sky-comp-back_to_top-space-inset-right) var(--sky-comp-back_to_top-space-inset-bottom) var(--sky-comp-back_to_top-space-inset-left))}\n"], dependencies: [{ kind: "directive", type: i2$1.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "pipe", type: i5$1.SkyLibResourcesPipe, name: "skyLibResources" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
411
410
  }
412
411
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyBackToTopComponent, decorators: [{
413
412
  type: Component,
@@ -968,6 +967,7 @@ class SkyInlineDeleteComponent {
968
967
  #adapterService;
969
968
  #changeDetector;
970
969
  #elRef;
970
+ #initialized;
971
971
  constructor(adapterService, changeDetector, elRef) {
972
972
  /**
973
973
  * Whether the deletion is pending.
@@ -982,24 +982,24 @@ class SkyInlineDeleteComponent {
982
982
  * Fires when users click the delete button.
983
983
  */
984
984
  this.deleteTriggered = new EventEmitter();
985
- this.animationState = 'shown';
986
985
  this.assistiveTextId = `sky-inline-delete-assistive-text-${++nextId$2}`;
987
986
  this.type = SkyInlineDeleteType.Standard;
987
+ this.enterAnimationTrigger = signal(true, ...(ngDevMode ? [{ debugName: "enterAnimationTrigger" }] : []));
988
+ this.#initialized = false;
988
989
  this.#adapterService = adapterService;
989
990
  this.#changeDetector = changeDetector;
990
991
  this.#elRef = elRef;
991
992
  }
992
- /**
993
- * Initialization lifecycle hook
994
- * @internal
995
- */
996
- ngOnInit() {
997
- this.animationState = 'shown';
993
+ onAnimationEnd() {
994
+ if (!this.#initialized) {
995
+ this.#initialized = true;
996
+ this.#adapterService.setEl(this.#elRef.nativeElement);
997
+ // Defer focus so it runs after the animationend event handler completes.
998
+ setTimeout(() => {
999
+ this.deleteButton?.nativeElement.focus();
1000
+ });
1001
+ }
998
1002
  }
999
- /**
1000
- * Destruction lifecycle hook
1001
- * @internal
1002
- */
1003
1003
  ngOnDestroy() {
1004
1004
  this.#adapterService.clearListeners();
1005
1005
  this.cancelTriggered.complete();
@@ -1009,7 +1009,7 @@ class SkyInlineDeleteComponent {
1009
1009
  * @internal
1010
1010
  */
1011
1011
  onCancelClick() {
1012
- this.animationState = 'hidden';
1012
+ this.cancelTriggered.emit();
1013
1013
  }
1014
1014
  /**
1015
1015
  * @internal
@@ -1026,81 +1026,12 @@ class SkyInlineDeleteComponent {
1026
1026
  this.type = type;
1027
1027
  this.#changeDetector.detectChanges();
1028
1028
  }
1029
- /**
1030
- * Handles actions that should be taken after the inline delete animates
1031
- * @param event The animation event
1032
- * @internal
1033
- */
1034
- onAnimationDone(event) {
1035
- if (event.toState === 'hidden') {
1036
- this.cancelTriggered.emit();
1037
- }
1038
- else {
1039
- this.deleteButton?.nativeElement.focus();
1040
- /* istanbul ignore else */
1041
- if (this.#elRef) {
1042
- this.#adapterService.setEl(this.#elRef.nativeElement);
1043
- }
1044
- }
1045
- }
1046
1029
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyInlineDeleteComponent, deps: [{ token: SkyInlineDeleteAdapterService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
1047
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyInlineDeleteComponent, isStandalone: false, selector: "sky-inline-delete", inputs: { pending: "pending" }, outputs: { cancelTriggered: "cancelTriggered", deleteTriggered: "deleteTriggered" }, providers: [SkyCoreAdapterService, SkyInlineDeleteAdapterService], viewQueries: [{ propertyName: "deleteButton", first: true, predicate: ["delete"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"sky-inline-delete sky-inline-delete-{{ type }}\"\n role=\"alertdialog\"\n [@inlineDeleteAnimation]=\"animationState\"\n [attr.aria-describedby]=\"assistiveTextId\"\n [attr.aria-label]=\"'skyux_inline_delete_confirm_deletion' | skyLibResources\"\n (@inlineDeleteAnimation.done)=\"onAnimationDone($event)\"\n>\n <span\n class=\"sky-inline-delete-assistive-text sky-screen-reader-only\"\n [id]=\"assistiveTextId\"\n >\n {{ 'skyux_inline_delete_assistive_text' | skyLibResources }}\n </span>\n <sky-wait class=\"sky-inline-delete-wait\" [isWaiting]=\"pending\" />\n <div class=\"sky-inline-delete-content\">\n <div class=\"sky-inline-delete-content-animation-container\">\n <button\n #delete\n class=\"sky-btn sky-btn-danger sky-inline-delete-button\"\n type=\"button\"\n (click)=\"onDeleteClick()\"\n >\n {{ 'skyux_inline_delete_delete' | skyLibResources }}\n </button>\n <button\n class=\"sky-btn sky-btn-default\"\n type=\"button\"\n (click)=\"onCancelClick()\"\n >\n {{ 'skyux_inline_delete_cancel' | skyLibResources }}\n </button>\n </div>\n </div>\n</div>\n", styles: [".sky-inline-delete:not(.sky-theme-modern *){--sky-override-inline-delete-background-color: rgba(0, 0, 0, .5);--sky-override-inline-delete-border: 2px solid #ef4044;--sky-override-inline-delete-button-margin-right: 10px;--sky-override-inline-delete-content-left: 20px;--sky-override-inline-delete-content-padding: 0}.sky-inline-delete{position:absolute!important;top:0;left:0;width:100%;height:100%;background-color:var(--sky-override-inline-delete-background-color, var(--sky-color-background-scrim));z-index:999;border:var(--sky-override-inline-delete-border, var(--sky-border-width-selected-m) solid var(--sky-color-border-danger))}.sky-inline-delete-button{margin-right:var(--sky-override-inline-delete-button-margin-right, var(--sky-space-gap-action_group-m))}.sky-inline-delete-card .sky-inline-delete-content{position:absolute;bottom:10px;text-align:center;width:100%}.sky-inline-delete-standard .sky-inline-delete-content{position:absolute;top:50%;transform:translateY(-50%);left:var(--sky-override-inline-delete-content-left, 0);padding:var(--sky-override-inline-delete-content-padding, var(--sky-space-inset-horizontal-top-l) var(--sky-space-inset-horizontal-right-l) var(--sky-space-inset-horizontal-bottom-l) var(--sky-space-inset-horizontal-left-l))}.sky-inline-delete-wait{height:100%}\n"], dependencies: [{ kind: "component", type: i2$2.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking", "screenReaderCompletedText"] }, { kind: "pipe", type: i3$1.SkyLibResourcesPipe, name: "skyLibResources" }], animations: [
1048
- trigger('inlineDeleteAnimation', [
1049
- transition('* => shown', [
1050
- style({
1051
- opacity: 0,
1052
- }),
1053
- query('.sky-inline-delete-content-animation-container', style({ transform: 'scale(0.0)' })),
1054
- group([
1055
- animate('300ms ease-in-out', style({ opacity: 1 })),
1056
- query('.sky-inline-delete-content-animation-container', animate('300ms ease-in-out', style({
1057
- transform: 'scale(1)',
1058
- }))),
1059
- ]),
1060
- ]),
1061
- transition(`shown <=> *`, [
1062
- query('.sky-inline-delete-content-animation-container', style({ transform: 'scale(1)' })),
1063
- group([
1064
- animate('300ms ease-in-out', style({
1065
- opacity: 0,
1066
- })),
1067
- query('.sky-inline-delete-content-animation-container', animate('300ms ease-in-out', style({
1068
- transform: 'scale(0.0)',
1069
- }))),
1070
- ]),
1071
- ]),
1072
- ]),
1073
- ] }); }
1030
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyInlineDeleteComponent, isStandalone: false, selector: "sky-inline-delete", inputs: { pending: "pending" }, outputs: { cancelTriggered: "cancelTriggered", deleteTriggered: "deleteTriggered" }, providers: [SkyCoreAdapterService, SkyInlineDeleteAdapterService], viewQueries: [{ propertyName: "deleteButton", first: true, predicate: ["delete"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"sky-inline-delete sky-inline-delete-{{ type }}\"\n role=\"alertdialog\"\n skyAnimationEndHandler\n emitOnAnimateEnter\n animate.enter=\"sky-inline-delete-entering\"\n animate.leave=\"sky-inline-delete-leaving\"\n [animationTrigger]=\"enterAnimationTrigger()\"\n [attr.aria-describedby]=\"assistiveTextId\"\n [attr.aria-label]=\"'skyux_inline_delete_confirm_deletion' | skyLibResources\"\n (animationEnd)=\"onAnimationEnd()\"\n>\n <span\n class=\"sky-inline-delete-assistive-text sky-screen-reader-only\"\n [id]=\"assistiveTextId\"\n >\n {{ 'skyux_inline_delete_assistive_text' | skyLibResources }}\n </span>\n <sky-wait class=\"sky-inline-delete-wait\" [isWaiting]=\"pending\" />\n <div class=\"sky-inline-delete-content\">\n <div class=\"sky-inline-delete-content-animation-container\">\n <button\n #delete\n class=\"sky-btn sky-btn-danger sky-inline-delete-button\"\n type=\"button\"\n (click)=\"onDeleteClick()\"\n >\n {{ 'skyux_inline_delete_delete' | skyLibResources }}\n </button>\n <button\n class=\"sky-btn sky-btn-default\"\n type=\"button\"\n (click)=\"onCancelClick()\"\n >\n {{ 'skyux_inline_delete_cancel' | skyLibResources }}\n </button>\n </div>\n </div>\n</div>\n", styles: [".sky-inline-delete:not(.sky-theme-modern *){--sky-override-inline-delete-background-color: rgba(0, 0, 0, .5);--sky-override-inline-delete-border: 2px solid #ef4044;--sky-override-inline-delete-button-margin-right: 10px;--sky-override-inline-delete-content-left: 20px;--sky-override-inline-delete-content-padding: 0}.sky-inline-delete{position:absolute!important;top:0;left:0;width:100%;height:100%;background-color:var(--sky-override-inline-delete-background-color, var(--sky-color-background-scrim));z-index:999;border:var(--sky-override-inline-delete-border, var(--sky-border-width-selected-m) solid var(--sky-color-border-danger))}.sky-inline-delete-button{margin-right:var(--sky-override-inline-delete-button-margin-right, var(--sky-space-gap-action_group-m))}.sky-inline-delete-card .sky-inline-delete-content{position:absolute;bottom:10px;text-align:center;width:100%}.sky-inline-delete-standard .sky-inline-delete-content{position:absolute;top:50%;transform:translateY(-50%);left:var(--sky-override-inline-delete-content-left, 0);padding:var(--sky-override-inline-delete-content-padding, var(--sky-space-inset-horizontal-top-l) var(--sky-space-inset-horizontal-right-l) var(--sky-space-inset-horizontal-bottom-l) var(--sky-space-inset-horizontal-left-l))}.sky-inline-delete-wait{height:100%}@keyframes sky-inline-delete-enter-overlay{0%{opacity:0}to{opacity:1}}@keyframes sky-inline-delete-enter-content{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes sky-inline-delete-leave-overlay{0%{opacity:1}to{opacity:0}}@keyframes sky-inline-delete-leave-content{0%{transform:scale(1)}to{transform:scale(0)}}.sky-inline-delete-entering{animation:sky-inline-delete-enter-overlay var(--sky-global-duration-medium) ease-in-out}.sky-inline-delete-entering .sky-inline-delete-content-animation-container{animation:sky-inline-delete-enter-content var(--sky-global-duration-medium) ease-in-out}.sky-inline-delete-leaving{animation:sky-inline-delete-leave-overlay var(--sky-global-duration-medium) ease-in-out forwards}.sky-inline-delete-leaving .sky-inline-delete-content-animation-container{animation:sky-inline-delete-leave-content var(--sky-global-duration-medium) ease-in-out forwards}\n"], dependencies: [{ kind: "directive", type: i1$1._SkyAnimationEndHandlerDirective, selector: "[skyAnimationEndHandler]", inputs: ["emitOnAnimateEnter", "animationTrigger"], outputs: ["animationEnd"] }, { kind: "component", type: i3$1.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking", "screenReaderCompletedText"] }, { kind: "pipe", type: i5$1.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
1074
1031
  }
1075
1032
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyInlineDeleteComponent, decorators: [{
1076
1033
  type: Component,
1077
- args: [{ selector: 'sky-inline-delete', animations: [
1078
- trigger('inlineDeleteAnimation', [
1079
- transition('* => shown', [
1080
- style({
1081
- opacity: 0,
1082
- }),
1083
- query('.sky-inline-delete-content-animation-container', style({ transform: 'scale(0.0)' })),
1084
- group([
1085
- animate('300ms ease-in-out', style({ opacity: 1 })),
1086
- query('.sky-inline-delete-content-animation-container', animate('300ms ease-in-out', style({
1087
- transform: 'scale(1)',
1088
- }))),
1089
- ]),
1090
- ]),
1091
- transition(`shown <=> *`, [
1092
- query('.sky-inline-delete-content-animation-container', style({ transform: 'scale(1)' })),
1093
- group([
1094
- animate('300ms ease-in-out', style({
1095
- opacity: 0,
1096
- })),
1097
- query('.sky-inline-delete-content-animation-container', animate('300ms ease-in-out', style({
1098
- transform: 'scale(0.0)',
1099
- }))),
1100
- ]),
1101
- ]),
1102
- ]),
1103
- ], providers: [SkyCoreAdapterService, SkyInlineDeleteAdapterService], standalone: false, template: "<div\n class=\"sky-inline-delete sky-inline-delete-{{ type }}\"\n role=\"alertdialog\"\n [@inlineDeleteAnimation]=\"animationState\"\n [attr.aria-describedby]=\"assistiveTextId\"\n [attr.aria-label]=\"'skyux_inline_delete_confirm_deletion' | skyLibResources\"\n (@inlineDeleteAnimation.done)=\"onAnimationDone($event)\"\n>\n <span\n class=\"sky-inline-delete-assistive-text sky-screen-reader-only\"\n [id]=\"assistiveTextId\"\n >\n {{ 'skyux_inline_delete_assistive_text' | skyLibResources }}\n </span>\n <sky-wait class=\"sky-inline-delete-wait\" [isWaiting]=\"pending\" />\n <div class=\"sky-inline-delete-content\">\n <div class=\"sky-inline-delete-content-animation-container\">\n <button\n #delete\n class=\"sky-btn sky-btn-danger sky-inline-delete-button\"\n type=\"button\"\n (click)=\"onDeleteClick()\"\n >\n {{ 'skyux_inline_delete_delete' | skyLibResources }}\n </button>\n <button\n class=\"sky-btn sky-btn-default\"\n type=\"button\"\n (click)=\"onCancelClick()\"\n >\n {{ 'skyux_inline_delete_cancel' | skyLibResources }}\n </button>\n </div>\n </div>\n</div>\n", styles: [".sky-inline-delete:not(.sky-theme-modern *){--sky-override-inline-delete-background-color: rgba(0, 0, 0, .5);--sky-override-inline-delete-border: 2px solid #ef4044;--sky-override-inline-delete-button-margin-right: 10px;--sky-override-inline-delete-content-left: 20px;--sky-override-inline-delete-content-padding: 0}.sky-inline-delete{position:absolute!important;top:0;left:0;width:100%;height:100%;background-color:var(--sky-override-inline-delete-background-color, var(--sky-color-background-scrim));z-index:999;border:var(--sky-override-inline-delete-border, var(--sky-border-width-selected-m) solid var(--sky-color-border-danger))}.sky-inline-delete-button{margin-right:var(--sky-override-inline-delete-button-margin-right, var(--sky-space-gap-action_group-m))}.sky-inline-delete-card .sky-inline-delete-content{position:absolute;bottom:10px;text-align:center;width:100%}.sky-inline-delete-standard .sky-inline-delete-content{position:absolute;top:50%;transform:translateY(-50%);left:var(--sky-override-inline-delete-content-left, 0);padding:var(--sky-override-inline-delete-content-padding, var(--sky-space-inset-horizontal-top-l) var(--sky-space-inset-horizontal-right-l) var(--sky-space-inset-horizontal-bottom-l) var(--sky-space-inset-horizontal-left-l))}.sky-inline-delete-wait{height:100%}\n"] }]
1034
+ args: [{ selector: 'sky-inline-delete', providers: [SkyCoreAdapterService, SkyInlineDeleteAdapterService], standalone: false, template: "<div\n class=\"sky-inline-delete sky-inline-delete-{{ type }}\"\n role=\"alertdialog\"\n skyAnimationEndHandler\n emitOnAnimateEnter\n animate.enter=\"sky-inline-delete-entering\"\n animate.leave=\"sky-inline-delete-leaving\"\n [animationTrigger]=\"enterAnimationTrigger()\"\n [attr.aria-describedby]=\"assistiveTextId\"\n [attr.aria-label]=\"'skyux_inline_delete_confirm_deletion' | skyLibResources\"\n (animationEnd)=\"onAnimationEnd()\"\n>\n <span\n class=\"sky-inline-delete-assistive-text sky-screen-reader-only\"\n [id]=\"assistiveTextId\"\n >\n {{ 'skyux_inline_delete_assistive_text' | skyLibResources }}\n </span>\n <sky-wait class=\"sky-inline-delete-wait\" [isWaiting]=\"pending\" />\n <div class=\"sky-inline-delete-content\">\n <div class=\"sky-inline-delete-content-animation-container\">\n <button\n #delete\n class=\"sky-btn sky-btn-danger sky-inline-delete-button\"\n type=\"button\"\n (click)=\"onDeleteClick()\"\n >\n {{ 'skyux_inline_delete_delete' | skyLibResources }}\n </button>\n <button\n class=\"sky-btn sky-btn-default\"\n type=\"button\"\n (click)=\"onCancelClick()\"\n >\n {{ 'skyux_inline_delete_cancel' | skyLibResources }}\n </button>\n </div>\n </div>\n</div>\n", styles: [".sky-inline-delete:not(.sky-theme-modern *){--sky-override-inline-delete-background-color: rgba(0, 0, 0, .5);--sky-override-inline-delete-border: 2px solid #ef4044;--sky-override-inline-delete-button-margin-right: 10px;--sky-override-inline-delete-content-left: 20px;--sky-override-inline-delete-content-padding: 0}.sky-inline-delete{position:absolute!important;top:0;left:0;width:100%;height:100%;background-color:var(--sky-override-inline-delete-background-color, var(--sky-color-background-scrim));z-index:999;border:var(--sky-override-inline-delete-border, var(--sky-border-width-selected-m) solid var(--sky-color-border-danger))}.sky-inline-delete-button{margin-right:var(--sky-override-inline-delete-button-margin-right, var(--sky-space-gap-action_group-m))}.sky-inline-delete-card .sky-inline-delete-content{position:absolute;bottom:10px;text-align:center;width:100%}.sky-inline-delete-standard .sky-inline-delete-content{position:absolute;top:50%;transform:translateY(-50%);left:var(--sky-override-inline-delete-content-left, 0);padding:var(--sky-override-inline-delete-content-padding, var(--sky-space-inset-horizontal-top-l) var(--sky-space-inset-horizontal-right-l) var(--sky-space-inset-horizontal-bottom-l) var(--sky-space-inset-horizontal-left-l))}.sky-inline-delete-wait{height:100%}@keyframes sky-inline-delete-enter-overlay{0%{opacity:0}to{opacity:1}}@keyframes sky-inline-delete-enter-content{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes sky-inline-delete-leave-overlay{0%{opacity:1}to{opacity:0}}@keyframes sky-inline-delete-leave-content{0%{transform:scale(1)}to{transform:scale(0)}}.sky-inline-delete-entering{animation:sky-inline-delete-enter-overlay var(--sky-global-duration-medium) ease-in-out}.sky-inline-delete-entering .sky-inline-delete-content-animation-container{animation:sky-inline-delete-enter-content var(--sky-global-duration-medium) ease-in-out}.sky-inline-delete-leaving{animation:sky-inline-delete-leave-overlay var(--sky-global-duration-medium) ease-in-out forwards}.sky-inline-delete-leaving .sky-inline-delete-content-animation-container{animation:sky-inline-delete-leave-content var(--sky-global-duration-medium) ease-in-out forwards}\n"] }]
1104
1035
  }], ctorParameters: () => [{ type: SkyInlineDeleteAdapterService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { pending: [{
1105
1036
  type: Input
1106
1037
  }], cancelTriggered: [{
@@ -1117,14 +1048,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
1117
1048
 
1118
1049
  class SkyInlineDeleteModule {
1119
1050
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyInlineDeleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1120
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: SkyInlineDeleteModule, declarations: [SkyInlineDeleteComponent], imports: [SkyLayoutResourcesModule, SkyWaitModule], exports: [SkyInlineDeleteComponent] }); }
1121
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyInlineDeleteModule, imports: [SkyLayoutResourcesModule, SkyWaitModule] }); }
1051
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: SkyInlineDeleteModule, declarations: [SkyInlineDeleteComponent], imports: [_SkyAnimationEndHandlerDirective,
1052
+ SkyLayoutResourcesModule,
1053
+ SkyWaitModule], exports: [SkyInlineDeleteComponent] }); }
1054
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyInlineDeleteModule, imports: [SkyLayoutResourcesModule,
1055
+ SkyWaitModule] }); }
1122
1056
  }
1123
1057
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyInlineDeleteModule, decorators: [{
1124
1058
  type: NgModule,
1125
1059
  args: [{
1126
1060
  declarations: [SkyInlineDeleteComponent],
1127
- imports: [SkyLayoutResourcesModule, SkyWaitModule],
1061
+ imports: [
1062
+ _SkyAnimationEndHandlerDirective,
1063
+ SkyLayoutResourcesModule,
1064
+ SkyWaitModule,
1065
+ ],
1128
1066
  exports: [SkyInlineDeleteComponent],
1129
1067
  }]
1130
1068
  }] });
@@ -1244,11 +1182,11 @@ class SkyCardComponent {
1244
1182
  }
1245
1183
  }
1246
1184
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyCardComponent, deps: [{ token: i1$1.SkyLogService }], target: i0.ɵɵFactoryTarget.Component }); }
1247
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyCardComponent, isStandalone: false, selector: "sky-card", inputs: { size: "size", selectable: "selectable", selected: "selected" }, outputs: { selectedChange: "selectedChange" }, queries: [{ propertyName: "inlineDeleteComponent", predicate: SkyInlineDeleteComponent }, { propertyName: "titleComponent", predicate: SkyCardTitleComponent }], ngImport: i0, template: "<section\n class=\"sky-card sky-shadow\"\n [ngClass]=\"\n {\n 'sky-card-small': size === 'small',\n 'sky-card-selectable': selectable,\n 'sky-card-selected': selectable &amp;&amp; selected\n }\"\n>\n <ng-content select=\"sky-inline-delete\" />\n <header>\n @if (selectable || showTitle) {\n <div class=\"sky-card-header\" (click)=\"contentClick()\">\n <div class=\"sky-card-heading-middle\">\n @if (showTitle) {\n <h1 class=\"sky-card-title sky-section-heading sky-font-heading-2\">\n <ng-content select=\"sky-card-title\" />\n </h1>\n }\n </div>\n @if (selectable) {\n <div class=\"sky-card-check\">\n <sky-checkbox\n [label]=\"'skyux_card_checkbox_label' | skyLibResources\"\n [ngModel]=\"selected\"\n (click)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onCheckboxChange($event)\"\n />\n </div>\n }\n </div>\n }\n </header>\n <div\n class=\"sky-card-content sky-padding-even-default\"\n (click)=\"contentClick()\"\n >\n <ng-content select=\"sky-card-content\" />\n </div>\n <div\n #actionsEl\n class=\"sky-card-actions\"\n [hidden]=\"actionsEl.children.length === 0\"\n >\n <ng-content select=\"sky-card-actions\" />\n </div>\n</section>\n", styles: [".sky-card:not(.sky-theme-modern *){--sky-override-card-background-color-selected: #f1eef6;--sky-override-card-background-color: #fff;--sky-override-card-border-radius: 0;--sky-override-card-border: 1px solid #cdcfd2;--sky-override-card-box-shadow: 0 0 5px 0 rgba(0, 0, 0, .3);--sky-override-card-checkbox-margin-right: 5px;--sky-override-card-content-padding: 10px;--sky-override-card-header-checkbox-padding-right: 10px;--sky-override-card-header-font-size: 26px;--sky-override-card-header-font-weight: 300;--sky-override-card-header-line-height: 1.428571429;--sky-override-card-header-padding: 10px 0 0 0;--sky-override-card-header-text-padding: 0 10px;--sky-override-card-large-height: 350px;--sky-override-card-large-width: 350px;--sky-override-card-margin: 0 10px 10px 0;--sky-override-card-small-height: 250px;--sky-override-card-small-width: 225px}.sky-card{--sky-comp-override-switch-label-margin-right: var( --sky-override-card-checkbox-margin-right, 0 );background-color:var(--sky-override-card-background-color, var(--sky-color-background-container-base));border:var(--sky-override-card-border, none);border-radius:var(--sky-override-card-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-card-box-shadow, inset 0 0 0 var(--sky-border-width-container-base) var(--sky-color-border-container-base), var(--sky-elevation-raised-100));display:inline-flex;flex-direction:column;height:var(--sky-override-card-large-height, 360px);margin:var(--sky-override-card-margin, var(--sky-comp-card-space-offset-top) var(--sky-comp-card-space-offset-right) var(--sky-comp-card-space-offset-bottom) var(--sky-comp-card-space-offset-left));transition:background-color .15s;vertical-align:top;width:var(--sky-override-card-large-width, 360px);position:relative}.sky-card-small{height:var(--sky-override-card-small-height, 256px);width:var(--sky-override-card-small-width, 240px)}.sky-card-small .sky-card-header{padding:var(--sky-override-card-header-padding, var(--sky-comp-card-small-header-space-inset-top) var(--sky-comp-card-small-header-space-inset-right) var(--sky-comp-card-small-header-space-inset-bottom) var(--sky-comp-card-small-header-space-inset-left))}.sky-card-small .sky-card-content{padding:var(--sky-override-card-content-padding, var(--sky-comp-card-small-content-space-inset-top) var(--sky-comp-card-small-content-space-inset-right) var(--sky-comp-card-small-content-space-inset-bottom) var(--sky-comp-card-small-content-space-inset-left))}.sky-card-selectable .sky-card-header,.sky-card-selectable .sky-card-content{cursor:pointer}.sky-card-selected{background-color:var(--sky-override-card-background-color-selected, var(--sky-color-background-selected-soft));box-shadow:var(--sky-override-card-box-shadow, inset 0 0 0 var(--sky-border-width-action-base) var(--sky-color-border-action-secondary-base));transition:background-color .15s}.sky-card-header{align-items:center;display:flex;flex-shrink:0;margin:0;padding:var(--sky-override-card-header-padding, var(--sky-comp-card-large-header-space-inset-top) var(--sky-comp-card-large-header-space-inset-right) var(--sky-comp-card-large-header-space-inset-bottom) var(--sky-comp-card-large-header-space-inset-left))}.sky-card-heading-middle{flex-grow:1;padding:var(--sky-override-card-header-text-padding, 0 var(--sky-space-gap-text_action-l) 0 0);overflow:hidden}.sky-card-title{margin:0;line-height:var(--sky-override-card-header-line-height, var(--sky-font-line_height-heading-2));font-size:var(--sky-override-card-header-font-size, var(--sky-font-size-heading-2));font-weight:var(--sky-override-card-header-font-weight, var(--sky-font-style-heading-2))}.sky-card-check{flex-shrink:0;padding-right:var(--sky-override-card-header-checkbox-padding-right, 0)}.sky-card-content{flex-grow:1;font-weight:400;margin:0;padding:var(--sky-override-card-content-padding, var(--sky-comp-card-large-content-space-inset-top) var(--sky-comp-card-large-content-space-inset-right) var(--sky-comp-card-large-content-space-inset-bottom) var(--sky-comp-card-large-content-space-inset-left));overflow:hidden}.sky-card-actions{bottom:0;flex-shrink:0;text-align:center}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "helpPopoverContent", "helpPopoverTitle", "iconName", "checkboxType", "checked", "indeterminate", "required", "labelText", "labelHidden", "hintText", "stacked", "helpKey"], outputs: ["change", "checkedChange", "disabledChange", "indeterminateChange"] }, { kind: "pipe", type: i3$1.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
1185
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyCardComponent, isStandalone: false, selector: "sky-card", inputs: { size: "size", selectable: "selectable", selected: "selected" }, outputs: { selectedChange: "selectedChange" }, queries: [{ propertyName: "inlineDeleteComponent", predicate: SkyInlineDeleteComponent }, { propertyName: "titleComponent", predicate: SkyCardTitleComponent }], ngImport: i0, template: "<section\n class=\"sky-card sky-shadow\"\n [ngClass]=\"\n {\n 'sky-card-small': size === 'small',\n 'sky-card-selectable': selectable,\n 'sky-card-selected': selectable &amp;&amp; selected\n }\"\n>\n <ng-content select=\"sky-inline-delete\" />\n <header>\n @if (selectable || showTitle) {\n <div class=\"sky-card-header\" (click)=\"contentClick()\">\n <div class=\"sky-card-heading-middle\">\n @if (showTitle) {\n <h1\n class=\"sky-card-title sky-theme-font-heading-2 sky-font-heading-2\"\n >\n <ng-content select=\"sky-card-title\" />\n </h1>\n }\n </div>\n @if (selectable) {\n <div class=\"sky-card-check\">\n <sky-checkbox\n [label]=\"'skyux_card_checkbox_label' | skyLibResources\"\n [ngModel]=\"selected\"\n (click)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onCheckboxChange($event)\"\n />\n </div>\n }\n </div>\n }\n </header>\n <div\n class=\"sky-card-content sky-theme-padding-inset-balanced-s\"\n (click)=\"contentClick()\"\n >\n <ng-content select=\"sky-card-content\" />\n </div>\n <div\n #actionsEl\n class=\"sky-card-actions\"\n [hidden]=\"actionsEl.children.length === 0\"\n >\n <ng-content select=\"sky-card-actions\" />\n </div>\n</section>\n", styles: [".sky-card:not(.sky-theme-modern *){--sky-override-card-background-color-selected: #f1eef6;--sky-override-card-background-color: #fff;--sky-override-card-border-radius: 0;--sky-override-card-border: 1px solid #cdcfd2;--sky-override-card-box-shadow: 0 0 5px 0 rgba(0, 0, 0, .3);--sky-override-card-checkbox-margin-right: 5px;--sky-override-card-content-padding: 10px;--sky-override-card-header-checkbox-padding-right: 10px;--sky-override-card-header-font-size: 26px;--sky-override-card-header-font-weight: 300;--sky-override-card-header-line-height: 1.428571429;--sky-override-card-header-padding: 10px 0 0 0;--sky-override-card-header-text-padding: 0 10px;--sky-override-card-large-height: 350px;--sky-override-card-large-width: 350px;--sky-override-card-margin: 0 10px 10px 0;--sky-override-card-small-height: 250px;--sky-override-card-small-width: 225px}.sky-card{--sky-comp-override-switch-label-margin-right: var( --sky-override-card-checkbox-margin-right, 0 );background-color:var(--sky-override-card-background-color, var(--sky-color-background-container-base));border:var(--sky-override-card-border, none);border-radius:var(--sky-override-card-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-card-box-shadow, inset 0 0 0 var(--sky-border-width-container-base) var(--sky-color-border-container-base), var(--sky-elevation-raised-100));display:inline-flex;flex-direction:column;height:var(--sky-override-card-large-height, 360px);margin:var(--sky-override-card-margin, var(--sky-comp-card-space-offset-top) var(--sky-comp-card-space-offset-right) var(--sky-comp-card-space-offset-bottom) var(--sky-comp-card-space-offset-left));transition:background-color var(--sky-global-duration-short);vertical-align:top;width:var(--sky-override-card-large-width, 360px);position:relative}.sky-card-small{height:var(--sky-override-card-small-height, 256px);width:var(--sky-override-card-small-width, 240px)}.sky-card-small .sky-card-header{padding:var(--sky-override-card-header-padding, var(--sky-comp-card-small-header-space-inset-top) var(--sky-comp-card-small-header-space-inset-right) var(--sky-comp-card-small-header-space-inset-bottom) var(--sky-comp-card-small-header-space-inset-left))}.sky-card-small .sky-card-content{padding:var(--sky-override-card-content-padding, var(--sky-comp-card-small-content-space-inset-top) var(--sky-comp-card-small-content-space-inset-right) var(--sky-comp-card-small-content-space-inset-bottom) var(--sky-comp-card-small-content-space-inset-left))}.sky-card-selectable .sky-card-header,.sky-card-selectable .sky-card-content{cursor:pointer}.sky-card-selected{background-color:var(--sky-override-card-background-color-selected, var(--sky-color-background-selected-soft));box-shadow:var(--sky-override-card-box-shadow, inset 0 0 0 var(--sky-border-width-action-base) var(--sky-color-border-action-secondary-base));transition:background-color var(--sky-global-duration-short)}.sky-card-header{align-items:center;display:flex;flex-shrink:0;margin:0;padding:var(--sky-override-card-header-padding, var(--sky-comp-card-large-header-space-inset-top) var(--sky-comp-card-large-header-space-inset-right) var(--sky-comp-card-large-header-space-inset-bottom) var(--sky-comp-card-large-header-space-inset-left))}.sky-card-heading-middle{flex-grow:1;padding:var(--sky-override-card-header-text-padding, 0 var(--sky-space-gap-text_action-l) 0 0);overflow:hidden}.sky-card-title{margin:0;line-height:var(--sky-override-card-header-line-height, var(--sky-font-line_height-heading-2));font-size:var(--sky-override-card-header-font-size, var(--sky-font-size-heading-2));font-weight:var(--sky-override-card-header-font-weight, var(--sky-font-style-heading-2))}.sky-card-check{flex-shrink:0;padding-right:var(--sky-override-card-header-checkbox-padding-right, 0)}.sky-card-content{flex-grow:1;font-weight:400;margin:0;padding:var(--sky-override-card-content-padding, var(--sky-comp-card-large-content-space-inset-top) var(--sky-comp-card-large-content-space-inset-right) var(--sky-comp-card-large-content-space-inset-bottom) var(--sky-comp-card-large-content-space-inset-left));overflow:hidden}.sky-card-actions{bottom:0;flex-shrink:0;text-align:center}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "helpPopoverContent", "helpPopoverTitle", "iconName", "checkboxType", "checked", "indeterminate", "required", "labelText", "labelHidden", "hintText", "stacked", "helpKey"], outputs: ["change", "checkedChange", "disabledChange", "indeterminateChange"] }, { kind: "pipe", type: i5$1.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
1248
1186
  }
1249
1187
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyCardComponent, decorators: [{
1250
1188
  type: Component,
1251
- args: [{ selector: 'sky-card', standalone: false, template: "<section\n class=\"sky-card sky-shadow\"\n [ngClass]=\"\n {\n 'sky-card-small': size === 'small',\n 'sky-card-selectable': selectable,\n 'sky-card-selected': selectable &amp;&amp; selected\n }\"\n>\n <ng-content select=\"sky-inline-delete\" />\n <header>\n @if (selectable || showTitle) {\n <div class=\"sky-card-header\" (click)=\"contentClick()\">\n <div class=\"sky-card-heading-middle\">\n @if (showTitle) {\n <h1 class=\"sky-card-title sky-section-heading sky-font-heading-2\">\n <ng-content select=\"sky-card-title\" />\n </h1>\n }\n </div>\n @if (selectable) {\n <div class=\"sky-card-check\">\n <sky-checkbox\n [label]=\"'skyux_card_checkbox_label' | skyLibResources\"\n [ngModel]=\"selected\"\n (click)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onCheckboxChange($event)\"\n />\n </div>\n }\n </div>\n }\n </header>\n <div\n class=\"sky-card-content sky-padding-even-default\"\n (click)=\"contentClick()\"\n >\n <ng-content select=\"sky-card-content\" />\n </div>\n <div\n #actionsEl\n class=\"sky-card-actions\"\n [hidden]=\"actionsEl.children.length === 0\"\n >\n <ng-content select=\"sky-card-actions\" />\n </div>\n</section>\n", styles: [".sky-card:not(.sky-theme-modern *){--sky-override-card-background-color-selected: #f1eef6;--sky-override-card-background-color: #fff;--sky-override-card-border-radius: 0;--sky-override-card-border: 1px solid #cdcfd2;--sky-override-card-box-shadow: 0 0 5px 0 rgba(0, 0, 0, .3);--sky-override-card-checkbox-margin-right: 5px;--sky-override-card-content-padding: 10px;--sky-override-card-header-checkbox-padding-right: 10px;--sky-override-card-header-font-size: 26px;--sky-override-card-header-font-weight: 300;--sky-override-card-header-line-height: 1.428571429;--sky-override-card-header-padding: 10px 0 0 0;--sky-override-card-header-text-padding: 0 10px;--sky-override-card-large-height: 350px;--sky-override-card-large-width: 350px;--sky-override-card-margin: 0 10px 10px 0;--sky-override-card-small-height: 250px;--sky-override-card-small-width: 225px}.sky-card{--sky-comp-override-switch-label-margin-right: var( --sky-override-card-checkbox-margin-right, 0 );background-color:var(--sky-override-card-background-color, var(--sky-color-background-container-base));border:var(--sky-override-card-border, none);border-radius:var(--sky-override-card-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-card-box-shadow, inset 0 0 0 var(--sky-border-width-container-base) var(--sky-color-border-container-base), var(--sky-elevation-raised-100));display:inline-flex;flex-direction:column;height:var(--sky-override-card-large-height, 360px);margin:var(--sky-override-card-margin, var(--sky-comp-card-space-offset-top) var(--sky-comp-card-space-offset-right) var(--sky-comp-card-space-offset-bottom) var(--sky-comp-card-space-offset-left));transition:background-color .15s;vertical-align:top;width:var(--sky-override-card-large-width, 360px);position:relative}.sky-card-small{height:var(--sky-override-card-small-height, 256px);width:var(--sky-override-card-small-width, 240px)}.sky-card-small .sky-card-header{padding:var(--sky-override-card-header-padding, var(--sky-comp-card-small-header-space-inset-top) var(--sky-comp-card-small-header-space-inset-right) var(--sky-comp-card-small-header-space-inset-bottom) var(--sky-comp-card-small-header-space-inset-left))}.sky-card-small .sky-card-content{padding:var(--sky-override-card-content-padding, var(--sky-comp-card-small-content-space-inset-top) var(--sky-comp-card-small-content-space-inset-right) var(--sky-comp-card-small-content-space-inset-bottom) var(--sky-comp-card-small-content-space-inset-left))}.sky-card-selectable .sky-card-header,.sky-card-selectable .sky-card-content{cursor:pointer}.sky-card-selected{background-color:var(--sky-override-card-background-color-selected, var(--sky-color-background-selected-soft));box-shadow:var(--sky-override-card-box-shadow, inset 0 0 0 var(--sky-border-width-action-base) var(--sky-color-border-action-secondary-base));transition:background-color .15s}.sky-card-header{align-items:center;display:flex;flex-shrink:0;margin:0;padding:var(--sky-override-card-header-padding, var(--sky-comp-card-large-header-space-inset-top) var(--sky-comp-card-large-header-space-inset-right) var(--sky-comp-card-large-header-space-inset-bottom) var(--sky-comp-card-large-header-space-inset-left))}.sky-card-heading-middle{flex-grow:1;padding:var(--sky-override-card-header-text-padding, 0 var(--sky-space-gap-text_action-l) 0 0);overflow:hidden}.sky-card-title{margin:0;line-height:var(--sky-override-card-header-line-height, var(--sky-font-line_height-heading-2));font-size:var(--sky-override-card-header-font-size, var(--sky-font-size-heading-2));font-weight:var(--sky-override-card-header-font-weight, var(--sky-font-style-heading-2))}.sky-card-check{flex-shrink:0;padding-right:var(--sky-override-card-header-checkbox-padding-right, 0)}.sky-card-content{flex-grow:1;font-weight:400;margin:0;padding:var(--sky-override-card-content-padding, var(--sky-comp-card-large-content-space-inset-top) var(--sky-comp-card-large-content-space-inset-right) var(--sky-comp-card-large-content-space-inset-bottom) var(--sky-comp-card-large-content-space-inset-left));overflow:hidden}.sky-card-actions{bottom:0;flex-shrink:0;text-align:center}\n"] }]
1189
+ args: [{ selector: 'sky-card', standalone: false, template: "<section\n class=\"sky-card sky-shadow\"\n [ngClass]=\"\n {\n 'sky-card-small': size === 'small',\n 'sky-card-selectable': selectable,\n 'sky-card-selected': selectable &amp;&amp; selected\n }\"\n>\n <ng-content select=\"sky-inline-delete\" />\n <header>\n @if (selectable || showTitle) {\n <div class=\"sky-card-header\" (click)=\"contentClick()\">\n <div class=\"sky-card-heading-middle\">\n @if (showTitle) {\n <h1\n class=\"sky-card-title sky-theme-font-heading-2 sky-font-heading-2\"\n >\n <ng-content select=\"sky-card-title\" />\n </h1>\n }\n </div>\n @if (selectable) {\n <div class=\"sky-card-check\">\n <sky-checkbox\n [label]=\"'skyux_card_checkbox_label' | skyLibResources\"\n [ngModel]=\"selected\"\n (click)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onCheckboxChange($event)\"\n />\n </div>\n }\n </div>\n }\n </header>\n <div\n class=\"sky-card-content sky-theme-padding-inset-balanced-s\"\n (click)=\"contentClick()\"\n >\n <ng-content select=\"sky-card-content\" />\n </div>\n <div\n #actionsEl\n class=\"sky-card-actions\"\n [hidden]=\"actionsEl.children.length === 0\"\n >\n <ng-content select=\"sky-card-actions\" />\n </div>\n</section>\n", styles: [".sky-card:not(.sky-theme-modern *){--sky-override-card-background-color-selected: #f1eef6;--sky-override-card-background-color: #fff;--sky-override-card-border-radius: 0;--sky-override-card-border: 1px solid #cdcfd2;--sky-override-card-box-shadow: 0 0 5px 0 rgba(0, 0, 0, .3);--sky-override-card-checkbox-margin-right: 5px;--sky-override-card-content-padding: 10px;--sky-override-card-header-checkbox-padding-right: 10px;--sky-override-card-header-font-size: 26px;--sky-override-card-header-font-weight: 300;--sky-override-card-header-line-height: 1.428571429;--sky-override-card-header-padding: 10px 0 0 0;--sky-override-card-header-text-padding: 0 10px;--sky-override-card-large-height: 350px;--sky-override-card-large-width: 350px;--sky-override-card-margin: 0 10px 10px 0;--sky-override-card-small-height: 250px;--sky-override-card-small-width: 225px}.sky-card{--sky-comp-override-switch-label-margin-right: var( --sky-override-card-checkbox-margin-right, 0 );background-color:var(--sky-override-card-background-color, var(--sky-color-background-container-base));border:var(--sky-override-card-border, none);border-radius:var(--sky-override-card-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-card-box-shadow, inset 0 0 0 var(--sky-border-width-container-base) var(--sky-color-border-container-base), var(--sky-elevation-raised-100));display:inline-flex;flex-direction:column;height:var(--sky-override-card-large-height, 360px);margin:var(--sky-override-card-margin, var(--sky-comp-card-space-offset-top) var(--sky-comp-card-space-offset-right) var(--sky-comp-card-space-offset-bottom) var(--sky-comp-card-space-offset-left));transition:background-color var(--sky-global-duration-short);vertical-align:top;width:var(--sky-override-card-large-width, 360px);position:relative}.sky-card-small{height:var(--sky-override-card-small-height, 256px);width:var(--sky-override-card-small-width, 240px)}.sky-card-small .sky-card-header{padding:var(--sky-override-card-header-padding, var(--sky-comp-card-small-header-space-inset-top) var(--sky-comp-card-small-header-space-inset-right) var(--sky-comp-card-small-header-space-inset-bottom) var(--sky-comp-card-small-header-space-inset-left))}.sky-card-small .sky-card-content{padding:var(--sky-override-card-content-padding, var(--sky-comp-card-small-content-space-inset-top) var(--sky-comp-card-small-content-space-inset-right) var(--sky-comp-card-small-content-space-inset-bottom) var(--sky-comp-card-small-content-space-inset-left))}.sky-card-selectable .sky-card-header,.sky-card-selectable .sky-card-content{cursor:pointer}.sky-card-selected{background-color:var(--sky-override-card-background-color-selected, var(--sky-color-background-selected-soft));box-shadow:var(--sky-override-card-box-shadow, inset 0 0 0 var(--sky-border-width-action-base) var(--sky-color-border-action-secondary-base));transition:background-color var(--sky-global-duration-short)}.sky-card-header{align-items:center;display:flex;flex-shrink:0;margin:0;padding:var(--sky-override-card-header-padding, var(--sky-comp-card-large-header-space-inset-top) var(--sky-comp-card-large-header-space-inset-right) var(--sky-comp-card-large-header-space-inset-bottom) var(--sky-comp-card-large-header-space-inset-left))}.sky-card-heading-middle{flex-grow:1;padding:var(--sky-override-card-header-text-padding, 0 var(--sky-space-gap-text_action-l) 0 0);overflow:hidden}.sky-card-title{margin:0;line-height:var(--sky-override-card-header-line-height, var(--sky-font-line_height-heading-2));font-size:var(--sky-override-card-header-font-size, var(--sky-font-size-heading-2));font-weight:var(--sky-override-card-header-font-weight, var(--sky-font-style-heading-2))}.sky-card-check{flex-shrink:0;padding-right:var(--sky-override-card-header-checkbox-padding-right, 0)}.sky-card-content{flex-grow:1;font-weight:400;margin:0;padding:var(--sky-override-card-content-padding, var(--sky-comp-card-large-content-space-inset-top) var(--sky-comp-card-large-content-space-inset-right) var(--sky-comp-card-large-content-space-inset-bottom) var(--sky-comp-card-large-content-space-inset-left));overflow:hidden}.sky-card-actions{bottom:0;flex-shrink:0;text-align:center}\n"] }]
1252
1190
  }], ctorParameters: () => [{ type: i1$1.SkyLogService }], propDecorators: { size: [{
1253
1191
  type: Input
1254
1192
  }], selectable: [{
@@ -1331,11 +1269,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
1331
1269
  */
1332
1270
  class SkyDefinitionListHeadingComponent {
1333
1271
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDefinitionListHeadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1334
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyDefinitionListHeadingComponent, isStandalone: false, selector: "sky-definition-list-heading", ngImport: i0, template: "<div class=\"sky-subsection-heading sky-definition-list-heading\">\n <ng-content />\n</div>\n", styles: [".sky-definition-list-heading{margin-bottom:5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1272
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyDefinitionListHeadingComponent, isStandalone: false, selector: "sky-definition-list-heading", ngImport: i0, template: "<div class=\"sky-theme-font-heading-3 sky-definition-list-heading\">\n <ng-content />\n</div>\n", styles: [".sky-definition-list-heading{margin-bottom:5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1335
1273
  }
1336
1274
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDefinitionListHeadingComponent, decorators: [{
1337
1275
  type: Component,
1338
- args: [{ selector: 'sky-definition-list-heading', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"sky-subsection-heading sky-definition-list-heading\">\n <ng-content />\n</div>\n", styles: [".sky-definition-list-heading{margin-bottom:5px}\n"] }]
1276
+ args: [{ selector: 'sky-definition-list-heading', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"sky-theme-font-heading-3 sky-definition-list-heading\">\n <ng-content />\n</div>\n", styles: [".sky-definition-list-heading{margin-bottom:5px}\n"] }]
1339
1277
  }] });
1340
1278
 
1341
1279
  /**
@@ -1378,7 +1316,7 @@ class SkyDefinitionListValueComponent {
1378
1316
  this.service = service;
1379
1317
  }
1380
1318
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDefinitionListValueComponent, deps: [{ token: SkyDefinitionListService }], target: i0.ɵɵFactoryTarget.Component }); }
1381
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyDefinitionListValueComponent, isStandalone: false, selector: "sky-definition-list-value", ngImport: i0, template: "<div class=\"sky-definition-list-value\">\n <span #valueEl>\n <ng-content />\n </span>\n @if (!valueEl.textContent?.trim()) {\n <span class=\"sky-deemphasized\">\n {{\n (service.defaultValue | async) ||\n ('skyux_definition_list_none_found' | skyLibResources)\n }}\n </span>\n }\n</div>\n", styles: [":host{flex:1}\n"], dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
1319
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyDefinitionListValueComponent, isStandalone: false, selector: "sky-definition-list-value", ngImport: i0, template: "<div class=\"sky-definition-list-value\">\n <span #valueEl>\n <ng-content />\n </span>\n @if (!valueEl.textContent?.trim()) {\n <span class=\"sky-deemphasized\">\n {{\n (service.defaultValue | async) ||\n ('skyux_definition_list_none_found' | skyLibResources)\n }}\n </span>\n }\n</div>\n", styles: [":host{flex:1}\n"], dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5$1.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
1382
1320
  }
1383
1321
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDefinitionListValueComponent, decorators: [{
1384
1322
  type: Component,
@@ -1511,7 +1449,7 @@ class SkyDescriptionListDescriptionComponent {
1511
1449
  this.#ngUnsubscribe.complete();
1512
1450
  }
1513
1451
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDescriptionListDescriptionComponent, deps: [{ token: SkyDescriptionListService }, { token: i0.ChangeDetectorRef }, { token: i2$1.SkyThemeService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1514
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyDescriptionListDescriptionComponent, isStandalone: false, selector: "sky-description-list-description", viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["descriptionTemplateRef"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-template #descriptionTemplateRef>\n <span skyTrim class=\"sky-description-list-description\"\n ><ng-content></ng-content\n ></span>\n <span\n class=\"sky-description-list-default-value\"\n data-sky-id=\"sky-description-list-default-value\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'modern',\n 'sky-deemphasized': 'default'\n }\"\n >\n {{\n (service.defaultDescription | async) ||\n ('skyux_description_list_none_found' | skyLibResources)\n }}\n </span>\n</ng-template>\n", styles: [".sky-description-list-description:not(:empty)+.sky-description-list-default-value{display:none}\n"], dependencies: [{ kind: "directive", type: i2$1.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "directive", type: i1$1.λ4, selector: "[skyTrim]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.SkyLibResourcesPipe, name: "skyLibResources" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1452
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyDescriptionListDescriptionComponent, isStandalone: false, selector: "sky-description-list-description", viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["descriptionTemplateRef"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-template #descriptionTemplateRef>\n <span skyTrim class=\"sky-description-list-description\"\n ><ng-content></ng-content\n ></span>\n <span\n class=\"sky-description-list-default-value\"\n data-sky-id=\"sky-description-list-default-value\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'modern',\n 'sky-deemphasized': 'default'\n }\"\n >\n {{\n (service.defaultDescription | async) ||\n ('skyux_description_list_none_found' | skyLibResources)\n }}\n </span>\n</ng-template>\n", styles: [".sky-description-list-description:not(:empty)+.sky-description-list-default-value{display:none}\n"], dependencies: [{ kind: "directive", type: i2$1.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "directive", type: i1$1.λ4, selector: "[skyTrim]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5$1.SkyLibResourcesPipe, name: "skyLibResources" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1515
1453
  }
1516
1454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDescriptionListDescriptionComponent, decorators: [{
1517
1455
  type: Component,
@@ -2070,11 +2008,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
2070
2008
  /* Code coverage having problems with no statements in classes */
2071
2009
  class SkyPageSummarySubtitleComponent {
2072
2010
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyPageSummarySubtitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2073
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyPageSummarySubtitleComponent, isStandalone: false, selector: "sky-page-summary-subtitle", ngImport: i0, template: "<p class=\"sky-page-summary-subtitle sky-emphasized\">\n <ng-content />\n</p>\n", styles: [".sky-page-summary-subtitle{margin-top:0;margin-bottom:10px;line-height:1.1}\n"] }); }
2011
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyPageSummarySubtitleComponent, isStandalone: false, selector: "sky-page-summary-subtitle", ngImport: i0, template: "<p class=\"sky-page-summary-subtitle sky-theme-font-body-emphasized-m\">\n <ng-content />\n</p>\n", styles: [".sky-page-summary-subtitle{margin-top:0;margin-bottom:10px;line-height:1.1}\n"] }); }
2074
2012
  }
2075
2013
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyPageSummarySubtitleComponent, decorators: [{
2076
2014
  type: Component,
2077
- args: [{ selector: 'sky-page-summary-subtitle', standalone: false, template: "<p class=\"sky-page-summary-subtitle sky-emphasized\">\n <ng-content />\n</p>\n", styles: [".sky-page-summary-subtitle{margin-top:0;margin-bottom:10px;line-height:1.1}\n"] }]
2015
+ args: [{ selector: 'sky-page-summary-subtitle', standalone: false, template: "<p class=\"sky-page-summary-subtitle sky-theme-font-body-emphasized-m\">\n <ng-content />\n</p>\n", styles: [".sky-page-summary-subtitle{margin-top:0;margin-bottom:10px;line-height:1.1}\n"] }]
2078
2016
  }] });
2079
2017
 
2080
2018
  /**
@@ -2085,11 +2023,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
2085
2023
  /* Code coverage having problems with no statements in classes */
2086
2024
  class SkyPageSummaryTitleComponent {
2087
2025
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyPageSummaryTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2088
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyPageSummaryTitleComponent, isStandalone: false, selector: "sky-page-summary-title", ngImport: i0, template: "<h1 class=\"sky-page-summary-title sky-page-heading\">\n <ng-content />\n</h1>\n", styles: [".sky-page-summary-title{margin-top:0;margin-bottom:5px}\n"] }); }
2026
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyPageSummaryTitleComponent, isStandalone: false, selector: "sky-page-summary-title", ngImport: i0, template: "<h1 class=\"sky-page-summary-title sky-theme-font-heading-1\">\n <ng-content />\n</h1>\n", styles: [".sky-page-summary-title{margin-top:0;margin-bottom:5px}\n"] }); }
2089
2027
  }
2090
2028
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyPageSummaryTitleComponent, decorators: [{
2091
2029
  type: Component,
2092
- args: [{ selector: 'sky-page-summary-title', standalone: false, template: "<h1 class=\"sky-page-summary-title sky-page-heading\">\n <ng-content />\n</h1>\n", styles: [".sky-page-summary-title{margin-top:0;margin-bottom:5px}\n"] }]
2030
+ args: [{ selector: 'sky-page-summary-title', standalone: false, template: "<h1 class=\"sky-page-summary-title sky-theme-font-heading-1\">\n <ng-content />\n</h1>\n", styles: [".sky-page-summary-title{margin-top:0;margin-bottom:5px}\n"] }]
2093
2031
  }] });
2094
2032
 
2095
2033
  /**
@@ -2204,6 +2142,9 @@ class SkyTextExpandAdapterService {
2204
2142
  removeContainerMaxHeight(containerEl) {
2205
2143
  this.#renderer.removeStyle(containerEl.nativeElement, 'max-height');
2206
2144
  }
2145
+ setContainerMaxHeight(containerEl, height) {
2146
+ this.#renderer.setStyle(containerEl.nativeElement, 'max-height', `${height}px`);
2147
+ }
2207
2148
  setText(textEl, text) {
2208
2149
  textEl.nativeElement.textContent = text;
2209
2150
  }
@@ -2231,11 +2172,11 @@ class SkyTextExpandModalComponent {
2231
2172
  this.instance.close();
2232
2173
  }
2233
2174
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandModalComponent, deps: [{ token: SKY_TEXT_EXPAND_MODAL_CONTEXT }, { token: i1$4.SkyModalInstance }], target: i0.ɵɵFactoryTarget.Component }); }
2234
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyTextExpandModalComponent, isStandalone: true, selector: "sky-text-expand-modal", ngImport: i0, template: "<sky-modal>\n <sky-modal-header>{{ context.header }}</sky-modal-header>\n <sky-modal-content class=\"sky-text-expand-modal-content\">{{\n context.text\n }}</sky-modal-content>\n <sky-modal-footer>\n <button class=\"sky-btn sky-btn-link\" type=\"button\" (click)=\"close()\">\n {{ 'skyux_text_expand_close_text' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-text-expand-container:not(.sky-theme-modern *){--sky-text-expand-see-more-margin-left: 5px}.sky-text-expand-ellipsis{letter-spacing:2px;white-space:nowrap}.sky-text-expand-space{white-space:normal}.sky-text-expand-see-more{white-space:nowrap;margin-left:var(--sky-text-expand-see-more-margin-left, var(--sky-space-gap-text_action-xs))}.sky-text-expand-text{margin:0;white-space:pre-wrap}.sky-text-expand-container{word-break:break-word;word-wrap:break-word;overflow:hidden;height:auto}.sky-text-expand-modal-content{white-space:pre-line;word-wrap:break-word}\n"], dependencies: [{ kind: "ngmodule", type: SkyModalModule }, { kind: "component", type: i1$4.λ5, selector: "sky-modal", inputs: ["formErrors", "headingText", "helpKey", "helpPopoverContent", "helpPopoverTitle", "ariaRole", "tiledBody", "ariaDescribedBy", "ariaLabelledBy", "layout"] }, { kind: "component", type: i1$4.λ2, selector: "sky-modal-content" }, { kind: "component", type: i1$4.λ3, selector: "sky-modal-footer" }, { kind: "component", type: i1$4.λ4, selector: "sky-modal-header" }, { kind: "ngmodule", type: SkyLayoutResourcesModule }, { kind: "pipe", type: i3$1.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
2175
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SkyTextExpandModalComponent, isStandalone: true, selector: "sky-text-expand-modal", ngImport: i0, template: "<sky-modal>\n <sky-modal-header>{{ context.header }}</sky-modal-header>\n <sky-modal-content class=\"sky-text-expand-modal-content\">{{\n context.text\n }}</sky-modal-content>\n <sky-modal-footer>\n <button class=\"sky-btn sky-btn-link\" type=\"button\" (click)=\"close()\">\n {{ 'skyux_text_expand_close_text' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-text-expand-container:not(.sky-theme-modern *){--sky-text-expand-see-more-margin-left: 5px}.sky-text-expand-ellipsis{letter-spacing:2px;white-space:nowrap}.sky-text-expand-space{white-space:normal}.sky-text-expand-see-more{white-space:nowrap;margin-left:var(--sky-text-expand-see-more-margin-left, var(--sky-space-gap-text_action-xs))}.sky-text-expand-text{margin:0;white-space:pre-wrap}.sky-text-expand-container{word-break:break-word;word-wrap:break-word;overflow:hidden;height:auto;transition-duration:var(--sky-global-duration-medium);transition-property:max-height;transition-timing-function:ease}.sky-text-expand-modal-content{white-space:pre-line;word-wrap:break-word}\n"], dependencies: [{ kind: "ngmodule", type: SkyModalModule }, { kind: "component", type: i1$4.λ5, selector: "sky-modal", inputs: ["formErrors", "headingText", "helpKey", "helpPopoverContent", "helpPopoverTitle", "ariaRole", "tiledBody", "ariaDescribedBy", "ariaLabelledBy", "layout", "headingHidden"] }, { kind: "component", type: i1$4.λ2, selector: "sky-modal-content" }, { kind: "component", type: i1$4.λ3, selector: "sky-modal-footer" }, { kind: "component", type: i1$4.λ4, selector: "sky-modal-header" }, { kind: "ngmodule", type: SkyLayoutResourcesModule }, { kind: "pipe", type: i5$1.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
2235
2176
  }
2236
2177
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandModalComponent, decorators: [{
2237
2178
  type: Component,
2238
- args: [{ selector: 'sky-text-expand-modal', imports: [SkyModalModule, SkyLayoutResourcesModule], template: "<sky-modal>\n <sky-modal-header>{{ context.header }}</sky-modal-header>\n <sky-modal-content class=\"sky-text-expand-modal-content\">{{\n context.text\n }}</sky-modal-content>\n <sky-modal-footer>\n <button class=\"sky-btn sky-btn-link\" type=\"button\" (click)=\"close()\">\n {{ 'skyux_text_expand_close_text' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-text-expand-container:not(.sky-theme-modern *){--sky-text-expand-see-more-margin-left: 5px}.sky-text-expand-ellipsis{letter-spacing:2px;white-space:nowrap}.sky-text-expand-space{white-space:normal}.sky-text-expand-see-more{white-space:nowrap;margin-left:var(--sky-text-expand-see-more-margin-left, var(--sky-space-gap-text_action-xs))}.sky-text-expand-text{margin:0;white-space:pre-wrap}.sky-text-expand-container{word-break:break-word;word-wrap:break-word;overflow:hidden;height:auto}.sky-text-expand-modal-content{white-space:pre-line;word-wrap:break-word}\n"] }]
2179
+ args: [{ selector: 'sky-text-expand-modal', imports: [SkyModalModule, SkyLayoutResourcesModule], template: "<sky-modal>\n <sky-modal-header>{{ context.header }}</sky-modal-header>\n <sky-modal-content class=\"sky-text-expand-modal-content\">{{\n context.text\n }}</sky-modal-content>\n <sky-modal-footer>\n <button class=\"sky-btn sky-btn-link\" type=\"button\" (click)=\"close()\">\n {{ 'skyux_text_expand_close_text' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-text-expand-container:not(.sky-theme-modern *){--sky-text-expand-see-more-margin-left: 5px}.sky-text-expand-ellipsis{letter-spacing:2px;white-space:nowrap}.sky-text-expand-space{white-space:normal}.sky-text-expand-see-more{white-space:nowrap;margin-left:var(--sky-text-expand-see-more-margin-left, var(--sky-space-gap-text_action-xs))}.sky-text-expand-text{margin:0;white-space:pre-wrap}.sky-text-expand-container{word-break:break-word;word-wrap:break-word;overflow:hidden;height:auto;transition-duration:var(--sky-global-duration-medium);transition-property:max-height;transition-timing-function:ease}.sky-text-expand-modal-content{white-space:pre-line;word-wrap:break-word}\n"] }]
2239
2180
  }], ctorParameters: () => [{ type: undefined, decorators: [{
2240
2181
  type: Inject,
2241
2182
  args: [SKY_TEXT_EXPAND_MODAL_CONTEXT]
@@ -2339,7 +2280,6 @@ class SkyTextExpandComponent {
2339
2280
  this.contentSectionId = `sky-text-expand-content-${++nextId$1}`;
2340
2281
  this.expandable = false;
2341
2282
  this.isModal = false;
2342
- this.transitionHeight = 1;
2343
2283
  this.#collapsedText = '';
2344
2284
  this.#newlineCount = 0;
2345
2285
  this.#seeMoreText = '';
@@ -2384,12 +2324,8 @@ class SkyTextExpandComponent {
2384
2324
  if (this.textEl && this.containerEl) {
2385
2325
  // Ensure the correct text is displayed
2386
2326
  this.#textExpandAdapter.setText(this.textEl, this.#textToShow);
2387
- setTimeout(() => {
2388
- if (this.containerEl) {
2389
- // Set height back to auto so the browser can change the height as needed with window changes
2390
- this.#textExpandAdapter.removeContainerMaxHeight(this.containerEl);
2391
- }
2392
- });
2327
+ // Set height back to auto so the browser can change the height as needed with window changes
2328
+ this.#textExpandAdapter.removeContainerMaxHeight(this.containerEl);
2393
2329
  }
2394
2330
  }
2395
2331
  ngAfterContentInit() {
@@ -2467,58 +2403,42 @@ class SkyTextExpandComponent {
2467
2403
  if (this.containerEl && this.textEl) {
2468
2404
  const adapter = this.#textExpandAdapter;
2469
2405
  const container = this.containerEl;
2406
+ const containerNative = container.nativeElement;
2407
+ // Lock at current height as the transition starting point.
2408
+ const currentHeight = adapter.getContainerHeight(container);
2409
+ adapter.setContainerMaxHeight(container, currentHeight);
2470
2410
  if (expanding) {
2471
2411
  adapter.setText(this.textEl, this.text);
2472
2412
  this.#textToShow = this.text;
2473
2413
  }
2474
2414
  else {
2415
+ // Measure the collapsed height while max-height is still large enough.
2475
2416
  adapter.setText(this.textEl, this.#collapsedText);
2476
2417
  this.#textToShow = this.#collapsedText;
2477
2418
  }
2478
2419
  this.buttonText = expanding ? this.#seeLessText : this.#seeMoreText;
2479
- // Measure the new height so we can animate to it.
2480
- const newHeight = adapter.getContainerHeight(container);
2481
- this.transitionHeight = newHeight;
2482
- // Always show all text while animating so that the animation is smooth. The animation callback will set this back if needed.
2420
+ // Measure the target height.
2421
+ const targetHeight = expanding
2422
+ ? containerNative.scrollHeight
2423
+ : adapter.getContainerHeight(container);
2424
+ // For collapsing, show full text during the transition so it animates smoothly.
2483
2425
  if (!expanding) {
2484
2426
  adapter.setText(this.textEl, this.text);
2485
2427
  }
2428
+ // Force reflow so the browser registers the starting max-height.
2429
+ containerNative.getBoundingClientRect();
2430
+ // Set the target max-height to trigger the CSS transition.
2431
+ adapter.setContainerMaxHeight(container, targetHeight);
2486
2432
  this.isExpanded = expanding;
2487
2433
  }
2488
2434
  }
2489
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandComponent, deps: [{ token: i3$1.SkyLibResourcesService }, { token: i1$4.SkyModalService }, { token: SkyTextExpandAdapterService }], target: i0.ɵɵFactoryTarget.Component }); }
2490
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyTextExpandComponent, isStandalone: false, selector: "sky-text-expand", inputs: { expandModalTitle: "expandModalTitle", maxExpandedLength: "maxExpandedLength", maxExpandedNewlines: "maxExpandedNewlines", maxLength: "maxLength", text: "text", truncateNewlines: "truncateNewlines" }, providers: [SkyTextExpandAdapterService], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }, { propertyName: "textEl", first: true, predicate: ["text"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div\n #container\n class=\"sky-text-expand-container\"\n [@expansionAnimation]=\"{\n value: isExpanded,\n params: { transitionHeight: transitionHeight }\n }\"\n (@expansionAnimation.done)=\"animationEnd()\"\n>\n <span #text class=\"sky-text-expand-text\" [id]=\"contentSectionId\"></span>\n @if (expandable) {\n @if (!isExpanded) {\n <span class=\"sky-text-expand-ellipsis\">... </span>\n }\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-see-more\"\n [attr.aria-expanded]=\"isModal ? undefined : !!isExpanded\"\n [attr.aria-controls]=\"isModal ? undefined : contentSectionId\"\n [attr.aria-haspopup]=\"isModal ? 'dialog' : undefined\"\n (click)=\"textExpand()\"\n >\n {{ buttonText }}\n </button>\n }\n</div>\n", styles: [".sky-text-expand-container:not(.sky-theme-modern *){--sky-text-expand-see-more-margin-left: 5px}.sky-text-expand-ellipsis{letter-spacing:2px;white-space:nowrap}.sky-text-expand-space{white-space:normal}.sky-text-expand-see-more{white-space:nowrap;margin-left:var(--sky-text-expand-see-more-margin-left, var(--sky-space-gap-text_action-xs))}.sky-text-expand-text{margin:0;white-space:pre-wrap}.sky-text-expand-container{word-break:break-word;word-wrap:break-word;overflow:hidden;height:auto}.sky-text-expand-modal-content{white-space:pre-line;word-wrap:break-word}\n"], animations: [
2491
- trigger('expansionAnimation', [
2492
- transition(':enter', []),
2493
- state('true', style({
2494
- maxHeight: '{{transitionHeight}}px',
2495
- }), { params: { transitionHeight: 0 } }),
2496
- state('false', style({
2497
- maxHeight: '{{transitionHeight}}px',
2498
- }), { params: { transitionHeight: 0 } }),
2499
- transition('true => false', animate('250ms ease')),
2500
- transition('false => true', animate('250ms ease')),
2501
- transition('void => *', []),
2502
- ]),
2503
- ] }); }
2435
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandComponent, deps: [{ token: i5$1.SkyLibResourcesService }, { token: i1$4.SkyModalService }, { token: SkyTextExpandAdapterService }], target: i0.ɵɵFactoryTarget.Component }); }
2436
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyTextExpandComponent, isStandalone: true, selector: "sky-text-expand", inputs: { expandModalTitle: "expandModalTitle", maxExpandedLength: "maxExpandedLength", maxExpandedNewlines: "maxExpandedNewlines", maxLength: "maxLength", text: "text", truncateNewlines: "truncateNewlines" }, providers: [SkyTextExpandAdapterService], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }, { propertyName: "textEl", first: true, predicate: ["text"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div\n #container\n class=\"sky-text-expand-container\"\n skyTransitionEndHandler\n transitionPropertyToTrack=\"max-height\"\n [transitionTrigger]=\"isExpanded\"\n (transitionEnd)=\"animationEnd()\"\n>\n <span #text class=\"sky-text-expand-text\" [id]=\"contentSectionId\"></span>\n @if (expandable) {\n @if (!isExpanded) {\n <span class=\"sky-text-expand-ellipsis\">... </span>\n }\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-see-more\"\n [attr.aria-expanded]=\"isModal ? undefined : !!isExpanded\"\n [attr.aria-controls]=\"isModal ? undefined : contentSectionId\"\n [attr.aria-haspopup]=\"isModal ? 'dialog' : undefined\"\n (click)=\"textExpand()\"\n >\n {{ buttonText }}\n </button>\n }\n</div>\n", styles: [".sky-text-expand-container:not(.sky-theme-modern *){--sky-text-expand-see-more-margin-left: 5px}.sky-text-expand-ellipsis{letter-spacing:2px;white-space:nowrap}.sky-text-expand-space{white-space:normal}.sky-text-expand-see-more{white-space:nowrap;margin-left:var(--sky-text-expand-see-more-margin-left, var(--sky-space-gap-text_action-xs))}.sky-text-expand-text{margin:0;white-space:pre-wrap}.sky-text-expand-container{word-break:break-word;word-wrap:break-word;overflow:hidden;height:auto;transition-duration:var(--sky-global-duration-medium);transition-property:max-height;transition-timing-function:ease}.sky-text-expand-modal-content{white-space:pre-line;word-wrap:break-word}\n"], dependencies: [{ kind: "directive", type: _SkyTransitionEndHandlerDirective, selector: "[skyTransitionEndHandler]", inputs: ["transitionTrigger", "transitionPropertyToTrack"], outputs: ["transitionEnd"] }] }); }
2504
2437
  }
2505
2438
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandComponent, decorators: [{
2506
2439
  type: Component,
2507
- args: [{ animations: [
2508
- trigger('expansionAnimation', [
2509
- transition(':enter', []),
2510
- state('true', style({
2511
- maxHeight: '{{transitionHeight}}px',
2512
- }), { params: { transitionHeight: 0 } }),
2513
- state('false', style({
2514
- maxHeight: '{{transitionHeight}}px',
2515
- }), { params: { transitionHeight: 0 } }),
2516
- transition('true => false', animate('250ms ease')),
2517
- transition('false => true', animate('250ms ease')),
2518
- transition('void => *', []),
2519
- ]),
2520
- ], selector: 'sky-text-expand', providers: [SkyTextExpandAdapterService], standalone: false, template: "<div\n #container\n class=\"sky-text-expand-container\"\n [@expansionAnimation]=\"{\n value: isExpanded,\n params: { transitionHeight: transitionHeight }\n }\"\n (@expansionAnimation.done)=\"animationEnd()\"\n>\n <span #text class=\"sky-text-expand-text\" [id]=\"contentSectionId\"></span>\n @if (expandable) {\n @if (!isExpanded) {\n <span class=\"sky-text-expand-ellipsis\">... </span>\n }\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-see-more\"\n [attr.aria-expanded]=\"isModal ? undefined : !!isExpanded\"\n [attr.aria-controls]=\"isModal ? undefined : contentSectionId\"\n [attr.aria-haspopup]=\"isModal ? 'dialog' : undefined\"\n (click)=\"textExpand()\"\n >\n {{ buttonText }}\n </button>\n }\n</div>\n", styles: [".sky-text-expand-container:not(.sky-theme-modern *){--sky-text-expand-see-more-margin-left: 5px}.sky-text-expand-ellipsis{letter-spacing:2px;white-space:nowrap}.sky-text-expand-space{white-space:normal}.sky-text-expand-see-more{white-space:nowrap;margin-left:var(--sky-text-expand-see-more-margin-left, var(--sky-space-gap-text_action-xs))}.sky-text-expand-text{margin:0;white-space:pre-wrap}.sky-text-expand-container{word-break:break-word;word-wrap:break-word;overflow:hidden;height:auto}.sky-text-expand-modal-content{white-space:pre-line;word-wrap:break-word}\n"] }]
2521
- }], ctorParameters: () => [{ type: i3$1.SkyLibResourcesService }, { type: i1$4.SkyModalService }, { type: SkyTextExpandAdapterService }], propDecorators: { expandModalTitle: [{
2440
+ args: [{ imports: [_SkyTransitionEndHandlerDirective], selector: 'sky-text-expand', providers: [SkyTextExpandAdapterService], template: "<div\n #container\n class=\"sky-text-expand-container\"\n skyTransitionEndHandler\n transitionPropertyToTrack=\"max-height\"\n [transitionTrigger]=\"isExpanded\"\n (transitionEnd)=\"animationEnd()\"\n>\n <span #text class=\"sky-text-expand-text\" [id]=\"contentSectionId\"></span>\n @if (expandable) {\n @if (!isExpanded) {\n <span class=\"sky-text-expand-ellipsis\">... </span>\n }\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-see-more\"\n [attr.aria-expanded]=\"isModal ? undefined : !!isExpanded\"\n [attr.aria-controls]=\"isModal ? undefined : contentSectionId\"\n [attr.aria-haspopup]=\"isModal ? 'dialog' : undefined\"\n (click)=\"textExpand()\"\n >\n {{ buttonText }}\n </button>\n }\n</div>\n", styles: [".sky-text-expand-container:not(.sky-theme-modern *){--sky-text-expand-see-more-margin-left: 5px}.sky-text-expand-ellipsis{letter-spacing:2px;white-space:nowrap}.sky-text-expand-space{white-space:normal}.sky-text-expand-see-more{white-space:nowrap;margin-left:var(--sky-text-expand-see-more-margin-left, var(--sky-space-gap-text_action-xs))}.sky-text-expand-text{margin:0;white-space:pre-wrap}.sky-text-expand-container{word-break:break-word;word-wrap:break-word;overflow:hidden;height:auto;transition-duration:var(--sky-global-duration-medium);transition-property:max-height;transition-timing-function:ease}.sky-text-expand-modal-content{white-space:pre-line;word-wrap:break-word}\n"] }]
2441
+ }], ctorParameters: () => [{ type: i5$1.SkyLibResourcesService }, { type: i1$4.SkyModalService }, { type: SkyTextExpandAdapterService }], propDecorators: { expandModalTitle: [{
2522
2442
  type: Input
2523
2443
  }], maxExpandedLength: [{
2524
2444
  type: Input
@@ -2546,13 +2466,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
2546
2466
 
2547
2467
  class SkyTextExpandModule {
2548
2468
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2549
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandModule, declarations: [SkyTextExpandComponent], exports: [SkyTextExpandComponent] }); }
2469
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandModule, imports: [SkyTextExpandComponent], exports: [SkyTextExpandComponent] }); }
2550
2470
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandModule }); }
2551
2471
  }
2552
2472
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandModule, decorators: [{
2553
2473
  type: NgModule,
2554
2474
  args: [{
2555
- declarations: [SkyTextExpandComponent],
2475
+ imports: [SkyTextExpandComponent],
2556
2476
  exports: [SkyTextExpandComponent],
2557
2477
  }]
2558
2478
  }] });
@@ -2580,6 +2500,9 @@ class SkyTextExpandRepeaterAdapterService {
2580
2500
  removeContainerMaxHeight(containerEl) {
2581
2501
  this.#renderer.removeStyle(containerEl.nativeElement, 'max-height');
2582
2502
  }
2503
+ setContainerMaxHeight(containerEl, height) {
2504
+ this.#renderer.setStyle(containerEl.nativeElement, 'max-height', `${height}px`);
2505
+ }
2583
2506
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandRepeaterAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
2584
2507
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandRepeaterAdapterService }); }
2585
2508
  }
@@ -2621,7 +2544,6 @@ class SkyTextExpandRepeaterComponent {
2621
2544
  this.expandable = false;
2622
2545
  this.contentSectionId = `sky-text-expand-repeater-content-${++nextId}`;
2623
2546
  this.isExpanded = signal(false, ...(ngDevMode ? [{ debugName: "isExpanded" }] : []));
2624
- this.transitionHeight = 1;
2625
2547
  this.#resources = inject(SkyLibResourcesService);
2626
2548
  this.#seeMoreText = toSignal(this.#resources.getString('skyux_text_expand_see_more'), { initialValue: '' });
2627
2549
  this.#seeLessText = toSignal(this.#resources.getString('skyux_text_expand_see_less'), { initialValue: '' });
@@ -2645,18 +2567,15 @@ class SkyTextExpandRepeaterComponent {
2645
2567
  });
2646
2568
  }
2647
2569
  animationEnd() {
2648
- // Ensure all items that should be hidden are hidden. This is because we need them shown during the animation window for visual purposes.
2570
+ // Ensure all items that should be hidden are hidden.
2649
2571
  if (!this.isExpanded()) {
2650
2572
  this.#hideItems();
2651
2573
  }
2652
- // This set timeout is needed as the `animationEnd` function is called by the angular animation callback prior to the animation setting the style on the element
2653
- setTimeout(() => {
2654
- const containerEl = this.containerEl();
2655
- if (containerEl) {
2656
- // Set height back to auto so the browser can change the height as needed with window changes
2657
- this.#textExpandRepeaterAdapter.removeContainerMaxHeight(containerEl);
2658
- }
2659
- });
2574
+ const containerEl = this.containerEl();
2575
+ if (containerEl) {
2576
+ // Set height back to auto so the browser can change the height as needed with window changes
2577
+ this.#textExpandRepeaterAdapter.removeContainerMaxHeight(containerEl);
2578
+ }
2660
2579
  }
2661
2580
  repeaterExpand() {
2662
2581
  if (!this.isExpanded()) {
@@ -2670,22 +2589,32 @@ class SkyTextExpandRepeaterComponent {
2670
2589
  const adapter = this.#textExpandRepeaterAdapter;
2671
2590
  const container = this.containerEl();
2672
2591
  if (container) {
2592
+ const containerNative = container.nativeElement;
2593
+ // Lock at current height as the transition starting point.
2594
+ const currentHeight = adapter.getContainerHeight(container);
2595
+ adapter.setContainerMaxHeight(container, currentHeight);
2673
2596
  if (expanding) {
2674
2597
  this.#showItems();
2675
2598
  }
2676
2599
  else {
2677
2600
  this.#hideItems();
2678
2601
  }
2679
- this.transitionHeight = adapter.getContainerHeight(container);
2602
+ // Measure the target height.
2603
+ const targetHeight = expanding
2604
+ ? containerNative.scrollHeight
2605
+ : adapter.getContainerHeight(container);
2680
2606
  if (!expanding) {
2681
2607
  // Show all items during animation for visual purposes.
2682
2608
  this.#showItems();
2683
2609
  }
2610
+ // Force reflow so the browser registers the starting max-height.
2611
+ containerNative.getBoundingClientRect();
2612
+ // Set the target max-height to trigger the CSS transition.
2613
+ adapter.setContainerMaxHeight(container, targetHeight);
2684
2614
  this.isExpanded.set(expanding);
2685
2615
  }
2686
2616
  }
2687
2617
  #setup() {
2688
- const container = this.containerEl();
2689
2618
  const maxItems = this.maxItems();
2690
2619
  const value = this.trackedData();
2691
2620
  this.expandable = false;
@@ -2695,10 +2624,6 @@ class SkyTextExpandRepeaterComponent {
2695
2624
  if (maxItems && length > maxItems) {
2696
2625
  this.expandable = true;
2697
2626
  this.#hideItems();
2698
- if (container) {
2699
- this.transitionHeight =
2700
- this.#textExpandRepeaterAdapter.getContainerHeight(container);
2701
- }
2702
2627
  }
2703
2628
  }
2704
2629
  this.#changeDetector.detectChanges();
@@ -2718,49 +2643,30 @@ class SkyTextExpandRepeaterComponent {
2718
2643
  }
2719
2644
  }
2720
2645
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandRepeaterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2721
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyTextExpandRepeaterComponent, isStandalone: false, selector: "sky-text-expand-repeater", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, listStyle: { classPropertyName: "listStyle", publicName: "listStyle", isSignal: true, isRequired: false, transformFunction: null }, maxItems: { classPropertyName: "maxItems", publicName: "maxItems", isSignal: true, isRequired: false, transformFunction: null } }, providers: [SkyTextExpandRepeaterAdapterService], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["container"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"sky-text-expand-repeater\">\n @if (listStyle() !== 'ordered') {\n <ul\n #container\n class=\"sky-text-expand-repeater-container\"\n [@expansionAnimation]=\"{\n value: isExpanded(),\n params: { transitionHeight: transitionHeight }\n }\"\n [id]=\"contentSectionId\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-list-style-none': listStyle() === 'unstyled'\n }\"\n (@expansionAnimation.done)=\"animationEnd()\"\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\" />\n </ul>\n } @else {\n <ol\n #container\n class=\"sky-text-expand-repeater-container\"\n [@expansionAnimation]=\"{\n value: isExpanded(),\n params: { transitionHeight: transitionHeight }\n }\"\n [id]=\"contentSectionId\"\n (@expansionAnimation.done)=\"animationEnd()\"\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\" />\n </ol>\n }\n @if (expandable) {\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-repeater-see-more\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"contentSectionId\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-see-more-list-style-none':\n listStyle() === 'unstyled'\n }\"\n (click)=\"repeaterExpand()\"\n >\n {{ buttonText() }}\n </button>\n }\n</div>\n\n<ng-template #defaultItemTemplate let-item>\n {{ item }}\n</ng-template>\n\n<ng-template #listItemTemplate>\n @for (item of trackedData(); track item.index) {\n <li class=\"sky-text-expand-repeater-item\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate() || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.item }\"\n />\n </li>\n }\n</ng-template>\n", styles: [":host{display:block}.sky-text-expand-repeater-container{overflow-y:hidden;height:auto;margin-bottom:0;margin-top:0}.sky-text-expand-repeater-see-more{white-space:nowrap;margin-left:40px}.sky-text-expand-repeater-list-style-none{list-style-type:none;padding-left:0}.sky-text-expand-repeater-see-more-list-style-none{margin-left:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
2722
- trigger('expansionAnimation', [
2723
- transition(':enter', []),
2724
- state('true', style({
2725
- maxHeight: '{{transitionHeight}}px',
2726
- }), { params: { transitionHeight: 0 } }),
2727
- state('false', style({
2728
- maxHeight: '{{transitionHeight}}px',
2729
- }), { params: { transitionHeight: 0 } }),
2730
- transition('true => false', animate('250ms ease')),
2731
- transition('false => true', animate('250ms ease')),
2732
- transition('void => *', []),
2733
- ]),
2734
- ] }); }
2646
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyTextExpandRepeaterComponent, isStandalone: false, selector: "sky-text-expand-repeater", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, listStyle: { classPropertyName: "listStyle", publicName: "listStyle", isSignal: true, isRequired: false, transformFunction: null }, maxItems: { classPropertyName: "maxItems", publicName: "maxItems", isSignal: true, isRequired: false, transformFunction: null } }, providers: [SkyTextExpandRepeaterAdapterService], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["container"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"sky-text-expand-repeater\">\n @if (listStyle() !== 'ordered') {\n <ul\n #container\n class=\"sky-text-expand-repeater-container\"\n skyTransitionEndHandler\n transitionPropertyToTrack=\"max-height\"\n [transitionTrigger]=\"isExpanded()\"\n [id]=\"contentSectionId\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-list-style-none': listStyle() === 'unstyled'\n }\"\n (transitionEnd)=\"animationEnd()\"\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\" />\n </ul>\n } @else {\n <ol\n #container\n class=\"sky-text-expand-repeater-container\"\n skyTransitionEndHandler\n transitionPropertyToTrack=\"max-height\"\n [transitionTrigger]=\"isExpanded()\"\n [id]=\"contentSectionId\"\n (transitionEnd)=\"animationEnd()\"\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\" />\n </ol>\n }\n @if (expandable) {\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-repeater-see-more\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"contentSectionId\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-see-more-list-style-none':\n listStyle() === 'unstyled'\n }\"\n (click)=\"repeaterExpand()\"\n >\n {{ buttonText() }}\n </button>\n }\n</div>\n\n<ng-template #defaultItemTemplate let-item>\n {{ item }}\n</ng-template>\n\n<ng-template #listItemTemplate>\n @for (item of trackedData(); track item.index) {\n <li class=\"sky-text-expand-repeater-item\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate() || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.item }\"\n />\n </li>\n }\n</ng-template>\n", styles: [":host{display:block}.sky-text-expand-repeater-container{overflow-y:hidden;height:auto;margin-bottom:0;margin-top:0;transition-duration:var(--sky-global-duration-medium);transition-property:max-height;transition-timing-function:ease}.sky-text-expand-repeater-see-more{white-space:nowrap;margin-left:40px}.sky-text-expand-repeater-list-style-none{list-style-type:none;padding-left:0}.sky-text-expand-repeater-see-more-list-style-none{margin-left:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1._SkyTransitionEndHandlerDirective, selector: "[skyTransitionEndHandler]", inputs: ["transitionTrigger", "transitionPropertyToTrack"], outputs: ["transitionEnd"] }] }); }
2735
2647
  }
2736
2648
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandRepeaterComponent, decorators: [{
2737
2649
  type: Component,
2738
- args: [{ animations: [
2739
- trigger('expansionAnimation', [
2740
- transition(':enter', []),
2741
- state('true', style({
2742
- maxHeight: '{{transitionHeight}}px',
2743
- }), { params: { transitionHeight: 0 } }),
2744
- state('false', style({
2745
- maxHeight: '{{transitionHeight}}px',
2746
- }), { params: { transitionHeight: 0 } }),
2747
- transition('true => false', animate('250ms ease')),
2748
- transition('false => true', animate('250ms ease')),
2749
- transition('void => *', []),
2750
- ]),
2751
- ], selector: 'sky-text-expand-repeater', providers: [SkyTextExpandRepeaterAdapterService], standalone: false, template: "<div class=\"sky-text-expand-repeater\">\n @if (listStyle() !== 'ordered') {\n <ul\n #container\n class=\"sky-text-expand-repeater-container\"\n [@expansionAnimation]=\"{\n value: isExpanded(),\n params: { transitionHeight: transitionHeight }\n }\"\n [id]=\"contentSectionId\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-list-style-none': listStyle() === 'unstyled'\n }\"\n (@expansionAnimation.done)=\"animationEnd()\"\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\" />\n </ul>\n } @else {\n <ol\n #container\n class=\"sky-text-expand-repeater-container\"\n [@expansionAnimation]=\"{\n value: isExpanded(),\n params: { transitionHeight: transitionHeight }\n }\"\n [id]=\"contentSectionId\"\n (@expansionAnimation.done)=\"animationEnd()\"\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\" />\n </ol>\n }\n @if (expandable) {\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-repeater-see-more\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"contentSectionId\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-see-more-list-style-none':\n listStyle() === 'unstyled'\n }\"\n (click)=\"repeaterExpand()\"\n >\n {{ buttonText() }}\n </button>\n }\n</div>\n\n<ng-template #defaultItemTemplate let-item>\n {{ item }}\n</ng-template>\n\n<ng-template #listItemTemplate>\n @for (item of trackedData(); track item.index) {\n <li class=\"sky-text-expand-repeater-item\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate() || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.item }\"\n />\n </li>\n }\n</ng-template>\n", styles: [":host{display:block}.sky-text-expand-repeater-container{overflow-y:hidden;height:auto;margin-bottom:0;margin-top:0}.sky-text-expand-repeater-see-more{white-space:nowrap;margin-left:40px}.sky-text-expand-repeater-list-style-none{list-style-type:none;padding-left:0}.sky-text-expand-repeater-see-more-list-style-none{margin-left:0}\n"] }]
2650
+ args: [{ selector: 'sky-text-expand-repeater', providers: [SkyTextExpandRepeaterAdapterService], standalone: false, template: "<div class=\"sky-text-expand-repeater\">\n @if (listStyle() !== 'ordered') {\n <ul\n #container\n class=\"sky-text-expand-repeater-container\"\n skyTransitionEndHandler\n transitionPropertyToTrack=\"max-height\"\n [transitionTrigger]=\"isExpanded()\"\n [id]=\"contentSectionId\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-list-style-none': listStyle() === 'unstyled'\n }\"\n (transitionEnd)=\"animationEnd()\"\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\" />\n </ul>\n } @else {\n <ol\n #container\n class=\"sky-text-expand-repeater-container\"\n skyTransitionEndHandler\n transitionPropertyToTrack=\"max-height\"\n [transitionTrigger]=\"isExpanded()\"\n [id]=\"contentSectionId\"\n (transitionEnd)=\"animationEnd()\"\n >\n <ng-template [ngTemplateOutlet]=\"listItemTemplate\" />\n </ol>\n }\n @if (expandable) {\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link-inline sky-text-expand-repeater-see-more\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"contentSectionId\"\n [ngClass]=\"{\n 'sky-text-expand-repeater-see-more-list-style-none':\n listStyle() === 'unstyled'\n }\"\n (click)=\"repeaterExpand()\"\n >\n {{ buttonText() }}\n </button>\n }\n</div>\n\n<ng-template #defaultItemTemplate let-item>\n {{ item }}\n</ng-template>\n\n<ng-template #listItemTemplate>\n @for (item of trackedData(); track item.index) {\n <li class=\"sky-text-expand-repeater-item\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate() || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.item }\"\n />\n </li>\n }\n</ng-template>\n", styles: [":host{display:block}.sky-text-expand-repeater-container{overflow-y:hidden;height:auto;margin-bottom:0;margin-top:0;transition-duration:var(--sky-global-duration-medium);transition-property:max-height;transition-timing-function:ease}.sky-text-expand-repeater-see-more{white-space:nowrap;margin-left:40px}.sky-text-expand-repeater-list-style-none{list-style-type:none;padding-left:0}.sky-text-expand-repeater-see-more-list-style-none{margin-left:0}\n"] }]
2752
2651
  }], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], listStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "listStyle", required: false }] }], maxItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxItems", required: false }] }], containerEl: [{ type: i0.ViewChild, args: ['container', { isSignal: true }] }] } });
2753
2652
 
2754
2653
  class SkyTextExpandRepeaterModule {
2755
2654
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandRepeaterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2756
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandRepeaterModule, declarations: [SkyTextExpandRepeaterComponent], imports: [SkyLayoutResourcesModule, CommonModule], exports: [SkyTextExpandRepeaterComponent] }); }
2757
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandRepeaterModule, imports: [SkyLayoutResourcesModule, CommonModule] }); }
2655
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandRepeaterModule, declarations: [SkyTextExpandRepeaterComponent], imports: [SkyLayoutResourcesModule,
2656
+ CommonModule,
2657
+ _SkyTransitionEndHandlerDirective], exports: [SkyTextExpandRepeaterComponent] }); }
2658
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandRepeaterModule, imports: [SkyLayoutResourcesModule,
2659
+ CommonModule] }); }
2758
2660
  }
2759
2661
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyTextExpandRepeaterModule, decorators: [{
2760
2662
  type: NgModule,
2761
2663
  args: [{
2762
2664
  declarations: [SkyTextExpandRepeaterComponent],
2763
- imports: [SkyLayoutResourcesModule, CommonModule],
2665
+ imports: [
2666
+ SkyLayoutResourcesModule,
2667
+ CommonModule,
2668
+ _SkyTransitionEndHandlerDirective,
2669
+ ],
2764
2670
  exports: [SkyTextExpandRepeaterComponent],
2765
2671
  }]
2766
2672
  }] });