@zcomponent/core 0.0.2 → 0.0.5
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/css/zcomponent.css +12 -0
- package/lib/behaviors/LaunchURL.d.ts +5 -0
- package/lib/behaviors/LaunchURL.js +4 -0
- package/lib/behaviors/LogAnalyticsEvent.d.ts +4 -0
- package/lib/behaviors/LogAnalyticsEvent.js +4 -0
- package/lib/behaviors/PlaySound.d.ts +2 -0
- package/lib/behaviors/PlaySound.js +6 -1
- package/lib/components/DefaultLoader.d.ts +1 -1
- package/lib/components/LongLoad.d.ts +45 -0
- package/lib/components/LongLoad.js +28 -0
- package/lib/contexts/canvascontext.d.ts +8 -2
- package/lib/contexts/canvascontext.js +28 -3
- package/lib/contexts/cookieconsentcontext.d.ts +5 -5
- package/lib/contexts/environmentcontext.d.ts +1 -0
- package/lib/contexts/environmentcontext.js +3 -0
- package/lib/contexts/loadcontext.d.ts +4 -4
- package/lib/event.d.ts +1 -1
- package/lib/observable.d.ts +9 -6
- package/package.json +1 -1
package/css/zcomponent.css
CHANGED
|
@@ -32,4 +32,16 @@
|
|
|
32
32
|
background-color: white;
|
|
33
33
|
height: 12px;
|
|
34
34
|
border-radius: 6px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
#zcomponent-overlay {
|
|
38
|
+
position: fixed;
|
|
39
|
+
top: 0;
|
|
40
|
+
left: 0;
|
|
41
|
+
pointer-events: none;
|
|
42
|
+
overflow: hidden;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
#zcomponent-overlay > * {
|
|
46
|
+
pointer-events: auto;
|
|
35
47
|
}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { ActionBehavior } from "../actionbehavior";
|
|
2
2
|
/**
|
|
3
|
+
* Navigates the user to the provided URL.
|
|
4
|
+
*
|
|
5
|
+
* **Important Note**: Safari on iOS will not open URLs in new tabs for pointer events except `onPointerUp`.
|
|
6
|
+
*
|
|
3
7
|
* @zbehavior
|
|
4
8
|
* @zgroup Actions
|
|
5
9
|
*/
|
|
@@ -12,6 +16,7 @@ export declare class LaunchURL extends ActionBehavior {
|
|
|
12
16
|
/**
|
|
13
17
|
* If true, the URL will be opened in a new tab (using target '_blank')
|
|
14
18
|
* @zprop
|
|
19
|
+
* @zdefault true
|
|
15
20
|
*/
|
|
16
21
|
openInNew: boolean;
|
|
17
22
|
perform(): void;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { ActionBehavior } from "../actionbehavior";
|
|
2
2
|
/**
|
|
3
|
+
* Logs an event through the currently configured analytics provider(s).
|
|
4
|
+
*
|
|
5
|
+
* Note: you must have added an analytics provider to the Hierarchy in one of your components for this behavior to have any effect.
|
|
6
|
+
*
|
|
3
7
|
* @zbehavior
|
|
4
8
|
* @zgroup Actions
|
|
5
9
|
*/
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { ActionBehavior } from "../actionbehavior";
|
|
2
2
|
import { logEvent } from "../contexts/analyticscontext";
|
|
3
3
|
/**
|
|
4
|
+
* Logs an event through the currently configured analytics provider(s).
|
|
5
|
+
*
|
|
6
|
+
* Note: you must have added an analytics provider to the Hierarchy in one of your components for this behavior to have any effect.
|
|
7
|
+
*
|
|
4
8
|
* @zbehavior
|
|
5
9
|
* @zgroup Actions
|
|
6
10
|
*/
|
|
@@ -2,6 +2,8 @@ import { ActionBehavior, } from "../actionbehavior";
|
|
|
2
2
|
import { registerBehaviorRunAtDesignTime } from "../behavior";
|
|
3
3
|
import { registerLoadable } from "../contexts/loadcontext";
|
|
4
4
|
/**
|
|
5
|
+
* Plays a sound
|
|
6
|
+
*
|
|
5
7
|
* @zbehavior
|
|
6
8
|
* @zgroup Actions
|
|
7
9
|
*/
|
|
@@ -12,7 +14,10 @@ export class PlaySound extends ActionBehavior {
|
|
|
12
14
|
this._elm.preload = 'auto';
|
|
13
15
|
registerLoadable(contextManager, new Promise((resolve, reject) => {
|
|
14
16
|
this._elm.addEventListener('canplaythrough', () => resolve());
|
|
15
|
-
this._elm.addEventListener('error',
|
|
17
|
+
this._elm.addEventListener('error', err => {
|
|
18
|
+
console.error('Unable to create PlaySound', err);
|
|
19
|
+
reject(err);
|
|
20
|
+
});
|
|
16
21
|
}));
|
|
17
22
|
this._elm.src = props.source;
|
|
18
23
|
}
|
|
@@ -23,7 +23,7 @@ export declare class DefaultLoader extends Component<DefaultLoaderConstructorPro
|
|
|
23
23
|
* @zgroup Design Time
|
|
24
24
|
* @zgrouppriority 30
|
|
25
25
|
*/
|
|
26
|
-
preview: Observable<boolean>;
|
|
26
|
+
preview: Observable<boolean, never>;
|
|
27
27
|
/** @zprop
|
|
28
28
|
* @zgroup Text
|
|
29
29
|
* @zgrouppriority 20
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Component, ConstructorProps, ContextManager } from "..";
|
|
2
|
+
export interface LongLoadConstructorProps extends ConstructorProps {
|
|
3
|
+
/**
|
|
4
|
+
* The number of loading processes to simulate
|
|
5
|
+
* @zprop
|
|
6
|
+
* @zgroup LongLoad
|
|
7
|
+
* @zgrouppriority 10
|
|
8
|
+
* @zdefault 10
|
|
9
|
+
*/
|
|
10
|
+
numberOfLoads: number;
|
|
11
|
+
/**
|
|
12
|
+
* The shortest time (in milliseconds) that a given load should take
|
|
13
|
+
* @zprop
|
|
14
|
+
* @zgroup LongLoad
|
|
15
|
+
* @zgrouppriority 10
|
|
16
|
+
* @zdefault 500
|
|
17
|
+
*/
|
|
18
|
+
minimumLoadTime: number;
|
|
19
|
+
/**
|
|
20
|
+
* The shortest time (in milliseconds) that a given load should take
|
|
21
|
+
* @zprop
|
|
22
|
+
* @zgroup LongLoad
|
|
23
|
+
* @zgrouppriority 10
|
|
24
|
+
* @zdefault 5000
|
|
25
|
+
*/
|
|
26
|
+
maximumLoadTime: number;
|
|
27
|
+
/**
|
|
28
|
+
* If the long loading process should occur in production builds (in addition to development builds)
|
|
29
|
+
* @zprop
|
|
30
|
+
* @zgroup LongLoad
|
|
31
|
+
* @zgrouppriority 10
|
|
32
|
+
* @zdefault false
|
|
33
|
+
*/
|
|
34
|
+
runInProduction: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Simulates long random loading times to facilitate development and debugging of loading processes.
|
|
38
|
+
*
|
|
39
|
+
* @zcomponent
|
|
40
|
+
* @zicon settings
|
|
41
|
+
* @zgroup Advanced
|
|
42
|
+
*/
|
|
43
|
+
export declare class LongLoad extends Component<LongLoadConstructorProps> {
|
|
44
|
+
constructor(props: LongLoadConstructorProps, contextManager: ContextManager);
|
|
45
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Component, isDevelopmentBuild, registerLoadable } from "..";
|
|
2
|
+
/**
|
|
3
|
+
* Simulates long random loading times to facilitate development and debugging of loading processes.
|
|
4
|
+
*
|
|
5
|
+
* @zcomponent
|
|
6
|
+
* @zicon settings
|
|
7
|
+
* @zgroup Advanced
|
|
8
|
+
*/
|
|
9
|
+
export class LongLoad extends Component {
|
|
10
|
+
constructor(props, contextManager) {
|
|
11
|
+
super(props, contextManager);
|
|
12
|
+
if (!props.runInProduction && !isDevelopmentBuild(contextManager))
|
|
13
|
+
return;
|
|
14
|
+
const minimumLoadTime = props.minimumLoadTime ?? 500;
|
|
15
|
+
const maximumLoadTime = props.maximumLoadTime ?? 5000;
|
|
16
|
+
for (let i = 0; i < (props.numberOfLoads ?? 10); i++) {
|
|
17
|
+
registerLoadable(contextManager, new Promise(resolve => {
|
|
18
|
+
if (this.disposed)
|
|
19
|
+
return;
|
|
20
|
+
setTimeout(() => {
|
|
21
|
+
if (this.disposed)
|
|
22
|
+
return;
|
|
23
|
+
resolve();
|
|
24
|
+
}, minimumLoadTime + Math.random() * (maximumLoadTime - minimumLoadTime));
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -7,9 +7,15 @@ export interface CanvasContext {
|
|
|
7
7
|
onAfterRender: Event<[number]>;
|
|
8
8
|
size: Observable<[number, number]>;
|
|
9
9
|
dispose: () => void;
|
|
10
|
+
overlayDefault: HTMLDivElement;
|
|
11
|
+
overlay: Observable<HTMLDivElement>;
|
|
10
12
|
}
|
|
11
|
-
export
|
|
13
|
+
export interface CanvasContextOptions {
|
|
14
|
+
overlay: HTMLDivElement;
|
|
15
|
+
}
|
|
16
|
+
export declare const CanvasContext: import("../context").ContextTypeWithDefault<CanvasContext, [canvas?: HTMLCanvasElement | undefined, options?: CanvasContextOptions | undefined]>;
|
|
12
17
|
export declare function useCanvas(mgr: ContextManager): HTMLCanvasElement;
|
|
13
|
-
export declare function
|
|
18
|
+
export declare function useOverlay(mgr: ContextManager): Observable<HTMLDivElement, never>;
|
|
19
|
+
export declare function useCanvasSize(mgr: ContextManager): Observable<[number, number], never>;
|
|
14
20
|
export declare function useOnBeforeRender(mgr: ContextManager): Event<[number]>;
|
|
15
21
|
export declare function useOnAfterRender(mgr: ContextManager): Event<[number]>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineContextType } from '../context';
|
|
2
2
|
import { Event } from '../event';
|
|
3
3
|
import { Observable } from '../observable';
|
|
4
|
-
export const CanvasContext = defineContextType((ctx, canvas) => {
|
|
4
|
+
export const CanvasContext = defineContextType((ctx, canvas, options) => {
|
|
5
5
|
if (!canvas) {
|
|
6
6
|
canvas = document.createElement("canvas");
|
|
7
7
|
canvas.style.position = "fixed";
|
|
@@ -12,6 +12,11 @@ export const CanvasContext = defineContextType((ctx, canvas) => {
|
|
|
12
12
|
canvas.style.touchAction = "none";
|
|
13
13
|
document.body.append(canvas);
|
|
14
14
|
}
|
|
15
|
+
const overlayDefault = options?.overlay ?? document.createElement('div');
|
|
16
|
+
overlayDefault.id = 'zcomponent-overlay';
|
|
17
|
+
if (!options?.overlay) {
|
|
18
|
+
document.body.append(overlayDefault);
|
|
19
|
+
}
|
|
15
20
|
const size = new Observable([canvas.clientWidth, canvas.clientHeight]);
|
|
16
21
|
const resizeObserver = new ResizeObserver(entries => {
|
|
17
22
|
for (const entry of entries) {
|
|
@@ -21,12 +26,29 @@ export const CanvasContext = defineContextType((ctx, canvas) => {
|
|
|
21
26
|
}
|
|
22
27
|
});
|
|
23
28
|
resizeObserver.observe(canvas);
|
|
29
|
+
const onBeforeRender = new Event();
|
|
30
|
+
let lastRect;
|
|
31
|
+
onBeforeRender.bindfn(() => {
|
|
32
|
+
const rect = canvas.getBoundingClientRect();
|
|
33
|
+
if (lastRect && lastRect.top === rect.top && lastRect.left === rect.left && lastRect.width === rect.width && lastRect.height === rect.height)
|
|
34
|
+
return;
|
|
35
|
+
overlayDefault.style.top = rect.top.toString() + 'px';
|
|
36
|
+
overlayDefault.style.left = rect.left.toString() + 'px';
|
|
37
|
+
overlayDefault.style.width = rect.width.toString() + 'px';
|
|
38
|
+
overlayDefault.style.height = rect.height.toString() + 'px';
|
|
39
|
+
lastRect = rect;
|
|
40
|
+
});
|
|
41
|
+
const onAfterRender = new Event();
|
|
24
42
|
return {
|
|
25
43
|
canvas,
|
|
26
|
-
onBeforeRender
|
|
27
|
-
onAfterRender
|
|
44
|
+
onBeforeRender,
|
|
45
|
+
onAfterRender,
|
|
28
46
|
size,
|
|
47
|
+
overlayDefault,
|
|
48
|
+
overlay: new Observable(overlayDefault, undefined, false),
|
|
29
49
|
dispose: () => {
|
|
50
|
+
onBeforeRender.clear();
|
|
51
|
+
onAfterRender.clear();
|
|
30
52
|
resizeObserver.disconnect();
|
|
31
53
|
}
|
|
32
54
|
};
|
|
@@ -34,6 +56,9 @@ export const CanvasContext = defineContextType((ctx, canvas) => {
|
|
|
34
56
|
export function useCanvas(mgr) {
|
|
35
57
|
return mgr.get(CanvasContext).canvas;
|
|
36
58
|
}
|
|
59
|
+
export function useOverlay(mgr) {
|
|
60
|
+
return mgr.get(CanvasContext).overlay;
|
|
61
|
+
}
|
|
37
62
|
export function useCanvasSize(mgr) {
|
|
38
63
|
return mgr.get(CanvasContext).size;
|
|
39
64
|
}
|
|
@@ -27,12 +27,12 @@ export interface CookieConsentContext {
|
|
|
27
27
|
showSettings: Observable<(() => void) | undefined>;
|
|
28
28
|
}
|
|
29
29
|
export declare const CookieConsentContext: import("../context").ContextTypeWithDefault<CookieConsentContext, []>;
|
|
30
|
-
export declare function useCookieConsentFunctional(mgr: ContextManager): Observable<ConsentStatus>;
|
|
31
|
-
export declare function useCookieConsentPerformance(mgr: ContextManager): Observable<ConsentStatus>;
|
|
32
|
-
export declare function useCookieConsentMarketing(mgr: ContextManager): Observable<ConsentStatus>;
|
|
33
|
-
export declare function useCookieConsentStatus(mgr: ContextManager): Observable<Status>;
|
|
30
|
+
export declare function useCookieConsentFunctional(mgr: ContextManager): Observable<ConsentStatus, never>;
|
|
31
|
+
export declare function useCookieConsentPerformance(mgr: ContextManager): Observable<ConsentStatus, never>;
|
|
32
|
+
export declare function useCookieConsentMarketing(mgr: ContextManager): Observable<ConsentStatus, never>;
|
|
33
|
+
export declare function useCookieConsentStatus(mgr: ContextManager): Observable<Status, never>;
|
|
34
34
|
export declare function registerPerformanceVendor(mgr: ContextManager, vendor: Vendor): void;
|
|
35
35
|
export declare function registerMarketingVendor(mgr: ContextManager, vendor: Vendor): void;
|
|
36
36
|
export declare function usePerformanceVendors(mgr: ContextManager): Vendor[];
|
|
37
37
|
export declare function useMarketingVendors(mgr: ContextManager): Vendor[];
|
|
38
|
-
export declare function useShowCookieSettings(mgr: ContextManager): Observable<(() => void) | undefined>;
|
|
38
|
+
export declare function useShowCookieSettings(mgr: ContextManager): Observable<(() => void) | undefined, never>;
|
|
@@ -7,3 +7,4 @@ export interface EnvirontmentContext {
|
|
|
7
7
|
export declare const EnvironmentContext: import("../context").ContextTypeWithDefault<EnvirontmentContext, []>;
|
|
8
8
|
export declare function isDesignTime(ctx: ContextManager): boolean;
|
|
9
9
|
export declare function isEditTime(ctx: ContextManager): boolean;
|
|
10
|
+
export declare function isDevelopmentBuild(ctx: ContextManager): boolean;
|
|
@@ -12,3 +12,6 @@ export function isDesignTime(ctx) {
|
|
|
12
12
|
export function isEditTime(ctx) {
|
|
13
13
|
return ctx.get(EnvironmentContext).editTime.value;
|
|
14
14
|
}
|
|
15
|
+
export function isDevelopmentBuild(ctx) {
|
|
16
|
+
return (typeof process !== 'undefined' && process?.env?.NODE_ENV === 'development');
|
|
17
|
+
}
|
|
@@ -11,13 +11,13 @@ export interface LoadContext {
|
|
|
11
11
|
startWhenLoaded: () => void;
|
|
12
12
|
}
|
|
13
13
|
export declare const LoadContext: import("../context").ContextTypeWithDefault<LoadContext, []>;
|
|
14
|
-
export declare function useIsLoaded(mgr: ContextManager): Observable<boolean>;
|
|
14
|
+
export declare function useIsLoaded(mgr: ContextManager): Observable<boolean, never>;
|
|
15
15
|
export declare function isLoaded(mgr: ContextManager): boolean;
|
|
16
|
-
export declare function useIsStarted(mgr: ContextManager): Observable<boolean>;
|
|
16
|
+
export declare function useIsStarted(mgr: ContextManager): Observable<boolean, never>;
|
|
17
17
|
export declare function isStarted(mgr: ContextManager): boolean;
|
|
18
|
-
export declare function useIsConstructed(mgr: ContextManager): Observable<boolean>;
|
|
18
|
+
export declare function useIsConstructed(mgr: ContextManager): Observable<boolean, never>;
|
|
19
19
|
export declare function isConstructed(mgr: ContextManager): boolean;
|
|
20
|
-
export declare function useLoadPercent(mgr: ContextManager): Observable<number>;
|
|
20
|
+
export declare function useLoadPercent(mgr: ContextManager): Observable<number, never>;
|
|
21
21
|
export declare function registerLoadable(mgr: ContextManager, p: Promise<any>): void;
|
|
22
22
|
export declare function start(mgr: ContextManager): void;
|
|
23
23
|
export declare function startWhenLoaded(mgr: ContextManager): void;
|
package/lib/event.d.ts
CHANGED
package/lib/observable.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
declare type Resolved<T, M> = [T] extends [never] ? M : T;
|
|
2
|
+
export declare class Observable<T = never, M extends any[] | [] | never = never> {
|
|
2
3
|
private _default;
|
|
3
4
|
private _deep;
|
|
4
5
|
private _proxies;
|
|
@@ -6,11 +7,13 @@ export declare class Observable<T> {
|
|
|
6
7
|
private _nextToken;
|
|
7
8
|
private _handlersByToken;
|
|
8
9
|
private _tokenByHandler;
|
|
9
|
-
constructor(
|
|
10
|
-
|
|
10
|
+
constructor(def: M, withHandler?: ((v: M) => void), deep?: boolean);
|
|
11
|
+
constructor(def: T, withHandler?: ((v: T) => void), deep?: boolean);
|
|
12
|
+
get value(): Resolved<T, M>;
|
|
11
13
|
private _wrap;
|
|
12
|
-
set value(v: T | undefined);
|
|
13
|
-
withValue(fn: (v: T) => void): number;
|
|
14
|
-
removeWithValue(fnOrToken: number | ((v: T) => void)): void;
|
|
14
|
+
set value(v: Resolved<T, M> | undefined);
|
|
15
|
+
withValue(fn: (v: Resolved<T, M>) => void): number;
|
|
16
|
+
removeWithValue(fnOrToken: number | ((v: Resolved<T, M>) => void)): void;
|
|
15
17
|
private _emitValue;
|
|
16
18
|
}
|
|
19
|
+
export {};
|