canvasengine 2.0.0-beta.45 → 2.0.0-beta.47
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/dist/components/Container.d.ts +86 -0
- package/dist/components/Container.d.ts.map +1 -0
- package/dist/components/DOMContainer.d.ts +98 -0
- package/dist/components/DOMContainer.d.ts.map +1 -0
- package/dist/components/DOMElement.d.ts +16 -5
- package/dist/components/DOMElement.d.ts.map +1 -1
- package/dist/components/DOMSprite.d.ts +108 -0
- package/dist/components/DOMSprite.d.ts.map +1 -0
- package/dist/components/DisplayObject.d.ts +94 -0
- package/dist/components/DisplayObject.d.ts.map +1 -0
- package/dist/components/FocusContainer.d.ts +129 -0
- package/dist/components/FocusContainer.d.ts.map +1 -0
- package/dist/components/Mesh.d.ts +208 -0
- package/dist/components/Mesh.d.ts.map +1 -0
- package/dist/components/Sprite.d.ts +242 -0
- package/dist/components/Sprite.d.ts.map +1 -0
- package/dist/components/Viewport.d.ts +121 -0
- package/dist/components/Viewport.d.ts.map +1 -0
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/directives/Controls.d.ts +4 -4
- package/dist/directives/Controls.d.ts.map +1 -1
- package/dist/directives/ControlsBase.d.ts +1 -0
- package/dist/directives/ControlsBase.d.ts.map +1 -1
- package/dist/directives/FocusNavigation.d.ts +4 -22
- package/dist/directives/FocusNavigation.d.ts.map +1 -1
- package/dist/directives/KeyboardControls.d.ts +1 -0
- package/dist/directives/KeyboardControls.d.ts.map +1 -1
- package/dist/directives/Scheduler.d.ts.map +1 -1
- package/dist/directives/Shake.d.ts +1 -0
- package/dist/directives/Shake.d.ts.map +1 -1
- package/dist/engine/FocusManager.d.ts +10 -9
- package/dist/engine/FocusManager.d.ts.map +1 -1
- package/dist/engine/bootstrap.d.ts +1 -0
- package/dist/engine/bootstrap.d.ts.map +1 -1
- package/dist/engine/directive.d.ts +1 -1
- package/dist/engine/directive.d.ts.map +1 -1
- package/dist/engine/reactive.d.ts.map +1 -1
- package/dist/hooks/useFocus.d.ts.map +1 -1
- package/dist/index-DaGekQUW.js +2218 -0
- package/dist/index-DaGekQUW.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.global.js +3 -3
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +11868 -88
- package/dist/index.js.map +1 -1
- package/dist/utils/tabindex.d.ts +16 -0
- package/dist/utils/tabindex.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/components/DOMContainer.ts +186 -1
- package/src/components/DOMElement.ts +164 -37
- package/src/components/DOMSprite.ts +759 -0
- package/src/components/DisplayObject.ts +33 -7
- package/src/components/FocusContainer.ts +22 -26
- package/src/components/Sprite.ts +12 -3
- package/src/components/Text.ts +1 -1
- package/src/components/Viewport.ts +5 -5
- package/src/components/index.ts +2 -1
- package/src/directives/Controls.ts +5 -5
- package/src/directives/ControlsBase.ts +1 -0
- package/src/directives/FocusNavigation.ts +8 -146
- package/src/directives/KeyboardControls.ts +11 -2
- package/src/directives/Scheduler.ts +12 -4
- package/src/directives/Shake.ts +9 -6
- package/src/engine/FocusManager.ts +44 -29
- package/src/engine/bootstrap.ts +5 -2
- package/src/engine/directive.ts +2 -2
- package/src/engine/reactive.ts +84 -12
- package/src/hooks/useFocus.ts +2 -5
- package/src/index.ts +2 -1
- package/src/types/pixi-cull.d.ts +7 -0
- package/src/utils/tabindex.ts +70 -0
- package/testing/index.ts +31 -3
- package/tsconfig.json +3 -2
- package/dist/DebugRenderer-CSxse9YI.js +0 -172
- package/dist/DebugRenderer-CSxse9YI.js.map +0 -1
- package/dist/index-DH2ZMhYm.js +0 -13276
- package/dist/index-DH2ZMhYm.js.map +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { ComponentFunction } from '../engine/signal';
|
|
2
|
+
import { DisplayObjectProps } from './types/DisplayObject';
|
|
3
|
+
interface ContainerProps extends DisplayObjectProps {
|
|
4
|
+
sortableChildren?: boolean;
|
|
5
|
+
}
|
|
6
|
+
declare const CanvasContainer_base: {
|
|
7
|
+
new (): {
|
|
8
|
+
[x: string]: any;
|
|
9
|
+
"__#private@#canvasContext": {
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
} | null;
|
|
12
|
+
isFlex: boolean;
|
|
13
|
+
fullProps: import('..').Props;
|
|
14
|
+
isMounted: boolean;
|
|
15
|
+
_anchorPoints: import('pixi.js').ObservablePoint;
|
|
16
|
+
isCustomAnchor: boolean;
|
|
17
|
+
displayWidth: import('@signe/reactive').WritableSignal<number>;
|
|
18
|
+
displayHeight: import('@signe/reactive').WritableSignal<number>;
|
|
19
|
+
overrideProps: string[];
|
|
20
|
+
layout: any;
|
|
21
|
+
onBeforeDestroy: import('./DisplayObject').OnHook | null;
|
|
22
|
+
onAfterMount: import('./DisplayObject').OnHook | null;
|
|
23
|
+
subjectInit: import('rxjs').BehaviorSubject<any>;
|
|
24
|
+
disableLayout: boolean;
|
|
25
|
+
"__#private@#registeredEvents": Map<string, Function>;
|
|
26
|
+
"__#private@#computedLayoutBox": {
|
|
27
|
+
width?: number;
|
|
28
|
+
height?: number;
|
|
29
|
+
} | null;
|
|
30
|
+
"__#private@#element": import('..').Element<any> | null;
|
|
31
|
+
getElement(): import('..').Element<any> | null;
|
|
32
|
+
onLayoutComputed(_event: any): void;
|
|
33
|
+
get deltaRatio(): any;
|
|
34
|
+
get parentIsFlex(): any;
|
|
35
|
+
onInit(props: import('..').Props): void;
|
|
36
|
+
onMount(element: import('..').Element<any>, index?: number): Promise<void>;
|
|
37
|
+
onUpdate(props: import('..').Props): void;
|
|
38
|
+
onDestroy(parent: import('..').Element, afterDestroy?: () => void): Promise<void>;
|
|
39
|
+
setFlexDirection(direction: import('./types/DisplayObject').FlexDirection): void;
|
|
40
|
+
setFlexWrap(wrap: "wrap" | "nowrap" | "wrap-reverse"): void;
|
|
41
|
+
setAlignContent(align: import('./types/DisplayObject').AlignContent): void;
|
|
42
|
+
setAlignSelf(align: import('./types/DisplayObject').AlignContent): void;
|
|
43
|
+
setAlignItems(align: import('./types/DisplayObject').AlignContent): void;
|
|
44
|
+
setJustifyContent(justifyContent: "flex-start" | "flex-end" | "center" | "space-between" | "space-around"): void;
|
|
45
|
+
setPosition(position: import('./types/DisplayObject').EdgeSize): void;
|
|
46
|
+
setX(x: number): void;
|
|
47
|
+
setY(y: number): void;
|
|
48
|
+
setPadding(padding: import('./types/DisplayObject').EdgeSize): void;
|
|
49
|
+
setMargin(margin: import('./types/DisplayObject').EdgeSize): void;
|
|
50
|
+
setGap(gap: import('./types/DisplayObject').EdgeSize): void;
|
|
51
|
+
setBorder(border: import('./types/DisplayObject').EdgeSize): void;
|
|
52
|
+
setPositionType(positionType: "relative" | "absolute"): void;
|
|
53
|
+
setWidth(width: number): void;
|
|
54
|
+
setHeight(height: number): void;
|
|
55
|
+
getWidth(): number;
|
|
56
|
+
getHeight(): number;
|
|
57
|
+
setMinWidth(minWidth: number | string): void;
|
|
58
|
+
setMinHeight(minHeight: number | string): void;
|
|
59
|
+
setMaxWidth(maxWidth: number | string): void;
|
|
60
|
+
setMaxHeight(maxHeight: number | string): void;
|
|
61
|
+
setAspectRatio(aspectRatio: number): void;
|
|
62
|
+
setFlexGrow(flexGrow: number): void;
|
|
63
|
+
setFlexShrink(flexShrink: number): void;
|
|
64
|
+
setFlexBasis(flexBasis: number | string): void;
|
|
65
|
+
setRowGap(rowGap: number): void;
|
|
66
|
+
setColumnGap(columnGap: number): void;
|
|
67
|
+
setTop(top: number | string): void;
|
|
68
|
+
setLeft(left: number | string): void;
|
|
69
|
+
setRight(right: number | string): void;
|
|
70
|
+
setBottom(bottom: number | string): void;
|
|
71
|
+
setObjectFit(objectFit: import('./types/DisplayObject').ObjectFit): void;
|
|
72
|
+
setObjectPosition(objectPosition: import('./types/DisplayObject').ObjectPosition): void;
|
|
73
|
+
setTransformOrigin(transformOrigin: import('./types/DisplayObject').TransformOrigin): void;
|
|
74
|
+
};
|
|
75
|
+
[x: string]: any;
|
|
76
|
+
};
|
|
77
|
+
export declare class CanvasContainer extends CanvasContainer_base {
|
|
78
|
+
isCustomAnchor: boolean;
|
|
79
|
+
onUpdate(props: any): void;
|
|
80
|
+
onMount(args: any): Promise<void>;
|
|
81
|
+
}
|
|
82
|
+
export interface CanvasContainer extends DisplayObjectProps {
|
|
83
|
+
}
|
|
84
|
+
export declare const Container: ComponentFunction<ContainerProps>;
|
|
85
|
+
export {};
|
|
86
|
+
//# sourceMappingURL=Container.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/components/Container.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAI3D,UAAU,cAAe,SAAQ,kBAAkB;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;;;;;;;;;;;;;;;;;;;;;;iBAuDq/B,CAAC;kBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AArDxgC,qBAAa,eAAgB,SAAQ,oBAA4B;IAC/D,cAAc,UAAQ;IAEtB,QAAQ,CAAC,KAAK,KAAA;IAaR,OAAO,CAAC,IAAI,KAAA;CA0BnB;AAED,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;CAAG;AAI9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAIvD,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Element } from '../engine/reactive';
|
|
2
|
+
import { ComponentFunction } from '../engine/signal';
|
|
3
|
+
import { DisplayObjectProps } from './types/DisplayObject';
|
|
4
|
+
declare const CanvasDOMContainer_base: {
|
|
5
|
+
new (): {
|
|
6
|
+
[x: string]: any;
|
|
7
|
+
"__#private@#canvasContext": {
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
} | null;
|
|
10
|
+
isFlex: boolean;
|
|
11
|
+
fullProps: import('..').Props;
|
|
12
|
+
isMounted: boolean;
|
|
13
|
+
_anchorPoints: import('pixi.js').ObservablePoint;
|
|
14
|
+
isCustomAnchor: boolean;
|
|
15
|
+
displayWidth: import('@signe/reactive').WritableSignal<number>;
|
|
16
|
+
displayHeight: import('@signe/reactive').WritableSignal<number>;
|
|
17
|
+
overrideProps: string[];
|
|
18
|
+
layout: any;
|
|
19
|
+
onBeforeDestroy: import('./DisplayObject').OnHook | null;
|
|
20
|
+
onAfterMount: import('./DisplayObject').OnHook | null;
|
|
21
|
+
subjectInit: import('rxjs').BehaviorSubject<any>;
|
|
22
|
+
disableLayout: boolean;
|
|
23
|
+
"__#private@#registeredEvents": Map<string, Function>;
|
|
24
|
+
"__#private@#computedLayoutBox": {
|
|
25
|
+
width?: number;
|
|
26
|
+
height?: number;
|
|
27
|
+
} | null;
|
|
28
|
+
"__#private@#element": Element<any> | null;
|
|
29
|
+
getElement(): Element<any> | null;
|
|
30
|
+
onLayoutComputed(_event: any): void;
|
|
31
|
+
get deltaRatio(): any;
|
|
32
|
+
get parentIsFlex(): any;
|
|
33
|
+
onInit(props: import('..').Props): void;
|
|
34
|
+
onMount(element: Element<any>, index?: number): Promise<void>;
|
|
35
|
+
onUpdate(props: import('..').Props): void;
|
|
36
|
+
onDestroy(parent: Element, afterDestroy?: () => void): Promise<void>;
|
|
37
|
+
setFlexDirection(direction: import('./types/DisplayObject').FlexDirection): void;
|
|
38
|
+
setFlexWrap(wrap: "wrap" | "nowrap" | "wrap-reverse"): void;
|
|
39
|
+
setAlignContent(align: import('./types/DisplayObject').AlignContent): void;
|
|
40
|
+
setAlignSelf(align: import('./types/DisplayObject').AlignContent): void;
|
|
41
|
+
setAlignItems(align: import('./types/DisplayObject').AlignContent): void;
|
|
42
|
+
setJustifyContent(justifyContent: "flex-start" | "flex-end" | "center" | "space-between" | "space-around"): void;
|
|
43
|
+
setPosition(position: import('./types/DisplayObject').EdgeSize): void;
|
|
44
|
+
setX(x: number): void;
|
|
45
|
+
setY(y: number): void;
|
|
46
|
+
setPadding(padding: import('./types/DisplayObject').EdgeSize): void;
|
|
47
|
+
setMargin(margin: import('./types/DisplayObject').EdgeSize): void;
|
|
48
|
+
setGap(gap: import('./types/DisplayObject').EdgeSize): void;
|
|
49
|
+
setBorder(border: import('./types/DisplayObject').EdgeSize): void;
|
|
50
|
+
setPositionType(positionType: "relative" | "absolute"): void;
|
|
51
|
+
setWidth(width: number): void;
|
|
52
|
+
setHeight(height: number): void;
|
|
53
|
+
getWidth(): number;
|
|
54
|
+
getHeight(): number;
|
|
55
|
+
setMinWidth(minWidth: number | string): void;
|
|
56
|
+
setMinHeight(minHeight: number | string): void;
|
|
57
|
+
setMaxWidth(maxWidth: number | string): void;
|
|
58
|
+
setMaxHeight(maxHeight: number | string): void;
|
|
59
|
+
setAspectRatio(aspectRatio: number): void;
|
|
60
|
+
setFlexGrow(flexGrow: number): void;
|
|
61
|
+
setFlexShrink(flexShrink: number): void;
|
|
62
|
+
setFlexBasis(flexBasis: number | string): void;
|
|
63
|
+
setRowGap(rowGap: number): void;
|
|
64
|
+
setColumnGap(columnGap: number): void;
|
|
65
|
+
setTop(top: number | string): void;
|
|
66
|
+
setLeft(left: number | string): void;
|
|
67
|
+
setRight(right: number | string): void;
|
|
68
|
+
setBottom(bottom: number | string): void;
|
|
69
|
+
setObjectFit(objectFit: import('./types/DisplayObject').ObjectFit): void;
|
|
70
|
+
setObjectPosition(objectPosition: import('./types/DisplayObject').ObjectPosition): void;
|
|
71
|
+
setTransformOrigin(transformOrigin: import('./types/DisplayObject').TransformOrigin): void;
|
|
72
|
+
};
|
|
73
|
+
[x: string]: any;
|
|
74
|
+
};
|
|
75
|
+
export declare class CanvasDOMContainer extends CanvasDOMContainer_base {
|
|
76
|
+
disableLayout: boolean;
|
|
77
|
+
private canvasSizeEffect;
|
|
78
|
+
private static readonly DOM_ROUTING_MAP;
|
|
79
|
+
private static readonly DOM_ALLOWED_TAGS;
|
|
80
|
+
private static readonly DOM_UNSUPPORTED_TAGS;
|
|
81
|
+
private hasDomContainerAncestor;
|
|
82
|
+
private getPercentRatio;
|
|
83
|
+
private getCanvasSize;
|
|
84
|
+
private shouldUseCanvasPercent;
|
|
85
|
+
private syncCanvasSizeEffect;
|
|
86
|
+
private applyElementSize;
|
|
87
|
+
private routeDomChildren;
|
|
88
|
+
onInit(props: any): void;
|
|
89
|
+
onMount(element: Element<any>, index?: number): Promise<void>;
|
|
90
|
+
onUpdate(props: any): void;
|
|
91
|
+
onLayoutComputed(): void;
|
|
92
|
+
onDestroy(parent: Element<any>, afterDestroy?: () => void): Promise<void>;
|
|
93
|
+
}
|
|
94
|
+
export interface CanvasDOMContainer extends DisplayObjectProps {
|
|
95
|
+
}
|
|
96
|
+
export declare const DOMContainer: ComponentFunction<any>;
|
|
97
|
+
export {};
|
|
98
|
+
//# sourceMappingURL=DOMContainer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DOMContainer.d.ts","sourceRoot":"","sources":["../../src/components/DOMContainer.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,OAAO,EAGR,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAK,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;;;;;;;;;;;;;;;;;;;;;;iBAsHnD,CAAC;kBACA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAnBV,qBAAa,kBAAmB,SAAQ,uBAA+B;IACrE,aAAa,UAAQ;IACrB,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAErC;IACF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAIrC;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAqBzC;IAEH,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,gBAAgB;IAgDxB,OAAO,CAAC,gBAAgB;IA8BxB,MAAM,CAAC,KAAK,EAAE,GAAG;IAgCX,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM;IAMnD,QAAQ,CAAC,KAAK,EAAE,GAAG;IAMnB,gBAAgB;IAIV,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,IAAI;CAUhE;AAED,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;CAAI;AAIlE,eAAO,MAAM,YAAY,EAAE,iBAAiB,CAAC,GAAG,CAE/C,CAAC"}
|
|
@@ -2,8 +2,8 @@ import { Element } from '../engine/reactive';
|
|
|
2
2
|
import { OnHook } from './DisplayObject';
|
|
3
3
|
import { ComponentFunction } from '../engine/signal';
|
|
4
4
|
import { DisplayObjectProps } from './types/DisplayObject';
|
|
5
|
-
interface
|
|
6
|
-
element
|
|
5
|
+
export interface DOMElementProps extends DisplayObjectProps {
|
|
6
|
+
element?: string | {
|
|
7
7
|
value: HTMLElement;
|
|
8
8
|
};
|
|
9
9
|
textContent?: string;
|
|
@@ -19,25 +19,36 @@ interface DOMContainerProps extends DisplayObjectProps {
|
|
|
19
19
|
};
|
|
20
20
|
onBeforeDestroy?: OnHook;
|
|
21
21
|
}
|
|
22
|
+
export interface DOMContainerProps extends DOMElementProps {
|
|
23
|
+
element: string | {
|
|
24
|
+
value: HTMLElement;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
22
27
|
export declare class CanvasDOMElement {
|
|
23
28
|
element: HTMLElement;
|
|
24
29
|
private eventListeners;
|
|
25
30
|
private onBeforeDestroy;
|
|
26
31
|
private valueSignal;
|
|
27
32
|
private isFormElementType;
|
|
33
|
+
private classSubscriptions;
|
|
34
|
+
private childTextSubscriptions;
|
|
28
35
|
/**
|
|
29
36
|
* Checks if the element is a form element that supports the value attribute
|
|
30
37
|
* @param elementType - The element type string from props
|
|
31
38
|
* @returns true if the element is a form element with value support
|
|
32
39
|
*/
|
|
33
40
|
private isFormElement;
|
|
34
|
-
|
|
41
|
+
private collectClassTokens;
|
|
42
|
+
private collectClassSignals;
|
|
43
|
+
private applyClassList;
|
|
44
|
+
private syncClassSubscriptions;
|
|
45
|
+
private appendChildElement;
|
|
46
|
+
onInit(props: DOMElementProps): void;
|
|
35
47
|
onMount(context: Element<CanvasDOMElement>): void;
|
|
36
|
-
onUpdate(props:
|
|
48
|
+
onUpdate(props: DOMElementProps): void;
|
|
37
49
|
onDestroy(parent: Element<CanvasDOMElement>, afterDestroy: () => void): Promise<void>;
|
|
38
50
|
}
|
|
39
51
|
export interface CanvasDOMElement extends DisplayObjectProps {
|
|
40
52
|
}
|
|
41
53
|
export declare const DOMElement: ComponentFunction<DOMContainerProps>;
|
|
42
|
-
export {};
|
|
43
54
|
//# sourceMappingURL=DOMElement.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DOMElement.d.ts","sourceRoot":"","sources":["../../src/components/DOMElement.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,OAAO,EAER,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAoC,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAI3D,
|
|
1
|
+
{"version":3,"file":"DOMElement.d.ts","sourceRoot":"","sources":["../../src/components/DOMElement.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,OAAO,EAER,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAoC,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAI3D,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,OAAO,CAAC,EACN,MAAM,GACN;QACA,KAAK,EAAE,WAAW,CAAC;KACpB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAC5B,KAAK,CAAC,EACJ,MAAM,GACN,MAAM,EAAE,GACR,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB;YAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,GACpB;YAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QAC1D,KAAK,CAAC,EACJ,MAAM,GACN,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAC/B;YAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;SAAE,CAAC;KACxD,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,OAAO,EACL,MAAM,GACN;QACA,KAAK,EAAE,WAAW,CAAC;KACpB,CAAC;CACH;AAwKD,qBAAa,gBAAgB;IACpB,OAAO,EAAE,WAAW,CAAC;IAC5B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,kBAAkB,CAA0C;IACpE,OAAO,CAAC,sBAAsB,CAA0C;IAExE;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,sBAAsB;IAmB9B,OAAO,CAAC,kBAAkB;IAqD1B,MAAM,CAAC,KAAK,EAAE,eAAe;IAyD7B,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAgC1C,QAAQ,CAAC,KAAK,EAAE,eAAe;IAqEzB,SAAS,CACb,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,YAAY,EAAE,MAAM,IAAI,GACvB,OAAO,CAAC,IAAI,CAAC;CA6BjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;CAAI;AAIhE,eAAO,MAAM,UAAU,EAAE,iBAAiB,CAAC,iBAAiB,CAE3D,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Signal } from '@signe/reactive';
|
|
2
|
+
import { Element } from '../engine/reactive';
|
|
3
|
+
import { ComponentFunction } from '../engine/signal';
|
|
4
|
+
import { CanvasDOMElement, DOMElementProps } from './DOMElement';
|
|
5
|
+
import { OnHook } from './DisplayObject';
|
|
6
|
+
import { Tick } from '../directives/Scheduler';
|
|
7
|
+
import { SpritesheetOptions } from './types/Spritesheet';
|
|
8
|
+
export interface DOMSpriteFrame {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
}
|
|
14
|
+
export interface DOMSpriteProps extends DOMElementProps {
|
|
15
|
+
image?: string;
|
|
16
|
+
rectangle?: DOMSpriteFrame | {
|
|
17
|
+
value?: DOMSpriteFrame;
|
|
18
|
+
};
|
|
19
|
+
frames?: DOMSpriteFrame[];
|
|
20
|
+
frameIndex?: number;
|
|
21
|
+
fps?: number;
|
|
22
|
+
playing?: boolean;
|
|
23
|
+
loop?: boolean;
|
|
24
|
+
sheet?: {
|
|
25
|
+
definition?: DOMSpriteSheetDefinition | {
|
|
26
|
+
value?: DOMSpriteSheetDefinition;
|
|
27
|
+
} | Signal<DOMSpriteSheetDefinition | undefined> | Promise<DOMSpriteSheetDefinition>;
|
|
28
|
+
playing?: string;
|
|
29
|
+
params?: any;
|
|
30
|
+
onFinish?: () => void;
|
|
31
|
+
};
|
|
32
|
+
element?: "div" | "img";
|
|
33
|
+
attrs?: Record<string, any> & {
|
|
34
|
+
class?: string | string[] | Record<string, boolean> | {
|
|
35
|
+
items?: string[];
|
|
36
|
+
} | {
|
|
37
|
+
value?: string | string[] | Record<string, boolean>;
|
|
38
|
+
};
|
|
39
|
+
style?: string | Record<string, string | number> | {
|
|
40
|
+
value?: string | Record<string, string | number>;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
onBeforeDestroy?: OnHook;
|
|
44
|
+
context?: {
|
|
45
|
+
tick?: Signal<Tick | null>;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
type DOMSpriteSheetDefinition = SpritesheetOptions & {
|
|
49
|
+
image?: string;
|
|
50
|
+
};
|
|
51
|
+
export declare class CanvasDOMSprite extends CanvasDOMElement {
|
|
52
|
+
private frameIndex;
|
|
53
|
+
private frames;
|
|
54
|
+
private rectangle?;
|
|
55
|
+
private image?;
|
|
56
|
+
private fps;
|
|
57
|
+
private loop;
|
|
58
|
+
private playing;
|
|
59
|
+
private hasExternalFrameIndex;
|
|
60
|
+
private elapsed;
|
|
61
|
+
private tickSignal?;
|
|
62
|
+
private tickSubscription?;
|
|
63
|
+
private sheetSubscriptions;
|
|
64
|
+
private sheetDefinition?;
|
|
65
|
+
private sheetAnimations;
|
|
66
|
+
private sheetCurrentAnimation?;
|
|
67
|
+
private sheetCurrentName?;
|
|
68
|
+
private sheetParams;
|
|
69
|
+
private sheetTime;
|
|
70
|
+
private sheetFrameIndex;
|
|
71
|
+
private sheetFinished;
|
|
72
|
+
private sheetLoadToken;
|
|
73
|
+
private sheetOnFinish?;
|
|
74
|
+
private rafId?;
|
|
75
|
+
private lastRafTimestamp?;
|
|
76
|
+
private lastTickTimestamp?;
|
|
77
|
+
private elementType;
|
|
78
|
+
private isAnimating;
|
|
79
|
+
private playingSubscription?;
|
|
80
|
+
private playingSignal?;
|
|
81
|
+
onInit(props: DOMElementProps): void;
|
|
82
|
+
onMount(context: Element<CanvasDOMElement>): void;
|
|
83
|
+
onUpdate(props: DOMElementProps): void;
|
|
84
|
+
onDestroy(parent: Element<CanvasDOMElement>, afterDestroy: () => void): Promise<void>;
|
|
85
|
+
private resolveRectangle;
|
|
86
|
+
private resolveSheetDefinition;
|
|
87
|
+
private detectImageDimensions;
|
|
88
|
+
private createSheetAnimations;
|
|
89
|
+
private setSheetDefinition;
|
|
90
|
+
private playSheet;
|
|
91
|
+
private getCurrentSheetFrame;
|
|
92
|
+
private advanceSheet;
|
|
93
|
+
private mergeEventAttrs;
|
|
94
|
+
private applyProps;
|
|
95
|
+
private bindPlayingSignal;
|
|
96
|
+
private bindSheetParams;
|
|
97
|
+
private getFrames;
|
|
98
|
+
private normalizeIndex;
|
|
99
|
+
private render;
|
|
100
|
+
private applyFrame;
|
|
101
|
+
private updateAnimationLoop;
|
|
102
|
+
private startAnimationLoop;
|
|
103
|
+
private stopAnimationLoop;
|
|
104
|
+
private advance;
|
|
105
|
+
}
|
|
106
|
+
export declare const DOMSprite: ComponentFunction<DOMSpriteProps>;
|
|
107
|
+
export {};
|
|
108
|
+
//# sourceMappingURL=DOMSprite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DOMSprite.d.ts","sourceRoot":"","sources":["../../src/components/DOMSprite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Element, Props } from '../engine/reactive';
|
|
2
|
+
import { AlignContent, EdgeSize, FlexDirection, ObjectFit, ObjectPosition, TransformOrigin } from './types/DisplayObject';
|
|
3
|
+
import { ObservablePoint, Point, Rectangle } from 'pixi.js';
|
|
4
|
+
import { BehaviorSubject } from 'rxjs';
|
|
5
|
+
export interface ComponentInstance extends PixiMixins.ContainerOptions {
|
|
6
|
+
id?: string;
|
|
7
|
+
children?: ComponentInstance[];
|
|
8
|
+
onInit?(props: Props): void;
|
|
9
|
+
onUpdate?(props: Props): void;
|
|
10
|
+
onDestroy?(parent: Element, afterDestroy: () => void): void;
|
|
11
|
+
onMount?(context: Element<any>, index?: number): void;
|
|
12
|
+
setWidth(width: number): void;
|
|
13
|
+
setHeight(height: number): void;
|
|
14
|
+
getLocalBounds?(): Rectangle;
|
|
15
|
+
getGlobalPosition?(): Point;
|
|
16
|
+
}
|
|
17
|
+
export declare const EVENTS: string[];
|
|
18
|
+
export type OnHook = (() => void) | (() => Promise<void> | void);
|
|
19
|
+
export declare function DisplayObject(extendClass: any): {
|
|
20
|
+
new (): {
|
|
21
|
+
[x: string]: any;
|
|
22
|
+
"__#private@#canvasContext": {
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
} | null;
|
|
25
|
+
isFlex: boolean;
|
|
26
|
+
fullProps: Props;
|
|
27
|
+
isMounted: boolean;
|
|
28
|
+
_anchorPoints: ObservablePoint;
|
|
29
|
+
isCustomAnchor: boolean;
|
|
30
|
+
displayWidth: import('@signe/reactive').WritableSignal<number>;
|
|
31
|
+
displayHeight: import('@signe/reactive').WritableSignal<number>;
|
|
32
|
+
overrideProps: string[];
|
|
33
|
+
layout: any;
|
|
34
|
+
onBeforeDestroy: OnHook | null;
|
|
35
|
+
onAfterMount: OnHook | null;
|
|
36
|
+
subjectInit: BehaviorSubject<any>;
|
|
37
|
+
disableLayout: boolean;
|
|
38
|
+
"__#private@#registeredEvents": Map<string, Function>;
|
|
39
|
+
"__#private@#computedLayoutBox": {
|
|
40
|
+
width?: number;
|
|
41
|
+
height?: number;
|
|
42
|
+
} | null;
|
|
43
|
+
"__#private@#element": Element<any> | null;
|
|
44
|
+
/**
|
|
45
|
+
* Get the element reference for freeze checking
|
|
46
|
+
* @returns The element reference or null
|
|
47
|
+
*/
|
|
48
|
+
getElement(): Element<any> | null;
|
|
49
|
+
onLayoutComputed(_event: any): void;
|
|
50
|
+
get deltaRatio(): any;
|
|
51
|
+
get parentIsFlex(): any;
|
|
52
|
+
onInit(props: Props): void;
|
|
53
|
+
onMount(element: Element<any>, index?: number): Promise<void>;
|
|
54
|
+
onUpdate(props: Props): void;
|
|
55
|
+
onDestroy(parent: Element, afterDestroy?: () => void): Promise<void>;
|
|
56
|
+
setFlexDirection(direction: FlexDirection): void;
|
|
57
|
+
setFlexWrap(wrap: "wrap" | "nowrap" | "wrap-reverse"): void;
|
|
58
|
+
setAlignContent(align: AlignContent): void;
|
|
59
|
+
setAlignSelf(align: AlignContent): void;
|
|
60
|
+
setAlignItems(align: AlignContent): void;
|
|
61
|
+
setJustifyContent(justifyContent: "flex-start" | "flex-end" | "center" | "space-between" | "space-around"): void;
|
|
62
|
+
setPosition(position: EdgeSize): void;
|
|
63
|
+
setX(x: number): void;
|
|
64
|
+
setY(y: number): void;
|
|
65
|
+
setPadding(padding: EdgeSize): void;
|
|
66
|
+
setMargin(margin: EdgeSize): void;
|
|
67
|
+
setGap(gap: EdgeSize): void;
|
|
68
|
+
setBorder(border: EdgeSize): void;
|
|
69
|
+
setPositionType(positionType: "relative" | "absolute"): void;
|
|
70
|
+
setWidth(width: number): void;
|
|
71
|
+
setHeight(height: number): void;
|
|
72
|
+
getWidth(): number;
|
|
73
|
+
getHeight(): number;
|
|
74
|
+
setMinWidth(minWidth: number | string): void;
|
|
75
|
+
setMinHeight(minHeight: number | string): void;
|
|
76
|
+
setMaxWidth(maxWidth: number | string): void;
|
|
77
|
+
setMaxHeight(maxHeight: number | string): void;
|
|
78
|
+
setAspectRatio(aspectRatio: number): void;
|
|
79
|
+
setFlexGrow(flexGrow: number): void;
|
|
80
|
+
setFlexShrink(flexShrink: number): void;
|
|
81
|
+
setFlexBasis(flexBasis: number | string): void;
|
|
82
|
+
setRowGap(rowGap: number): void;
|
|
83
|
+
setColumnGap(columnGap: number): void;
|
|
84
|
+
setTop(top: number | string): void;
|
|
85
|
+
setLeft(left: number | string): void;
|
|
86
|
+
setRight(right: number | string): void;
|
|
87
|
+
setBottom(bottom: number | string): void;
|
|
88
|
+
setObjectFit(objectFit: ObjectFit): void;
|
|
89
|
+
setObjectPosition(objectPosition: ObjectPosition): void;
|
|
90
|
+
setTransformOrigin(transformOrigin: TransformOrigin): void;
|
|
91
|
+
};
|
|
92
|
+
[x: string]: any;
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=DisplayObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DisplayObject.d.ts","sourceRoot":"","sources":["../../src/components/DisplayObject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { Element } from '../engine/reactive';
|
|
2
|
+
import { ComponentFunction } from '../engine/signal';
|
|
3
|
+
import { DisplayObjectProps } from './types/DisplayObject';
|
|
4
|
+
import { ScrollOptions } from '../engine/FocusManager';
|
|
5
|
+
import { Signal } from '@signe/reactive';
|
|
6
|
+
import { CanvasViewport } from './Viewport';
|
|
7
|
+
import { Controls } from '../directives/ControlsBase';
|
|
8
|
+
/**
|
|
9
|
+
* Properties for FocusContainer component
|
|
10
|
+
*
|
|
11
|
+
* @property tabindex - Focus index for the container (default: 0 if present)
|
|
12
|
+
* @property controls - Controls configuration for automatic navigation
|
|
13
|
+
* @property onFocusChange - Callback when focus changes
|
|
14
|
+
* @property autoScroll - Enable automatic scrolling to focused element (default: false)
|
|
15
|
+
* @property viewport - Viewport instance to use for scrolling (optional, uses context viewport by default)
|
|
16
|
+
*/
|
|
17
|
+
export interface FocusContainerProps extends DisplayObjectProps {
|
|
18
|
+
tabindex?: number;
|
|
19
|
+
controls?: Controls | Signal<Controls>;
|
|
20
|
+
onFocusChange?: (index: number, element: Element | null) => void;
|
|
21
|
+
autoScroll?: boolean | ScrollOptions;
|
|
22
|
+
viewport?: CanvasViewport;
|
|
23
|
+
context?: {
|
|
24
|
+
viewport?: CanvasViewport;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* FocusContainer component for managing focus navigation
|
|
29
|
+
*
|
|
30
|
+
* This component provides a container that manages focus navigation between
|
|
31
|
+
* focusable child elements. It supports automatic navigation via Controls
|
|
32
|
+
* (keyboard/gamepad) and automatic scrolling with Viewport.
|
|
33
|
+
*
|
|
34
|
+
* ## Features
|
|
35
|
+
*
|
|
36
|
+
* - **Focus Management**: Automatically registers focusable children
|
|
37
|
+
* - **Navigation**: Supports keyboard/gamepad navigation via Controls
|
|
38
|
+
* - **Auto-scroll**: Automatically scrolls viewport to show focused element
|
|
39
|
+
* - **Hooks**: Provides reactive signals for focus state
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* // Basic usage
|
|
44
|
+
* <FocusContainer tabindex={0}>
|
|
45
|
+
* <Button tabindex={0} text="Button 1" />
|
|
46
|
+
* <Button tabindex={1} text="Button 2" />
|
|
47
|
+
* </FocusContainer>
|
|
48
|
+
*
|
|
49
|
+
* // With Controls
|
|
50
|
+
* <FocusContainer tabindex={0} controls={controlsConfig}>
|
|
51
|
+
* <Button tabindex={0} text="Button 1" />
|
|
52
|
+
* <Button tabindex={1} text="Button 2" />
|
|
53
|
+
* </FocusContainer>
|
|
54
|
+
*
|
|
55
|
+
* // With auto-scroll
|
|
56
|
+
* <Viewport worldWidth={2000} worldHeight={5000}>
|
|
57
|
+
* <FocusContainer tabindex={0} autoScroll={true}>
|
|
58
|
+
* <Button tabindex={0} y={0} text="Item 1" />
|
|
59
|
+
* <Button tabindex={1} y={100} text="Item 2" />
|
|
60
|
+
* </FocusContainer>
|
|
61
|
+
* </Viewport>
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare class CanvasFocusContainer {
|
|
65
|
+
private containerId;
|
|
66
|
+
private currentIndexSignal;
|
|
67
|
+
private focusedElementSignal;
|
|
68
|
+
private registeredFocusables;
|
|
69
|
+
/**
|
|
70
|
+
* Initialize the focus container
|
|
71
|
+
*
|
|
72
|
+
* @param props - Component properties
|
|
73
|
+
*/
|
|
74
|
+
onInit(props: FocusContainerProps): void;
|
|
75
|
+
/**
|
|
76
|
+
* Mount hook - register focusable children
|
|
77
|
+
*
|
|
78
|
+
* @param element - The element being mounted
|
|
79
|
+
*/
|
|
80
|
+
onMount(element: Element<CanvasFocusContainer>): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Update hook - handle prop changes
|
|
83
|
+
*
|
|
84
|
+
* @param props - Updated properties
|
|
85
|
+
*/
|
|
86
|
+
onUpdate(props: FocusContainerProps): void;
|
|
87
|
+
/**
|
|
88
|
+
* Destroy hook - cleanup
|
|
89
|
+
*
|
|
90
|
+
* @param parent - Parent element
|
|
91
|
+
* @param afterDestroy - Callback after destruction
|
|
92
|
+
*/
|
|
93
|
+
onDestroy(parent: Element<any>, afterDestroy?: () => void): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Register focusable children from element
|
|
96
|
+
*
|
|
97
|
+
* @param element - Container element
|
|
98
|
+
*/
|
|
99
|
+
private registerChildren;
|
|
100
|
+
/**
|
|
101
|
+
* Get the container ID
|
|
102
|
+
*
|
|
103
|
+
* @returns Container identifier
|
|
104
|
+
*/
|
|
105
|
+
getContainerId(): string;
|
|
106
|
+
/**
|
|
107
|
+
* Get current index signal
|
|
108
|
+
*
|
|
109
|
+
* @returns Signal for current focus index
|
|
110
|
+
*/
|
|
111
|
+
getCurrentIndexSignal(): Signal<number | null> | null;
|
|
112
|
+
/**
|
|
113
|
+
* Get focused element signal
|
|
114
|
+
*
|
|
115
|
+
* @returns Signal for current focused element
|
|
116
|
+
*/
|
|
117
|
+
getFocusedElementSignal(): Signal<Element | null> | null;
|
|
118
|
+
}
|
|
119
|
+
export interface CanvasFocusContainer extends DisplayObjectProps {
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* FocusContainer component function
|
|
123
|
+
*
|
|
124
|
+
* @param props - Component properties
|
|
125
|
+
* @returns FocusContainer element
|
|
126
|
+
*/
|
|
127
|
+
export declare const FocusContainer: ComponentFunction<FocusContainerProps>;
|
|
128
|
+
export declare const Navigation: ComponentFunction<FocusContainerProps>;
|
|
129
|
+
//# sourceMappingURL=FocusContainer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FocusContainer.d.ts","sourceRoot":"","sources":["../../src/components/FocusContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAgB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAU,MAAM,EAAkD,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,+BAA+B,CAAC;AAEvC;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,UAAU,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;IACrC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,cAAc,CAAC;KAC3B,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,oBAAoB,CAAsF;IAClH,OAAO,CAAC,oBAAoB,CAA0B;IAEtD;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,mBAAmB;IAyBjC;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkDpE;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,mBAAmB;IAUnC;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/E;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA8HxB;;;;OAIG;IACH,cAAc,IAAI,MAAM;IAIxB;;;;OAIG;IACH,qBAAqB,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;IAIrD;;;;OAIG;IACH,uBAAuB,IAAI,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI;CAGzD;AAED,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;CAAI;AAIpE;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,mBAAmB,CAEjE,CAAC;AAEF,eAAO,MAAM,UAAU,wCAAiB,CAAC"}
|