@geometra/client 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -0
- package/dist/client.d.ts +17 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +133 -24
- package/dist/client.js.map +1 -1
- package/package.json +4 -4
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# @geometra/client
|
|
2
|
+
|
|
3
|
+
Thin WebSocket client (~2KB) for Geometra. Connects to a Geometra server and renders streamed layouts on a canvas.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @geometra/client
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Key Export
|
|
12
|
+
|
|
13
|
+
- `createClient` -- creates a WebSocket client that connects to a Geometra server
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { createClient } from '@geometra/client'
|
|
19
|
+
import { CanvasRenderer } from '@geometra/renderer-canvas'
|
|
20
|
+
|
|
21
|
+
const canvas = document.getElementById('app') as HTMLCanvasElement
|
|
22
|
+
const client = createClient({
|
|
23
|
+
url: 'ws://localhost:3000',
|
|
24
|
+
renderer: new CanvasRenderer({ canvas }),
|
|
25
|
+
canvas,
|
|
26
|
+
// forwards pointer + keyboard + IME composition events to server
|
|
27
|
+
forwardKeyboard: true,
|
|
28
|
+
forwardComposition: true,
|
|
29
|
+
})
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Links
|
|
33
|
+
|
|
34
|
+
- [Main repo](https://github.com/AiGeekz/geometra)
|
package/dist/client.d.ts
CHANGED
|
@@ -7,20 +7,35 @@ export interface TexturaClientOptions {
|
|
|
7
7
|
renderer: Renderer;
|
|
8
8
|
/** Optional canvas element for forwarding pointer events. */
|
|
9
9
|
canvas?: HTMLCanvasElement;
|
|
10
|
+
/** Capture keyboard on canvas/document and forward to server. Default: true when canvas provided. */
|
|
11
|
+
forwardKeyboard?: boolean;
|
|
12
|
+
/** Capture IME composition events and forward to server. Default: true when canvas provided. */
|
|
13
|
+
forwardComposition?: boolean;
|
|
14
|
+
/** Keyboard event target. Default: canvas, else document. */
|
|
15
|
+
keyboardTarget?: HTMLElement | Document;
|
|
16
|
+
/** Forward resize events to server. Default: true when canvas provided. */
|
|
17
|
+
forwardResize?: boolean;
|
|
18
|
+
/** Resize event target. Default: window. */
|
|
19
|
+
resizeTarget?: Window;
|
|
20
|
+
/** Called on WebSocket or message parsing errors. */
|
|
21
|
+
onError?: (error: unknown) => void;
|
|
22
|
+
/** Enable automatic reconnection on disconnect. Default: true. */
|
|
23
|
+
reconnect?: boolean;
|
|
10
24
|
}
|
|
11
25
|
export interface TexturaClient {
|
|
12
26
|
/** Current layout (if received). */
|
|
13
27
|
layout: ComputedLayout | null;
|
|
14
28
|
/** Current tree (if received). */
|
|
15
29
|
tree: UIElement | null;
|
|
16
|
-
/** Disconnect from server. */
|
|
30
|
+
/** Disconnect from server (no reconnect). */
|
|
17
31
|
close(): void;
|
|
18
32
|
}
|
|
19
33
|
/**
|
|
20
|
-
* Connect to a
|
|
34
|
+
* Connect to a Geometra server and render received geometry.
|
|
21
35
|
*
|
|
22
36
|
* The client is a thin paint layer — all layout computation happens server-side.
|
|
23
37
|
* Pointer events on the canvas are forwarded to the server for hit-testing.
|
|
38
|
+
* Automatically reconnects on disconnect with exponential backoff.
|
|
24
39
|
*/
|
|
25
40
|
export declare function createClient(options: TexturaClientOptions): TexturaClient;
|
|
26
41
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AA+BzD,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,QAAQ,EAAE,QAAQ,CAAA;IAClB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,qGAAqG;IACrG,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gGAAgG;IAChG,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,6DAA6D;IAC7D,cAAc,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAA;IACvC,2EAA2E;IAC3E,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,qDAAqD;IACrD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAClC,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;IAC7B,kCAAkC;IAClC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IACtB,6CAA6C;IAC7C,KAAK,IAAI,IAAI,CAAA;CACd;AAiBD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAiMzE"}
|
package/dist/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
const PROTOCOL_VERSION = 1;
|
|
2
2
|
function applyPatches(layout, patches) {
|
|
3
3
|
for (const patch of patches) {
|
|
4
4
|
let node = layout;
|
|
@@ -19,45 +19,123 @@ function applyPatches(layout, patches) {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* Connect to a
|
|
22
|
+
* Connect to a Geometra server and render received geometry.
|
|
23
23
|
*
|
|
24
24
|
* The client is a thin paint layer — all layout computation happens server-side.
|
|
25
25
|
* Pointer events on the canvas are forwarded to the server for hit-testing.
|
|
26
|
+
* Automatically reconnects on disconnect with exponential backoff.
|
|
26
27
|
*/
|
|
27
28
|
export function createClient(options) {
|
|
28
29
|
const url = options.url ?? 'ws://localhost:3100';
|
|
29
|
-
const { renderer, canvas } = options;
|
|
30
|
+
const { renderer, canvas, onError } = options;
|
|
31
|
+
const shouldReconnect = options.reconnect !== false;
|
|
32
|
+
let ws;
|
|
33
|
+
let closed = false;
|
|
34
|
+
let retryCount = 0;
|
|
35
|
+
let retryTimer = null;
|
|
36
|
+
const handlers = [];
|
|
30
37
|
const state = {
|
|
31
38
|
layout: null,
|
|
32
39
|
tree: null,
|
|
33
40
|
close() {
|
|
41
|
+
closed = true;
|
|
42
|
+
if (retryTimer)
|
|
43
|
+
clearTimeout(retryTimer);
|
|
34
44
|
ws.close();
|
|
35
45
|
cleanup();
|
|
36
46
|
},
|
|
37
47
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
function connect() {
|
|
49
|
+
ws = new WebSocket(url);
|
|
50
|
+
ws.addEventListener('open', () => {
|
|
51
|
+
retryCount = 0;
|
|
52
|
+
if (canvas && (options.forwardResize ?? true)) {
|
|
53
|
+
ws.send(JSON.stringify({
|
|
54
|
+
type: 'resize',
|
|
55
|
+
width: Math.max(1, Math.round(canvas.clientWidth || canvas.width)),
|
|
56
|
+
height: Math.max(1, Math.round(canvas.clientHeight || canvas.height)),
|
|
57
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
ws.addEventListener('message', (event) => {
|
|
62
|
+
try {
|
|
63
|
+
const msg = JSON.parse(String(event.data));
|
|
64
|
+
if (msg.protocolVersion && msg.protocolVersion > PROTOCOL_VERSION) {
|
|
65
|
+
onError?.(new Error(`Server protocol ${msg.protocolVersion} is newer than client protocol ${PROTOCOL_VERSION}`));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (msg.type === 'frame') {
|
|
69
|
+
state.layout = msg.layout;
|
|
70
|
+
state.tree = msg.tree;
|
|
71
|
+
renderer.render(msg.layout, msg.tree);
|
|
72
|
+
}
|
|
73
|
+
else if (msg.type === 'patch' && state.layout && state.tree) {
|
|
74
|
+
applyPatches(state.layout, msg.patches);
|
|
75
|
+
renderer.render(state.layout, state.tree);
|
|
76
|
+
}
|
|
77
|
+
else if (msg.type === 'error') {
|
|
78
|
+
onError?.(new Error(msg.message));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
onError?.(err);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
ws.addEventListener('error', (event) => {
|
|
86
|
+
onError?.(event);
|
|
87
|
+
});
|
|
88
|
+
ws.addEventListener('close', () => {
|
|
89
|
+
if (!closed && shouldReconnect) {
|
|
90
|
+
const delay = Math.min(1000 * Math.pow(2, retryCount), 30000);
|
|
91
|
+
retryCount++;
|
|
92
|
+
retryTimer = setTimeout(connect, delay);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
52
96
|
const sendEvent = (eventType, e) => {
|
|
53
97
|
if (ws.readyState !== WebSocket.OPEN)
|
|
54
98
|
return;
|
|
55
99
|
const rect = canvas?.getBoundingClientRect();
|
|
56
100
|
const x = rect ? e.clientX - rect.left : e.clientX;
|
|
57
101
|
const y = rect ? e.clientY - rect.top : e.clientY;
|
|
58
|
-
ws.send(JSON.stringify({ type: 'event', eventType, x, y }));
|
|
102
|
+
ws.send(JSON.stringify({ type: 'event', eventType, x, y, protocolVersion: PROTOCOL_VERSION }));
|
|
103
|
+
};
|
|
104
|
+
const sendKeyEvent = (eventType, e) => {
|
|
105
|
+
if (ws.readyState !== WebSocket.OPEN)
|
|
106
|
+
return;
|
|
107
|
+
ws.send(JSON.stringify({
|
|
108
|
+
type: 'key',
|
|
109
|
+
eventType,
|
|
110
|
+
key: e.key,
|
|
111
|
+
code: e.code,
|
|
112
|
+
shiftKey: e.shiftKey,
|
|
113
|
+
ctrlKey: e.ctrlKey,
|
|
114
|
+
metaKey: e.metaKey,
|
|
115
|
+
altKey: e.altKey,
|
|
116
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
117
|
+
}));
|
|
118
|
+
};
|
|
119
|
+
const sendCompositionEvent = (eventType, e) => {
|
|
120
|
+
if (ws.readyState !== WebSocket.OPEN)
|
|
121
|
+
return;
|
|
122
|
+
ws.send(JSON.stringify({
|
|
123
|
+
type: 'composition',
|
|
124
|
+
eventType,
|
|
125
|
+
data: e.data ?? '',
|
|
126
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
127
|
+
}));
|
|
128
|
+
};
|
|
129
|
+
const sendResize = () => {
|
|
130
|
+
if (!canvas || ws.readyState !== WebSocket.OPEN)
|
|
131
|
+
return;
|
|
132
|
+
ws.send(JSON.stringify({
|
|
133
|
+
type: 'resize',
|
|
134
|
+
width: Math.max(1, Math.round(canvas.clientWidth || canvas.width)),
|
|
135
|
+
height: Math.max(1, Math.round(canvas.clientHeight || canvas.height)),
|
|
136
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
137
|
+
}));
|
|
59
138
|
};
|
|
60
|
-
const handlers = [];
|
|
61
139
|
if (canvas) {
|
|
62
140
|
const onClick = (e) => sendEvent('onClick', e);
|
|
63
141
|
const onPointerDown = (e) => sendEvent('onPointerDown', e);
|
|
@@ -67,16 +145,47 @@ export function createClient(options) {
|
|
|
67
145
|
canvas.addEventListener('pointerdown', onPointerDown);
|
|
68
146
|
canvas.addEventListener('pointerup', onPointerUp);
|
|
69
147
|
canvas.addEventListener('pointermove', onPointerMove);
|
|
70
|
-
handlers.push(['click', onClick], ['pointerdown', onPointerDown], ['pointerup', onPointerUp], ['pointermove', onPointerMove]);
|
|
148
|
+
handlers.push([canvas, 'click', onClick], [canvas, 'pointerdown', onPointerDown], [canvas, 'pointerup', onPointerUp], [canvas, 'pointermove', onPointerMove]);
|
|
149
|
+
}
|
|
150
|
+
const forwardKeyboard = options.forwardKeyboard ?? !!canvas;
|
|
151
|
+
const keyboardTarget = options.keyboardTarget ?? canvas ?? document;
|
|
152
|
+
if (forwardKeyboard) {
|
|
153
|
+
if (keyboardTarget instanceof HTMLElement && !keyboardTarget.hasAttribute('tabindex')) {
|
|
154
|
+
keyboardTarget.setAttribute('tabindex', '0');
|
|
155
|
+
}
|
|
156
|
+
const onKeyDown = (e) => sendKeyEvent('onKeyDown', e);
|
|
157
|
+
const onKeyUp = (e) => sendKeyEvent('onKeyUp', e);
|
|
158
|
+
keyboardTarget.addEventListener('keydown', onKeyDown);
|
|
159
|
+
keyboardTarget.addEventListener('keyup', onKeyUp);
|
|
160
|
+
handlers.push([keyboardTarget, 'keydown', onKeyDown], [keyboardTarget, 'keyup', onKeyUp]);
|
|
161
|
+
}
|
|
162
|
+
const forwardComposition = options.forwardComposition ?? !!canvas;
|
|
163
|
+
if (forwardComposition) {
|
|
164
|
+
if (keyboardTarget instanceof HTMLElement && !keyboardTarget.hasAttribute('tabindex')) {
|
|
165
|
+
keyboardTarget.setAttribute('tabindex', '0');
|
|
166
|
+
}
|
|
167
|
+
const onCompositionStart = (e) => sendCompositionEvent('onCompositionStart', e);
|
|
168
|
+
const onCompositionUpdate = (e) => sendCompositionEvent('onCompositionUpdate', e);
|
|
169
|
+
const onCompositionEnd = (e) => sendCompositionEvent('onCompositionEnd', e);
|
|
170
|
+
keyboardTarget.addEventListener('compositionstart', onCompositionStart);
|
|
171
|
+
keyboardTarget.addEventListener('compositionupdate', onCompositionUpdate);
|
|
172
|
+
keyboardTarget.addEventListener('compositionend', onCompositionEnd);
|
|
173
|
+
handlers.push([keyboardTarget, 'compositionstart', onCompositionStart], [keyboardTarget, 'compositionupdate', onCompositionUpdate], [keyboardTarget, 'compositionend', onCompositionEnd]);
|
|
174
|
+
}
|
|
175
|
+
const forwardResize = options.forwardResize ?? !!canvas;
|
|
176
|
+
if (forwardResize && canvas) {
|
|
177
|
+
const target = options.resizeTarget ?? window;
|
|
178
|
+
const onResize = () => sendResize();
|
|
179
|
+
target.addEventListener('resize', onResize);
|
|
180
|
+
handlers.push([target, 'resize', onResize]);
|
|
71
181
|
}
|
|
72
182
|
function cleanup() {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
canvas.removeEventListener(event, handler);
|
|
76
|
-
}
|
|
183
|
+
for (const [target, event, handler] of handlers) {
|
|
184
|
+
target.removeEventListener(event, handler);
|
|
77
185
|
}
|
|
78
186
|
renderer.destroy();
|
|
79
187
|
}
|
|
188
|
+
connect();
|
|
80
189
|
return state;
|
|
81
190
|
}
|
|
82
191
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,MAAM,gBAAgB,GAAG,CAAC,CAAA;AA6D1B,SAAS,YAAY,CAAC,MAAsB,EAAE,OAA+B;IAC3E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,MAAM,CAAA;QACjB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;YAChC,IAAI,CAAC,KAAK;gBAAE,MAAK;YACjB,IAAI,GAAG,KAAK,CAAA;QACd,CAAC;QACD,IAAI,KAAK,CAAC,CAAC,KAAK,SAAS;YAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;QAC3C,IAAI,KAAK,CAAC,CAAC,KAAK,SAAS;YAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;QAC3C,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACvD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAC5D,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,OAA6B;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,qBAAqB,CAAA;IAChD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAC7C,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,KAAK,KAAK,CAAA;IAEnD,IAAI,EAAa,CAAA;IACjB,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,UAAU,GAAyC,IAAI,CAAA;IAC3D,MAAM,QAAQ,GAAgD,EAAE,CAAA;IAEhE,MAAM,KAAK,GAAkB;QAC3B,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;QACV,KAAK;YACH,MAAM,GAAG,IAAI,CAAA;YACb,IAAI,UAAU;gBAAE,YAAY,CAAC,UAAU,CAAC,CAAA;YACxC,EAAE,CAAC,KAAK,EAAE,CAAA;YACV,OAAO,EAAE,CAAA;QACX,CAAC;KACF,CAAA;IAED,SAAS,OAAO;QACd,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAA;QAEvB,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YAC/B,UAAU,GAAG,CAAC,CAAA;YACd,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC9C,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;oBAClE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;oBACrE,eAAe,EAAE,gBAAgB;iBAClC,CAAC,CAAC,CAAA;YACL,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACvC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAkB,CAAA;gBAC3D,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,eAAe,GAAG,gBAAgB,EAAE,CAAC;oBAClE,OAAO,EAAE,CACP,IAAI,KAAK,CACP,mBAAmB,GAAG,CAAC,eAAe,kCAAkC,gBAAgB,EAAE,CAC3F,CACF,CAAA;oBACD,OAAM;gBACR,CAAC;gBACD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACzB,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;oBACzB,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;oBACrB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;gBACvC,CAAC;qBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC9D,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;oBACvC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC3C,CAAC;qBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAChC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC,GAAG,CAAC,CAAA;YAChB,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACrC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAChC,IAAI,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAAA;gBAC7D,UAAU,EAAE,CAAA;gBACZ,UAAU,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YACzC,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAE,CAAa,EAAE,EAAE;QACrD,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;YAAE,OAAM;QAC5C,MAAM,IAAI,GAAG,MAAM,EAAE,qBAAqB,EAAE,CAAA;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QACjD,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAA;IAChG,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,CAAC,SAAkC,EAAE,CAAgB,EAAE,EAAE;QAC5E,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;YAAE,OAAM;QAC5C,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACrB,IAAI,EAAE,KAAK;YACX,SAAS;YACT,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,eAAe,EAAE,gBAAgB;SAClC,CAAC,CAAC,CAAA;IACL,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,CAC3B,SAA4E,EAC5E,CAAmB,EACnB,EAAE;QACF,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;YAAE,OAAM;QAC5C,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACrB,IAAI,EAAE,aAAa;YACnB,SAAS;YACT,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;YAClB,eAAe,EAAE,gBAAgB;SAClC,CAAC,CAAC,CAAA;IACL,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;YAAE,OAAM;QACvD,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACrB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YAClE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;YACrE,eAAe,EAAE,gBAAgB;SAClC,CAAC,CAAC,CAAA;IACL,CAAC,CAAA;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAC1D,MAAM,aAAa,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;QACtE,MAAM,WAAW,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;QAClE,MAAM,aAAa,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;QAEtE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACzC,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;QACrD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACjD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;QAErD,QAAQ,CAAC,IAAI,CACX,CAAC,MAAM,EAAE,OAAO,EAAE,OAAwB,CAAC,EAC3C,CAAC,MAAM,EAAE,aAAa,EAAE,aAA8B,CAAC,EACvD,CAAC,MAAM,EAAE,WAAW,EAAE,WAA4B,CAAC,EACnD,CAAC,MAAM,EAAE,aAAa,EAAE,aAA8B,CAAC,CACxD,CAAA;IACH,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,MAAM,CAAA;IAC3D,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,MAAM,IAAI,QAAQ,CAAA;IACnE,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,cAAc,YAAY,WAAW,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YACtF,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QAC9C,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,CAAgB,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAChE,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAA0B,CAAC,CAAA;QACtE,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAwB,CAAC,CAAA;QAClE,QAAQ,CAAC,IAAI,CACX,CAAC,cAAc,EAAE,SAAS,EAAE,SAA0B,CAAC,EACvD,CAAC,cAAc,EAAE,OAAO,EAAE,OAAwB,CAAC,CACpD,CAAA;IACH,CAAC;IAED,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC,MAAM,CAAA;IACjE,IAAI,kBAAkB,EAAE,CAAC;QACvB,IAAI,cAAc,YAAY,WAAW,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YACtF,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QAC9C,CAAC;QACD,MAAM,kBAAkB,GAAG,CAAC,CAAmB,EAAE,EAAE,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAA;QACjG,MAAM,mBAAmB,GAAG,CAAC,CAAmB,EAAE,EAAE,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;QACnG,MAAM,gBAAgB,GAAG,CAAC,CAAmB,EAAE,EAAE,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAA;QAC7F,cAAc,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,kBAAmC,CAAC,CAAA;QACxF,cAAc,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,mBAAoC,CAAC,CAAA;QAC1F,cAAc,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,gBAAiC,CAAC,CAAA;QACpF,QAAQ,CAAC,IAAI,CACX,CAAC,cAAc,EAAE,kBAAkB,EAAE,kBAAmC,CAAC,EACzE,CAAC,cAAc,EAAE,mBAAmB,EAAE,mBAAoC,CAAC,EAC3E,CAAC,cAAc,EAAE,gBAAgB,EAAE,gBAAiC,CAAC,CACtE,CAAA;IACH,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,MAAM,CAAA;IACvD,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,IAAI,MAAM,CAAA;QAC7C,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,UAAU,EAAE,CAAA;QACnC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAyB,CAAC,CAAA;QAC5D,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAyB,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,SAAS,OAAO;QACd,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;YAChD,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC5C,CAAC;QACD,QAAQ,CAAC,OAAO,EAAE,CAAA;IACpB,CAAC;IAED,OAAO,EAAE,CAAA;IAET,OAAO,KAAK,CAAA;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geometra/client",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Thin client that receives server-computed geometry and paints via renderer",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "https://github.com/razroo/
|
|
9
|
+
"url": "https://github.com/razroo/geometra",
|
|
10
10
|
"directory": "packages/client"
|
|
11
11
|
},
|
|
12
|
-
"homepage": "https://razroo.github.io/
|
|
12
|
+
"homepage": "https://razroo.github.io/geometra",
|
|
13
13
|
"keywords": [
|
|
14
14
|
"textura",
|
|
15
15
|
"client",
|
|
@@ -33,6 +33,6 @@
|
|
|
33
33
|
"check": "tsc --noEmit"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@geometra/core": "^0.1
|
|
36
|
+
"@geometra/core": "^0.2.1"
|
|
37
37
|
}
|
|
38
38
|
}
|