@skyux/lists 5.9.6 → 5.9.7

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.
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@skyux/indicators'), require('@skyux/theme'), require('@skyux/i18n'), require('rxjs'), require('rxjs/operators'), require('@skyux/core'), require('@skyux/forms'), require('@skyux/inline-form'), require('ng2-dragula'), require('@skyux/animations'), require('@skyux/popovers')) :
3
- typeof define === 'function' && define.amd ? define('@skyux/lists', ['exports', '@angular/common', '@angular/core', '@skyux/indicators', '@skyux/theme', '@skyux/i18n', 'rxjs', 'rxjs/operators', '@skyux/core', '@skyux/forms', '@skyux/inline-form', 'ng2-dragula', '@skyux/animations', '@skyux/popovers'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.skyux = global.skyux || {}, global.skyux.lists = {}), global.ng.common, global.ng.core, global.i1, global.i3, global.i4, global.rxjs, global.rxjs.operators, global.i1$1, global.i6, global.i4$1, global.i3$1, global.animations, global.i1$2));
5
- })(this, (function (exports, i2, i0, i1, i3, i4, rxjs, operators, i1$1, i6, i4$1, i3$1, animations, i1$2) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@skyux/indicators'), require('@skyux/theme'), require('@skyux/i18n'), require('rxjs'), require('rxjs/operators'), require('@skyux/core'), require('@angular/cdk/observers'), require('@skyux/forms'), require('@skyux/inline-form'), require('ng2-dragula'), require('@skyux/animations'), require('@skyux/popovers')) :
3
+ typeof define === 'function' && define.amd ? define('@skyux/lists', ['exports', '@angular/common', '@angular/core', '@skyux/indicators', '@skyux/theme', '@skyux/i18n', 'rxjs', 'rxjs/operators', '@skyux/core', '@angular/cdk/observers', '@skyux/forms', '@skyux/inline-form', 'ng2-dragula', '@skyux/animations', '@skyux/popovers'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.skyux = global.skyux || {}, global.skyux.lists = {}), global.ng.common, global.ng.core, global.i1, global.i3, global.i4, global.rxjs, global.rxjs.operators, global.i1$1, global.ng.cdk.observers, global.i6, global.i4$1, global.i3$1, global.animations, global.i1$2));
5
+ })(this, (function (exports, i2, i0, i1, i3, i4, rxjs, operators, i1$1, i4$2, i6, i4$1, i3$1, animations, i1$2) { 'use strict';
6
6
 
7
7
  function _interopNamespace(e) {
8
8
  if (e && e.__esModule) return e;
@@ -28,6 +28,7 @@
28
28
  var i3__namespace = /*#__PURE__*/_interopNamespace(i3);
29
29
  var i4__namespace = /*#__PURE__*/_interopNamespace(i4);
30
30
  var i1__namespace$1 = /*#__PURE__*/_interopNamespace(i1$1);
31
+ var i4__namespace$2 = /*#__PURE__*/_interopNamespace(i4$2);
31
32
  var i6__namespace = /*#__PURE__*/_interopNamespace(i6);
32
33
  var i4__namespace$1 = /*#__PURE__*/_interopNamespace(i4$1);
33
34
  var i3__namespace$1 = /*#__PURE__*/_interopNamespace(i3$1);
@@ -791,6 +792,11 @@
791
792
  this.enableActiveState = false;
792
793
  this.itemCollapseStateChange = new i0.EventEmitter();
793
794
  this.items = [];
795
+ this.itemRole = new rxjs.BehaviorSubject({
796
+ content: undefined,
797
+ item: undefined,
798
+ title: undefined,
799
+ });
794
800
  this.orderChange = new rxjs.BehaviorSubject(undefined);
795
801
  }
796
802
  SkyRepeaterService.prototype.ngOnDestroy = function () {
@@ -801,7 +807,7 @@
801
807
  SkyRepeaterService.prototype.activateItem = function (item) {
802
808
  if (this.enableActiveState) {
803
809
  /* istanbul ignore else */
804
- if (item) {
810
+ if (item && !item.disabled) {
805
811
  var index = this.items.findIndex(function (i) { return i === item; });
806
812
  this.activeItemIndexChange.next(index);
807
813
  this.activeItemChange.next(item);
@@ -816,7 +822,7 @@
816
822
  }
817
823
  else {
818
824
  var activeItem = this.items[index];
819
- if (activeItem) {
825
+ if (activeItem && !activeItem.disabled) {
820
826
  this.activeItemChange.next(activeItem);
821
827
  }
822
828
  }
@@ -973,6 +979,7 @@
973
979
  this.keyboardReorderingEnabled = false;
974
980
  this.ngUnsubscribe = new rxjs.Subject();
975
981
  this._isCollapsible = true;
982
+ this._isDisabled = false;
976
983
  this._isExpanded = true;
977
984
  this._isSelected = false;
978
985
  this.slideForExpanded(false);
@@ -990,7 +997,51 @@
990
997
  _this.reorderMovedText = translatedStrings[4];
991
998
  _this.reorderButtonLabel = _this.reorderInstructions;
992
999
  });
1000
+ this.itemRole$ = this.repeaterService.itemRole.asObservable();
993
1001
  }
1002
+ Object.defineProperty(SkyRepeaterItemComponent.prototype, "tabindex", {
1003
+ /**
1004
+ * Make the first, non-disabled item tab-focusable.
1005
+ * - Disabled items should not be focusable per [W3C](https://www.w3.org/TR/wai-aria-practices-1.1/#kbd_disabled_controls).
1006
+ * - One item per list/grid/listbox should be tab focusable per [W3C](https://www.w3.org/TR/wai-aria-practices-1.1/#grid).
1007
+ */
1008
+ get: function () {
1009
+ return this.repeaterService.items.filter(function (item) { return !item.disabled; })[0] ===
1010
+ this
1011
+ ? 0
1012
+ : -1;
1013
+ },
1014
+ enumerable: false,
1015
+ configurable: true
1016
+ });
1017
+ Object.defineProperty(SkyRepeaterItemComponent.prototype, "disabled", {
1018
+ get: function () {
1019
+ return this._isDisabled;
1020
+ },
1021
+ /**
1022
+ * Whether to exclude an item when cycling through.
1023
+ */
1024
+ set: function (value) {
1025
+ if (this._isDisabled !== value) {
1026
+ if (value) {
1027
+ this.isSelected = false;
1028
+ this._isDisabled = true;
1029
+ }
1030
+ else {
1031
+ this._isDisabled = false;
1032
+ }
1033
+ if (this.isActive) {
1034
+ this.repeaterService.activateItemByIndex(undefined);
1035
+ }
1036
+ if (this.elementRef.nativeElement.matches(':focus-within')) {
1037
+ this.elementRef.nativeElement.ownerDocument.activeElement.blur();
1038
+ }
1039
+ this.changeDetector.markForCheck();
1040
+ }
1041
+ },
1042
+ enumerable: false,
1043
+ configurable: true
1044
+ });
994
1045
  Object.defineProperty(SkyRepeaterItemComponent.prototype, "isExpanded", {
995
1046
  get: function () {
996
1047
  return this._isExpanded;
@@ -1015,7 +1066,7 @@
1015
1066
  * @default false
1016
1067
  */
1017
1068
  set: function (value) {
1018
- if (value !== this._isSelected) {
1069
+ if (!this.disabled && value !== this._isSelected) {
1019
1070
  this._isSelected = value;
1020
1071
  this.isSelectedChange.emit(this._isSelected);
1021
1072
  }
@@ -1073,6 +1124,74 @@
1073
1124
  this.ngUnsubscribe.complete();
1074
1125
  this.repeaterService.unregisterItem(this);
1075
1126
  };
1127
+ SkyRepeaterItemComponent.prototype.onKeydown = function ($event) {
1128
+ var _this = this;
1129
+ if ([' ', 'Enter', 'Home', 'End', 'ArrowUp', 'ArrowDown'].includes($event.key)) {
1130
+ if ($event.target.matches('input, textarea, select, option, [contenteditable], [contenteditable] *')) {
1131
+ return;
1132
+ }
1133
+ $event.preventDefault();
1134
+ $event.stopPropagation();
1135
+ var activateItem = undefined;
1136
+ /* istanbul ignore else */
1137
+ if ([' ', 'Enter'].includes($event.key)) {
1138
+ if (this.selectable) {
1139
+ this.isSelected = !this.isSelected;
1140
+ }
1141
+ activateItem = this;
1142
+ }
1143
+ /* istanbul ignore else */
1144
+ if (['Home', 'End'].includes($event.key)) {
1145
+ var items = this.repeaterService.items.filter(function (item) { return !item.disabled; });
1146
+ if ($event.key === 'Home') {
1147
+ activateItem = items.shift();
1148
+ }
1149
+ else {
1150
+ activateItem = items.pop();
1151
+ }
1152
+ }
1153
+ /* istanbul ignore else */
1154
+ if (['ArrowUp', 'ArrowDown'].includes($event.key)) {
1155
+ var currentIndex = this.repeaterService.items.findIndex(function (item) { return item === _this; });
1156
+ var sliceFrom = void 0;
1157
+ var sliceTo = void 0;
1158
+ if ($event.key === 'ArrowUp') {
1159
+ sliceFrom = 0;
1160
+ sliceTo = currentIndex;
1161
+ }
1162
+ else {
1163
+ sliceFrom = currentIndex + 1;
1164
+ sliceTo = undefined;
1165
+ }
1166
+ var items = this.repeaterService.items
1167
+ .slice(sliceFrom, sliceTo)
1168
+ .filter(function (item) { return !item.disabled; });
1169
+ activateItem = $event.key === 'ArrowUp' ? items.pop() : items.shift();
1170
+ if (!activateItem) {
1171
+ // Wrap around.
1172
+ if ($event.key === 'ArrowDown') {
1173
+ sliceFrom = 0;
1174
+ sliceTo = currentIndex;
1175
+ }
1176
+ else {
1177
+ sliceFrom = currentIndex + 1;
1178
+ sliceTo = undefined;
1179
+ }
1180
+ var items_1 = this.repeaterService.items
1181
+ .slice(sliceFrom, sliceTo)
1182
+ .filter(function (item) { return !item.disabled; });
1183
+ activateItem = $event.key === 'ArrowUp' ? items_1.pop() : items_1.shift();
1184
+ }
1185
+ }
1186
+ /* istanbul ignore else */
1187
+ if (activateItem && !activateItem.isActive) {
1188
+ this.repeaterService.activateItem(activateItem);
1189
+ if (!activateItem.elementRef.nativeElement.matches(':focus-within')) {
1190
+ activateItem.elementRef.nativeElement.focus();
1191
+ }
1192
+ }
1193
+ }
1194
+ };
1076
1195
  SkyRepeaterItemComponent.prototype.headerClick = function () {
1077
1196
  if (this.isCollapsible) {
1078
1197
  this.updateForExpanded(!this.isExpanded, true);
@@ -1179,29 +1298,6 @@
1179
1298
  this.reorderButtonLabel = this.reorderInstructions;
1180
1299
  this.reorderState = undefined;
1181
1300
  };
1182
- SkyRepeaterItemComponent.prototype.onItemKeyDown = function (event) {
1183
- /*istanbul ignore else */
1184
- if (event.key) {
1185
- switch (event.key.toLowerCase()) {
1186
- case ' ':
1187
- case 'enter':
1188
- /* istanbul ignore else */
1189
- /* Sanity check */
1190
- // Space/enter should never execute unless focused on the parent item element.
1191
- if (event.target === this.itemRef.nativeElement) {
1192
- if (this.selectable) {
1193
- this.isSelected = !this.isSelected;
1194
- }
1195
- this.repeaterService.activateItem(this);
1196
- event.preventDefault();
1197
- }
1198
- break;
1199
- /* istanbul ignore next */
1200
- default:
1201
- break;
1202
- }
1203
- }
1204
- };
1205
1301
  SkyRepeaterItemComponent.prototype.slideForExpanded = function (animate) {
1206
1302
  this.slideDirection = this.isExpanded ? 'down' : 'up';
1207
1303
  };
@@ -1256,17 +1352,21 @@
1256
1352
  return SkyRepeaterItemComponent;
1257
1353
  }());
1258
1354
  SkyRepeaterItemComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: SkyRepeaterItemComponent, deps: [{ token: SkyRepeaterService }, { token: i0__namespace.ChangeDetectorRef }, { token: SkyRepeaterAdapterService }, { token: i0__namespace.ElementRef }, { token: i4__namespace.SkyLibResourcesService }], target: i0__namespace.ɵɵFactoryTarget.Component });
1259
- SkyRepeaterItemComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkyRepeaterItemComponent, selector: "sky-repeater-item", inputs: { itemName: "itemName", inlineFormConfig: "inlineFormConfig", inlineFormTemplate: "inlineFormTemplate", isExpanded: "isExpanded", isSelected: "isSelected", reorderable: "reorderable", selectable: "selectable", showInlineForm: "showInlineForm", tag: "tag" }, outputs: { collapse: "collapse", expand: "expand", inlineFormClose: "inlineFormClose", isSelectedChange: "isSelectedChange" }, host: { properties: { "class": "this.repeaterGroupClass" } }, queries: [{ propertyName: "contextMenu", first: true, predicate: SkyRepeaterItemContextMenuComponent, descendants: true, read: i0.ElementRef }, { propertyName: "repeaterItemContentComponents", predicate: SkyRepeaterItemContentComponent }], viewQueries: [{ propertyName: "grabHandle", first: true, predicate: ["grabHandle"], descendants: true, read: i0.ElementRef }, { propertyName: "itemContentRef", first: true, predicate: ["itemContentRef"], descendants: true, read: i0.ElementRef }, { propertyName: "itemHeaderRef", first: true, predicate: ["itemHeaderRef"], descendants: true, read: i0.ElementRef }, { propertyName: "itemRef", first: true, predicate: ["itemRef"], descendants: true, read: i0.ElementRef }], ngImport: i0__namespace, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n role=\"option\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-selected]=\"selectable ? isSelected : null\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n (keydown)=\"onItemKeyDown($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div class=\"sky-repeater-item-left\">\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\"></sky-icon>\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div class=\"sky-repeater-item-title sky-emphasized\" #titleRef>\n <ng-content select=\"sky-repeater-item-title\"></ng-content>\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\"></sky-icon>\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? ('skyux_repeater_item_expand' | skyLibResources: itemName)\n : ('skyux_repeater_item_expand_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n >\n <ng-content select=\"sky-repeater-item-content\"></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-moz-grab;padding:0;margin-right:10px}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-webkit-grabbing}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:transparent;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"], components: [{ type: i4__namespace$1.λ1, selector: "sky-inline-form", inputs: ["config", "template", "showForm"], outputs: ["close"] }, { type: i1__namespace.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { type: i6__namespace.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "icon", "checkboxType", "checked", "required"], outputs: ["change", "checkedChange", "disabledChange"] }, { type: i1__namespace.λ2, selector: "sky-chevron", inputs: ["ariaControls", "ariaLabel", "direction", "disabled"], outputs: ["directionChange"] }], directives: [{ type: i2__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "skyLibResources": i4__namespace.SkyLibResourcesPipe }, animations: [animations.skyAnimationSlide], encapsulation: i0__namespace.ViewEncapsulation.None });
1355
+ SkyRepeaterItemComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkyRepeaterItemComponent, selector: "sky-repeater-item", inputs: { disabled: "disabled", itemName: "itemName", inlineFormConfig: "inlineFormConfig", inlineFormTemplate: "inlineFormTemplate", isExpanded: "isExpanded", isSelected: "isSelected", reorderable: "reorderable", selectable: "selectable", showInlineForm: "showInlineForm", tag: "tag" }, outputs: { collapse: "collapse", expand: "expand", inlineFormClose: "inlineFormClose", isSelectedChange: "isSelectedChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "tabindex": "this.tabindex", "class": "this.repeaterGroupClass" } }, queries: [{ propertyName: "contextMenu", first: true, predicate: SkyRepeaterItemContextMenuComponent, descendants: true, read: i0.ElementRef }, { propertyName: "repeaterItemContentComponents", predicate: SkyRepeaterItemContentComponent }], viewQueries: [{ propertyName: "grabHandle", first: true, predicate: ["grabHandle"], descendants: true, read: i0.ElementRef }, { propertyName: "itemContentRef", first: true, predicate: ["itemContentRef"], descendants: true, read: i0.ElementRef }, { propertyName: "itemHeaderRef", first: true, predicate: ["itemHeaderRef"], descendants: true, read: i0.ElementRef }, { propertyName: "itemRef", first: true, predicate: ["itemRef"], descendants: true, read: i0.ElementRef }], ngImport: i0__namespace, template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-selected]=\"selectable ? isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async).item\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div class=\"sky-repeater-item-left\">\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\"></sky-icon>\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div\n class=\"sky-repeater-item-title sky-emphasized\"\n #titleRef\n [attr.role]=\"(itemRole$ | async).title\"\n >\n <ng-content select=\"sky-repeater-item-title\"></ng-content>\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\"></sky-icon>\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? ('skyux_repeater_item_expand' | skyLibResources: itemName)\n : ('skyux_repeater_item_expand_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async).content\"\n >\n <ng-content select=\"sky-repeater-item-content\"></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-moz-grab;padding:0;margin-right:10px}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-webkit-grabbing}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:transparent;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"], components: [{ type: i4__namespace$1.λ1, selector: "sky-inline-form", inputs: ["config", "template", "showForm"], outputs: ["close"] }, { type: i1__namespace.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { type: i6__namespace.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "icon", "checkboxType", "checked", "required"], outputs: ["change", "checkedChange", "disabledChange"] }, { type: i1__namespace.λ2, selector: "sky-chevron", inputs: ["ariaControls", "ariaLabel", "direction", "disabled"], outputs: ["directionChange"] }], directives: [{ type: i2__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i2__namespace.AsyncPipe, "skyLibResources": i4__namespace.SkyLibResourcesPipe }, animations: [animations.skyAnimationSlide], encapsulation: i0__namespace.ViewEncapsulation.None });
1260
1356
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: SkyRepeaterItemComponent, decorators: [{
1261
1357
  type: i0.Component,
1262
1358
  args: [{
1263
1359
  selector: 'sky-repeater-item',
1264
1360
  styles: ["sky-repeater-item .sky-repeater-item{display:flex;border-bottom:1px dotted #cdcfd2;padding-top:0;position:relative;transition:box-shadow .15s;align-items:flex-start}sky-repeater-item .sky-repeater-item sky-inline-form{display:block;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form>:first-child,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-first,sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{display:flex;flex:1 0 auto;width:100%}sky-repeater-item .sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:10px}sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:#eeeeef;color:#212327;padding-left:6px;border-left:4px solid #00b4f1}sky-repeater-item .sky-repeater-item.sky-repeater-item-active .sky-inline-delete{margin-left:-4px;width:calc(100% + 4px)}sky-repeater-item .sky-repeater-item-left{display:flex;padding-top:10px;align-items:center}sky-repeater-item .sky-repeater-item-left sky-checkbox{display:flex}sky-repeater-item .sky-repeater-item-right{max-width:100%;flex-grow:1;align-self:center}sky-repeater-item .sky-repeater-item-header{align-items:center;display:flex;padding-top:10px}sky-repeater-item .sky-repeater-item-chevron{margin-left:10px}sky-repeater-item .sky-repeater-item-chevron-placeholder{height:24px}sky-repeater-item .sky-repeater-item-chevron-placeholder-with-context{height:29px}sky-repeater-item .sky-repeater-item-context-menu{padding:0 10px 0 0}sky-repeater-item .sky-repeater-item-checkbox{padding:0 5px 0 0}sky-repeater-item .sky-repeater-item-selected{background-color:#f1eef6;transition:background-color .15s}sky-repeater-item .sky-repeater-item-title{margin:0;flex-grow:1;line-height:1.1;color:#212327}sky-repeater-item sky-repeater-item-content{display:block;margin:10px 0 0}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-header{cursor:pointer}sky-repeater-item .sky-repeater-item-collapsible .sky-repeater-item-content{padding-right:34px}sky-repeater-item .sky-repeater-item-collapsed .sky-repeater-item-content{display:none}sky-repeater-item .sky-repeater-item-grab-handle{color:#cdcfd2;cursor:pointer;border:0;width:24px;height:24px;cursor:grab;cursor:-moz-grab;padding:0;margin-right:10px}sky-repeater-item .sky-repeater-item-grab-handle:hover{color:#979ba2;transition:color .15s}sky-repeater-item.sky-repeater-item-dragging.gu-mirror{opacity:initial;-ms-filter:initial;filter:initial;background-color:#fff;box-shadow:0 0 5px #0000004d}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item{background-color:#d8d8d8}sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-left,sky-repeater-item.sky-repeater-item-dragging.gu-transit .sky-repeater-item .sky-repeater-item-right{visibility:hidden}sky-repeater-item.sky-repeater-item-dragging .sky-repeater-item-grab-handle{cursor:grabbing;cursor:-webkit-grabbing}.sky-theme-modern sky-repeater-item .sky-repeater-item{padding-bottom:20px}.sky-theme-modern sky-repeater-item .sky-repeater-item.sky-repeater-item-active{background-color:transparent;border-left-color:#1870b8}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus,.sky-theme-modern sky-repeater-item .sky-repeater-item:active:focus{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern sky-repeater-item .sky-repeater-item:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern sky-repeater-item .sky-repeater-item-header[hidden]+.sky-repeater-item-content sky-repeater-item-content{margin:20px 0 0}.sky-theme-modern sky-repeater-item .sky-repeater-item-header,.sky-theme-modern sky-repeater-item .sky-repeater-item-left{padding-top:20px}.sky-theme-modern sky-repeater-item sky-inline-form .sky-slide-dissolve-last{padding-top:20px}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item{border-bottom-color:#686c73}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item.sky-repeater-item-active{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark sky-repeater-item .sky-repeater-item-title{color:#fbfcfe}\n"],
1265
- template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n role=\"option\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-selected]=\"selectable ? isSelected : null\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n (keydown)=\"onItemKeyDown($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div class=\"sky-repeater-item-left\">\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\"></sky-icon>\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div class=\"sky-repeater-item-title sky-emphasized\" #titleRef>\n <ng-content select=\"sky-repeater-item-title\"></ng-content>\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\"></sky-icon>\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? ('skyux_repeater_item_expand' | skyLibResources: itemName)\n : ('skyux_repeater_item_expand_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n >\n <ng-content select=\"sky-repeater-item-content\"></ng-content>\n </div>\n </div>\n</ng-template>\n",
1361
+ template: "<div\n class=\"sky-repeater-item sky-padding-even-default\"\n [attr.aria-label]=\"itemName\"\n [attr.aria-selected]=\"selectable ? isSelected : undefined\"\n [attr.role]=\"(itemRole$ | async).item\"\n [ngClass]=\"{\n 'sky-repeater-item-active': isActive,\n 'sky-repeater-item-collapsible': isCollapsible,\n 'sky-repeater-item-selected': isSelected\n }\"\n (click)=\"onRepeaterItemClick($event)\"\n #itemRef\n>\n <div #inlineDelete>\n <ng-content select=\"sky-inline-delete\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"inlineFormTemplate\">\n <sky-inline-form\n [config]=\"inlineFormConfig\"\n [showForm]=\"showInlineForm\"\n [template]=\"inlineFormTemplate\"\n (close)=\"onInlineFormClose($event)\"\n >\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </sky-inline-form>\n </ng-container>\n\n <ng-container *ngIf=\"!inlineFormTemplate\">\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemLeft\"></ng-container>\n <ng-container *ngTemplateOutlet=\"skyRepeaterItemRight\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #skyRepeaterItemLeft>\n <div class=\"sky-repeater-item-left\">\n <ng-container *ngIf=\"reorderable\">\n <span\n aria-live=\"assertive\"\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-state'\"\n >\n {{ reorderState }}\n </span>\n <span\n class=\"sky-screen-reader-only\"\n [id]=\"contentId + '-reorder-instructions'\"\n >{{ reorderButtonLabel }}</span\n >\n <button\n class=\"sky-btn sky-tile-tools-control sky-repeater-item-grab-handle\"\n type=\"button\"\n [attr.aria-describedby]=\"contentId + '-reorder-instructions'\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_label_default' | skyLibResources)\n \"\n (blur)=\"onReorderHandleBlur($event)\"\n (keydown)=\"onReorderHandleKeyDown($event)\"\n #grabHandle\n >\n <sky-icon icon=\"arrows-v\"></sky-icon>\n </button>\n </ng-container>\n <sky-checkbox\n *ngIf=\"selectable\"\n class=\"sky-repeater-item-checkbox\"\n [checked]=\"isSelected\"\n [label]=\"\n itemName\n ? ('skyux_repeater_item_checkbox_label' | skyLibResources: itemName)\n : ('skyux_repeater_item_checkbox_label_default' | skyLibResources)\n \"\n (change)=\"onCheckboxChange($event)\"\n >\n </sky-checkbox>\n <div\n class=\"sky-repeater-item-context-menu\"\n [hidden]=\"contextMenuEl.children.length === 0\"\n #contextMenuEl\n >\n <ng-content select=\"sky-repeater-item-context-menu\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #skyRepeaterItemRight>\n <div class=\"sky-repeater-item-right\" #itemHeaderRef>\n <div\n class=\"sky-repeater-item-header\"\n [hidden]=\"titleRef.children.length === 0\"\n (click)=\"headerClick()\"\n >\n <div\n class=\"sky-repeater-item-title sky-emphasized\"\n #titleRef\n [attr.role]=\"(itemRole$ | async).title\"\n >\n <ng-content select=\"sky-repeater-item-title\"></ng-content>\n </div>\n <button\n *ngIf=\"reorderable\"\n class=\"sky-btn sky-btn-link sky-repeater-item-reorder-top\"\n type=\"button\"\n [attr.aria-label]=\"\n itemName\n ? ('skyux_repeater_item_reorder_top_label'\n | skyLibResources: itemName)\n : ('skyux_repeater_item_reorder_top_label_default'\n | skyLibResources)\n \"\n (click)=\"moveToTop($event)\"\n >\n <sky-icon icon=\"arrow-circle-up\"></sky-icon>\n {{ 'skyux_repeater_item_reorder_top' | skyLibResources }}\n </button>\n <div *ngIf=\"isCollapsible\" class=\"sky-repeater-item-chevron\">\n <sky-chevron\n [ariaControls]=\"contentId\"\n [ariaLabel]=\"\n itemName\n ? ('skyux_repeater_item_expand' | skyLibResources: itemName)\n : ('skyux_repeater_item_expand_default' | skyLibResources)\n \"\n [direction]=\"isExpanded ? 'up' : 'down'\"\n (directionChange)=\"chevronDirectionChange($event)\"\n >\n </sky-chevron>\n </div>\n <!-- Used for when the chevron is hidden to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"!isCollapsible && !contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder\"\n ></div>\n <!-- Used to ensure that the right side is the same height as the left.-->\n <div\n *ngIf=\"contextMenu\"\n class=\"sky-repeater-item-chevron-placeholder-with-context\"\n ></div>\n </div>\n <div\n class=\"sky-repeater-item-content\"\n [id]=\"contentId\"\n [@skyAnimationSlide]=\"slideDirection\"\n #itemContentRef\n [attr.role]=\"(itemRole$ | async).content\"\n >\n <ng-content select=\"sky-repeater-item-content\"></ng-content>\n </div>\n </div>\n</ng-template>\n",
1266
1362
  animations: [animations.skyAnimationSlide],
1267
1363
  encapsulation: i0.ViewEncapsulation.None,
1268
1364
  }]
1269
- }], ctorParameters: function () { return [{ type: SkyRepeaterService }, { type: i0__namespace.ChangeDetectorRef }, { type: SkyRepeaterAdapterService }, { type: i0__namespace.ElementRef }, { type: i4__namespace.SkyLibResourcesService }]; }, propDecorators: { itemName: [{
1365
+ }], ctorParameters: function () { return [{ type: SkyRepeaterService }, { type: i0__namespace.ChangeDetectorRef }, { type: SkyRepeaterAdapterService }, { type: i0__namespace.ElementRef }, { type: i4__namespace.SkyLibResourcesService }]; }, propDecorators: { tabindex: [{
1366
+ type: i0.HostBinding
1367
+ }], disabled: [{
1368
+ type: i0.Input
1369
+ }], itemName: [{
1270
1370
  type: i0.Input
1271
1371
  }], inlineFormConfig: [{
1272
1372
  type: i0.Input
@@ -1313,6 +1413,9 @@
1313
1413
  }], repeaterItemContentComponents: [{
1314
1414
  type: i0.ContentChildren,
1315
1415
  args: [SkyRepeaterItemContentComponent]
1416
+ }], onKeydown: [{
1417
+ type: i0.HostListener,
1418
+ args: ['keydown', ['$event']]
1316
1419
  }] } });
1317
1420
 
1318
1421
  /*! *****************************************************************************
@@ -1749,6 +1852,7 @@
1749
1852
  if (_this.activeIndex !== undefined) {
1750
1853
  _this.repeaterService.activateItemByIndex(_this.activeIndex);
1751
1854
  }
1855
+ _this.updateRole();
1752
1856
  });
1753
1857
  });
1754
1858
  setTimeout(function () {
@@ -1756,6 +1860,7 @@
1756
1860
  _this.items.forEach(function (item) {
1757
1861
  item.reorderable = _this.reorderable;
1758
1862
  });
1863
+ _this.updateRole();
1759
1864
  }, 0);
1760
1865
  };
1761
1866
  SkyRepeaterComponent.prototype.ngOnChanges = function (changes) {
@@ -1771,6 +1876,7 @@
1771
1876
  if (this.items) {
1772
1877
  this.items.forEach(function (item) { return (item.reorderable = _this.reorderable); });
1773
1878
  }
1879
+ this.updateRole();
1774
1880
  this.changeDetector.markForCheck();
1775
1881
  }
1776
1882
  };
@@ -1779,6 +1885,12 @@
1779
1885
  this.ngUnsubscribe.complete();
1780
1886
  this.destroyDragAndDrop();
1781
1887
  };
1888
+ SkyRepeaterComponent.prototype.ngOnInit = function () {
1889
+ this.updateRole();
1890
+ };
1891
+ SkyRepeaterComponent.prototype.onCdkObserveContent = function () {
1892
+ this.updateRole();
1893
+ };
1782
1894
  SkyRepeaterComponent.prototype.updateForExpandMode = function (itemAdded) {
1783
1895
  if (this.items) {
1784
1896
  var foundExpanded_1 = false;
@@ -1797,6 +1909,7 @@
1797
1909
  foundExpanded_1 = true;
1798
1910
  }
1799
1911
  });
1912
+ this.updateRole();
1800
1913
  }
1801
1914
  };
1802
1915
  SkyRepeaterComponent.prototype.initializeDragAndDrop = function () {
@@ -1814,8 +1927,8 @@
1814
1927
  var draggedItemIndex;
1815
1928
  this.dragulaService.drag
1816
1929
  .pipe(operators.takeUntil(this.dragulaUnsubscribe))
1817
- .subscribe(function (_a) {
1818
- var _b = __read(_a, 2), groupName = _b[0], subject = _b[1];
1930
+ .subscribe(function (_c) {
1931
+ var _d = __read(_c, 2), groupName = _d[0], subject = _d[1];
1819
1932
  /* istanbul ignore else */
1820
1933
  if (groupName === _this.dragulaGroupName) {
1821
1934
  _this.renderer.addClass(subject, 'sky-repeater-item-dragging');
@@ -1824,8 +1937,8 @@
1824
1937
  });
1825
1938
  this.dragulaService.dragend
1826
1939
  .pipe(operators.takeUntil(this.dragulaUnsubscribe))
1827
- .subscribe(function (_a) {
1828
- var _b = __read(_a, 2), groupName = _b[0], subject = _b[1];
1940
+ .subscribe(function (_c) {
1941
+ var _d = __read(_c, 2), groupName = _d[0], subject = _d[1];
1829
1942
  /* istanbul ignore else */
1830
1943
  if (groupName === _this.dragulaGroupName) {
1831
1944
  _this.renderer.removeClass(subject, 'sky-repeater-item-dragging');
@@ -1864,16 +1977,66 @@
1864
1977
  return item.tag !== undefined;
1865
1978
  });
1866
1979
  };
1980
+ SkyRepeaterComponent.prototype.updateRole = function () {
1981
+ // Determine a role using a hierarchy based on https://www.w3.org/TR/wai-aria-practices-1.1/
1982
+ // 1. If there are one or more interactions in the repeater item projected content, use grid.
1983
+ // 2. If there are selectable repeater items and no other interactions, use listbox.
1984
+ // 3. If there are no interactions, use list.
1985
+ var _a, _b;
1986
+ // Default to list role.
1987
+ var autoRole = 'list';
1988
+ var roleMap = {
1989
+ list: { item: 'listitem', title: undefined, content: undefined },
1990
+ listbox: { item: 'option', title: undefined, content: undefined },
1991
+ grid: { item: 'row', title: 'rowheader', content: 'gridcell' },
1992
+ };
1993
+ // Based on https://html.spec.whatwg.org/multipage/dom.html#interactive-content
1994
+ var interactionSelector = [
1995
+ 'a[href]',
1996
+ 'audio[controls]',
1997
+ 'button',
1998
+ 'details',
1999
+ 'embed',
2000
+ 'iframe',
2001
+ 'img[usemap]',
2002
+ 'input:not([type="hidden"])',
2003
+ 'label',
2004
+ 'select',
2005
+ 'textarea',
2006
+ 'video[controls]',
2007
+ '[contenteditable]',
2008
+ '.sky-repeater[role="grid"]',
2009
+ ]
2010
+ .map(function (selector) { return "sky-repeater-item-title " + selector + ":not([hidden]), sky-repeater-item-content " + selector + ":not([hidden])"; })
2011
+ .concat(["skyux-dropdown"])
2012
+ .join(', ');
2013
+ var hasInteraction = this.reorderable ||
2014
+ ((_a = this.items) === null || _a === void 0 ? void 0 : _a.some(function (item) { return item.isCollapsible; })) ||
2015
+ !!this.elementRef.nativeElement.querySelector(interactionSelector);
2016
+ if (hasInteraction) {
2017
+ // If the repeater matches interaction selector https://www.w3.org/TR/wai-aria-practices-1.1/#grid
2018
+ autoRole = 'grid';
2019
+ }
2020
+ else if ((_b = this.items) === null || _b === void 0 ? void 0 : _b.some(function (item) { return item.selectable; })) {
2021
+ // If the only interaction is select https://www.w3.org/TR/wai-aria-practices-1.1/#Listbox
2022
+ autoRole = 'listbox';
2023
+ }
2024
+ if (this.role !== autoRole) {
2025
+ this.repeaterService.itemRole.next(Object.assign({}, roleMap[autoRole]));
2026
+ this.role = "" + autoRole;
2027
+ this.changeDetector.markForCheck();
2028
+ }
2029
+ };
1867
2030
  return SkyRepeaterComponent;
1868
2031
  }());
1869
2032
  SkyRepeaterComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: SkyRepeaterComponent, deps: [{ token: i0__namespace.ChangeDetectorRef }, { token: SkyRepeaterService }, { token: SkyRepeaterAdapterService }, { token: i3__namespace$1.DragulaService }, { token: i0__namespace.ElementRef }, { token: i0__namespace.Renderer2 }], target: i0__namespace.ɵɵFactoryTarget.Component });
