@urk/adapters 0.1.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/README.md +80 -0
- package/dist/adapters.d.ts +11 -0
- package/dist/adapters.d.ts.map +1 -0
- package/dist/adapters.js +11 -0
- package/dist/adapters.js.map +1 -0
- package/dist/contracts.d.ts +11 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +11 -0
- package/dist/contracts.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/input.d.ts +37 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +137 -0
- package/dist/input.js.map +1 -0
- package/dist/loading.d.ts +35 -0
- package/dist/loading.d.ts.map +1 -0
- package/dist/loading.js +123 -0
- package/dist/loading.js.map +1 -0
- package/dist/pointer.d.ts +43 -0
- package/dist/pointer.d.ts.map +1 -0
- package/dist/pointer.js +135 -0
- package/dist/pointer.js.map +1 -0
- package/dist/storage.d.ts +24 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +125 -0
- package/dist/storage.js.map +1 -0
- package/dist/three.d.ts +28 -0
- package/dist/three.d.ts.map +1 -0
- package/dist/three.js +131 -0
- package/dist/three.js.map +1 -0
- package/dist/ui-widgets.d.ts +23 -0
- package/dist/ui-widgets.d.ts.map +1 -0
- package/dist/ui-widgets.js +92 -0
- package/dist/ui-widgets.js.map +1 -0
- package/package.json +35 -0
- package/src/adapters.ts +11 -0
- package/src/contracts.ts +15 -0
- package/src/index.ts +5 -0
- package/src/input.ts +207 -0
- package/src/loading.ts +174 -0
- package/src/pointer.ts +203 -0
- package/src/storage.ts +194 -0
- package/src/three.ts +178 -0
- package/src/ui-widgets.ts +120 -0
package/dist/pointer.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Company: EonHive Inc.
|
|
3
|
+
* Title: Pointer Adapter
|
|
4
|
+
* Purpose: Normalize pointer target binding and emit interaction events.
|
|
5
|
+
* Author: Stan Nesi
|
|
6
|
+
* Created: 2026-04-12
|
|
7
|
+
* Updated: 2026-04-22
|
|
8
|
+
* Notes: Vibe coded with Codex.
|
|
9
|
+
*/
|
|
10
|
+
function getSurfaceCoordinates(element, nativeEvent) {
|
|
11
|
+
const bounds = element.getBoundingClientRect();
|
|
12
|
+
return {
|
|
13
|
+
clientX: nativeEvent.clientX,
|
|
14
|
+
clientY: nativeEvent.clientY,
|
|
15
|
+
localX: nativeEvent.clientX - bounds.left,
|
|
16
|
+
localY: nativeEvent.clientY - bounds.top,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function createPointerAdapter(id = 'pointer-adapter') {
|
|
20
|
+
return {
|
|
21
|
+
id,
|
|
22
|
+
capability: 'pointer',
|
|
23
|
+
setup(ctx) {
|
|
24
|
+
const cleanups = new Map();
|
|
25
|
+
const emit = (type, payload) => {
|
|
26
|
+
ctx.events.emit({
|
|
27
|
+
type,
|
|
28
|
+
source: id,
|
|
29
|
+
payload,
|
|
30
|
+
timestamp: Date.now(),
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
bindTarget(target) {
|
|
35
|
+
if (cleanups.has(target.id)) {
|
|
36
|
+
throw new Error(`Pointer target already bound: ${target.id}`);
|
|
37
|
+
}
|
|
38
|
+
const onEnter = (nativeEvent) => {
|
|
39
|
+
emit('pointer:hover', {
|
|
40
|
+
targetId: target.id,
|
|
41
|
+
element: target.element,
|
|
42
|
+
meta: target.meta,
|
|
43
|
+
nativeEvent,
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
const onLeave = (nativeEvent) => {
|
|
47
|
+
emit('pointer:leave', {
|
|
48
|
+
targetId: target.id,
|
|
49
|
+
element: target.element,
|
|
50
|
+
meta: target.meta,
|
|
51
|
+
nativeEvent,
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
const onSelect = (nativeEvent) => {
|
|
55
|
+
emit('pointer:select', {
|
|
56
|
+
targetId: target.id,
|
|
57
|
+
element: target.element,
|
|
58
|
+
meta: target.meta,
|
|
59
|
+
nativeEvent,
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
target.element.addEventListener('pointerenter', onEnter);
|
|
63
|
+
target.element.addEventListener('pointerleave', onLeave);
|
|
64
|
+
target.element.addEventListener('click', onSelect);
|
|
65
|
+
const cleanup = () => {
|
|
66
|
+
target.element.removeEventListener('pointerenter', onEnter);
|
|
67
|
+
target.element.removeEventListener('pointerleave', onLeave);
|
|
68
|
+
target.element.removeEventListener('click', onSelect);
|
|
69
|
+
};
|
|
70
|
+
cleanups.set(target.id, cleanup);
|
|
71
|
+
return () => {
|
|
72
|
+
cleanup();
|
|
73
|
+
cleanups.delete(target.id);
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
bindSurface(surface) {
|
|
77
|
+
const cleanupKey = `surface:${surface.id}`;
|
|
78
|
+
if (cleanups.has(cleanupKey)) {
|
|
79
|
+
throw new Error(`Pointer surface already bound: ${surface.id}`);
|
|
80
|
+
}
|
|
81
|
+
const onMove = (nativeEvent) => {
|
|
82
|
+
emit('pointer:surface-move', {
|
|
83
|
+
surfaceId: surface.id,
|
|
84
|
+
element: surface.element,
|
|
85
|
+
meta: surface.meta,
|
|
86
|
+
...getSurfaceCoordinates(surface.element, nativeEvent),
|
|
87
|
+
nativeEvent,
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
const onLeave = (nativeEvent) => {
|
|
91
|
+
emit('pointer:surface-leave', {
|
|
92
|
+
surfaceId: surface.id,
|
|
93
|
+
element: surface.element,
|
|
94
|
+
meta: surface.meta,
|
|
95
|
+
...getSurfaceCoordinates(surface.element, nativeEvent),
|
|
96
|
+
nativeEvent,
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
const onSelect = (nativeEvent) => {
|
|
100
|
+
emit('pointer:surface-select', {
|
|
101
|
+
surfaceId: surface.id,
|
|
102
|
+
element: surface.element,
|
|
103
|
+
meta: surface.meta,
|
|
104
|
+
...getSurfaceCoordinates(surface.element, nativeEvent),
|
|
105
|
+
nativeEvent,
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
surface.element.addEventListener('pointermove', onMove);
|
|
109
|
+
surface.element.addEventListener('pointerleave', onLeave);
|
|
110
|
+
surface.element.addEventListener('click', onSelect);
|
|
111
|
+
const cleanup = () => {
|
|
112
|
+
surface.element.removeEventListener('pointermove', onMove);
|
|
113
|
+
surface.element.removeEventListener('pointerleave', onLeave);
|
|
114
|
+
surface.element.removeEventListener('click', onSelect);
|
|
115
|
+
};
|
|
116
|
+
cleanups.set(cleanupKey, cleanup);
|
|
117
|
+
return () => {
|
|
118
|
+
cleanup();
|
|
119
|
+
cleanups.delete(cleanupKey);
|
|
120
|
+
};
|
|
121
|
+
},
|
|
122
|
+
clear() {
|
|
123
|
+
for (const cleanup of cleanups.values()) {
|
|
124
|
+
cleanup();
|
|
125
|
+
}
|
|
126
|
+
cleanups.clear();
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
},
|
|
130
|
+
dispose(_ctx, api) {
|
|
131
|
+
api.clear();
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=pointer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pointer.js","sourceRoot":"","sources":["../src/pointer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwCH,SAAS,qBAAqB,CAC5B,OAAoB,EACpB,WAAsC;IAOtC,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAE/C,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,MAAM,EAAE,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI;QACzC,MAAM,EAAE,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,EAAE,GAAG,iBAAiB;IAEtB,OAAO;QACL,EAAE;QACF,UAAU,EAAE,SAAS;QACrB,KAAK,CAAC,GAAG;YACP,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;YAE/C,MAAM,IAAI,GAAG,CAAW,IAAY,EAAE,OAAiB,EAAQ,EAAE;gBAC/D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;oBACd,IAAI;oBACJ,MAAM,EAAE,EAAE;oBACV,OAAO;oBACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC,CAAC;YACL,CAAC,CAAC;YAEF,OAAO;gBACL,UAAU,CAAC,MAAM;oBACf,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;oBAChE,CAAC;oBAED,MAAM,OAAO,GAAG,CAAC,WAAyB,EAAQ,EAAE;wBAClD,IAAI,CAAC,eAAe,EAAE;4BACpB,QAAQ,EAAE,MAAM,CAAC,EAAE;4BACnB,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,WAAW;yBACZ,CAAC,CAAC;oBACL,CAAC,CAAC;oBAEF,MAAM,OAAO,GAAG,CAAC,WAAyB,EAAQ,EAAE;wBAClD,IAAI,CAAC,eAAe,EAAE;4BACpB,QAAQ,EAAE,MAAM,CAAC,EAAE;4BACnB,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,WAAW;yBACZ,CAAC,CAAC;oBACL,CAAC,CAAC;oBAEF,MAAM,QAAQ,GAAG,CAAC,WAAuB,EAAQ,EAAE;wBACjD,IAAI,CAAC,gBAAgB,EAAE;4BACrB,QAAQ,EAAE,MAAM,CAAC,EAAE;4BACnB,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,WAAW;yBACZ,CAAC,CAAC;oBACL,CAAC,CAAC;oBAEF,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;oBACzD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;oBACzD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAEnD,MAAM,OAAO,GAAG,GAAS,EAAE;wBACzB,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;wBAC5D,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;wBAC5D,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBACxD,CAAC,CAAC;oBAEF,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;oBAEjC,OAAO,GAAG,EAAE;wBACV,OAAO,EAAE,CAAC;wBACV,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC7B,CAAC,CAAC;gBACJ,CAAC;gBACD,WAAW,CAAC,OAAO;oBACjB,MAAM,UAAU,GAAG,WAAW,OAAO,CAAC,EAAE,EAAE,CAAC;oBAE3C,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC7B,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;oBAClE,CAAC;oBAED,MAAM,MAAM,GAAG,CAAC,WAAyB,EAAQ,EAAE;wBACjD,IAAI,CAAC,sBAAsB,EAAE;4BAC3B,SAAS,EAAE,OAAO,CAAC,EAAE;4BACrB,OAAO,EAAE,OAAO,CAAC,OAAO;4BACxB,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;4BACtD,WAAW;yBACyB,CAAC,CAAC;oBAC1C,CAAC,CAAC;oBAEF,MAAM,OAAO,GAAG,CAAC,WAAyB,EAAQ,EAAE;wBAClD,IAAI,CAAC,uBAAuB,EAAE;4BAC5B,SAAS,EAAE,OAAO,CAAC,EAAE;4BACrB,OAAO,EAAE,OAAO,CAAC,OAAO;4BACxB,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;4BACtD,WAAW;yBACyB,CAAC,CAAC;oBAC1C,CAAC,CAAC;oBAEF,MAAM,QAAQ,GAAG,CAAC,WAAuB,EAAQ,EAAE;wBACjD,IAAI,CAAC,wBAAwB,EAAE;4BAC7B,SAAS,EAAE,OAAO,CAAC,EAAE;4BACrB,OAAO,EAAE,OAAO,CAAC,OAAO;4BACxB,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;4BACtD,WAAW;yBACyB,CAAC,CAAC;oBAC1C,CAAC,CAAC;oBAEF,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;oBACxD,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;oBAC1D,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAEpD,MAAM,OAAO,GAAG,GAAS,EAAE;wBACzB,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;wBAC3D,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;wBAC7D,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBACzD,CAAC,CAAC;oBAEF,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBAElC,OAAO,GAAG,EAAE;wBACV,OAAO,EAAE,CAAC;wBACV,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAC9B,CAAC,CAAC;gBACJ,CAAC;gBACD,KAAK;oBACH,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;wBACxC,OAAO,EAAE,CAAC;oBACZ,CAAC;oBAED,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,CAAC;aACF,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,GAAG;YACf,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Company: EonHive Inc.
|
|
3
|
+
* Title: Storage Adapter
|
|
4
|
+
* Purpose: Expose a small namespaced storage capability for local and session persistence.
|
|
5
|
+
* Author: Stan Nesi
|
|
6
|
+
* Created: 2026-04-21
|
|
7
|
+
* Updated: 2026-04-21
|
|
8
|
+
* Notes: Vibe coded with Codex.
|
|
9
|
+
*/
|
|
10
|
+
import type { AdapterRegistration } from '@urk/core';
|
|
11
|
+
export type StorageArea = 'local' | 'session';
|
|
12
|
+
export interface StorageAdapterOptions {
|
|
13
|
+
id?: string;
|
|
14
|
+
namespace?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface StorageAdapterApi {
|
|
17
|
+
getItem<T = unknown>(key: string, area?: StorageArea): T | null;
|
|
18
|
+
setItem<T>(key: string, value: T, area?: StorageArea): void;
|
|
19
|
+
removeItem(key: string, area?: StorageArea): void;
|
|
20
|
+
listKeys(area?: StorageArea): string[];
|
|
21
|
+
clear(area?: StorageArea): void;
|
|
22
|
+
}
|
|
23
|
+
export declare function createStorageAdapter(options?: StorageAdapterOptions): AdapterRegistration<StorageAdapterApi>;
|
|
24
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,WAAW,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC;IAChE,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5D,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACjC;AA2GD,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,qBAA0B,GAClC,mBAAmB,CAAC,iBAAiB,CAAC,CA2DxC"}
|
package/dist/storage.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Company: EonHive Inc.
|
|
3
|
+
* Title: Storage Adapter
|
|
4
|
+
* Purpose: Expose a small namespaced storage capability for local and session persistence.
|
|
5
|
+
* Author: Stan Nesi
|
|
6
|
+
* Created: 2026-04-21
|
|
7
|
+
* Updated: 2026-04-21
|
|
8
|
+
* Notes: Vibe coded with Codex.
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_NAMESPACE = 'urk';
|
|
11
|
+
function isStorageBackendLike(value) {
|
|
12
|
+
if (typeof value !== 'object' || value === null) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
const candidate = value;
|
|
16
|
+
return (typeof candidate.length === 'number' &&
|
|
17
|
+
typeof candidate.key === 'function' &&
|
|
18
|
+
typeof candidate.getItem === 'function' &&
|
|
19
|
+
typeof candidate.setItem === 'function' &&
|
|
20
|
+
typeof candidate.removeItem === 'function');
|
|
21
|
+
}
|
|
22
|
+
function resolveServiceBackend(ctx, area) {
|
|
23
|
+
const serviceName = area === 'local' ? 'storage:local' : 'storage:session';
|
|
24
|
+
const value = ctx.services.get(serviceName);
|
|
25
|
+
if (value === undefined) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
if (!isStorageBackendLike(value)) {
|
|
29
|
+
throw new Error(`Service ${serviceName} must provide a Storage-compatible backend.`);
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
function resolveWindowBackend(area) {
|
|
34
|
+
if (typeof window === 'undefined') {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
return area === 'local' ? window.localStorage : window.sessionStorage;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
const message = error instanceof Error ? error.message : `Unable to access ${area}Storage.`;
|
|
42
|
+
throw new Error(`Storage adapter could not access ${area}Storage: ${message}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function resolveBackend(ctx, area) {
|
|
46
|
+
const serviceBackend = resolveServiceBackend(ctx, area);
|
|
47
|
+
if (serviceBackend) {
|
|
48
|
+
return serviceBackend;
|
|
49
|
+
}
|
|
50
|
+
const windowBackend = resolveWindowBackend(area);
|
|
51
|
+
if (windowBackend) {
|
|
52
|
+
return windowBackend;
|
|
53
|
+
}
|
|
54
|
+
throw new Error(`Storage adapter requires a ${area} storage backend.`);
|
|
55
|
+
}
|
|
56
|
+
function getStoragePrefix(namespace) {
|
|
57
|
+
return `${namespace}:`;
|
|
58
|
+
}
|
|
59
|
+
function getNamespacedKey(namespace, key) {
|
|
60
|
+
return `${getStoragePrefix(namespace)}${key}`;
|
|
61
|
+
}
|
|
62
|
+
function collectNamespacedKeys(backend, namespace) {
|
|
63
|
+
const keys = [];
|
|
64
|
+
const prefix = getStoragePrefix(namespace);
|
|
65
|
+
for (let index = 0; index < backend.length; index += 1) {
|
|
66
|
+
const key = backend.key(index);
|
|
67
|
+
if (!key || !key.startsWith(prefix)) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
keys.push(key.slice(prefix.length));
|
|
71
|
+
}
|
|
72
|
+
return keys;
|
|
73
|
+
}
|
|
74
|
+
export function createStorageAdapter(options = {}) {
|
|
75
|
+
const id = options.id ?? 'storage-adapter';
|
|
76
|
+
const namespace = options.namespace?.trim() || DEFAULT_NAMESPACE;
|
|
77
|
+
return {
|
|
78
|
+
id,
|
|
79
|
+
capability: 'storage',
|
|
80
|
+
setup(ctx) {
|
|
81
|
+
const backends = {
|
|
82
|
+
local: resolveBackend(ctx, 'local'),
|
|
83
|
+
session: resolveBackend(ctx, 'session'),
|
|
84
|
+
};
|
|
85
|
+
const getBackend = (area = 'local') => {
|
|
86
|
+
return backends[area];
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
getItem(key, area = 'local') {
|
|
90
|
+
const raw = getBackend(area).getItem(getNamespacedKey(namespace, key));
|
|
91
|
+
if (raw === null) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
return JSON.parse(raw);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
throw new Error(`Stored value for key "${key}" in ${area} storage is not valid JSON.`);
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
setItem(key, value, area = 'local') {
|
|
102
|
+
const serialized = JSON.stringify(value);
|
|
103
|
+
if (serialized === undefined) {
|
|
104
|
+
throw new Error(`Storage value for key "${key}" is not JSON serializable.`);
|
|
105
|
+
}
|
|
106
|
+
getBackend(area).setItem(getNamespacedKey(namespace, key), serialized);
|
|
107
|
+
},
|
|
108
|
+
removeItem(key, area = 'local') {
|
|
109
|
+
getBackend(area).removeItem(getNamespacedKey(namespace, key));
|
|
110
|
+
},
|
|
111
|
+
listKeys(area = 'local') {
|
|
112
|
+
return collectNamespacedKeys(getBackend(area), namespace);
|
|
113
|
+
},
|
|
114
|
+
clear(area = 'local') {
|
|
115
|
+
const backend = getBackend(area);
|
|
116
|
+
// Only remove keys owned by this adapter namespace.
|
|
117
|
+
for (const key of collectNamespacedKeys(backend, namespace)) {
|
|
118
|
+
backend.removeItem(getNamespacedKey(namespace, key));
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2BH,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,KAAoC,CAAC;IAEvD,OAAO,CACL,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;QACpC,OAAO,SAAS,CAAC,GAAG,KAAK,UAAU;QACnC,OAAO,SAAS,CAAC,OAAO,KAAK,UAAU;QACvC,OAAO,SAAS,CAAC,OAAO,KAAK,UAAU;QACvC,OAAO,SAAS,CAAC,UAAU,KAAK,UAAU,CAC3C,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,GAAmB,EACnB,IAAiB;IAEjB,MAAM,WAAW,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC3E,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAU,WAAW,CAAC,CAAC;IAErD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,WAAW,WAAW,6CAA6C,CACpE,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAiB;IAC7C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,IAAI,UAAU,CAAC;QAE9E,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,YAAY,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAmB,EAAE,IAAiB;IAC5D,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAExD,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,mBAAmB,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB;IACzC,OAAO,GAAG,SAAS,GAAG,CAAC;AACzB,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB,EAAE,GAAW;IACtD,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAA2B,EAC3B,SAAiB;IAEjB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE3C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,SAAS;QACX,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,UAAiC,EAAE;IAEnC,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,iBAAiB,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,iBAAiB,CAAC;IAEjE,OAAO;QACL,EAAE;QACF,UAAU,EAAE,SAAS;QACrB,KAAK,CAAC,GAAG;YACP,MAAM,QAAQ,GAA4C;gBACxD,KAAK,EAAE,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;gBACnC,OAAO,EAAE,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC;aACxC,CAAC;YAEF,MAAM,UAAU,GAAG,CAAC,OAAoB,OAAO,EAAsB,EAAE;gBACrE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC,CAAC;YAEF,OAAO;gBACL,OAAO,CAAc,GAAW,EAAE,OAAoB,OAAO;oBAC3D,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;oBAEvE,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;wBACjB,OAAO,IAAI,CAAC;oBACd,CAAC;oBAED,IAAI,CAAC;wBACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;oBAC9B,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,IAAI,KAAK,CACb,yBAAyB,GAAG,QAAQ,IAAI,6BAA6B,CACtE,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,OAAO,CAAI,GAAW,EAAE,KAAQ,EAAE,OAAoB,OAAO;oBAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAEzC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;wBAC7B,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,6BAA6B,CAAC,CAAC;oBAC9E,CAAC;oBAED,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;gBACzE,CAAC;gBACD,UAAU,CAAC,GAAW,EAAE,OAAoB,OAAO;oBACjD,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;gBAChE,CAAC;gBACD,QAAQ,CAAC,OAAoB,OAAO;oBAClC,OAAO,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC5D,CAAC;gBACD,KAAK,CAAC,OAAoB,OAAO;oBAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;oBAEjC,oDAAoD;oBACpD,KAAK,MAAM,GAAG,IAAI,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;wBAC5D,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/three.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Company: EonHive Inc.
|
|
3
|
+
* Title: Three Adapter
|
|
4
|
+
* Purpose: Mount a small Three.js scene surface behind a stable URK capability contract.
|
|
5
|
+
* Author: Stan Nesi
|
|
6
|
+
* Created: 2026-04-22
|
|
7
|
+
* Updated: 2026-04-22
|
|
8
|
+
* Notes: Vibe coded with Codex.
|
|
9
|
+
*/
|
|
10
|
+
import type { AdapterRegistration } from '@urk/core';
|
|
11
|
+
import * as THREE from 'three';
|
|
12
|
+
export interface ThreeAdapterSize {
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ThreeAdapterApi {
|
|
17
|
+
getHost(): HTMLElement;
|
|
18
|
+
getCanvas(): HTMLCanvasElement;
|
|
19
|
+
getScene(): THREE.Scene;
|
|
20
|
+
getCamera(): THREE.PerspectiveCamera;
|
|
21
|
+
getRenderer(): THREE.WebGLRenderer;
|
|
22
|
+
getSize(): ThreeAdapterSize;
|
|
23
|
+
resize(): void;
|
|
24
|
+
render(): void;
|
|
25
|
+
raycast(clientX: number, clientY: number, objects: THREE.Object3D[]): THREE.Intersection<THREE.Object3D>[];
|
|
26
|
+
}
|
|
27
|
+
export declare function createThreeAdapter(id?: string): AdapterRegistration<ThreeAdapterApi>;
|
|
28
|
+
//# sourceMappingURL=three.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"three.d.ts","sourceRoot":"","sources":["../src/three.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,WAAW,CAAC;IACvB,SAAS,IAAI,iBAAiB,CAAC;IAC/B,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;IACxB,SAAS,IAAI,KAAK,CAAC,iBAAiB,CAAC;IACrC,WAAW,IAAI,KAAK,CAAC,aAAa,CAAC;IACnC,OAAO,IAAI,gBAAgB,CAAC;IAC5B,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,CACL,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,GACxB,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;CACzC;AAyBD,wBAAgB,kBAAkB,CAChC,EAAE,SAAkB,GACnB,mBAAmB,CAAC,eAAe,CAAC,CAsHtC"}
|
package/dist/three.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Company: EonHive Inc.
|
|
3
|
+
* Title: Three Adapter
|
|
4
|
+
* Purpose: Mount a small Three.js scene surface behind a stable URK capability contract.
|
|
5
|
+
* Author: Stan Nesi
|
|
6
|
+
* Created: 2026-04-22
|
|
7
|
+
* Updated: 2026-04-22
|
|
8
|
+
* Notes: Vibe coded with Codex.
|
|
9
|
+
*/
|
|
10
|
+
import * as THREE from 'three';
|
|
11
|
+
function assertHtmlElement(value, serviceName) {
|
|
12
|
+
if (typeof HTMLElement === 'undefined' || !(value instanceof HTMLElement)) {
|
|
13
|
+
throw new Error(`Service ${serviceName} must be an HTMLElement.`);
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
function getHostSize(host) {
|
|
18
|
+
return {
|
|
19
|
+
width: Math.max(host.clientWidth, 1),
|
|
20
|
+
height: Math.max(host.clientHeight, 1),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function getPixelRatio() {
|
|
24
|
+
if (typeof window === 'undefined') {
|
|
25
|
+
return 1;
|
|
26
|
+
}
|
|
27
|
+
return Math.min(window.devicePixelRatio || 1, 2);
|
|
28
|
+
}
|
|
29
|
+
export function createThreeAdapter(id = 'three-adapter') {
|
|
30
|
+
let disposeResizeTracking = null;
|
|
31
|
+
return {
|
|
32
|
+
id,
|
|
33
|
+
capability: 'three',
|
|
34
|
+
isSupported() {
|
|
35
|
+
return typeof window !== 'undefined' && typeof document !== 'undefined';
|
|
36
|
+
},
|
|
37
|
+
setup(ctx) {
|
|
38
|
+
const host = assertHtmlElement(ctx.services.require('three:host'), 'three:host');
|
|
39
|
+
const scene = new THREE.Scene();
|
|
40
|
+
const camera = new THREE.PerspectiveCamera(42, 1, 0.1, 100);
|
|
41
|
+
const renderer = new THREE.WebGLRenderer({
|
|
42
|
+
alpha: true,
|
|
43
|
+
antialias: true,
|
|
44
|
+
});
|
|
45
|
+
const raycaster = new THREE.Raycaster();
|
|
46
|
+
const raycastPointer = new THREE.Vector2();
|
|
47
|
+
camera.position.set(0, 0, 5.75);
|
|
48
|
+
camera.lookAt(0, 0, 0);
|
|
49
|
+
renderer.outputColorSpace = THREE.SRGBColorSpace;
|
|
50
|
+
renderer.setClearColor(0x000000, 0);
|
|
51
|
+
renderer.domElement.style.width = '100%';
|
|
52
|
+
renderer.domElement.style.height = '100%';
|
|
53
|
+
renderer.domElement.style.display = 'block';
|
|
54
|
+
renderer.domElement.style.pointerEvents = 'none';
|
|
55
|
+
host.append(renderer.domElement);
|
|
56
|
+
let size = getHostSize(host);
|
|
57
|
+
const resize = () => {
|
|
58
|
+
size = getHostSize(host);
|
|
59
|
+
renderer.setPixelRatio(getPixelRatio());
|
|
60
|
+
renderer.setSize(size.width, size.height, false);
|
|
61
|
+
camera.aspect = size.width / size.height;
|
|
62
|
+
camera.updateProjectionMatrix();
|
|
63
|
+
};
|
|
64
|
+
resize();
|
|
65
|
+
if (typeof ResizeObserver !== 'undefined') {
|
|
66
|
+
const observer = new ResizeObserver(() => {
|
|
67
|
+
resize();
|
|
68
|
+
});
|
|
69
|
+
observer.observe(host);
|
|
70
|
+
disposeResizeTracking = () => {
|
|
71
|
+
observer.disconnect();
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
else if (typeof window !== 'undefined') {
|
|
75
|
+
const onResize = () => {
|
|
76
|
+
resize();
|
|
77
|
+
};
|
|
78
|
+
window.addEventListener('resize', onResize);
|
|
79
|
+
disposeResizeTracking = () => {
|
|
80
|
+
window.removeEventListener('resize', onResize);
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
disposeResizeTracking = null;
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
getHost() {
|
|
88
|
+
return host;
|
|
89
|
+
},
|
|
90
|
+
getCanvas() {
|
|
91
|
+
return renderer.domElement;
|
|
92
|
+
},
|
|
93
|
+
getScene() {
|
|
94
|
+
return scene;
|
|
95
|
+
},
|
|
96
|
+
getCamera() {
|
|
97
|
+
return camera;
|
|
98
|
+
},
|
|
99
|
+
getRenderer() {
|
|
100
|
+
return renderer;
|
|
101
|
+
},
|
|
102
|
+
getSize() {
|
|
103
|
+
return { ...size };
|
|
104
|
+
},
|
|
105
|
+
resize,
|
|
106
|
+
render() {
|
|
107
|
+
renderer.render(scene, camera);
|
|
108
|
+
},
|
|
109
|
+
raycast(clientX, clientY, objects) {
|
|
110
|
+
if (objects.length === 0) {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
const bounds = renderer.domElement.getBoundingClientRect();
|
|
114
|
+
if (bounds.width <= 0 || bounds.height <= 0) {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
raycastPointer.set(((clientX - bounds.left) / bounds.width) * 2 - 1, -((clientY - bounds.top) / bounds.height) * 2 + 1);
|
|
118
|
+
raycaster.setFromCamera(raycastPointer, camera);
|
|
119
|
+
return raycaster.intersectObjects(objects, true);
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
},
|
|
123
|
+
dispose(_ctx, api) {
|
|
124
|
+
disposeResizeTracking?.();
|
|
125
|
+
disposeResizeTracking = null;
|
|
126
|
+
api.getRenderer().dispose();
|
|
127
|
+
api.getCanvas().remove();
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=three.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"three.js","sourceRoot":"","sources":["../src/three.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Company: EonHive Inc.
|
|
3
|
+
* Title: UI Widgets Adapter
|
|
4
|
+
* Purpose: Mount a small overlay shell with status and callout surfaces.
|
|
5
|
+
* Author: Stan Nesi
|
|
6
|
+
* Created: 2026-04-12
|
|
7
|
+
* Updated: 2026-04-15
|
|
8
|
+
* Notes: Vibe coded with Codex.
|
|
9
|
+
*/
|
|
10
|
+
import type { AdapterRegistration } from '@urk/core';
|
|
11
|
+
export interface UiWidgetCallout {
|
|
12
|
+
title: string;
|
|
13
|
+
body: string;
|
|
14
|
+
tone?: 'neutral' | 'active' | 'selected';
|
|
15
|
+
}
|
|
16
|
+
export interface UiWidgetsAdapterApi {
|
|
17
|
+
setStatus(message: string): void;
|
|
18
|
+
showCallout(callout: UiWidgetCallout): void;
|
|
19
|
+
hideCallout(): void;
|
|
20
|
+
destroy(): void;
|
|
21
|
+
}
|
|
22
|
+
export declare function createUiWidgetsAdapter(id?: string): AdapterRegistration<UiWidgetsAdapterApi>;
|
|
23
|
+
//# sourceMappingURL=ui-widgets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-widgets.d.ts","sourceRoot":"","sources":["../src/ui-widgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAC5C,WAAW,IAAI,IAAI,CAAC;IACpB,OAAO,IAAI,IAAI,CAAC;CACjB;AAUD,wBAAgB,sBAAsB,CACpC,EAAE,SAAuB,GACxB,mBAAmB,CAAC,mBAAmB,CAAC,CAoF1C"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Company: EonHive Inc.
|
|
3
|
+
* Title: UI Widgets Adapter
|
|
4
|
+
* Purpose: Mount a small overlay shell with status and callout surfaces.
|
|
5
|
+
* Author: Stan Nesi
|
|
6
|
+
* Created: 2026-04-12
|
|
7
|
+
* Updated: 2026-04-15
|
|
8
|
+
* Notes: Vibe coded with Codex.
|
|
9
|
+
*/
|
|
10
|
+
function assertHtmlElement(value, serviceName) {
|
|
11
|
+
if (typeof HTMLElement === 'undefined' || !(value instanceof HTMLElement)) {
|
|
12
|
+
throw new Error(`Service ${serviceName} must be an HTMLElement.`);
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
export function createUiWidgetsAdapter(id = 'ui-widgets-adapter') {
|
|
17
|
+
return {
|
|
18
|
+
id,
|
|
19
|
+
capability: 'ui-widgets',
|
|
20
|
+
setup(ctx) {
|
|
21
|
+
const host = assertHtmlElement(ctx.services.require('ui:host'), 'ui:host');
|
|
22
|
+
const root = document.createElement('div');
|
|
23
|
+
const status = document.createElement('div');
|
|
24
|
+
const callout = document.createElement('div');
|
|
25
|
+
const title = document.createElement('div');
|
|
26
|
+
const body = document.createElement('div');
|
|
27
|
+
root.style.position = 'absolute';
|
|
28
|
+
root.style.inset = '0';
|
|
29
|
+
root.style.pointerEvents = 'none';
|
|
30
|
+
root.style.display = 'flex';
|
|
31
|
+
root.style.flexDirection = 'column';
|
|
32
|
+
root.style.justifyContent = 'space-between';
|
|
33
|
+
root.style.padding = '16px';
|
|
34
|
+
status.style.alignSelf = 'flex-start';
|
|
35
|
+
status.style.padding = '8px 12px';
|
|
36
|
+
status.style.borderRadius = '999px';
|
|
37
|
+
status.style.background = 'rgba(15, 23, 42, 0.82)';
|
|
38
|
+
status.style.color = '#f8fafc';
|
|
39
|
+
status.style.fontSize = '13px';
|
|
40
|
+
status.style.fontWeight = '600';
|
|
41
|
+
status.style.letterSpacing = '0.02em';
|
|
42
|
+
status.style.backdropFilter = 'blur(12px)';
|
|
43
|
+
callout.style.alignSelf = 'flex-end';
|
|
44
|
+
callout.style.maxWidth = '280px';
|
|
45
|
+
callout.style.padding = '14px 16px';
|
|
46
|
+
callout.style.borderRadius = '18px';
|
|
47
|
+
callout.style.background = 'rgba(15, 23, 42, 0.92)';
|
|
48
|
+
callout.style.color = '#f8fafc';
|
|
49
|
+
callout.style.boxShadow = '0 20px 45px rgba(15, 23, 42, 0.22)';
|
|
50
|
+
callout.style.backdropFilter = 'blur(12px)';
|
|
51
|
+
callout.style.display = 'none';
|
|
52
|
+
title.style.fontSize = '14px';
|
|
53
|
+
title.style.fontWeight = '700';
|
|
54
|
+
title.style.marginBottom = '6px';
|
|
55
|
+
body.style.fontSize = '13px';
|
|
56
|
+
body.style.lineHeight = '1.5';
|
|
57
|
+
body.style.opacity = '0.92';
|
|
58
|
+
callout.append(title, body);
|
|
59
|
+
root.append(status, callout);
|
|
60
|
+
host.append(root);
|
|
61
|
+
const applyTone = (tone = 'neutral') => {
|
|
62
|
+
const palette = {
|
|
63
|
+
neutral: 'rgba(15, 23, 42, 0.92)',
|
|
64
|
+
active: 'rgba(14, 116, 144, 0.92)',
|
|
65
|
+
selected: 'rgba(22, 101, 52, 0.94)',
|
|
66
|
+
};
|
|
67
|
+
callout.style.background = palette[tone];
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
setStatus(message) {
|
|
71
|
+
status.textContent = message;
|
|
72
|
+
},
|
|
73
|
+
showCallout(config) {
|
|
74
|
+
title.textContent = config.title;
|
|
75
|
+
body.textContent = config.body;
|
|
76
|
+
callout.style.display = 'block';
|
|
77
|
+
applyTone(config.tone);
|
|
78
|
+
},
|
|
79
|
+
hideCallout() {
|
|
80
|
+
callout.style.display = 'none';
|
|
81
|
+
},
|
|
82
|
+
destroy() {
|
|
83
|
+
root.remove();
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
dispose(_ctx, api) {
|
|
88
|
+
api.destroy();
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=ui-widgets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-widgets.js","sourceRoot":"","sources":["../src/ui-widgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiBH,SAAS,iBAAiB,CAAC,KAAc,EAAE,WAAmB;IAC5D,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,WAAW,WAAW,0BAA0B,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,EAAE,GAAG,oBAAoB;IAEzB,OAAO;QACL,EAAE;QACF,UAAU,EAAE,YAAY;QACxB,KAAK,CAAC,GAAG;YACP,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAE3C,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,eAAe,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAE5B,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,wBAAwB,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,YAAY,CAAC;YAE3C,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,wBAAwB,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,oCAAoC,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,YAAY,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAE/B,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC9B,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;YAC/B,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;YAEjC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAE5B,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAElB,MAAM,SAAS,GAAG,CAAC,OAAgC,SAAS,EAAQ,EAAE;gBACpE,MAAM,OAAO,GAAG;oBACd,OAAO,EAAE,wBAAwB;oBACjC,MAAM,EAAE,0BAA0B;oBAClC,QAAQ,EAAE,yBAAyB;iBAC3B,CAAC;gBAEX,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC,CAAC;YAEF,OAAO;gBACL,SAAS,CAAC,OAAO;oBACf,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC;gBAC/B,CAAC;gBACD,WAAW,CAAC,MAAM;oBAChB,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;oBACjC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;oBAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;oBAChC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;gBACD,WAAW;oBACT,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBACjC,CAAC;gBACD,OAAO;oBACL,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,CAAC;aACF,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,GAAG;YACf,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@urk/adapters",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "URK adapters - reference three, pointer, input, loading, storage, and overlay capability adapters",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"src"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsc --watch",
|
|
22
|
+
"test": "echo 'manual validation only for this milestone'",
|
|
23
|
+
"lint": "echo 'no lint yet'"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"@urk/core": "workspace:*",
|
|
27
|
+
"three": "^0.184.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/three": "^0.184.0",
|
|
31
|
+
"@urk/core": "workspace:*",
|
|
32
|
+
"three": "^0.184.0",
|
|
33
|
+
"typescript": "^5.3.0"
|
|
34
|
+
}
|
|
35
|
+
}
|
package/src/adapters.ts
ADDED