@urk/adapters 0.1.3 → 0.1.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.
Files changed (63) hide show
  1. package/README.md +10 -2
  2. package/dist/adapters.d.ts +7 -7
  3. package/dist/adapters.d.ts.map +1 -1
  4. package/dist/adapters.js +7 -7
  5. package/dist/adapters.js.map +1 -1
  6. package/dist/{audio.d.ts → audio/index.d.ts} +1 -1
  7. package/dist/audio/index.d.ts.map +1 -0
  8. package/dist/{audio.js → audio/index.js} +1 -1
  9. package/dist/audio/index.js.map +1 -0
  10. package/dist/dom.d.ts +5 -5
  11. package/dist/dom.d.ts.map +1 -1
  12. package/dist/dom.js +5 -5
  13. package/dist/dom.js.map +1 -1
  14. package/dist/{input.d.ts → input/index.d.ts} +1 -1
  15. package/dist/input/index.d.ts.map +1 -0
  16. package/dist/{input.js → input/index.js} +1 -1
  17. package/dist/input/index.js.map +1 -0
  18. package/dist/{loading.d.ts → loading/index.d.ts} +1 -1
  19. package/dist/loading/index.d.ts.map +1 -0
  20. package/dist/{loading.js → loading/index.js} +1 -1
  21. package/dist/loading/index.js.map +1 -0
  22. package/dist/{pointer.d.ts → pointer/index.d.ts} +1 -1
  23. package/dist/pointer/index.d.ts.map +1 -0
  24. package/dist/{pointer.js → pointer/index.js} +1 -1
  25. package/dist/pointer/index.js.map +1 -0
  26. package/dist/{storage.d.ts → storage/index.d.ts} +1 -1
  27. package/dist/storage/index.d.ts.map +1 -0
  28. package/dist/{storage.js → storage/index.js} +1 -1
  29. package/dist/storage/index.js.map +1 -0
  30. package/dist/{three.d.ts → three/index.d.ts} +1 -1
  31. package/dist/three/index.d.ts.map +1 -0
  32. package/dist/{three.js → three/index.js} +1 -1
  33. package/dist/three/index.js.map +1 -0
  34. package/dist/{ui-widgets.d.ts → ui-widgets/index.d.ts} +1 -1
  35. package/dist/ui-widgets/index.d.ts.map +1 -0
  36. package/dist/{ui-widgets.js → ui-widgets/index.js} +1 -1
  37. package/dist/ui-widgets/index.js.map +1 -0
  38. package/package.json +3 -4
  39. package/dist/audio.d.ts.map +0 -1
  40. package/dist/audio.js.map +0 -1
  41. package/dist/input.d.ts.map +0 -1
  42. package/dist/input.js.map +0 -1
  43. package/dist/loading.d.ts.map +0 -1
  44. package/dist/loading.js.map +0 -1
  45. package/dist/pointer.d.ts.map +0 -1
  46. package/dist/pointer.js.map +0 -1
  47. package/dist/storage.d.ts.map +0 -1
  48. package/dist/storage.js.map +0 -1
  49. package/dist/three.d.ts.map +0 -1
  50. package/dist/three.js.map +0 -1
  51. package/dist/ui-widgets.d.ts.map +0 -1
  52. package/dist/ui-widgets.js.map +0 -1
  53. package/src/adapters.ts +0 -12
  54. package/src/audio.ts +0 -458
  55. package/src/contracts.ts +0 -15
  56. package/src/dom.ts +0 -16
  57. package/src/index.ts +0 -5
  58. package/src/input.ts +0 -207
  59. package/src/loading.ts +0 -174
  60. package/src/pointer.ts +0 -203
  61. package/src/storage.ts +0 -194
  62. package/src/three.ts +0 -178
  63. package/src/ui-widgets.ts +0 -120
