@odx/angular 12.19.1 → 12.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/cdk/scrollable/README.md +3 -0
- package/cdk/scrollable/index.d.ts +1 -0
- package/cdk/scrollable/lib/scrollable.service.d.ts +53 -0
- package/components/spinbox/lib/spinbox.component.d.ts +10 -8
- package/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.d.ts +4 -5
- package/components/tab-bar/lib/tab-bar.component.d.ts +22 -44
- package/esm2022/cdk/scrollable/index.mjs +2 -0
- package/esm2022/cdk/scrollable/lib/scrollable.service.mjs +108 -0
- package/esm2022/cdk/scrollable/odx-angular-cdk-scrollable.mjs +5 -0
- package/esm2022/components/spinbox/lib/spinbox.component.mjs +61 -25
- package/esm2022/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.mjs +10 -17
- package/esm2022/components/tab-bar/lib/tab-bar.component.mjs +75 -114
- package/fesm2022/odx-angular-cdk-scrollable.mjs +115 -0
- package/fesm2022/odx-angular-cdk-scrollable.mjs.map +1 -0
- package/fesm2022/odx-angular-components-spinbox.mjs +60 -24
- package/fesm2022/odx-angular-components-spinbox.mjs.map +1 -1
- package/fesm2022/odx-angular-components-tab-bar.mjs +82 -128
- package/fesm2022/odx-angular-components-tab-bar.mjs.map +1 -1
- package/package.json +7 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { booleanAttribute, ChangeDetectionStrategy, Component, ElementRef,
|
|
3
|
+
import { booleanAttribute, ChangeDetectionStrategy, Component, ElementRef, inject, input, output, ViewEncapsulation } from '@angular/core';
|
|
4
4
|
import { RouterLinkActive } from '@angular/router';
|
|
5
5
|
import { DisabledController } from '@odx/angular';
|
|
6
6
|
import { IconComponent } from '@odx/angular/components/icon';
|
|
@@ -35,13 +35,13 @@ let TabBarItemComponent = class TabBarItemComponent {
|
|
|
35
35
|
* @type {boolean}
|
|
36
36
|
* @default false
|
|
37
37
|
*/
|
|
38
|
-
this.closable = false;
|
|
38
|
+
this.closable = input(false, { transform: booleanAttribute });
|
|
39
39
|
/**
|
|
40
40
|
* Event emitter that fires when the tab is closed. It emits the instance of the tab item component.
|
|
41
41
|
*
|
|
42
42
|
* @emits {TabBarItemComponent}
|
|
43
43
|
*/
|
|
44
|
-
this.tabClose =
|
|
44
|
+
this.tabClose = output();
|
|
45
45
|
}
|
|
46
46
|
get disabled() {
|
|
47
47
|
return !!this.disabledController?.disabled;
|
|
@@ -72,13 +72,13 @@ let TabBarItemComponent = class TabBarItemComponent {
|
|
|
72
72
|
}
|
|
73
73
|
handleClose(event) {
|
|
74
74
|
event.stopPropagation();
|
|
75
|
-
if (this.disabled || !this.closable)
|
|
75
|
+
if (this.disabled || !this.closable())
|
|
76
76
|
return;
|
|
77
77
|
this.tabBar.removeItem(this);
|
|
78
78
|
this.tabClose.emit(this);
|
|
79
79
|
}
|
|
80
80
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabBarItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
81
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TabBarItemComponent, isStandalone: true, selector: "odx-tab-bar-item", inputs: { closable:
|
|
81
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TabBarItemComponent, isStandalone: true, selector: "odx-tab-bar-item", inputs: { closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tabClose: "tabClose" }, host: { attributes: { "role": "tab" }, listeners: { "click": "onClick()" }, properties: { "class.is-disabled": "disabled", "class.is-active": "isActive", "attr.aria-selected": "isActive", "class.is-closable": "closable()" } }, providers: [DisabledController.connect()], ngImport: i0, template: "<ng-content select=\"odx-icon\" />\n<div class=\"odx-tab-bar-item__label\"><ng-content /></div>\n@if (closable()) {\n <odx-icon name=\"close\" iconSet=\"core\" size=\"small\" (click)=\"handleClose($event)\" />\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
82
82
|
};
|
|
83
83
|
TabBarItemComponent = __decorate([
|
|
84
84
|
CSSComponent('tab-bar-item')
|
|
@@ -90,16 +90,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
90
90
|
'[class.is-disabled]': 'disabled',
|
|
91
91
|
'[class.is-active]': 'isActive',
|
|
92
92
|
'[attr.aria-selected]': 'isActive',
|
|
93
|
-
'[class.is-closable]': 'closable',
|
|
93
|
+
'[class.is-closable]': 'closable()',
|
|
94
94
|
role: 'tab',
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}], tabClose: [{
|
|
100
|
-
type: Output
|
|
101
|
-
}], onClick: [{
|
|
102
|
-
type: HostListener,
|
|
103
|
-
args: ['click']
|
|
104
|
-
}] } });
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWJhci1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RhYi1iYXIvc3JjL2xpYi9jb21wb25lbnRzL3RhYi1iYXItaXRlbS90YWItYmFyLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGFiLWJhci9zcmMvbGliL2NvbXBvbmVudHMvdGFiLWJhci1pdGVtL3RhYi1iYXItaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFL0M7Ozs7Ozs7Ozs7R0FVRztBQWtCSSxJQUFNLG1CQUFtQixHQUF6QixNQUFNLG1CQUFtQjtJQUF6QjtRQUNZ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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGlnaGxpZ2h0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlckxpbmtBY3RpdmUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGlzYWJsZWRDb250cm9sbGVyIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IENTU0NvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBkZWZlckZuLCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRBQl9CQVIgfSBmcm9tICcuLi8uLi90YWItYmFyLmNvbmZpZyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBpbmRpdmlkdWFsIHRhYiBpdGVtIGluIGEgdGFiIGJhciBpbnRlcmZhY2UsIHByb3ZpZGluZyBmdW5jdGlvbmFsaXRpZXNcbiAqIGZvciBhY3RpdmF0aW9uLCBkZWFjdGl2YXRpb24sIGFuZCBvcHRpb25hbCBjbG9zaW5nIG9mIHRoZSB0YWIuIFRoaXMgY29tcG9uZW50IGlzIGRlc2lnbmVkXG4gKiB0byBiZSB1c2VkIHdpdGhpbiBhIGBUYWJCYXJDb21wb25lbnRgIHRvIGNyZWF0ZSBhIGNvbXBsZXRlIHRhYmJlZCBpbnRlcmZhY2UuXG4gKlxuICogSXQgc3VwcG9ydHMgZGlzYWJsZWQgc3RhdGUgbWFuYWdlbWVudCB0aHJvdWdoIGBEaXNhYmxlZENvbnRyb2xsZXJgLCBhbGxvd2luZyB0aGUgdGFiIHRvIGJlXG4gKiBkaXNhYmxlZCBiYXNlZCBvbiBwYXJlbnQgY29tcG9uZW50IHN0YXRlcyBvciBpdHMgb3duIGBkaXNhYmxlZGAgaW5wdXQgcHJvcGVydHkuXG4gKlxuICogVGhlIGNvbXBvbmVudCBpbnRlZ3JhdGVzIHdpdGggQW5ndWxhcidzIGBSb3V0ZXJMaW5rQWN0aXZlYCB0byBhdXRvbWF0aWNhbGx5IHNldCBhY3RpdmVcbiAqIHN0eWxlcyBiYXNlZCBvbiB0aGUgY3VycmVudCByb3V0ZXIgc3RhdGUsIGVuaGFuY2luZyBTUEEgbmF2aWdhdGlvbiBleHBlcmllbmNlcy5cbiAqL1xuQENTU0NvbXBvbmVudCgndGFiLWJhci1pdGVtJylcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29keC10YWItYmFyLWl0ZW0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi1iYXItaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtEaXNhYmxlZENvbnRyb2xsZXIuY29ubmVjdCgpXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MuaXMtZGlzYWJsZWRdJzogJ2Rpc2FibGVkJyxcbiAgICAnW2NsYXNzLmlzLWFjdGl2ZV0nOiAnaXNBY3RpdmUnLFxuICAgICdbYXR0ci5hcmlhLXNlbGVjdGVkXSc6ICdpc0FjdGl2ZScsXG4gICAgJ1tjbGFzcy5pcy1jbG9zYWJsZV0nOiAnY2xvc2FibGUnLFxuICAgIHJvbGU6ICd0YWInLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUYWJCYXJJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgSGlnaGxpZ2h0YWJsZSwgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlZENvbnRyb2xsZXIgPSBEaXNhYmxlZENvbnRyb2xsZXIuaW5qZWN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFiQmFyID0gaW5qZWN0KFRBQl9CQVIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlckxpbmtBY3RpdmUgPSBpbmplY3QoUm91dGVyTGlua0FjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSwgc2VsZjogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuXG4gIHByb3RlY3RlZCBpc0FjdGl2ZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZGlzYWJsZWRDb250cm9sbGVyPy5kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHRhYiBjYW4gYmUgY2xvc2VkLiBUaGlzIGNvbnRyb2xzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjbG9zZSBidXR0b25cbiAgICogYW5kIGVuYWJsZXMgdGhlIGVtaXNzaW9uIG9mIHRoZSBgdGFiQ2xvc2VgIGV2ZW50IHdoZW4gdGhlIHRhYiBpcyBjbG9zZWQuXG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBjbG9zYWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVyIHRoYXQgZmlyZXMgd2hlbiB0aGUgdGFiIGlzIGNsb3NlZC4gSXQgZW1pdHMgdGhlIGluc3RhbmNlIG9mIHRoZSB0YWIgaXRlbSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBlbWl0cyB7VGFiQmFySXRlbUNvbXBvbmVudH1cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgdGFiQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYkJhckl0ZW1Db21wb25lbnQ+KCk7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyTGlua0FjdGl2ZT8uaXNBY3RpdmVDaGFuZ2UucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpLCBmaWx0ZXIoQm9vbGVhbikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLm9uQ2xpY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0YWIgYXMgYWN0aXZlIGFuZCBhcHBsaWVzIGNvcnJlc3BvbmRpbmcgc3R5bGVzLiBUaGlzIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZVxuICAgKiBgSGlnaGxpZ2h0YWJsZWAgaW50ZXJmYWNlLCBhbGxvd2luZyB0aGUgdGFiIGJhciB0byBtYW5hZ2UgYWN0aXZlIHN0YXRlcy5cbiAgICovXG4gIHB1YmxpYyBzZXRBY3RpdmVTdHlsZXMoKTogdm9pZCB7XG4gICAgZGVmZXJGbigoKSA9PiAodGhpcy5pc0FjdGl2ZSA9IHRydWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0YWIgYXMgaW5hY3RpdmUgYW5kIHJlbW92ZXMgY29ycmVzcG9uZGluZyBhY3RpdmUgc3R5bGVzLiBUaGlzIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZVxuICAgKiBgSGlnaGxpZ2h0YWJsZWAgaW50ZXJmYWNlLlxuICAgKi9cbiAgcHVibGljIHNldEluYWN0aXZlU3R5bGVzKCk6IHZvaWQge1xuICAgIGRlZmVyRm4oKCkgPT4gKHRoaXMuaXNBY3RpdmUgPSBmYWxzZSkpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBwcm90ZWN0ZWQgb25DbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMudGFiQmFyLmFjdGl2YXRlSXRlbSh0aGlzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDbG9zZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5jbG9zYWJsZSkgcmV0dXJuO1xuICAgIHRoaXMudGFiQmFyLnJlbW92ZUl0ZW0odGhpcyk7XG4gICAgdGhpcy50YWJDbG9zZS5lbWl0KHRoaXMpO1xuICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJvZHgtaWNvblwiIC8+XG48ZGl2IGNsYXNzPVwib2R4LXRhYi1iYXItaXRlbV9fbGFiZWxcIj48bmctY29udGVudCAvPjwvZGl2PlxuQGlmIChjbG9zYWJsZSkge1xuICA8b2R4LWljb24gbmFtZT1cImNsb3NlXCIgaWNvblNldD1cImNvcmVcIiBzaXplPVwic21hbGxcIiAoY2xpY2spPVwiaGFuZGxlQ2xvc2UoJGV2ZW50KVwiIC8+XG59XG4iXX0=
|
|
95
|
+
'(click)': 'onClick()',
|
|
96
|
+
}, template: "<ng-content select=\"odx-icon\" />\n<div class=\"odx-tab-bar-item__label\"><ng-content /></div>\n@if (closable()) {\n <odx-icon name=\"close\" iconSet=\"core\" size=\"small\" (click)=\"handleClose($event)\" />\n}\n" }]
|
|
97
|
+
}] });
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWJhci1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RhYi1iYXIvc3JjL2xpYi9jb21wb25lbnRzL3RhYi1iYXItaXRlbS90YWItYmFyLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGFiLWJhci9zcmMvbGliL2NvbXBvbmVudHMvdGFiLWJhci1pdGVtL3RhYi1iYXItaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25KLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRS9DOzs7Ozs7Ozs7O0dBVUc7QUFtQkksSUFBTSxtQkFBbUIsR0FBekIsTUFBTSxtQkFBbUI7SUFBekI7UUFDWSx1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqRCxXQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUUsdUJBQWtCLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFFN0MsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVYLFlBQU8sR0FBNEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBTXRFOzs7Ozs7V0FNRztRQUNJLGFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUVoRTs7OztXQUlHO1FBQ0ksYUFBUSxHQUFHLE1BQU0sRUFBdUIsQ0FBQztLQW1DakQ7SUFyREMsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUM7SUFDN0MsQ0FBQztJQWtCTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNwRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZUFBZTtRQUNwQixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVTLE9BQU87UUFDZixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRVMsV0FBVyxDQUFDLEtBQVk7UUFDaEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7K0dBOURVLG1CQUFtQjttR0FBbkIsbUJBQW1CLGtkQVZuQixDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDLDBCQzlCM0MseU5BS0EsMkNEcUJZLFlBQVksK0JBQUUsYUFBYTs7QUFjMUIsbUJBQW1CO0lBbEIvQixZQUFZLENBQUMsY0FBYyxDQUFDO0dBa0JoQixtQkFBbUIsQ0ErRC9COzs0RkEvRFksbUJBQW1CO2tCQWpCL0IsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxpQkFFdkIsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQ25DO3dCQUNKLHFCQUFxQixFQUFFLFVBQVU7d0JBQ2pDLG1CQUFtQixFQUFFLFVBQVU7d0JBQy9CLHNCQUFzQixFQUFFLFVBQVU7d0JBQ2xDLHFCQUFxQixFQUFFLFlBQVk7d0JBQ25DLElBQUksRUFBRSxLQUFLO3dCQUNYLFNBQVMsRUFBRSxXQUFXO3FCQUN2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhpZ2hsaWdodGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgYm9vbGVhbkF0dHJpYnV0ZSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgT25Jbml0LCBvdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rQWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERpc2FibGVkQ29udHJvbGxlciB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgZGVmZXJGbiwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUQUJfQkFSIH0gZnJvbSAnLi4vLi4vdGFiLWJhci5jb25maWcnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gaW5kaXZpZHVhbCB0YWIgaXRlbSBpbiBhIHRhYiBiYXIgaW50ZXJmYWNlLCBwcm92aWRpbmcgZnVuY3Rpb25hbGl0aWVzXG4gKiBmb3IgYWN0aXZhdGlvbiwgZGVhY3RpdmF0aW9uLCBhbmQgb3B0aW9uYWwgY2xvc2luZyBvZiB0aGUgdGFiLiBUaGlzIGNvbXBvbmVudCBpcyBkZXNpZ25lZFxuICogdG8gYmUgdXNlZCB3aXRoaW4gYSBgVGFiQmFyQ29tcG9uZW50YCB0byBjcmVhdGUgYSBjb21wbGV0ZSB0YWJiZWQgaW50ZXJmYWNlLlxuICpcbiAqIEl0IHN1cHBvcnRzIGRpc2FibGVkIHN0YXRlIG1hbmFnZW1lbnQgdGhyb3VnaCBgRGlzYWJsZWRDb250cm9sbGVyYCwgYWxsb3dpbmcgdGhlIHRhYiB0byBiZVxuICogZGlzYWJsZWQgYmFzZWQgb24gcGFyZW50IGNvbXBvbmVudCBzdGF0ZXMgb3IgaXRzIG93biBgZGlzYWJsZWRgIGlucHV0IHByb3BlcnR5LlxuICpcbiAqIFRoZSBjb21wb25lbnQgaW50ZWdyYXRlcyB3aXRoIEFuZ3VsYXIncyBgUm91dGVyTGlua0FjdGl2ZWAgdG8gYXV0b21hdGljYWxseSBzZXQgYWN0aXZlXG4gKiBzdHlsZXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgcm91dGVyIHN0YXRlLCBlbmhhbmNpbmcgU1BBIG5hdmlnYXRpb24gZXhwZXJpZW5jZXMuXG4gKi9cbkBDU1NDb21wb25lbnQoJ3RhYi1iYXItaXRlbScpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZHgtdGFiLWJhci1pdGVtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWItYmFyLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbRGlzYWJsZWRDb250cm9sbGVyLmNvbm5lY3QoKV0sXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLmlzLWRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgJ1tjbGFzcy5pcy1hY3RpdmVdJzogJ2lzQWN0aXZlJyxcbiAgICAnW2F0dHIuYXJpYS1zZWxlY3RlZF0nOiAnaXNBY3RpdmUnLFxuICAgICdbY2xhc3MuaXMtY2xvc2FibGVdJzogJ2Nsb3NhYmxlKCknLFxuICAgIHJvbGU6ICd0YWInLFxuICAgICcoY2xpY2spJzogJ29uQ2xpY2soKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYkJhckl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBIaWdobGlnaHRhYmxlLCBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc2FibGVkQ29udHJvbGxlciA9IERpc2FibGVkQ29udHJvbGxlci5pbmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWJCYXIgPSBpbmplY3QoVEFCX0JBUik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyTGlua0FjdGl2ZSA9IGluamVjdChSb3V0ZXJMaW5rQWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlLCBzZWxmOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHRha2VVbnRpbERlc3Ryb3llZCA9IHVudGlsRGVzdHJveWVkKCk7XG5cbiAgcHJvdGVjdGVkIGlzQWN0aXZlID0gZmFsc2U7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kaXNhYmxlZENvbnRyb2xsZXI/LmRpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgdGFiIGNhbiBiZSBjbG9zZWQuIFRoaXMgY29udHJvbHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNsb3NlIGJ1dHRvblxuICAgKiBhbmQgZW5hYmxlcyB0aGUgZW1pc3Npb24gb2YgdGhlIGB0YWJDbG9zZWAgZXZlbnQgd2hlbiB0aGUgdGFiIGlzIGNsb3NlZC5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwdWJsaWMgY2xvc2FibGUgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZXIgdGhhdCBmaXJlcyB3aGVuIHRoZSB0YWIgaXMgY2xvc2VkLiBJdCBlbWl0cyB0aGUgaW5zdGFuY2Ugb2YgdGhlIHRhYiBpdGVtIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGVtaXRzIHtUYWJCYXJJdGVtQ29tcG9uZW50fVxuICAgKi9cbiAgcHVibGljIHRhYkNsb3NlID0gb3V0cHV0PFRhYkJhckl0ZW1Db21wb25lbnQ+KCk7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyTGlua0FjdGl2ZT8uaXNBY3RpdmVDaGFuZ2UucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpLCBmaWx0ZXIoQm9vbGVhbikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLm9uQ2xpY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0YWIgYXMgYWN0aXZlIGFuZCBhcHBsaWVzIGNvcnJlc3BvbmRpbmcgc3R5bGVzLiBUaGlzIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZVxuICAgKiBgSGlnaGxpZ2h0YWJsZWAgaW50ZXJmYWNlLCBhbGxvd2luZyB0aGUgdGFiIGJhciB0byBtYW5hZ2UgYWN0aXZlIHN0YXRlcy5cbiAgICovXG4gIHB1YmxpYyBzZXRBY3RpdmVTdHlsZXMoKTogdm9pZCB7XG4gICAgZGVmZXJGbigoKSA9PiAodGhpcy5pc0FjdGl2ZSA9IHRydWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0YWIgYXMgaW5hY3RpdmUgYW5kIHJlbW92ZXMgY29ycmVzcG9uZGluZyBhY3RpdmUgc3R5bGVzLiBUaGlzIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZVxuICAgKiBgSGlnaGxpZ2h0YWJsZWAgaW50ZXJmYWNlLlxuICAgKi9cbiAgcHVibGljIHNldEluYWN0aXZlU3R5bGVzKCk6IHZvaWQge1xuICAgIGRlZmVyRm4oKCkgPT4gKHRoaXMuaXNBY3RpdmUgPSBmYWxzZSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLnRhYkJhci5hY3RpdmF0ZUl0ZW0odGhpcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQ2xvc2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuY2xvc2FibGUoKSkgcmV0dXJuO1xuICAgIHRoaXMudGFiQmFyLnJlbW92ZUl0ZW0odGhpcyk7XG4gICAgdGhpcy50YWJDbG9zZS5lbWl0KHRoaXMpO1xuICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJvZHgtaWNvblwiIC8+XG48ZGl2IGNsYXNzPVwib2R4LXRhYi1iYXItaXRlbV9fbGFiZWxcIj48bmctY29udGVudCAvPjwvZGl2PlxuQGlmIChjbG9zYWJsZSgpKSB7XG4gIDxvZHgtaWNvbiBuYW1lPVwiY2xvc2VcIiBpY29uU2V0PVwiY29yZVwiIHNpemU9XCJzbWFsbFwiIChjbGljayk9XCJoYW5kbGVDbG9zZSgkZXZlbnQpXCIgLz5cbn1cbiJdfQ==
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { ChangeDetectionStrategy,
|
|
4
|
+
import { ChangeDetectionStrategy, Component, computed, contentChildren, effect, forwardRef, inject, Injector, model, output, viewChild, ViewEncapsulation, } from '@angular/core';
|
|
5
|
+
import { toObservable } from '@angular/core/rxjs-interop';
|
|
5
6
|
import { ActiveIndicatorDirective } from '@odx/angular/cdk/active-indicator';
|
|
7
|
+
import { ScrollableService } from '@odx/angular/cdk/scrollable';
|
|
6
8
|
import { IconComponent } from '@odx/angular/components/icon';
|
|
7
|
-
import { CSSComponent
|
|
8
|
-
import { fromElementResize
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { CSSComponent } from '@odx/angular/internal';
|
|
10
|
+
import { fromElementResize$ } from '@odx/angular/rxjs';
|
|
11
|
+
import { injectElement, untilDestroyed } from '@odx/angular/utils';
|
|
12
|
+
import { distinctUntilChanged, filter, merge, skip, tap } from 'rxjs';
|
|
11
13
|
import { TabBarItemComponent } from './components';
|
|
12
14
|
import { TAB_BAR } from './tab-bar.config';
|
|
13
15
|
import * as i0 from "@angular/core";
|
|
@@ -23,23 +25,32 @@ import * as i0 from "@angular/core";
|
|
|
23
25
|
*/
|
|
24
26
|
let TabBarComponent = class TabBarComponent {
|
|
25
27
|
constructor() {
|
|
26
|
-
this.changeDetector = inject(ChangeDetectorRef);
|
|
27
28
|
this.takeUntilDestroyed = untilDestroyed();
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
29
|
+
this.scrollableService = inject(ScrollableService);
|
|
30
|
+
this.nextTab = this.scrollableService.nextItem;
|
|
31
|
+
this.prevTab = this.scrollableService.prevItem;
|
|
32
|
+
this.tabs = contentChildren(TabBarItemComponent);
|
|
33
|
+
this.activeItem = computed(() => this.tabs().at(this.selectedIndex()) ?? null);
|
|
34
|
+
this.keyManager = new ActiveDescendantKeyManager(this.tabs, inject(Injector))
|
|
35
|
+
.withWrap()
|
|
36
|
+
.withHomeAndEnd()
|
|
37
|
+
.withHorizontalOrientation('ltr')
|
|
38
|
+
.withVerticalOrientation(false);
|
|
39
|
+
this.scrollContainerElement = viewChild.required('scrollContainer');
|
|
30
40
|
this.element = injectElement();
|
|
31
41
|
/**
|
|
32
|
-
*
|
|
42
|
+
* Index of the currently selected tab. Use this property to programmatically
|
|
43
|
+
* change the active tab. It responds to changes by updating the active state of the corresponding
|
|
44
|
+
* tab item and adjusting the view if necessary.
|
|
33
45
|
*
|
|
34
|
-
* @type {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* @type {boolean}
|
|
46
|
+
* @type {number}
|
|
47
|
+
* @example
|
|
48
|
+
* Programmatically select the second tab (index starts from 0):
|
|
49
|
+
* ```html
|
|
50
|
+
* <odx-tab-bar [selectedIndex]="1"></odx-tab-bar>
|
|
51
|
+
* ```
|
|
41
52
|
*/
|
|
42
|
-
this.
|
|
53
|
+
this.selectedIndex = model(0);
|
|
43
54
|
/**
|
|
44
55
|
* An EventEmitter that emits whenever a new tab is selected. It provides the `TabChangeEvent`
|
|
45
56
|
* which contains the index of the newly selected tab and the instance of the corresponding
|
|
@@ -57,128 +68,78 @@ let TabBarComponent = class TabBarComponent {
|
|
|
57
68
|
* }
|
|
58
69
|
* ```
|
|
59
70
|
*/
|
|
60
|
-
this.selectedTabChanged =
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
ngAfterViewInit() {
|
|
78
|
-
this.keyManager = new ActiveDescendantKeyManager(this.tabs).withWrap().withHomeAndEnd().withHorizontalOrientation('ltr').withVerticalOrientation(false);
|
|
79
|
-
const updatePanelPosition$ = merge(this.selectedTabChanged, fromQueryList(this.tabs), fromElementResize$(this.element.nativeElement)).pipe(debounceTime(0), tap(() => this.updatePanelPosition()));
|
|
80
|
-
const updateActionVisibility$ = fromEvent(this.tabBarPanelElement.nativeElement, 'transitionend').pipe(tap(({ target }) => target === this.tabBarPanelElement.nativeElement && this.updateActionVisbility()));
|
|
81
|
-
const activeItemChange$ = merge(this.keyManager.change.pipe(tap(() => this.activeItemChange())), this.selectedIndex$$.pipe(tap((index) => this.keyManager?.setActiveItem(index))));
|
|
82
|
-
merge(activeItemChange$, updatePanelPosition$, updateActionVisibility$).pipe(this.takeUntilDestroyed()).subscribe();
|
|
83
|
-
this.tabs.changes.pipe(this.takeUntilDestroyed()).subscribe(() => this.selectedIndex$$.next(this.selectedIndex$$.value));
|
|
71
|
+
this.selectedTabChanged = output();
|
|
72
|
+
const tabState = computed(() => ({
|
|
73
|
+
selectedIndex: this.selectedIndex(),
|
|
74
|
+
selectedTab: this.activeItem(),
|
|
75
|
+
}));
|
|
76
|
+
merge(this.keyManager.change.pipe(tap((index) => this.selectedIndex.set(index ?? -1))), fromElementResize$(this.element.nativeElement, 600).pipe(tap(() => this.scrollableService.scrollActiveItemIntoView(this.activeItem()?.element.nativeElement ?? null))), toObservable(tabState).pipe(skip(1), distinctUntilChanged((a, b) => a.selectedIndex === b.selectedIndex), filter(({ selectedTab }) => !selectedTab?.disabled), tap((state) => {
|
|
77
|
+
this.selectedTabChanged.emit(state);
|
|
78
|
+
this.scrollableService.scrollActiveItemIntoView(state.selectedTab?.element.nativeElement ?? null);
|
|
79
|
+
})))
|
|
80
|
+
.pipe(this.takeUntilDestroyed())
|
|
81
|
+
.subscribe();
|
|
82
|
+
effect(() => {
|
|
83
|
+
this.keyManager.setActiveItem(this.selectedIndex());
|
|
84
|
+
}, { allowSignalWrites: true });
|
|
85
|
+
effect(() => {
|
|
86
|
+
this.scrollableService.observe(this.scrollContainerElement(), this.tabs());
|
|
87
|
+
});
|
|
84
88
|
}
|
|
85
89
|
/**
|
|
86
|
-
* Activates the specified tab item.
|
|
87
|
-
*
|
|
88
|
-
* @param {TabBarItemComponent | null} item - The tab item to activate. If not provided or null, the active item will be cleared.
|
|
90
|
+
* Activates the specified tab item, making it the currently selected tab.
|
|
91
|
+
* If the item is already active, no action is taken.
|
|
89
92
|
*
|
|
90
|
-
* @
|
|
91
|
-
* ```ts
|
|
92
|
-
* // Activate the first tab item
|
|
93
|
-
* tabBar.activateItem(tabItems[0]);
|
|
94
|
-
*
|
|
95
|
-
* // Clear the active item
|
|
96
|
-
* tabBar.activateItem(null);
|
|
97
|
-
* ```
|
|
93
|
+
* @param {TabBarItemComponent | null} item - The tab item to activate.
|
|
98
94
|
*/
|
|
99
95
|
activateItem(item) {
|
|
100
|
-
if (item === this.activeItem)
|
|
96
|
+
if (item === this.keyManager?.activeItem)
|
|
101
97
|
return;
|
|
102
|
-
const selectedIndex = item ? this.tabs
|
|
103
|
-
this.
|
|
98
|
+
const selectedIndex = item ? this.tabs().indexOf(item) : -1;
|
|
99
|
+
this.selectedIndex.set(selectedIndex);
|
|
104
100
|
}
|
|
105
101
|
/**
|
|
106
|
-
*
|
|
107
|
-
* If the
|
|
102
|
+
* Fires when the specified tab item is removed from the tab bar.
|
|
103
|
+
* If the item is currently active, the previous tab is activated.
|
|
108
104
|
*
|
|
109
|
-
* @param {TabBarItemComponent} item - The item to
|
|
105
|
+
* @param {TabBarItemComponent} item - The tab item to remove.
|
|
110
106
|
*/
|
|
111
107
|
removeItem(item) {
|
|
112
|
-
if (this.activeItem !== item)
|
|
108
|
+
if (this.keyManager?.activeItem !== item)
|
|
113
109
|
return;
|
|
114
|
-
|
|
110
|
+
this.keyManager?.setPreviousItemActive();
|
|
115
111
|
}
|
|
116
112
|
onKeydown(event) {
|
|
117
113
|
this.keyManager?.onKeydown(event);
|
|
118
114
|
}
|
|
119
|
-
|
|
120
|
-
const
|
|
121
|
-
if (!
|
|
115
|
+
onFocused() {
|
|
116
|
+
const activeItem = this.activeItem()?.element.nativeElement;
|
|
117
|
+
if (!activeItem)
|
|
122
118
|
return;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
const panelPositionX = tabBarRect.width / 2 - activeElement.offsetLeft - activeElement.offsetWidth / 2;
|
|
127
|
-
const positionX = Math.min(0, Math.max(panelPositionX, maxPanelPositionX));
|
|
128
|
-
applyStyles(this.tabBarPanelElement.nativeElement, {
|
|
129
|
-
transform: cssTranslate(px(positionX), 0),
|
|
130
|
-
});
|
|
131
|
-
this.updateActionVisbility();
|
|
132
|
-
}
|
|
133
|
-
updateActionVisbility() {
|
|
134
|
-
const panelRect = this.tabBarPanelElement.nativeElement.getBoundingClientRect();
|
|
135
|
-
const tabBarRect = this.element.nativeElement.getBoundingClientRect();
|
|
136
|
-
this.overflowLeft = panelRect.left < tabBarRect.left;
|
|
137
|
-
this.overflowRight = panelRect.right > tabBarRect.right;
|
|
138
|
-
this.changeDetector.detectChanges();
|
|
119
|
+
if (this.scrollableService.visibleItems().includes(activeItem))
|
|
120
|
+
return;
|
|
121
|
+
this.scrollableService.scrollActiveItemIntoView(activeItem);
|
|
139
122
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
this.activeItem = activeItem ?? null;
|
|
143
|
-
this.selectedTabChanged.emit({ selectedIndex: activeItemIndex ?? -1, selectedTab: this.keyManager?.activeItem ?? null });
|
|
123
|
+
scrollTabs(direction = 1) {
|
|
124
|
+
this.scrollableService.scroll(direction);
|
|
144
125
|
}
|
|
145
126
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
146
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
127
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: TabBarComponent, isStandalone: true, selector: "odx-tab-bar", inputs: { selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedIndex: "selectedIndexChange", selectedTabChanged: "selectedTabChanged" }, host: { attributes: { "role": "tabpanel", "tabindex": "0" }, listeners: { "keydown": "onKeydown($event)", "focus": "onFocused()" }, properties: { "class.odx-tab-bar--overflow-left": "!!prevTab()", "class.odx-tab-bar--overflow-right": "!!nextTab()" } }, providers: [{ provide: TAB_BAR, useExisting: forwardRef(() => TabBarComponent) }, ScrollableService], queries: [{ propertyName: "tabs", predicate: TabBarItemComponent, isSignal: true }], viewQueries: [{ propertyName: "scrollContainerElement", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<button #tabAction class=\"odx-tab-bar__action odx-tab-bar__action--prev\" [class.is-active]=\"!!prevTab()\" (click)=\"scrollTabs(-1)\" tabindex=\"-1\">\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-left\" iconSet=\"core\" />\n</button>\n<div class=\"odx-tab-bar__inner\" #scrollContainer tabindex=\"-1\">\n <div class=\"odx-tab-bar__panel\" role=\"tablist\" #tabBarPanel>\n <ng-content />\n <div class=\"odx-tab-bar__indicator\" [odxActiveIndicator]=\"activeItem()?.element?.nativeElement\" odxActiveIndicatorPosition=\"start\"></div>\n </div>\n</div>\n<button #tabAction class=\"odx-tab-bar__action odx-tab-bar__action--next\" [class.is-active]=\"!!nextTab()\" (click)=\"scrollTabs()\" tabindex=\"-1\">\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-right\" iconSet=\"core\" />\n</button>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "directive", type: ActiveIndicatorDirective, selector: "[odxActiveIndicator]", inputs: ["odxActiveIndicator", "odxActiveIndicatorParent", "odxActiveIndicatorDirection", "odxActiveIndicatorPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
147
128
|
};
|
|
148
|
-
__decorate([
|
|
149
|
-
CSSModifier(),
|
|
150
|
-
__metadata("design:type", Object)
|
|
151
|
-
], TabBarComponent.prototype, "overflowLeft", void 0);
|
|
152
|
-
__decorate([
|
|
153
|
-
CSSModifier(),
|
|
154
|
-
__metadata("design:type", Object)
|
|
155
|
-
], TabBarComponent.prototype, "overflowRight", void 0);
|
|
156
129
|
TabBarComponent = __decorate([
|
|
157
|
-
CSSComponent('tab-bar')
|
|
130
|
+
CSSComponent('tab-bar'),
|
|
131
|
+
__metadata("design:paramtypes", [])
|
|
158
132
|
], TabBarComponent);
|
|
159
133
|
export { TabBarComponent };
|
|
160
134
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabBarComponent, decorators: [{
|
|
161
135
|
type: Component,
|
|
162
|
-
args: [{ selector: 'odx-tab-bar', standalone: true, imports: [CommonModule, IconComponent, ActiveIndicatorDirective], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: TAB_BAR, useExisting: forwardRef(() => TabBarComponent) }], host: {
|
|
136
|
+
args: [{ selector: 'odx-tab-bar', standalone: true, imports: [CommonModule, IconComponent, ActiveIndicatorDirective], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: TAB_BAR, useExisting: forwardRef(() => TabBarComponent) }, ScrollableService], host: {
|
|
163
137
|
role: 'tabpanel',
|
|
164
138
|
tabindex: '0',
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
args: ['tabAction']
|
|
172
|
-
}], tabs: [{
|
|
173
|
-
type: ContentChildren,
|
|
174
|
-
args: [TabBarItemComponent]
|
|
175
|
-
}], overflowLeft: [], overflowRight: [], selectedIndex: [{
|
|
176
|
-
type: Input,
|
|
177
|
-
args: [{ transform: numberAttribute }]
|
|
178
|
-
}], selectedTabChanged: [{
|
|
179
|
-
type: Output
|
|
180
|
-
}], onKeydown: [{
|
|
181
|
-
type: HostListener,
|
|
182
|
-
args: ['keydown', ['$event']]
|
|
183
|
-
}] } });
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWItYmFyL3NyYy9saWIvdGFiLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWItYmFyL3NyYy9saWIvdGFiLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUNmLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FB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dCB7IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZlSW5kaWNhdG9yRGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9hY3RpdmUtaW5kaWNhdG9yJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IENTU0NvbXBvbmVudCwgQ1NTTW9kaWZpZXIgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgZnJvbUVsZW1lbnRSZXNpemUkLCBmcm9tUXVlcnlMaXN0IH0gZnJvbSAnQG9keC9hbmd1bGFyL3J4anMnO1xuaW1wb3J0IHsgYXBwbHlTdHlsZXMsIGNzc1RyYW5zbGF0ZSwgZGVmZXJGbiwgaW5qZWN0RWxlbWVudCwgcHgsIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIG1lcmdlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYkJhckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgVGFiQ2hhbmdlRXZlbnQgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBUQUJfQkFSIH0gZnJvbSAnLi90YWItYmFyLmNvbmZpZyc7XG5cbi8qKlxuICogYFRhYkJhckNvbXBvbmVudGAgY3JlYXRlcyBhIGR5bmFtaWMgYW5kIGFjY2Vzc2libGUgdGFiIGJhciBpbnRlcmZhY2UsXG4gKiBmYWNpbGl0YXRpbmcgdGhlIG1hbmFnZW1lbnQgYW5kIGludGVyYWN0aW9uIHdpdGggYSBjb2xsZWN0aW9uIG9mIHRhYnMuXG4gKiBJdCBzdXBwb3J0cyBrZXlib2FyZCBuYXZpZ2F0aW9uLCBkeW5hbWljIHRhYiBtYW5hZ2VtZW50LCBhbmQgcmVzcG9uc2l2ZSBvdmVyZmxvdyBhY3Rpb25zLlxuICpcbiAqIFRoZSBjb21wb25lbnQgaW50ZWdyYXRlcyB3aXRoIEFuZ3VsYXIncyBDb250ZW50Q2hpbGRyZW4gdG8gZHluYW1pY2FsbHkgbWFuYWdlIHRoZSB0YWJzIGJhc2VkIG9uIHRoZWlyIGNvbnRlbnQuXG4gKiBJdCB1c2VzIEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIGZyb20gQW5ndWxhciBDREsgZm9yIG1hbmFnaW5nIGZvY3VzIGFuZCBrZXlib2FyZCBuYXZpZ2F0aW9uLFxuICogbWFraW5nIGl0IGFjY2Vzc2libGUgYW5kIHVzZXItZnJpZW5kbHkuIEFkZGl0aW9uYWxseSwgaXQgaGFuZGxlcyBvdmVyZmxvdyB3aXRoIG5hdmlnYXRpb25hbCBhcnJvd3MsXG4gKiBhbGxvd2luZyBmb3IgYSBzbW9vdGggdXNlciBleHBlcmllbmNlIGV2ZW4gd2l0aCBhIGxhcmdlIG51bWJlciBvZiB0YWJzLlxuICovXG5AQ1NTQ29tcG9uZW50KCd0YWItYmFyJylcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29keC10YWItYmFyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudCwgQWN0aXZlSW5kaWNhdG9yRGlyZWN0aXZlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi1iYXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBUQUJfQkFSLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUYWJCYXJDb21wb25lbnQpIH1dLFxuICBob3N0OiB7XG4gICAgcm9sZTogJ3RhYnBhbmVsJyxcbiAgICB0YWJpbmRleDogJzAnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUYWJCYXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZEluZGV4JCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuXG4gIHByb3RlY3RlZCBhY3RpdmVJdGVtOiBUYWJCYXJJdGVtQ29tcG9uZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIGtleU1hbmFnZXI/OiBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcjxUYWJCYXJJdGVtQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkKCd0YWJCYXJQYW5lbCcpXG4gIHByb3RlY3RlZCB0YWJCYXJQYW5lbEVsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBAVmlld0NoaWxkcmVuKCd0YWJBY3Rpb24nKVxuICBwcm90ZWN0ZWQgdGFiQWN0aW9uRWxlbWVudHMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oVGFiQmFySXRlbUNvbXBvbmVudClcbiAgcHJvdGVjdGVkIHRhYnMhOiBRdWVyeUxpc3Q8VGFiQmFySXRlbUNvbXBvbmVudD47XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0YWIgYmFyIGhhcyBvdmVyZmxvd2VkIHRvIHRoZSBsZWZ0LlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIEBDU1NNb2RpZmllcigpXG4gIHB1YmxpYyBvdmVyZmxvd0xlZnQgPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRhYiBiYXIgaGFzIG92ZXJmbG93ZWQgdG8gdGhlIHJpZ2h0LlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIEBDU1NNb2RpZmllcigpXG4gIHB1YmxpYyBvdmVyZmxvd1JpZ2h0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YWIuIFVzZSB0aGlzIHByb3BlcnR5IHRvIHByb2dyYW1tYXRpY2FsbHlcbiAgICogY2hhbmdlIHRoZSBhY3RpdmUgdGFiLiBJdCByZXNwb25kcyB0byBjaGFuZ2VzIGJ5IHVwZGF0aW5nIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGNvcnJlc3BvbmRpbmdcbiAgICogdGFiIGl0ZW0gYW5kIGFkanVzdGluZyB0aGUgdmlldyBpZiBuZWNlc3NhcnkuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBleGFtcGxlXG4gICAqIFByb2dyYW1tYXRpY2FsbHkgc2VsZWN0IHRoZSBzZWNvbmQgdGFiIChpbmRleCBzdGFydHMgZnJvbSAwKTpcbiAgICogYGBgaHRtbFxuICAgKiA8b2R4LXRhYi1iYXIgW3NlbGVjdGVkSW5kZXhdPVwiMVwiPjwvb2R4LXRhYi1iYXI+XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgcHVibGljIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXgkJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBFdmVudEVtaXR0ZXIgdGhhdCBlbWl0cyB3aGVuZXZlciBhIG5ldyB0YWIgaXMgc2VsZWN0ZWQuIEl0IHByb3ZpZGVzIHRoZSBgVGFiQ2hhbmdlRXZlbnRgXG4gICAqIHdoaWNoIGNvbnRhaW5zIHRoZSBpbmRleCBvZiB0aGUgbmV3bHkgc2VsZWN0ZWQgdGFiIGFuZCB0aGUgaW5zdGFuY2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmdcbiAgICogYFRhYkJhckl0ZW1Db21wb25lbnRgLiBTdWJzY3JpYmUgdG8gdGhpcyBvdXRwdXQgdG8gcGVyZm9ybSBhY3Rpb25zIHdoZW4gdGhlIGFjdGl2ZSB0YWIgY2hhbmdlcy5cbiAgICpcbiAgICogQGVtaXRzIHtUYWJDaGFuZ2VFdmVudH1cbiAgICogQGV4YW1wbGVcbiAgICogYGBgaHRtbFxuICAgKiA8b2R4LXRhYi1iYXIgKHNlbGVjdGVkVGFiQ2hhbmdlZCk9XCJvblRhYkNoYW5nZSgkZXZlbnQpXCI+PC9vZHgtdGFiLWJhcj5cbiAgICogYGBgXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIG9uVGFiQ2hhbmdlKGV2ZW50OiBUYWJDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgKiAgIGNvbnNvbGUubG9nKGBOZXcgYWN0aXZlIHRhYiBpbmRleDogJHtldmVudC5zZWxlY3RlZEluZGV4fWApO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZFRhYkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYkNoYW5nZUV2ZW50PigpO1xuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyKHRoaXMudGFicykud2l0aFdyYXAoKS53aXRoSG9tZUFuZEVuZCgpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24oJ2x0cicpLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKGZhbHNlKTtcbiAgICBjb25zdCB1cGRhdGVQYW5lbFBvc2l0aW9uJCA9IG1lcmdlKHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2VkLCBmcm9tUXVlcnlMaXN0KHRoaXMudGFicyksIGZyb21FbGVtZW50UmVzaXplJCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkpLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICB0YXAoKCkgPT4gdGhpcy51cGRhdGVQYW5lbFBvc2l0aW9uKCkpLFxuICAgICk7XG4gICAgY29uc3QgdXBkYXRlQWN0aW9uVmlzaWJpbGl0eSQgPSBmcm9tRXZlbnQodGhpcy50YWJCYXJQYW5lbEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb25lbmQnKS5waXBlKFxuICAgICAgdGFwKCh7IHRhcmdldCB9KSA9PiB0YXJnZXQgPT09IHRoaXMudGFiQmFyUGFuZWxFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy51cGRhdGVBY3Rpb25WaXNiaWxpdHkoKSksXG4gICAgKTtcbiAgICBjb25zdCBhY3RpdmVJdGVtQ2hhbmdlJCA9IG1lcmdlKFxuICAgICAgdGhpcy5rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKHRhcCgoKSA9PiB0aGlzLmFjdGl2ZUl0ZW1DaGFuZ2UoKSkpLFxuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4JCQucGlwZSh0YXAoKGluZGV4KSA9PiB0aGlzLmtleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oaW5kZXgpKSksXG4gICAgKTtcbiAgICBtZXJnZShhY3RpdmVJdGVtQ2hhbmdlJCwgdXBkYXRlUGFuZWxQb3NpdGlvbiQsIHVwZGF0ZUFjdGlvblZpc2liaWxpdHkkKS5waXBlKHRoaXMudGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgpO1xuICAgIHRoaXMudGFicy5jaGFuZ2VzLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2VsZWN0ZWRJbmRleCQkLm5leHQodGhpcy5zZWxlY3RlZEluZGV4JCQudmFsdWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgdGhlIHNwZWNpZmllZCB0YWIgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIHtUYWJCYXJJdGVtQ29tcG9uZW50IHwgbnVsbH0gaXRlbSAtIFRoZSB0YWIgaXRlbSB0byBhY3RpdmF0ZS4gSWYgbm90IHByb3ZpZGVkIG9yIG51bGwsIHRoZSBhY3RpdmUgaXRlbSB3aWxsIGJlIGNsZWFyZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIC8vIEFjdGl2YXRlIHRoZSBmaXJzdCB0YWIgaXRlbVxuICAgKiB0YWJCYXIuYWN0aXZhdGVJdGVtKHRhYkl0ZW1zWzBdKTtcbiAgICpcbiAgICogLy8gQ2xlYXIgdGhlIGFjdGl2ZSBpdGVtXG4gICAqIHRhYkJhci5hY3RpdmF0ZUl0ZW0obnVsbCk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFjdGl2YXRlSXRlbShpdGVtPzogVGFiQmFySXRlbUNvbXBvbmVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoaXRlbSA9PT0gdGhpcy5hY3RpdmVJdGVtKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IGl0ZW0gPyB0aGlzLnRhYnMudG9BcnJheSgpLmluZGV4T2YoaXRlbSkgOiAtMTtcbiAgICB0aGlzLmtleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oc2VsZWN0ZWRJbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGl0ZW0gZnJvbSB0aGUgdGFiIGJhci5cbiAgICogSWYgdGhlIHJlbW92ZWQgaXRlbSBpcyB0aGUgYWN0aXZlIGl0ZW0sIGl0IHNldHMgdGhlIHByZXZpb3VzIGl0ZW0gYXMgdGhlIG5ldyBhY3RpdmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIHtUYWJCYXJJdGVtQ29tcG9uZW50fSBpdGVtIC0gVGhlIGl0ZW0gdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSB0YWIgYmFyLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZUl0ZW0oaXRlbTogVGFiQmFySXRlbUNvbXBvbmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZUl0ZW0gIT09IGl0ZW0pIHJldHVybjtcbiAgICBkZWZlckZuKCgpID0+IHRoaXMua2V5TWFuYWdlcj8uc2V0UHJldmlvdXNJdGVtQWN0aXZlKCkpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmtleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhbmVsUG9zaXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuYWN0aXZlSXRlbT8uZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghYWN0aXZlRWxlbWVudCkgcmV0dXJuO1xuICAgIGNvbnN0IHBhbmVsUmVjdCA9IHRoaXMudGFiQmFyUGFuZWxFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgdGFiQmFyUmVjdCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG1heFBhbmVsUG9zaXRpb25YID0gTWF0aC5mbG9vcih0YWJCYXJSZWN0LndpZHRoIC0gcGFuZWxSZWN0LndpZHRoKTtcbiAgICBjb25zdCBwYW5lbFBvc2l0aW9uWCA9IHRhYkJhclJlY3Qud2lkdGggLyAyIC0gYWN0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IC0gYWN0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7XG4gICAgY29uc3QgcG9zaXRpb25YID0gTWF0aC5taW4oMCwgTWF0aC5tYXgocGFuZWxQb3NpdGlvblgsIG1heFBhbmVsUG9zaXRpb25YKSk7XG4gICAgYXBwbHlTdHlsZXModGhpcy50YWJCYXJQYW5lbEVsZW1lbnQubmF0aXZlRWxlbWVudCwge1xuICAgICAgdHJhbnNmb3JtOiBjc3NUcmFuc2xhdGUocHgocG9zaXRpb25YKSwgMCksXG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVBY3Rpb25WaXNiaWxpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQWN0aW9uVmlzYmlsaXR5KCk6IHZvaWQge1xuICAgIGNvbnN0IHBhbmVsUmVjdCA9IHRoaXMudGFiQmFyUGFuZWxFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgdGFiQmFyUmVjdCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMub3ZlcmZsb3dMZWZ0ID0gcGFuZWxSZWN0LmxlZnQgPCB0YWJCYXJSZWN0LmxlZnQ7XG4gICAgdGhpcy5vdmVyZmxvd1JpZ2h0ID0gcGFuZWxSZWN0LnJpZ2h0ID4gdGFiQmFyUmVjdC5yaWdodDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZlSXRlbUNoYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGFjdGl2ZUl0ZW1JbmRleCwgYWN0aXZlSXRlbSB9ID0gdGhpcy5rZXlNYW5hZ2VyID8/IHt9O1xuICAgIHRoaXMuYWN0aXZlSXRlbSA9IGFjdGl2ZUl0ZW0gPz8gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlZC5lbWl0KHsgc2VsZWN0ZWRJbmRleDogYWN0aXZlSXRlbUluZGV4ID8/IC0xLCBzZWxlY3RlZFRhYjogdGhpcy5rZXlNYW5hZ2VyPy5hY3RpdmVJdGVtID8/IG51bGwgfSk7XG4gIH1cbn1cbiIsIjxidXR0b25cbiAgI3RhYkFjdGlvblxuICBjbGFzcz1cIm9keC10YWItYmFyX19hY3Rpb24gb2R4LXRhYi1iYXJfX2FjdGlvbi0tcHJldlwiXG4gIFtjbGFzcy5pcy1hY3RpdmVdPVwib3ZlcmZsb3dMZWZ0XCJcbiAgKGNsaWNrKT1cImtleU1hbmFnZXI/LnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpXCJcbiAgdGFiaW5kZXg9XCItMVwiXG4+XG4gIDxvZHgtaWNvbiBjbGFzcz1cInRhYi1iYXItYWN0aW9uLWljb25cIiBuYW1lPVwiY2hldnJvbi1sZWZ0XCIgaWNvblNldD1cImNvcmVcIiAvPlxuPC9idXR0b24+XG48ZGl2IGNsYXNzPVwib2R4LXRhYi1iYXJfX2lubmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJvZHgtdGFiLWJhcl9fcGFuZWxcIiByb2xlPVwidGFibGlzdFwiICN0YWJCYXJQYW5lbD5cbiAgICA8bmctY29udGVudCAvPlxuICAgIDxkaXYgY2xhc3M9XCJvZHgtdGFiLWJhcl9faW5kaWNhdG9yXCIgW29keEFjdGl2ZUluZGljYXRvcl09XCJhY3RpdmVJdGVtPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50XCIgb2R4QWN0aXZlSW5kaWNhdG9yUG9zaXRpb249XCJzdGFydFwiPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGJ1dHRvblxuICAjdGFiQWN0aW9uXG4gIGNsYXNzPVwib2R4LXRhYi1iYXJfX2FjdGlvbiBvZHgtdGFiLWJhcl9fYWN0aW9uLS1uZXh0XCJcbiAgW2NsYXNzLmlzLWFjdGl2ZV09XCJvdmVyZmxvd1JpZ2h0XCJcbiAgKGNsaWNrKT1cImtleU1hbmFnZXI/LnNldE5leHRJdGVtQWN0aXZlKClcIlxuICB0YWJpbmRleD1cIi0xXCJcbj5cbiAgPG9keC1pY29uIGNsYXNzPVwidGFiLWJhci1hY3Rpb24taWNvblwiIG5hbWU9XCJjaGV2cm9uLXJpZ2h0XCIgaWNvblNldD1cImNvcmVcIiAvPlxuPC9idXR0b24+XG4iXX0=
|
|
139
|
+
'[class.odx-tab-bar--overflow-left]': '!!prevTab()',
|
|
140
|
+
'[class.odx-tab-bar--overflow-right]': '!!nextTab()',
|
|
141
|
+
'(keydown)': 'onKeydown($event)',
|
|
142
|
+
'(focus)': 'onFocused()',
|
|
143
|
+
}, template: "<button #tabAction class=\"odx-tab-bar__action odx-tab-bar__action--prev\" [class.is-active]=\"!!prevTab()\" (click)=\"scrollTabs(-1)\" tabindex=\"-1\">\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-left\" iconSet=\"core\" />\n</button>\n<div class=\"odx-tab-bar__inner\" #scrollContainer tabindex=\"-1\">\n <div class=\"odx-tab-bar__panel\" role=\"tablist\" #tabBarPanel>\n <ng-content />\n <div class=\"odx-tab-bar__indicator\" [odxActiveIndicator]=\"activeItem()?.element?.nativeElement\" odxActiveIndicatorPosition=\"start\"></div>\n </div>\n</div>\n<button #tabAction class=\"odx-tab-bar__action odx-tab-bar__action--next\" [class.is-active]=\"!!nextTab()\" (click)=\"scrollTabs()\" tabindex=\"-1\">\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-right\" iconSet=\"core\" />\n</button>\n" }]
|
|
144
|
+
}], ctorParameters: () => [] });
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWItYmFyL3NyYy9saWIvdGFiLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWItYmFyL3NyYy9saWIvdGFiLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixlQUFlLEVBQ2YsTUFBTSxFQUVOLFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxN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RUFBRSxtQkFBbUI7d0JBQ2hDLFNBQVMsRUFBRSxhQUFhO3FCQUN6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBjb250ZW50Q2hpbGRyZW4sXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgbW9kZWwsXG4gIG91dHB1dCxcbiAgdmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBY3RpdmVJbmRpY2F0b3JEaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2FjdGl2ZS1pbmRpY2F0b3InO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZVNlcnZpY2UgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL3Njcm9sbGFibGUnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGZyb21FbGVtZW50UmVzaXplJCB9IGZyb20gJ0BvZHgvYW5ndWxhci9yeGpzJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1lcmdlLCBza2lwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYkJhckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgVGFiQ2hhbmdlRXZlbnQgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBUQUJfQkFSIH0gZnJvbSAnLi90YWItYmFyLmNvbmZpZyc7XG5cbi8qKlxuICogYFRhYkJhckNvbXBvbmVudGAgY3JlYXRlcyBhIGR5bmFtaWMgYW5kIGFjY2Vzc2libGUgdGFiIGJhciBpbnRlcmZhY2UsXG4gKiBmYWNpbGl0YXRpbmcgdGhlIG1hbmFnZW1lbnQgYW5kIGludGVyYWN0aW9uIHdpdGggYSBjb2xsZWN0aW9uIG9mIHRhYnMuXG4gKiBJdCBzdXBwb3J0cyBrZXlib2FyZCBuYXZpZ2F0aW9uLCBkeW5hbWljIHRhYiBtYW5hZ2VtZW50LCBhbmQgcmVzcG9uc2l2ZSBvdmVyZmxvdyBhY3Rpb25zLlxuICpcbiAqIFRoZSBjb21wb25lbnQgaW50ZWdyYXRlcyB3aXRoIEFuZ3VsYXIncyBDb250ZW50Q2hpbGRyZW4gdG8gZHluYW1pY2FsbHkgbWFuYWdlIHRoZSB0YWJzIGJhc2VkIG9uIHRoZWlyIGNvbnRlbnQuXG4gKiBJdCB1c2VzIEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIGZyb20gQW5ndWxhciBDREsgZm9yIG1hbmFnaW5nIGZvY3VzIGFuZCBrZXlib2FyZCBuYXZpZ2F0aW9uLFxuICogbWFraW5nIGl0IGFjY2Vzc2libGUgYW5kIHVzZXItZnJpZW5kbHkuIEFkZGl0aW9uYWxseSwgaXQgaGFuZGxlcyBvdmVyZmxvdyB3aXRoIG5hdmlnYXRpb25hbCBhcnJvd3MsXG4gKiBhbGxvd2luZyBmb3IgYSBzbW9vdGggdXNlciBleHBlcmllbmNlIGV2ZW4gd2l0aCBhIGxhcmdlIG51bWJlciBvZiB0YWJzLlxuICovXG5AQ1NTQ29tcG9uZW50KCd0YWItYmFyJylcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29keC10YWItYmFyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudCwgQWN0aXZlSW5kaWNhdG9yRGlyZWN0aXZlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi1iYXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBUQUJfQkFSLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUYWJCYXJDb21wb25lbnQpIH0sIFNjcm9sbGFibGVTZXJ2aWNlXSxcbiAgaG9zdDoge1xuICAgIHJvbGU6ICd0YWJwYW5lbCcsXG4gICAgdGFiaW5kZXg6ICcwJyxcbiAgICAnW2NsYXNzLm9keC10YWItYmFyLS1vdmVyZmxvdy1sZWZ0XSc6ICchIXByZXZUYWIoKScsXG4gICAgJ1tjbGFzcy5vZHgtdGFiLWJhci0tb3ZlcmZsb3ctcmlnaHRdJzogJyEhbmV4dFRhYigpJyxcbiAgICAnKGtleWRvd24pJzogJ29uS2V5ZG93bigkZXZlbnQpJyxcbiAgICAnKGZvY3VzKSc6ICdvbkZvY3VzZWQoKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYkJhckNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxhYmxlU2VydmljZSA9IGluamVjdChTY3JvbGxhYmxlU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5leHRUYWIgPSB0aGlzLnNjcm9sbGFibGVTZXJ2aWNlLm5leHRJdGVtO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJldlRhYiA9IHRoaXMuc2Nyb2xsYWJsZVNlcnZpY2UucHJldkl0ZW07XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYnMgPSBjb250ZW50Q2hpbGRyZW48VGFiQmFySXRlbUNvbXBvbmVudD4oVGFiQmFySXRlbUNvbXBvbmVudCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBhY3RpdmVJdGVtID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50YWJzKCkuYXQodGhpcy5zZWxlY3RlZEluZGV4KCkpID8/IG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga2V5TWFuYWdlcjogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8VGFiQmFySXRlbUNvbXBvbmVudD4gPSBuZXcgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIodGhpcy50YWJzLCBpbmplY3QoSW5qZWN0b3IpKVxuICAgIC53aXRoV3JhcCgpXG4gICAgLndpdGhIb21lQW5kRW5kKClcbiAgICAud2l0aEhvcml6b250YWxPcmllbnRhdGlvbignbHRyJylcbiAgICAud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oZmFsc2UpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzY3JvbGxDb250YWluZXJFbGVtZW50ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+Pignc2Nyb2xsQ29udGFpbmVyJyk7XG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIC8qKlxuICAgKiBJbmRleCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhYi4gVXNlIHRoaXMgcHJvcGVydHkgdG8gcHJvZ3JhbW1hdGljYWxseVxuICAgKiBjaGFuZ2UgdGhlIGFjdGl2ZSB0YWIuIEl0IHJlc3BvbmRzIHRvIGNoYW5nZXMgYnkgdXBkYXRpbmcgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgY29ycmVzcG9uZGluZ1xuICAgKiB0YWIgaXRlbSBhbmQgYWRqdXN0aW5nIHRoZSB2aWV3IGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGV4YW1wbGVcbiAgICogUHJvZ3JhbW1hdGljYWxseSBzZWxlY3QgdGhlIHNlY29uZCB0YWIgKGluZGV4IHN0YXJ0cyBmcm9tIDApOlxuICAgKiBgYGBodG1sXG4gICAqIDxvZHgtdGFiLWJhciBbc2VsZWN0ZWRJbmRleF09XCIxXCI+PC9vZHgtdGFiLWJhcj5cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0ZWRJbmRleCA9IG1vZGVsPG51bWJlcj4oMCk7XG5cbiAgLyoqXG4gICAqIEFuIEV2ZW50RW1pdHRlciB0aGF0IGVtaXRzIHdoZW5ldmVyIGEgbmV3IHRhYiBpcyBzZWxlY3RlZC4gSXQgcHJvdmlkZXMgdGhlIGBUYWJDaGFuZ2VFdmVudGBcbiAgICogd2hpY2ggY29udGFpbnMgdGhlIGluZGV4IG9mIHRoZSBuZXdseSBzZWxlY3RlZCB0YWIgYW5kIHRoZSBpbnN0YW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZ1xuICAgKiBgVGFiQmFySXRlbUNvbXBvbmVudGAuIFN1YnNjcmliZSB0byB0aGlzIG91dHB1dCB0byBwZXJmb3JtIGFjdGlvbnMgd2hlbiB0aGUgYWN0aXZlIHRhYiBjaGFuZ2VzLlxuICAgKlxuICAgKiBAZW1pdHMge1RhYkNoYW5nZUV2ZW50fVxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBodG1sXG4gICAqIDxvZHgtdGFiLWJhciAoc2VsZWN0ZWRUYWJDaGFuZ2VkKT1cIm9uVGFiQ2hhbmdlKCRldmVudClcIj48L29keC10YWItYmFyPlxuICAgKiBgYGBcbiAgICpcbiAgICogYGBgdHNcbiAgICogb25UYWJDaGFuZ2UoZXZlbnQ6IFRhYkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAqICAgY29uc29sZS5sb2coYE5ldyBhY3RpdmUgdGFiIGluZGV4OiAke2V2ZW50LnNlbGVjdGVkSW5kZXh9YCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0ZWRUYWJDaGFuZ2VkID0gb3V0cHV0PFRhYkNoYW5nZUV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHRhYlN0YXRlID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgIHNlbGVjdGVkSW5kZXg6IHRoaXMuc2VsZWN0ZWRJbmRleCgpLFxuICAgICAgc2VsZWN0ZWRUYWI6IHRoaXMuYWN0aXZlSXRlbSgpLFxuICAgIH0pKTtcblxuICAgIG1lcmdlKFxuICAgICAgdGhpcy5rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKHRhcCgoaW5kZXgpID0+IHRoaXMuc2VsZWN0ZWRJbmRleC5zZXQoaW5kZXggPz8gLTEpKSksXG4gICAgICBmcm9tRWxlbWVudFJlc2l6ZSQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIDYwMCkucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc2Nyb2xsYWJsZVNlcnZpY2Uuc2Nyb2xsQWN0aXZlSXRlbUludG9WaWV3KHRoaXMuYWN0aXZlSXRlbSgpPy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgPz8gbnVsbCkpLFxuICAgICAgKSxcbiAgICAgIHRvT2JzZXJ2YWJsZSh0YWJTdGF0ZSkucGlwZShcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGEuc2VsZWN0ZWRJbmRleCA9PT0gYi5zZWxlY3RlZEluZGV4KSxcbiAgICAgICAgZmlsdGVyKCh7IHNlbGVjdGVkVGFiIH0pID0+ICFzZWxlY3RlZFRhYj8uZGlzYWJsZWQpLFxuICAgICAgICB0YXAoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkNoYW5nZWQuZW1pdChzdGF0ZSk7XG4gICAgICAgICAgdGhpcy5zY3JvbGxhYmxlU2VydmljZS5zY3JvbGxBY3RpdmVJdGVtSW50b1ZpZXcoc3RhdGUuc2VsZWN0ZWRUYWI/LmVsZW1lbnQubmF0aXZlRWxlbWVudCA/PyBudWxsKTtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIClcbiAgICAgIC5waXBlKHRoaXMudGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHRoaXMuc2VsZWN0ZWRJbmRleCgpKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLnNjcm9sbGFibGVTZXJ2aWNlLm9ic2VydmUodGhpcy5zY3JvbGxDb250YWluZXJFbGVtZW50KCksIHRoaXMudGFicygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgdGhlIHNwZWNpZmllZCB0YWIgaXRlbSwgbWFraW5nIGl0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGFiLlxuICAgKiBJZiB0aGUgaXRlbSBpcyBhbHJlYWR5IGFjdGl2ZSwgbm8gYWN0aW9uIGlzIHRha2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge1RhYkJhckl0ZW1Db21wb25lbnQgfCBudWxsfSBpdGVtIC0gVGhlIHRhYiBpdGVtIHRvIGFjdGl2YXRlLlxuICAgKi9cbiAgcHVibGljIGFjdGl2YXRlSXRlbShpdGVtPzogVGFiQmFySXRlbUNvbXBvbmVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoaXRlbSA9PT0gdGhpcy5rZXlNYW5hZ2VyPy5hY3RpdmVJdGVtKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IGl0ZW0gPyB0aGlzLnRhYnMoKS5pbmRleE9mKGl0ZW0pIDogLTE7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4LnNldChzZWxlY3RlZEluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBzcGVjaWZpZWQgdGFiIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIHRoZSB0YWIgYmFyLlxuICAgKiBJZiB0aGUgaXRlbSBpcyBjdXJyZW50bHkgYWN0aXZlLCB0aGUgcHJldmlvdXMgdGFiIGlzIGFjdGl2YXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtUYWJCYXJJdGVtQ29tcG9uZW50fSBpdGVtIC0gVGhlIHRhYiBpdGVtIHRvIHJlbW92ZS5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVJdGVtKGl0ZW06IFRhYkJhckl0ZW1Db21wb25lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5rZXlNYW5hZ2VyPy5hY3RpdmVJdGVtICE9PSBpdGVtKSByZXR1cm47XG4gICAgdGhpcy5rZXlNYW5hZ2VyPy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmtleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Gb2N1c2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLmFjdGl2ZUl0ZW0oKT8uZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghYWN0aXZlSXRlbSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNjcm9sbGFibGVTZXJ2aWNlLnZpc2libGVJdGVtcygpLmluY2x1ZGVzKGFjdGl2ZUl0ZW0pKSByZXR1cm47XG4gICAgdGhpcy5zY3JvbGxhYmxlU2VydmljZS5zY3JvbGxBY3RpdmVJdGVtSW50b1ZpZXcoYWN0aXZlSXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2Nyb2xsVGFicyhkaXJlY3Rpb246IDEgfCAtMSA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbGFibGVTZXJ2aWNlLnNjcm9sbChkaXJlY3Rpb24pO1xuICB9XG59XG4iLCI8YnV0dG9uICN0YWJBY3Rpb24gY2xhc3M9XCJvZHgtdGFiLWJhcl9fYWN0aW9uIG9keC10YWItYmFyX19hY3Rpb24tLXByZXZcIiBbY2xhc3MuaXMtYWN0aXZlXT1cIiEhcHJldlRhYigpXCIgKGNsaWNrKT1cInNjcm9sbFRhYnMoLTEpXCIgdGFiaW5kZXg9XCItMVwiPlxuICA8b2R4LWljb24gY2xhc3M9XCJ0YWItYmFyLWFjdGlvbi1pY29uXCIgbmFtZT1cImNoZXZyb24tbGVmdFwiIGljb25TZXQ9XCJjb3JlXCIgLz5cbjwvYnV0dG9uPlxuPGRpdiBjbGFzcz1cIm9keC10YWItYmFyX19pbm5lclwiICNzY3JvbGxDb250YWluZXIgdGFiaW5kZXg9XCItMVwiPlxuICA8ZGl2IGNsYXNzPVwib2R4LXRhYi1iYXJfX3BhbmVsXCIgcm9sZT1cInRhYmxpc3RcIiAjdGFiQmFyUGFuZWw+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgICA8ZGl2IGNsYXNzPVwib2R4LXRhYi1iYXJfX2luZGljYXRvclwiIFtvZHhBY3RpdmVJbmRpY2F0b3JdPVwiYWN0aXZlSXRlbSgpPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50XCIgb2R4QWN0aXZlSW5kaWNhdG9yUG9zaXRpb249XCJzdGFydFwiPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGJ1dHRvbiAjdGFiQWN0aW9uIGNsYXNzPVwib2R4LXRhYi1iYXJfX2FjdGlvbiBvZHgtdGFiLWJhcl9fYWN0aW9uLS1uZXh0XCIgW2NsYXNzLmlzLWFjdGl2ZV09XCIhIW5leHRUYWIoKVwiIChjbGljayk9XCJzY3JvbGxUYWJzKClcIiB0YWJpbmRleD1cIi0xXCI+XG4gIDxvZHgtaWNvbiBjbGFzcz1cInRhYi1iYXItYWN0aW9uLWljb25cIiBuYW1lPVwiY2hldnJvbi1yaWdodFwiIGljb25TZXQ9XCJjb3JlXCIgLz5cbjwvYnV0dG9uPlxuIl19
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { signal, Injectable } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Service to manage scrollable items within a container, providing functionality to observe item visibility
|
|
6
|
+
* and navigate through them.
|
|
7
|
+
*/
|
|
8
|
+
class ScrollableService {
|
|
9
|
+
constructor() {
|
|
10
|
+
/**
|
|
11
|
+
* References to the next and previous scrollable items.
|
|
12
|
+
*
|
|
13
|
+
* @type {HTMLElement | null}
|
|
14
|
+
*/
|
|
15
|
+
this.nextItem = signal(null);
|
|
16
|
+
/**
|
|
17
|
+
* References to the previous scrollable item.
|
|
18
|
+
*
|
|
19
|
+
* @type {HTMLElement | null}
|
|
20
|
+
*/
|
|
21
|
+
this.prevItem = signal(null);
|
|
22
|
+
/** List of currently visible items within the scroll container.
|
|
23
|
+
*
|
|
24
|
+
* @type {HTMLElement[]}
|
|
25
|
+
*/
|
|
26
|
+
this.visibleItems = signal([]);
|
|
27
|
+
}
|
|
28
|
+
ngOnDestroy() {
|
|
29
|
+
this.intersectionObserver?.disconnect();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Starts observing the scrollable items within the specified container.
|
|
33
|
+
*
|
|
34
|
+
* @param {ElementRef<HTMLElement>} scrollContainer - The container element that holds the scrollable items.
|
|
35
|
+
* @param {readonly ScrollableItem[]} items - The list of scrollable items to observe.
|
|
36
|
+
*/
|
|
37
|
+
observe(scrollContainer, items) {
|
|
38
|
+
this.scrollContainer = scrollContainer;
|
|
39
|
+
if (this.intersectionObserver) {
|
|
40
|
+
this.intersectionObserver.disconnect();
|
|
41
|
+
}
|
|
42
|
+
const allItems = items.map((item) => item.element.nativeElement);
|
|
43
|
+
if (!this.scrollContainer || allItems.length === 0) {
|
|
44
|
+
this.nextItem.set(null);
|
|
45
|
+
this.prevItem.set(null);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
this.intersectionObserver = this.observeVisibility(allItems, (visible) => {
|
|
49
|
+
let prevItem = null;
|
|
50
|
+
let nextItem = null;
|
|
51
|
+
if (visible.length > 0 && allItems.length > visible.length) {
|
|
52
|
+
const firstVisibleIndex = allItems.indexOf(visible[0]);
|
|
53
|
+
if (firstVisibleIndex > 0) {
|
|
54
|
+
prevItem = allItems[firstVisibleIndex - 1];
|
|
55
|
+
}
|
|
56
|
+
const lastVisibleIndex = allItems.indexOf(visible[visible.length - 1]);
|
|
57
|
+
if (lastVisibleIndex < allItems.length - 1) {
|
|
58
|
+
nextItem = allItems[lastVisibleIndex + 1];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
this.nextItem.set(nextItem);
|
|
62
|
+
this.prevItem.set(prevItem);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Scrolls the container in the specified direction.
|
|
67
|
+
*
|
|
68
|
+
* @param {'next' | 'prev'} direction - The direction to scroll ('next' for right, 'prev' for left).
|
|
69
|
+
*/
|
|
70
|
+
scroll(direction = 1) {
|
|
71
|
+
const container = this.scrollContainer?.nativeElement;
|
|
72
|
+
if (!container)
|
|
73
|
+
return;
|
|
74
|
+
container.scrollBy({ left: (container.clientWidth * direction) / 2 });
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Scrolls the active item into view within the scroll container.
|
|
78
|
+
*
|
|
79
|
+
* @param {HTMLElement | null} activeItem - The currently active item to scroll into view.
|
|
80
|
+
*/
|
|
81
|
+
scrollActiveItemIntoView(activeItem) {
|
|
82
|
+
if (activeItem) {
|
|
83
|
+
activeItem.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
observeVisibility(items, callback) {
|
|
87
|
+
const visibleMap = new Map();
|
|
88
|
+
const observer = new IntersectionObserver((entries) => {
|
|
89
|
+
for (const entry of entries) {
|
|
90
|
+
const isVisible = entry.isIntersecting && entry.intersectionRatio >= 0.75;
|
|
91
|
+
visibleMap.set(entry.target, isVisible);
|
|
92
|
+
}
|
|
93
|
+
const visible = items.filter((item) => visibleMap.get(item));
|
|
94
|
+
this.visibleItems.set(visible);
|
|
95
|
+
callback(visible);
|
|
96
|
+
}, {
|
|
97
|
+
root: this.scrollContainer.nativeElement,
|
|
98
|
+
threshold: 1,
|
|
99
|
+
});
|
|
100
|
+
items.forEach((item) => observer.observe(item));
|
|
101
|
+
return observer;
|
|
102
|
+
}
|
|
103
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScrollableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
104
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScrollableService }); }
|
|
105
|
+
}
|
|
106
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScrollableService, decorators: [{
|
|
107
|
+
type: Injectable
|
|
108
|
+
}] });
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Generated bundle index. Do not edit.
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
export { ScrollableService };
|
|
115
|
+
//# sourceMappingURL=odx-angular-cdk-scrollable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"odx-angular-cdk-scrollable.mjs","sources":["../../../../libs/angular/cdk/scrollable/src/lib/scrollable.service.ts","../../../../libs/angular/cdk/scrollable/src/odx-angular-cdk-scrollable.ts"],"sourcesContent":["import { ElementRef, Injectable, OnDestroy, signal } from '@angular/core';\n\nexport interface ScrollableItem {\n element: ElementRef<HTMLElement>;\n}\n\n/**\n * Service to manage scrollable items within a container, providing functionality to observe item visibility\n * and navigate through them.\n */\n@Injectable()\nexport class ScrollableService implements OnDestroy {\n private intersectionObserver?: IntersectionObserver;\n private scrollContainer?: ElementRef<HTMLElement>;\n\n /**\n * References to the next and previous scrollable items.\n *\n * @type {HTMLElement | null}\n */\n public readonly nextItem = signal<HTMLElement | null>(null);\n\n /**\n * References to the previous scrollable item.\n *\n * @type {HTMLElement | null}\n */\n public readonly prevItem = signal<HTMLElement | null>(null);\n\n /** List of currently visible items within the scroll container.\n *\n * @type {HTMLElement[]}\n */\n public readonly visibleItems = signal<HTMLElement[]>([]);\n\n public ngOnDestroy(): void {\n this.intersectionObserver?.disconnect();\n }\n\n /**\n * Starts observing the scrollable items within the specified container.\n *\n * @param {ElementRef<HTMLElement>} scrollContainer - The container element that holds the scrollable items.\n * @param {readonly ScrollableItem[]} items - The list of scrollable items to observe.\n */\n public observe(scrollContainer: ElementRef<HTMLElement>, items: readonly ScrollableItem[]): void {\n this.scrollContainer = scrollContainer;\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n }\n\n const allItems = items.map((item) => item.element.nativeElement);\n if (!this.scrollContainer || allItems.length === 0) {\n this.nextItem.set(null);\n this.prevItem.set(null);\n return;\n }\n\n this.intersectionObserver = this.observeVisibility(allItems, (visible) => {\n let prevItem: HTMLElement | null = null;\n let nextItem: HTMLElement | null = null;\n\n if (visible.length > 0 && allItems.length > visible.length) {\n const firstVisibleIndex = allItems.indexOf(visible[0]);\n if (firstVisibleIndex > 0) {\n prevItem = allItems[firstVisibleIndex - 1];\n }\n\n const lastVisibleIndex = allItems.indexOf(visible[visible.length - 1]);\n if (lastVisibleIndex < allItems.length - 1) {\n nextItem = allItems[lastVisibleIndex + 1];\n }\n }\n\n this.nextItem.set(nextItem);\n this.prevItem.set(prevItem);\n });\n }\n\n /**\n * Scrolls the container in the specified direction.\n *\n * @param {'next' | 'prev'} direction - The direction to scroll ('next' for right, 'prev' for left).\n */\n public scroll(direction: 1 | -1 = 1): void {\n const container = this.scrollContainer?.nativeElement;\n if (!container) return;\n\n container.scrollBy({ left: (container.clientWidth * direction) / 2 });\n }\n\n /**\n * Scrolls the active item into view within the scroll container.\n *\n * @param {HTMLElement | null} activeItem - The currently active item to scroll into view.\n */\n public scrollActiveItemIntoView(activeItem: HTMLElement | null): void {\n if (activeItem) {\n activeItem.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\n }\n }\n\n private observeVisibility(items: HTMLElement[], callback: (visible: HTMLElement[]) => void): IntersectionObserver {\n const visibleMap = new Map<HTMLElement, boolean>();\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const isVisible = entry.isIntersecting && entry.intersectionRatio >= 0.75;\n visibleMap.set(entry.target as HTMLElement, isVisible);\n }\n const visible = items.filter((item) => visibleMap.get(item));\n this.visibleItems.set(visible);\n callback(visible);\n },\n {\n root: this.scrollContainer!.nativeElement,\n threshold: 1,\n },\n );\n\n items.forEach((item) => observer.observe(item));\n return observer;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|