@blcklab/anyo-player 0.5.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.
Files changed (181) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +304 -0
  4. package/dist/createAnyoPlayer.d.ts +3 -0
  5. package/dist/createAnyoPlayer.d.ts.map +1 -0
  6. package/dist/createAnyoPlayer.js +5 -0
  7. package/dist/createAnyoPlayer.js.map +1 -0
  8. package/dist/element-define.d.ts +2 -0
  9. package/dist/element-define.d.ts.map +1 -0
  10. package/dist/element-define.js +4 -0
  11. package/dist/element-define.js.map +1 -0
  12. package/dist/element.d.ts +66 -0
  13. package/dist/element.d.ts.map +1 -0
  14. package/dist/element.js +363 -0
  15. package/dist/element.js.map +1 -0
  16. package/dist/errors.d.ts +11 -0
  17. package/dist/errors.d.ts.map +1 -0
  18. package/dist/errors.js +21 -0
  19. package/dist/errors.js.map +1 -0
  20. package/dist/index.d.ts +13 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +10 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/inputBindings.d.ts +3 -0
  25. package/dist/inputBindings.d.ts.map +1 -0
  26. package/dist/inputBindings.js +3 -0
  27. package/dist/inputBindings.js.map +1 -0
  28. package/dist/internal/AccessibilityController.d.ts +50 -0
  29. package/dist/internal/AccessibilityController.d.ts.map +1 -0
  30. package/dist/internal/AccessibilityController.js +212 -0
  31. package/dist/internal/AccessibilityController.js.map +1 -0
  32. package/dist/internal/AnyoPlayerCore.d.ts +357 -0
  33. package/dist/internal/AnyoPlayerCore.d.ts.map +1 -0
  34. package/dist/internal/AnyoPlayerCore.js +3880 -0
  35. package/dist/internal/AnyoPlayerCore.js.map +1 -0
  36. package/dist/internal/AudioController.d.ts +37 -0
  37. package/dist/internal/AudioController.d.ts.map +1 -0
  38. package/dist/internal/AudioController.js +167 -0
  39. package/dist/internal/AudioController.js.map +1 -0
  40. package/dist/internal/CaptionController.d.ts +16 -0
  41. package/dist/internal/CaptionController.d.ts.map +1 -0
  42. package/dist/internal/CaptionController.js +83 -0
  43. package/dist/internal/CaptionController.js.map +1 -0
  44. package/dist/internal/ContainerHost.d.ts +17 -0
  45. package/dist/internal/ContainerHost.d.ts.map +1 -0
  46. package/dist/internal/ContainerHost.js +110 -0
  47. package/dist/internal/ContainerHost.js.map +1 -0
  48. package/dist/internal/DesktopInputController.d.ts +80 -0
  49. package/dist/internal/DesktopInputController.d.ts.map +1 -0
  50. package/dist/internal/DesktopInputController.js +367 -0
  51. package/dist/internal/DesktopInputController.js.map +1 -0
  52. package/dist/internal/EmbeddingController.d.ts +33 -0
  53. package/dist/internal/EmbeddingController.d.ts.map +1 -0
  54. package/dist/internal/EmbeddingController.js +161 -0
  55. package/dist/internal/EmbeddingController.js.map +1 -0
  56. package/dist/internal/EventHub.d.ts +7 -0
  57. package/dist/internal/EventHub.d.ts.map +1 -0
  58. package/dist/internal/EventHub.js +27 -0
  59. package/dist/internal/EventHub.js.map +1 -0
  60. package/dist/internal/FrameworkAdapterController.d.ts +46 -0
  61. package/dist/internal/FrameworkAdapterController.d.ts.map +1 -0
  62. package/dist/internal/FrameworkAdapterController.js +165 -0
  63. package/dist/internal/FrameworkAdapterController.js.map +1 -0
  64. package/dist/internal/FullscreenController.d.ts +29 -0
  65. package/dist/internal/FullscreenController.d.ts.map +1 -0
  66. package/dist/internal/FullscreenController.js +122 -0
  67. package/dist/internal/FullscreenController.js.map +1 -0
  68. package/dist/internal/GamepadController.d.ts +54 -0
  69. package/dist/internal/GamepadController.d.ts.map +1 -0
  70. package/dist/internal/GamepadController.js +276 -0
  71. package/dist/internal/GamepadController.js.map +1 -0
  72. package/dist/internal/InputBindingsController.d.ts +34 -0
  73. package/dist/internal/InputBindingsController.d.ts.map +1 -0
  74. package/dist/internal/InputBindingsController.js +223 -0
  75. package/dist/internal/InputBindingsController.js.map +1 -0
  76. package/dist/internal/InteractionPresentationController.d.ts +38 -0
  77. package/dist/internal/InteractionPresentationController.d.ts.map +1 -0
  78. package/dist/internal/InteractionPresentationController.js +208 -0
  79. package/dist/internal/InteractionPresentationController.js.map +1 -0
  80. package/dist/internal/MapController.d.ts +16 -0
  81. package/dist/internal/MapController.d.ts.map +1 -0
  82. package/dist/internal/MapController.js +68 -0
  83. package/dist/internal/MapController.js.map +1 -0
  84. package/dist/internal/PerformanceController.d.ts +94 -0
  85. package/dist/internal/PerformanceController.d.ts.map +1 -0
  86. package/dist/internal/PerformanceController.js +455 -0
  87. package/dist/internal/PerformanceController.js.map +1 -0
  88. package/dist/internal/PlayerCameraController.d.ts +79 -0
  89. package/dist/internal/PlayerCameraController.d.ts.map +1 -0
  90. package/dist/internal/PlayerCameraController.js +551 -0
  91. package/dist/internal/PlayerCameraController.js.map +1 -0
  92. package/dist/internal/ResponsiveController.d.ts +37 -0
  93. package/dist/internal/ResponsiveController.d.ts.map +1 -0
  94. package/dist/internal/ResponsiveController.js +143 -0
  95. package/dist/internal/ResponsiveController.js.map +1 -0
  96. package/dist/internal/RuntimeFactory.d.ts +42 -0
  97. package/dist/internal/RuntimeFactory.d.ts.map +1 -0
  98. package/dist/internal/RuntimeFactory.js +93 -0
  99. package/dist/internal/RuntimeFactory.js.map +1 -0
  100. package/dist/internal/ScreenshotController.d.ts +8 -0
  101. package/dist/internal/ScreenshotController.d.ts.map +1 -0
  102. package/dist/internal/ScreenshotController.js +47 -0
  103. package/dist/internal/ScreenshotController.js.map +1 -0
  104. package/dist/internal/SessionController.d.ts +44 -0
  105. package/dist/internal/SessionController.d.ts.map +1 -0
  106. package/dist/internal/SessionController.js +411 -0
  107. package/dist/internal/SessionController.js.map +1 -0
  108. package/dist/internal/SourceResolver.d.ts +31 -0
  109. package/dist/internal/SourceResolver.d.ts.map +1 -0
  110. package/dist/internal/SourceResolver.js +362 -0
  111. package/dist/internal/SourceResolver.js.map +1 -0
  112. package/dist/internal/StateMachine.d.ts +10 -0
  113. package/dist/internal/StateMachine.d.ts.map +1 -0
  114. package/dist/internal/StateMachine.js +35 -0
  115. package/dist/internal/StateMachine.js.map +1 -0
  116. package/dist/internal/StyleController.d.ts +14 -0
  117. package/dist/internal/StyleController.d.ts.map +1 -0
  118. package/dist/internal/StyleController.js +116 -0
  119. package/dist/internal/StyleController.js.map +1 -0
  120. package/dist/internal/TelemetryController.d.ts +28 -0
  121. package/dist/internal/TelemetryController.d.ts.map +1 -0
  122. package/dist/internal/TelemetryController.js +113 -0
  123. package/dist/internal/TelemetryController.js.map +1 -0
  124. package/dist/internal/TouchInputController.d.ts +73 -0
  125. package/dist/internal/TouchInputController.d.ts.map +1 -0
  126. package/dist/internal/TouchInputController.js +379 -0
  127. package/dist/internal/TouchInputController.js.map +1 -0
  128. package/dist/internal/VfxController.d.ts +11 -0
  129. package/dist/internal/VfxController.d.ts.map +1 -0
  130. package/dist/internal/VfxController.js +23 -0
  131. package/dist/internal/VfxController.js.map +1 -0
  132. package/dist/internal/ViewPreferenceController.d.ts +40 -0
  133. package/dist/internal/ViewPreferenceController.d.ts.map +1 -0
  134. package/dist/internal/ViewPreferenceController.js +132 -0
  135. package/dist/internal/ViewPreferenceController.js.map +1 -0
  136. package/dist/internal/VisibilityController.d.ts +26 -0
  137. package/dist/internal/VisibilityController.d.ts.map +1 -0
  138. package/dist/internal/VisibilityController.js +62 -0
  139. package/dist/internal/VisibilityController.js.map +1 -0
  140. package/dist/internal/XRController.d.ts +42 -0
  141. package/dist/internal/XRController.d.ts.map +1 -0
  142. package/dist/internal/XRController.js +169 -0
  143. package/dist/internal/XRController.js.map +1 -0
  144. package/dist/internal/sourceUrls.d.ts +6 -0
  145. package/dist/internal/sourceUrls.d.ts.map +1 -0
  146. package/dist/internal/sourceUrls.js +79 -0
  147. package/dist/internal/sourceUrls.js.map +1 -0
  148. package/dist/react.d.ts +44 -0
  149. package/dist/react.d.ts.map +1 -0
  150. package/dist/react.js +115 -0
  151. package/dist/react.js.map +1 -0
  152. package/dist/session.d.ts +3 -0
  153. package/dist/session.d.ts.map +1 -0
  154. package/dist/session.js +3 -0
  155. package/dist/session.js.map +1 -0
  156. package/dist/styleText.d.ts +2 -0
  157. package/dist/styleText.d.ts.map +1 -0
  158. package/dist/styleText.js +2 -0
  159. package/dist/styleText.js.map +1 -0
  160. package/dist/styles.css +573 -0
  161. package/dist/types.d.ts +1476 -0
  162. package/dist/types.d.ts.map +1 -0
  163. package/dist/types.js +2 -0
  164. package/dist/types.js.map +1 -0
  165. package/dist/ui/PlayerUI.d.ts +193 -0
  166. package/dist/ui/PlayerUI.d.ts.map +1 -0
  167. package/dist/ui/PlayerUI.js +1201 -0
  168. package/dist/ui/PlayerUI.js.map +1 -0
  169. package/dist/vue.d.ts +97 -0
  170. package/dist/vue.d.ts.map +1 -0
  171. package/dist/vue.js +126 -0
  172. package/dist/vue.js.map +1 -0
  173. package/dist/worldCache.d.ts +16 -0
  174. package/dist/worldCache.d.ts.map +1 -0
  175. package/dist/worldCache.js +46 -0
  176. package/dist/worldCache.js.map +1 -0
  177. package/dist/worldSources.d.ts +19 -0
  178. package/dist/worldSources.d.ts.map +1 -0
  179. package/dist/worldSources.js +51 -0
  180. package/dist/worldSources.js.map +1 -0
  181. package/package.json +114 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,19 @@