1870
- SkyRepeaterComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkyRepeaterComponent, selector: "sky-repeater", inputs: { activeIndex: "activeIndex", ariaLabel: "ariaLabel", reorderable: "reorderable", expandMode: "expandMode" }, outputs: { activeIndexChange: "activeIndexChange", orderChange: "orderChange" }, providers: [SkyRepeaterService, SkyRepeaterAdapterService], queries: [{ propertyName: "items", predicate: SkyRepeaterItemComponent }], usesOnChanges: true, ngImport: i0__namespace, template: "<ng-container #repeaterHost>\n <div\n class=\"sky-repeater\"\n role=\"listbox\"\n [attr.aria-label]=\"ariaLabel || ('skyux_repeater_label' | skyLibResources)\"\n [dragula]=\"dragulaGroupName\"\n >\n <ng-content></ng-content>\n </div>\n</ng-container>\n", styles: [".sky-repeater{padding:0}\n"], directives: [{ type: i3__namespace$1.DragulaDirective, selector: "[dragula]", inputs: ["dragula", "dragulaModel", "dragulaOptions"] }], pipes: { "skyLibResources": i4__namespace.SkyLibResourcesPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
2033
+ SkyRepeaterComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkyRepeaterComponent, selector: "sky-repeater", inputs: { activeIndex: "activeIndex", ariaLabel: "ariaLabel", reorderable: "reorderable", expandMode: "expandMode" }, outputs: { activeIndexChange: "activeIndexChange", orderChange: "orderChange" }, providers: [SkyRepeaterService, SkyRepeaterAdapterService], queries: [{ propertyName: "items", predicate: SkyRepeaterItemComponent }], usesOnChanges: true, ngImport: i0__namespace, template: "<ng-container #repeaterHost>\n <div\n class=\"sky-repeater\"\n [attr.role]=\"role\"\n [attr.aria-label]=\"ariaLabel || ('skyux_repeater_label' | skyLibResources)\"\n [dragula]=\"dragulaGroupName\"\n (cdkObserveContent)=\"onCdkObserveContent()\"\n >\n <ng-content></ng-content>\n </div>\n</ng-container>\n", styles: [".sky-repeater{padding:0}\n"], directives: [{ type: i3__namespace$1.DragulaDirective, selector: "[dragula]", inputs: ["dragula", "dragulaModel", "dragulaOptions"] }, { type: i4__namespace$2.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }], pipes: { "skyLibResources": i4__namespace.SkyLibResourcesPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
1871
2034
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: SkyRepeaterComponent, decorators: [{
1872
2035
  type: i0.Component,
1873
2036
  args: [{
1874
2037
  selector: 'sky-repeater',
1875
2038
  styles: [".sky-repeater{padding:0}\n"],
1876
- template: "<ng-container #repeaterHost>\n <div\n class=\"sky-repeater\"\n role=\"listbox\"\n [attr.aria-label]=\"ariaLabel || ('skyux_repeater_label' | skyLibResources)\"\n [dragula]=\"dragulaGroupName\"\n >\n <ng-content></ng-content>\n </div>\n</ng-container>\n",
2039
+ template: "<ng-container #repeaterHost>\n <div\n class=\"sky-repeater\"\n [attr.role]=\"role\"\n [attr.aria-label]=\"ariaLabel || ('skyux_repeater_label' | skyLibResources)\"\n [dragula]=\"dragulaGroupName\"\n (cdkObserveContent)=\"onCdkObserveContent()\"\n >\n <ng-content></ng-content>\n </div>\n</ng-container>\n",
1877
2040
  providers: [SkyRepeaterService, SkyRepeaterAdapterService],
1878
2041
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
1879
2042
  }]
@@ -1906,6 +2069,7 @@
1906
2069
  SkyRepeaterItemContextMenuComponent,
1907
2070
  SkyRepeaterItemTitleComponent], imports: [i2.CommonModule,
1908
2071
  i3$1.DragulaModule,
2072
+ i4$2.ObserversModule,
1909
2073
  i1.SkyChevronModule,
1910
2074
  i6.SkyCheckboxModule,
1911
2075
  i1.SkyIconModule,
@@ -1918,6 +2082,7 @@
1918
2082
  SkyRepeaterModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: SkyRepeaterModule, imports: [[
1919
2083
  i2.CommonModule,
1920
2084
  i3$1.DragulaModule,
2085
+ i4$2.ObserversModule,
1921
2086
  i1.SkyChevronModule,
1922
2087
  i6.SkyCheckboxModule,
1923
2088
  i1.SkyIconModule,
@@ -1937,6 +2102,7 @@
1937
2102
  imports: [
1938
2103
  i2.CommonModule,
1939
2104
  i3$1.DragulaModule,
2105
+ i4$2.ObserversModule,
1940
2106
  i1.SkyChevronModule,
1941
2107
  i6.SkyCheckboxModule,
1942
2108
  i1.SkyIconModule,