package/src/three.ts DELETED
@@ -1,178 +0,0 @@
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
-
11
- import type { AdapterRegistration } from '@urk/core';
12
- import * as THREE from 'three';
13
-
14
- export interface ThreeAdapterSize {
15
- width: number;
16
- height: number;
17
- }
18
-
19
- export interface ThreeAdapterApi {
20
- getHost(): HTMLElement;
21
- getCanvas(): HTMLCanvasElement;
22
- getScene(): THREE.Scene;
23
- getCamera(): THREE.PerspectiveCamera;
24
- getRenderer(): THREE.WebGLRenderer;
25
- getSize(): ThreeAdapterSize;
26
- resize(): void;
27
- render(): void;
28
- raycast(
29
- clientX: number,
30
- clientY: number,
31
- objects: THREE.Object3D[],
32
- ): THREE.Intersection<THREE.Object3D>[];
33
- }
34
-
35
- function assertHtmlElement(value: unknown, serviceName: string): HTMLElement {
36
- if (typeof HTMLElement === 'undefined' || !(value instanceof HTMLElement)) {
37
- throw new Error(`Service ${serviceName} must be an HTMLElement.`);
38
- }
39
-
40
- return value;
41
- }
42
-
43
- function getHostSize(host: HTMLElement): ThreeAdapterSize {
44
- return {
45
- width: Math.max(host.clientWidth, 1),
46
- height: Math.max(host.clientHeight, 1),
47
- };
48
- }
49
-
50
- function getPixelRatio(): number {
51
- if (typeof window === 'undefined') {
52
- return 1;
53
- }
54
-
55
- return Math.min(window.devicePixelRatio || 1, 2);
56
- }
57
-
58
- export function createThreeAdapter(
59
- id = 'three-adapter',
60
- ): AdapterRegistration<ThreeAdapterApi> {
61
- let disposeResizeTracking: (() => void) | null = null;
62
-
63
- return {
64
- id,
65
- capability: 'three',
66
- isSupported() {
67
- return typeof window !== 'undefined' && typeof document !== 'undefined';
68
- },
69
- setup(ctx) {
70
- const host = assertHtmlElement(ctx.services.require('three:host'), 'three:host');
71
- const scene = new THREE.Scene();
72
- const camera = new THREE.PerspectiveCamera(42, 1, 0.1, 100);
73
- const renderer = new THREE.WebGLRenderer({
74
- alpha: true,
75
- antialias: true,
76
- });
77
- const raycaster = new THREE.Raycaster();
78
- const raycastPointer = new THREE.Vector2();
79
-
80
- camera.position.set(0, 0, 5.75);
81
- camera.lookAt(0, 0, 0);
82
-
83
- renderer.outputColorSpace = THREE.SRGBColorSpace;
84
- renderer.setClearColor(0x000000, 0);
85
- renderer.domElement.style.width = '100%';
86
- renderer.domElement.style.height = '100%';
87
- renderer.domElement.style.display = 'block';
88
- renderer.domElement.style.pointerEvents = 'none';
89
-
90
- host.append(renderer.domElement);
91
-
92
- let size = getHostSize(host);
93
-
94
- const resize = (): void => {
95
- size = getHostSize(host);
96
- renderer.setPixelRatio(getPixelRatio());
97
- renderer.setSize(size.width, size.height, false);
98
- camera.aspect = size.width / size.height;
99
- camera.updateProjectionMatrix();
100
- };
101
-
102
- resize();
103
-
104
- if (typeof ResizeObserver !== 'undefined') {
105
- const observer = new ResizeObserver(() => {
106
- resize();
107
- });
108
-
109
- observer.observe(host);
110
- disposeResizeTracking = () => {
111
- observer.disconnect();
112
- };
113
- } else if (typeof window !== 'undefined') {
114
- const onResize = (): void => {
115
- resize();
116
- };
117
-
118
- window.addEventListener('resize', onResize);
119
- disposeResizeTracking = () => {
120
- window.removeEventListener('resize', onResize);
121
- };
122
- } else {
123
- disposeResizeTracking = null;
124
- }
125
-
126
- return {
127
- getHost() {
128
- return host;
129
- },
130
- getCanvas() {
131
- return renderer.domElement;
132
- },
133
- getScene() {
134
- return scene;
135
- },
136
- getCamera() {
137
- return camera;
138
- },
139
- getRenderer() {
140
- return renderer;
141
- },
142
- getSize() {
143
- return { ...size };
144
- },
145
- resize,
146
- render() {
147
- renderer.render(scene, camera);
148
- },
149
- raycast(clientX, clientY, objects) {
150
- if (objects.length === 0) {
151
- return [];
152
- }
153
-
154
- const bounds = renderer.domElement.getBoundingClientRect();
155
-
156
- if (bounds.width <= 0 || bounds.height <= 0) {
157
- return [];
158
- }
159
-
160
- raycastPointer.set(
161
- ((clientX - bounds.left) / bounds.width) * 2 - 1,
162
- -((clientY - bounds.top) / bounds.height) * 2 + 1,
163
- );
164
-
165
- raycaster.setFromCamera(raycastPointer, camera);
166
-
167
- return raycaster.intersectObjects(objects, true);
168
- },
169
- };
170
- },
171
- dispose(_ctx, api) {
172
- disposeResizeTracking?.();
173
- disposeResizeTracking = null;
174
- api.getRenderer().dispose();
175
- api.getCanvas().remove();
176
- },
177
- };
178
- }
package/src/ui-widgets.ts DELETED
@@ -1,120 +0,0 @@
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
-
11
- import type { AdapterRegistration } from '@urk/core';
12
-
13
- export interface UiWidgetCallout {
14
- title: string;
15
- body: string;
16
- tone?: 'neutral' | 'active' | 'selected';
17
- }
18
-
19
- export interface UiWidgetsAdapterApi {
20
- setStatus(message: string): void;
21
- showCallout(callout: UiWidgetCallout): void;
22
- hideCallout(): void;
23
- destroy(): void;
24
- }
25
-
26
- function assertHtmlElement(value: unknown, serviceName: string): HTMLElement {
27
- if (typeof HTMLElement === 'undefined' || !(value instanceof HTMLElement)) {
28
- throw new Error(`Service ${serviceName} must be an HTMLElement.`);
29
- }
30
-
31
- return value;
32
- }
33
-
34
- export function createUiWidgetsAdapter(
35
- id = 'ui-widgets-adapter',
36
- ): AdapterRegistration<UiWidgetsAdapterApi> {
37
- return {
38
- id,
39
- capability: 'ui-widgets',
40
- setup(ctx) {
41
- const host = assertHtmlElement(ctx.services.require('ui:host'), 'ui:host');
42
- const root = document.createElement('div');
43
- const status = document.createElement('div');
44
- const callout = document.createElement('div');
45
- const title = document.createElement('div');
46
- const body = document.createElement('div');
47
-
48
- root.style.position = 'absolute';
49
- root.style.inset = '0';
50
- root.style.pointerEvents = 'none';
51
- root.style.display = 'flex';
52
- root.style.flexDirection = 'column';
53
- root.style.justifyContent = 'space-between';
54
- root.style.padding = '16px';
55
-
56
- status.style.alignSelf = 'flex-start';
57
- status.style.padding = '8px 12px';
58
- status.style.borderRadius = '999px';
59
- status.style.background = 'rgba(15, 23, 42, 0.82)';
60
- status.style.color = '#f8fafc';
61
- status.style.fontSize = '13px';
62
- status.style.fontWeight = '600';
63
- status.style.letterSpacing = '0.02em';
64
- status.style.backdropFilter = 'blur(12px)';
65
-
66
- callout.style.alignSelf = 'flex-end';
67
- callout.style.maxWidth = '280px';
68
- callout.style.padding = '14px 16px';
69
- callout.style.borderRadius = '18px';
70
- callout.style.background = 'rgba(15, 23, 42, 0.92)';
71
- callout.style.color = '#f8fafc';
72
- callout.style.boxShadow = '0 20px 45px rgba(15, 23, 42, 0.22)';
73
- callout.style.backdropFilter = 'blur(12px)';
74
- callout.style.display = 'none';
75
-
76
- title.style.fontSize = '14px';
77
- title.style.fontWeight = '700';
78
- title.style.marginBottom = '6px';
79
-
80
- body.style.fontSize = '13px';
81
- body.style.lineHeight = '1.5';
82
- body.style.opacity = '0.92';
83
-
84
- callout.append(title, body);
85
- root.append(status, callout);
86
- host.append(root);
87
-
88
- const applyTone = (tone: UiWidgetCallout['tone'] = 'neutral'): void => {
89
- const palette = {
90
- neutral: 'rgba(15, 23, 42, 0.92)',
91
- active: 'rgba(14, 116, 144, 0.92)',
92
- selected: 'rgba(22, 101, 52, 0.94)',
93
- } as const;
94
-
95
- callout.style.background = palette[tone];
96
- };
97
-
98
- return {
99
- setStatus(message) {
100
- status.textContent = message;
101
- },
102
- showCallout(config) {
103
- title.textContent = config.title;
104
- body.textContent = config.body;
105
- callout.style.display = 'block';
106
- applyTone(config.tone);
107
- },
108
- hideCallout() {
109
- callout.style.display = 'none';
110
- },
111
- destroy() {
112
- root.remove();
113
- },
114
- };
115
- },
116
- dispose(_ctx, api) {
117
- api.destroy();
118
- },
119
- };
120
- }