@radix-ng/primitives 0.18.2 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/avatar/index.d.ts +1 -2
- package/avatar/src/avatar-fallback.directive.d.ts +11 -23
- package/avatar/src/avatar-image.directive.d.ts +10 -14
- package/avatar/src/avatar-root.directive.d.ts +5 -15
- package/checkbox/index.d.ts +11 -0
- package/checkbox/src/checkbox-button.directive.d.ts +1 -1
- package/checkbox/src/checkbox-indicator.directive.d.ts +1 -1
- package/checkbox/src/checkbox-input.directive.d.ts +1 -1
- package/checkbox/src/checkbox.directive.d.ts +1 -1
- package/compodoc/documentation.json +9385 -4858
- package/core/index.d.ts +2 -0
- package/core/src/control-value-accessor/index.d.ts +75 -0
- package/core/src/create-inject-context/assert-injector.d.ts +51 -0
- package/core/src/create-inject-context/index.d.ts +68 -0
- package/core/src/types.d.ts +23 -0
- package/esm2022/avatar/index.mjs +1 -1
- package/esm2022/avatar/src/avatar-fallback.directive.mjs +38 -40
- package/esm2022/avatar/src/avatar-image.directive.mjs +25 -26
- package/esm2022/avatar/src/avatar-root.directive.mjs +13 -25
- package/esm2022/checkbox/index.mjs +31 -1
- package/esm2022/checkbox/src/checkbox-button.directive.mjs +3 -3
- package/esm2022/checkbox/src/checkbox-indicator.directive.mjs +3 -3
- package/esm2022/checkbox/src/checkbox-input.directive.mjs +3 -3
- package/esm2022/checkbox/src/checkbox.directive.mjs +3 -3
- package/esm2022/core/index.mjs +3 -1
- package/esm2022/core/src/control-value-accessor/index.mjs +103 -0
- package/esm2022/core/src/create-inject-context/assert-injector.mjs +15 -0
- package/esm2022/core/src/create-inject-context/index.mjs +116 -0
- package/esm2022/core/src/types.mjs +2 -0
- package/esm2022/popover/index.mjs +41 -0
- package/esm2022/popover/radix-ng-primitives-popover.mjs +5 -0
- package/esm2022/popover/src/popover-arrow.directive.mjs +112 -0
- package/esm2022/popover/src/popover-arrow.token.mjs +3 -0
- package/esm2022/popover/src/popover-close.directive.mjs +37 -0
- package/esm2022/popover/src/popover-content.directive.mjs +227 -0
- package/esm2022/popover/src/popover-root.directive.mjs +142 -0
- package/esm2022/popover/src/popover-root.inject.mjs +7 -0
- package/esm2022/popover/src/popover-root.token.mjs +3 -0
- package/esm2022/popover/src/popover-trigger.directive.mjs +42 -0
- package/esm2022/popover/src/popover.constants.mjs +90 -0
- package/esm2022/popover/src/popover.types.mjs +14 -0
- package/esm2022/popover/src/popover.utils.mjs +115 -0
- package/esm2022/radio/index.mjs +2 -1
- package/esm2022/radio/src/radio-item-input.directive.mjs +37 -0
- package/esm2022/radio/src/radio-item.directive.mjs +55 -39
- package/esm2022/radio/src/radio-root.directive.mjs +30 -120
- package/esm2022/radio/src/radio-tokens.mjs +1 -1
- package/esm2022/roving-focus/index.mjs +3 -0
- package/esm2022/roving-focus/radix-ng-primitives-roving-focus.mjs +5 -0
- package/esm2022/roving-focus/src/roving-focus-group.directive.mjs +138 -0
- package/esm2022/roving-focus/src/roving-focus-item.directive.mjs +133 -0
- package/esm2022/roving-focus/src/utils.mjs +47 -0
- package/esm2022/select/src/select-item.directive.mjs +8 -2
- package/esm2022/toggle/src/toggle-input.directive.mjs +4 -3
- package/fesm2022/radix-ng-primitives-avatar.mjs +70 -85
- package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +35 -10
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +230 -3
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popover.mjs +796 -0
- package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-radio.mjs +145 -186
- package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs +320 -0
- package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-select.mjs +7 -1
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle.mjs +3 -2
- package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
- package/package.json +18 -6
- package/popover/README.md +3 -0
- package/popover/index.d.ts +17 -0
- package/popover/src/popover-arrow.directive.d.ts +37 -0
- package/popover/src/popover-arrow.token.d.ts +3 -0
- package/popover/src/popover-close.directive.d.ts +15 -0
- package/popover/src/popover-content.directive.d.ts +84 -0
- package/popover/src/popover-root.directive.d.ts +58 -0
- package/popover/src/popover-root.inject.d.ts +2 -0
- package/popover/src/popover-root.token.d.ts +3 -0
- package/popover/src/popover-trigger.directive.d.ts +18 -0
- package/popover/src/popover.constants.d.ts +8 -0
- package/popover/src/popover.types.d.ts +34 -0
- package/popover/src/popover.utils.d.ts +12 -0
- package/radio/index.d.ts +1 -0
- package/radio/src/radio-item-input.directive.d.ts +12 -0
- package/radio/src/radio-item.directive.d.ts +23 -14
- package/radio/src/radio-root.directive.d.ts +19 -34
- package/radio/src/radio-tokens.d.ts +6 -4
- package/roving-focus/README.md +3 -0
- package/roving-focus/index.d.ts +3 -0
- package/roving-focus/src/roving-focus-group.directive.d.ts +50 -0
- package/roving-focus/src/roving-focus-item.directive.d.ts +50 -0
- package/roving-focus/src/utils.d.ts +19 -0
- package/select/src/select-item.directive.d.ts +7 -1
- package/toggle/src/toggle-input.directive.d.ts +1 -1
package/core/index.d.ts
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
export * from './src/accessor/provide-value-accessor';
|
2
2
|
export * from './src/auto-focus.directive';
|
3
|
+
export * from './src/control-value-accessor';
|
4
|
+
export * from './src/create-inject-context';
|
3
5
|
export * from './src/document';
|
4
6
|
export * from './src/inject-ng-control';
|
5
7
|
export * from './src/is-client';
|
@@ -0,0 +1,75 @@
|
|
1
|
+
/**
|
2
|
+
* Based On:
|
3
|
+
* Copyright (c) flebee Authors. Licensed under the MIT License.
|
4
|
+
*/
|
5
|
+
import { BooleanInput } from '@angular/cdk/coercion';
|
6
|
+
import { Injector } from '@angular/core';
|
7
|
+
import { ControlValueAccessor } from '@angular/forms';
|
8
|
+
import * as i0 from "@angular/core";
|
9
|
+
export type RdxControlValueAccessorCompareTo<T = any> = (a?: T, b?: T) => boolean;
|
10
|
+
export declare const injectCvaCompareTo: {
|
11
|
+
(): RdxControlValueAccessorCompareTo<any>;
|
12
|
+
(injectOptions: import("@angular/core").InjectOptions & {
|
13
|
+
optional?: false;
|
14
|
+
} & {
|
15
|
+
injector?: Injector;
|
16
|
+
}): RdxControlValueAccessorCompareTo<any>;
|
17
|
+
(injectOptions: import("@angular/core").InjectOptions & {
|
18
|
+
injector?: Injector;
|
19
|
+
}): RdxControlValueAccessorCompareTo<any> | null;
|
20
|
+
}, provideCvaCompareTo: (() => import("@angular/core").Provider) & ((value: RdxControlValueAccessorCompareTo<any> | (() => RdxControlValueAccessorCompareTo<any>), isFunctionValue: boolean) => import("@angular/core").Provider);
|
21
|
+
/**
|
22
|
+
* Provides a {@link RdxControlValueAccessorCompareTo comparator} based on a property of `T`.
|
23
|
+
*
|
24
|
+
* @example
|
25
|
+
* ```ts
|
26
|
+
* interface User {
|
27
|
+
* id: string;
|
28
|
+
* name: string;
|
29
|
+
* }
|
30
|
+
*
|
31
|
+
* provideCvaCompareToByProp<User>('id');
|
32
|
+
* ```
|
33
|
+
*/
|
34
|
+
export declare const provideCvaCompareToByProp: <T>(prop: keyof T) => import("@angular/core").Provider;
|
35
|
+
export declare class RdxControlValueAccessor<Value> implements ControlValueAccessor {
|
36
|
+
private readonly ngControl;
|
37
|
+
private readonly destroyRef;
|
38
|
+
private readonly injector;
|
39
|
+
/**
|
40
|
+
* A comparator, which determines value changes. Should return true, if two values are considered semantic equal.
|
41
|
+
*
|
42
|
+
* Defaults to {@link Object.is} in order to align with change detection behavior for inputs.
|
43
|
+
*/
|
44
|
+
readonly compareTo: RdxControlValueAccessorCompareTo<Value>;
|
45
|
+
/** Whether this is disabled. If a control is present, it reflects it's disabled state. */
|
46
|
+
inputDisabled: import("@angular/core").ModelSignal<BooleanInput>;
|
47
|
+
disabled: import("@angular/core").Signal<boolean>;
|
48
|
+
/** The value of this. If a control is present, it reflects it's value. */
|
49
|
+
value: import("@angular/core").ModelSignal<Value>;
|
50
|
+
/**
|
51
|
+
* `NgModel` sets up the control in `ngOnChanges`. Idk if bug or on purpose, but `writeValue` and `setDisabledState` are called before the inputs are set.
|
52
|
+
* {@link https://github.com/angular/angular/blob/main/packages/forms/src/directives/ng_model.ts#L223}
|
53
|
+
*
|
54
|
+
* @ignore
|
55
|
+
*/
|
56
|
+
private get registered();
|
57
|
+
constructor();
|
58
|
+
private _onChange;
|
59
|
+
private _onTouched;
|
60
|
+
/**
|
61
|
+
* This function should be called when this host is considered `touched`.
|
62
|
+
*
|
63
|
+
* NOTE: Whenever a `blur` event is triggered on this host, this function is called.
|
64
|
+
*
|
65
|
+
* @see {@link RdxControlValueAccessor.registerOnTouched}
|
66
|
+
* @see {@link RdxControlValueAccessor._ngControl}
|
67
|
+
*/
|
68
|
+
markAsTouched(): void;
|
69
|
+
setDisabledState(disabled: boolean): void;
|
70
|
+
writeValue(value: Value): void;
|
71
|
+
registerOnChange(onChange: (value: Value) => void): void;
|
72
|
+
registerOnTouched(onTouched: () => void): void;
|
73
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RdxControlValueAccessor<any>, never>;
|
74
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RdxControlValueAccessor<any>, never, never, { "inputDisabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "inputDisabled": "disabledChange"; "value": "valueChange"; }, never, never, true, never>;
|
75
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
/**
|
2
|
+
* This code is adapted from the original implementation by the ngxTension team.
|
3
|
+
* Source: https://github.com/ngxtension/ngxtension-platform/blob/main/libs/ngxtension/assert-injector/src/assert-injector.ts
|
4
|
+
*
|
5
|
+
* Copyright (c) ngxtension Authors. Licensed under the MIT License.
|
6
|
+
*/
|
7
|
+
import { Injector } from '@angular/core';
|
8
|
+
import { Nullable, SafeFunction } from '../types';
|
9
|
+
/**
|
10
|
+
* `assertInjector` extends `assertInInjectionContext` with an optional `Injector`
|
11
|
+
* After assertion, `assertInjector` runs the `runner` function with the guaranteed `Injector`
|
12
|
+
* whether it is the default `Injector` within the current **Injection Context**
|
13
|
+
* or the custom `Injector` that was passed in.
|
14
|
+
*
|
15
|
+
* @template {() => unknown} Runner - Runner is a function that can return anything
|
16
|
+
* @param {SafeFunction} fn - the Function to pass in `assertInInjectionContext`
|
17
|
+
* @param {Nullable<Injector>} injector - the optional "custom" Injector
|
18
|
+
* @param {Runner} runner - the runner fn
|
19
|
+
* @returns {ReturnType<Runner>} result - returns the result of the Runner
|
20
|
+
*
|
21
|
+
* @example
|
22
|
+
* ```ts
|
23
|
+
* function injectValue(injector?: Injector) {
|
24
|
+
* return assertInjector(injectValue, injector, () => 'value');
|
25
|
+
* }
|
26
|
+
*
|
27
|
+
* injectValue(); // string
|
28
|
+
* ```
|
29
|
+
*/
|
30
|
+
export declare function assertInjector<Runner extends () => unknown>(fn: SafeFunction, injector: Nullable<Injector>, runner: Runner): ReturnType<Runner>;
|
31
|
+
/**
|
32
|
+
* `assertInjector` extends `assertInInjectionContext` with an optional `Injector`
|
33
|
+
* After assertion, `assertInjector` returns a guaranteed `Injector` whether it is the default `Injector`
|
34
|
+
* within the current **Injection Context** or the custom `Injector` that was passed in.
|
35
|
+
*
|
36
|
+
* @param {SafeFunction} fn - the Function to pass in `assertInInjectionContext`
|
37
|
+
* @param {Nullable<Injector>} injector - the optional "custom" Injector
|
38
|
+
* @returns Injector
|
39
|
+
*
|
40
|
+
* @example
|
41
|
+
* ```ts
|
42
|
+
* function injectDestroy(injector?: Injector) {
|
43
|
+
* injector = assertInjector(injectDestroy, injector);
|
44
|
+
*
|
45
|
+
* return runInInjectionContext(injector, () => {
|
46
|
+
* // code
|
47
|
+
* })
|
48
|
+
* }
|
49
|
+
* ```
|
50
|
+
*/
|
51
|
+
export declare function assertInjector(fn: SafeFunction, injector: Nullable<Injector>): Injector;
|
@@ -0,0 +1,68 @@
|
|
1
|
+
/**
|
2
|
+
*
|
3
|
+
* Copyright (c) ngxtension Authors. Licensed under the MIT License.
|
4
|
+
*/
|
5
|
+
import { InjectionToken, type EnvironmentProviders, type Host, type InjectOptions, type Injector, type Optional, type Provider, type Self, type SkipSelf, type Type } from '@angular/core';
|
6
|
+
type CreateInjectionTokenDep<TTokenType> = Type<TTokenType> | (abstract new (...args: any[]) => TTokenType) | InjectionToken<TTokenType>;
|
7
|
+
type CreateInjectionTokenDeps<TFactory extends (...args: any[]) => any, TFactoryDeps extends Parameters<TFactory> = Parameters<TFactory>> = {
|
8
|
+
[Index in keyof TFactoryDeps]: CreateInjectionTokenDep<TFactoryDeps[Index]> | [...modifiers: Array<Optional | Self | SkipSelf | Host>, token: CreateInjectionTokenDep<TFactoryDeps[Index]>];
|
9
|
+
} & {
|
10
|
+
length: TFactoryDeps['length'];
|
11
|
+
};
|
12
|
+
export type CreateInjectionTokenOptions<TFactory extends (...args: any[]) => any, TFactoryDeps extends Parameters<TFactory> = Parameters<TFactory>> = (TFactoryDeps[0] extends undefined ? {
|
13
|
+
deps?: never;
|
14
|
+
} : {
|
15
|
+
deps: CreateInjectionTokenDeps<TFactory, TFactoryDeps>;
|
16
|
+
}) & {
|
17
|
+
isRoot?: boolean;
|
18
|
+
isFunctionValue?: boolean;
|
19
|
+
multi?: boolean;
|
20
|
+
token?: InjectionToken<ReturnType<TFactory>>;
|
21
|
+
extraProviders?: Provider | EnvironmentProviders;
|
22
|
+
};
|
23
|
+
type InjectFn<TFactoryReturn> = {
|
24
|
+
(): TFactoryReturn;
|
25
|
+
(injectOptions: InjectOptions & {
|
26
|
+
optional?: false;
|
27
|
+
} & {
|
28
|
+
injector?: Injector;
|
29
|
+
}): TFactoryReturn;
|
30
|
+
(injectOptions: InjectOptions & {
|
31
|
+
injector?: Injector;
|
32
|
+
}): TFactoryReturn | null;
|
33
|
+
};
|
34
|
+
type ProvideFn<TNoop extends boolean, TFactoryReturn, TReturn = TFactoryReturn extends Array<infer Item> ? Item : TFactoryReturn> = (TNoop extends true ? (value: TReturn | (() => TReturn)) => Provider : () => Provider) & (TReturn extends Function ? (value: TReturn | (() => TReturn), isFunctionValue: boolean) => Provider : (value: TReturn | (() => TReturn)) => Provider);
|
35
|
+
export type CreateInjectionTokenReturn<TFactoryReturn, TNoop extends boolean = false> = [
|
36
|
+
InjectFn<TFactoryReturn>,
|
37
|
+
ProvideFn<TNoop, TFactoryReturn>,
|
38
|
+
InjectionToken<TFactoryReturn>,
|
39
|
+
() => Provider
|
40
|
+
];
|
41
|
+
/**
|
42
|
+
* `createInjectionToken` accepts a factory function and returns a tuple of `injectFn`, `provideFn`, and the `InjectionToken`
|
43
|
+
* that the factory function is for.
|
44
|
+
*
|
45
|
+
* @param {Function} factory - Factory Function that returns the value for the `InjectionToken`
|
46
|
+
* @param {CreateInjectionTokenOptions} options - object to control how the `InjectionToken` behaves
|
47
|
+
* @returns {CreateInjectionTokenReturn}
|
48
|
+
*
|
49
|
+
* @example
|
50
|
+
* ```ts
|
51
|
+
* const [injectCounter, provideCounter, COUNTER] = createInjectionToken(() => signal(0));
|
52
|
+
*
|
53
|
+
* export class Counter {
|
54
|
+
* counter = injectCounter(); // WritableSignal<number>
|
55
|
+
* }
|
56
|
+
* ```
|
57
|
+
*/
|
58
|
+
export declare function createInjectionToken<TFactory extends (...args: any[]) => any, TFactoryDeps extends Parameters<TFactory> = Parameters<TFactory>, TOptions extends CreateInjectionTokenOptions<TFactory, TFactoryDeps> = CreateInjectionTokenOptions<TFactory, TFactoryDeps>, TFactoryReturn = TOptions['multi'] extends true ? Array<ReturnType<TFactory>> : ReturnType<TFactory>>(factory: TFactory, options?: TOptions): CreateInjectionTokenReturn<TFactoryReturn>;
|
59
|
+
export declare function createNoopInjectionToken<TValue, TMulti extends boolean = false, TOptions = Pick<CreateInjectionTokenOptions<() => void, []>, 'extraProviders'> & (TValue extends (...args: any[]) => any ? {
|
60
|
+
isFunctionValue: true;
|
61
|
+
} : {
|
62
|
+
isFunctionValue?: never;
|
63
|
+
}) & (TMulti extends true ? {
|
64
|
+
multi: true;
|
65
|
+
} : {
|
66
|
+
multi?: never;
|
67
|
+
})>(description: string, options?: TOptions): CreateInjectionTokenReturn<TMulti extends true ? TValue[] : TValue, true>;
|
68
|
+
export {};
|
@@ -0,0 +1,23 @@
|
|
1
|
+
/**
|
2
|
+
* Nullable from `Type` adds `null` and `undefined`
|
3
|
+
*
|
4
|
+
* @example ```ts
|
5
|
+
* // Expect: string | number | undefined | null
|
6
|
+
* type Value = Nulling<string | number>;
|
7
|
+
* ```
|
8
|
+
*/
|
9
|
+
export type Nullable<Type> = null | Type | undefined;
|
10
|
+
/**
|
11
|
+
* SafeFunction is a type for functions that accept any number of arguments of unknown types
|
12
|
+
* and return a value of an unknown type. This is useful when you want to define a function
|
13
|
+
* without being strict about the input or output types, maintaining flexibility.
|
14
|
+
*
|
15
|
+
* @example ```ts
|
16
|
+
* const safeFn: SafeFunction = (...args) => {
|
17
|
+
* return args.length > 0 ? args[0] : null;
|
18
|
+
* };
|
19
|
+
*
|
20
|
+
* const result = safeFn(1, 'hello'); // result: 1
|
21
|
+
* ```
|
22
|
+
*/
|
23
|
+
export type SafeFunction = (...args: unknown[]) => unknown;
|
package/esm2022/avatar/index.mjs
CHANGED
@@ -2,4 +2,4 @@ export * from './src/avatar-fallback.directive';
|
|
2
2
|
export * from './src/avatar-image.directive';
|
3
3
|
export * from './src/avatar-root.directive';
|
4
4
|
export * from './src/avatar.config';
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL2F2YXRhci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zcmMvYXZhdGFyLWZhbGxiYWNrLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hdmF0YXItaW1hZ2UuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2F2YXRhci1yb290LmRpcmVjdGl2ZSc7XG5leHBvcnQgdHlwZSB7IFJkeEltYWdlTG9hZGluZ1N0YXR1cyB9IGZyb20gJy4vc3JjL2F2YXRhci1yb290LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hdmF0YXIuY29uZmlnJztcbiJdfQ==
|
@@ -1,62 +1,60 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
3
|
-
import { injectAvatar } from './avatar-root.directive';
|
1
|
+
import { Directive, effect, inject, input, signal } from '@angular/core';
|
2
|
+
import { RdxAvatarRootContext } from './avatar-root.directive';
|
4
3
|
import { injectAvatarConfig } from './avatar.config';
|
5
4
|
import * as i0 from "@angular/core";
|
6
5
|
export class RdxAvatarFallbackDirective {
|
7
6
|
constructor() {
|
8
|
-
this.
|
7
|
+
this.avatarRoot = inject(RdxAvatarRootContext);
|
9
8
|
this.config = injectAvatarConfig();
|
10
|
-
this.
|
11
|
-
this.
|
12
|
-
/**
|
13
|
-
* Define a delay before the fallback is shown.
|
14
|
-
* This is useful to only show the fallback for those with slower connections.
|
15
|
-
* @default 0
|
16
|
-
*/
|
17
|
-
this.delayMs = this.config.delayMs;
|
18
|
-
this.visible = signal(false);
|
19
|
-
/**
|
20
|
-
* Determine the delay has elapsed, and we can show the fallback.
|
21
|
-
*/
|
22
|
-
this.delayElapsed = false;
|
9
|
+
this.delayMs = input(this.config.delayMs);
|
10
|
+
this.canRender = signal(false);
|
23
11
|
this.timeoutId = null;
|
12
|
+
effect(() => {
|
13
|
+
const status = this.avatarRoot.imageLoadingStatus();
|
14
|
+
if (status === 'loading') {
|
15
|
+
this.startDelayTimer();
|
16
|
+
}
|
17
|
+
else {
|
18
|
+
this.clearDelayTimer();
|
19
|
+
this.canRender.set(false);
|
20
|
+
}
|
21
|
+
}, { allowSignalWrites: true });
|
24
22
|
}
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
23
|
+
get shouldRender() {
|
24
|
+
return this.canRender() && this.avatarRoot.imageLoadingStatus() !== 'loaded';
|
25
|
+
}
|
26
|
+
startDelayTimer() {
|
27
|
+
this.clearDelayTimer();
|
28
|
+
if (this.delayMs() > 0) {
|
29
|
+
this.timeoutId = setTimeout(() => {
|
30
|
+
this.canRender.set(true);
|
31
|
+
}, this.delayMs());
|
32
|
+
}
|
33
|
+
else {
|
34
|
+
this.canRender.set(true);
|
35
35
|
}
|
36
36
|
}
|
37
|
-
|
38
|
-
if (
|
39
|
-
|
37
|
+
clearDelayTimer() {
|
38
|
+
if (this.timeoutId !== null) {
|
39
|
+
clearTimeout(this.timeoutId);
|
40
|
+
this.timeoutId = null;
|
40
41
|
}
|
41
42
|
}
|
42
|
-
|
43
|
-
this.
|
43
|
+
ngOnDestroy() {
|
44
|
+
this.clearDelayTimer();
|
44
45
|
}
|
45
46
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxAvatarFallbackDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
46
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
47
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxAvatarFallbackDirective, isStandalone: true, selector: "span[rdxAvatarFallback]", inputs: { delayMs: { classPropertyName: "delayMs", publicName: "delayMs", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.display": "shouldRender ? null : \"none\" " } }, exportAs: ["rdxAvatarFallback"], ngImport: i0 }); }
|
47
48
|
}
|
48
49
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxAvatarFallbackDirective, decorators: [{
|
49
50
|
type: Directive,
|
50
51
|
args: [{
|
51
52
|
selector: 'span[rdxAvatarFallback]',
|
52
|
-
exportAs: 'rdxAvatarFallback',
|
53
53
|
standalone: true,
|
54
|
+
exportAs: 'rdxAvatarFallback',
|
54
55
|
host: {
|
55
|
-
'[style.display]': '
|
56
|
+
'[style.display]': 'shouldRender ? null : "none" '
|
56
57
|
}
|
57
58
|
}]
|
58
|
-
}],
|
59
|
-
|
60
|
-
args: [{ alias: 'rdxDelayMs', transform: numberAttribute }]
|
61
|
-
}] } });
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLWZhbGxiYWNrLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvYXZhdGFyL3NyYy9hdmF0YXItZmFsbGJhY2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sZUFBZSxFQUdmLFdBQVcsRUFDWCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWNyRCxNQUFNLE9BQU8sMEJBQTBCO0lBUnZDO1FBU3FCLFdBQU0sR0FBRyxZQUFZLEVBQUUsQ0FBQztRQUV4QixXQUFNLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUU5QixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhCLGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbEQ7Ozs7V0FJRztRQUN5RCxZQUFPLEdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFFekYsWUFBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQzs7V0FFRztRQUNLLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXJCLGNBQVMsR0FBeUMsSUFBSSxDQUFDO0tBd0JsRTtJQXRCRyxRQUFRO1FBQ0osSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO3dCQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzt3QkFDekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQzVCLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2hFLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQztJQUM3RSxDQUFDOytHQTlDUSwwQkFBMEI7bUdBQTFCLDBCQUEwQix3R0FjTSxlQUFlOzs0RkFkL0MsMEJBQTBCO2tCQVJ0QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0YsaUJBQWlCLEVBQUUsMkJBQTJCO3FCQUNqRDtpQkFDSjs4QkFlK0QsT0FBTztzQkFBbEUsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0QXZhdGFyIH0gZnJvbSAnLi9hdmF0YXItcm9vdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgaW5qZWN0QXZhdGFyQ29uZmlnIH0gZnJvbSAnLi9hdmF0YXIuY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBSZHhBdmF0YXJGYWxsYmFja1Byb3BzIHtcbiAgICBkZWxheU1zPzogbnVtYmVyO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ3NwYW5bcmR4QXZhdGFyRmFsbGJhY2tdJyxcbiAgICBleHBvcnRBczogJ3JkeEF2YXRhckZhbGxiYWNrJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tzdHlsZS5kaXNwbGF5XSc6ICd2aXNpYmxlKCkgPyBudWxsIDogXCJub25lXCInXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBSZHhBdmF0YXJGYWxsYmFja0RpcmVjdGl2ZSBpbXBsZW1lbnRzIFJkeEF2YXRhckZhbGxiYWNrUHJvcHMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF2YXRhciA9IGluamVjdEF2YXRhcigpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3RBdmF0YXJDb25maWcoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lIGEgZGVsYXkgYmVmb3JlIHRoZSBmYWxsYmFjayBpcyBzaG93bi5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCB0byBvbmx5IHNob3cgdGhlIGZhbGxiYWNrIGZvciB0aG9zZSB3aXRoIHNsb3dlciBjb25uZWN0aW9ucy5cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgQElucHV0KHsgYWxpYXM6ICdyZHhEZWxheU1zJywgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgZGVsYXlNczogbnVtYmVyID0gdGhpcy5jb25maWcuZGVsYXlNcztcblxuICAgIHJlYWRvbmx5IHZpc2libGUgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIHRoZSBkZWxheSBoYXMgZWxhcHNlZCwgYW5kIHdlIGNhbiBzaG93IHRoZSBmYWxsYmFjay5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlbGF5RWxhcHNlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSB0aW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVvdXRJZCA9IGdsb2JhbFRoaXMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGF5RWxhcHNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5kZWxheU1zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpICYmIHRoaXMudGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBnbG9iYWxUaGlzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlzaWJsZS5zZXQodGhpcy5kZWxheUVsYXBzZWQgJiYgdGhpcy5hdmF0YXIuX3N0YXRlKCkgIT09ICdsb2FkZWQnKTtcbiAgICB9XG59XG4iXX0=
|
59
|
+
}], ctorParameters: () => [] });
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLWZhbGxiYWNrLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvYXZhdGFyL3NyYy9hdmF0YXItZmFsbGJhY2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQVVyRCxNQUFNLE9BQU8sMEJBQTBCO0lBVW5DO1FBVG1CLGVBQVUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUU1QyxXQUFNLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUV0QyxZQUFPLEdBQUcsS0FBSyxDQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxjQUFTLEdBQXlDLElBQUksQ0FBQztRQUczRCxNQUFNLENBQ0YsR0FBRyxFQUFFO1lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3BELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNMLENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUM5QixDQUFDO0lBQ04sQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxRQUFRLENBQUM7SUFDakYsQ0FBQztJQUVPLGVBQWU7UUFDbkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQixZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDOytHQWpEUSwwQkFBMEI7bUdBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFSdEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsSUFBSSxFQUFFO3dCQUNGLGlCQUFpQixFQUFFLCtCQUErQjtxQkFDckQ7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgT25EZXN0cm95LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJkeEF2YXRhclJvb3RDb250ZXh0IH0gZnJvbSAnLi9hdmF0YXItcm9vdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgaW5qZWN0QXZhdGFyQ29uZmlnIH0gZnJvbSAnLi9hdmF0YXIuY29uZmlnJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdzcGFuW3JkeEF2YXRhckZhbGxiYWNrXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBleHBvcnRBczogJ3JkeEF2YXRhckZhbGxiYWNrJyxcbiAgICBob3N0OiB7XG4gICAgICAgICdbc3R5bGUuZGlzcGxheV0nOiAnc2hvdWxkUmVuZGVyID8gbnVsbCA6IFwibm9uZVwiICdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFJkeEF2YXRhckZhbGxiYWNrRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXZhdGFyUm9vdCA9IGluamVjdChSZHhBdmF0YXJSb290Q29udGV4dCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdEF2YXRhckNvbmZpZygpO1xuXG4gICAgcmVhZG9ubHkgZGVsYXlNcyA9IGlucHV0PG51bWJlcj4odGhpcy5jb25maWcuZGVsYXlNcyk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuUmVuZGVyID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcml2YXRlIHRpbWVvdXRJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5hdmF0YXJSb290LmltYWdlTG9hZGluZ1N0YXR1cygpO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGVsYXlUaW1lcigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEZWxheVRpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuUmVuZGVyLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBzaG91bGRSZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhblJlbmRlcigpICYmIHRoaXMuYXZhdGFyUm9vdC5pbWFnZUxvYWRpbmdTdGF0dXMoKSAhPT0gJ2xvYWRlZCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydERlbGF5VGltZXIoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJEZWxheVRpbWVyKCk7XG4gICAgICAgIGlmICh0aGlzLmRlbGF5TXMoKSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5SZW5kZXIuc2V0KHRydWUpO1xuICAgICAgICAgICAgfSwgdGhpcy5kZWxheU1zKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYW5SZW5kZXIuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckRlbGF5VGltZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTtcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNsZWFyRGVsYXlUaW1lcigpO1xuICAgIH1cbn1cbiJdfQ==
|
@@ -1,53 +1,52 @@
|
|
1
|
-
import { Directive, ElementRef,
|
2
|
-
import {
|
1
|
+
import { computed, Directive, ElementRef, inject, input, output } from '@angular/core';
|
2
|
+
import { RdxAvatarRootContext } from './avatar-root.directive';
|
3
3
|
import * as i0 from "@angular/core";
|
4
4
|
export class RdxAvatarImageDirective {
|
5
5
|
constructor() {
|
6
|
-
this.
|
7
|
-
this.elementRef = inject(ElementRef);
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
*/
|
12
|
-
this.onLoadingStatusChange = new EventEmitter();
|
6
|
+
this.avatarRoot = inject(RdxAvatarRootContext);
|
7
|
+
this.elementRef = inject((ElementRef));
|
8
|
+
this.src = (input.required);
|
9
|
+
this.onLoadingStatusChange = output();
|
10
|
+
this.imageLoadingStatus = computed(() => this.avatarRoot.imageLoadingStatus());
|
13
11
|
}
|
14
12
|
ngOnInit() {
|
15
|
-
this.avatar._setState('loading');
|
16
13
|
if (!this.nativeElement.src) {
|
17
|
-
this.
|
14
|
+
this.setImageStatus('error');
|
18
15
|
}
|
19
|
-
if (this.nativeElement.complete) {
|
20
|
-
this.
|
16
|
+
else if (this.nativeElement.complete) {
|
17
|
+
this.setImageStatus('loaded');
|
18
|
+
}
|
19
|
+
else {
|
20
|
+
this.setImageStatus('loading');
|
21
21
|
}
|
22
|
-
this.onLoadingStatusChange.emit(this.avatar._state());
|
23
22
|
}
|
24
23
|
onLoad() {
|
25
|
-
this.
|
26
|
-
this.onLoadingStatusChange.emit('loaded');
|
24
|
+
this.setImageStatus('loaded');
|
27
25
|
}
|
28
26
|
onError() {
|
29
|
-
this.
|
30
|
-
|
27
|
+
this.setImageStatus('error');
|
28
|
+
}
|
29
|
+
setImageStatus(status) {
|
30
|
+
this.avatarRoot.imageLoadingStatus.set(status);
|
31
|
+
this.onLoadingStatusChange.emit(status);
|
31
32
|
}
|
32
33
|
get nativeElement() {
|
33
34
|
return this.elementRef.nativeElement;
|
34
35
|
}
|
35
36
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxAvatarImageDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
36
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: RdxAvatarImageDirective, isStandalone: true, selector: "img[rdxAvatarImage]", outputs: { onLoadingStatusChange: "onLoadingStatusChange" }, host: {
|
37
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: RdxAvatarImageDirective, isStandalone: true, selector: "img[rdxAvatarImage]", outputs: { onLoadingStatusChange: "onLoadingStatusChange" }, host: { listeners: { "load": "onLoad()", "error": "onError()" }, properties: { "style.display": "(imageLoadingStatus() === \"loaded\")? null : \"none\"" } }, exportAs: ["rdxAvatarImage"], ngImport: i0 }); }
|
37
38
|
}
|
38
39
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxAvatarImageDirective, decorators: [{
|
39
40
|
type: Directive,
|
40
41
|
args: [{
|
41
42
|
selector: 'img[rdxAvatarImage]',
|
42
|
-
exportAs: 'rdxAvatarImage',
|
43
43
|
standalone: true,
|
44
|
+
exportAs: 'rdxAvatarImage',
|
44
45
|
host: {
|
45
|
-
role: 'img',
|
46
46
|
'(load)': 'onLoad()',
|
47
|
-
'(error)': 'onError()'
|
47
|
+
'(error)': 'onError()',
|
48
|
+
'[style.display]': '(imageLoadingStatus() === "loaded")? null : "none"'
|
48
49
|
}
|
49
50
|
}]
|
50
|
-
}]
|
51
|
-
|
52
|
-
}] } });
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLWltYWdlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvYXZhdGFyL3NyYy9hdmF0YXItaW1hZ2UuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxZQUFZLEVBQXlCLE1BQU0seUJBQXlCLENBQUM7O0FBZ0I5RSxNQUFNLE9BQU8sdUJBQXVCO0lBVnBDO1FBV3FCLFdBQU0sR0FBRyxZQUFZLEVBQUUsQ0FBQztRQUV4QixlQUFVLEdBQUcsTUFBTSxDQUErQixVQUFVLENBQUMsQ0FBQztRQUUvRTs7O1dBR0c7UUFDTywwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztLQTZCL0U7SUEzQkcsUUFBUTtRQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFUyxNQUFNO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsT0FBTztRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFDekMsQ0FBQzsrR0FyQ1EsdUJBQXVCO21HQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBVm5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDRixJQUFJLEVBQUUsS0FBSzt3QkFDWCxRQUFRLEVBQUUsVUFBVTt3QkFDcEIsU0FBUyxFQUFFLFdBQVc7cUJBQ3pCO2lCQUNKOzhCQVVhLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RBdmF0YXIsIFJkeEltYWdlTG9hZGluZ1N0YXR1cyB9IGZyb20gJy4vYXZhdGFyLXJvb3QuZGlyZWN0aXZlJztcblxuZXhwb3J0IGludGVyZmFjZSBSZHhBdmF0YXJJbWFnZVByb3BzIHtcbiAgICBvbkxvYWRpbmdTdGF0dXNDaGFuZ2U/OiBFdmVudEVtaXR0ZXI8UmR4SW1hZ2VMb2FkaW5nU3RhdHVzPjtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpbWdbcmR4QXZhdGFySW1hZ2VdJyxcbiAgICBleHBvcnRBczogJ3JkeEF2YXRhckltYWdlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgcm9sZTogJ2ltZycsXG4gICAgICAgICcobG9hZCknOiAnb25Mb2FkKCknLFxuICAgICAgICAnKGVycm9yKSc6ICdvbkVycm9yKCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBSZHhBdmF0YXJJbWFnZURpcmVjdGl2ZSBpbXBsZW1lbnRzIFJkeEF2YXRhckltYWdlUHJvcHMsIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdmF0YXIgPSBpbmplY3RBdmF0YXIoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxJbWFnZUVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGl0IHdpbGwgb25seSByZW5kZXIgd2hlbiBpdCBoYXMgbG9hZGVkLlxuICAgICAqIFlvdSBjYW4gdXNlIHRoZSBgb25Mb2FkaW5nU3RhdHVzQ2hhbmdlYCBoYW5kbGVyIGlmIHlvdSBuZWVkIG1vcmUgY29udHJvbC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Mb2FkaW5nU3RhdHVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSZHhJbWFnZUxvYWRpbmdTdGF0dXM+KCk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hdmF0YXIuX3NldFN0YXRlKCdsb2FkaW5nJyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLm5hdGl2ZUVsZW1lbnQuc3JjKSB7XG4gICAgICAgICAgICB0aGlzLmF2YXRhci5fc2V0U3RhdGUoJ2Vycm9yJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLmF2YXRhci5fc2V0U3RhdGUoJ2xvYWRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkxvYWRpbmdTdGF0dXNDaGFuZ2UuZW1pdCh0aGlzLmF2YXRhci5fc3RhdGUoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uTG9hZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hdmF0YXIuX3NldFN0YXRlKCdsb2FkZWQnKTtcbiAgICAgICAgdGhpcy5vbkxvYWRpbmdTdGF0dXNDaGFuZ2UuZW1pdCgnbG9hZGVkJyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRXJyb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXZhdGFyLl9zZXRTdGF0ZSgnZXJyb3InKTtcbiAgICAgICAgdGhpcy5vbkxvYWRpbmdTdGF0dXNDaGFuZ2UuZW1pdCgnZXJyb3InKTtcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cbn1cbiJdfQ==
|
51
|
+
}] });
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLWltYWdlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvYXZhdGFyL3NyYy9hdmF0YXItaW1hZ2UuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsb0JBQW9CLEVBQXlCLE1BQU0seUJBQXlCLENBQUM7O0FBWXRGLE1BQU0sT0FBTyx1QkFBdUI7SUFWcEM7UUFXcUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFDLGVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUE0QixDQUFBLENBQUMsQ0FBQztRQUUxRCxRQUFHLEdBQUcsQ0FBQSxLQUFLLENBQUMsUUFBZ0IsQ0FBQSxDQUFDO1FBRTdCLDBCQUFxQixHQUFHLE1BQU0sRUFBeUIsQ0FBQztRQUV4RCx1QkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7S0E0QnRGO0lBMUJHLFFBQVE7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUE2QjtRQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3pDLENBQUM7K0dBbkNRLHVCQUF1QjttR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQVZuQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixJQUFJLEVBQUU7d0JBQ0YsUUFBUSxFQUFFLFVBQVU7d0JBQ3BCLFNBQVMsRUFBRSxXQUFXO3dCQUN0QixpQkFBaUIsRUFBRSxvREFBb0Q7cUJBQzFFO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgT25Jbml0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJkeEF2YXRhclJvb3RDb250ZXh0LCBSZHhJbWFnZUxvYWRpbmdTdGF0dXMgfSBmcm9tICcuL2F2YXRhci1yb290LmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaW1nW3JkeEF2YXRhckltYWdlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBleHBvcnRBczogJ3JkeEF2YXRhckltYWdlJyxcbiAgICBob3N0OiB7XG4gICAgICAgICcobG9hZCknOiAnb25Mb2FkKCknLFxuICAgICAgICAnKGVycm9yKSc6ICdvbkVycm9yKCknLFxuICAgICAgICAnW3N0eWxlLmRpc3BsYXldJzogJyhpbWFnZUxvYWRpbmdTdGF0dXMoKSA9PT0gXCJsb2FkZWRcIik/IG51bGwgOiBcIm5vbmVcIidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFJkeEF2YXRhckltYWdlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF2YXRhclJvb3QgPSBpbmplY3QoUmR4QXZhdGFyUm9vdENvbnRleHQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxJbWFnZUVsZW1lbnQ+KTtcblxuICAgIHJlYWRvbmx5IHNyYyA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz47XG5cbiAgICByZWFkb25seSBvbkxvYWRpbmdTdGF0dXNDaGFuZ2UgPSBvdXRwdXQ8UmR4SW1hZ2VMb2FkaW5nU3RhdHVzPigpO1xuXG4gICAgcmVhZG9ubHkgaW1hZ2VMb2FkaW5nU3RhdHVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdmF0YXJSb290LmltYWdlTG9hZGluZ1N0YXR1cygpKTtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubmF0aXZlRWxlbWVudC5zcmMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VTdGF0dXMoJ2Vycm9yJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEltYWdlU3RhdHVzKCdsb2FkZWQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VTdGF0dXMoJ2xvYWRpbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTG9hZCgpIHtcbiAgICAgICAgdGhpcy5zZXRJbWFnZVN0YXR1cygnbG9hZGVkJyk7XG4gICAgfVxuXG4gICAgb25FcnJvcigpIHtcbiAgICAgICAgdGhpcy5zZXRJbWFnZVN0YXR1cygnZXJyb3InKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEltYWdlU3RhdHVzKHN0YXR1czogUmR4SW1hZ2VMb2FkaW5nU3RhdHVzKSB7XG4gICAgICAgIHRoaXMuYXZhdGFyUm9vdC5pbWFnZUxvYWRpbmdTdGF0dXMuc2V0KHN0YXR1cyk7XG4gICAgICAgIHRoaXMub25Mb2FkaW5nU3RhdHVzQ2hhbmdlLmVtaXQoc3RhdHVzKTtcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cbn1cbiJdfQ==
|
@@ -1,30 +1,18 @@
|
|
1
|
-
import { Directive,
|
1
|
+
import { Directive, Injectable, signal } from '@angular/core';
|
2
2
|
import * as i0 from "@angular/core";
|
3
|
-
|
4
|
-
export function injectAvatar() {
|
5
|
-
return inject(RdxAvatarToken);
|
6
|
-
}
|
7
|
-
export class RdxAvatarRootDirective {
|
3
|
+
export class RdxAvatarRootContext {
|
8
4
|
constructor() {
|
9
|
-
|
10
|
-
* A readonly signal property that holds the current state of image loading.
|
11
|
-
* To set a new status, use the `setState` method of the component.
|
12
|
-
* @internal
|
13
|
-
*/
|
14
|
-
this._state = signal('idle');
|
15
|
-
}
|
16
|
-
/**
|
17
|
-
* Set the avatar state.
|
18
|
-
* @param state The new image loading status to set. This value should be one of the predefined states
|
19
|
-
* in the `ImageLoadingStatus`
|
20
|
-
* @returns void This method does not return a value.
|
21
|
-
* @internal
|
22
|
-
*/
|
23
|
-
_setState(state) {
|
24
|
-
this._state.set(state);
|
5
|
+
this.imageLoadingStatus = signal('loading');
|
25
6
|
}
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxAvatarRootContext, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
8
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxAvatarRootContext }); }
|
9
|
+
}
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxAvatarRootContext, decorators: [{
|
11
|
+
type: Injectable
|
12
|
+
}] });
|
13
|
+
export class RdxAvatarRootDirective {
|
26
14
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxAvatarRootDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
27
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: RdxAvatarRootDirective, isStandalone: true, selector: "span[rdxAvatarRoot]", providers: [
|
15
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: RdxAvatarRootDirective, isStandalone: true, selector: "span[rdxAvatarRoot]", providers: [RdxAvatarRootContext], exportAs: ["rdxAvatarRoot"], ngImport: i0 }); }
|
28
16
|
}
|
29
17
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxAvatarRootDirective, decorators: [{
|
30
18
|
type: Directive,
|
@@ -32,7 +20,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
32
20
|
selector: 'span[rdxAvatarRoot]',
|
33
21
|
exportAs: 'rdxAvatarRoot',
|
34
22
|
standalone: true,
|
35
|
-
providers: [
|
23
|
+
providers: [RdxAvatarRootContext]
|
36
24
|
}]
|
37
25
|
}] });
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLXJvb3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9hdmF0YXIvc3JjL2F2YXRhci1yb290LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzlELE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFFYSx1QkFBa0IsR0FBRyxNQUFNLENBQXdCLFNBQVMsQ0FBQyxDQUFDO0tBQzFFOytHQUZZLG9CQUFvQjttSEFBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVOztBQVdYLE1BQU0sT0FBTyxzQkFBc0I7K0dBQXRCLHNCQUFzQjttR0FBdEIsc0JBQXNCLGtFQUZwQixDQUFDLG9CQUFvQixDQUFDOzs0RkFFeEIsc0JBQXNCO2tCQU5sQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLENBQUMsb0JBQW9CLENBQUM7aUJBQ3BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgUmR4SW1hZ2VMb2FkaW5nU3RhdHVzID0gJ2lkbGUnIHwgJ2xvYWRpbmcnIHwgJ2xvYWRlZCcgfCAnZXJyb3InO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmR4QXZhdGFyUm9vdENvbnRleHQge1xuICAgIHJlYWRvbmx5IGltYWdlTG9hZGluZ1N0YXR1cyA9IHNpZ25hbDxSZHhJbWFnZUxvYWRpbmdTdGF0dXM+KCdsb2FkaW5nJyk7XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnc3BhbltyZHhBdmF0YXJSb290XScsXG4gICAgZXhwb3J0QXM6ICdyZHhBdmF0YXJSb290JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHByb3ZpZGVyczogW1JkeEF2YXRhclJvb3RDb250ZXh0XVxufSlcbmV4cG9ydCBjbGFzcyBSZHhBdmF0YXJSb290RGlyZWN0aXZlIHt9XG4iXX0=
|
@@ -1,6 +1,36 @@
|
|
1
|
+
import { NgModule } from '@angular/core';
|
2
|
+
import { RdxCheckboxButtonDirective } from './src/checkbox-button.directive';
|
3
|
+
import { RdxCheckboxIndicatorDirective } from './src/checkbox-indicator.directive';
|
4
|
+
import { RdxCheckboxInputDirective } from './src/checkbox-input.directive';
|
5
|
+
import { RdxCheckboxDirective } from './src/checkbox.directive';
|
6
|
+
import * as i0 from "@angular/core";
|
1
7
|
export * from './src/checkbox-button.directive';
|
2
8
|
export * from './src/checkbox-indicator.directive';
|
3
9
|
export * from './src/checkbox-input.directive';
|
4
10
|
export * from './src/checkbox.directive';
|
5
11
|
export * from './src/checkbox.token';
|
6
|
-
|
12
|
+
const _imports = [
|
13
|
+
RdxCheckboxInputDirective,
|
14
|
+
RdxCheckboxDirective,
|
15
|
+
RdxCheckboxButtonDirective,
|
16
|
+
RdxCheckboxIndicatorDirective
|
17
|
+
];
|
18
|
+
export class RdxCheckboxModule {
|
19
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxCheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
20
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: RdxCheckboxModule, imports: [RdxCheckboxInputDirective,
|
21
|
+
RdxCheckboxDirective,
|
22
|
+
RdxCheckboxButtonDirective,
|
23
|
+
RdxCheckboxIndicatorDirective], exports: [RdxCheckboxInputDirective,
|
24
|
+
RdxCheckboxDirective,
|
25
|
+
RdxCheckboxButtonDirective,
|
26
|
+
RdxCheckboxIndicatorDirective] }); }
|
27
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxCheckboxModule }); }
|
28
|
+
}
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxCheckboxModule, decorators: [{
|
30
|
+
type: NgModule,
|
31
|
+
args: [{
|
32
|
+
imports: [..._imports],
|
33
|
+
exports: [..._imports]
|
34
|
+
}]
|
35
|
+
}] });
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL2NoZWNrYm94L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0UsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRWhFLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxNQUFNLFFBQVEsR0FBRztJQUNiLHlCQUF5QjtJQUN6QixvQkFBb0I7SUFDcEIsMEJBQTBCO0lBQzFCLDZCQUE2QjtDQUNoQyxDQUFDO0FBTUYsTUFBTSxPQUFPLGlCQUFpQjsrR0FBakIsaUJBQWlCO2dIQUFqQixpQkFBaUIsWUFWMUIseUJBQXlCO1lBQ3pCLG9CQUFvQjtZQUNwQiwwQkFBMEI7WUFDMUIsNkJBQTZCLGFBSDdCLHlCQUF5QjtZQUN6QixvQkFBb0I7WUFDcEIsMEJBQTBCO1lBQzFCLDZCQUE2QjtnSEFPcEIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUo3QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUN0QixPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR4Q2hlY2tib3hCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuL3NyYy9jaGVja2JveC1idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IFJkeENoZWNrYm94SW5kaWNhdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9zcmMvY2hlY2tib3gtaW5kaWNhdG9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZHhDaGVja2JveElucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi9zcmMvY2hlY2tib3gtaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJkeENoZWNrYm94RGlyZWN0aXZlIH0gZnJvbSAnLi9zcmMvY2hlY2tib3guZGlyZWN0aXZlJztcblxuZXhwb3J0ICogZnJvbSAnLi9zcmMvY2hlY2tib3gtYnV0dG9uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9jaGVja2JveC1pbmRpY2F0b3IuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2NoZWNrYm94LWlucHV0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9jaGVja2JveC5kaXJlY3RpdmUnO1xuZXhwb3J0IHR5cGUgeyBDaGVja2JveFN0YXRlIH0gZnJvbSAnLi9zcmMvY2hlY2tib3guZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2NoZWNrYm94LnRva2VuJztcblxuY29uc3QgX2ltcG9ydHMgPSBbXG4gICAgUmR4Q2hlY2tib3hJbnB1dERpcmVjdGl2ZSxcbiAgICBSZHhDaGVja2JveERpcmVjdGl2ZSxcbiAgICBSZHhDaGVja2JveEJ1dHRvbkRpcmVjdGl2ZSxcbiAgICBSZHhDaGVja2JveEluZGljYXRvckRpcmVjdGl2ZVxuXTtcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbLi4uX2ltcG9ydHNdLFxuICAgIGV4cG9ydHM6IFsuLi5faW1wb3J0c11cbn0pXG5leHBvcnQgY2xhc3MgUmR4Q2hlY2tib3hNb2R1bGUge31cbiJdfQ==
|
@@ -8,13 +8,13 @@ export class RdxCheckboxButtonDirective {
|
|
8
8
|
this.elementId = computed(() => (this.id() ? this.id() : `rdx-checkbox-${this.id()}`));
|
9
9
|
}
|
10
10
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxCheckboxButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
11
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxCheckboxButtonDirective, isStandalone: true, selector: "button[
|
11
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxCheckboxButtonDirective, isStandalone: true, selector: "button[rdxCheckboxButton]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button", "role": "checkbox", "tabindex": "-1" }, properties: { "checked": "checkbox.checked", "disabled": "checkbox.disabled", "required": "checkbox.required", "attr.id": "elementId()", "attr.aria-checked": "checkbox.indeterminate ? \"mixed\" : checkbox.checked", "attr.aria-required": "checkbox.required ? \"\" : null", "attr.data-state": "checkbox.state", "attr.data-disabled": "checkbox.disabled ? \"\" : null" } }, ngImport: i0 }); }
|
12
12
|
}
|
13
13
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxCheckboxButtonDirective, decorators: [{
|
14
14
|
type: Directive,
|
15
15
|
args: [{
|
16
16
|
standalone: true,
|
17
|
-
selector: 'button[
|
17
|
+
selector: 'button[rdxCheckboxButton]',
|
18
18
|
host: {
|
19
19
|
type: 'button',
|
20
20
|
role: 'checkbox',
|
@@ -30,4 +30,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
30
30
|
}
|
31
31
|
}]
|
32
32
|
}] });
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtYnV0dG9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWJ1dHRvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFtQmxELE1BQU0sT0FBTywwQkFBMEI7SUFqQnZDO1FBa0J1QixhQUFRLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFFdEMsT0FBRSxHQUFHLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFFdEIsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hHOytHQU5ZLDBCQUEwQjttR0FBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQWpCdEMsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsSUFBSSxFQUFFO3dCQUNGLElBQUksRUFBRSxRQUFRO3dCQUNkLElBQUksRUFBRSxVQUFVO3dCQUNoQixRQUFRLEVBQUUsSUFBSTt3QkFDZCxXQUFXLEVBQUUsa0JBQWtCO3dCQUMvQixZQUFZLEVBQUUsbUJBQW1CO3dCQUNqQyxZQUFZLEVBQUUsbUJBQW1CO3dCQUNqQyxXQUFXLEVBQUUsYUFBYTt3QkFDMUIscUJBQXFCLEVBQUUscURBQXFEO3dCQUM1RSxzQkFBc0IsRUFBRSwrQkFBK0I7d0JBQ3ZELG1CQUFtQixFQUFFLGdCQUFnQjt3QkFDckMsc0JBQXNCLEVBQUUsK0JBQStCO3FCQUMxRDtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBEaXJlY3RpdmUsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RDaGVja2JveCB9IGZyb20gJy4vY2hlY2tib3gudG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnYnV0dG9uW3JkeENoZWNrYm94QnV0dG9uXScsXG4gICAgaG9zdDoge1xuICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgcm9sZTogJ2NoZWNrYm94JyxcbiAgICAgICAgdGFiaW5kZXg6ICctMScsXG4gICAgICAgICdbY2hlY2tlZF0nOiAnY2hlY2tib3guY2hlY2tlZCcsXG4gICAgICAgICdbZGlzYWJsZWRdJzogJ2NoZWNrYm94LmRpc2FibGVkJyxcbiAgICAgICAgJ1tyZXF1aXJlZF0nOiAnY2hlY2tib3gucmVxdWlyZWQnLFxuICAgICAgICAnW2F0dHIuaWRdJzogJ2VsZW1lbnRJZCgpJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtY2hlY2tlZF0nOiAnY2hlY2tib3guaW5kZXRlcm1pbmF0ZSA/IFwibWl4ZWRcIiA6IGNoZWNrYm94LmNoZWNrZWQnLFxuICAgICAgICAnW2F0dHIuYXJpYS1yZXF1aXJlZF0nOiAnY2hlY2tib3gucmVxdWlyZWQgPyBcIlwiIDogbnVsbCcsXG4gICAgICAgICdbYXR0ci5kYXRhLXN0YXRlXSc6ICdjaGVja2JveC5zdGF0ZScsXG4gICAgICAgICdbYXR0ci5kYXRhLWRpc2FibGVkXSc6ICdjaGVja2JveC5kaXNhYmxlZCA/IFwiXCIgOiBudWxsJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgUmR4Q2hlY2tib3hCdXR0b25EaXJlY3RpdmUge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjaGVja2JveCA9IGluamVjdENoZWNrYm94KCk7XG5cbiAgICByZWFkb25seSBpZCA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVsZW1lbnRJZCA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlkKCkgPyB0aGlzLmlkKCkgOiBgcmR4LWNoZWNrYm94LSR7dGhpcy5pZCgpfWApKTtcbn1cbiJdfQ==
|