@playcanvas/web-components 0.11.1 → 0.13.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 (96) hide show
  1. package/README.md +1 -1
  2. package/dist/app.d.cts +246 -0
  3. package/dist/app.d.ts +38 -13
  4. package/dist/asset.d.cts +218 -0
  5. package/dist/asset.d.ts +145 -6
  6. package/dist/async-element.d.cts +103 -0
  7. package/dist/async-element.d.ts +11 -8
  8. package/dist/colors.d.cts +1 -0
  9. package/dist/components/button-component.d.cts +186 -0
  10. package/dist/components/button-component.d.ts +1 -1
  11. package/dist/components/camera-component.d.cts +253 -0
  12. package/dist/components/camera-component.d.ts +1 -1
  13. package/dist/components/collision-component.d.cts +73 -0
  14. package/dist/components/collision-component.d.ts +17 -1
  15. package/dist/components/component.d.cts +82 -0
  16. package/dist/components/component.d.ts +20 -1
  17. package/dist/components/element-component.d.cts +316 -0
  18. package/dist/components/element-component.d.ts +1 -1
  19. package/dist/components/gsplat-component.d.cts +108 -0
  20. package/dist/components/gsplat-component.d.ts +1 -1
  21. package/dist/components/layoutchild-component.d.cts +110 -0
  22. package/dist/components/layoutchild-component.d.ts +1 -1
  23. package/dist/components/layoutgroup-component.d.cts +136 -0
  24. package/dist/components/layoutgroup-component.d.ts +1 -1
  25. package/dist/components/light-component.d.cts +264 -0
  26. package/dist/components/light-component.d.ts +1 -1
  27. package/dist/components/listener-component.d.cts +20 -0
  28. package/dist/components/listener-component.d.ts +1 -1
  29. package/dist/components/particlesystem-component.d.cts +52 -0
  30. package/dist/components/particlesystem-component.d.ts +1 -1
  31. package/dist/components/render-component.d.cts +76 -0
  32. package/dist/components/render-component.d.ts +1 -1
  33. package/dist/components/rigidbody-component.d.cts +88 -0
  34. package/dist/components/rigidbody-component.d.ts +1 -1
  35. package/dist/components/screen-component.d.cts +70 -0
  36. package/dist/components/screen-component.d.ts +1 -1
  37. package/dist/components/script-component.d.cts +163 -0
  38. package/dist/components/script-component.d.ts +1 -1
  39. package/dist/components/script.d.cts +94 -0
  40. package/dist/components/script.d.ts +1 -1
  41. package/dist/components/scrollbar-component.d.cts +69 -0
  42. package/dist/components/scrollbar-component.d.ts +1 -1
  43. package/dist/components/scrollview-component.d.cts +178 -0
  44. package/dist/components/scrollview-component.d.ts +1 -1
  45. package/dist/components/sound-component.d.cts +108 -0
  46. package/dist/components/sound-component.d.ts +1 -1
  47. package/dist/components/sound-slot.d.cts +134 -0
  48. package/dist/components/sound-slot.d.ts +2 -2
  49. package/dist/custom-elements.json +1127 -179
  50. package/dist/entity-base.d.cts +67 -0
  51. package/dist/entity-base.d.ts +67 -0
  52. package/dist/entity.d.cts +131 -0
  53. package/dist/entity.d.ts +3 -38
  54. package/dist/index.d.cts +79 -0
  55. package/dist/index.d.ts +35 -32
  56. package/dist/loading-bar.d.cts +35 -0
  57. package/dist/material.d.cts +1011 -0
  58. package/dist/material.d.ts +2 -1
  59. package/dist/model.d.cts +72 -0
  60. package/dist/model.d.ts +27 -5
  61. package/dist/module.d.cts +29 -0
  62. package/dist/module.d.ts +16 -10
  63. package/dist/node.d.cts +253 -0
  64. package/dist/node.d.ts +253 -0
  65. package/dist/parse.d.cts +147 -0
  66. package/dist/pwc.cjs +1496 -200
  67. package/dist/pwc.cjs.map +1 -1
  68. package/dist/pwc.js +1497 -201
  69. package/dist/pwc.js.map +1 -1
  70. package/dist/pwc.min.js +1 -1
  71. package/dist/pwc.min.js.map +1 -1
  72. package/dist/pwc.min.mjs +1 -1
  73. package/dist/pwc.min.mjs.map +1 -1
  74. package/dist/pwc.mjs +1496 -202
  75. package/dist/pwc.mjs.map +1 -1
  76. package/dist/scene.d.cts +117 -0
  77. package/dist/scene.d.ts +1 -1
  78. package/dist/sky.d.cts +121 -0
  79. package/dist/sky.d.ts +1 -1
  80. package/dist/vscode.html-custom-data.json +127 -5
  81. package/dist/web-types.json +399 -59
  82. package/package.json +16 -7
  83. package/src/app.ts +137 -45
  84. package/src/asset.ts +439 -9
  85. package/src/async-element.ts +11 -8
  86. package/src/components/collision-component.ts +35 -0
  87. package/src/components/component.ts +93 -3
  88. package/src/entity-base.ts +136 -0
  89. package/src/entity.ts +23 -117
  90. package/src/index.ts +5 -0
  91. package/src/loading-bar.ts +2 -2
  92. package/src/material.ts +2 -2
  93. package/src/model.ts +79 -11
  94. package/src/module.ts +39 -20
  95. package/src/node.ts +715 -0
  96. package/src/sky.ts +0 -1
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "name": "@playcanvas/web-components",
4
- "version": "0.11.1",
4
+ "version": "0.13.0",
5
5
  "description-markup": "markdown",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "elements": [
9
9
  {
10
10
  "name": "pc-app",
11
- "description": "The AppElement interface provides properties and methods for manipulating\n[`<pc-app>`](https://developer.playcanvas.com/user-manual/web-components/tags/pc-app/) elements.\nThe AppElement interface also inherits the properties and methods of the\nHTMLElement interface.\n\n---\n\n\n### **Events:**\n - **progress** - Fired while the application preloads its assets. `loaded` and `total` are asset counts, not bytes, and an asset that fails to load still counts as loaded. Fired at least once per boot, and the final event always has `loaded` equal to `total`. Does not bubble.\n- **ready** - Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed.\n\n### **Methods:**\n - **elementFromEntity(entity: _Entity_): __** - Returns the `<pc-entity>` element whose backing entity is `entity`, or `null` if the\nentity was not created by an element of this application - for example, a node inside a\nmodel's instantiated hierarchy, or an entity created through the engine API.\n- **ready(): __** - Returns a promise that resolves with this element when it's ready. This is the low-level\nprimitive underlying whenReady, which is the recommended way to wait for elements.\n\nReadiness tracks the element's current lifecycle: once a ready element is torn down (for\nexample by removing it from the document), this returns a fresh promise that resolves when\nthe element is next ready. A promise obtained earlier stays resolved — call this again\nafter re-inserting an element rather than reusing a promise from before its removal.",
11
+ "description": "The AppElement interface provides properties and methods for manipulating\n[`<pc-app>`](https://developer.playcanvas.com/user-manual/web-components/tags/pc-app/) elements.\nThe AppElement interface also inherits the properties and methods of the\nHTMLElement interface.\n\nThe element is sized like a replaced element such as `<video>`: a block-level box that the\npage's CSS controls, 300x150 by default. The application's canvas always fills the element,\nand the drawing buffer resolution follows the element's size (capped by `max-pixel-ratio`),\ntracked live via a ResizeObserver — so the element can be embedded at any size, resized by\nits container, or made fullscreen with ordinary CSS such as `width: 100vw; height: 100dvh`.\n\n---\n\n\n### **Events:**\n - **error** - Fired when the application cannot boot because no graphics device could be created (for example, a browser with WebGL disabled). `message` names the requested backends and `error` holds the underlying failure. The element never becomes ready and `app` stays `null` — listen for this event to show a fallback UI. Removing the element and re-inserting it retries the boot with its current attributes. Does not bubble.\n- **progress** - Fired while the application preloads its assets. `loaded` and `total` are asset counts, not bytes, and an asset that fails to load still counts as loaded. Fired at least once per boot, and the final event always has `loaded` equal to `total`. Does not bubble.\n- **ready** - Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed.\n\n### **Methods:**\n - **elementFromEntity(entity: _Entity_): __** - Returns the `<pc-entity>` or `<pc-node>` element whose backing entity is `entity`, or\n`null` if the entity is not fronted by an element of this application - for example, an\nunbound node inside a model's instantiated hierarchy, or an entity created through the\nengine API.\n- **ready(): __** - Returns a promise that resolves with this element when it's ready. This is the low-level\nprimitive underlying whenReady, which is the recommended way to wait for elements.\n\nReadiness tracks the element's current lifecycle: once a ready element is torn down (for\nexample by removing it from the document), this returns a fresh promise that resolves when\nthe element is next ready. A promise obtained earlier stays resolved — call this again\nafter re-inserting an element rather than reusing a promise from before its removal.",
12
12
  "doc-url": "",
13
13
  "attributes": [
14
14
  {
@@ -51,6 +51,11 @@
51
51
  }
52
52
  ],
53
53
  "events": [
54
+ {
55
+ "name": "error",
56
+ "type": "ErrorEvent",
57
+ "description": "Fired when the application cannot boot because no graphics device could be created (for example, a browser with WebGL disabled). `message` names the requested backends and `error` holds the underlying failure. The element never becomes ready and `app` stays `null` — listen for this event to show a fallback UI. Removing the element and re-inserting it retries the boot with its current attributes. Does not bubble."
58
+ },
54
59
  {
55
60
  "name": "progress",
56
61
  "type": "ProgressEvent",
@@ -88,8 +93,8 @@
88
93
  },
89
94
  {
90
95
  "name": "closestEntity",
91
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
92
- "type": "EntityElement | null"
96
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
97
+ "type": "EntityBaseElement | null"
93
98
  },
94
99
  {
95
100
  "name": "depthBuffer",
@@ -114,6 +119,11 @@
114
119
  }
115
120
  ],
116
121
  "events": [
122
+ {
123
+ "name": "error",
124
+ "type": "ErrorEvent",
125
+ "description": "Fired when the application cannot boot because no graphics device could be created (for example, a browser with WebGL disabled). `message` names the requested backends and `error` holds the underlying failure. The element never becomes ready and `app` stays `null` — listen for this event to show a fallback UI. Removing the element and re-inserting it retries the boot with its current attributes. Does not bubble."
126
+ },
117
127
  {
118
128
  "name": "progress",
119
129
  "type": "ProgressEvent",
@@ -129,9 +139,30 @@
129
139
  },
130
140
  {
131
141
  "name": "pc-asset",
132
- "description": "The AssetElement interface provides properties and methods for manipulating\n[`<pc-asset>`](https://developer.playcanvas.com/user-manual/web-components/tags/pc-asset/) elements.\nThe AssetElement interface also inherits the properties and methods of the\nHTMLElement interface.\n\nThe element becomes ready once the containing application has started and the asset is in the\nstate declared by the markup: loaded for preloaded assets (even if loading failed — check the\nasset's `resource`), or registered and awaiting a load for `lazy` assets. Elements inserted\nwhile the application is running are created and registered on insertion, and begin loading\nimmediately unless `lazy`. A `pc-asset` must be a direct child of `pc-app` — elements placed\nelsewhere, or with an unsupported asset type, never become ready.\n\nApart from `lazy`, these attributes are read once when the asset is created, so changing them\nlater has no effect.\n\n---\n\n\n### **Events:**\n - **error** - Fired when the asset fails to load, with the engine's error in `message`. Does not bubble. The element still becomes ready — readiness means the load settled, not that it succeeded.\n- **load** - Fired each time the asset finishes loading, including a `lazy` asset loaded later and any subsequent reloads. Does not bubble — listen on this element, or use a capture-phase listener on an ancestor to observe every asset.\n- **ready** - Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed.\n\n### **Methods:**\n - **get(id: _string_): __** - Returns the Asset created by the `<pc-asset>` element with the given `id`, or\n`undefined` if there is no such element or its asset has not been created yet.\n- **ready(): __** - Returns a promise that resolves with this element when it's ready. This is the low-level\nprimitive underlying whenReady, which is the recommended way to wait for elements.\n\nReadiness tracks the element's current lifecycle: once a ready element is torn down (for\nexample by removing it from the document), this returns a fresh promise that resolves when\nthe element is next ready. A promise obtained earlier stays resolved — call this again\nafter re-inserting an element rather than reusing a promise from before its removal.",
142
+ "description": "The AssetElement interface provides properties and methods for manipulating\n[`<pc-asset>`](https://developer.playcanvas.com/user-manual/web-components/tags/pc-asset/) elements.\nThe AssetElement interface also inherits the properties and methods of the\nHTMLElement interface.\n\nThe element becomes ready once the containing application has started and the asset is in the\nstate declared by the markup: loaded for preloaded assets (even if loading failed — check the\nasset's `resource`), or registered and awaiting a load for `lazy` assets. Elements inserted\nwhile the application is running are created and registered on insertion, and begin loading\nimmediately unless `lazy`. A `pc-asset` must be a direct child of `pc-app` — elements placed\nelsewhere, or with an unsupported asset type, never become ready.\n\nFor `texture` and `textureatlas` assets, the texture options (`address-u`, `address-v`,\n`min-filter`, `mag-filter`, `anisotropy`, `mipmaps`, `srgb`, `flip-y`) apply when the texture is\ncreated and — like `lazy` — are observed: changing one updates a texture that has already\nloaded, and removing one restores the engine default. Changing `srgb` or `mipmaps` on a loaded\ntexture recreates the underlying GPU resource, so prefer declaring those up front. Each option\noverrides the matching key in the `data` JSON; options left unset write nothing, leaving the\nengine's per-format defaults in force.\n\nApart from `lazy` and the texture options, these attributes are read once when the asset is\ncreated, so changing them later has no effect.\n\n---\n\n\n### **Events:**\n - **error** - Fired when the asset fails to load, with the engine's error in `message`. Does not bubble. The element still becomes ready — readiness means the load settled, not that it succeeded.\n- **load** - Fired each time the asset finishes loading, including a `lazy` asset loaded later and any subsequent reloads. Does not bubble — listen on this element, or use a capture-phase listener on an ancestor to observe every asset.\n- **ready** - Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed.\n\n### **Methods:**\n - **get(id: _string_): __** - Returns the Asset created by the `<pc-asset>` element with the given `id`, or\n`undefined` if there is no such element or its asset has not been created yet.\n- **ready(): __** - Returns a promise that resolves with this element when it's ready. This is the low-level\nprimitive underlying whenReady, which is the recommended way to wait for elements.\n\nReadiness tracks the element's current lifecycle: once a ready element is torn down (for\nexample by removing it from the document), this returns a fresh promise that resolves when\nthe element is next ready. A promise obtained earlier stays resolved — call this again\nafter re-inserting an element rather than reusing a promise from before its removal.",
133
143
  "doc-url": "",
134
144
  "attributes": [
145
+ {
146
+ "name": "address-u",
147
+ "description": "The texture's horizontal (U) address mode.",
148
+ "value": {
149
+ "type": "'repeat' | 'clamp' | 'mirror'",
150
+ "default": "repeat"
151
+ }
152
+ },
153
+ {
154
+ "name": "address-v",
155
+ "description": "The texture's vertical (V) address mode.",
156
+ "value": {
157
+ "type": "'repeat' | 'clamp' | 'mirror'",
158
+ "default": "repeat"
159
+ }
160
+ },
161
+ {
162
+ "name": "anisotropy",
163
+ "description": "The texture's maximum anisotropic filtering level.",
164
+ "value": { "type": "number", "default": "1" }
165
+ },
135
166
  {
136
167
  "name": "atlas",
137
168
  "description": "For a `sprite` asset, the `id` of the texture atlas asset it uses. The atlas must be declared before the sprite.",
@@ -142,6 +173,11 @@
142
173
  "description": "Additional asset data, as a JSON object.",
143
174
  "value": { "type": "string" }
144
175
  },
176
+ {
177
+ "name": "flip-y",
178
+ "description": "Whether the texture's image data is flipped vertically at upload.",
179
+ "value": { "type": "boolean", "default": "false" }
180
+ },
145
181
  {
146
182
  "name": "frame-keys",
147
183
  "description": "For a `sprite` asset, the atlas frame keys it uses, separated by spaces or commas.",
@@ -157,6 +193,24 @@
157
193
  "description": "Whether the asset should be loaded lazily.",
158
194
  "value": { "type": "boolean", "default": "false" }
159
195
  },
196
+ {
197
+ "name": "mag-filter",
198
+ "description": "The texture's magnification filter.",
199
+ "value": { "type": "'nearest' | 'linear'", "default": "linear" }
200
+ },
201
+ {
202
+ "name": "min-filter",
203
+ "description": "The texture's minification filter.",
204
+ "value": {
205
+ "type": "'nearest' | 'linear' | 'nearest-mip-nearest' | 'linear-mip-nearest' | 'nearest-mip-linear' | 'linear-mip-linear'",
206
+ "default": "linear-mip-linear"
207
+ }
208
+ },
209
+ {
210
+ "name": "mipmaps",
211
+ "description": "Whether the texture generates and uses mipmaps.",
212
+ "value": { "type": "boolean", "default": "true" }
213
+ },
160
214
  {
161
215
  "name": "pixels-per-unit",
162
216
  "description": "For a `sprite` asset, the number of pixels per world unit.",
@@ -172,6 +226,11 @@
172
226
  "description": "The URL of the asset to load.",
173
227
  "value": { "type": "string" }
174
228
  },
229
+ {
230
+ "name": "srgb",
231
+ "description": "Whether the texture holds sRGB (gamma-encoded) color data.",
232
+ "value": { "type": "boolean", "default": "false" }
233
+ },
175
234
  {
176
235
  "name": "type",
177
236
  "description": "The asset type. Inferred from the `src` file extension when omitted.",
@@ -197,6 +256,21 @@
197
256
  ],
198
257
  "js": {
199
258
  "properties": [
259
+ {
260
+ "name": "addressU",
261
+ "description": "Gets the texture's horizontal (U) address mode.",
262
+ "type": "AddressMode | null"
263
+ },
264
+ {
265
+ "name": "addressV",
266
+ "description": "Gets the texture's vertical (V) address mode.",
267
+ "type": "AddressMode | null"
268
+ },
269
+ {
270
+ "name": "anisotropy",
271
+ "description": "Gets the texture's maximum anisotropic filtering level.",
272
+ "type": "number | null"
273
+ },
200
274
  {
201
275
  "name": "asset",
202
276
  "description": "The asset that is loaded. Available once the element is ready — await\nwhenReady or the element's `ready()` promise before accessing it.",
@@ -209,12 +283,37 @@
209
283
  },
210
284
  {
211
285
  "name": "closestEntity",
212
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
213
- "type": "EntityElement | null"
286
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
287
+ "type": "EntityBaseElement | null"
288
+ },
289
+ {
290
+ "name": "flipY",
291
+ "description": "Gets whether the texture's image data is flipped vertically at upload.",
292
+ "type": "boolean | null"
214
293
  },
215
294
  {
216
295
  "name": "lazy",
217
296
  "description": "Gets whether the asset should be loaded lazily."
297
+ },
298
+ {
299
+ "name": "magFilter",
300
+ "description": "Gets the texture's magnification filter.",
301
+ "type": "MagFilterMode | null"
302
+ },
303
+ {
304
+ "name": "minFilter",
305
+ "description": "Gets the texture's minification filter.",
306
+ "type": "MinFilterMode | null"
307
+ },
308
+ {
309
+ "name": "mipmaps",
310
+ "description": "Gets whether the texture generates and uses mipmaps.",
311
+ "type": "boolean | null"
312
+ },
313
+ {
314
+ "name": "srgb",
315
+ "description": "Gets whether the texture holds sRGB (gamma-encoded) color data.",
316
+ "type": "boolean | null"
218
317
  }
219
318
  ],
220
319
  "events": [
@@ -338,8 +437,8 @@
338
437
  },
339
438
  {
340
439
  "name": "closestEntity",
341
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
342
- "type": "EntityElement | null"
440
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
441
+ "type": "EntityBaseElement | null"
343
442
  },
344
443
  {
345
444
  "name": "enabled",
@@ -347,7 +446,7 @@
347
446
  },
348
447
  {
349
448
  "name": "entity",
350
- "description": "The PlayCanvas entity instance. `null` until the element is ready, and again once it has\nbeen removed from the document — await whenReady or the element's `ready()`\npromise before accessing it.",
449
+ "description": "The PlayCanvas entity instance. `null` until the element is ready, and again once the\nentity is gone — await whenReady or the element's `ready()` promise before\naccessing it.",
351
450
  "type": "Entity | null"
352
451
  },
353
452
  { "name": "name", "description": "Gets the name of the entity." },
@@ -1185,7 +1284,7 @@
1185
1284
  },
1186
1285
  {
1187
1286
  "name": "pc-model",
1188
- "description": "The ModelElement interface provides properties and methods for manipulating\n[`<pc-model>`](https://developer.playcanvas.com/user-manual/web-components/tags/pc-model/) elements.\nThe ModelElement interface also inherits the properties and methods of the\nHTMLElement interface.\n\n---\n\n\n### **Events:**\n - **ready** - Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed.\n\n### **Methods:**\n - **ready(): __** - Returns a promise that resolves with this element when it's ready. This is the low-level\nprimitive underlying whenReady, which is the recommended way to wait for elements.\n\nReadiness tracks the element's current lifecycle: once a ready element is torn down (for\nexample by removing it from the document), this returns a fresh promise that resolves when\nthe element is next ready. A promise obtained earlier stays resolved — call this again\nafter re-inserting an element rather than reusing a promise from before its removal.",
1287
+ "description": "The ModelElement interface provides properties and methods for manipulating\n[`<pc-model>`](https://developer.playcanvas.com/user-manual/web-components/tags/pc-model/) elements.\nThe ModelElement interface also inherits the properties and methods of the\nHTMLElement interface.\n\nThe element becomes ready once its container asset has loaded and the instantiated hierarchy has\nbeen added to the scene — `entity` is non-null by then. A failed load also settles readiness,\nwith `entity` remaining `null`: readiness means the load settled, not that it succeeded — listen\nfor `error`, or check `entity`, to tell the outcomes apart. Changing `asset` re-arms readiness\nand instantiates anew, so a `ready()` obtained after the change resolves against the new\nhierarchy. A `pc-model` outside a `pc-app`, or referencing an unknown asset id, warns and never\nbecomes ready.\n\n---\n\n\n### **Events:**\n - **error** - Fired when the container asset fails to load, with the engine's error in `message`. Does not bubble. The element still becomes ready — readiness means the load settled, not that it succeeded.\n- **load** - Fired each time a container asset finishes instantiating, including re-instantiation after `asset` changes. Does not bubble — listen on this element, or use a capture-phase listener on an ancestor.\n- **ready** - Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed.\n\n### **Methods:**\n - **ready(): __** - Returns a promise that resolves with this element when it's ready. This is the low-level\nprimitive underlying whenReady, which is the recommended way to wait for elements.\n\nReadiness tracks the element's current lifecycle: once a ready element is torn down (for\nexample by removing it from the document), this returns a fresh promise that resolves when\nthe element is next ready. A promise obtained earlier stays resolved — call this again\nafter re-inserting an element rather than reusing a promise from before its removal.",
1189
1288
  "doc-url": "",
1190
1289
  "attributes": [
1191
1290
  {
@@ -1195,6 +1294,16 @@
1195
1294
  }
1196
1295
  ],
1197
1296
  "events": [
1297
+ {
1298
+ "name": "error",
1299
+ "type": "ErrorEvent",
1300
+ "description": "Fired when the container asset fails to load, with the engine's error in `message`. Does not bubble. The element still becomes ready — readiness means the load settled, not that it succeeded."
1301
+ },
1302
+ {
1303
+ "name": "load",
1304
+ "type": "Event",
1305
+ "description": "Fired each time a container asset finishes instantiating, including re-instantiation after `asset` changes. Does not bubble — listen on this element, or use a capture-phase listener on an ancestor."
1306
+ },
1198
1307
  {
1199
1308
  "name": "ready",
1200
1309
  "type": "CustomEvent",
@@ -1215,8 +1324,8 @@
1215
1324
  },
1216
1325
  {
1217
1326
  "name": "closestEntity",
1218
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
1219
- "type": "EntityElement | null"
1327
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
1328
+ "type": "EntityBaseElement | null"
1220
1329
  },
1221
1330
  {
1222
1331
  "name": "entity",
@@ -1225,6 +1334,16 @@
1225
1334
  }
1226
1335
  ],
1227
1336
  "events": [
1337
+ {
1338
+ "name": "error",
1339
+ "type": "ErrorEvent",
1340
+ "description": "Fired when the container asset fails to load, with the engine's error in `message`. Does not bubble. The element still becomes ready — readiness means the load settled, not that it succeeded."
1341
+ },
1342
+ {
1343
+ "name": "load",
1344
+ "type": "Event",
1345
+ "description": "Fired each time a container asset finishes instantiating, including re-instantiation after `asset` changes. Does not bubble — listen on this element, or use a capture-phase listener on an ancestor."
1346
+ },
1228
1347
  {
1229
1348
  "name": "ready",
1230
1349
  "type": "CustomEvent",
@@ -1235,7 +1354,7 @@
1235
1354
  },
1236
1355
  {
1237
1356
  "name": "pc-module",
1238
- "description": "The ModuleElement interface provides properties and methods for manipulating\n[`<pc-module>`](https://developer.playcanvas.com/user-manual/web-components/tags/pc-module/) elements.\nThe ModuleElement interface also inherits the properties and methods of the\nHTMLElement interface.\n\nNote that these attributes are read once when the element is created, so changing them later\nhas no effect.\n\n---\n",
1357
+ "description": "The ModuleElement interface provides properties and methods for manipulating\n[`<pc-module>`](https://developer.playcanvas.com/user-manual/web-components/tags/pc-module/)\nelements. The ModuleElement interface also inherits the properties and methods of the\nAsyncElement interface.\n\nThe attributes are read once, when the module starts loading - on the element's first\nconnection, or earlier if a containing `<pc-app>` boots first and collects it - so changing\nthem later has no effect. The element becomes ready once the module has loaded. WebAssembly\nmodules configure engine-global state that never unloads, so readiness is not re-armed by\nremoving the element, and a re-inserted element does not load again.\n\nA `<pc-module>` without a `name` warns and never becomes ready; a containing `<pc-app>` still\nboots.\n\n---\n\n\n### **Events:**\n - **ready** - Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed.\n\n### **Methods:**\n - **ready(): __** - Returns a promise that resolves with this element when it's ready. This is the low-level\nprimitive underlying whenReady, which is the recommended way to wait for elements.\n\nReadiness tracks the element's current lifecycle: once a ready element is torn down (for\nexample by removing it from the document), this returns a fresh promise that resolves when\nthe element is next ready. A promise obtained earlier stays resolved — call this again\nafter re-inserting an element rather than reusing a promise from before its removal.",
1239
1358
  "doc-url": "",
1240
1359
  "attributes": [
1241
1360
  {
@@ -1259,8 +1378,229 @@
1259
1378
  "value": { "type": "string" }
1260
1379
  }
1261
1380
  ],
1262
- "events": [],
1263
- "js": { "properties": [], "events": [] }
1381
+ "events": [
1382
+ {
1383
+ "name": "ready",
1384
+ "type": "CustomEvent",
1385
+ "description": "Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed."
1386
+ }
1387
+ ],
1388
+ "js": {
1389
+ "properties": [
1390
+ {
1391
+ "name": "closestApp",
1392
+ "description": "The nearest ancestor `<pc-app>` element, or `null` if this element has no `<pc-app>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
1393
+ "type": "AppElement | null"
1394
+ },
1395
+ {
1396
+ "name": "closestEntity",
1397
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
1398
+ "type": "EntityBaseElement | null"
1399
+ }
1400
+ ],
1401
+ "events": [
1402
+ {
1403
+ "name": "ready",
1404
+ "type": "CustomEvent",
1405
+ "description": "Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed."
1406
+ }
1407
+ ]
1408
+ }
1409
+ },
1410
+ {
1411
+ "name": "pc-node",
1412
+ "description": "The NodeElement interface provides properties and methods for manipulating\n[`<pc-node>`](https://developer.playcanvas.com/user-manual/web-components/tags/pc-node/)\nelements. The NodeElement interface also inherits the properties and methods of the\nHTMLElement interface.\n\nA `pc-node` is an override element: where `pc-entity` creates an entity, `pc-node` binds to a\nnode a `pc-model` loaded and declares overrides against the authored asset — components to\nadd, properties to change, content to attach. Attributes present apply as overrides; attributes\nabsent leave authored values untouched, and removing an attribute (or assigning `null` to the\nmatching property) restores the authored value.\n\n`name` selects among the host model's nodes (first match in depth-first order), nesting a\n`pc-node` inside another scopes the search to that subtree, and `index` picks among identically\nnamed matches. When `name` matches more than one node and no `index` is given, the element\nwarns and binds nothing.\n\nThe element becomes ready once bound, and never while unresolved — a missing or ambiguous\nname warns and records the failure in `state`, readiness stays unresolved, and descendants\nwait with it.\n\nThe pointer events below are dispatched by the containing `<pc-app>` element when the pointer\nintersects the bound node's geometry, exactly as for `<pc-entity>`.\n\n---\n\n\n### **Events:**\n - **pointerdown** - Fired when a pointer button is pressed over the node.\n- **pointerenter** - Fired when the pointer moves onto the node.\n- **pointerleave** - Fired when the pointer moves off the node.\n- **pointermove** - Fired when the pointer moves over the node.\n- **pointerup** - Fired when a pointer button is released over the node.\n- **ready** - Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed.\n\n### **Methods:**\n - **ready(): __** - Returns a promise that resolves with this element when it's ready. This is the low-level\nprimitive underlying whenReady, which is the recommended way to wait for elements.\n\nReadiness tracks the element's current lifecycle: once a ready element is torn down (for\nexample by removing it from the document), this returns a fresh promise that resolves when\nthe element is next ready. A promise obtained earlier stays resolved — call this again\nafter re-inserting an element rather than reusing a promise from before its removal.",
1413
+ "doc-url": "",
1414
+ "attributes": [
1415
+ {
1416
+ "name": "enabled",
1417
+ "description": "Overrides the node's enabled state.",
1418
+ "value": { "type": "string" }
1419
+ },
1420
+ {
1421
+ "name": "index",
1422
+ "description": "Which match to bind when `name` matches more than one node, 0-based in depth-first order. Optional for a unique match; required for an ambiguous one.",
1423
+ "value": { "type": "string" }
1424
+ },
1425
+ {
1426
+ "name": "name",
1427
+ "description": "The name of the node to bind, resolved within the nearest ancestor `pc-model` (or `pc-node`) once it has instantiated.",
1428
+ "value": { "type": "string" }
1429
+ },
1430
+ {
1431
+ "name": "onpointerdown",
1432
+ "description": "Script to run when a pointer button is pressed over the node.",
1433
+ "value": { "type": "string" }
1434
+ },
1435
+ {
1436
+ "name": "onpointerenter",
1437
+ "description": "Script to run when the pointer moves onto the node.",
1438
+ "value": { "type": "string" }
1439
+ },
1440
+ {
1441
+ "name": "onpointerleave",
1442
+ "description": "Script to run when the pointer moves off the node.",
1443
+ "value": { "type": "string" }
1444
+ },
1445
+ {
1446
+ "name": "onpointermove",
1447
+ "description": "Script to run when the pointer moves over the node.",
1448
+ "value": { "type": "string" }
1449
+ },
1450
+ {
1451
+ "name": "onpointerup",
1452
+ "description": "Script to run when a pointer button is released over the node.",
1453
+ "value": { "type": "string" }
1454
+ },
1455
+ {
1456
+ "name": "position",
1457
+ "description": "Overrides the node's local position, as an \"x y z\" triple.",
1458
+ "value": { "type": "string" }
1459
+ },
1460
+ {
1461
+ "name": "rotation",
1462
+ "description": "Overrides the node's local rotation (Euler angles), as an \"x y z\" triple.",
1463
+ "value": { "type": "string" }
1464
+ },
1465
+ {
1466
+ "name": "scale",
1467
+ "description": "Overrides the node's local scale, as an \"x y z\" triple.",
1468
+ "value": { "type": "string" }
1469
+ },
1470
+ {
1471
+ "name": "tags",
1472
+ "description": "Overrides the node's tags, separated by spaces or commas.",
1473
+ "value": { "type": "string" }
1474
+ }
1475
+ ],
1476
+ "events": [
1477
+ {
1478
+ "name": "pointerdown",
1479
+ "type": "PointerEvent",
1480
+ "description": "Fired when a pointer button is pressed over the node."
1481
+ },
1482
+ {
1483
+ "name": "pointerenter",
1484
+ "type": "PointerEvent",
1485
+ "description": "Fired when the pointer moves onto the node."
1486
+ },
1487
+ {
1488
+ "name": "pointerleave",
1489
+ "type": "PointerEvent",
1490
+ "description": "Fired when the pointer moves off the node."
1491
+ },
1492
+ {
1493
+ "name": "pointermove",
1494
+ "type": "PointerEvent",
1495
+ "description": "Fired when the pointer moves over the node."
1496
+ },
1497
+ {
1498
+ "name": "pointerup",
1499
+ "type": "PointerEvent",
1500
+ "description": "Fired when a pointer button is released over the node."
1501
+ },
1502
+ {
1503
+ "name": "ready",
1504
+ "type": "CustomEvent",
1505
+ "description": "Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed."
1506
+ }
1507
+ ],
1508
+ "js": {
1509
+ "properties": [
1510
+ {
1511
+ "name": "closestApp",
1512
+ "description": "The nearest ancestor `<pc-app>` element, or `null` if this element has no `<pc-app>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
1513
+ "type": "AppElement | null"
1514
+ },
1515
+ {
1516
+ "name": "closestEntity",
1517
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
1518
+ "type": "EntityBaseElement | null"
1519
+ },
1520
+ {
1521
+ "name": "enabled",
1522
+ "description": "Gets the enabled override.",
1523
+ "type": "boolean | null"
1524
+ },
1525
+ {
1526
+ "name": "entity",
1527
+ "description": "The PlayCanvas entity instance. `null` until the element is ready, and again once the\nentity is gone — await whenReady or the element's `ready()` promise before\naccessing it.",
1528
+ "type": "Entity | null"
1529
+ },
1530
+ {
1531
+ "name": "index",
1532
+ "description": "Gets which match to bind.",
1533
+ "type": "number | null"
1534
+ },
1535
+ {
1536
+ "name": "name",
1537
+ "description": "Gets the name of the node to bind.",
1538
+ "type": "string"
1539
+ },
1540
+ {
1541
+ "name": "path",
1542
+ "description": "The path of the bound node below the search root, `/`-separated, or `null` while not\nbound.",
1543
+ "type": "string | null"
1544
+ },
1545
+ {
1546
+ "name": "position",
1547
+ "description": "Gets the local position override.",
1548
+ "type": "Vec3 | null"
1549
+ },
1550
+ {
1551
+ "name": "rotation",
1552
+ "description": "Gets the local rotation override.",
1553
+ "type": "Vec3 | null"
1554
+ },
1555
+ {
1556
+ "name": "scale",
1557
+ "description": "Gets the local scale override.",
1558
+ "type": "Vec3 | null"
1559
+ },
1560
+ {
1561
+ "name": "state",
1562
+ "description": "The binding state: `pending` until the host instantiates and `name` resolves, `bound`\nonce decorated, `missing`/`ambiguous`/`duplicate` when resolution failed (each also\nwarns). Useful for asserting a document's bindings programmatically.",
1563
+ "type": "NodeBindingState"
1564
+ },
1565
+ {
1566
+ "name": "tags",
1567
+ "description": "Gets the tags override.",
1568
+ "type": "string[] | null"
1569
+ }
1570
+ ],
1571
+ "events": [
1572
+ {
1573
+ "name": "pointerdown",
1574
+ "type": "PointerEvent",
1575
+ "description": "Fired when a pointer button is pressed over the node."
1576
+ },
1577
+ {
1578
+ "name": "pointerenter",
1579
+ "type": "PointerEvent",
1580
+ "description": "Fired when the pointer moves onto the node."
1581
+ },
1582
+ {
1583
+ "name": "pointerleave",
1584
+ "type": "PointerEvent",
1585
+ "description": "Fired when the pointer moves off the node."
1586
+ },
1587
+ {
1588
+ "name": "pointermove",
1589
+ "type": "PointerEvent",
1590
+ "description": "Fired when the pointer moves over the node."
1591
+ },
1592
+ {
1593
+ "name": "pointerup",
1594
+ "type": "PointerEvent",
1595
+ "description": "Fired when a pointer button is released over the node."
1596
+ },
1597
+ {
1598
+ "name": "ready",
1599
+ "type": "CustomEvent",
1600
+ "description": "Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed."
1601
+ }
1602
+ ]
1603
+ }
1264
1604
  },
1265
1605
  {
1266
1606
  "name": "pc-scene",
@@ -1317,8 +1657,8 @@
1317
1657
  },
1318
1658
  {
1319
1659
  "name": "closestEntity",
1320
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
1321
- "type": "EntityElement | null"
1660
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
1661
+ "type": "EntityBaseElement | null"
1322
1662
  },
1323
1663
  {
1324
1664
  "name": "fog",
@@ -1432,8 +1772,8 @@
1432
1772
  },
1433
1773
  {
1434
1774
  "name": "closestEntity",
1435
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
1436
- "type": "EntityElement | null"
1775
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
1776
+ "type": "EntityBaseElement | null"
1437
1777
  },
1438
1778
  {
1439
1779
  "name": "intensity",
@@ -1567,8 +1907,8 @@
1567
1907
  },
1568
1908
  {
1569
1909
  "name": "closestEntity",
1570
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
1571
- "type": "EntityElement | null"
1910
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
1911
+ "type": "EntityBaseElement | null"
1572
1912
  },
1573
1913
  {
1574
1914
  "name": "component",
@@ -1784,8 +2124,8 @@
1784
2124
  },
1785
2125
  {
1786
2126
  "name": "closestEntity",
1787
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
1788
- "type": "EntityElement | null"
2127
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
2128
+ "type": "EntityBaseElement | null"
1789
2129
  },
1790
2130
  {
1791
2131
  "name": "component",
@@ -1877,7 +2217,7 @@
1877
2217
  },
1878
2218
  {
1879
2219
  "name": "pc-collision",
1880
- "description": "The CollisionComponentElement interface provides properties and methods for manipulating\n[`<pc-collision>`](https://developer.playcanvas.com/user-manual/web-components/tags/pc-collision/) elements.\nThe CollisionComponentElement interface also inherits the properties and methods of the\nHTMLElement interface.\n\n---\n\n\n### **Events:**\n - **ready** - Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed.\n\n### **Methods:**\n - **ready(): __** - Returns a promise that resolves with this element when it's ready. This is the low-level\nprimitive underlying whenReady, which is the recommended way to wait for elements.\n\nReadiness tracks the element's current lifecycle: once a ready element is torn down (for\nexample by removing it from the document), this returns a fresh promise that resolves when\nthe element is next ready. A promise obtained earlier stays resolved — call this again\nafter re-inserting an element rather than reusing a promise from before its removal.",
2220
+ "description": "The CollisionComponentElement interface provides properties and methods for manipulating\n[`<pc-collision>`](https://developer.playcanvas.com/user-manual/web-components/tags/pc-collision/) elements.\nThe CollisionComponentElement interface also inherits the properties and methods of the\nHTMLElement interface.\n\nFor `type=\"mesh\"`, the collision geometry defaults to the host entity's own render component\n(its render asset) — a collider matching the visible mesh, which is what a mesh collider on a\nglTF node means. The default resolves each time the component applies, so a `pc-node` that\nretargets or rebinds picks up the new node's geometry. An entity with no asset-backed render\ncomponent warns, and the collider has no shape.\n\n---\n\n\n### **Events:**\n - **ready** - Fired when the element is fully initialized — once per readiness cycle, so an element that is torn down and re-initialized (for example by removing and re-inserting it) fires it again. Bubbles and is composed.\n\n### **Methods:**\n - **ready(): __** - Returns a promise that resolves with this element when it's ready. This is the low-level\nprimitive underlying whenReady, which is the recommended way to wait for elements.\n\nReadiness tracks the element's current lifecycle: once a ready element is torn down (for\nexample by removing it from the document), this returns a fresh promise that resolves when\nthe element is next ready. A promise obtained earlier stays resolved — call this again\nafter re-inserting an element rather than reusing a promise from before its removal.",
1881
2221
  "doc-url": "",
1882
2222
  "attributes": [
1883
2223
  {
@@ -1936,8 +2276,8 @@
1936
2276
  },
1937
2277
  {
1938
2278
  "name": "closestEntity",
1939
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
1940
- "type": "EntityElement | null"
2279
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
2280
+ "type": "EntityBaseElement | null"
1941
2281
  },
1942
2282
  {
1943
2283
  "name": "component",
@@ -2144,8 +2484,8 @@
2144
2484
  },
2145
2485
  {
2146
2486
  "name": "closestEntity",
2147
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
2148
- "type": "EntityElement | null"
2487
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
2488
+ "type": "EntityBaseElement | null"
2149
2489
  },
2150
2490
  {
2151
2491
  "name": "color",
@@ -2316,8 +2656,8 @@
2316
2656
  },
2317
2657
  {
2318
2658
  "name": "closestEntity",
2319
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
2320
- "type": "EntityElement | null"
2659
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
2660
+ "type": "EntityBaseElement | null"
2321
2661
  },
2322
2662
  {
2323
2663
  "name": "component",
@@ -2416,8 +2756,8 @@
2416
2756
  },
2417
2757
  {
2418
2758
  "name": "closestEntity",
2419
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
2420
- "type": "EntityElement | null"
2759
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
2760
+ "type": "EntityBaseElement | null"
2421
2761
  },
2422
2762
  {
2423
2763
  "name": "component",
@@ -2551,8 +2891,8 @@
2551
2891
  },
2552
2892
  {
2553
2893
  "name": "closestEntity",
2554
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
2555
- "type": "EntityElement | null"
2894
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
2895
+ "type": "EntityBaseElement | null"
2556
2896
  },
2557
2897
  {
2558
2898
  "name": "component",
@@ -2737,8 +3077,8 @@
2737
3077
  },
2738
3078
  {
2739
3079
  "name": "closestEntity",
2740
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
2741
- "type": "EntityElement | null"
3080
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
3081
+ "type": "EntityBaseElement | null"
2742
3082
  },
2743
3083
  {
2744
3084
  "name": "color",
@@ -2855,8 +3195,8 @@
2855
3195
  },
2856
3196
  {
2857
3197
  "name": "closestEntity",
2858
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
2859
- "type": "EntityElement | null"
3198
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
3199
+ "type": "EntityBaseElement | null"
2860
3200
  },
2861
3201
  {
2862
3202
  "name": "component",
@@ -2914,8 +3254,8 @@
2914
3254
  },
2915
3255
  {
2916
3256
  "name": "closestEntity",
2917
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
2918
- "type": "EntityElement | null"
3257
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
3258
+ "type": "EntityBaseElement | null"
2919
3259
  },
2920
3260
  {
2921
3261
  "name": "component",
@@ -2991,8 +3331,8 @@
2991
3331
  },
2992
3332
  {
2993
3333
  "name": "closestEntity",
2994
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
2995
- "type": "EntityElement | null"
3334
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
3335
+ "type": "EntityBaseElement | null"
2996
3336
  },
2997
3337
  {
2998
3338
  "name": "component",
@@ -3094,8 +3434,8 @@
3094
3434
  },
3095
3435
  {
3096
3436
  "name": "closestEntity",
3097
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
3098
- "type": "EntityElement | null"
3437
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
3438
+ "type": "EntityBaseElement | null"
3099
3439
  },
3100
3440
  {
3101
3441
  "name": "component",
@@ -3178,8 +3518,8 @@
3178
3518
  },
3179
3519
  {
3180
3520
  "name": "closestEntity",
3181
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
3182
- "type": "EntityElement | null"
3521
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
3522
+ "type": "EntityBaseElement | null"
3183
3523
  },
3184
3524
  {
3185
3525
  "name": "component",
@@ -3239,8 +3579,8 @@
3239
3579
  },
3240
3580
  {
3241
3581
  "name": "closestEntity",
3242
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
3243
- "type": "EntityElement | null"
3582
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
3583
+ "type": "EntityBaseElement | null"
3244
3584
  },
3245
3585
  {
3246
3586
  "name": "component",
@@ -3313,8 +3653,8 @@
3313
3653
  },
3314
3654
  {
3315
3655
  "name": "closestEntity",
3316
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
3317
- "type": "EntityElement | null"
3656
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
3657
+ "type": "EntityBaseElement | null"
3318
3658
  },
3319
3659
  {
3320
3660
  "name": "enabled",
@@ -3406,8 +3746,8 @@
3406
3746
  },
3407
3747
  {
3408
3748
  "name": "closestEntity",
3409
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
3410
- "type": "EntityElement | null"
3749
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
3750
+ "type": "EntityBaseElement | null"
3411
3751
  },
3412
3752
  {
3413
3753
  "name": "component",
@@ -3549,8 +3889,8 @@
3549
3889
  },
3550
3890
  {
3551
3891
  "name": "closestEntity",
3552
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
3553
- "type": "EntityElement | null"
3892
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
3893
+ "type": "EntityBaseElement | null"
3554
3894
  },
3555
3895
  {
3556
3896
  "name": "component",
@@ -3681,8 +4021,8 @@
3681
4021
  },
3682
4022
  {
3683
4023
  "name": "closestEntity",
3684
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
3685
- "type": "EntityElement | null"
4024
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
4025
+ "type": "EntityBaseElement | null"
3686
4026
  },
3687
4027
  {
3688
4028
  "name": "component",
@@ -3807,8 +4147,8 @@
3807
4147
  },
3808
4148
  {
3809
4149
  "name": "closestEntity",
3810
- "description": "The nearest ancestor `<pc-entity>` element, or `null` if this element has no `<pc-entity>`\nancestor. The search starts at the parent, so an element never resolves to itself.",
3811
- "type": "EntityElement | null"
4150
+ "description": "The nearest ancestor element that fronts an entity — `<pc-entity>` or `<pc-node>` — or\n`null` if this element has no such ancestor. The search starts at the parent, so an element\nnever resolves to itself.",
4151
+ "type": "EntityBaseElement | null"
3812
4152
  },
3813
4153
  {
3814
4154
  "name": "duration",