1
+ # Changelog
2
+
3
+ ## 0.5.0
4
+
5
+ - Normalize integrity-verification byte views to `ArrayBuffer` before Web Crypto hashing for TypeScript 5.8+ DOM compatibility.
6
+
7
+ The first stable `0.5` release keeps the validated runtime from `0.5.0-rc.2` and turns it into the production package boundary.
8
+
9
+ ### Highlights
10
+
11
+ - Validated Player with `@blcklab/anyo@0.10.0-rc.1` and `@blcklab/sekai64@0.8.0-rc.33`.
12
+ - Kept Player framework-neutral with no direct runtime dependencies.
13
+ - Documented the published `@blcklab/anyo-animation@0.1.2` integration for animated GLB/glTF assets.
14
+ - Documented manual VRM registration through `@blcklab/anyo-avatar@0.2.0`, sharing the same Sekai64 animation module.
15
+ - Preserved the existing `renderer.modules`, `renderer.assetLoaders`, `plugins`, systems, world replacement, navigation, recovery, input, XR, Web Surface, custom-element, Vue, and React contracts.
16
+ - Added tag/version verification and npm provenance to the GitHub publish workflow.
17
+ - Reworked public documentation around production use instead of historical release-candidate milestones.
18
+
19
+ Historical release-candidate notes remain in the source repository under `.internal/history/` and are not published to npm.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Avelurs Tinio
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,304 @@
1
+ # @blcklab/anyo-player
2
+
3
+ A browser player for Anyo worlds.
4
+
5
+ `@blcklab/anyo-player` takes a world document, gives it a Sekai64 renderer, and owns the browser-facing work around it: loading, input, lifecycle, recovery, responsive sizing, accessibility, world replacement, and optional framework adapters.
6
+
7
+ It stays deliberately small at the package boundary. Player does not bundle Anyo, Sekai64, animation, avatar, physics, audio, or framework runtimes for you; those remain peer or host-installed packages so an application can choose exactly what it needs.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npm install @blcklab/anyo-player @blcklab/anyo @blcklab/sekai64
13
+ ```
14
+
15
+ Player `0.5.0` is validated with:
16
+
17
+ ```text
18
+ @blcklab/anyo 0.10.0-rc.1
19
+ @blcklab/sekai64 0.8.0-rc.33
20
+ ```
21
+
22
+ ## Start in a minute
23
+
24
+ ```ts
25
+ import { createAnyoPlayer } from '@blcklab/anyo-player'
26
+ import '@blcklab/anyo-player/styles.css'
27
+
28
+ const container = document.querySelector<HTMLElement>('#world')!
29
+
30
+ const player = createAnyoPlayer({
31
+ container,
32
+ source: '/world.anyo.json',
33
+ renderer: {
34
+ backend: 'auto',
35
+ antialias: true,
36
+ },
37
+ exploration: {
38
+ desktop: true,
39
+ touch: true,
40
+ pointerLock: true,
41
+ },
42
+ })
43
+
44
+ await player.load()
45
+ ```
46
+
47
+ When the page, route, or component that owns the player is removed, dispose it too:
48
+
49
+ ```ts
50
+ await player.disposeAsync()
51
+ ```
52
+
53
+ That final `disposeAsync()` matters in production. It releases browser listeners, input ownership, renderer resources, object URLs, and the active Anyo runtime owned by that Player instance.
54
+
55
+ ## What can be loaded?
56
+
57
+ Player accepts a URL, JSON text, a world document object, local browser files, virtual folder maps, and trusted host-decoded archives.
58
+
59
+ ```ts
60
+ await player.load('/worlds/store/world.anyo.json')
61
+ ```
62
+
63
+ ```ts
64
+ await player.load({
65
+ files: {
66
+ 'world.anyo.json': worldJson,
67
+ 'assets/store.glb': storeModel,
68
+ },
69
+ })
70
+ ```
71
+
72
+ For `<input webkitdirectory multiple>`, use `createAnyoPlayerFolderSource()` to preserve relative package paths safely.
73
+
74
+ ## Replace a world without replacing the player
75
+
76
+ Once a Player is ready, use `replaceWorld()` instead of calling `load()` again:
77
+
78
+ ```ts
79
+ await player.replaceWorld('/worlds/gallery/world.anyo.json')
80
+ ```
81
+
82
+ For applications with several known worlds, Player also provides registration, preloading, cancellation, and navigation APIs.
83
+
84
+ ```ts
85
+ const unregister = player.registerWorld('gallery', '/worlds/gallery/world.anyo.json')
86
+
87
+ await player.preloadWorld('gallery')
88
+ await player.navigateTo('gallery')
89
+
90
+ unregister()
91
+ ```
92
+
93
+ ## Host actions stay in the host
94
+
95
+ World JSON describes the world. Executable application behavior stays in trusted application code.
96
+
97
+ ```ts
98
+ player.registerAction('open-product', ({ sku }) => {
99
+ console.log('Open product', sku)
100
+ })
101
+ ```
102
+
103
+ The same rule applies to plugins, custom asset loaders, Web Surface applications, archive decoders, analytics sinks, and other executable integrations.
104
+
105
+ ## Animated GLB and VRM
106
+
107
+ Animation and avatar support are optional host integrations. They are not hard dependencies of Player.
108
+
109
+ The companion versions validated with Player `0.5.0` are:
110
+
111
+ ```bash
112
+ npm install @blcklab/anyo-animation@0.1.2 @blcklab/anyo-avatar@0.2.0
113
+ ```
114
+
115
+ For animated GLB and VRM, create one shared Sekai64 animation integration and give its animation module to the VRM loader:
116
+
117
+ ```ts
118
+ import { createAnyoPlayer } from '@blcklab/anyo-player'
119
+ import { createSekai64AnimationIntegration } from '@blcklab/anyo-animation/sekai64'
120
+ import { createSekai64VrmAssetLoader } from '@blcklab/anyo-avatar/vrm/sekai64'
121
+
122
+ const animation = createSekai64AnimationIntegration()
123
+
124
+ const player = createAnyoPlayer({
125
+ container,
126
+ source: '/world.anyo.json',
127
+ renderer: {
128
+ modules: [animation.module],
129
+ assetLoaders: [
130
+ animation.assetLoader,
131
+ createSekai64VrmAssetLoader({
132
+ animationModule: animation.module,
133
+ }),
134
+ ],
135
+ },
136
+ plugins: [animation.plugin],
137
+ })
138
+
139
+ await player.load()
140
+ ```
141
+
142
+ The shared module is intentional. A VRM is a skinned glTF asset; the VRM loader and `anyo.animation` must work against the same mixer and skeleton runtime.
143
+
144
+ Create fresh integration and loader registrations for each Player lifecycle. The renderer owns the lifetime of registered loaders.
145
+
146
+ ## Web Surfaces
147
+
148
+ Player enables Anyo Web Surface presentation by default. World data remains declarative; trusted application code remains in the host.
149
+
150
+ ```ts
151
+ const player = createAnyoPlayer({
152
+ container,
153
+ source: '/world.anyo.json',
154
+ webSurface: {
155
+ apps: {
156
+ dashboard: {
157
+ mount(container, props, context) {
158
+ const button = document.createElement('button')
159
+ button.textContent = String(props.label ?? 'Open')
160
+ button.addEventListener('click', () => {
161
+ void context.runAction('open-dashboard')
162
+ })
163
+ container.append(button)
164
+
165
+ return {
166
+ update(nextProps) {
167
+ button.textContent = String(nextProps.label ?? 'Open')
168
+ },
169
+ dispose() {
170
+ button.remove()
171
+ },
172
+ }
173
+ },
174
+ },
175
+ },
176
+ externalUrls: {
177
+ allowedOrigins: ['https://docs.example.com'],
178
+ sandbox: ['allow-forms', 'allow-popups'],
179
+ },
180
+ },
181
+ })
182
+ ```
183
+
184
+ Player does not accept executable HTML or JavaScript from world JSON and does not bypass iframe CSP, `X-Frame-Options`, or browser cross-origin restrictions.
185
+
186
+ Set `webSurface: false` when another trusted plugin owns that presentation path.
187
+
188
+ ## Optional plugins and systems
189
+
190
+ Trusted host-created Anyo plugins can be appended through `plugins`. Fixed-step systems can be supplied through `systems` and `systemOptions`.
191
+
192
+ ```ts
193
+ const player = createAnyoPlayer({
194
+ container,
195
+ source: '/world.anyo.json',
196
+ plugins: [myPlugin],
197
+ systems: [mySystem],
198
+ })
199
+ ```
200
+
201
+ This is how packages such as physics, audio, VFX, map integrations, or custom application features can participate without becoming Player dependencies.
202
+
203
+ ## Custom element
204
+
205
+ ```ts
206
+ import { defineAnyoPlayerElement } from '@blcklab/anyo-player/element'
207
+
208
+ defineAnyoPlayerElement()
209
+ ```
210
+
211
+ ```html
212
+ <anyo-player
213
+ src="/world.anyo.json"
214
+ activation="visible"
215
+ preload="source"
216
+ backend="auto"
217
+ pause-when-offscreen
218
+ aria-label="Virtual world"
219
+ ></anyo-player>
220
+ ```
221
+
222
+ The custom-element subpath is side-effect free. Registration happens only when `defineAnyoPlayerElement()` is called. If you explicitly want automatic registration, use `@blcklab/anyo-player/element/define`.
223
+
224
+ ## Vue and React
225
+
226
+ Framework adapters live on separate subpaths so the core package never requires a framework at runtime.
227
+
228
+ ```ts
229
+ import { AnyoPlayer } from '@blcklab/anyo-player/vue'
230
+ ```
231
+
232
+ ```ts
233
+ import { AnyoPlayer } from '@blcklab/anyo-player/react'
234
+ ```
235
+
236
+ Vue, React, and React DOM are optional peer dependencies. Install only the framework used by your application.
237
+
238
+ ## Runtime controls and diagnostics
239
+
240
+ Player exposes production controls without making the world document authoritative over the host device.
241
+
242
+ ```ts
243
+ player.setQualityPreset('high')
244
+ player.setTargetFps(60)
245
+ player.setDynamicResolution(true)
246
+ player.setViewPreference({ fieldOfView: 72, pointerLookScale: 1.1 })
247
+ player.showCaption('Welcome to the showroom.', { speaker: 'Assistant' })
248
+
249
+ const health = player.createRuntimeHealth()
250
+ const report = player.createRuntimeReport()
251
+ const bundle = player.downloadDiagnosticBundle()
252
+ ```
253
+
254
+ Camera and inspection helpers include:
255
+
256
+ ```ts
257
+ player.setCameraMode('orbit', { bounds })
258
+ player.setCameraMode('top', { bounds, northUp: true })
259
+ player.setCameraMode('free', { speed: 12 })
260
+ player.setCameraMode('explore')
261
+ player.teleport({ position: [0, 1.65, 0], resetMotion: true })
262
+ ```
263
+
264
+ ## Production notes
265
+
266
+ Before shipping a Player host:
267
+
268
+ - serve worlds and assets with correct CORS headers when they are cross-origin;
269
+ - call `disposeAsync()` on route or application teardown;
270
+ - keep executable plugins and loaders in trusted host code, never in world JSON;
271
+ - treat pointer lock, fullscreen, audio unlock, and XR as user-gesture-gated browser capabilities;
272
+ - use a secure context for WebXR;
273
+ - configure a fallback renderer when your application needs recovery from WebGPU loss;
274
+ - validate real devices and browsers that matter to your users.
275
+
276
+ The full deployment and lifecycle guide is in [`docs/PRODUCTION.md`](docs/PRODUCTION.md).
277
+
278
+ ## Documentation
279
+
280
+ - [`docs/README.md`](docs/README.md) — documentation index
281
+ - [`docs/PRODUCTION.md`](docs/PRODUCTION.md) — deployment, lifecycle, security, and recovery
282
+ - [`docs/api/API.md`](docs/api/API.md) — public API reference
283
+ - [`docs/integrations/SEKAI64_080_BRIDGE.md`](docs/integrations/SEKAI64_080_BRIDGE.md) — Sekai64, animation, and VRM composition
284
+ - [`docs/guides/SUPPORT.md`](docs/guides/SUPPORT.md) — support and compatibility policy
285
+ - [`docs/guides/MIGRATION.md`](docs/guides/MIGRATION.md) — moving to `0.5.0`
286
+ - [`docs/TESTING.md`](docs/TESTING.md) — what the release suite proves
287
+ - [`CHANGELOG.md`](CHANGELOG.md) — release history
288
+
289
+ ## Development
290
+
291
+ ```bash
292
+ npm install
293
+ npm run build
294
+ npm test
295
+ npm run check
296
+ ```
297
+
298
+ Generated output is written to `dist/` and is intentionally not committed.
299
+
300
+ Maintainer-only release notes, evidence procedures, historical milestone documents, and internal architecture notes live under `.internal/` in the source repository. That directory is intentionally excluded from the npm package.
301
+
302
+ ## License
303
+
304
+ MIT License. Copyright (c) 2026 **Avelurs Tinio**.
@@ -0,0 +1,3 @@
1
+ import type { AnyoPlayer, AnyoPlayerOptions } from './types.js';
2
+ export declare function createAnyoPlayer(options: AnyoPlayerOptions): AnyoPlayer;
3
+ //# sourceMappingURL=createAnyoPlayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAnyoPlayer.d.ts","sourceRoot":"","sources":["../src/createAnyoPlayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE/D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAEvE"}
@@ -0,0 +1,5 @@
1
+ import { AnyoPlayerCore } from './internal/AnyoPlayerCore.js';
2
+ export function createAnyoPlayer(options) {
3
+ return new AnyoPlayerCore(options);
4
+ }
5
+ //# sourceMappingURL=createAnyoPlayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAnyoPlayer.js","sourceRoot":"","sources":["../src/createAnyoPlayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAG7D,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './element.js';
2
+ //# sourceMappingURL=element-define.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-define.d.ts","sourceRoot":"","sources":["../src/element-define.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './element.js';
2
+ import { defineAnyoPlayerElement } from './element.js';
3
+ defineAnyoPlayerElement();
4
+ //# sourceMappingURL=element-define.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-define.js","sourceRoot":"","sources":["../src/element-define.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAE5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAEtD,uBAAuB,EAAE,CAAA"}
@@ -0,0 +1,66 @@
1
+ import { AnyoPlayerError } from './errors.js';
2
+ import type { AnyoPlayer, AnyoPlayerEventMap, AnyoPlayerOptions, AnyoPlayerSource } from './types.js';
3
+ export declare const ANYO_PLAYER_ELEMENT_TAG = "anyo-player";
4
+ export type AnyoPlayerElementOptions = Omit<AnyoPlayerOptions, 'container' | 'canvas' | 'source'>;
5
+ export interface AnyoPlayerElementEventMap {
6
+ 'anyo-player-ready': CustomEvent<AnyoPlayerEventMap['ready']>;
7
+ 'anyo-player-error': CustomEvent<AnyoPlayerError>;
8
+ 'anyo-player-statechange': CustomEvent<AnyoPlayerEventMap['statechange']>;
9
+ 'anyo-player-phasechange': CustomEvent<AnyoPlayerEventMap['phasechange']>;
10
+ 'anyo-player-worldreplaced': CustomEvent<AnyoPlayerEventMap['worldreplaced']>;
11
+ 'anyo-player-themechange': CustomEvent<AnyoPlayerEventMap['themechange']>;
12
+ 'anyo-player-disposed': CustomEvent<undefined>;
13
+ }
14
+ export type AnyoPlayerElementEventName = keyof AnyoPlayerElementEventMap;
15
+ declare const HTMLElementBase: typeof HTMLElement;
16
+ export declare class AnyoPlayerElement extends HTMLElementBase {
17
+ static get observedAttributes(): readonly string[];
18
+ private sourceValue;
19
+ private optionsValue;
20
+ private playerValue;
21
+ private containerValue;
22
+ private eventCleanups;
23
+ private disposalPromise;
24
+ private generation;
25
+ private lastMountError;
26
+ constructor();
27
+ get src(): string;
28
+ set src(value: string);
29
+ get source(): AnyoPlayerSource | null;
30
+ set source(value: AnyoPlayerSource | null);
31
+ get options(): AnyoPlayerElementOptions;
32
+ set options(value: AnyoPlayerElementOptions);
33
+ get player(): AnyoPlayer | null;
34
+ connectedCallback(): void;
35
+ disconnectedCallback(): void;
36
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
37
+ load(source?: AnyoPlayerSource | undefined): Promise<void>;
38
+ activate(): Promise<void>;
39
+ replaceWorld(source: AnyoPlayerSource): Promise<void>;
40
+ disposeAsync(): Promise<void>;
41
+ protected createPlayer(options: AnyoPlayerOptions): AnyoPlayer;
42
+ private ensureStructure;
43
+ private composeOptions;
44
+ private mountPlayer;
45
+ private ensurePlayer;
46
+ private bindPlayerEvents;
47
+ private clearPlayerEvents;
48
+ private beginDisposal;
49
+ private validateAttribute;
50
+ private upgradeProperty;
51
+ private reportError;
52
+ }
53
+ export interface AnyoPlayerElement {
54
+ addEventListener<TKey extends keyof AnyoPlayerElementEventMap>(type: TKey, listener: (this: AnyoPlayerElement, event: AnyoPlayerElementEventMap[TKey]) => void, options?: boolean | AddEventListenerOptions): void;
55
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void;
56
+ removeEventListener<TKey extends keyof AnyoPlayerElementEventMap>(type: TKey, listener: (this: AnyoPlayerElement, event: AnyoPlayerElementEventMap[TKey]) => void, options?: boolean | EventListenerOptions): void;
57
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions): void;
58
+ }
59
+ declare global {
60
+ interface HTMLElementTagNameMap {
61
+ 'anyo-player': AnyoPlayerElement;
62
+ }
63
+ }
64
+ export declare function defineAnyoPlayerElement(tagName?: string): CustomElementConstructor;
65
+ export {};
66
+ //# sourceMappingURL=element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"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"}