@xrift/world-components 0.10.2 → 0.10.4
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/Interactable/index.d.ts.map +1 -1
- package/dist/components/Interactable/index.js +20 -55
- package/dist/components/Interactable/index.js.map +1 -1
- package/dist/components/ScreenShareDisplay/index.js +2 -2
- package/dist/components/ScreenShareDisplay/index.js.map +1 -1
- package/dist/contexts/XRiftContext.d.ts +1 -7
- package/dist/contexts/XRiftContext.d.ts.map +1 -1
- package/dist/contexts/XRiftContext.js +1 -2
- package/dist/contexts/XRiftContext.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Interactable/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Interactable/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAA;AAGlD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,KAAK,CAqDlC,CAAA;AAED,YAAY,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -1,77 +1,42 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
2
|
-
import {
|
|
3
|
-
import { Children, cloneElement, isValidElement, useEffect, useMemo, useRef } from 'react';
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
4
3
|
import { useXRift } from '../../contexts/XRiftContext';
|
|
5
4
|
const INTERACTABLE_LAYER = 10;
|
|
6
5
|
export const Interactable = ({ id, type = 'button', onInteract, interactionText, enabled = true, children, }) => {
|
|
7
|
-
const {
|
|
6
|
+
const { registerInteractable, unregisterInteractable } = useXRift();
|
|
8
7
|
const groupRef = useRef(null);
|
|
9
|
-
//
|
|
8
|
+
// レイヤー設定 & オブジェクト登録(マウント時のみ)
|
|
10
9
|
useEffect(() => {
|
|
11
10
|
const object = groupRef.current;
|
|
12
11
|
if (!object)
|
|
13
12
|
return;
|
|
14
|
-
// userDataにインタラクション情報を設定
|
|
15
|
-
const interactableData = {
|
|
16
|
-
id,
|
|
17
|
-
type,
|
|
18
|
-
onInteract,
|
|
19
|
-
interactionText,
|
|
20
|
-
enabled,
|
|
21
|
-
};
|
|
22
|
-
Object.assign(object.userData, interactableData);
|
|
23
13
|
// レイヤーを設定(レイキャスト最適化のため)
|
|
24
14
|
object.traverse((child) => {
|
|
25
15
|
child.layers.enable(INTERACTABLE_LAYER);
|
|
26
16
|
});
|
|
27
17
|
// インタラクト可能オブジェクトとして登録
|
|
28
18
|
registerInteractable(object);
|
|
29
|
-
//
|
|
19
|
+
// クリーンアップ
|
|
30
20
|
return () => {
|
|
31
|
-
// 登録解除
|
|
32
21
|
unregisterInteractable(object);
|
|
33
|
-
if (object.userData) {
|
|
34
|
-
delete object.userData.id;
|
|
35
|
-
delete object.userData.type;
|
|
36
|
-
delete object.userData.onInteract;
|
|
37
|
-
delete object.userData.interactionText;
|
|
38
|
-
delete object.userData.enabled;
|
|
39
|
-
}
|
|
40
|
-
// レイヤーを無効化
|
|
41
22
|
object.traverse((child) => {
|
|
42
23
|
child.layers.disable(INTERACTABLE_LAYER);
|
|
43
24
|
});
|
|
44
25
|
};
|
|
45
|
-
}, [
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
children: (_jsxs(_Fragment, { children: [child.props.children, isTargeted && enabled && (_jsx(Outlines, { thickness: 5, color: "#4dabf7", screenspace: false, opacity: 1, transparent: false, angle: Math.PI }))] })),
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
// mesh以外の場合、子要素を再帰的に処理
|
|
64
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
65
|
-
const grandChildren = child.props.children;
|
|
66
|
-
if (grandChildren) {
|
|
67
|
-
return cloneElement(child, {
|
|
68
|
-
children: Children.map(grandChildren, (grandChild) => addOutlinesToMeshes(grandChild)),
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
return child;
|
|
72
|
-
};
|
|
73
|
-
return Children.map(children, (child) => addOutlinesToMeshes(child));
|
|
74
|
-
}, [children, isTargeted, enabled]);
|
|
75
|
-
return (_jsx("group", { ref: groupRef, children: childrenWithOutlines }));
|
|
26
|
+
}, [registerInteractable, unregisterInteractable]);
|
|
27
|
+
// userData の更新(props が変わった時)
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
const object = groupRef.current;
|
|
30
|
+
if (!object)
|
|
31
|
+
return;
|
|
32
|
+
Object.assign(object.userData, {
|
|
33
|
+
id,
|
|
34
|
+
type,
|
|
35
|
+
onInteract,
|
|
36
|
+
interactionText,
|
|
37
|
+
enabled,
|
|
38
|
+
});
|
|
39
|
+
}, [id, type, onInteract, interactionText, enabled]);
|
|
40
|
+
return (_jsx("group", { ref: groupRef, children: children }));
|
|
76
41
|
};
|
|
77
42
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Interactable/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Interactable/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAW,MAAM,OAAO,CAAA;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAGtD,MAAM,kBAAkB,GAAG,EAAE,CAAA;AAE7B,MAAM,CAAC,MAAM,YAAY,GAAc,CAAC,EACtC,EAAE,EACF,IAAI,GAAG,QAAQ,EACf,UAAU,EACV,eAAe,EACf,OAAO,GAAG,IAAI,EACd,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,GAAG,QAAQ,EAAE,CAAA;IACnE,MAAM,QAAQ,GAAG,MAAM,CAAQ,IAAI,CAAC,CAAA;IAEpC,6BAA6B;IAC7B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAM;QAEnB,wBAAwB;QACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;YACxB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;QAEF,sBAAsB;QACtB,oBAAoB,CAAC,MAAM,CAAC,CAAA;QAE5B,UAAU;QACV,OAAO,GAAG,EAAE;YACV,sBAAsB,CAAC,MAAM,CAAC,CAAA;YAE9B,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;gBACxB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;YAC1C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC,CAAA;IAElD,6BAA6B;IAC7B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAM;QAEnB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC7B,EAAE;YACF,IAAI;YACJ,UAAU;YACV,eAAe;YACf,OAAO;SACR,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAA;IAEpD,OAAO,CACL,gBAAO,GAAG,EAAE,QAAQ,YACjB,QAAQ,GACH,CACT,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Text } from '@react-three/drei';
|
|
3
|
-
import { memo, useCallback } from 'react';
|
|
3
|
+
import { memo, useCallback, useMemo } from 'react';
|
|
4
4
|
import * as THREE from 'three';
|
|
5
5
|
import { useScreenShareContext } from '../../contexts/ScreenShareContext';
|
|
6
6
|
import { Interactable } from '../Interactable';
|
|
@@ -16,7 +16,7 @@ const DEFAULT_ROTATION = [0, 0, 0];
|
|
|
16
16
|
export const ScreenShareDisplay = memo(({ id, position = DEFAULT_POSITION, rotation = DEFAULT_ROTATION, width = DEFAULT_WIDTH, }) => {
|
|
17
17
|
const { videoElement, isSharing, startScreenShare, stopScreenShare } = useScreenShareContext();
|
|
18
18
|
const interactionText = isSharing ? '画面共有を停止' : '画面共有を開始';
|
|
19
|
-
const screenSize = [width, width * (9 / 16)];
|
|
19
|
+
const screenSize = useMemo(() => [width, width * (9 / 16)], [width]);
|
|
20
20
|
const { texture, hasVideo, materialRef, videoSize } = useVideoTexture(videoElement, screenSize);
|
|
21
21
|
const handleInteract = useCallback(() => {
|
|
22
22
|
if (isSharing) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAKzC,SAAS;AACT,MAAM,aAAa,GAAG,CAAC,CAAA;AACvB,MAAM,gBAAgB,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC7D,MAAM,gBAAgB,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAE5D;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,EACtC,EAAE,EACF,QAAQ,GAAG,gBAAgB,EAC3B,QAAQ,GAAG,gBAAgB,EAC3B,KAAK,GAAG,aAAa,GACf,EAAE,EAAE;IACV,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,qBAAqB,EAAE,CAAA;IAC9F,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;IACzD,MAAM,UAAU,GAAG,OAAO,CAAmB,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IACtF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IAE/F,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,IAAI,SAAS,EAAE,CAAC;YACd,eAAe,EAAE,CAAA;QACnB,CAAC;aAAM,CAAC;YACN,gBAAgB,EAAE,CAAA;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAA;IAElD,OAAO,CACL,iBAAO,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,aAC3C,MAAC,YAAY,IACX,EAAE,EAAE,EAAE,EACN,UAAU,EAAE,cAAc,EAC1B,eAAe,EAAE,eAAe,aAGhC,2BACE,wBAAe,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GAAI,EACvD,4BACE,IAAI,EAAE,KAAK,CAAC,SAAS,EACrB,UAAU,EAAE,KAAK,EACjB,KAAK,EAAC,SAAS,GACf,IACG,EAEN,QAAQ,IAAI,CACX,gBAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,aAC3B,wBAAe,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAI,EACrD,4BACE,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,KAAK,CAAC,SAAS,EACrB,UAAU,EAAE,KAAK,GACjB,IACG,CACR,IACY,EAGd,CAAC,QAAQ,IAAI,CACZ,KAAC,IAAI,IACH,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EACtB,QAAQ,EAAE,KAAK,GAAG,IAAI,EACtB,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAC,QAAQ,6EAGX,CACR,IACK,CACT,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -8,11 +8,6 @@ export interface XRiftContextValue {
|
|
|
8
8
|
* 例: 'https://assets.xrift.net/users/xxx/worlds/yyy/hash123/'
|
|
9
9
|
*/
|
|
10
10
|
baseUrl: string;
|
|
11
|
-
/**
|
|
12
|
-
* 現在レイキャストでターゲットされているオブジェクト
|
|
13
|
-
* xrift-frontend側のRaycastDetectorが設定する
|
|
14
|
-
*/
|
|
15
|
-
currentTarget: Object3D | null;
|
|
16
11
|
/**
|
|
17
12
|
* インタラクト可能なオブジェクトのセット
|
|
18
13
|
* レイキャストのパフォーマンス最適化のために使用
|
|
@@ -34,7 +29,6 @@ export interface XRiftContextValue {
|
|
|
34
29
|
export declare const XRiftContext: import("react").Context<XRiftContextValue | null>;
|
|
35
30
|
interface Props {
|
|
36
31
|
baseUrl: string;
|
|
37
|
-
currentTarget?: Object3D | null;
|
|
38
32
|
/**
|
|
39
33
|
* インスタンス状態管理の実装(オプション)
|
|
40
34
|
* 指定しない場合はデフォルト実装(ローカルstate)が使用される
|
|
@@ -52,7 +46,7 @@ interface Props {
|
|
|
52
46
|
* Module Federationで動的にロードされたワールドコンポーネントに
|
|
53
47
|
* 必要な情報を注入するために使用
|
|
54
48
|
*/
|
|
55
|
-
export declare const XRiftProvider: ({ baseUrl,
|
|
49
|
+
export declare const XRiftProvider: ({ baseUrl, instanceStateImplementation, screenShareImplementation, children, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
56
50
|
/**
|
|
57
51
|
* XRift ワールドの情報を取得するhook
|
|
58
52
|
* ワールドプロジェクト側でアセットの相対パスを絶対パスに変換する際に使用
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XRiftContext.d.ts","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAA8C,MAAM,OAAO,CAAA;AACjG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAyB,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAUxF,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"XRiftContext.d.ts","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAA8C,MAAM,OAAO,CAAA;AACjG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAyB,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAUxF,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,mBAAmB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IAClC;;OAEG;IACH,oBAAoB,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAA;IAChD;;OAEG;IACH,sBAAsB,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAA;CAKnD;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,mDAAgD,CAAA;AAEzE,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,2BAA2B,CAAC,EAAE,yBAAyB,CAAA;IACvD;;;OAGG;IACH,yBAAyB,CAAC,EAAE,uBAAuB,CAAA;IACnD,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,gFAK3B,KAAK,4CAoCP,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,QAAO,iBAQ3B,CAAA"}
|
|
@@ -19,7 +19,7 @@ export const XRiftContext = createContext(null);
|
|
|
19
19
|
* Module Federationで動的にロードされたワールドコンポーネントに
|
|
20
20
|
* 必要な情報を注入するために使用
|
|
21
21
|
*/
|
|
22
|
-
export const XRiftProvider = ({ baseUrl,
|
|
22
|
+
export const XRiftProvider = ({ baseUrl, instanceStateImplementation, screenShareImplementation, children, }) => {
|
|
23
23
|
// インタラクト可能なオブジェクトの管理
|
|
24
24
|
const [interactableObjects] = useState(() => new Set());
|
|
25
25
|
// 画面共有の実装(指定がない場合はデフォルト実装を使用)
|
|
@@ -34,7 +34,6 @@ export const XRiftProvider = ({ baseUrl, currentTarget = null, instanceStateImpl
|
|
|
34
34
|
}, [interactableObjects]);
|
|
35
35
|
return (_jsx(XRiftContext.Provider, { value: {
|
|
36
36
|
baseUrl,
|
|
37
|
-
currentTarget,
|
|
38
37
|
interactableObjects,
|
|
39
38
|
registerInteractable,
|
|
40
39
|
unregisterInteractable,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XRiftContext.js","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEjG,OAAO,EAAE,qBAAqB,EAAkC,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAgC,MAAM,sBAAsB,CAAA;AAExF,sBAAsB;AACtB,MAAM,sCAAsC,GAAG,GAA4B,EAAE,CAAC,CAAC;IAC7E,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,KAAK;IAChB,gBAAgB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;IAC5E,eAAe,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;CAC3E,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"XRiftContext.js","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEjG,OAAO,EAAE,qBAAqB,EAAkC,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAgC,MAAM,sBAAsB,CAAA;AAExF,sBAAsB;AACtB,MAAM,sCAAsC,GAAG,GAA4B,EAAE,CAAC,CAAC;IAC7E,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,KAAK;IAChB,gBAAgB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;IAC5E,eAAe,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;CAC3E,CAAC,CAAA;AA2BF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAA;AAiBzE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,OAAO,EACP,2BAA2B,EAC3B,yBAAyB,EACzB,QAAQ,GACF,EAAE,EAAE;IACV,qBAAqB;IACrB,MAAM,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAY,CAAC,CAAA;IAEjE,8BAA8B;IAC9B,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CAAC,yBAAyB,IAAI,sCAAsC,EAAE,EAC3E,CAAC,yBAAyB,CAAC,CAC5B,CAAA;IAED,YAAY;IACZ,MAAM,oBAAoB,GAAG,WAAW,CAAC,CAAC,MAAgB,EAAE,EAAE;QAC5D,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAEzB,cAAc;IACd,MAAM,sBAAsB,GAAG,WAAW,CAAC,CAAC,MAAgB,EAAE,EAAE;QAC9D,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAEzB,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IACpB,KAAK,EAAE;YACL,OAAO;YACP,mBAAmB;YACnB,oBAAoB;YACpB,sBAAsB;SACvB,YAED,KAAC,mBAAmB,IAAC,KAAK,EAAE,eAAe,YACzC,KAAC,qBAAqB,IAAC,cAAc,EAAE,2BAA2B,YAC/D,QAAQ,GACa,GACJ,GACA,CACzB,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAsB,EAAE;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IAExC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC/D,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|