@koobiq/components 17.0.0-rc.7 → 17.0.0-rc.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/alert/alert.component.scss +12 -9
  2. package/badge/badge.component.scss +7 -7
  3. package/button-toggle/button-toggle.scss +5 -2
  4. package/card/_card-theme.scss +1 -1
  5. package/checkbox/checkbox.scss +10 -3
  6. package/code-block/_code-block-theme.scss +1 -1
  7. package/core/form-field/form-field-ref.d.ts +2 -0
  8. package/core/locales/locale-service.d.ts +1 -0
  9. package/core/select/common.d.ts +35 -0
  10. package/core/select/index.d.ts +1 -0
  11. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +1 -0
  12. package/dropdown/dropdown-item.scss +2 -0
  13. package/dropdown/dropdown-trigger.directive.d.ts +2 -2
  14. package/esm2022/alert/alert.component.mjs +2 -2
  15. package/esm2022/badge/badge.component.mjs +2 -2
  16. package/esm2022/button/button.component.mjs +2 -2
  17. package/esm2022/button-toggle/button-toggle.component.mjs +2 -2
  18. package/esm2022/checkbox/checkbox.mjs +2 -2
  19. package/esm2022/code-block/code-block.component.mjs +1 -1
  20. package/esm2022/core/form-field/form-field-ref.mjs +1 -1
  21. package/esm2022/core/locales/locale-service.mjs +5 -2
  22. package/esm2022/core/option/option.mjs +2 -2
  23. package/esm2022/core/select/common.mjs +120 -0
  24. package/esm2022/core/select/index.mjs +2 -1
  25. package/esm2022/core/version.mjs +2 -2
  26. package/esm2022/datepicker/calendar-header.component.mjs +1 -1
  27. package/esm2022/dropdown/dropdown-item.component.mjs +2 -2
  28. package/esm2022/dropdown/dropdown-trigger.directive.mjs +4 -4
  29. package/esm2022/file-upload/multiple-file-upload.component.mjs +2 -2
  30. package/esm2022/file-upload/single-file-upload.component.mjs +2 -2
  31. package/esm2022/form-field/form-field.mjs +2 -2
  32. package/esm2022/form-field/hint.mjs +2 -2
  33. package/esm2022/form-field/password-hint.mjs +2 -2
  34. package/esm2022/list/list-selection.component.mjs +2 -2
  35. package/esm2022/list/list.component.mjs +2 -2
  36. package/esm2022/navbar/navbar.component.mjs +2 -2
  37. package/esm2022/navbar/vertical-navbar.component.mjs +2 -2
  38. package/esm2022/popover/popover-confirm.component.mjs +3 -3
  39. package/esm2022/popover/popover.component.mjs +3 -3
  40. package/esm2022/radio/radio.component.mjs +2 -2
  41. package/esm2022/scrollbar/scrollbar.component.mjs +2 -2
  42. package/esm2022/select/select.component.mjs +18 -114
  43. package/esm2022/select/select.module.mjs +28 -28
  44. package/esm2022/table/table.component.mjs +2 -2
  45. package/esm2022/tabs/tab-group.component.mjs +54 -12
  46. package/esm2022/tabs/tab-header.component.mjs +2 -2
  47. package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +2 -2
  48. package/esm2022/tags/tag-default-options.mjs +1 -1
  49. package/esm2022/tags/tag-input.mjs +17 -3
  50. package/esm2022/tags/tag-list.component.mjs +2 -2
  51. package/esm2022/tags/tag.component.mjs +2 -2
  52. package/esm2022/timezone/timezone-option.component.mjs +2 -2
  53. package/esm2022/timezone/timezone-select.component.mjs +5 -5
  54. package/esm2022/toast/toast.component.mjs +3 -3
  55. package/esm2022/toast/toast.service.mjs +17 -12
  56. package/esm2022/tooltip/tooltip.component.mjs +2 -2
  57. package/esm2022/tree/tree-option.component.mjs +2 -2
  58. package/esm2022/tree-select/tree-select.component.mjs +9 -37
  59. package/esm2022/tree-select/tree-select.module.mjs +31 -11
  60. package/fesm2022/koobiq-components-alert.mjs +2 -2
  61. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-badge.mjs +2 -2
  63. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-button-toggle.mjs +2 -2
  65. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  66. package/fesm2022/koobiq-components-button.mjs +2 -2
  67. package/fesm2022/koobiq-components-checkbox.mjs +2 -2
  68. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-code-block.mjs +1 -1
  70. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-core.mjs +124 -7
  72. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-datepicker.mjs +1 -1
  74. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-dropdown.mjs +5 -5
  76. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-file-upload.mjs +4 -4
  78. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-form-field.mjs +6 -6
  80. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-list.mjs +4 -4
  82. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  83. package/fesm2022/koobiq-components-navbar.mjs +4 -4
  84. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-popover.mjs +4 -4
  86. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-radio.mjs +2 -2
  88. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-scrollbar.mjs +2 -2
  90. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-select.mjs +46 -142
  92. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-table.mjs +2 -2
  94. package/fesm2022/koobiq-components-tabs.mjs +56 -14
  95. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-tags.mjs +20 -7
  97. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-timezone.mjs +6 -6
  99. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-toast.mjs +19 -13
  101. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-tooltip.mjs +2 -2
  103. package/fesm2022/koobiq-components-tree-select.mjs +37 -44
  104. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  105. package/fesm2022/koobiq-components-tree.mjs +2 -2
  106. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  107. package/file-upload/multiple-file-upload.component.scss +9 -7
  108. package/form-field/_form-field-theme.scss +2 -2
  109. package/form-field/hint.scss +2 -0
  110. package/icon/_icon-button-theme.scss +2 -2
  111. package/list/list.scss +3 -1
  112. package/navbar/_navbar-item_horizontal.scss +5 -2
  113. package/navbar/_navbar-item_vertical.scss +5 -5
  114. package/navbar/navbar-brand.scss +1 -1
  115. package/navbar/navbar-item.scss +6 -0
  116. package/package.json +6 -6
  117. package/prebuilt-themes/dark-theme.css +1 -1
  118. package/prebuilt-themes/light-theme.css +1 -1
  119. package/radio/radio.scss +3 -1
  120. package/schematics/ng-add/index.js +4 -4
  121. package/scrollbar/scrollbar.component.scss +6 -0
  122. package/select/select.component.d.ts +2 -32
  123. package/select/select.module.d.ts +1 -1
  124. package/tabs/tab-group.component.d.ts +9 -3
  125. package/tags/_tag-theme.scss +2 -2
  126. package/tags/tag-default-options.d.ts +1 -0
  127. package/tags/tag-input.d.ts +7 -1
  128. package/timezone/timezone-select.component.d.ts +2 -1
  129. package/toast/toast.component.scss +1 -1
  130. package/toast/toast.service.d.ts +8 -4
  131. package/toggle/_toggle-theme.scss +2 -2
  132. package/tree-select/_tree-select-theme.scss +1 -1
  133. package/tree-select/tree-select.component.d.ts +4 -17
  134. package/tree-select/tree-select.module.d.ts +1 -2
  135. package/tree-select/tree-select.scss +1 -1
