@scion/components 18.0.0 → 18.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dimension/bounding-client-rect.signal.d.ts +23 -0
- package/dimension/dimension.d.ts +10 -0
- package/dimension/dimension.directive.d.ts +11 -29
- package/dimension/dimension.signal.d.ts +19 -0
- package/dimension/package.json +3 -0
- package/dimension/public_api.d.ts +4 -1
- package/esm2022/dimension/bounding-client-rect.signal.mjs +53 -0
- package/esm2022/dimension/dimension.directive.mjs +31 -53
- package/esm2022/dimension/dimension.mjs +11 -0
- package/esm2022/dimension/dimension.signal.mjs +58 -0
- package/esm2022/dimension/public_api.mjs +3 -1
- package/esm2022/sashbox/sashbox.component.mjs +39 -43
- package/esm2022/throbber/throbber.component.mjs +3 -7
- package/esm2022/viewport/scrollbar/scrollbar.component.mjs +4 -4
- package/esm2022/viewport/viewport.component.mjs +4 -5
- package/fesm2022/scion-components-dimension.mjs +134 -53
- package/fesm2022/scion-components-dimension.mjs.map +1 -1
- package/fesm2022/scion-components-sashbox.mjs +38 -42
- package/fesm2022/scion-components-sashbox.mjs.map +1 -1
- package/fesm2022/scion-components-throbber.mjs +2 -6
- package/fesm2022/scion-components-throbber.mjs.map +1 -1
- package/fesm2022/scion-components-viewport.mjs +6 -7
- package/fesm2022/scion-components-viewport.mjs.map +1 -1
- package/package.json +2 -2
- package/sashbox/package.json +3 -0
- package/sashbox/sashbox.component.d.ts +4 -3
- package/splitter/package.json +3 -0
- package/throbber/package.json +3 -0
- package/viewport/package.json +3 -0
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ The SCION Components is a collection of Angular components and directives primar
|
|
|
9
9
|
Provides a viewport component with scrollbars that sit on top of the viewport client.
|
|
10
10
|
|
|
11
11
|
- [**Dimension**][link-tool-dimension]\
|
|
12
|
-
Provides a
|
|
12
|
+
Provides a set of tools for observing the size and position of an element.
|
|
13
13
|
|
|
14
14
|
- [**Sashbox**][link-tool-sashbox]\
|
|
15
15
|
Provides a sashbox component for splitting content into multiple parts, which the user can resize by moving the splitter between the parts.
|
|
@@ -37,4 +37,4 @@ License: EPL-2.0
|
|
|
37
37
|
[link-tool-dimension]: https://github.com/SchweizerischeBundesbahnen/scion-toolkit/blob/master/docs/site/tools/dimension.md
|
|
38
38
|
[link-tool-sashbox]: https://github.com/SchweizerischeBundesbahnen/scion-toolkit/blob/master/docs/site/tools/sashbox.md
|
|
39
39
|
[link-tool-splitter]: https://github.com/SchweizerischeBundesbahnen/scion-toolkit/blob/master/docs/site/tools/splitter.md
|
|
40
|
-
[link-tool-throbber]: https://github.com/SchweizerischeBundesbahnen/scion-toolkit/blob/master/docs/site/tools/throbber.md
|
|
40
|
+
[link-tool-throbber]: https://github.com/SchweizerischeBundesbahnen/scion-toolkit/blob/master/docs/site/tools/throbber.md
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ElementRef, Injector, Signal } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a signal observing the bounding box of an element.
|
|
4
|
+
*
|
|
5
|
+
* The bounding box includes the element's position relative to the top-left of the viewport and its size.
|
|
6
|
+
* Refer to https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect for more details.
|
|
7
|
+
*
|
|
8
|
+
* The element can be passed as a signal, enabling observation of view children in the component constructor.
|
|
9
|
+
*
|
|
10
|
+
* There is no native browser API to observe the position of an element. The signal uses {@link IntersectionObserver} and
|
|
11
|
+
* {@link ResizeObserver} to detect position changes. For tracking only size changes, use the {@link dimension} signal instead.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* - Must be called within an injection context or an injector provided. Destroying the injector will unsubscribe the signal.
|
|
15
|
+
* - Must not be called within a reactive context to avoid repeated subscriptions.
|
|
16
|
+
* - The element and the document root (`<html>`) must be positioned `relative` or `absolute`. If not, a warning is logged, and positioning changed to `relative`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function boundingClientRect(elementLike: HTMLElement | ElementRef<HTMLElement> | Signal<HTMLElement | ElementRef<HTMLElement>>, options?: {
|
|
19
|
+
injector?: Injector;
|
|
20
|
+
}): Signal<DOMRect>;
|
|
21
|
+
export declare function boundingClientRect(elementLike: HTMLElement | ElementRef<HTMLElement> | Signal<HTMLElement | ElementRef<HTMLElement> | undefined>, options?: {
|
|
22
|
+
injector?: Injector;
|
|
23
|
+
}): Signal<DOMRect | undefined>;
|
|
@@ -1,43 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Dimension } from '@scion/toolkit/observable';
|
|
1
|
+
import { SciDimension } from './dimension';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
3
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* See {@link fromDimension$} Observable for more information.
|
|
4
|
+
* Observes the size of the host element.
|
|
8
5
|
*
|
|
9
6
|
* ---
|
|
10
7
|
* Usage:
|
|
11
8
|
*
|
|
9
|
+
* ```html
|
|
12
10
|
* <div sciDimension (sciDimensionChange)="onDimensionChange($event)"></div>
|
|
11
|
+
* ```
|
|
13
12
|
*/
|
|
14
|
-
export declare class SciDimensionDirective
|
|
15
|
-
private _ngZone;
|
|
16
|
-
private readonly _host;
|
|
17
|
-
private _destroy$;
|
|
18
|
-
/**
|
|
19
|
-
* Upon subscription, it emits the host element's dimension, and then continuously emits when the dimension of the host element changes.
|
|
20
|
-
*/
|
|
21
|
-
dimensionChange: EventEmitter<Dimension>;
|
|
13
|
+
export declare class SciDimensionDirective {
|
|
22
14
|
/**
|
|
23
|
-
* Controls if to
|
|
24
|
-
* If emitted outside of the Angular zone no change detection cycle is triggered.
|
|
25
|
-
*
|
|
26
|
-
* By default, if not specified, emits inside the Angular zone.
|
|
15
|
+
* Controls if to output outside the Angular zone. Defaults to `false`.
|
|
27
16
|
*/
|
|
28
|
-
emitOutsideAngular: boolean
|
|
29
|
-
constructor(host: ElementRef<HTMLElement>, _ngZone: NgZone);
|
|
30
|
-
ngOnInit(): void;
|
|
31
|
-
private installDimensionListener;
|
|
17
|
+
emitOutsideAngular: import("@angular/core").InputSignal<boolean>;
|
|
32
18
|
/**
|
|
33
|
-
*
|
|
19
|
+
* Outputs the size of the element.
|
|
34
20
|
*/
|
|
35
|
-
|
|
36
|
-
|
|
21
|
+
dimensionChange: import("@angular/core").OutputEmitterRef<SciDimension>;
|
|
22
|
+
constructor();
|
|
37
23
|
static ɵfac: i0.ɵɵFactoryDeclaration<SciDimensionDirective, never>;
|
|
38
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<SciDimensionDirective, "[sciDimension]",
|
|
24
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<SciDimensionDirective, "[sciDimension]", never, { "emitOutsideAngular": { "alias": "emitOutsideAngular"; "required": false; "isSignal": true; }; }, { "dimensionChange": "sciDimensionChange"; }, never, never, true, never>;
|
|
39
25
|
}
|
|
40
|
-
/**
|
|
41
|
-
* Represents the dimension of an element.
|
|
42
|
-
*/
|
|
43
|
-
export type SciDimension = Dimension;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ElementRef, Injector, Signal } from '@angular/core';
|
|
2
|
+
import { SciDimension } from './dimension';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a signal observing the size of an element.
|
|
5
|
+
*
|
|
6
|
+
* The element can be passed as a signal, enabling observation of view children in the component constructor.
|
|
7
|
+
*
|
|
8
|
+
* The signal subscribes to the native {@link ResizeObserver} to monitor element size changes. Destroying the injection context will unsubscribe the observer.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* - Must be called within an injection context or an injector provided. Destroying the injector will unsubscribe the signal.
|
|
12
|
+
* - Must not be called within a reactive context to avoid repeated subscriptions.
|
|
13
|
+
*/
|
|
14
|
+
export declare function dimension(elementLike: HTMLElement | ElementRef<HTMLElement> | Signal<HTMLElement | ElementRef<HTMLElement>>, options?: {
|
|
15
|
+
injector?: Injector;
|
|
16
|
+
}): Signal<SciDimension>;
|
|
17
|
+
export declare function dimension(elementLike: HTMLElement | ElementRef<HTMLElement> | Signal<HTMLElement | ElementRef<HTMLElement> | undefined>, options?: {
|
|
18
|
+
injector?: Injector;
|
|
19
|
+
}): Signal<SciDimension | undefined>;
|
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
export { SciDimensionModule } from './dimension.module';
|
|
2
|
-
export { SciDimensionDirective
|
|
2
|
+
export { SciDimensionDirective } from './dimension.directive';
|
|
3
|
+
export { dimension } from './dimension.signal';
|
|
4
|
+
export { boundingClientRect } from './bounding-client-rect.signal';
|
|
5
|
+
export { SciDimension } from './dimension';
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2018-2024 Swiss Federal Railways
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made
|
|
5
|
+
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
+
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
+
*/
|
|
10
|
+
import { assertInInjectionContext, assertNotInReactiveContext, computed, effect, inject, Injector, isSignal, NgZone, signal, untracked } from '@angular/core';
|
|
11
|
+
import { coerceElement } from '@angular/cdk/coercion';
|
|
12
|
+
import { fromBoundingClientRect$ } from '@scion/toolkit/observable';
|
|
13
|
+
import { subscribeInside } from '@scion/toolkit/operators';
|
|
14
|
+
export function boundingClientRect(elementLike, options) {
|
|
15
|
+
assertNotInReactiveContext(boundingClientRect, 'Invoking `boundingClientRect` causes new subscriptions every time. Move `boundingClientRect` outside of the reactive context and read the signal value where needed.');
|
|
16
|
+
if (!options?.injector) {
|
|
17
|
+
assertInInjectionContext(boundingClientRect);
|
|
18
|
+
}
|
|
19
|
+
const injector = options?.injector ?? inject(Injector);
|
|
20
|
+
const zone = injector.get(NgZone);
|
|
21
|
+
const element = computed(() => coerceElement(isSignal(elementLike) ? elementLike() : elementLike));
|
|
22
|
+
const onBoundingBoxChange = signal(undefined, { equal: () => false });
|
|
23
|
+
// Subscribe to element bounding box changes.
|
|
24
|
+
effect(onCleanup => {
|
|
25
|
+
const el = element();
|
|
26
|
+
if (!el) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
untracked(() => {
|
|
30
|
+
const subscription = fromBoundingClientRect$(el)
|
|
31
|
+
.pipe(subscribeInside(fn => zone.runOutsideAngular(fn)))
|
|
32
|
+
.subscribe(() => {
|
|
33
|
+
NgZone.assertNotInAngularZone();
|
|
34
|
+
onBoundingBoxChange.set();
|
|
35
|
+
});
|
|
36
|
+
onCleanup(() => subscription.unsubscribe());
|
|
37
|
+
});
|
|
38
|
+
}, { injector });
|
|
39
|
+
// Create signal that recomputes each time the bounding box changes.
|
|
40
|
+
return computed(() => {
|
|
41
|
+
const el = element();
|
|
42
|
+
if (!el) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
// Track bounding box.
|
|
46
|
+
onBoundingBoxChange();
|
|
47
|
+
return el.getBoundingClientRect();
|
|
48
|
+
}, { equal: isEqualDomRect });
|
|
49
|
+
}
|
|
50
|
+
function isEqualDomRect(a, b) {
|
|
51
|
+
return a?.top === b?.top && a?.right === b?.right && a?.bottom === b?.bottom && a?.left === b?.left;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm91bmRpbmctY2xpZW50LXJlY3Quc2lnbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy9kaW1lbnNpb24vc3JjL2JvdW5kaW5nLWNsaWVudC1yZWN0LnNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hMLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFvQnpELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUE4RyxFQUFFLE9BQStCO0lBQ2hMLDBCQUEwQixDQUFDLGtCQUFrQixFQUFFLHNLQUFzSyxDQUFDLENBQUM7SUFDdk4sSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUN2Qix3QkFBd0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNuRyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBTyxTQUFTLEVBQUUsRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUUxRSw2Q0FBNkM7SUFDN0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ2pCLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLE9BQU87UUFDVCxDQUFDO1FBRUQsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztpQkFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN2RCxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNoQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztZQUNMLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsRUFBRSxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7SUFFZixvRUFBb0U7SUFDcEUsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ25CLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3BDLENBQUMsRUFBRSxFQUFDLEtBQUssRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxDQUFzQixFQUFFLENBQXNCO0lBQ3BFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3RHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjQgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7YXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBhc3NlcnROb3RJblJlYWN0aXZlQ29udGV4dCwgY29tcHV0ZWQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbmplY3RvciwgaXNTaWduYWwsIE5nWm9uZSwgc2lnbmFsLCBTaWduYWwsIHVudHJhY2tlZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2NvZXJjZUVsZW1lbnR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge2Zyb21Cb3VuZGluZ0NsaWVudFJlY3QkfSBmcm9tICdAc2Npb24vdG9vbGtpdC9vYnNlcnZhYmxlJztcbmltcG9ydCB7c3Vic2NyaWJlSW5zaWRlfSBmcm9tICdAc2Npb24vdG9vbGtpdC9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzaWduYWwgb2JzZXJ2aW5nIHRoZSBib3VuZGluZyBib3ggb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBUaGUgYm91bmRpbmcgYm94IGluY2x1ZGVzIHRoZSBlbGVtZW50J3MgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSB2aWV3cG9ydCBhbmQgaXRzIHNpemUuXG4gKiBSZWZlciB0byBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9nZXRCb3VuZGluZ0NsaWVudFJlY3QgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBUaGUgZWxlbWVudCBjYW4gYmUgcGFzc2VkIGFzIGEgc2lnbmFsLCBlbmFibGluZyBvYnNlcnZhdGlvbiBvZiB2aWV3IGNoaWxkcmVuIGluIHRoZSBjb21wb25lbnQgY29uc3RydWN0b3IuXG4gKlxuICogVGhlcmUgaXMgbm8gbmF0aXZlIGJyb3dzZXIgQVBJIHRvIG9ic2VydmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQuIFRoZSBzaWduYWwgdXNlcyB7QGxpbmsgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJ9IGFuZFxuICoge0BsaW5rIFJlc2l6ZU9ic2VydmVyfSB0byBkZXRlY3QgcG9zaXRpb24gY2hhbmdlcy4gRm9yIHRyYWNraW5nIG9ubHkgc2l6ZSBjaGFuZ2VzLCB1c2UgdGhlIHtAbGluayBkaW1lbnNpb259IHNpZ25hbCBpbnN0ZWFkLlxuICpcbiAqIFVzYWdlOlxuICogLSBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQgb3IgYW4gaW5qZWN0b3IgcHJvdmlkZWQuIERlc3Ryb3lpbmcgdGhlIGluamVjdG9yIHdpbGwgdW5zdWJzY3JpYmUgdGhlIHNpZ25hbC5cbiAqIC0gTXVzdCBub3QgYmUgY2FsbGVkIHdpdGhpbiBhIHJlYWN0aXZlIGNvbnRleHQgdG8gYXZvaWQgcmVwZWF0ZWQgc3Vic2NyaXB0aW9ucy5cbiAqIC0gVGhlIGVsZW1lbnQgYW5kIHRoZSBkb2N1bWVudCByb290IChgPGh0bWw+YCkgbXVzdCBiZSBwb3NpdGlvbmVkIGByZWxhdGl2ZWAgb3IgYGFic29sdXRlYC4gSWYgbm90LCBhIHdhcm5pbmcgaXMgbG9nZ2VkLCBhbmQgcG9zaXRpb25pbmcgY2hhbmdlZCB0byBgcmVsYXRpdmVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRMaWtlOiBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgU2lnbmFsPEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD4+LCBvcHRpb25zPzoge2luamVjdG9yPzogSW5qZWN0b3J9KTogU2lnbmFsPERPTVJlY3Q+O1xuZXhwb3J0IGZ1bmN0aW9uIGJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50TGlrZTogSFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IFNpZ25hbDxIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkPiwgb3B0aW9ucz86IHtpbmplY3Rvcj86IEluamVjdG9yfSk6IFNpZ25hbDxET01SZWN0IHwgdW5kZWZpbmVkPjtcbmV4cG9ydCBmdW5jdGlvbiBib3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudExpa2U6IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBTaWduYWw8SFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiB7aW5qZWN0b3I/OiBJbmplY3Rvcn0pOiBTaWduYWw8RE9NUmVjdCB8IHVuZGVmaW5lZD4ge1xuICBhc3NlcnROb3RJblJlYWN0aXZlQ29udGV4dChib3VuZGluZ0NsaWVudFJlY3QsICdJbnZva2luZyBgYm91bmRpbmdDbGllbnRSZWN0YCBjYXVzZXMgbmV3IHN1YnNjcmlwdGlvbnMgZXZlcnkgdGltZS4gTW92ZSBgYm91bmRpbmdDbGllbnRSZWN0YCBvdXRzaWRlIG9mIHRoZSByZWFjdGl2ZSBjb250ZXh0IGFuZCByZWFkIHRoZSBzaWduYWwgdmFsdWUgd2hlcmUgbmVlZGVkLicpO1xuICBpZiAoIW9wdGlvbnM/LmluamVjdG9yKSB7XG4gICAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGJvdW5kaW5nQ2xpZW50UmVjdCk7XG4gIH1cblxuICBjb25zdCBpbmplY3RvciA9IG9wdGlvbnM/LmluamVjdG9yID8/IGluamVjdChJbmplY3Rvcik7XG4gIGNvbnN0IHpvbmUgPSBpbmplY3Rvci5nZXQoTmdab25lKTtcbiAgY29uc3QgZWxlbWVudCA9IGNvbXB1dGVkKCgpID0+IGNvZXJjZUVsZW1lbnQoaXNTaWduYWwoZWxlbWVudExpa2UpID8gZWxlbWVudExpa2UoKSA6IGVsZW1lbnRMaWtlKSk7XG4gIGNvbnN0IG9uQm91bmRpbmdCb3hDaGFuZ2UgPSBzaWduYWw8dm9pZD4odW5kZWZpbmVkLCB7ZXF1YWw6ICgpID0+IGZhbHNlfSk7XG5cbiAgLy8gU3Vic2NyaWJlIHRvIGVsZW1lbnQgYm91bmRpbmcgYm94IGNoYW5nZXMuXG4gIGVmZmVjdChvbkNsZWFudXAgPT4ge1xuICAgIGNvbnN0IGVsID0gZWxlbWVudCgpO1xuICAgIGlmICghZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZnJvbUJvdW5kaW5nQ2xpZW50UmVjdCQoZWwpXG4gICAgICAgIC5waXBlKHN1YnNjcmliZUluc2lkZShmbiA9PiB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZuKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIE5nWm9uZS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCk7XG4gICAgICAgICAgb25Cb3VuZGluZ0JveENoYW5nZS5zZXQoKTtcbiAgICAgICAgfSk7XG4gICAgICBvbkNsZWFudXAoKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgIH0pO1xuICB9LCB7aW5qZWN0b3J9KTtcblxuICAvLyBDcmVhdGUgc2lnbmFsIHRoYXQgcmVjb21wdXRlcyBlYWNoIHRpbWUgdGhlIGJvdW5kaW5nIGJveCBjaGFuZ2VzLlxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gZWxlbWVudCgpO1xuICAgIGlmICghZWwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gVHJhY2sgYm91bmRpbmcgYm94LlxuICAgIG9uQm91bmRpbmdCb3hDaGFuZ2UoKTtcblxuICAgIHJldHVybiBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfSwge2VxdWFsOiBpc0VxdWFsRG9tUmVjdH0pO1xufVxuXG5mdW5jdGlvbiBpc0VxdWFsRG9tUmVjdChhOiBET01SZWN0IHwgdW5kZWZpbmVkLCBiOiBET01SZWN0IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBhPy50b3AgPT09IGI/LnRvcCAmJiBhPy5yaWdodCA9PT0gYj8ucmlnaHQgJiYgYT8uYm90dG9tID09PSBiPy5ib3R0b20gJiYgYT8ubGVmdCA9PT0gYj8ubGVmdDtcbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2018-
|
|
2
|
+
* Copyright (c) 2018-2024 Swiss Federal Railways
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made
|
|
5
5
|
* available under the terms of the Eclipse Public License 2.0
|
|
@@ -7,78 +7,56 @@
|
|
|
7
7
|
*
|
|
8
8
|
* SPDX-License-Identifier: EPL-2.0
|
|
9
9
|
*/
|
|
10
|
-
import { Directive,
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
10
|
+
import { Directive, ElementRef, inject, input, NgZone, output } from '@angular/core';
|
|
11
|
+
import { fromResize$ } from '@scion/toolkit/observable';
|
|
12
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
13
|
+
import { observeInside, subscribeInside } from '@scion/toolkit/operators';
|
|
14
|
+
import { animationFrameScheduler, observeOn, subscribeOn } from 'rxjs';
|
|
14
15
|
import * as i0 from "@angular/core";
|
|
15
16
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* See {@link fromDimension$} Observable for more information.
|
|
17
|
+
* Observes the size of the host element.
|
|
19
18
|
*
|
|
20
19
|
* ---
|
|
21
20
|
* Usage:
|
|
22
21
|
*
|
|
22
|
+
* ```html
|
|
23
23
|
* <div sciDimension (sciDimensionChange)="onDimensionChange($event)"></div>
|
|
24
|
+
* ```
|
|
24
25
|
*/
|
|
25
26
|
export class SciDimensionDirective {
|
|
26
|
-
constructor(
|
|
27
|
-
this._ngZone = _ngZone;
|
|
28
|
-
this._destroy$ = new Subject();
|
|
27
|
+
constructor() {
|
|
29
28
|
/**
|
|
30
|
-
*
|
|
29
|
+
* Controls if to output outside the Angular zone. Defaults to `false`.
|
|
31
30
|
*/
|
|
32
|
-
this.
|
|
31
|
+
this.emitOutsideAngular = input(false);
|
|
33
32
|
/**
|
|
34
|
-
*
|
|
35
|
-
* If emitted outside of the Angular zone no change detection cycle is triggered.
|
|
36
|
-
*
|
|
37
|
-
* By default, if not specified, emits inside the Angular zone.
|
|
33
|
+
* Outputs the size of the element.
|
|
38
34
|
*/
|
|
39
|
-
this.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
.
|
|
49
|
-
.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
else {
|
|
54
|
-
this._ngZone.run(() => this.dimensionChange.emit(dimension));
|
|
55
|
-
}
|
|
35
|
+
this.dimensionChange = output({ alias: 'sciDimensionChange' });
|
|
36
|
+
const host = inject((ElementRef)).nativeElement;
|
|
37
|
+
const zone = inject(NgZone);
|
|
38
|
+
fromResize$(host)
|
|
39
|
+
.pipe(subscribeInside(continueFn => zone.runOutsideAngular(continueFn)), observeInside(continueFn => this.emitOutsideAngular() ? continueFn() : zone.run(continueFn)), subscribeOn(animationFrameScheduler), // do not block resize callback (ResizeObserver loop completed with undelivered notifications)
|
|
40
|
+
observeOn(animationFrameScheduler), // do not block resize callback (ResizeObserver loop completed with undelivered notifications)
|
|
41
|
+
takeUntilDestroyed())
|
|
42
|
+
.subscribe(() => {
|
|
43
|
+
this.dimensionChange.emit({
|
|
44
|
+
clientWidth: host.clientWidth,
|
|
45
|
+
offsetWidth: host.offsetWidth,
|
|
46
|
+
clientHeight: host.clientHeight,
|
|
47
|
+
offsetHeight: host.offsetHeight,
|
|
48
|
+
element: host,
|
|
56
49
|
});
|
|
57
50
|
});
|
|
58
51
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
*/
|
|
62
|
-
get dimension() {
|
|
63
|
-
return captureElementDimension(this._host);
|
|
64
|
-
}
|
|
65
|
-
ngOnDestroy() {
|
|
66
|
-
this._destroy$.next();
|
|
67
|
-
}
|
|
68
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: SciDimensionDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
69
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.1", type: SciDimensionDirective, isStandalone: true, selector: "[sciDimension]", inputs: { emitOutsideAngular: "emitOutsideAngular" }, outputs: { dimensionChange: "sciDimensionChange" }, exportAs: ["sciDimension"], ngImport: i0 }); }
|
|
52
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: SciDimensionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
53
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.1", type: SciDimensionDirective, isStandalone: true, selector: "[sciDimension]", inputs: { emitOutsideAngular: { classPropertyName: "emitOutsideAngular", publicName: "emitOutsideAngular", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dimensionChange: "sciDimensionChange" }, ngImport: i0 }); }
|
|
70
54
|
}
|
|
71
55
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: SciDimensionDirective, decorators: [{
|
|
72
56
|
type: Directive,
|
|
73
57
|
args: [{
|
|
74
58
|
selector: '[sciDimension]',
|
|
75
|
-
exportAs: 'sciDimension',
|
|
76
59
|
standalone: true,
|
|
77
60
|
}]
|
|
78
|
-
}], ctorParameters: () => [
|
|
79
|
-
|
|
80
|
-
args: ['sciDimensionChange']
|
|
81
|
-
}], emitOutsideAngular: [{
|
|
82
|
-
type: Input
|
|
83
|
-
}] } });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL2NvbXBvbmVudHMvZGltZW5zaW9uL3NyYy9kaW1lbnNpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUE2QixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLHVCQUF1QixFQUFhLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDOztBQUU3Rjs7Ozs7Ozs7O0dBU0c7QUFNSCxNQUFNLE9BQU8scUJBQXFCO0lBb0JoQyxZQUFZLElBQTZCLEVBQVUsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFqQjFELGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRXhDOztXQUVHO1FBRUksb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUUxRDs7Ozs7V0FLRztRQUVJLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUdoQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDbEMsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ2xDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDL0IsU0FBUyxDQUFDLENBQUMsU0FBdUIsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztxQkFDSSxDQUFDO29CQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9ELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQzs4R0FwRFUscUJBQXFCO2tHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBTGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjtvR0FVUSxlQUFlO3NCQURyQixNQUFNO3VCQUFDLG9CQUFvQjtnQkFVckIsa0JBQWtCO3NCQUR4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Y2FwdHVyZUVsZW1lbnREaW1lbnNpb24sIERpbWVuc2lvbiwgZnJvbURpbWVuc2lvbiR9IGZyb20gJ0BzY2lvbi90b29sa2l0L29ic2VydmFibGUnO1xuXG4vKipcbiAqIEFsbG93cyBvYnNlcnZpbmcgY2hhbmdlcyB0byBob3N0IGVsZW1lbnQncyBzaXplLlxuICpcbiAqIFNlZSB7QGxpbmsgZnJvbURpbWVuc2lvbiR9IE9ic2VydmFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogLS0tXG4gKiBVc2FnZTpcbiAqXG4gKiA8ZGl2IHNjaURpbWVuc2lvbiAoc2NpRGltZW5zaW9uQ2hhbmdlKT1cIm9uRGltZW5zaW9uQ2hhbmdlKCRldmVudClcIj48L2Rpdj5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NjaURpbWVuc2lvbl0nLFxuICBleHBvcnRBczogJ3NjaURpbWVuc2lvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNjaURpbWVuc2lvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9ob3N0OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBVcG9uIHN1YnNjcmlwdGlvbiwgaXQgZW1pdHMgdGhlIGhvc3QgZWxlbWVudCdzIGRpbWVuc2lvbiwgYW5kIHRoZW4gY29udGludW91c2x5IGVtaXRzIHdoZW4gdGhlIGRpbWVuc2lvbiBvZiB0aGUgaG9zdCBlbGVtZW50IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KCdzY2lEaW1lbnNpb25DaGFuZ2UnKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lXG4gIHB1YmxpYyBkaW1lbnNpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNjaURpbWVuc2lvbj4oKTtcblxuICAvKipcbiAgICogQ29udHJvbHMgaWYgdG8gZW1pdCBhIGRpbWVuc2lvbiBjaGFuZ2UgaW5zaWRlIG9yIG91dHNpZGUgb2YgdGhlIEFuZ3VsYXIgem9uZS5cbiAgICogSWYgZW1pdHRlZCBvdXRzaWRlIG9mIHRoZSBBbmd1bGFyIHpvbmUgbm8gY2hhbmdlIGRldGVjdGlvbiBjeWNsZSBpcyB0cmlnZ2VyZWQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGlmIG5vdCBzcGVjaWZpZWQsIGVtaXRzIGluc2lkZSB0aGUgQW5ndWxhciB6b25lLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGVtaXRPdXRzaWRlQW5ndWxhciA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGhvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMuX2hvc3QgPSBob3N0Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbnN0YWxsRGltZW5zaW9uTGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zdGFsbERpbWVuc2lvbkxpc3RlbmVyKCk6IHZvaWQge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRGltZW5zaW9uJCh0aGlzLl9ob3N0KVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKChkaW1lbnNpb246IFNjaURpbWVuc2lvbikgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmVtaXRPdXRzaWRlQW5ndWxhcikge1xuICAgICAgICAgICAgdGhpcy5kaW1lbnNpb25DaGFuZ2UuZW1pdChkaW1lbnNpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5kaW1lbnNpb25DaGFuZ2UuZW1pdChkaW1lbnNpb24pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZGltZW5zaW9uIG9mIGl0cyBob3N0IGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRpbWVuc2lvbigpOiBTY2lEaW1lbnNpb24ge1xuICAgIHJldHVybiBjYXB0dXJlRWxlbWVudERpbWVuc2lvbih0aGlzLl9ob3N0KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBkaW1lbnNpb24gb2YgYW4gZWxlbWVudC5cbiAqL1xuZXhwb3J0IHR5cGUgU2NpRGltZW5zaW9uID0gRGltZW5zaW9uO1xuIl19
|
|
61
|
+
}], ctorParameters: () => [] });
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL2NvbXBvbmVudHMvZGltZW5zaW9uL3NyYy9kaW1lbnNpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFFLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hFLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUdyRTs7Ozs7Ozs7O0dBU0c7QUFLSCxNQUFNLE9BQU8scUJBQXFCO0lBWWhDO1FBVkE7O1dBRUc7UUFDSSx1QkFBa0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekM7O1dBRUc7UUFDSSxvQkFBZSxHQUFHLE1BQU0sQ0FBZSxFQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBQyxDQUFDLENBQUM7UUFHM0UsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUEsVUFBdUIsQ0FBQSxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQzNELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU1QixXQUFXLENBQUMsSUFBSSxDQUFDO2FBQ2QsSUFBSSxDQUNILGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUNqRSxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFDNUYsV0FBVyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsOEZBQThGO1FBQ3BJLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLDhGQUE4RjtRQUNsSSxrQkFBa0IsRUFBRSxDQUNyQjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztnQkFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUMvQixPQUFPLEVBQUUsSUFBSTthQUNkLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0FqQ1UscUJBQXFCO2tHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDI0IFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE5nWm9uZSwgb3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ZnJvbVJlc2l6ZSR9IGZyb20gJ0BzY2lvbi90b29sa2l0L29ic2VydmFibGUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7b2JzZXJ2ZUluc2lkZSwgc3Vic2NyaWJlSW5zaWRlfSBmcm9tICdAc2Npb24vdG9vbGtpdC9vcGVyYXRvcnMnO1xuaW1wb3J0IHthbmltYXRpb25GcmFtZVNjaGVkdWxlciwgb2JzZXJ2ZU9uLCBzdWJzY3JpYmVPbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1NjaURpbWVuc2lvbn0gZnJvbSAnLi9kaW1lbnNpb24nO1xuXG4vKipcbiAqIE9ic2VydmVzIHRoZSBzaXplIG9mIHRoZSBob3N0IGVsZW1lbnQuXG4gKlxuICogLS0tXG4gKiBVc2FnZTpcbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2IHNjaURpbWVuc2lvbiAoc2NpRGltZW5zaW9uQ2hhbmdlKT1cIm9uRGltZW5zaW9uQ2hhbmdlKCRldmVudClcIj48L2Rpdj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2NpRGltZW5zaW9uXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNjaURpbWVuc2lvbkRpcmVjdGl2ZSB7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIGlmIHRvIG91dHB1dCBvdXRzaWRlIHRoZSBBbmd1bGFyIHpvbmUuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqL1xuICBwdWJsaWMgZW1pdE91dHNpZGVBbmd1bGFyID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBPdXRwdXRzIHRoZSBzaXplIG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIGRpbWVuc2lvbkNoYW5nZSA9IG91dHB1dDxTY2lEaW1lbnNpb24+KHthbGlhczogJ3NjaURpbWVuc2lvbkNoYW5nZSd9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBob3N0ID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHpvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICAgIGZyb21SZXNpemUkKGhvc3QpXG4gICAgICAucGlwZShcbiAgICAgICAgc3Vic2NyaWJlSW5zaWRlKGNvbnRpbnVlRm4gPT4gem9uZS5ydW5PdXRzaWRlQW5ndWxhcihjb250aW51ZUZuKSksXG4gICAgICAgIG9ic2VydmVJbnNpZGUoY29udGludWVGbiA9PiB0aGlzLmVtaXRPdXRzaWRlQW5ndWxhcigpID8gY29udGludWVGbigpIDogem9uZS5ydW4oY29udGludWVGbikpLFxuICAgICAgICBzdWJzY3JpYmVPbihhbmltYXRpb25GcmFtZVNjaGVkdWxlciksIC8vIGRvIG5vdCBibG9jayByZXNpemUgY2FsbGJhY2sgKFJlc2l6ZU9ic2VydmVyIGxvb3AgY29tcGxldGVkIHdpdGggdW5kZWxpdmVyZWQgbm90aWZpY2F0aW9ucylcbiAgICAgICAgb2JzZXJ2ZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSwgLy8gZG8gbm90IGJsb2NrIHJlc2l6ZSBjYWxsYmFjayAoUmVzaXplT2JzZXJ2ZXIgbG9vcCBjb21wbGV0ZWQgd2l0aCB1bmRlbGl2ZXJlZCBub3RpZmljYXRpb25zKVxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpbWVuc2lvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgICBjbGllbnRXaWR0aDogaG9zdC5jbGllbnRXaWR0aCxcbiAgICAgICAgICBvZmZzZXRXaWR0aDogaG9zdC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICBjbGllbnRIZWlnaHQ6IGhvc3QuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIG9mZnNldEhlaWdodDogaG9zdC5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgZWxlbWVudDogaG9zdCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2018-2024 Swiss Federal Railways
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made
|
|
5
|
+
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
+
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vY29tcG9uZW50cy9kaW1lbnNpb24vc3JjL2RpbWVuc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyNCBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZGltZW5zaW9uIG9mIGFuIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NpRGltZW5zaW9uIHtcbiAgb2Zmc2V0V2lkdGg6IG51bWJlcjtcbiAgb2Zmc2V0SGVpZ2h0OiBudW1iZXI7XG4gIGNsaWVudFdpZHRoOiBudW1iZXI7XG4gIGNsaWVudEhlaWdodDogbnVtYmVyO1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2018-2024 Swiss Federal Railways
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made
|
|
5
|
+
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
+
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
+
*/
|
|
10
|
+
import { assertInInjectionContext, assertNotInReactiveContext, computed, effect, inject, Injector, isSignal, NgZone, signal, untracked } from '@angular/core';
|
|
11
|
+
import { coerceElement } from '@angular/cdk/coercion';
|
|
12
|
+
import { Objects } from '@scion/toolkit/util';
|
|
13
|
+
import { fromResize$ } from '@scion/toolkit/observable';
|
|
14
|
+
import { animationFrameScheduler, observeOn } from 'rxjs';
|
|
15
|
+
import { subscribeInside } from '@scion/toolkit/operators';
|
|
16
|
+
export function dimension(elementLike, options) {
|
|
17
|
+
assertNotInReactiveContext(dimension, 'Invoking `dimension` causes new subscriptions every time. Move `dimension` outside of the reactive context and read the signal value where needed.');
|
|
18
|
+
if (!options?.injector) {
|
|
19
|
+
assertInInjectionContext(dimension);
|
|
20
|
+
}
|
|
21
|
+
const injector = options?.injector ?? inject(Injector);
|
|
22
|
+
const zone = injector.get(NgZone);
|
|
23
|
+
const element = computed(() => coerceElement(isSignal(elementLike) ? elementLike() : elementLike));
|
|
24
|
+
const onResize = signal(undefined, { equal: () => false });
|
|
25
|
+
// Subscribe to element size changes.
|
|
26
|
+
effect(onCleanup => {
|
|
27
|
+
const el = element();
|
|
28
|
+
if (!el) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
untracked(() => {
|
|
32
|
+
const subscription = fromResize$(el)
|
|
33
|
+
.pipe(subscribeInside(fn => zone.runOutsideAngular(fn)), observeOn(animationFrameScheduler))
|
|
34
|
+
.subscribe(() => {
|
|
35
|
+
NgZone.assertNotInAngularZone();
|
|
36
|
+
onResize.set();
|
|
37
|
+
});
|
|
38
|
+
onCleanup(() => subscription.unsubscribe());
|
|
39
|
+
});
|
|
40
|
+
}, { injector });
|
|
41
|
+
// Create signal that recomputes each time the size changes.
|
|
42
|
+
return computed(() => {
|
|
43
|
+
const el = element();
|
|
44
|
+
if (!el) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
// Track element size.
|
|
48
|
+
onResize();
|
|
49
|
+
return {
|
|
50
|
+
clientWidth: el.clientWidth,
|
|
51
|
+
offsetWidth: el.offsetWidth,
|
|
52
|
+
clientHeight: el.clientHeight,
|
|
53
|
+
offsetHeight: el.offsetHeight,
|
|
54
|
+
element: el,
|
|
55
|
+
};
|
|
56
|
+
}, { equal: Objects.isEqual });
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLnNpZ25hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL2NvbXBvbmVudHMvZGltZW5zaW9uL3NyYy9kaW1lbnNpb24uc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFaEwsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFlekQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxXQUE4RyxFQUFFLE9BQStCO0lBQ3ZLLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxvSkFBb0osQ0FBQyxDQUFDO0lBQzVMLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDdkIsd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBTyxTQUFTLEVBQUUsRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUUvRCxxQ0FBcUM7SUFDckMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ2pCLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLE9BQU87UUFDVCxDQUFDO1FBRUQsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUM7aUJBQ2pDLElBQUksQ0FDSCxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDakQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQ25DO2lCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ2hDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUNMLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsRUFBRSxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7SUFFZiw0REFBNEQ7SUFDNUQsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ25CLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsUUFBUSxFQUFFLENBQUM7UUFFWCxPQUFPO1lBQ0wsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXO1lBQzNCLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVztZQUMzQixZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVk7WUFDN0IsWUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZO1lBQzdCLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztJQUNKLENBQUMsRUFBRSxFQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDI0IFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge2Fzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgYXNzZXJ0Tm90SW5SZWFjdGl2ZUNvbnRleHQsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5qZWN0b3IsIGlzU2lnbmFsLCBOZ1pvbmUsIHNpZ25hbCwgU2lnbmFsLCB1bnRyYWNrZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTY2lEaW1lbnNpb259IGZyb20gJy4vZGltZW5zaW9uJztcbmltcG9ydCB7Y29lcmNlRWxlbWVudH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7T2JqZWN0c30gZnJvbSAnQHNjaW9uL3Rvb2xraXQvdXRpbCc7XG5pbXBvcnQge2Zyb21SZXNpemUkfSBmcm9tICdAc2Npb24vdG9vbGtpdC9vYnNlcnZhYmxlJztcbmltcG9ydCB7YW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIG9ic2VydmVPbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3N1YnNjcmliZUluc2lkZX0gZnJvbSAnQHNjaW9uL3Rvb2xraXQvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2lnbmFsIG9ic2VydmluZyB0aGUgc2l6ZSBvZiBhbiBlbGVtZW50LlxuICpcbiAqIFRoZSBlbGVtZW50IGNhbiBiZSBwYXNzZWQgYXMgYSBzaWduYWwsIGVuYWJsaW5nIG9ic2VydmF0aW9uIG9mIHZpZXcgY2hpbGRyZW4gaW4gdGhlIGNvbXBvbmVudCBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBUaGUgc2lnbmFsIHN1YnNjcmliZXMgdG8gdGhlIG5hdGl2ZSB7QGxpbmsgUmVzaXplT2JzZXJ2ZXJ9IHRvIG1vbml0b3IgZWxlbWVudCBzaXplIGNoYW5nZXMuIERlc3Ryb3lpbmcgdGhlIGluamVjdGlvbiBjb250ZXh0IHdpbGwgdW5zdWJzY3JpYmUgdGhlIG9ic2VydmVyLlxuICpcbiAqIFVzYWdlOlxuICogLSBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQgb3IgYW4gaW5qZWN0b3IgcHJvdmlkZWQuIERlc3Ryb3lpbmcgdGhlIGluamVjdG9yIHdpbGwgdW5zdWJzY3JpYmUgdGhlIHNpZ25hbC5cbiAqIC0gTXVzdCBub3QgYmUgY2FsbGVkIHdpdGhpbiBhIHJlYWN0aXZlIGNvbnRleHQgdG8gYXZvaWQgcmVwZWF0ZWQgc3Vic2NyaXB0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpbWVuc2lvbihlbGVtZW50TGlrZTogSFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IFNpZ25hbDxIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+Piwgb3B0aW9ucz86IHtpbmplY3Rvcj86IEluamVjdG9yfSk6IFNpZ25hbDxTY2lEaW1lbnNpb24+O1xuZXhwb3J0IGZ1bmN0aW9uIGRpbWVuc2lvbihlbGVtZW50TGlrZTogSFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IFNpZ25hbDxIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkPiwgb3B0aW9ucz86IHtpbmplY3Rvcj86IEluamVjdG9yfSk6IFNpZ25hbDxTY2lEaW1lbnNpb24gfCB1bmRlZmluZWQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGRpbWVuc2lvbihlbGVtZW50TGlrZTogSFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IFNpZ25hbDxIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkPiwgb3B0aW9ucz86IHtpbmplY3Rvcj86IEluamVjdG9yfSk6IFNpZ25hbDxTY2lEaW1lbnNpb24gfCB1bmRlZmluZWQ+IHtcbiAgYXNzZXJ0Tm90SW5SZWFjdGl2ZUNvbnRleHQoZGltZW5zaW9uLCAnSW52b2tpbmcgYGRpbWVuc2lvbmAgY2F1c2VzIG5ldyBzdWJzY3JpcHRpb25zIGV2ZXJ5IHRpbWUuIE1vdmUgYGRpbWVuc2lvbmAgb3V0c2lkZSBvZiB0aGUgcmVhY3RpdmUgY29udGV4dCBhbmQgcmVhZCB0aGUgc2lnbmFsIHZhbHVlIHdoZXJlIG5lZWRlZC4nKTtcbiAgaWYgKCFvcHRpb25zPy5pbmplY3Rvcikge1xuICAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChkaW1lbnNpb24pO1xuICB9XG5cbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zPy5pbmplY3RvciA/PyBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCB6b25lID0gaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gIGNvbnN0IGVsZW1lbnQgPSBjb21wdXRlZCgoKSA9PiBjb2VyY2VFbGVtZW50KGlzU2lnbmFsKGVsZW1lbnRMaWtlKSA/IGVsZW1lbnRMaWtlKCkgOiBlbGVtZW50TGlrZSkpO1xuICBjb25zdCBvblJlc2l6ZSA9IHNpZ25hbDx2b2lkPih1bmRlZmluZWQsIHtlcXVhbDogKCkgPT4gZmFsc2V9KTtcblxuICAvLyBTdWJzY3JpYmUgdG8gZWxlbWVudCBzaXplIGNoYW5nZXMuXG4gIGVmZmVjdChvbkNsZWFudXAgPT4ge1xuICAgIGNvbnN0IGVsID0gZWxlbWVudCgpO1xuICAgIGlmICghZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZnJvbVJlc2l6ZSQoZWwpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN1YnNjcmliZUluc2lkZShmbiA9PiB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZuKSksXG4gICAgICAgICAgb2JzZXJ2ZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSwgLy8gZG8gbm90IGJsb2NrIHJlc2l6ZSBjYWxsYmFjayAoUmVzaXplT2JzZXJ2ZXIgbG9vcCBjb21wbGV0ZWQgd2l0aCB1bmRlbGl2ZXJlZCBub3RpZmljYXRpb25zKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIE5nWm9uZS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCk7XG4gICAgICAgICAgb25SZXNpemUuc2V0KCk7XG4gICAgICAgIH0pO1xuICAgICAgb25DbGVhbnVwKCgpID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICB9KTtcbiAgfSwge2luamVjdG9yfSk7XG5cbiAgLy8gQ3JlYXRlIHNpZ25hbCB0aGF0IHJlY29tcHV0ZXMgZWFjaCB0aW1lIHRoZSBzaXplIGNoYW5nZXMuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBlbGVtZW50KCk7XG4gICAgaWYgKCFlbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBUcmFjayBlbGVtZW50IHNpemUuXG4gICAgb25SZXNpemUoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjbGllbnRXaWR0aDogZWwuY2xpZW50V2lkdGgsXG4gICAgICBvZmZzZXRXaWR0aDogZWwub2Zmc2V0V2lkdGgsXG4gICAgICBjbGllbnRIZWlnaHQ6IGVsLmNsaWVudEhlaWdodCxcbiAgICAgIG9mZnNldEhlaWdodDogZWwub2Zmc2V0SGVpZ2h0LFxuICAgICAgZWxlbWVudDogZWwsXG4gICAgfTtcbiAgfSwge2VxdWFsOiBPYmplY3RzLmlzRXF1YWx9KTtcbn1cbiJdfQ==
|
|
@@ -14,4 +14,6 @@
|
|
|
14
14
|
*/
|
|
15
15
|
export { SciDimensionModule } from './dimension.module';
|
|
16
16
|
export { SciDimensionDirective } from './dimension.directive';
|
|
17
|
-
|
|
17
|
+
export { dimension } from './dimension.signal';
|
|
18
|
+
export { boundingClientRect } from './bounding-client-rect.signal';
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL2NvbXBvbmVudHMvZGltZW5zaW9uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUg7Ozs7R0FJRztBQUNILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbi8qXG4gKiBTZWNvbmRhcnkgZW50cnlwb2ludDogJ0BzY2lvbi9jb21wb25lbnRzL2RpbWVuc2lvbidcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wYWNrYWdyL25nLXBhY2thZ3IvYmxvYi9tYXN0ZXIvZG9jcy9zZWNvbmRhcnktZW50cnlwb2ludHMubWRcbiAqL1xuZXhwb3J0IHtTY2lEaW1lbnNpb25Nb2R1bGV9IGZyb20gJy4vZGltZW5zaW9uLm1vZHVsZSc7XG5leHBvcnQge1NjaURpbWVuc2lvbkRpcmVjdGl2ZX0gZnJvbSAnLi9kaW1lbnNpb24uZGlyZWN0aXZlJztcbmV4cG9ydCB7ZGltZW5zaW9ufSBmcm9tICcuL2RpbWVuc2lvbi5zaWduYWwnO1xuZXhwb3J0IHtib3VuZGluZ0NsaWVudFJlY3R9IGZyb20gJy4vYm91bmRpbmctY2xpZW50LXJlY3Quc2lnbmFsJztcbmV4cG9ydCB7U2NpRGltZW5zaW9ufSBmcm9tICcuL2RpbWVuc2lvbic7XG4iXX0=
|