@odx/angular 12.24.0 → 12.25.1
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/lib/scrollable.service.d.ts +1 -1
- package/components/header/lib/header.component.d.ts +1 -1
- package/esm2022/cdk/scrollable/lib/scrollable.service.mjs +26 -5
- package/esm2022/components/header/lib/header.component.mjs +3 -3
- package/esm2022/components/switch/lib/switch.component.mjs +3 -3
- package/esm2022/components/tab-bar/lib/tab-bar.component.mjs +4 -4
- package/fesm2022/odx-angular-cdk-scrollable.mjs +25 -4
- package/fesm2022/odx-angular-cdk-scrollable.mjs.map +1 -1
- package/fesm2022/odx-angular-components-header.mjs +2 -2
- package/fesm2022/odx-angular-components-header.mjs.map +1 -1
- package/fesm2022/odx-angular-components-notification.mjs +1 -1
- package/fesm2022/odx-angular-components-switch.mjs +2 -2
- package/fesm2022/odx-angular-components-switch.mjs.map +1 -1
- package/fesm2022/odx-angular-components-tab-bar.mjs +3 -3
- package/fesm2022/odx-angular-components-tab-bar.mjs.map +1 -1
- package/fesm2022/odx-angular.mjs +1 -1
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @odx/angular
|
|
2
2
|
|
|
3
|
+
## 12.25.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- e4730df: Fix: TabBar Component - scroll item into view method fixed to prevent page scrolling on load and resize
|
|
8
|
+
|
|
9
|
+
## 12.25.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 817749e: add support for institution assignment dc-plugin
|
|
14
|
+
|
|
3
15
|
## 12.24.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -46,7 +46,7 @@ export declare class ScrollableService implements OnDestroy {
|
|
|
46
46
|
*
|
|
47
47
|
* @param {HTMLElement | null} activeItem - The currently active item to scroll into view.
|
|
48
48
|
*/
|
|
49
|
-
|
|
49
|
+
scrollActiveItemIntoHorizontalView(activeItem: HTMLElement | null): void;
|
|
50
50
|
private observeVisibility;
|
|
51
51
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScrollableService, never>;
|
|
52
52
|
static ɵprov: i0.ɵɵInjectableDeclaration<ScrollableService>;
|
|
@@ -5,5 +5,5 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
export declare class HeaderComponent {
|
|
6
6
|
readonly element: import("@angular/core").ElementRef<HTMLElement>;
|
|
7
7
|
static ɵfac: i0.ɵɵFactoryDeclaration<HeaderComponent, never>;
|
|
8
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<HeaderComponent, "odx-header", never, {}, {}, never, ["button[odxMainMenuButton]", "odx-header-title", "*", "odx-search-bar", "odx-action-group, odx-auth", "[odxHeaderAvatar]"], true, never>;
|
|
8
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<HeaderComponent, "odx-header", never, {}, {}, never, ["button[odxMainMenuButton]", "odx-header-title", "*", "odx-search-bar", "odx-action-group, odx-auth, odx-institution-assignment", "[odxHeaderAvatar]"], true, never>;
|
|
9
9
|
}
|
|
@@ -77,10 +77,31 @@ export class ScrollableService {
|
|
|
77
77
|
*
|
|
78
78
|
* @param {HTMLElement | null} activeItem - The currently active item to scroll into view.
|
|
79
79
|
*/
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
scrollActiveItemIntoHorizontalView(activeItem) {
|
|
81
|
+
const container = this.scrollContainer?.nativeElement;
|
|
82
|
+
if (!container || !activeItem)
|
|
83
|
+
return;
|
|
84
|
+
// Use a small epsilon to avoid false positives from subpixel rounding.
|
|
85
|
+
const isHorizontallyScrollable = container.scrollWidth - container.clientWidth > 1;
|
|
86
|
+
// If there is no horizontal overflow, any attempt to "scroll into view" can only scroll ancestor containers
|
|
87
|
+
// (including the page). This is the root cause of the page jumping on load/resize.
|
|
88
|
+
if (!isHorizontallyScrollable)
|
|
89
|
+
return;
|
|
90
|
+
const containerRect = container.getBoundingClientRect();
|
|
91
|
+
const itemRect = activeItem.getBoundingClientRect();
|
|
92
|
+
const isFullyVisible = itemRect.left >= containerRect.left && itemRect.right <= containerRect.right;
|
|
93
|
+
if (isFullyVisible)
|
|
94
|
+
return;
|
|
95
|
+
const maxLeft = Math.max(0, container.scrollWidth - container.clientWidth);
|
|
96
|
+
let targetLeft = container.scrollLeft;
|
|
97
|
+
const itemLeft = itemRect.left - containerRect.left + container.scrollLeft;
|
|
98
|
+
const itemCenter = itemLeft + itemRect.width / 2;
|
|
99
|
+
targetLeft = itemCenter - container.clientWidth / 2;
|
|
100
|
+
targetLeft = Math.min(maxLeft, Math.max(0, targetLeft));
|
|
101
|
+
const leftChanged = Math.abs(targetLeft - container.scrollLeft) > 1;
|
|
102
|
+
if (!leftChanged)
|
|
103
|
+
return;
|
|
104
|
+
container.scrollTo({ left: targetLeft, behavior: 'smooth' });
|
|
84
105
|
}
|
|
85
106
|
observeVisibility(items, callback) {
|
|
86
107
|
const visibleMap = new Map();
|
|
@@ -105,4 +126,4 @@ export class ScrollableService {
|
|
|
105
126
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScrollableService, decorators: [{
|
|
106
127
|
type: Injectable
|
|
107
128
|
}] });
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Nkay9zY3JvbGxhYmxlL3NyYy9saWIvc2Nyb2xsYWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0xRTs7O0dBR0c7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBRDlCO1FBS0U7Ozs7V0FJRztRQUNhLGFBQVEsR0FBRyxNQUFNLENBQXFCLElBQUksQ0FBQyxDQUFDO1FBRTVEOzs7O1dBSUc7UUFDYSxhQUFRLEdBQUcsTUFBTSxDQUFxQixJQUFJLENBQUMsQ0FBQztRQUU1RDs7O1dBR0c7UUFDYSxpQkFBWSxHQUFHLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDLENBQUM7S0EwRjFEO0lBeEZRLFdBQVc7UUFDaEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE9BQU8sQ0FBQyxlQUF3QyxFQUFFLEtBQWdDO1FBQ3ZGLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7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SSxDQUFDLGVBQWdCLENBQUMsYUFBYTtZQUN6QyxTQUFTLEVBQUUsQ0FBQztTQUNiLENBQ0YsQ0FBQztRQUVGLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOytHQS9HVSxpQkFBaUI7bUhBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIE9uRGVzdHJveSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nyb2xsYWJsZUl0ZW0ge1xuICBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pjtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIHRvIG1hbmFnZSBzY3JvbGxhYmxlIGl0ZW1zIHdpdGhpbiBhIGNvbnRhaW5lciwgcHJvdmlkaW5nIGZ1bmN0aW9uYWxpdHkgdG8gb2JzZXJ2ZSBpdGVtIHZpc2liaWxpdHlcbiAqIGFuZCBuYXZpZ2F0ZSB0aHJvdWdoIHRoZW0uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTY3JvbGxhYmxlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBzY3JvbGxDb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAvKipcbiAgICogUmVmZXJlbmNlcyB0byB0aGUgbmV4dCBhbmQgcHJldmlvdXMgc2Nyb2xsYWJsZSBpdGVtcy5cbiAgICpcbiAgICogQHR5cGUge0hUTUxFbGVtZW50IHwgbnVsbH1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuZXh0SXRlbSA9IHNpZ25hbDxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2VzIHRvIHRoZSBwcmV2aW91cyBzY3JvbGxhYmxlIGl0ZW0uXG4gICAqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJldkl0ZW0gPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICAvKiogTGlzdCBvZiBjdXJyZW50bHkgdmlzaWJsZSBpdGVtcyB3aXRoaW4gdGhlIHNjcm9sbCBjb250YWluZXIuXG4gICAqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudFtdfVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZpc2libGVJdGVtcyA9IHNpZ25hbDxIVE1MRWxlbWVudFtdPihbXSk7XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgb2JzZXJ2aW5nIHRoZSBzY3JvbGxhYmxlIGl0ZW1zIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50UmVmPEhUTUxFbGVtZW50Pn0gc2Nyb2xsQ29udGFpbmVyIC0gVGhlIGNvbnRhaW5lciBlbGVtZW50IHRoYXQgaG9sZHMgdGhlIHNjcm9sbGFibGUgaXRlbXMuXG4gICAqIEBwYXJhbSB7cmVhZG9ubHkgU2Nyb2xsYWJsZUl0ZW1bXX0gaXRlbXMgLSBUaGUgbGlzdCBvZiBzY3JvbGxhYmxlIGl0ZW1zIHRvIG9ic2VydmUuXG4gICAqL1xuICBwdWJsaWMgb2JzZXJ2ZShzY3JvbGxDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBpdGVtczogcmVhZG9ubHkgU2Nyb2xsYWJsZUl0ZW1bXSk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gc2Nyb2xsQ29udGFpbmVyO1xuICAgIGlmICh0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxJdGVtcyA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIGlmICghdGhpcy5zY3JvbGxDb250YWluZXIgfHwgYWxsSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLm5leHRJdGVtLnNldChudWxsKTtcbiAgICAgIHRoaXMucHJldkl0ZW0uc2V0KG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVWaXNpYmlsaXR5KGFsbEl0ZW1zLCAodmlzaWJsZSkgPT4ge1xuICAgICAgbGV0IHByZXZJdGVtOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IG5leHRJdGVtOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgICBpZiAodmlzaWJsZS5sZW5ndGggPiAwICYmIGFsbEl0ZW1zLmxlbmd0aCA+IHZpc2libGUubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VmlzaWJsZUluZGV4ID0gYWxsSXRlbXMuaW5kZXhPZih2aXNpYmxlWzBdKTtcbiAgICAgICAgaWYgKGZpcnN0VmlzaWJsZUluZGV4ID4gMCkge1xuICAgICAgICAgIHByZXZJdGVtID0gYWxsSXRlbXNbZmlyc3RWaXNpYmxlSW5kZXggLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSW5kZXggPSBhbGxJdGVtcy5pbmRleE9mKHZpc2libGVbdmlzaWJsZS5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmIChsYXN0VmlzaWJsZUluZGV4IDwgYWxsSXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG5leHRJdGVtID0gYWxsSXRlbXNbbGFzdFZpc2libGVJbmRleCArIDFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmV4dEl0ZW0uc2V0KG5leHRJdGVtKTtcbiAgICAgIHRoaXMucHJldkl0ZW0uc2V0KHByZXZJdGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRoZSBjb250YWluZXIgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7J25leHQnIHwgJ3ByZXYnfSBkaXJlY3Rpb24gLSBUaGUgZGlyZWN0aW9uIHRvIHNjcm9sbCAoJ25leHQnIGZvciByaWdodCwgJ3ByZXYnIGZvciBsZWZ0KS5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGwoZGlyZWN0aW9uOiAxIHwgLTEgPSAxKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zY3JvbGxDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnRhaW5lci5zY3JvbGxCeSh7IGxlZnQ6IChjb250YWluZXIuY2xpZW50V2lkdGggKiBkaXJlY3Rpb24pIC8gMiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRoZSBhY3RpdmUgaXRlbSBpbnRvIHZpZXcgd2l0aGluIHRoZSBzY3JvbGwgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50IHwgbnVsbH0gYWN0aXZlSXRlbSAtIFRoZSBjdXJyZW50bHkgYWN0aXZlIGl0ZW0gdG8gc2Nyb2xsIGludG8gdmlldy5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxBY3RpdmVJdGVtSW50b1ZpZXcoYWN0aXZlSXRlbTogSFRNTEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgIGFjdGl2ZUl0ZW0uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcsIGlubGluZTogJ2NlbnRlcicgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlVmlzaWJpbGl0eShpdGVtczogSFRNTEVsZW1lbnRbXSwgY2FsbGJhY2s6ICh2aXNpYmxlOiBIVE1MRWxlbWVudFtdKSA9PiB2b2lkKTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIge1xuICAgIGNvbnN0IHZpc2libGVNYXAgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBib29sZWFuPigpO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgZW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gPj0gMC43NTtcbiAgICAgICAgICB2aXNpYmxlTWFwLnNldChlbnRyeS50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIGlzVmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmlzaWJsZSA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gdmlzaWJsZU1hcC5nZXQoaXRlbSkpO1xuICAgICAgICB0aGlzLnZpc2libGVJdGVtcy5zZXQodmlzaWJsZSk7XG4gICAgICAgIGNhbGxiYWNrKHZpc2libGUpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcm9vdDogdGhpcy5zY3JvbGxDb250YWluZXIhLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IG9ic2VydmVyLm9ic2VydmUoaXRlbSkpO1xuICAgIHJldHVybiBvYnNlcnZlcjtcbiAgfVxufVxuIl19
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Nkay9zY3JvbGxhYmxlL3NyYy9saWIvc2Nyb2xsYWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0xRTs7O0dBR0c7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBRDlCO1FBS0U7Ozs7V0FJRztRQUNhLGFBQVEsR0FBRyxNQUFNLENBQXFCLElBQUksQ0FBQyxDQUFDO1FBRTVEOzs7O1dBSUc7UUFDYSxhQUFRLEdBQUcsTUFBTSxDQUFxQixJQUFJLENBQUMsQ0FBQztRQUU1RDs7O1dBR0c7UUFDYSxpQkFBWSxHQUFHLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDLENBQUM7S0FpSDFEO0lBL0dRLFdBQVc7UUFDaEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE9BQU8sQ0FBQyxlQUF3QyxFQUFFLEtBQWdDO1FBQ3ZGLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7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QUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEIsQ0FBQyxFQUNEO1lBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFnQixDQUFDLGFBQWE7WUFDekMsU0FBUyxFQUFFLENBQUM7U0FDYixDQUNGLENBQUM7UUFFRixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzsrR0F0SVUsaUJBQWlCO21IQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjcm9sbGFibGVJdGVtIHtcbiAgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG59XG5cbi8qKlxuICogU2VydmljZSB0byBtYW5hZ2Ugc2Nyb2xsYWJsZSBpdGVtcyB3aXRoaW4gYSBjb250YWluZXIsIHByb3ZpZGluZyBmdW5jdGlvbmFsaXR5IHRvIG9ic2VydmUgaXRlbSB2aXNpYmlsaXR5XG4gKiBhbmQgbmF2aWdhdGUgdGhyb3VnaCB0aGVtLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2Nyb2xsYWJsZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGludGVyc2VjdGlvbk9ic2VydmVyPzogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgc2Nyb2xsQ29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZXMgdG8gdGhlIG5leHQgYW5kIHByZXZpb3VzIHNjcm9sbGFibGUgaXRlbXMuXG4gICAqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmV4dEl0ZW0gPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICAvKipcbiAgICogUmVmZXJlbmNlcyB0byB0aGUgcHJldmlvdXMgc2Nyb2xsYWJsZSBpdGVtLlxuICAgKlxuICAgKiBAdHlwZSB7SFRNTEVsZW1lbnQgfCBudWxsfVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByZXZJdGVtID0gc2lnbmFsPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIExpc3Qgb2YgY3VycmVudGx5IHZpc2libGUgaXRlbXMgd2l0aGluIHRoZSBzY3JvbGwgY29udGFpbmVyLlxuICAgKlxuICAgKiBAdHlwZSB7SFRNTEVsZW1lbnRbXX1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2aXNpYmxlSXRlbXMgPSBzaWduYWw8SFRNTEVsZW1lbnRbXT4oW10pO1xuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIG9ic2VydmluZyB0aGUgc2Nyb2xsYWJsZSBpdGVtcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudFJlZjxIVE1MRWxlbWVudD59IHNjcm9sbENvbnRhaW5lciAtIFRoZSBjb250YWluZXIgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBzY3JvbGxhYmxlIGl0ZW1zLlxuICAgKiBAcGFyYW0ge3JlYWRvbmx5IFNjcm9sbGFibGVJdGVtW119IGl0ZW1zIC0gVGhlIGxpc3Qgb2Ygc2Nyb2xsYWJsZSBpdGVtcyB0byBvYnNlcnZlLlxuICAgKi9cbiAgcHVibGljIG9ic2VydmUoc2Nyb2xsQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgaXRlbXM6IHJlYWRvbmx5IFNjcm9sbGFibGVJdGVtW10pOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHNjcm9sbENvbnRhaW5lcjtcbiAgICBpZiAodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcikge1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsSXRlbXMgPSBpdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICBpZiAoIXRoaXMuc2Nyb2xsQ29udGFpbmVyIHx8IGFsbEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5uZXh0SXRlbS5zZXQobnVsbCk7XG4gICAgICB0aGlzLnByZXZJdGVtLnNldChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gdGhpcy5vYnNlcnZlVmlzaWJpbGl0eShhbGxJdGVtcywgKHZpc2libGUpID0+IHtcbiAgICAgIGxldCBwcmV2SXRlbTogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBuZXh0SXRlbTogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgICAgaWYgKHZpc2libGUubGVuZ3RoID4gMCAmJiBhbGxJdGVtcy5sZW5ndGggPiB2aXNpYmxlLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdFZpc2libGVJbmRleCA9IGFsbEl0ZW1zLmluZGV4T2YodmlzaWJsZVswXSk7XG4gICAgICAgIGlmIChmaXJzdFZpc2libGVJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmV2SXRlbSA9IGFsbEl0ZW1zW2ZpcnN0VmlzaWJsZUluZGV4IC0gMV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0VmlzaWJsZUluZGV4ID0gYWxsSXRlbXMuaW5kZXhPZih2aXNpYmxlW3Zpc2libGUubGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAobGFzdFZpc2libGVJbmRleCA8IGFsbEl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBuZXh0SXRlbSA9IGFsbEl0ZW1zW2xhc3RWaXNpYmxlSW5kZXggKyAxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLm5leHRJdGVtLnNldChuZXh0SXRlbSk7XG4gICAgICB0aGlzLnByZXZJdGVtLnNldChwcmV2SXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xscyB0aGUgY29udGFpbmVyIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0geyduZXh0JyB8ICdwcmV2J30gZGlyZWN0aW9uIC0gVGhlIGRpcmVjdGlvbiB0byBzY3JvbGwgKCduZXh0JyBmb3IgcmlnaHQsICdwcmV2JyBmb3IgbGVmdCkuXG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsKGRpcmVjdGlvbjogMSB8IC0xID0gMSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb250YWluZXIuc2Nyb2xsQnkoeyBsZWZ0OiAoY29udGFpbmVyLmNsaWVudFdpZHRoICogZGlyZWN0aW9uKSAvIDIgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xscyB0aGUgYWN0aXZlIGl0ZW0gaW50byB2aWV3IHdpdGhpbiB0aGUgc2Nyb2xsIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudCB8IG51bGx9IGFjdGl2ZUl0ZW0gLSBUaGUgY3VycmVudGx5IGFjdGl2ZSBpdGVtIHRvIHNjcm9sbCBpbnRvIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsQWN0aXZlSXRlbUludG9Ib3Jpem9udGFsVmlldyhhY3RpdmVJdGVtOiBIVE1MRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNjcm9sbENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhYWN0aXZlSXRlbSkgcmV0dXJuO1xuXG4gICAgLy8gVXNlIGEgc21hbGwgZXBzaWxvbiB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSBzdWJwaXhlbCByb3VuZGluZy5cbiAgICBjb25zdCBpc0hvcml6b250YWxseVNjcm9sbGFibGUgPSBjb250YWluZXIuc2Nyb2xsV2lkdGggLSBjb250YWluZXIuY2xpZW50V2lkdGggPiAxO1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGhvcml6b250YWwgb3ZlcmZsb3csIGFueSBhdHRlbXB0IHRvIFwic2Nyb2xsIGludG8gdmlld1wiIGNhbiBvbmx5IHNjcm9sbCBhbmNlc3RvciBjb250YWluZXJzXG4gICAgLy8gKGluY2x1ZGluZyB0aGUgcGFnZSkuIFRoaXMgaXMgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIHBhZ2UganVtcGluZyBvbiBsb2FkL3Jlc2l6ZS5cbiAgICBpZiAoIWlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBpdGVtUmVjdCA9IGFjdGl2ZUl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCBpc0Z1bGx5VmlzaWJsZSA9IGl0ZW1SZWN0LmxlZnQgPj0gY29udGFpbmVyUmVjdC5sZWZ0ICYmIGl0ZW1SZWN0LnJpZ2h0IDw9IGNvbnRhaW5lclJlY3QucmlnaHQ7XG4gICAgaWYgKGlzRnVsbHlWaXNpYmxlKSByZXR1cm47XG5cbiAgICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgoMCwgY29udGFpbmVyLnNjcm9sbFdpZHRoIC0gY29udGFpbmVyLmNsaWVudFdpZHRoKTtcbiAgICBsZXQgdGFyZ2V0TGVmdCA9IGNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgIGNvbnN0IGl0ZW1MZWZ0ID0gaXRlbVJlY3QubGVmdCAtIGNvbnRhaW5lclJlY3QubGVmdCArIGNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgIGNvbnN0IGl0ZW1DZW50ZXIgPSBpdGVtTGVmdCArIGl0ZW1SZWN0LndpZHRoIC8gMjtcbiAgICB0YXJnZXRMZWZ0ID0gaXRlbUNlbnRlciAtIGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDI7XG4gICAgdGFyZ2V0TGVmdCA9IE1hdGgubWluKG1heExlZnQsIE1hdGgubWF4KDAsIHRhcmdldExlZnQpKTtcblxuICAgIGNvbnN0IGxlZnRDaGFuZ2VkID0gTWF0aC5hYnModGFyZ2V0TGVmdCAtIGNvbnRhaW5lci5zY3JvbGxMZWZ0KSA+IDE7XG4gICAgaWYgKCFsZWZ0Q2hhbmdlZCkgcmV0dXJuO1xuXG4gICAgY29udGFpbmVyLnNjcm9sbFRvKHsgbGVmdDogdGFyZ2V0TGVmdCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlVmlzaWJpbGl0eShpdGVtczogSFRNTEVsZW1lbnRbXSwgY2FsbGJhY2s6ICh2aXNpYmxlOiBIVE1MRWxlbWVudFtdKSA9PiB2b2lkKTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIge1xuICAgIGNvbnN0IHZpc2libGVNYXAgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBib29sZWFuPigpO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgZW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gPj0gMC43NTtcbiAgICAgICAgICB2aXNpYmxlTWFwLnNldChlbnRyeS50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIGlzVmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmlzaWJsZSA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gdmlzaWJsZU1hcC5nZXQoaXRlbSkpO1xuICAgICAgICB0aGlzLnZpc2libGVJdGVtcy5zZXQodmlzaWJsZSk7XG4gICAgICAgIGNhbGxiYWNrKHZpc2libGUpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcm9vdDogdGhpcy5zY3JvbGxDb250YWluZXIhLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IG9ic2VydmVyLm9ic2VydmUoaXRlbSkpO1xuICAgIHJldHVybiBvYnNlcnZlcjtcbiAgfVxufVxuIl19
|
|
@@ -12,7 +12,7 @@ let HeaderComponent = class HeaderComponent {
|
|
|
12
12
|
this.element = injectElement();
|
|
13
13
|
}
|
|
14
14
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HeaderComponent, isStandalone: true, selector: "odx-header", ngImport: i0, template: "<ng-content select=\"button[odxMainMenuButton]\" />\n<odx-logo />\n<ng-content select=\"odx-header-title\" />\n<div class=\"odx-header__content\">\n <span class=\"odx-header__content-container\"><ng-content /></span>\n</div>\n<ng-content select=\"odx-search-bar\" />\n<ng-content select=\"odx-action-group, odx-auth\" />\n<ng-content select=\"[odxHeaderAvatar]\" />\n", dependencies: [{ kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
15
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HeaderComponent, isStandalone: true, selector: "odx-header", ngImport: i0, template: "<ng-content select=\"button[odxMainMenuButton]\" />\n<odx-logo />\n<ng-content select=\"odx-header-title\" />\n<div class=\"odx-header__content\">\n <span class=\"odx-header__content-container\"><ng-content /></span>\n</div>\n<ng-content select=\"odx-search-bar\" />\n<ng-content select=\"odx-action-group, odx-auth, odx-institution-assignment\" />\n<ng-content select=\"[odxHeaderAvatar]\" />\n", dependencies: [{ kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
16
16
|
};
|
|
17
17
|
HeaderComponent = __decorate([
|
|
18
18
|
CSSComponent('header')
|
|
@@ -20,6 +20,6 @@ HeaderComponent = __decorate([
|
|
|
20
20
|
export { HeaderComponent };
|
|
21
21
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderComponent, decorators: [{
|
|
22
22
|
type: Component,
|
|
23
|
-
args: [{ standalone: true, selector: 'odx-header', imports: [LogoDirective], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content select=\"button[odxMainMenuButton]\" />\n<odx-logo />\n<ng-content select=\"odx-header-title\" />\n<div class=\"odx-header__content\">\n <span class=\"odx-header__content-container\"><ng-content /></span>\n</div>\n<ng-content select=\"odx-search-bar\" />\n<ng-content select=\"odx-action-group, odx-auth\" />\n<ng-content select=\"[odxHeaderAvatar]\" />\n" }]
|
|
23
|
+
args: [{ standalone: true, selector: 'odx-header', imports: [LogoDirective], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content select=\"button[odxMainMenuButton]\" />\n<odx-logo />\n<ng-content select=\"odx-header-title\" />\n<div class=\"odx-header__content\">\n <span class=\"odx-header__content-container\"><ng-content /></span>\n</div>\n<ng-content select=\"odx-search-bar\" />\n<ng-content select=\"odx-action-group, odx-auth, odx-institution-assignment\" />\n<ng-content select=\"[odxHeaderAvatar]\" />\n" }]
|
|
24
24
|
}] });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2hlYWRlci9zcmMvbGliL2hlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9oZWFkZXIvc3JjL2xpYi9oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBRW5EOztHQUVHO0FBVUksSUFBTSxlQUFlLEdBQXJCLE1BQU0sZUFBZTtJQUFyQjtRQUNXLFlBQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztLQUMzQzsrR0FGWSxlQUFlO21HQUFmLGVBQWUsc0VDakI1Qiw4WUFTQSw0Q0RHWSxhQUFhOztBQUtaLGVBQWU7SUFUM0IsWUFBWSxDQUFDLFFBQVEsQ0FBQztHQVNWLGVBQWUsQ0FFM0I7OzRGQUZZLGVBQWU7a0JBUjNCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLFlBQVksV0FDYixDQUFDLGFBQWEsQ0FBQyxpQkFFVCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvZ29EaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9sb2dvJztcbmltcG9ydCB7IENTU0NvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBpbmplY3RFbGVtZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBoZWFkZXIgY29tcG9uZW50LlxuICovXG5AQ1NTQ29tcG9uZW50KCdoZWFkZXInKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnb2R4LWhlYWRlcicsXG4gIGltcG9ydHM6IFtMb2dvRGlyZWN0aXZlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBIZWFkZXJDb21wb25lbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdEVsZW1lbnQoKTtcbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cImJ1dHRvbltvZHhNYWluTWVudUJ1dHRvbl1cIiAvPlxuPG9keC1sb2dvIC8+XG48bmctY29udGVudCBzZWxlY3Q9XCJvZHgtaGVhZGVyLXRpdGxlXCIgLz5cbjxkaXYgY2xhc3M9XCJvZHgtaGVhZGVyX19jb250ZW50XCI+XG4gIDxzcGFuIGNsYXNzPVwib2R4LWhlYWRlcl9fY29udGVudC1jb250YWluZXJcIj48bmctY29udGVudCAvPjwvc3Bhbj5cbjwvZGl2PlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwib2R4LXNlYXJjaC1iYXJcIiAvPlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwib2R4LWFjdGlvbi1ncm91cCwgb2R4LWF1dGgsIG9keC1pbnN0aXR1dGlvbi1hc3NpZ25tZW50XCIgLz5cbjxuZy1jb250ZW50IHNlbGVjdD1cIltvZHhIZWFkZXJBdmF0YXJdXCIgLz5cbiJdfQ==
|
|
@@ -19,7 +19,7 @@ import * as i1 from "@odx/angular";
|
|
|
19
19
|
*/
|
|
20
20
|
let SwitchComponent = class SwitchComponent extends CheckBoxControl {
|
|
21
21
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwitchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SwitchComponent, isStandalone: true, selector: "odx-switch", host: { properties: { "class.is-active": "checked" } }, providers: [ReadonlyController.connect()], usesInheritance: true, hostDirectives: [{ directive: i1.WithDisabledState }], ngImport: i0, template: "<label class=\"odx-switch__label\">\n <input\n odxControl\n class=\"odx-switch__input\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"hasError || null\"\n [attr.aria-readonly]=\"isReadonly || null\"\n [attr.aria-required]=\"isRequired || null\"\n [attr.tabindex]=\"tabindex || null\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled || isReadonly\"\n [name]=\"name\"\n [readonly]=\"isReadonly\"\n [value]=\"value\"\n type=\"checkbox\"\n (blur)=\"onTouched()\"\n (change)=\"onChanged($event)\"\n />\n <div class=\"odx-switch__track\">\n <div class=\"odx-switch__thumb\">\n <odx-icon class=\"odx-switch__icon\" iconSet=\"core\" [name]=\"checked ? 'check' : 'close'\" />\n </div>\n </div>\n <div class=\"odx-switch__content\">\n <ng-content />\n @if (isRequired) {\n <span class=\"odx-switch__required\">*</span>\n }\n </div>\n</label>\n", dependencies: [{ kind: "directive", type: ControlDirective, selector: "[odxControl]", exportAs: ["odxControl"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
22
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SwitchComponent, isStandalone: true, selector: "odx-switch", host: { properties: { "class.is-active": "checked" } }, providers: [ReadonlyController.connect()], usesInheritance: true, hostDirectives: [{ directive: i1.WithDisabledState }], ngImport: i0, template: "<label class=\"odx-switch__label\">\n <input\n odxControl\n class=\"odx-switch__input\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"hasError || null\"\n [attr.aria-readonly]=\"isReadonly || null\"\n [attr.aria-required]=\"isRequired || null\"\n [attr.tabindex]=\"tabindex || null\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled || isReadonly\"\n [name]=\"name\"\n [readonly]=\"isReadonly\"\n [value]=\"value\"\n type=\"checkbox\"\n (blur)=\"onTouched()\"\n (change)=\"onChanged($event)\"\n />\n <div class=\"odx-switch__thumb-container\">\n <div class=\"odx-switch__track\"></div>\n <div class=\"odx-switch__thumb\">\n <odx-icon class=\"odx-switch__icon\" iconSet=\"core\" [name]=\"checked ? 'check' : 'close'\" />\n </div>\n </div>\n <div class=\"odx-switch__content\">\n <ng-content />\n @if (isRequired) {\n <span class=\"odx-switch__required\">*</span>\n }\n </div>\n</label>\n", dependencies: [{ kind: "directive", type: ControlDirective, selector: "[odxControl]", exportAs: ["odxControl"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
23
23
|
};
|
|
24
24
|
SwitchComponent = __decorate([
|
|
25
25
|
CSSComponent('switch')
|
|
@@ -29,6 +29,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
29
29
|
type: Component,
|
|
30
30
|
args: [{ standalone: true, selector: 'odx-switch', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [ControlDirective, IconComponent], providers: [ReadonlyController.connect()], hostDirectives: [WithDisabledState], host: {
|
|
31
31
|
'[class.is-active]': 'checked',
|
|
32
|
-
}, template: "<label class=\"odx-switch__label\">\n <input\n odxControl\n class=\"odx-switch__input\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"hasError || null\"\n [attr.aria-readonly]=\"isReadonly || null\"\n [attr.aria-required]=\"isRequired || null\"\n [attr.tabindex]=\"tabindex || null\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled || isReadonly\"\n [name]=\"name\"\n [readonly]=\"isReadonly\"\n [value]=\"value\"\n type=\"checkbox\"\n (blur)=\"onTouched()\"\n (change)=\"onChanged($event)\"\n />\n <div class=\"odx-switch__track\">\n <div class=\"odx-switch__thumb\">\n <odx-icon class=\"odx-switch__icon\" iconSet=\"core\" [name]=\"checked ? 'check' : 'close'\" />\n </div>\n </div>\n <div class=\"odx-switch__content\">\n <ng-content />\n @if (isRequired) {\n <span class=\"odx-switch__required\">*</span>\n }\n </div>\n</label>\n" }]
|
|
32
|
+
}, template: "<label class=\"odx-switch__label\">\n <input\n odxControl\n class=\"odx-switch__input\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"hasError || null\"\n [attr.aria-readonly]=\"isReadonly || null\"\n [attr.aria-required]=\"isRequired || null\"\n [attr.tabindex]=\"tabindex || null\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled || isReadonly\"\n [name]=\"name\"\n [readonly]=\"isReadonly\"\n [value]=\"value\"\n type=\"checkbox\"\n (blur)=\"onTouched()\"\n (change)=\"onChanged($event)\"\n />\n <div class=\"odx-switch__thumb-container\">\n <div class=\"odx-switch__track\"></div>\n <div class=\"odx-switch__thumb\">\n <odx-icon class=\"odx-switch__icon\" iconSet=\"core\" [name]=\"checked ? 'check' : 'close'\" />\n </div>\n </div>\n <div class=\"odx-switch__content\">\n <ng-content />\n @if (isRequired) {\n <span class=\"odx-switch__required\">*</span>\n }\n </div>\n</label>\n" }]
|
|
33
33
|
}] });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3N3aXRjaC9zcmMvbGliL3N3aXRjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9zd2l0Y2gvc3JjL2xpYi9zd2l0Y2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFFckQ7Ozs7Ozs7OztHQVNHO0FBZUksSUFBTSxlQUFlLEdBQXJCLE1BQU0sZUFBZ0IsU0FBUSxlQUFlOytHQUF2QyxlQUFlO21HQUFmLGVBQWUsaUhBTmYsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyx3R0N6QjNDLHc5QkErQkEsNENEUFksZ0JBQWdCLG1GQUFFLGFBQWE7O0FBTzlCLGVBQWU7SUFkM0IsWUFBWSxDQUFDLFFBQVEsQ0FBQztHQWNWLGVBQWUsQ0FBMkI7OzRGQUExQyxlQUFlO2tCQWIzQixTQUFTO2lDQUNJLElBQUksWUFDTixZQUFZLG1CQUVMLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUIsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsYUFDL0IsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxrQkFDekIsQ0FBQyxpQkFBaUIsQ0FBQyxRQUM3Qjt3QkFDSixtQkFBbUIsRUFBRSxTQUFTO3FCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFkb25seUNvbnRyb2xsZXIsIFdpdGhEaXNhYmxlZFN0YXRlIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IENoZWNrQm94Q29udHJvbCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY2hlY2tib3gtY29udHJvbCc7XG5pbXBvcnQgeyBDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9jdXN0b20tZm9ybS1jb250cm9sJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IENTU0NvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5cbi8qKlxuICogU3dpdGNoQ29tcG9uZW50IHByb3ZpZGVzIGEgY3VzdG9tIHN3aXRjaCAodG9nZ2xlKSBjb250cm9sIHRoYXQgY2FuIGJlIHVzZWQgd2l0aGluIGZvcm1zXG4gKiBvciBzdGFuZGFsb25lIGZvciB0b2dnbGluZyBhIHNwZWNpZmljIGJpbmFyeSBzdGF0ZS4gSXQgc3VwcG9ydHMgcmVhZG9ubHkgYW5kIGRpc2FibGVkIHN0YXRlcyxcbiAqIGFuZCBpbnRlZ3JhdGVzIHNlYW1sZXNzbHkgd2l0aCBBbmd1bGFyJ3MgZm9ybSBjb250cm9scyBmb3IgZGF0YSBiaW5kaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LlxuICogSGFzIGhvc3QgZGlyZWN0aXZlcyBmb3IgZGlzYWJsZWQgc3RhdGUgaGFuZGxpbmcuXG4gKiBFeHRlbmRzIENoZWNrQm94Q29udHJvbCB0byBwcm92aWRlIGFkZGl0aW9uYWwgYmVoYXZpb3IuXG4gKlxuICogQHNlZSB7V2l0aERpc2FibGVkU3RhdGV9XG4gKiBAc2VlIHtDaGVja0JveENvbnRyb2x9XG4gKi9cbkBDU1NDb21wb25lbnQoJ3N3aXRjaCcpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdvZHgtc3dpdGNoJyxcbiAgdGVtcGxhdGVVcmw6ICdzd2l0Y2guY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW0NvbnRyb2xEaXJlY3RpdmUsIEljb25Db21wb25lbnRdLFxuICBwcm92aWRlcnM6IFtSZWFkb25seUNvbnRyb2xsZXIuY29ubmVjdCgpXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtXaXRoRGlzYWJsZWRTdGF0ZV0sXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLmlzLWFjdGl2ZV0nOiAnY2hlY2tlZCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFN3aXRjaENvbXBvbmVudCBleHRlbmRzIENoZWNrQm94Q29udHJvbCB7fVxuIiwiPGxhYmVsIGNsYXNzPVwib2R4LXN3aXRjaF9fbGFiZWxcIj5cbiAgPGlucHV0XG4gICAgb2R4Q29udHJvbFxuICAgIGNsYXNzPVwib2R4LXN3aXRjaF9faW5wdXRcIlxuICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJhcmlhQ2hlY2tlZFwiXG4gICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yIHx8IG51bGxcIlxuICAgIFthdHRyLmFyaWEtcmVhZG9ubHldPVwiaXNSZWFkb25seSB8fCBudWxsXCJcbiAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cImlzUmVxdWlyZWQgfHwgbnVsbFwiXG4gICAgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXggfHwgbnVsbFwiXG4gICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQgfHwgaXNSZWFkb25seVwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW3JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAoYmx1cik9XCJvblRvdWNoZWQoKVwiXG4gICAgKGNoYW5nZSk9XCJvbkNoYW5nZWQoJGV2ZW50KVwiXG4gIC8+XG4gIDxkaXYgY2xhc3M9XCJvZHgtc3dpdGNoX190aHVtYi1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwib2R4LXN3aXRjaF9fdHJhY2tcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwib2R4LXN3aXRjaF9fdGh1bWJcIj5cbiAgICAgIDxvZHgtaWNvbiBjbGFzcz1cIm9keC1zd2l0Y2hfX2ljb25cIiBpY29uU2V0PVwiY29yZVwiIFtuYW1lXT1cImNoZWNrZWQgPyAnY2hlY2snIDogJ2Nsb3NlJ1wiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwib2R4LXN3aXRjaF9fY29udGVudFwiPlxuICAgIDxuZy1jb250ZW50IC8+XG4gICAgQGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICA8c3BhbiBjbGFzcz1cIm9keC1zd2l0Y2hfX3JlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICB9XG4gIDwvZGl2PlxuPC9sYWJlbD5cbiJdfQ==
|
|
@@ -73,9 +73,9 @@ let TabBarComponent = class TabBarComponent {
|
|
|
73
73
|
selectedIndex: this.selectedIndex(),
|
|
74
74
|
selectedTab: this.activeItem(),
|
|
75
75
|
}));
|
|
76
|
-
merge(this.keyManager.change.pipe(tap((index) => this.selectedIndex.set(index ?? -1))), fromElementResize$(this.element.nativeElement, 600).pipe(tap(() => this.scrollableService.
|
|
76
|
+
merge(this.keyManager.change.pipe(tap((index) => this.selectedIndex.set(index ?? -1))), fromElementResize$(this.element.nativeElement, 600).pipe(tap(() => this.scrollableService.scrollActiveItemIntoHorizontalView(this.activeItem()?.element.nativeElement ?? null))), toObservable(tabState).pipe(skip(1), distinctUntilChanged((a, b) => a.selectedIndex === b.selectedIndex), filter(({ selectedTab }) => !selectedTab?.disabled), tap((state) => {
|
|
77
77
|
this.selectedTabChanged.emit(state);
|
|
78
|
-
this.scrollableService.
|
|
78
|
+
this.scrollableService.scrollActiveItemIntoHorizontalView(state.selectedTab?.element.nativeElement ?? null);
|
|
79
79
|
})))
|
|
80
80
|
.pipe(this.takeUntilDestroyed())
|
|
81
81
|
.subscribe();
|
|
@@ -118,7 +118,7 @@ let TabBarComponent = class TabBarComponent {
|
|
|
118
118
|
return;
|
|
119
119
|
if (this.scrollableService.visibleItems().includes(activeItem))
|
|
120
120
|
return;
|
|
121
|
-
this.scrollableService.
|
|
121
|
+
this.scrollableService.scrollActiveItemIntoHorizontalView(activeItem);
|
|
122
122
|
}
|
|
123
123
|
scrollTabs(direction = 1) {
|
|
124
124
|
this.scrollableService.scroll(direction);
|
|
@@ -142,4 +142,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
142
142
|
'(focus)': 'onFocused()',
|
|
143
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
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
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWItYmFyL3NyYy9saWIvdGFiLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWItYmFyL3NyYy9saWIvdGFiLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixlQUFlLEVBQ2YsTUFBTSxFQUVOLFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxN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RUFBRSxtQkFBbUI7d0JBQ2hDLFNBQVMsRUFBRSxhQUFhO3FCQUN6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBjb250ZW50Q2hpbGRyZW4sXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgbW9kZWwsXG4gIG91dHB1dCxcbiAgdmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBY3RpdmVJbmRpY2F0b3JEaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2FjdGl2ZS1pbmRpY2F0b3InO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZVNlcnZpY2UgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL3Njcm9sbGFibGUnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGZyb21FbGVtZW50UmVzaXplJCB9IGZyb20gJ0BvZHgvYW5ndWxhci9yeGpzJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1lcmdlLCBza2lwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYkJhckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgVGFiQ2hhbmdlRXZlbnQgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBUQUJfQkFSIH0gZnJvbSAnLi90YWItYmFyLmNvbmZpZyc7XG5cbi8qKlxuICogYFRhYkJhckNvbXBvbmVudGAgY3JlYXRlcyBhIGR5bmFtaWMgYW5kIGFjY2Vzc2libGUgdGFiIGJhciBpbnRlcmZhY2UsXG4gKiBmYWNpbGl0YXRpbmcgdGhlIG1hbmFnZW1lbnQgYW5kIGludGVyYWN0aW9uIHdpdGggYSBjb2xsZWN0aW9uIG9mIHRhYnMuXG4gKiBJdCBzdXBwb3J0cyBrZXlib2FyZCBuYXZpZ2F0aW9uLCBkeW5hbWljIHRhYiBtYW5hZ2VtZW50LCBhbmQgcmVzcG9uc2l2ZSBvdmVyZmxvdyBhY3Rpb25zLlxuICpcbiAqIFRoZSBjb21wb25lbnQgaW50ZWdyYXRlcyB3aXRoIEFuZ3VsYXIncyBDb250ZW50Q2hpbGRyZW4gdG8gZHluYW1pY2FsbHkgbWFuYWdlIHRoZSB0YWJzIGJhc2VkIG9uIHRoZWlyIGNvbnRlbnQuXG4gKiBJdCB1c2VzIEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIGZyb20gQW5ndWxhciBDREsgZm9yIG1hbmFnaW5nIGZvY3VzIGFuZCBrZXlib2FyZCBuYXZpZ2F0aW9uLFxuICogbWFraW5nIGl0IGFjY2Vzc2libGUgYW5kIHVzZXItZnJpZW5kbHkuIEFkZGl0aW9uYWxseSwgaXQgaGFuZGxlcyBvdmVyZmxvdyB3aXRoIG5hdmlnYXRpb25hbCBhcnJvd3MsXG4gKiBhbGxvd2luZyBmb3IgYSBzbW9vdGggdXNlciBleHBlcmllbmNlIGV2ZW4gd2l0aCBhIGxhcmdlIG51bWJlciBvZiB0YWJzLlxuICovXG5AQ1NTQ29tcG9uZW50KCd0YWItYmFyJylcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29keC10YWItYmFyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudCwgQWN0aXZlSW5kaWNhdG9yRGlyZWN0aXZlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi1iYXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBUQUJfQkFSLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUYWJCYXJDb21wb25lbnQpIH0sIFNjcm9sbGFibGVTZXJ2aWNlXSxcbiAgaG9zdDoge1xuICAgIHJvbGU6ICd0YWJwYW5lbCcsXG4gICAgdGFiaW5kZXg6ICcwJyxcbiAgICAnW2NsYXNzLm9keC10YWItYmFyLS1vdmVyZmxvdy1sZWZ0XSc6ICchIXByZXZUYWIoKScsXG4gICAgJ1tjbGFzcy5vZHgtdGFiLWJhci0tb3ZlcmZsb3ctcmlnaHRdJzogJyEhbmV4dFRhYigpJyxcbiAgICAnKGtleWRvd24pJzogJ29uS2V5ZG93bigkZXZlbnQpJyxcbiAgICAnKGZvY3VzKSc6ICdvbkZvY3VzZWQoKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYkJhckNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxhYmxlU2VydmljZSA9IGluamVjdChTY3JvbGxhYmxlU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5leHRUYWIgPSB0aGlzLnNjcm9sbGFibGVTZXJ2aWNlLm5leHRJdGVtO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJldlRhYiA9IHRoaXMuc2Nyb2xsYWJsZVNlcnZpY2UucHJldkl0ZW07XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYnMgPSBjb250ZW50Q2hpbGRyZW48VGFiQmFySXRlbUNvbXBvbmVudD4oVGFiQmFySXRlbUNvbXBvbmVudCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBhY3RpdmVJdGVtID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50YWJzKCkuYXQodGhpcy5zZWxlY3RlZEluZGV4KCkpID8/IG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga2V5TWFuYWdlcjogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8VGFiQmFySXRlbUNvbXBvbmVudD4gPSBuZXcgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIodGhpcy50YWJzLCBpbmplY3QoSW5qZWN0b3IpKVxuICAgIC53aXRoV3JhcCgpXG4gICAgLndpdGhIb21lQW5kRW5kKClcbiAgICAud2l0aEhvcml6b250YWxPcmllbnRhdGlvbignbHRyJylcbiAgICAud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oZmFsc2UpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzY3JvbGxDb250YWluZXJFbGVtZW50ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+Pignc2Nyb2xsQ29udGFpbmVyJyk7XG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIC8qKlxuICAgKiBJbmRleCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhYi4gVXNlIHRoaXMgcHJvcGVydHkgdG8gcHJvZ3JhbW1hdGljYWxseVxuICAgKiBjaGFuZ2UgdGhlIGFjdGl2ZSB0YWIuIEl0IHJlc3BvbmRzIHRvIGNoYW5nZXMgYnkgdXBkYXRpbmcgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgY29ycmVzcG9uZGluZ1xuICAgKiB0YWIgaXRlbSBhbmQgYWRqdXN0aW5nIHRoZSB2aWV3IGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGV4YW1wbGVcbiAgICogUHJvZ3JhbW1hdGljYWxseSBzZWxlY3QgdGhlIHNlY29uZCB0YWIgKGluZGV4IHN0YXJ0cyBmcm9tIDApOlxuICAgKiBgYGBodG1sXG4gICAqIDxvZHgtdGFiLWJhciBbc2VsZWN0ZWRJbmRleF09XCIxXCI+PC9vZHgtdGFiLWJhcj5cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0ZWRJbmRleCA9IG1vZGVsPG51bWJlcj4oMCk7XG5cbiAgLyoqXG4gICAqIEFuIEV2ZW50RW1pdHRlciB0aGF0IGVtaXRzIHdoZW5ldmVyIGEgbmV3IHRhYiBpcyBzZWxlY3RlZC4gSXQgcHJvdmlkZXMgdGhlIGBUYWJDaGFuZ2VFdmVudGBcbiAgICogd2hpY2ggY29udGFpbnMgdGhlIGluZGV4IG9mIHRoZSBuZXdseSBzZWxlY3RlZCB0YWIgYW5kIHRoZSBpbnN0YW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZ1xuICAgKiBgVGFiQmFySXRlbUNvbXBvbmVudGAuIFN1YnNjcmliZSB0byB0aGlzIG91dHB1dCB0byBwZXJmb3JtIGFjdGlvbnMgd2hlbiB0aGUgYWN0aXZlIHRhYiBjaGFuZ2VzLlxuICAgKlxuICAgKiBAZW1pdHMge1RhYkNoYW5nZUV2ZW50fVxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBodG1sXG4gICAqIDxvZHgtdGFiLWJhciAoc2VsZWN0ZWRUYWJDaGFuZ2VkKT1cIm9uVGFiQ2hhbmdlKCRldmVudClcIj48L29keC10YWItYmFyPlxuICAgKiBgYGBcbiAgICpcbiAgICogYGBgdHNcbiAgICogb25UYWJDaGFuZ2UoZXZlbnQ6IFRhYkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAqICAgY29uc29sZS5sb2coYE5ldyBhY3RpdmUgdGFiIGluZGV4OiAke2V2ZW50LnNlbGVjdGVkSW5kZXh9YCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0ZWRUYWJDaGFuZ2VkID0gb3V0cHV0PFRhYkNoYW5nZUV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHRhYlN0YXRlID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgIHNlbGVjdGVkSW5kZXg6IHRoaXMuc2VsZWN0ZWRJbmRleCgpLFxuICAgICAgc2VsZWN0ZWRUYWI6IHRoaXMuYWN0aXZlSXRlbSgpLFxuICAgIH0pKTtcblxuICAgIG1lcmdlKFxuICAgICAgdGhpcy5rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKHRhcCgoaW5kZXgpID0+IHRoaXMuc2VsZWN0ZWRJbmRleC5zZXQoaW5kZXggPz8gLTEpKSksXG4gICAgICBmcm9tRWxlbWVudFJlc2l6ZSQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIDYwMCkucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc2Nyb2xsYWJsZVNlcnZpY2Uuc2Nyb2xsQWN0aXZlSXRlbUludG9Ib3Jpem9udGFsVmlldyh0aGlzLmFjdGl2ZUl0ZW0oKT8uZWxlbWVudC5uYXRpdmVFbGVtZW50ID8/IG51bGwpKSxcbiAgICAgICksXG4gICAgICB0b09ic2VydmFibGUodGFiU3RhdGUpLnBpcGUoXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhLnNlbGVjdGVkSW5kZXggPT09IGIuc2VsZWN0ZWRJbmRleCksXG4gICAgICAgIGZpbHRlcigoeyBzZWxlY3RlZFRhYiB9KSA9PiAhc2VsZWN0ZWRUYWI/LmRpc2FibGVkKSxcbiAgICAgICAgdGFwKChzdGF0ZSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2VkLmVtaXQoc3RhdGUpO1xuICAgICAgICAgIHRoaXMuc2Nyb2xsYWJsZVNlcnZpY2Uuc2Nyb2xsQWN0aXZlSXRlbUludG9Ib3Jpem9udGFsVmlldyhzdGF0ZS5zZWxlY3RlZFRhYj8uZWxlbWVudC5uYXRpdmVFbGVtZW50ID8/IG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgKVxuICAgICAgLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5zZWxlY3RlZEluZGV4KCkpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsYWJsZVNlcnZpY2Uub2JzZXJ2ZSh0aGlzLnNjcm9sbENvbnRhaW5lckVsZW1lbnQoKSwgdGhpcy50YWJzKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlcyB0aGUgc3BlY2lmaWVkIHRhYiBpdGVtLCBtYWtpbmcgaXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YWIuXG4gICAqIElmIHRoZSBpdGVtIGlzIGFscmVhZHkgYWN0aXZlLCBubyBhY3Rpb24gaXMgdGFrZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7VGFiQmFySXRlbUNvbXBvbmVudCB8IG51bGx9IGl0ZW0gLSBUaGUgdGFiIGl0ZW0gdG8gYWN0aXZhdGUuXG4gICAqL1xuICBwdWJsaWMgYWN0aXZhdGVJdGVtKGl0ZW0/OiBUYWJCYXJJdGVtQ29tcG9uZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChpdGVtID09PSB0aGlzLmtleU1hbmFnZXI/LmFjdGl2ZUl0ZW0pIHJldHVybjtcbiAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gaXRlbSA/IHRoaXMudGFicygpLmluZGV4T2YoaXRlbSkgOiAtMTtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXguc2V0KHNlbGVjdGVkSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNwZWNpZmllZCB0YWIgaXRlbSBpcyByZW1vdmVkIGZyb20gdGhlIHRhYiBiYXIuXG4gICAqIElmIHRoZSBpdGVtIGlzIGN1cnJlbnRseSBhY3RpdmUsIHRoZSBwcmV2aW91cyB0YWIgaXMgYWN0aXZhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1RhYkJhckl0ZW1Db21wb25lbnR9IGl0ZW0gLSBUaGUgdGFiIGl0ZW0gdG8gcmVtb3ZlLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZUl0ZW0oaXRlbTogVGFiQmFySXRlbUNvbXBvbmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmtleU1hbmFnZXI/LmFjdGl2ZUl0ZW0gIT09IGl0ZW0pIHJldHVybjtcbiAgICB0aGlzLmtleU1hbmFnZXI/LnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMua2V5TWFuYWdlcj8ub25LZXlkb3duKGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkZvY3VzZWQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuYWN0aXZlSXRlbSgpPy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFhY3RpdmVJdGVtKSByZXR1cm47XG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZVNlcnZpY2UudmlzaWJsZUl0ZW1zKCkuaW5jbHVkZXMoYWN0aXZlSXRlbSkpIHJldHVybjtcbiAgICB0aGlzLnNjcm9sbGFibGVTZXJ2aWNlLnNjcm9sbEFjdGl2ZUl0ZW1JbnRvSG9yaXpvbnRhbFZpZXcoYWN0aXZlSXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2Nyb2xsVGFicyhkaXJlY3Rpb246IDEgfCAtMSA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbGFibGVTZXJ2aWNlLnNjcm9sbChkaXJlY3Rpb24pO1xuICB9XG59XG4iLCI8YnV0dG9uICN0YWJBY3Rpb24gY2xhc3M9XCJvZHgtdGFiLWJhcl9fYWN0aW9uIG9keC10YWItYmFyX19hY3Rpb24tLXByZXZcIiBbY2xhc3MuaXMtYWN0aXZlXT1cIiEhcHJldlRhYigpXCIgKGNsaWNrKT1cInNjcm9sbFRhYnMoLTEpXCIgdGFiaW5kZXg9XCItMVwiPlxuICA8b2R4LWljb24gY2xhc3M9XCJ0YWItYmFyLWFjdGlvbi1pY29uXCIgbmFtZT1cImNoZXZyb24tbGVmdFwiIGljb25TZXQ9XCJjb3JlXCIgLz5cbjwvYnV0dG9uPlxuPGRpdiBjbGFzcz1cIm9keC10YWItYmFyX19pbm5lclwiICNzY3JvbGxDb250YWluZXIgdGFiaW5kZXg9XCItMVwiPlxuICA8ZGl2IGNsYXNzPVwib2R4LXRhYi1iYXJfX3BhbmVsXCIgcm9sZT1cInRhYmxpc3RcIiAjdGFiQmFyUGFuZWw+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgICA8ZGl2IGNsYXNzPVwib2R4LXRhYi1iYXJfX2luZGljYXRvclwiIFtvZHhBY3RpdmVJbmRpY2F0b3JdPVwiYWN0aXZlSXRlbSgpPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50XCIgb2R4QWN0aXZlSW5kaWNhdG9yUG9zaXRpb249XCJzdGFydFwiPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGJ1dHRvbiAjdGFiQWN0aW9uIGNsYXNzPVwib2R4LXRhYi1iYXJfX2FjdGlvbiBvZHgtdGFiLWJhcl9fYWN0aW9uLS1uZXh0XCIgW2NsYXNzLmlzLWFjdGl2ZV09XCIhIW5leHRUYWIoKVwiIChjbGljayk9XCJzY3JvbGxUYWJzKClcIiB0YWJpbmRleD1cIi0xXCI+XG4gIDxvZHgtaWNvbiBjbGFzcz1cInRhYi1iYXItYWN0aW9uLWljb25cIiBuYW1lPVwiY2hldnJvbi1yaWdodFwiIGljb25TZXQ9XCJjb3JlXCIgLz5cbjwvYnV0dG9uPlxuIl19
|
|
@@ -78,10 +78,31 @@ class ScrollableService {
|
|
|
78
78
|
*
|
|
79
79
|
* @param {HTMLElement | null} activeItem - The currently active item to scroll into view.
|
|
80
80
|
*/
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
scrollActiveItemIntoHorizontalView(activeItem) {
|
|
82
|
+
const container = this.scrollContainer?.nativeElement;
|
|
83
|
+
if (!container || !activeItem)
|
|
84
|
+
return;
|
|
85
|
+
// Use a small epsilon to avoid false positives from subpixel rounding.
|
|
86
|
+
const isHorizontallyScrollable = container.scrollWidth - container.clientWidth > 1;
|
|
87
|
+
// If there is no horizontal overflow, any attempt to "scroll into view" can only scroll ancestor containers
|
|
88
|
+
// (including the page). This is the root cause of the page jumping on load/resize.
|
|
89
|
+
if (!isHorizontallyScrollable)
|
|
90
|
+
return;
|
|
91
|
+
const containerRect = container.getBoundingClientRect();
|
|
92
|
+
const itemRect = activeItem.getBoundingClientRect();
|
|
93
|
+
const isFullyVisible = itemRect.left >= containerRect.left && itemRect.right <= containerRect.right;
|
|
94
|
+
if (isFullyVisible)
|
|
95
|
+
return;
|
|
96
|
+
const maxLeft = Math.max(0, container.scrollWidth - container.clientWidth);
|
|
97
|
+
let targetLeft = container.scrollLeft;
|
|
98
|
+
const itemLeft = itemRect.left - containerRect.left + container.scrollLeft;
|
|
99
|
+
const itemCenter = itemLeft + itemRect.width / 2;
|
|
100
|
+
targetLeft = itemCenter - container.clientWidth / 2;
|
|
101
|
+
targetLeft = Math.min(maxLeft, Math.max(0, targetLeft));
|
|
102
|
+
const leftChanged = Math.abs(targetLeft - container.scrollLeft) > 1;
|
|
103
|
+
if (!leftChanged)
|
|
104
|
+
return;
|
|
105
|
+
container.scrollTo({ left: targetLeft, behavior: 'smooth' });
|
|
85
106
|
}
|
|
86
107
|
observeVisibility(items, callback) {
|
|
87
108
|
const visibleMap = new Map();
|
|
@@ -1 +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
|
|
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 scrollActiveItemIntoHorizontalView(activeItem: HTMLElement | null): void {\n const container = this.scrollContainer?.nativeElement;\n if (!container || !activeItem) return;\n\n // Use a small epsilon to avoid false positives from subpixel rounding.\n const isHorizontallyScrollable = container.scrollWidth - container.clientWidth > 1;\n // If there is no horizontal overflow, any attempt to \"scroll into view\" can only scroll ancestor containers\n // (including the page). This is the root cause of the page jumping on load/resize.\n if (!isHorizontallyScrollable) return;\n\n const containerRect = container.getBoundingClientRect();\n const itemRect = activeItem.getBoundingClientRect();\n\n const isFullyVisible = itemRect.left >= containerRect.left && itemRect.right <= containerRect.right;\n if (isFullyVisible) return;\n\n const maxLeft = Math.max(0, container.scrollWidth - container.clientWidth);\n let targetLeft = container.scrollLeft;\n const itemLeft = itemRect.left - containerRect.left + container.scrollLeft;\n const itemCenter = itemLeft + itemRect.width / 2;\n targetLeft = itemCenter - container.clientWidth / 2;\n targetLeft = Math.min(maxLeft, Math.max(0, targetLeft));\n\n const leftChanged = Math.abs(targetLeft - container.scrollLeft) > 1;\n if (!leftChanged) return;\n\n container.scrollTo({ left: targetLeft, behavior: 'smooth' });\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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"}
|
|
@@ -62,14 +62,14 @@ let HeaderComponent = class HeaderComponent {
|
|
|
62
62
|
this.element = injectElement();
|
|
63
63
|
}
|
|
64
64
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
65
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HeaderComponent, isStandalone: true, selector: "odx-header", ngImport: i0, template: "<ng-content select=\"button[odxMainMenuButton]\" />\n<odx-logo />\n<ng-content select=\"odx-header-title\" />\n<div class=\"odx-header__content\">\n <span class=\"odx-header__content-container\"><ng-content /></span>\n</div>\n<ng-content select=\"odx-search-bar\" />\n<ng-content select=\"odx-action-group, odx-auth\" />\n<ng-content select=\"[odxHeaderAvatar]\" />\n", dependencies: [{ kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
65
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HeaderComponent, isStandalone: true, selector: "odx-header", ngImport: i0, template: "<ng-content select=\"button[odxMainMenuButton]\" />\n<odx-logo />\n<ng-content select=\"odx-header-title\" />\n<div class=\"odx-header__content\">\n <span class=\"odx-header__content-container\"><ng-content /></span>\n</div>\n<ng-content select=\"odx-search-bar\" />\n<ng-content select=\"odx-action-group, odx-auth, odx-institution-assignment\" />\n<ng-content select=\"[odxHeaderAvatar]\" />\n", dependencies: [{ kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
66
66
|
};
|
|
67
67
|
HeaderComponent = __decorate([
|
|
68
68
|
CSSComponent('header')
|
|
69
69
|
], HeaderComponent);
|
|
70
70
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderComponent, decorators: [{
|
|
71
71
|
type: Component,
|
|
72
|
-
args: [{ standalone: true, selector: 'odx-header', imports: [LogoDirective], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content select=\"button[odxMainMenuButton]\" />\n<odx-logo />\n<ng-content select=\"odx-header-title\" />\n<div class=\"odx-header__content\">\n <span class=\"odx-header__content-container\"><ng-content /></span>\n</div>\n<ng-content select=\"odx-search-bar\" />\n<ng-content select=\"odx-action-group, odx-auth\" />\n<ng-content select=\"[odxHeaderAvatar]\" />\n" }]
|
|
72
|
+
args: [{ standalone: true, selector: 'odx-header', imports: [LogoDirective], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content select=\"button[odxMainMenuButton]\" />\n<odx-logo />\n<ng-content select=\"odx-header-title\" />\n<div class=\"odx-header__content\">\n <span class=\"odx-header__content-container\"><ng-content /></span>\n</div>\n<ng-content select=\"odx-search-bar\" />\n<ng-content select=\"odx-action-group, odx-auth, odx-institution-assignment\" />\n<ng-content select=\"[odxHeaderAvatar]\" />\n" }]
|
|
73
73
|
}] });
|
|
74
74
|
|
|
75
75
|
const modules = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-header.mjs","sources":["../../../../libs/angular/components/header/src/lib/directives/header-avatar.directive.ts","../../../../libs/angular/components/header/src/lib/directives/header-title.directive.ts","../../../../libs/angular/components/header/src/lib/header.component.ts","../../../../libs/angular/components/header/src/lib/header.component.html","../../../../libs/angular/components/header/src/lib/header.module.ts","../../../../libs/angular/components/header/src/odx-angular-components-header.ts"],"sourcesContent":["import { AfterViewInit, Directive, inject } from '@angular/core';\nimport { ButtonComponent, ButtonVariant } from '@odx/angular/components/button';\n\n/**\n * Directive for the header avatar component.\n * This directive is responsible for customizing the appearance of the header avatar button.\n */\n@Directive({\n standalone: true,\n selector: 'button[odxButton][odxHeaderAvatar]',\n host: {\n '[class.odx-header__avatar]': 'true',\n },\n})\nexport class HeaderAvatarDirective implements AfterViewInit {\n private readonly button = inject(ButtonComponent, { self: true });\n\n public ngAfterViewInit(): void {\n this.button.variant = ButtonVariant.GHOST;\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Directive for displaying the title in the header component.\n */\n@Directive({\n selector: 'odx-header-title',\n standalone: true,\n host: {\n '[class.odx-header__title]': 'true',\n },\n})\nexport class HeaderTitleDirective {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { LogoDirective } from '@odx/angular/components/logo';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n/**\n * Represents the header component.\n */\n@CSSComponent('header')\n@Component({\n standalone: true,\n selector: 'odx-header',\n imports: [LogoDirective],\n templateUrl: './header.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderComponent {\n public readonly element = injectElement();\n}\n","<ng-content select=\"button[odxMainMenuButton]\" />\n<odx-logo />\n<ng-content select=\"odx-header-title\" />\n<div class=\"odx-header__content\">\n <span class=\"odx-header__content-container\"><ng-content /></span>\n</div>\n<ng-content select=\"odx-search-bar\" />\n<ng-content select=\"odx-action-group, odx-auth\" />\n<ng-content select=\"[odxHeaderAvatar]\" />\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { AvatarComponent } from '@odx/angular/components/avatar';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { MainMenuModule } from '@odx/angular/components/main-menu';\nimport { HeaderAvatarDirective, HeaderTitleDirective } from './directives';\nimport { HeaderComponent } from './header.component';\n\nconst modules = [\n HeaderComponent,\n HeaderTitleDirective,\n HeaderAvatarDirective,\n MainMenuModule,\n ActionGroupComponent,\n IconComponent,\n ButtonComponent,\n AvatarComponent,\n];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class HeaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGA;;;AAGG;MAQU,qBAAqB,CAAA;AAPlC,IAAA,WAAA,GAAA;QAQmB,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAKlE,IAAA;IAHQ,eAAe,GAAA;QACpB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,KAAK;IAC3C;+GALW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,oCAAoC;AAC9C,oBAAA,IAAI,EAAE;AACJ,wBAAA,4BAA4B,EAAE,MAAM;AACrC,qBAAA;AACF,iBAAA;;;ACXD;;AAEG;MAQU,oBAAoB,CAAA;+GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,2BAA2B,EAAE,MAAM;AACpC,qBAAA;AACF,iBAAA;;;ACND;;AAEG;AAUI,IAAM,eAAe,GAArB,MAAM,eAAe,CAAA;AAArB,IAAA,WAAA,GAAA;QACW,IAAA,CAAA,OAAO,GAAG,aAAa,EAAE;AAC1C,IAAA;+GAFY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjB5B,
|
|
1
|
+
{"version":3,"file":"odx-angular-components-header.mjs","sources":["../../../../libs/angular/components/header/src/lib/directives/header-avatar.directive.ts","../../../../libs/angular/components/header/src/lib/directives/header-title.directive.ts","../../../../libs/angular/components/header/src/lib/header.component.ts","../../../../libs/angular/components/header/src/lib/header.component.html","../../../../libs/angular/components/header/src/lib/header.module.ts","../../../../libs/angular/components/header/src/odx-angular-components-header.ts"],"sourcesContent":["import { AfterViewInit, Directive, inject } from '@angular/core';\nimport { ButtonComponent, ButtonVariant } from '@odx/angular/components/button';\n\n/**\n * Directive for the header avatar component.\n * This directive is responsible for customizing the appearance of the header avatar button.\n */\n@Directive({\n standalone: true,\n selector: 'button[odxButton][odxHeaderAvatar]',\n host: {\n '[class.odx-header__avatar]': 'true',\n },\n})\nexport class HeaderAvatarDirective implements AfterViewInit {\n private readonly button = inject(ButtonComponent, { self: true });\n\n public ngAfterViewInit(): void {\n this.button.variant = ButtonVariant.GHOST;\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Directive for displaying the title in the header component.\n */\n@Directive({\n selector: 'odx-header-title',\n standalone: true,\n host: {\n '[class.odx-header__title]': 'true',\n },\n})\nexport class HeaderTitleDirective {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { LogoDirective } from '@odx/angular/components/logo';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n/**\n * Represents the header component.\n */\n@CSSComponent('header')\n@Component({\n standalone: true,\n selector: 'odx-header',\n imports: [LogoDirective],\n templateUrl: './header.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderComponent {\n public readonly element = injectElement();\n}\n","<ng-content select=\"button[odxMainMenuButton]\" />\n<odx-logo />\n<ng-content select=\"odx-header-title\" />\n<div class=\"odx-header__content\">\n <span class=\"odx-header__content-container\"><ng-content /></span>\n</div>\n<ng-content select=\"odx-search-bar\" />\n<ng-content select=\"odx-action-group, odx-auth, odx-institution-assignment\" />\n<ng-content select=\"[odxHeaderAvatar]\" />\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { AvatarComponent } from '@odx/angular/components/avatar';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { MainMenuModule } from '@odx/angular/components/main-menu';\nimport { HeaderAvatarDirective, HeaderTitleDirective } from './directives';\nimport { HeaderComponent } from './header.component';\n\nconst modules = [\n HeaderComponent,\n HeaderTitleDirective,\n HeaderAvatarDirective,\n MainMenuModule,\n ActionGroupComponent,\n IconComponent,\n ButtonComponent,\n AvatarComponent,\n];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class HeaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGA;;;AAGG;MAQU,qBAAqB,CAAA;AAPlC,IAAA,WAAA,GAAA;QAQmB,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAKlE,IAAA;IAHQ,eAAe,GAAA;QACpB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,KAAK;IAC3C;+GALW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,oCAAoC;AAC9C,oBAAA,IAAI,EAAE;AACJ,wBAAA,4BAA4B,EAAE,MAAM;AACrC,qBAAA;AACF,iBAAA;;;ACXD;;AAEG;MAQU,oBAAoB,CAAA;+GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,2BAA2B,EAAE,MAAM;AACpC,qBAAA;AACF,iBAAA;;;ACND;;AAEG;AAUI,IAAM,eAAe,GAArB,MAAM,eAAe,CAAA;AAArB,IAAA,WAAA,GAAA;QACW,IAAA,CAAA,OAAO,GAAG,aAAa,EAAE;AAC1C,IAAA;+GAFY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjB5B,8YASA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDGY,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;AAKZ,eAAe,GAAA,UAAA,CAAA;IAT3B,YAAY,CAAC,QAAQ;AAST,CAAA,EAAA,eAAe,CAE3B;4FAFY,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EAAA,QAAA,EACN,YAAY,EAAA,OAAA,EACb,CAAC,aAAa,CAAC,EAAA,aAAA,EAET,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8YAAA,EAAA;;;AELjD,MAAM,OAAO,GAAG;IACd,eAAe;IACf,oBAAoB;IACpB,qBAAqB;IACrB,cAAc;IACd,oBAAoB;IACpB,aAAa;IACb,eAAe;IACf,eAAe;CAChB;MAMY,YAAY,CAAA;+GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAdvB,eAAe;YACf,oBAAoB;YACpB,qBAAqB;YACrB,cAAc;YACd,oBAAoB;YACpB,aAAa;YACb,eAAe;YACf,eAAe,CAAA,EAAA,OAAA,EAAA,CAKL,UAAU,EAZpB,eAAe;YACf,oBAAoB;YACpB,qBAAqB;YACrB,cAAc;YACd,oBAAoB;YACpB,aAAa;YACb,eAAe;YACf,eAAe,CAAA,EAAA,CAAA,CAAA;AAOJ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAXvB,cAAc;YACd,oBAAoB;YACpB,aAAa;YACb,eAAe;YACf,eAAe,EAKL,UAAU,EATpB,cAAc,CAAA,EAAA,CAAA,CAAA;;4FAWH,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC;AAClC,iBAAA;;;ACxBD;;AAEG;;;;"}
|
|
@@ -20,7 +20,7 @@ import { Logger, deepmerge, CSSComponent } from '@odx/angular/internal';
|
|
|
20
20
|
import { TranslatePipe, provideTranslations } from '@odx/angular/internal/translate';
|
|
21
21
|
import { isFunction, createConfigTokens, orderBy, Queue, getUniqueId, isString, injectElement, Position } from '@odx/angular/utils';
|
|
22
22
|
import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
23
|
-
import { tap, map, shareReplay, filter, switchMap,
|
|
23
|
+
import { tap, map, shareReplay, filter, switchMap, isObservable, of, combineLatest, from, firstValueFrom, merge, startWith } from 'rxjs';
|
|
24
24
|
import { LocalizationService } from '@odx/angular/localization';
|
|
25
25
|
import { AvatarComponent } from '@odx/angular/components/avatar';
|
|
26
26
|
import * as i2 from '@odx/angular';
|
|
@@ -21,7 +21,7 @@ import { CheckboxRequiredValidator, NG_VALIDATORS } from '@angular/forms';
|
|
|
21
21
|
*/
|
|
22
22
|
let SwitchComponent = class SwitchComponent extends CheckBoxControl {
|
|
23
23
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwitchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SwitchComponent, isStandalone: true, selector: "odx-switch", host: { properties: { "class.is-active": "checked" } }, providers: [ReadonlyController.connect()], usesInheritance: true, hostDirectives: [{ directive: i1.WithDisabledState }], ngImport: i0, template: "<label class=\"odx-switch__label\">\n <input\n odxControl\n class=\"odx-switch__input\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"hasError || null\"\n [attr.aria-readonly]=\"isReadonly || null\"\n [attr.aria-required]=\"isRequired || null\"\n [attr.tabindex]=\"tabindex || null\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled || isReadonly\"\n [name]=\"name\"\n [readonly]=\"isReadonly\"\n [value]=\"value\"\n type=\"checkbox\"\n (blur)=\"onTouched()\"\n (change)=\"onChanged($event)\"\n />\n <div class=\"odx-switch__track\">\n <div class=\"odx-switch__thumb\">\n <odx-icon class=\"odx-switch__icon\" iconSet=\"core\" [name]=\"checked ? 'check' : 'close'\" />\n </div>\n </div>\n <div class=\"odx-switch__content\">\n <ng-content />\n @if (isRequired) {\n <span class=\"odx-switch__required\">*</span>\n }\n </div>\n</label>\n", dependencies: [{ kind: "directive", type: ControlDirective, selector: "[odxControl]", exportAs: ["odxControl"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SwitchComponent, isStandalone: true, selector: "odx-switch", host: { properties: { "class.is-active": "checked" } }, providers: [ReadonlyController.connect()], usesInheritance: true, hostDirectives: [{ directive: i1.WithDisabledState }], ngImport: i0, template: "<label class=\"odx-switch__label\">\n <input\n odxControl\n class=\"odx-switch__input\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"hasError || null\"\n [attr.aria-readonly]=\"isReadonly || null\"\n [attr.aria-required]=\"isRequired || null\"\n [attr.tabindex]=\"tabindex || null\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled || isReadonly\"\n [name]=\"name\"\n [readonly]=\"isReadonly\"\n [value]=\"value\"\n type=\"checkbox\"\n (blur)=\"onTouched()\"\n (change)=\"onChanged($event)\"\n />\n <div class=\"odx-switch__thumb-container\">\n <div class=\"odx-switch__track\"></div>\n <div class=\"odx-switch__thumb\">\n <odx-icon class=\"odx-switch__icon\" iconSet=\"core\" [name]=\"checked ? 'check' : 'close'\" />\n </div>\n </div>\n <div class=\"odx-switch__content\">\n <ng-content />\n @if (isRequired) {\n <span class=\"odx-switch__required\">*</span>\n }\n </div>\n</label>\n", dependencies: [{ kind: "directive", type: ControlDirective, selector: "[odxControl]", exportAs: ["odxControl"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
25
25
|
};
|
|
26
26
|
SwitchComponent = __decorate([
|
|
27
27
|
CSSComponent('switch')
|
|
@@ -30,7 +30,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
30
30
|
type: Component,
|
|
31
31
|
args: [{ standalone: true, selector: 'odx-switch', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [ControlDirective, IconComponent], providers: [ReadonlyController.connect()], hostDirectives: [WithDisabledState], host: {
|
|
32
32
|
'[class.is-active]': 'checked',
|
|
33
|
-
}, template: "<label class=\"odx-switch__label\">\n <input\n odxControl\n class=\"odx-switch__input\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"hasError || null\"\n [attr.aria-readonly]=\"isReadonly || null\"\n [attr.aria-required]=\"isRequired || null\"\n [attr.tabindex]=\"tabindex || null\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled || isReadonly\"\n [name]=\"name\"\n [readonly]=\"isReadonly\"\n [value]=\"value\"\n type=\"checkbox\"\n (blur)=\"onTouched()\"\n (change)=\"onChanged($event)\"\n />\n <div class=\"odx-switch__track\">\n <div class=\"odx-switch__thumb\">\n <odx-icon class=\"odx-switch__icon\" iconSet=\"core\" [name]=\"checked ? 'check' : 'close'\" />\n </div>\n </div>\n <div class=\"odx-switch__content\">\n <ng-content />\n @if (isRequired) {\n <span class=\"odx-switch__required\">*</span>\n }\n </div>\n</label>\n" }]
|
|
33
|
+
}, template: "<label class=\"odx-switch__label\">\n <input\n odxControl\n class=\"odx-switch__input\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"hasError || null\"\n [attr.aria-readonly]=\"isReadonly || null\"\n [attr.aria-required]=\"isRequired || null\"\n [attr.tabindex]=\"tabindex || null\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled || isReadonly\"\n [name]=\"name\"\n [readonly]=\"isReadonly\"\n [value]=\"value\"\n type=\"checkbox\"\n (blur)=\"onTouched()\"\n (change)=\"onChanged($event)\"\n />\n <div class=\"odx-switch__thumb-container\">\n <div class=\"odx-switch__track\"></div>\n <div class=\"odx-switch__thumb\">\n <odx-icon class=\"odx-switch__icon\" iconSet=\"core\" [name]=\"checked ? 'check' : 'close'\" />\n </div>\n </div>\n <div class=\"odx-switch__content\">\n <ng-content />\n @if (isRequired) {\n <span class=\"odx-switch__required\">*</span>\n }\n </div>\n</label>\n" }]
|
|
34
34
|
}] });
|
|
35
35
|
|
|
36
36
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-switch.mjs","sources":["../../../../libs/angular/components/switch/src/lib/switch.component.ts","../../../../libs/angular/components/switch/src/lib/switch.component.html","../../../../libs/angular/components/switch/src/lib/switch.validator.ts","../../../../libs/angular/components/switch/src/lib/switch.module.ts","../../../../libs/angular/components/switch/src/odx-angular-components-switch.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { ReadonlyController, WithDisabledState } from '@odx/angular';\nimport { CheckBoxControl } from '@odx/angular/cdk/checkbox-control';\nimport { ControlDirective } from '@odx/angular/cdk/custom-form-control';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\n\n/**\n * SwitchComponent provides a custom switch (toggle) control that can be used within forms\n * or standalone for toggling a specific binary state. It supports readonly and disabled states,\n * and integrates seamlessly with Angular's form controls for data binding and state management.\n * Has host directives for disabled state handling.\n * Extends CheckBoxControl to provide additional behavior.\n *\n * @see {WithDisabledState}\n * @see {CheckBoxControl}\n */\n@CSSComponent('switch')\n@Component({\n standalone: true,\n selector: 'odx-switch',\n templateUrl: 'switch.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [ControlDirective, IconComponent],\n providers: [ReadonlyController.connect()],\n hostDirectives: [WithDisabledState],\n host: {\n '[class.is-active]': 'checked',\n },\n})\nexport class SwitchComponent extends CheckBoxControl {}\n","<label class=\"odx-switch__label\">\n <input\n odxControl\n class=\"odx-switch__input\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"hasError || null\"\n [attr.aria-readonly]=\"isReadonly || null\"\n [attr.aria-required]=\"isRequired || null\"\n [attr.tabindex]=\"tabindex || null\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled || isReadonly\"\n [name]=\"name\"\n [readonly]=\"isReadonly\"\n [value]=\"value\"\n type=\"checkbox\"\n (blur)=\"onTouched()\"\n (change)=\"onChanged($event)\"\n />\n <div class=\"odx-switch__track\">\n <div class=\"odx-switch__thumb\">\n <odx-icon class=\"odx-switch__icon\" iconSet=\"core\" [name]=\"checked ? 'check' : 'close'\" />\n </div>\n </div>\n <div class=\"odx-switch__content\">\n <ng-content />\n @if (isRequired) {\n <span class=\"odx-switch__required\">*</span>\n }\n </div>\n</label>\n","import { Directive, forwardRef } from '@angular/core';\nimport { CheckboxRequiredValidator, NG_VALIDATORS } from '@angular/forms';\n\n/**\n * SwitchValidator extends CheckboxRequiredValidator to provide required field validation\n * for switch components used within Angular forms. It ensures that the switch is marked as required\n * and must be toggled (checked) to meet form validation criteria.\n *\n * This directive automatically attaches itself to any switch component with a 'required' attribute\n * and a form control binding (formControlName, formControl, or ngModel).\n *\n * Extends CheckboxRequiredValidator.\n *\n * @see {CheckboxRequiredValidator}\n */\n@Directive({\n standalone: true,\n selector: 'odx-switch[required][formControlName], odx-switch[required][formControl], odx-switch[required][ngModel]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SwitchValidator),\n multi: true,\n },\n ],\n})\nexport class SwitchValidator extends CheckboxRequiredValidator {}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { SwitchComponent } from './switch.component';\nimport { SwitchValidator } from './switch.validator';\n\nconst modules = [SwitchComponent, SwitchValidator];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class SwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;AAOA;;;;;;;;;AASG;AAeI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,eAAe,CAAA;+GAAvC,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,EAAA,EAAA,SAAA,EANf,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzB3C,
|
|
1
|
+
{"version":3,"file":"odx-angular-components-switch.mjs","sources":["../../../../libs/angular/components/switch/src/lib/switch.component.ts","../../../../libs/angular/components/switch/src/lib/switch.component.html","../../../../libs/angular/components/switch/src/lib/switch.validator.ts","../../../../libs/angular/components/switch/src/lib/switch.module.ts","../../../../libs/angular/components/switch/src/odx-angular-components-switch.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { ReadonlyController, WithDisabledState } from '@odx/angular';\nimport { CheckBoxControl } from '@odx/angular/cdk/checkbox-control';\nimport { ControlDirective } from '@odx/angular/cdk/custom-form-control';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\n\n/**\n * SwitchComponent provides a custom switch (toggle) control that can be used within forms\n * or standalone for toggling a specific binary state. It supports readonly and disabled states,\n * and integrates seamlessly with Angular's form controls for data binding and state management.\n * Has host directives for disabled state handling.\n * Extends CheckBoxControl to provide additional behavior.\n *\n * @see {WithDisabledState}\n * @see {CheckBoxControl}\n */\n@CSSComponent('switch')\n@Component({\n standalone: true,\n selector: 'odx-switch',\n templateUrl: 'switch.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [ControlDirective, IconComponent],\n providers: [ReadonlyController.connect()],\n hostDirectives: [WithDisabledState],\n host: {\n '[class.is-active]': 'checked',\n },\n})\nexport class SwitchComponent extends CheckBoxControl {}\n","<label class=\"odx-switch__label\">\n <input\n odxControl\n class=\"odx-switch__input\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"hasError || null\"\n [attr.aria-readonly]=\"isReadonly || null\"\n [attr.aria-required]=\"isRequired || null\"\n [attr.tabindex]=\"tabindex || null\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled || isReadonly\"\n [name]=\"name\"\n [readonly]=\"isReadonly\"\n [value]=\"value\"\n type=\"checkbox\"\n (blur)=\"onTouched()\"\n (change)=\"onChanged($event)\"\n />\n <div class=\"odx-switch__thumb-container\">\n <div class=\"odx-switch__track\"></div>\n <div class=\"odx-switch__thumb\">\n <odx-icon class=\"odx-switch__icon\" iconSet=\"core\" [name]=\"checked ? 'check' : 'close'\" />\n </div>\n </div>\n <div class=\"odx-switch__content\">\n <ng-content />\n @if (isRequired) {\n <span class=\"odx-switch__required\">*</span>\n }\n </div>\n</label>\n","import { Directive, forwardRef } from '@angular/core';\nimport { CheckboxRequiredValidator, NG_VALIDATORS } from '@angular/forms';\n\n/**\n * SwitchValidator extends CheckboxRequiredValidator to provide required field validation\n * for switch components used within Angular forms. It ensures that the switch is marked as required\n * and must be toggled (checked) to meet form validation criteria.\n *\n * This directive automatically attaches itself to any switch component with a 'required' attribute\n * and a form control binding (formControlName, formControl, or ngModel).\n *\n * Extends CheckboxRequiredValidator.\n *\n * @see {CheckboxRequiredValidator}\n */\n@Directive({\n standalone: true,\n selector: 'odx-switch[required][formControlName], odx-switch[required][formControl], odx-switch[required][ngModel]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SwitchValidator),\n multi: true,\n },\n ],\n})\nexport class SwitchValidator extends CheckboxRequiredValidator {}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { SwitchComponent } from './switch.component';\nimport { SwitchValidator } from './switch.validator';\n\nconst modules = [SwitchComponent, SwitchValidator];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class SwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -162,9 +162,9 @@ let TabBarComponent = class TabBarComponent {
|
|
|
162
162
|
selectedIndex: this.selectedIndex(),
|
|
163
163
|
selectedTab: this.activeItem(),
|
|
164
164
|
}));
|
|
165
|
-
merge(this.keyManager.change.pipe(tap((index) => this.selectedIndex.set(index ?? -1))), fromElementResize$(this.element.nativeElement, 600).pipe(tap(() => this.scrollableService.
|
|
165
|
+
merge(this.keyManager.change.pipe(tap((index) => this.selectedIndex.set(index ?? -1))), fromElementResize$(this.element.nativeElement, 600).pipe(tap(() => this.scrollableService.scrollActiveItemIntoHorizontalView(this.activeItem()?.element.nativeElement ?? null))), toObservable(tabState).pipe(skip(1), distinctUntilChanged((a, b) => a.selectedIndex === b.selectedIndex), filter(({ selectedTab }) => !selectedTab?.disabled), tap((state) => {
|
|
166
166
|
this.selectedTabChanged.emit(state);
|
|
167
|
-
this.scrollableService.
|
|
167
|
+
this.scrollableService.scrollActiveItemIntoHorizontalView(state.selectedTab?.element.nativeElement ?? null);
|
|
168
168
|
})))
|
|
169
169
|
.pipe(this.takeUntilDestroyed())
|
|
170
170
|
.subscribe();
|
|
@@ -207,7 +207,7 @@ let TabBarComponent = class TabBarComponent {
|
|
|
207
207
|
return;
|
|
208
208
|
if (this.scrollableService.visibleItems().includes(activeItem))
|
|
209
209
|
return;
|
|
210
|
-
this.scrollableService.
|
|
210
|
+
this.scrollableService.scrollActiveItemIntoHorizontalView(activeItem);
|
|
211
211
|
}
|
|
212
212
|
scrollTabs(direction = 1) {
|
|
213
213
|
this.scrollableService.scroll(direction);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-tab-bar.mjs","sources":["../../../../libs/angular/components/tab-bar/src/lib/tab-bar.config.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.ts","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.module.ts","../../../../libs/angular/components/tab-bar/src/odx-angular-components-tab-bar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TabBarComponent } from './tab-bar.component';\n\nexport const TAB_BAR = new InjectionToken<TabBarComponent>('tabBar');\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, ElementRef, inject, input, OnInit, output, ViewEncapsulation } from '@angular/core';\nimport { RouterLinkActive } from '@angular/router';\nimport { DisabledController } from '@odx/angular';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, untilDestroyed } from '@odx/angular/utils';\nimport { filter } from 'rxjs';\nimport { TAB_BAR } from '../../tab-bar.config';\n\n/**\n * Represents an individual tab item in a tab bar interface, providing functionalities\n * for activation, deactivation, and optional closing of the tab. This component is designed\n * to be used within a `TabBarComponent` to create a complete tabbed interface.\n *\n * It supports disabled state management through `DisabledController`, allowing the tab to be\n * disabled based on parent component states or its own `disabled` input property.\n *\n * The component integrates with Angular's `RouterLinkActive` to automatically set active\n * styles based on the current router state, enhancing SPA navigation experiences.\n */\n@CSSComponent('tab-bar-item')\n@Component({\n selector: 'odx-tab-bar-item',\n standalone: true,\n imports: [CommonModule, IconComponent],\n templateUrl: './tab-bar-item.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DisabledController.connect()],\n host: {\n '[class.is-disabled]': 'disabled',\n '[class.is-active]': 'isActive',\n '[attr.aria-selected]': 'isActive',\n '[class.is-closable]': 'closable()',\n role: 'tab',\n '(click)': 'onClick()',\n },\n})\nexport class TabBarItemComponent implements Highlightable, OnInit {\n private readonly disabledController = DisabledController.inject();\n private readonly tabBar = inject(TAB_BAR);\n private readonly routerLinkActive = inject(RouterLinkActive, { optional: true, self: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n protected isActive = false;\n\n public readonly element: ElementRef<HTMLElement> = inject(ElementRef);\n\n public get disabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n /**\n * Indicates if the tab can be closed. This controls the visibility of the close button\n * and enables the emission of the `tabClose` event when the tab is closed.\n *\n * @type {boolean}\n * @default false\n */\n public closable = input(false, { transform: booleanAttribute });\n\n /**\n * Event emitter that fires when the tab is closed. It emits the instance of the tab item component.\n *\n * @emits {TabBarItemComponent}\n */\n public tabClose = output<TabBarItemComponent>();\n\n public ngOnInit(): void {\n this.routerLinkActive?.isActiveChange.pipe(this.takeUntilDestroyed(), filter(Boolean)).subscribe(() => {\n this.onClick();\n });\n }\n\n /**\n * Sets the tab as active and applies corresponding styles. This method is part of the\n * `Highlightable` interface, allowing the tab bar to manage active states.\n */\n public setActiveStyles(): void {\n deferFn(() => (this.isActive = true));\n }\n\n /**\n * Sets the tab as inactive and removes corresponding active styles. This method is part of the\n * `Highlightable` interface.\n */\n public setInactiveStyles(): void {\n deferFn(() => (this.isActive = false));\n }\n\n protected onClick(): void {\n if (this.disabled) return;\n this.tabBar.activateItem(this);\n }\n\n protected handleClose(event: Event): void {\n event.stopPropagation();\n if (this.disabled || !this.closable()) return;\n this.tabBar.removeItem(this);\n this.tabClose.emit(this);\n }\n}\n","<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","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n model,\n output,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { ActiveIndicatorDirective } from '@odx/angular/cdk/active-indicator';\nimport { ScrollableService } from '@odx/angular/cdk/scrollable';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { fromElementResize$ } from '@odx/angular/rxjs';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { distinctUntilChanged, filter, merge, skip, tap } from 'rxjs';\nimport { TabBarItemComponent } from './components';\nimport { TabChangeEvent } from './models';\nimport { TAB_BAR } from './tab-bar.config';\n\n/**\n * `TabBarComponent` creates a dynamic and accessible tab bar interface,\n * facilitating the management and interaction with a collection of tabs.\n * It supports keyboard navigation, dynamic tab management, and responsive overflow actions.\n *\n * The component integrates with Angular's ContentChildren to dynamically manage the tabs based on their content.\n * It uses ActiveDescendantKeyManager from Angular CDK for managing focus and keyboard navigation,\n * making it accessible and user-friendly. Additionally, it handles overflow with navigational arrows,\n * allowing for a smooth user experience even with a large number of tabs.\n */\n@CSSComponent('tab-bar')\n@Component({\n selector: 'odx-tab-bar',\n standalone: true,\n imports: [CommonModule, IconComponent, ActiveIndicatorDirective],\n templateUrl: './tab-bar.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: TAB_BAR, useExisting: forwardRef(() => TabBarComponent) }, ScrollableService],\n host: {\n role: 'tabpanel',\n tabindex: '0',\n '[class.odx-tab-bar--overflow-left]': '!!prevTab()',\n '[class.odx-tab-bar--overflow-right]': '!!nextTab()',\n '(keydown)': 'onKeydown($event)',\n '(focus)': 'onFocused()',\n },\n})\nexport class TabBarComponent {\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly scrollableService = inject(ScrollableService);\n\n protected readonly nextTab = this.scrollableService.nextItem;\n protected readonly prevTab = this.scrollableService.prevItem;\n\n protected readonly tabs = contentChildren<TabBarItemComponent>(TabBarItemComponent);\n protected readonly activeItem = computed(() => this.tabs().at(this.selectedIndex()) ?? null);\n protected readonly keyManager: ActiveDescendantKeyManager<TabBarItemComponent> = new ActiveDescendantKeyManager(this.tabs, inject(Injector))\n .withWrap()\n .withHomeAndEnd()\n .withHorizontalOrientation('ltr')\n .withVerticalOrientation(false);\n\n protected readonly scrollContainerElement = viewChild.required<ElementRef<HTMLElement>>('scrollContainer');\n public readonly element = injectElement();\n\n /**\n * Index of the currently selected tab. Use this property to programmatically\n * change the active tab. It responds to changes by updating the active state of the corresponding\n * tab item and adjusting the view if necessary.\n *\n * @type {number}\n * @example\n * Programmatically select the second tab (index starts from 0):\n * ```html\n * <odx-tab-bar [selectedIndex]=\"1\"></odx-tab-bar>\n * ```\n */\n public selectedIndex = model<number>(0);\n\n /**\n * An EventEmitter that emits whenever a new tab is selected. It provides the `TabChangeEvent`\n * which contains the index of the newly selected tab and the instance of the corresponding\n * `TabBarItemComponent`. Subscribe to this output to perform actions when the active tab changes.\n *\n * @emits {TabChangeEvent}\n * @example\n * ```html\n * <odx-tab-bar (selectedTabChanged)=\"onTabChange($event)\"></odx-tab-bar>\n * ```\n *\n * ```ts\n * onTabChange(event: TabChangeEvent): void {\n * console.log(`New active tab index: ${event.selectedIndex}`);\n * }\n * ```\n */\n public selectedTabChanged = output<TabChangeEvent>();\n\n constructor() {\n const tabState = computed(() => ({\n selectedIndex: this.selectedIndex(),\n selectedTab: this.activeItem(),\n }));\n\n merge(\n this.keyManager.change.pipe(tap((index) => this.selectedIndex.set(index ?? -1))),\n fromElementResize$(this.element.nativeElement, 600).pipe(\n tap(() => this.scrollableService.scrollActiveItemIntoView(this.activeItem()?.element.nativeElement ?? null)),\n ),\n toObservable(tabState).pipe(\n skip(1),\n distinctUntilChanged((a, b) => a.selectedIndex === b.selectedIndex),\n filter(({ selectedTab }) => !selectedTab?.disabled),\n tap((state) => {\n this.selectedTabChanged.emit(state);\n this.scrollableService.scrollActiveItemIntoView(state.selectedTab?.element.nativeElement ?? null);\n }),\n ),\n )\n .pipe(this.takeUntilDestroyed())\n .subscribe();\n\n effect(\n () => {\n this.keyManager.setActiveItem(this.selectedIndex());\n },\n { allowSignalWrites: true },\n );\n\n effect(() => {\n this.scrollableService.observe(this.scrollContainerElement(), this.tabs());\n });\n }\n\n /**\n * Activates the specified tab item, making it the currently selected tab.\n * If the item is already active, no action is taken.\n *\n * @param {TabBarItemComponent | null} item - The tab item to activate.\n */\n public activateItem(item?: TabBarItemComponent | null): void {\n if (item === this.keyManager?.activeItem) return;\n const selectedIndex = item ? this.tabs().indexOf(item) : -1;\n this.selectedIndex.set(selectedIndex);\n }\n\n /**\n * Fires when the specified tab item is removed from the tab bar.\n * If the item is currently active, the previous tab is activated.\n *\n * @param {TabBarItemComponent} item - The tab item to remove.\n */\n public removeItem(item: TabBarItemComponent): void {\n if (this.keyManager?.activeItem !== item) return;\n this.keyManager?.setPreviousItemActive();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n this.keyManager?.onKeydown(event);\n }\n\n protected onFocused(): void {\n const activeItem = this.activeItem()?.element.nativeElement;\n if (!activeItem) return;\n if (this.scrollableService.visibleItems().includes(activeItem)) return;\n this.scrollableService.scrollActiveItemIntoView(activeItem);\n }\n\n protected scrollTabs(direction: 1 | -1 = 1): void {\n this.scrollableService.scroll(direction);\n }\n}\n","<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","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { TabBarItemComponent } from './components';\nimport { TabBarComponent } from './tab-bar.component';\n\nconst modules = [TabBarComponent, TabBarItemComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class TabBarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-components-tab-bar.mjs","sources":["../../../../libs/angular/components/tab-bar/src/lib/tab-bar.config.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.ts","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.module.ts","../../../../libs/angular/components/tab-bar/src/odx-angular-components-tab-bar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TabBarComponent } from './tab-bar.component';\n\nexport const TAB_BAR = new InjectionToken<TabBarComponent>('tabBar');\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, ElementRef, inject, input, OnInit, output, ViewEncapsulation } from '@angular/core';\nimport { RouterLinkActive } from '@angular/router';\nimport { DisabledController } from '@odx/angular';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, untilDestroyed } from '@odx/angular/utils';\nimport { filter } from 'rxjs';\nimport { TAB_BAR } from '../../tab-bar.config';\n\n/**\n * Represents an individual tab item in a tab bar interface, providing functionalities\n * for activation, deactivation, and optional closing of the tab. This component is designed\n * to be used within a `TabBarComponent` to create a complete tabbed interface.\n *\n * It supports disabled state management through `DisabledController`, allowing the tab to be\n * disabled based on parent component states or its own `disabled` input property.\n *\n * The component integrates with Angular's `RouterLinkActive` to automatically set active\n * styles based on the current router state, enhancing SPA navigation experiences.\n */\n@CSSComponent('tab-bar-item')\n@Component({\n selector: 'odx-tab-bar-item',\n standalone: true,\n imports: [CommonModule, IconComponent],\n templateUrl: './tab-bar-item.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DisabledController.connect()],\n host: {\n '[class.is-disabled]': 'disabled',\n '[class.is-active]': 'isActive',\n '[attr.aria-selected]': 'isActive',\n '[class.is-closable]': 'closable()',\n role: 'tab',\n '(click)': 'onClick()',\n },\n})\nexport class TabBarItemComponent implements Highlightable, OnInit {\n private readonly disabledController = DisabledController.inject();\n private readonly tabBar = inject(TAB_BAR);\n private readonly routerLinkActive = inject(RouterLinkActive, { optional: true, self: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n protected isActive = false;\n\n public readonly element: ElementRef<HTMLElement> = inject(ElementRef);\n\n public get disabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n /**\n * Indicates if the tab can be closed. This controls the visibility of the close button\n * and enables the emission of the `tabClose` event when the tab is closed.\n *\n * @type {boolean}\n * @default false\n */\n public closable = input(false, { transform: booleanAttribute });\n\n /**\n * Event emitter that fires when the tab is closed. It emits the instance of the tab item component.\n *\n * @emits {TabBarItemComponent}\n */\n public tabClose = output<TabBarItemComponent>();\n\n public ngOnInit(): void {\n this.routerLinkActive?.isActiveChange.pipe(this.takeUntilDestroyed(), filter(Boolean)).subscribe(() => {\n this.onClick();\n });\n }\n\n /**\n * Sets the tab as active and applies corresponding styles. This method is part of the\n * `Highlightable` interface, allowing the tab bar to manage active states.\n */\n public setActiveStyles(): void {\n deferFn(() => (this.isActive = true));\n }\n\n /**\n * Sets the tab as inactive and removes corresponding active styles. This method is part of the\n * `Highlightable` interface.\n */\n public setInactiveStyles(): void {\n deferFn(() => (this.isActive = false));\n }\n\n protected onClick(): void {\n if (this.disabled) return;\n this.tabBar.activateItem(this);\n }\n\n protected handleClose(event: Event): void {\n event.stopPropagation();\n if (this.disabled || !this.closable()) return;\n this.tabBar.removeItem(this);\n this.tabClose.emit(this);\n }\n}\n","<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","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n model,\n output,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { ActiveIndicatorDirective } from '@odx/angular/cdk/active-indicator';\nimport { ScrollableService } from '@odx/angular/cdk/scrollable';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { fromElementResize$ } from '@odx/angular/rxjs';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { distinctUntilChanged, filter, merge, skip, tap } from 'rxjs';\nimport { TabBarItemComponent } from './components';\nimport { TabChangeEvent } from './models';\nimport { TAB_BAR } from './tab-bar.config';\n\n/**\n * `TabBarComponent` creates a dynamic and accessible tab bar interface,\n * facilitating the management and interaction with a collection of tabs.\n * It supports keyboard navigation, dynamic tab management, and responsive overflow actions.\n *\n * The component integrates with Angular's ContentChildren to dynamically manage the tabs based on their content.\n * It uses ActiveDescendantKeyManager from Angular CDK for managing focus and keyboard navigation,\n * making it accessible and user-friendly. Additionally, it handles overflow with navigational arrows,\n * allowing for a smooth user experience even with a large number of tabs.\n */\n@CSSComponent('tab-bar')\n@Component({\n selector: 'odx-tab-bar',\n standalone: true,\n imports: [CommonModule, IconComponent, ActiveIndicatorDirective],\n templateUrl: './tab-bar.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: TAB_BAR, useExisting: forwardRef(() => TabBarComponent) }, ScrollableService],\n host: {\n role: 'tabpanel',\n tabindex: '0',\n '[class.odx-tab-bar--overflow-left]': '!!prevTab()',\n '[class.odx-tab-bar--overflow-right]': '!!nextTab()',\n '(keydown)': 'onKeydown($event)',\n '(focus)': 'onFocused()',\n },\n})\nexport class TabBarComponent {\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly scrollableService = inject(ScrollableService);\n\n protected readonly nextTab = this.scrollableService.nextItem;\n protected readonly prevTab = this.scrollableService.prevItem;\n\n protected readonly tabs = contentChildren<TabBarItemComponent>(TabBarItemComponent);\n protected readonly activeItem = computed(() => this.tabs().at(this.selectedIndex()) ?? null);\n protected readonly keyManager: ActiveDescendantKeyManager<TabBarItemComponent> = new ActiveDescendantKeyManager(this.tabs, inject(Injector))\n .withWrap()\n .withHomeAndEnd()\n .withHorizontalOrientation('ltr')\n .withVerticalOrientation(false);\n\n protected readonly scrollContainerElement = viewChild.required<ElementRef<HTMLElement>>('scrollContainer');\n public readonly element = injectElement();\n\n /**\n * Index of the currently selected tab. Use this property to programmatically\n * change the active tab. It responds to changes by updating the active state of the corresponding\n * tab item and adjusting the view if necessary.\n *\n * @type {number}\n * @example\n * Programmatically select the second tab (index starts from 0):\n * ```html\n * <odx-tab-bar [selectedIndex]=\"1\"></odx-tab-bar>\n * ```\n */\n public selectedIndex = model<number>(0);\n\n /**\n * An EventEmitter that emits whenever a new tab is selected. It provides the `TabChangeEvent`\n * which contains the index of the newly selected tab and the instance of the corresponding\n * `TabBarItemComponent`. Subscribe to this output to perform actions when the active tab changes.\n *\n * @emits {TabChangeEvent}\n * @example\n * ```html\n * <odx-tab-bar (selectedTabChanged)=\"onTabChange($event)\"></odx-tab-bar>\n * ```\n *\n * ```ts\n * onTabChange(event: TabChangeEvent): void {\n * console.log(`New active tab index: ${event.selectedIndex}`);\n * }\n * ```\n */\n public selectedTabChanged = output<TabChangeEvent>();\n\n constructor() {\n const tabState = computed(() => ({\n selectedIndex: this.selectedIndex(),\n selectedTab: this.activeItem(),\n }));\n\n merge(\n this.keyManager.change.pipe(tap((index) => this.selectedIndex.set(index ?? -1))),\n fromElementResize$(this.element.nativeElement, 600).pipe(\n tap(() => this.scrollableService.scrollActiveItemIntoHorizontalView(this.activeItem()?.element.nativeElement ?? null)),\n ),\n toObservable(tabState).pipe(\n skip(1),\n distinctUntilChanged((a, b) => a.selectedIndex === b.selectedIndex),\n filter(({ selectedTab }) => !selectedTab?.disabled),\n tap((state) => {\n this.selectedTabChanged.emit(state);\n this.scrollableService.scrollActiveItemIntoHorizontalView(state.selectedTab?.element.nativeElement ?? null);\n }),\n ),\n )\n .pipe(this.takeUntilDestroyed())\n .subscribe();\n\n effect(\n () => {\n this.keyManager.setActiveItem(this.selectedIndex());\n },\n { allowSignalWrites: true },\n );\n\n effect(() => {\n this.scrollableService.observe(this.scrollContainerElement(), this.tabs());\n });\n }\n\n /**\n * Activates the specified tab item, making it the currently selected tab.\n * If the item is already active, no action is taken.\n *\n * @param {TabBarItemComponent | null} item - The tab item to activate.\n */\n public activateItem(item?: TabBarItemComponent | null): void {\n if (item === this.keyManager?.activeItem) return;\n const selectedIndex = item ? this.tabs().indexOf(item) : -1;\n this.selectedIndex.set(selectedIndex);\n }\n\n /**\n * Fires when the specified tab item is removed from the tab bar.\n * If the item is currently active, the previous tab is activated.\n *\n * @param {TabBarItemComponent} item - The tab item to remove.\n */\n public removeItem(item: TabBarItemComponent): void {\n if (this.keyManager?.activeItem !== item) return;\n this.keyManager?.setPreviousItemActive();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n this.keyManager?.onKeydown(event);\n }\n\n protected onFocused(): void {\n const activeItem = this.activeItem()?.element.nativeElement;\n if (!activeItem) return;\n if (this.scrollableService.visibleItems().includes(activeItem)) return;\n this.scrollableService.scrollActiveItemIntoHorizontalView(activeItem);\n }\n\n protected scrollTabs(direction: 1 | -1 = 1): void {\n this.scrollableService.scroll(direction);\n }\n}\n","<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","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { TabBarItemComponent } from './components';\nimport { TabBarComponent } from './tab-bar.component';\n\nconst modules = [TabBarComponent, TabBarItemComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class TabBarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/odx-angular.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, ChangeDetectorRef, Directive, InjectionToken, Optional, Host, forwardRef, booleanAttribute, Input, ElementRef, Renderer2, EventEmitter, Output, HostListener, signal, NgModule, reflectComponentType, Injectable } from '@angular/core';
|
|
3
3
|
import { pluckFromArray, isPresent, injectElement, hasChanged, deferFn, booleanToOptionalAttributeString, reactiveAttributeBinding, getLanguageCode } from '@odx/angular/utils';
|
|
4
|
-
import {
|
|
4
|
+
import { EMPTY, merge, tap, Subject, shareReplay, map, distinctUntilChanged, switchMap, NEVER, debounceTime, Observable, startWith, of, combineLatest, filter } from 'rxjs';
|
|
5
5
|
import { CommonModule, DOCUMENT } from '@angular/common';
|
|
6
6
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
7
7
|
import { Title } from '@angular/platform-browser';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@odx/angular",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.25.1",
|
|
4
4
|
"author": "Drägerwerk AG & Co.KGaA",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -328,18 +328,18 @@
|
|
|
328
328
|
"esm": "./esm2022/components/icon/odx-angular-components-icon.mjs",
|
|
329
329
|
"default": "./fesm2022/odx-angular-components-icon.mjs"
|
|
330
330
|
},
|
|
331
|
-
"./components/inline-message": {
|
|
332
|
-
"types": "./components/inline-message/index.d.ts",
|
|
333
|
-
"esm2022": "./esm2022/components/inline-message/odx-angular-components-inline-message.mjs",
|
|
334
|
-
"esm": "./esm2022/components/inline-message/odx-angular-components-inline-message.mjs",
|
|
335
|
-
"default": "./fesm2022/odx-angular-components-inline-message.mjs"
|
|
336
|
-
},
|
|
337
331
|
"./components/link": {
|
|
338
332
|
"types": "./components/link/index.d.ts",
|
|
339
333
|
"esm2022": "./esm2022/components/link/odx-angular-components-link.mjs",
|
|
340
334
|
"esm": "./esm2022/components/link/odx-angular-components-link.mjs",
|
|
341
335
|
"default": "./fesm2022/odx-angular-components-link.mjs"
|
|
342
336
|
},
|
|
337
|
+
"./components/inline-message": {
|
|
338
|
+
"types": "./components/inline-message/index.d.ts",
|
|
339
|
+
"esm2022": "./esm2022/components/inline-message/odx-angular-components-inline-message.mjs",
|
|
340
|
+
"esm": "./esm2022/components/inline-message/odx-angular-components-inline-message.mjs",
|
|
341
|
+
"default": "./fesm2022/odx-angular-components-inline-message.mjs"
|
|
342
|
+
},
|
|
343
343
|
"./components/list": {
|
|
344
344
|
"types": "./components/list/index.d.ts",
|
|
345
345
|
"esm2022": "./esm2022/components/list/odx-angular-components-list.mjs",
|