@@ -947,7 +947,7 @@ class KbqTabHeader extends KbqPaginatedTabHeader {
947
947
  event.preventDefault();
948
948
  }
949
949
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabHeader, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ViewportRuler }, { token: i0.NgZone }, { token: i2.Platform }, { token: i3.Directionality, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
950
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabHeader, selector: "kbq-tab-header", inputs: { selectedIndex: "selectedIndex", vertical: "vertical" }, outputs: { selectFocusedIndex: "selectFocusedIndex", indexFocused: "indexFocused" }, host: { properties: { "class.kbq-tab-header_vertical": "vertical", "class.kbq-tab-header__pagination-controls_enabled": "showPaginationControls", "class.kbq-tab-header_rtl": "getLayoutDirection() == 'rtl'" }, classAttribute: "kbq-tab-header" }, queries: [{ propertyName: "items", predicate: KbqTabLabelWrapper }], viewQueries: [{ propertyName: "tabListContainer", first: true, predicate: ["tabListContainer"], descendants: true, static: true }, { propertyName: "tabList", first: true, predicate: ["tabList"], descendants: true, static: true }, { propertyName: "nextPaginator", first: true, predicate: ["nextPaginator"], descendants: true }, { propertyName: "previousPaginator", first: true, predicate: ["previousPaginator"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_before\"\n #previousPaginator\n [class.kbq-disabled]=\"disableScrollBefore\"\n (click)=\"handlePaginatorClick('before')\"\n (mousedown)=\"handlePaginatorPress('before', $event)\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-left-M_16\"></i>\n</div>\n\n<div class=\"kbq-tab-header__content\"\n #tabListContainer\n (keydown)=\"handleKeydown($event)\">\n\n <div class=\"kbq-tab-list\"\n #tabList\n (cdkObserveContent)=\"onContentChanges()\">\n <div class=\"kbq-tab-list__content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_after\"\n #nextPaginator\n [class.kbq-disabled]=\"disableScrollAfter\"\n (mousedown)=\"handlePaginatorPress('after', $event)\"\n (click)=\"handlePaginatorClick('after')\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-right-M_16\"></i>\n</div>\n", styles: [".kbq-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.kbq-tab-list__content{display:flex}.kbq-tab-group_align-labels-center .kbq-tab-list__content{justify-content:center}.kbq-tab-group_align-labels-end .kbq-tab-list__content{justify-content:flex-end}.kbq-tab-header_vertical .kbq-tab-list__content{flex-direction:column}.kbq-tab-header__pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;padding-left:12px;padding-right:12px}.kbq-tab-header__pagination-controls_enabled .kbq-tab-header__pagination{display:flex}.kbq-tab-header__content{display:flex;flex-grow:1;z-index:1;overflow:hidden}.kbq-tab-list{position:relative;width:100%;transition:transform .5s cubic-bezier(.35,0,.25,1)}.kbq-tab-label{position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 8px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-tab-label.kbq-selected{cursor:default}.kbq-tab-label.cdk-keyboard-focused{z-index:1}.kbq-tab-label.kbq-disabled{pointer-events:none}.kbq-tab-label .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-label.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-label.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-group_stretch-labels .kbq-tab-label{flex-basis:0;flex-grow:1}\n"], dependencies: [{ kind: "component", type: i4.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
950
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabHeader, selector: "kbq-tab-header", inputs: { selectedIndex: "selectedIndex", vertical: "vertical" }, outputs: { selectFocusedIndex: "selectFocusedIndex", indexFocused: "indexFocused" }, host: { properties: { "class.kbq-tab-header_vertical": "vertical", "class.kbq-tab-header__pagination-controls_enabled": "showPaginationControls", "class.kbq-tab-header_rtl": "getLayoutDirection() == 'rtl'" }, classAttribute: "kbq-tab-header" }, queries: [{ propertyName: "items", predicate: KbqTabLabelWrapper }], viewQueries: [{ propertyName: "tabListContainer", first: true, predicate: ["tabListContainer"], descendants: true, static: true }, { propertyName: "tabList", first: true, predicate: ["tabList"], descendants: true, static: true }, { propertyName: "nextPaginator", first: true, predicate: ["nextPaginator"], descendants: true }, { propertyName: "previousPaginator", first: true, predicate: ["previousPaginator"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_before\"\n #previousPaginator\n [class.kbq-disabled]=\"disableScrollBefore\"\n (click)=\"handlePaginatorClick('before')\"\n (mousedown)=\"handlePaginatorPress('before', $event)\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-left-M_16\"></i>\n</div>\n\n<div class=\"kbq-tab-header__content\"\n #tabListContainer\n (keydown)=\"handleKeydown($event)\">\n\n <div class=\"kbq-tab-list\"\n #tabList\n (cdkObserveContent)=\"onContentChanges()\">\n <div class=\"kbq-tab-list__content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_after\"\n #nextPaginator\n [class.kbq-disabled]=\"disableScrollAfter\"\n (mousedown)=\"handlePaginatorPress('after', $event)\"\n (click)=\"handlePaginatorClick('after')\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-right-M_16\"></i>\n</div>\n", styles: [".kbq-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.kbq-tab-list__content{display:flex}.kbq-tab-group_align-labels-center .kbq-tab-list__content{justify-content:center}.kbq-tab-group_align-labels-end .kbq-tab-list__content{justify-content:flex-end}.kbq-tab-header_vertical .kbq-tab-list__content{flex-direction:column}.kbq-tab-header__pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;padding-left:12px;padding-right:12px}.kbq-tab-header__pagination-controls_enabled .kbq-tab-header__pagination{display:flex}.kbq-tab-header__content{display:flex;flex-grow:1;z-index:1;overflow:hidden}.kbq-tab-list{position:relative;width:100%;transition:transform .5s cubic-bezier(.35,0,.25,1)}.kbq-tab-label{position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 6px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-tab-label.kbq-selected{cursor:default}.kbq-tab-label.cdk-keyboard-focused{z-index:1}.kbq-tab-label.kbq-disabled{pointer-events:none}.kbq-tab-label .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-label.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-label.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-group_stretch-labels .kbq-tab-label{flex-basis:0;flex-grow:1}\n"], dependencies: [{ kind: "component", type: i4.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
951
951
  }
952
952
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabHeader, decorators: [{
953
953
  type: Component,
@@ -956,7 +956,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
956
956
  '[class.kbq-tab-header_vertical]': 'vertical',
957
957
  '[class.kbq-tab-header__pagination-controls_enabled]': 'showPaginationControls',
958
958
  '[class.kbq-tab-header_rtl]': 'getLayoutDirection() == \'rtl\''
959
- }, template: "<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_before\"\n #previousPaginator\n [class.kbq-disabled]=\"disableScrollBefore\"\n (click)=\"handlePaginatorClick('before')\"\n (mousedown)=\"handlePaginatorPress('before', $event)\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-left-M_16\"></i>\n</div>\n\n<div class=\"kbq-tab-header__content\"\n #tabListContainer\n (keydown)=\"handleKeydown($event)\">\n\n <div class=\"kbq-tab-list\"\n #tabList\n (cdkObserveContent)=\"onContentChanges()\">\n <div class=\"kbq-tab-list__content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_after\"\n #nextPaginator\n [class.kbq-disabled]=\"disableScrollAfter\"\n (mousedown)=\"handlePaginatorPress('after', $event)\"\n (click)=\"handlePaginatorClick('after')\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-right-M_16\"></i>\n</div>\n", styles: [".kbq-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.kbq-tab-list__content{display:flex}.kbq-tab-group_align-labels-center .kbq-tab-list__content{justify-content:center}.kbq-tab-group_align-labels-end .kbq-tab-list__content{justify-content:flex-end}.kbq-tab-header_vertical .kbq-tab-list__content{flex-direction:column}.kbq-tab-header__pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;padding-left:12px;padding-right:12px}.kbq-tab-header__pagination-controls_enabled .kbq-tab-header__pagination{display:flex}.kbq-tab-header__content{display:flex;flex-grow:1;z-index:1;overflow:hidden}.kbq-tab-list{position:relative;width:100%;transition:transform .5s cubic-bezier(.35,0,.25,1)}.kbq-tab-label{position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 8px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-tab-label.kbq-selected{cursor:default}.kbq-tab-label.cdk-keyboard-focused{z-index:1}.kbq-tab-label.kbq-disabled{pointer-events:none}.kbq-tab-label .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-label.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-label.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-group_stretch-labels .kbq-tab-label{flex-basis:0;flex-grow:1}\n"] }]
959
+ }, template: "<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_before\"\n #previousPaginator\n [class.kbq-disabled]=\"disableScrollBefore\"\n (click)=\"handlePaginatorClick('before')\"\n (mousedown)=\"handlePaginatorPress('before', $event)\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-left-M_16\"></i>\n</div>\n\n<div class=\"kbq-tab-header__content\"\n #tabListContainer\n (keydown)=\"handleKeydown($event)\">\n\n <div class=\"kbq-tab-list\"\n #tabList\n (cdkObserveContent)=\"onContentChanges()\">\n <div class=\"kbq-tab-list__content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_after\"\n #nextPaginator\n [class.kbq-disabled]=\"disableScrollAfter\"\n (mousedown)=\"handlePaginatorPress('after', $event)\"\n (click)=\"handlePaginatorClick('after')\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-right-M_16\"></i>\n</div>\n", styles: [".kbq-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.kbq-tab-list__content{display:flex}.kbq-tab-group_align-labels-center .kbq-tab-list__content{justify-content:center}.kbq-tab-group_align-labels-end .kbq-tab-list__content{justify-content:flex-end}.kbq-tab-header_vertical .kbq-tab-list__content{flex-direction:column}.kbq-tab-header__pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;padding-left:12px;padding-right:12px}.kbq-tab-header__pagination-controls_enabled .kbq-tab-header__pagination{display:flex}.kbq-tab-header__content{display:flex;flex-grow:1;z-index:1;overflow:hidden}.kbq-tab-list{position:relative;width:100%;transition:transform .5s cubic-bezier(.35,0,.25,1)}.kbq-tab-label{position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 6px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-tab-label.kbq-selected{cursor:default}.kbq-tab-label.cdk-keyboard-focused{z-index:1}.kbq-tab-label.kbq-disabled{pointer-events:none}.kbq-tab-label .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-label.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-label.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-group_stretch-labels .kbq-tab-label{flex-basis:0;flex-grow:1}\n"] }]
960
960
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ViewportRuler }, { type: i0.NgZone }, { type: i2.Platform }, { type: i3.Directionality, decorators: [{
961
961
  type: Optional
962
962
  }] }, { type: undefined, decorators: [{
@@ -1060,7 +1060,23 @@ class KbqTabGroup extends KbqTabGroupMixinBase {
1060
1060
  return this._selectedIndex;
1061
1061
  }
1062
1062
  set selectedIndex(value) {
1063
- this.indexToSelect = coerceNumberProperty(value, null);
1063
+ this.activeTab = value;
1064
+ }
1065
+ get activeTab() {
1066
+ switch (typeof this.attributeToSelectBy) {
1067
+ case 'number':
1068
+ return this.tabs.get(this.clampTabIndex(this.attributeToSelectBy)) || null;
1069
+ case 'string':
1070
+ return this.tabs.toArray()
1071
+ .find(({ tabId }) => tabId === this.attributeToSelectBy) || this.tabs.get(0) || null;
1072
+ case 'function':
1073
+ return this.attributeToSelectBy(this.tabs.toArray());
1074
+ default:
1075
+ return this.tabs.get(0) || null;
1076
+ }
1077
+ }
1078
+ set activeTab(value) {
1079
+ this.attributeToSelectBy = value;
1064
1080
  }
1065
1081
  constructor(elementRef, changeDetectorRef, vertical, defaultConfig) {
1066
1082
  super(elementRef);
@@ -1074,14 +1090,15 @@ class KbqTabGroup extends KbqTabGroupMixinBase {
1074
1090
  this.headerPosition = 'above';
1075
1091
  /** Output to enable support for two-way binding on `[(selectedIndex)]` */
1076
1092
  this.selectedIndexChange = new EventEmitter();
1093
+ /** Event emitted when the tab selection has changed. */
1094
+ this.activeTabChange = new EventEmitter();
1077
1095
  /** Event emitted when focus has changed within a tab group. */
1078
1096
  this.focusChange = new EventEmitter();
1079
1097
  /** Event emitted when the body animation has completed */
1080
1098
  this.animationDone = new EventEmitter();
1081
1099
  /** Event emitted when the tab selection has changed. */
1082
1100
  this.selectedTabChange = new EventEmitter(true);
1083
- /** The tab index that should be selected after the content has been checked. */
1084
- this.indexToSelect = 0;
1101
+ this.attributeToSelectBy = null;
1085
1102
  /** Snapshot of the height of the tab body wrapper before another tab is activated. */
1086
1103
  this.tabBodyWrapperHeight = 0;
1087
1104
  /** Subscription to tabs being added/removed. */
@@ -1108,7 +1125,7 @@ class KbqTabGroup extends KbqTabGroupMixinBase {
1108
1125
  ngAfterContentChecked() {
1109
1126
  // Don't clamp the `indexToSelect` immediately in the setter because it can happen that
1110
1127
  // the amount of tabs changes before the actual change detection runs.
1111
- const indexToSelect = this.indexToSelect = this.clampTabIndex(this.indexToSelect);
1128
+ const indexToSelect = this.getTabIndexToSelect();
1112
1129
  // If there is a change in selected index, emit a change event. Should not trigger if
1113
1130
  // the selected index has not yet been initialized.
1114
1131
  if (this._selectedIndex !== indexToSelect) {
@@ -1121,7 +1138,11 @@ class KbqTabGroup extends KbqTabGroupMixinBase {
1121
1138
  Promise.resolve().then(() => {
1122
1139
  this.tabs.forEach((tab, index) => tab.isActive = index === indexToSelect);
1123
1140
  if (!isFirstRun) {
1141
+ const tabToSelect = this.activeTab;
1124
1142
  this.selectedIndexChange.emit(indexToSelect);
1143
+ this.activeTabChange.emit(this.attributeToSelectBy && typeof this.attributeToSelectBy === 'function' && tabToSelect
1144
+ ? tabToSelect
1145
+ : this.attributeToSelectBy);
1125
1146
  }
1126
1147
  });
1127
1148
  }
@@ -1145,17 +1166,19 @@ class KbqTabGroup extends KbqTabGroupMixinBase {
1145
1166
  // able to re-render the content as new tabs are added or removed.
1146
1167
  this.tabsSubscription = this.tabs.changes
1147
1168
  .subscribe(() => {
1148
- const indexToSelect = this.clampTabIndex(this.indexToSelect);
1169
+ // const indexToSelect = this.clampTabIndex(this.indexToSelect);
1170
+ const indexToSelect = this.getTabIndexToSelect();
1149
1171
  // Maintain the previously-selected tab if a new tab is added or removed and there is no
1150
1172
  // explicit change that selects a different tab.
1151
1173
  if (indexToSelect === this._selectedIndex) {
1152
1174
  const tabs = this.tabs.toArray();
1153
1175
  for (let i = 0; i < tabs.length; i++) {
1154
1176
  if (tabs[i].isActive) {
1155
- // Assign both to the `_indexToSelect` and `_selectedIndex` so we don't fire a changed
1177
+ // Assign both to the `activeTab` and `_selectedIndex` so we don't fire a changed
1156
1178
  // event, otherwise the consumer may end up in an infinite loop in some edge cases like
1157
1179
  // adding a tab within the `selectedIndexChange` event.
1158
- this.indexToSelect = this._selectedIndex = i;
1180
+ this._selectedIndex = i;
1181
+ this.onSelectFocusedIndex(i);
1159
1182
  break;
1160
1183
  }
1161
1184
  }
@@ -1210,7 +1233,8 @@ class KbqTabGroup extends KbqTabGroupMixinBase {
1210
1233
  if (tab.disabled) {
1211
1234
  return;
1212
1235
  }
1213
- this.selectedIndex = tabHeader.focusIndex = index;
1236
+ this.onSelectFocusedIndex(index);
1237
+ tabHeader.focusIndex = index;
1214
1238
  }
1215
1239
  /** Retrieves the tabindex for the tab. */
1216
1240
  getTabIndex(tab, index) {
@@ -1219,6 +1243,13 @@ class KbqTabGroup extends KbqTabGroupMixinBase {
1219
1243
  }
1220
1244
  return this.selectedIndex === index ? 0 : -1;
1221
1245
  }
1246
+ onSelectFocusedIndex($event) {
1247
+ if (typeof this.attributeToSelectBy === 'string') {
1248
+ this.activeTab = this.tabs.get($event)?.tabId || null;
1249
+ return;
1250
+ }
1251
+ this.activeTab = $event;
1252
+ }
1222
1253
  createChangeEvent(index) {
1223
1254
  const event = new KbqTabChangeEvent();
1224
1255
  event.index = index;
@@ -1258,8 +1289,15 @@ class KbqTabGroup extends KbqTabGroupMixinBase {
1258
1289
  // (since Math.max(NaN, 0) === NaN).
1259
1290
  return Math.min(this.tabs.length - 1, Math.max(index || 0, 0));
1260
1291
  }
1292
+ getTabIndexToSelect() {
1293
+ const currentSelectedTab = this.activeTab;
1294
+ if (currentSelectedTab === null) {
1295
+ return 0;
1296
+ }
1297
+ return this.tabs?.toArray().indexOf(currentSelectedTab);
1298
+ }
1261
1299
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabGroup, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: 'vertical', attribute: true }, { token: KBQ_TABS_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1262
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabGroup, selector: "kbq-tab-group", inputs: { disabled: "disabled", transparent: "transparent", onSurface: "onSurface", dynamicHeight: "dynamicHeight", selectedIndex: "selectedIndex", headerPosition: "headerPosition", animationDuration: "animationDuration" }, outputs: { selectedIndexChange: "selectedIndexChange", focusChange: "focusChange", animationDone: "animationDone", selectedTabChange: "selectedTabChange" }, host: { listeners: { "window:resize": "resizeStream.next($event)" }, properties: { "class.kbq-tab-group_filled": "!transparent", "class.kbq-tab-group_transparent": "transparent", "class.kbq-tab-group_on-background": "!onSurface", "class.kbq-tab-group_on-surface": "onSurface", "class.kbq-tab-group_dynamic-height": "dynamicHeight", "class.kbq-tab-group_inverted-header": "headerPosition === \"below\"" }, classAttribute: "kbq-tab-group" }, providers: [{ provide: KBQ_PARENT_ANIMATION_COMPONENT, useExisting: forwardRef((() => this)) }], queries: [{ propertyName: "tabs", predicate: KbqTab }], viewQueries: [{ propertyName: "tabBodyWrapper", first: true, predicate: ["tabBodyWrapper"], descendants: true }, { propertyName: "tabHeader", first: true, predicate: ["tabHeader"], descendants: true }], exportAs: ["kbqTabGroup"], usesInheritance: true, ngImport: i0, template: "<kbq-tab-header\n #tabHeader\n [vertical]=\"vertical\"\n [selectedIndex]=\"selectedIndex\"\n (indexFocused)=\"focusChanged($event)\"\n (selectFocusedIndex)=\"selectedIndex = $event\">\n\n <div class=\"kbq-tab-label\"\n kbqTabLabelWrapper\n cdkMonitorElementFocus\n [attr.tabindex]=\"getTabIndex(tab, i)\"\n [class.kbq-tab-label_horizontal]=\"!vertical\"\n [class.kbq-tab-label_vertical]=\"vertical\"\n [class.kbq-tab-label_empty]=\"tab.empty\"\n [class.kbq-selected]=\"selectedIndex == i\"\n *ngFor=\"let tab of tabs; let i = index\"\n [tab]=\"tab\"\n [id]=\"getTabLabelId(i)\"\n [disabled]=\"tab.disabled\"\n (click)=\"handleClick(tab, tabHeader, i)\"\n\n [kbqTooltip]=\"tab.tooltipTitle\"\n [kbqTooltipDisabled]=\"!tab.empty && !tab.isOverflown\"\n [kbqTrigger]=\"'hover, focus'\"\n [kbqPlacement]=\"tab.tooltipPlacement\">\n\n <div #labelContent class=\"kbq-tab-label__content\"\n [class.kbq-tab-label__template]=\"tab.templateLabel\">\n <!-- If there is a label template, use it. -->\n <ng-template [ngIf]=\"tab.templateLabel\">\n <ng-template [cdkPortalOutlet]=\"tab.templateLabel\"></ng-template>\n </ng-template>\n\n <!-- If there is not a label template, fall back to the text label. -->\n <ng-template [ngIf]=\"!tab.templateLabel\">{{ tab.textLabel }}</ng-template>\n </div>\n </div>\n</kbq-tab-header>\n\n<div class=\"kbq-tab-body__wrapper\" #tabBodyWrapper>\n <kbq-tab-body\n *ngFor=\"let tab of tabs; let i = index\"\n [id]=\"getTabContentId(i)\"\n [class.kbq-tab-body__active]=\"selectedIndex == i\"\n [content]=\"tab.content!\"\n [position]=\"tab.position!\"\n [origin]=\"tab.origin!\"\n [animationDuration]=\"animationDuration\"\n (onCentered)=\"removeTabBodyWrapperHeight()\"\n (onCentering)=\"setTabBodyWrapperHeight($event)\">\n </kbq-tab-body>\n</div>\n", styles: [".kbq-tab-group{display:flex;flex-direction:column;box-sizing:border-box;text-align:left}.kbq-tab-group.kbq-tab-group_inverted-header{flex-direction:column-reverse}.kbq-tab-group_vertical{flex-direction:row}.kbq-tab-group_vertical .kbq-tab-list__content{gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}.kbq-tab-group_vertical .kbq-tab-header__content{overflow-y:auto}.kbq-tab-body__wrapper{display:flex;overflow:hidden;position:relative}.kbq-tab-body{inset:0;position:absolute;display:block;overflow:hidden}.kbq-tab-body.kbq-tab-body__active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.kbq-tab-group.kbq-tab-group_dynamic-height .kbq-tab-body.kbq-tab-body__active{overflow-y:hidden}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: i1$2.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i4$1.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqVisible", "kbqPlacement", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipColor"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "directive", type: KbqTabLabelWrapper, selector: "[kbqTabLabelWrapper]", inputs: ["disabled", "tab"] }, { kind: "component", type: KbqTabBody, selector: "kbq-tab-body", inputs: ["position", "content", "origin", "animationDuration"], outputs: ["onCentering", "beforeCentering", "afterLeavingCenter", "onCentered"] }, { kind: "component", type: KbqTabHeader, selector: "kbq-tab-header", inputs: ["selectedIndex", "vertical"], outputs: ["selectFocusedIndex", "indexFocused"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1300
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabGroup, selector: "kbq-tab-group", inputs: { disabled: "disabled", transparent: "transparent", onSurface: "onSurface", dynamicHeight: "dynamicHeight", selectedIndex: "selectedIndex", activeTab: "activeTab", headerPosition: "headerPosition", animationDuration: "animationDuration" }, outputs: { selectedIndexChange: "selectedIndexChange", activeTabChange: "activeTabChange", focusChange: "focusChange", animationDone: "animationDone", selectedTabChange: "selectedTabChange" }, host: { listeners: { "window:resize": "resizeStream.next($event)" }, properties: { "class.kbq-tab-group_filled": "!transparent", "class.kbq-tab-group_transparent": "transparent", "class.kbq-tab-group_on-background": "!onSurface", "class.kbq-tab-group_on-surface": "onSurface", "class.kbq-tab-group_dynamic-height": "dynamicHeight", "class.kbq-tab-group_inverted-header": "headerPosition === \"below\"" }, classAttribute: "kbq-tab-group" }, providers: [{ provide: KBQ_PARENT_ANIMATION_COMPONENT, useExisting: forwardRef((() => this)) }], queries: [{ propertyName: "tabs", predicate: KbqTab }], viewQueries: [{ propertyName: "tabBodyWrapper", first: true, predicate: ["tabBodyWrapper"], descendants: true }, { propertyName: "tabHeader", first: true, predicate: ["tabHeader"], descendants: true }], exportAs: ["kbqTabGroup"], usesInheritance: true, ngImport: i0, template: "<kbq-tab-header\n #tabHeader\n [vertical]=\"vertical\"\n [selectedIndex]=\"selectedIndex\"\n (indexFocused)=\"focusChanged($event)\"\n (selectFocusedIndex)=\"onSelectFocusedIndex($event)\">\n\n <div class=\"kbq-tab-label\"\n kbqTabLabelWrapper\n cdkMonitorElementFocus\n [attr.tabindex]=\"getTabIndex(tab, i)\"\n [class.kbq-tab-label_horizontal]=\"!vertical\"\n [class.kbq-tab-label_vertical]=\"vertical\"\n [class.kbq-tab-label_empty]=\"tab.empty\"\n [class.kbq-selected]=\"selectedIndex == i\"\n *ngFor=\"let tab of tabs; let i = index\"\n [tab]=\"tab\"\n [id]=\"getTabLabelId(i)\"\n [disabled]=\"tab.disabled\"\n (click)=\"handleClick(tab, tabHeader, i)\"\n\n [kbqTooltip]=\"tab.tooltipTitle\"\n [kbqTooltipDisabled]=\"!tab.empty && !tab.isOverflown\"\n [kbqTrigger]=\"'hover, focus'\"\n [kbqPlacement]=\"tab.tooltipPlacement\">\n\n <div #labelContent class=\"kbq-tab-label__content\"\n [class.kbq-tab-label__template]=\"tab.templateLabel\">\n <!-- If there is a label template, use it. -->\n <ng-template [ngIf]=\"tab.templateLabel\">\n <ng-template [cdkPortalOutlet]=\"tab.templateLabel\"></ng-template>\n </ng-template>\n\n <!-- If there is not a label template, fall back to the text label. -->\n <ng-template [ngIf]=\"!tab.templateLabel\">{{ tab.textLabel }}</ng-template>\n </div>\n </div>\n</kbq-tab-header>\n\n<div class=\"kbq-tab-body__wrapper\" #tabBodyWrapper>\n <kbq-tab-body\n *ngFor=\"let tab of tabs; let i = index\"\n [id]=\"getTabContentId(i)\"\n [class.kbq-tab-body__active]=\"selectedIndex == i\"\n [content]=\"tab.content!\"\n [position]=\"tab.position!\"\n [origin]=\"tab.origin!\"\n [animationDuration]=\"animationDuration\"\n (onCentered)=\"removeTabBodyWrapperHeight()\"\n (onCentering)=\"setTabBodyWrapperHeight($event)\">\n </kbq-tab-body>\n</div>\n", styles: [".kbq-tab-group{display:flex;flex-direction:column;box-sizing:border-box;text-align:left}.kbq-tab-group.kbq-tab-group_inverted-header{flex-direction:column-reverse}.kbq-tab-group_vertical{flex-direction:row}.kbq-tab-group_vertical .kbq-tab-list__content{gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}.kbq-tab-group_vertical .kbq-tab-header__content{overflow-y:auto}.kbq-tab-body__wrapper{display:flex;overflow:hidden;position:relative}.kbq-tab-body{inset:0;position:absolute;display:block;overflow:hidden}.kbq-tab-body.kbq-tab-body__active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.kbq-tab-group.kbq-tab-group_dynamic-height .kbq-tab-body.kbq-tab-body__active{overflow-y:hidden}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: i1$2.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i4$1.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqVisible", "kbqPlacement", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipColor"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "directive", type: KbqTabLabelWrapper, selector: "[kbqTabLabelWrapper]", inputs: ["disabled", "tab"] }, { kind: "component", type: KbqTabBody, selector: "kbq-tab-body", inputs: ["position", "content", "origin", "animationDuration"], outputs: ["onCentering", "beforeCentering", "afterLeavingCenter", "onCentered"] }, { kind: "component", type: KbqTabHeader, selector: "kbq-tab-header", inputs: ["selectedIndex", "vertical"], outputs: ["selectFocusedIndex", "indexFocused"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1263
1301
  }
1264
1302
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabGroup, decorators: [{
1265
1303
  type: Component,
@@ -1272,7 +1310,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
1272
1310
  '[class.kbq-tab-group_dynamic-height]': 'dynamicHeight',
1273
1311
  '[class.kbq-tab-group_inverted-header]': 'headerPosition === "below"',
1274
1312
  '(window:resize)': 'resizeStream.next($event)'
1275
- }, providers: [{ provide: KBQ_PARENT_ANIMATION_COMPONENT, useExisting: forwardRef((() => this)) }], template: "<kbq-tab-header\n #tabHeader\n [vertical]=\"vertical\"\n [selectedIndex]=\"selectedIndex\"\n (indexFocused)=\"focusChanged($event)\"\n (selectFocusedIndex)=\"selectedIndex = $event\">\n\n <div class=\"kbq-tab-label\"\n kbqTabLabelWrapper\n cdkMonitorElementFocus\n [attr.tabindex]=\"getTabIndex(tab, i)\"\n [class.kbq-tab-label_horizontal]=\"!vertical\"\n [class.kbq-tab-label_vertical]=\"vertical\"\n [class.kbq-tab-label_empty]=\"tab.empty\"\n [class.kbq-selected]=\"selectedIndex == i\"\n *ngFor=\"let tab of tabs; let i = index\"\n [tab]=\"tab\"\n [id]=\"getTabLabelId(i)\"\n [disabled]=\"tab.disabled\"\n (click)=\"handleClick(tab, tabHeader, i)\"\n\n [kbqTooltip]=\"tab.tooltipTitle\"\n [kbqTooltipDisabled]=\"!tab.empty && !tab.isOverflown\"\n [kbqTrigger]=\"'hover, focus'\"\n [kbqPlacement]=\"tab.tooltipPlacement\">\n\n <div #labelContent class=\"kbq-tab-label__content\"\n [class.kbq-tab-label__template]=\"tab.templateLabel\">\n <!-- If there is a label template, use it. -->\n <ng-template [ngIf]=\"tab.templateLabel\">\n <ng-template [cdkPortalOutlet]=\"tab.templateLabel\"></ng-template>\n </ng-template>\n\n <!-- If there is not a label template, fall back to the text label. -->\n <ng-template [ngIf]=\"!tab.templateLabel\">{{ tab.textLabel }}</ng-template>\n </div>\n </div>\n</kbq-tab-header>\n\n<div class=\"kbq-tab-body__wrapper\" #tabBodyWrapper>\n <kbq-tab-body\n *ngFor=\"let tab of tabs; let i = index\"\n [id]=\"getTabContentId(i)\"\n [class.kbq-tab-body__active]=\"selectedIndex == i\"\n [content]=\"tab.content!\"\n [position]=\"tab.position!\"\n [origin]=\"tab.origin!\"\n [animationDuration]=\"animationDuration\"\n (onCentered)=\"removeTabBodyWrapperHeight()\"\n (onCentering)=\"setTabBodyWrapperHeight($event)\">\n </kbq-tab-body>\n</div>\n", styles: [".kbq-tab-group{display:flex;flex-direction:column;box-sizing:border-box;text-align:left}.kbq-tab-group.kbq-tab-group_inverted-header{flex-direction:column-reverse}.kbq-tab-group_vertical{flex-direction:row}.kbq-tab-group_vertical .kbq-tab-list__content{gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}.kbq-tab-group_vertical .kbq-tab-header__content{overflow-y:auto}.kbq-tab-body__wrapper{display:flex;overflow:hidden;position:relative}.kbq-tab-body{inset:0;position:absolute;display:block;overflow:hidden}.kbq-tab-body.kbq-tab-body__active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.kbq-tab-group.kbq-tab-group_dynamic-height .kbq-tab-body.kbq-tab-body__active{overflow-y:hidden}\n"] }]
1313
+ }, providers: [{ provide: KBQ_PARENT_ANIMATION_COMPONENT, useExisting: forwardRef((() => this)) }], template: "<kbq-tab-header\n #tabHeader\n [vertical]=\"vertical\"\n [selectedIndex]=\"selectedIndex\"\n (indexFocused)=\"focusChanged($event)\"\n (selectFocusedIndex)=\"onSelectFocusedIndex($event)\">\n\n <div class=\"kbq-tab-label\"\n kbqTabLabelWrapper\n cdkMonitorElementFocus\n [attr.tabindex]=\"getTabIndex(tab, i)\"\n [class.kbq-tab-label_horizontal]=\"!vertical\"\n [class.kbq-tab-label_vertical]=\"vertical\"\n [class.kbq-tab-label_empty]=\"tab.empty\"\n [class.kbq-selected]=\"selectedIndex == i\"\n *ngFor=\"let tab of tabs; let i = index\"\n [tab]=\"tab\"\n [id]=\"getTabLabelId(i)\"\n [disabled]=\"tab.disabled\"\n (click)=\"handleClick(tab, tabHeader, i)\"\n\n [kbqTooltip]=\"tab.tooltipTitle\"\n [kbqTooltipDisabled]=\"!tab.empty && !tab.isOverflown\"\n [kbqTrigger]=\"'hover, focus'\"\n [kbqPlacement]=\"tab.tooltipPlacement\">\n\n <div #labelContent class=\"kbq-tab-label__content\"\n [class.kbq-tab-label__template]=\"tab.templateLabel\">\n <!-- If there is a label template, use it. -->\n <ng-template [ngIf]=\"tab.templateLabel\">\n <ng-template [cdkPortalOutlet]=\"tab.templateLabel\"></ng-template>\n </ng-template>\n\n <!-- If there is not a label template, fall back to the text label. -->\n <ng-template [ngIf]=\"!tab.templateLabel\">{{ tab.textLabel }}</ng-template>\n </div>\n </div>\n</kbq-tab-header>\n\n<div class=\"kbq-tab-body__wrapper\" #tabBodyWrapper>\n <kbq-tab-body\n *ngFor=\"let tab of tabs; let i = index\"\n [id]=\"getTabContentId(i)\"\n [class.kbq-tab-body__active]=\"selectedIndex == i\"\n [content]=\"tab.content!\"\n [position]=\"tab.position!\"\n [origin]=\"tab.origin!\"\n [animationDuration]=\"animationDuration\"\n (onCentered)=\"removeTabBodyWrapperHeight()\"\n (onCentering)=\"setTabBodyWrapperHeight($event)\">\n </kbq-tab-body>\n</div>\n", styles: [".kbq-tab-group{display:flex;flex-direction:column;box-sizing:border-box;text-align:left}.kbq-tab-group.kbq-tab-group_inverted-header{flex-direction:column-reverse}.kbq-tab-group_vertical{flex-direction:row}.kbq-tab-group_vertical .kbq-tab-list__content{gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}.kbq-tab-group_vertical .kbq-tab-header__content{overflow-y:auto}.kbq-tab-body__wrapper{display:flex;overflow:hidden;position:relative}.kbq-tab-body{inset:0;position:absolute;display:block;overflow:hidden}.kbq-tab-body.kbq-tab-body__active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.kbq-tab-group.kbq-tab-group_dynamic-height .kbq-tab-body.kbq-tab-body__active{overflow-y:hidden}\n"] }]
1276
1314
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
1277
1315
  type: Attribute,
1278
1316
  args: ['vertical']
@@ -1298,12 +1336,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
1298
1336
  type: Input
1299
1337
  }], selectedIndex: [{
1300
1338
  type: Input
1339
+ }], activeTab: [{
1340
+ type: Input
1301
1341
  }], headerPosition: [{
1302
1342
  type: Input
1303
1343
  }], animationDuration: [{
1304
1344
  type: Input
1305
1345
  }], selectedIndexChange: [{
1306
1346
  type: Output
1347
+ }], activeTabChange: [{
1348
+ type: Output
1307
1349
  }], focusChange: [{
1308
1350
  type: Output
1309
1351
  }], animationDone: [{
@@ -1404,7 +1446,7 @@ class KbqTabNav {
1404
1446
  this.links.notifyOnChanges();
1405
1447
  }
1406
1448
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabNav, deps: [{ token: 'vertical', attribute: true }], target: i0.ɵɵFactoryTarget.Component }); }
1407
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabNav, selector: "[kbq-tab-nav-bar]", inputs: { transparent: "transparent", onSurface: "onSurface" }, host: { properties: { "class.kbq-tab-nav-bar_filled": "!transparent", "class.kbq-tab-nav-bar_transparent": "transparent", "class.kbq-tab-nav-bar_on-background": "!onSurface", "class.kbq-tab-nav-bar_on-surface": "onSurface" }, classAttribute: "kbq-tab-nav-bar" }, queries: [{ propertyName: "links", predicate: KbqTabLink }], exportAs: ["kbqTabNavBar", "kbqTabNav"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [".kbq-tab-link{vertical-align:top;text-decoration:none;-webkit-tap-highlight-color:transparent;position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 8px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none}.kbq-tab-link.kbq-selected{cursor:default}.kbq-tab-link.cdk-keyboard-focused{z-index:1}.kbq-tab-link.kbq-disabled{pointer-events:none}.kbq-tab-link .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-link.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-link.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-link .kbq-tab-group_stretch-labels .kbq-tab-link{flex-basis:0;flex-grow:1}.kbq-tab-nav-bar{display:flex;flex-grow:1;position:relative}.kbq-tab-nav-bar .kbq-tab-group_align-labels-center{justify-content:center}.kbq-tab-nav-bar .kbq-tab-group_align-labels-end{justify-content:flex-end}.kbq-tab-nav-bar.kbq-tab-group_vertical{flex-direction:column;flex-grow:0;gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1449
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabNav, selector: "[kbq-tab-nav-bar]", inputs: { transparent: "transparent", onSurface: "onSurface" }, host: { properties: { "class.kbq-tab-nav-bar_filled": "!transparent", "class.kbq-tab-nav-bar_transparent": "transparent", "class.kbq-tab-nav-bar_on-background": "!onSurface", "class.kbq-tab-nav-bar_on-surface": "onSurface" }, classAttribute: "kbq-tab-nav-bar" }, queries: [{ propertyName: "links", predicate: KbqTabLink }], exportAs: ["kbqTabNavBar", "kbqTabNav"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [".kbq-tab-link{vertical-align:top;text-decoration:none;-webkit-tap-highlight-color:transparent;position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 6px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none}.kbq-tab-link.kbq-selected{cursor:default}.kbq-tab-link.cdk-keyboard-focused{z-index:1}.kbq-tab-link.kbq-disabled{pointer-events:none}.kbq-tab-link .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-link.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-link.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-link .kbq-tab-group_stretch-labels .kbq-tab-link{flex-basis:0;flex-grow:1}.kbq-tab-nav-bar{display:flex;flex-grow:1;position:relative}.kbq-tab-nav-bar .kbq-tab-group_align-labels-center{justify-content:center}.kbq-tab-nav-bar .kbq-tab-group_align-labels-end{justify-content:flex-end}.kbq-tab-nav-bar.kbq-tab-group_vertical{flex-direction:column;flex-grow:0;gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1408
1450
  }
1409
1451
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabNav, decorators: [{
1410
1452
  type: Component,
@@ -1414,7 +1456,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
1414
1456
  '[class.kbq-tab-nav-bar_transparent]': 'transparent',
1415
1457
  '[class.kbq-tab-nav-bar_on-background]': '!onSurface',
1416
1458
  '[class.kbq-tab-nav-bar_on-surface]': 'onSurface'
1417
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".kbq-tab-link{vertical-align:top;text-decoration:none;-webkit-tap-highlight-color:transparent;position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 8px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none}.kbq-tab-link.kbq-selected{cursor:default}.kbq-tab-link.cdk-keyboard-focused{z-index:1}.kbq-tab-link.kbq-disabled{pointer-events:none}.kbq-tab-link .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-link.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-link.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-link .kbq-tab-group_stretch-labels .kbq-tab-link{flex-basis:0;flex-grow:1}.kbq-tab-nav-bar{display:flex;flex-grow:1;position:relative}.kbq-tab-nav-bar .kbq-tab-group_align-labels-center{justify-content:center}.kbq-tab-nav-bar .kbq-tab-group_align-labels-end{justify-content:flex-end}.kbq-tab-nav-bar.kbq-tab-group_vertical{flex-direction:column;flex-grow:0;gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}\n"] }]
1459
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".kbq-tab-link{vertical-align:top;text-decoration:none;-webkit-tap-highlight-color:transparent;position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 6px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none}.kbq-tab-link.kbq-selected{cursor:default}.kbq-tab-link.cdk-keyboard-focused{z-index:1}.kbq-tab-link.kbq-disabled{pointer-events:none}.kbq-tab-link .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-link.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-link.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-link .kbq-tab-group_stretch-labels .kbq-tab-link{flex-basis:0;flex-grow:1}.kbq-tab-nav-bar{display:flex;flex-grow:1;position:relative}.kbq-tab-nav-bar .kbq-tab-group_align-labels-center{justify-content:center}.kbq-tab-nav-bar .kbq-tab-group_align-labels-end{justify-content:flex-end}.kbq-tab-nav-bar.kbq-tab-group_vertical{flex-direction:column;flex-grow:0;gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}\n"] }]
1418
1460
  }], ctorParameters: () => [{ type: undefined, decorators: [{
1419
1461
  type: Attribute,
1420
1462
  args: ['vertical']