babylonjs-accessibility 5.36.0 → 5.37.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.
@@ -31244,91 +31244,130 @@ class HTMLTwinHostComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Component
|
|
31244
31244
|
constructor(props) {
|
31245
31245
|
super(props);
|
31246
31246
|
this._observersMap = new Map();
|
31247
|
-
|
31248
|
-
|
31249
|
-
|
31250
|
-
|
31251
|
-
|
31252
|
-
|
31253
|
-
|
31254
|
-
|
31255
|
-
|
31256
|
-
const
|
31257
|
-
|
31258
|
-
|
31259
|
-
|
31260
|
-
|
31261
|
-
|
31262
|
-
|
31263
|
-
|
31264
|
-
|
31265
|
-
|
31266
|
-
|
31267
|
-
|
31268
|
-
|
31269
|
-
|
31270
|
-
|
31271
|
-
|
31272
|
-
|
31273
|
-
|
31274
|
-
|
31275
|
-
|
31276
|
-
|
31277
|
-
|
31278
|
-
|
31279
|
-
|
31247
|
+
/**
|
31248
|
+
* Adds observables to update the tree if any of the scene's nodes or GUI controls change.
|
31249
|
+
*/
|
31250
|
+
this._addSceneObservers = () => {
|
31251
|
+
const scene = this.props.scene;
|
31252
|
+
// Find all a11y entities in the scene, assemble the a11y forest (a11yTreeItems), and update React state to let React update DOM.
|
31253
|
+
const updateA11yTree = () => {
|
31254
|
+
this._updateHTMLTwinItems();
|
31255
|
+
};
|
31256
|
+
const addGUIObservers = (control) => {
|
31257
|
+
// observe isVisible changed
|
31258
|
+
if (!this._observersMap.has(control.onIsVisibleChangedObservable)) {
|
31259
|
+
this._observersMap.set(control.onIsVisibleChangedObservable, control.onIsVisibleChangedObservable.add(updateA11yTree));
|
31260
|
+
}
|
31261
|
+
if (!this._observersMap.has(control.onAccessibilityTagChangedObservable)) {
|
31262
|
+
this._observersMap.set(control.onAccessibilityTagChangedObservable, control.onAccessibilityTagChangedObservable.add(updateA11yTree));
|
31263
|
+
}
|
31264
|
+
if (control instanceof gui_2D_advancedDynamicTexture__WEBPACK_IMPORTED_MODULE_6__.Container) {
|
31265
|
+
const container = control;
|
31266
|
+
// observe add control and deal with new controls
|
31267
|
+
if (!this._observersMap.has(container.onControlAddedObservable)) {
|
31268
|
+
this._observersMap.set(container.onControlAddedObservable, container.onControlAddedObservable.add((newControl) => {
|
31269
|
+
if (newControl) {
|
31270
|
+
// deal with the new added control
|
31271
|
+
addGUIObservers(newControl);
|
31272
|
+
}
|
31273
|
+
updateA11yTree();
|
31274
|
+
}));
|
31275
|
+
}
|
31276
|
+
// observe remove control
|
31277
|
+
if (!this._observersMap.has(container.onControlRemovedObservable)) {
|
31278
|
+
this._observersMap.set(container.onControlRemovedObservable, container.onControlRemovedObservable.add((removedControl) => {
|
31279
|
+
updateA11yTree();
|
31280
|
+
}));
|
31281
|
+
}
|
31282
|
+
// deal with children
|
31283
|
+
control._children.forEach((child) => {
|
31284
|
+
addGUIObservers(child);
|
31285
|
+
});
|
31280
31286
|
}
|
31281
|
-
|
31282
|
-
|
31283
|
-
|
31284
|
-
|
31285
|
-
}));
|
31287
|
+
};
|
31288
|
+
const addNodeObservers = (node) => {
|
31289
|
+
if (!this._observersMap.has(node.onEnabledStateChangedObservable)) {
|
31290
|
+
this._observersMap.set(node.onEnabledStateChangedObservable, node.onEnabledStateChangedObservable.add(updateA11yTree));
|
31286
31291
|
}
|
31287
|
-
|
31288
|
-
|
31289
|
-
|
31292
|
+
if (!this._observersMap.has(node.onAccessibilityTagChangedObservable)) {
|
31293
|
+
this._observersMap.set(node.onAccessibilityTagChangedObservable, node.onAccessibilityTagChangedObservable.add(updateA11yTree));
|
31294
|
+
}
|
31295
|
+
// If the node has GUI, add observer to the controls
|
31296
|
+
if (this._isMeshGUI(node)) {
|
31297
|
+
const curMesh = node;
|
31298
|
+
const adt = curMesh.material?.getActiveTextures()[0];
|
31299
|
+
const guiRoot = adt.getChildren();
|
31300
|
+
guiRoot.forEach((control) => addGUIObservers(control));
|
31301
|
+
}
|
31302
|
+
};
|
31303
|
+
const _updateAndAddNode = (node) => {
|
31304
|
+
updateA11yTree();
|
31305
|
+
addNodeObservers(node);
|
31306
|
+
};
|
31307
|
+
const _updateAndAddTexture = (texture) => {
|
31308
|
+
updateA11yTree();
|
31309
|
+
texture.getChildren().forEach((control) => {
|
31310
|
+
addGUIObservers(control);
|
31290
31311
|
});
|
31312
|
+
};
|
31313
|
+
// observe add node and deal with new nodes
|
31314
|
+
if (!this._observersMap.has(scene.onNewMeshAddedObservable)) {
|
31315
|
+
this._observersMap.set(scene.onNewMeshAddedObservable, scene.onNewMeshAddedObservable.add(_updateAndAddNode));
|
31291
31316
|
}
|
31292
|
-
|
31293
|
-
|
31294
|
-
if (!this._observersMap.has(node.onEnabledStateChangedObservable)) {
|
31295
|
-
this._observersMap.set(node.onEnabledStateChangedObservable, node.onEnabledStateChangedObservable.add(updateA11yTree));
|
31317
|
+
if (!this._observersMap.has(scene.onNewTransformNodeAddedObservable)) {
|
31318
|
+
this._observersMap.set(scene.onNewTransformNodeAddedObservable, scene.onNewTransformNodeAddedObservable.add(_updateAndAddNode));
|
31296
31319
|
}
|
31297
|
-
if (!this._observersMap.has(
|
31298
|
-
this._observersMap.set(
|
31320
|
+
if (!this._observersMap.has(scene.onNewTextureAddedObservable)) {
|
31321
|
+
this._observersMap.set(scene.onNewTextureAddedObservable, scene.onNewTextureAddedObservable.add((newTexture) => {
|
31322
|
+
if (this._isFullscreenGUI(newTexture)) {
|
31323
|
+
setTimeout(() => {
|
31324
|
+
if (newTexture.isReady()) {
|
31325
|
+
_updateAndAddTexture(newTexture);
|
31326
|
+
}
|
31327
|
+
else {
|
31328
|
+
newTexture.onLoadObservable.addOnce(() => {
|
31329
|
+
_updateAndAddTexture(newTexture);
|
31330
|
+
});
|
31331
|
+
}
|
31332
|
+
});
|
31333
|
+
}
|
31334
|
+
}));
|
31299
31335
|
}
|
31300
|
-
//
|
31301
|
-
if (this.
|
31302
|
-
|
31303
|
-
|
31304
|
-
|
31305
|
-
|
31336
|
+
// observe remove node
|
31337
|
+
if (!this._observersMap.has(scene.onMeshRemovedObservable)) {
|
31338
|
+
this._observersMap.set(scene.onMeshRemovedObservable, scene.onMeshRemovedObservable.add(updateA11yTree));
|
31339
|
+
}
|
31340
|
+
if (!this._observersMap.has(scene.onTransformNodeRemovedObservable)) {
|
31341
|
+
this._observersMap.set(scene.onTransformNodeRemovedObservable, scene.onTransformNodeRemovedObservable.add(updateA11yTree));
|
31342
|
+
}
|
31343
|
+
if (!this._observersMap.has(scene.onTextureRemovedObservable)) {
|
31344
|
+
this._observersMap.set(scene.onTextureRemovedObservable, scene.onTextureRemovedObservable.add(updateA11yTree));
|
31306
31345
|
}
|
31346
|
+
// observe node enabled changed
|
31347
|
+
scene.getNodes().forEach((node) => {
|
31348
|
+
addNodeObservers(node);
|
31349
|
+
});
|
31350
|
+
scene.textures.forEach((texture) => {
|
31351
|
+
if (this._isFullscreenGUI(texture)) {
|
31352
|
+
texture.getChildren().forEach((control) => {
|
31353
|
+
addGUIObservers(control);
|
31354
|
+
});
|
31355
|
+
}
|
31356
|
+
});
|
31307
31357
|
};
|
31308
|
-
|
31309
|
-
|
31310
|
-
|
31311
|
-
|
31312
|
-
|
31313
|
-
|
31314
|
-
|
31315
|
-
|
31316
|
-
this._observersMap.set(scene.onNewTransformNodeAddedObservable, scene.onNewTransformNodeAddedObservable.add((newNode) => {
|
31317
|
-
updateA11yTree();
|
31318
|
-
addNodeObservers(newNode);
|
31319
|
-
}));
|
31320
|
-
}
|
31321
|
-
// observe remove node
|
31322
|
-
if (!this._observersMap.has(scene.onMeshRemovedObservable)) {
|
31323
|
-
this._observersMap.set(scene.onMeshRemovedObservable, scene.onMeshRemovedObservable.add(updateA11yTree));
|
31324
|
-
}
|
31325
|
-
if (!this._observersMap.has(scene.onTransformNodeRemovedObservable)) {
|
31326
|
-
this._observersMap.set(scene.onTransformNodeRemovedObservable, scene.onTransformNodeRemovedObservable.add(updateA11yTree));
|
31358
|
+
this.state = { a11yTreeItems: [] };
|
31359
|
+
}
|
31360
|
+
componentDidUpdate(prevProps, prevState, snapshot) {
|
31361
|
+
// If we changed scenes, we have to re-attach observers to the new scene.
|
31362
|
+
if (prevProps.scene !== this.props.scene) {
|
31363
|
+
this._observersMap.clear();
|
31364
|
+
this._addSceneObservers();
|
31365
|
+
this._updateHTMLTwinItems();
|
31327
31366
|
}
|
31328
|
-
|
31329
|
-
|
31330
|
-
|
31331
|
-
|
31367
|
+
}
|
31368
|
+
componentDidMount() {
|
31369
|
+
this._addSceneObservers();
|
31370
|
+
this._updateHTMLTwinItems();
|
31332
31371
|
}
|
31333
31372
|
componentWillUnmount() {
|
31334
31373
|
this._observersMap.forEach((observer, observable) => {
|
@@ -31351,7 +31390,20 @@ class HTMLTwinHostComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Component
|
|
31351
31390
|
}
|
31352
31391
|
}
|
31353
31392
|
const a11yTreeItems = this._getHTMLTwinItemsFromNodes(rootNodes);
|
31354
|
-
|
31393
|
+
// Get GUI twin tree nodes
|
31394
|
+
const guiRootNodes = [];
|
31395
|
+
for (const texture of this.props.scene.textures) {
|
31396
|
+
if (this._isFullscreenGUI(texture) && texture.isReady()) {
|
31397
|
+
guiRootNodes.push(texture.rootContainer);
|
31398
|
+
}
|
31399
|
+
}
|
31400
|
+
const a11yGuiTreeItems = this._getHTMLTwinItemsFromGUI(guiRootNodes);
|
31401
|
+
for (const guiItem of a11yGuiTreeItems) {
|
31402
|
+
a11yTreeItems.push(guiItem);
|
31403
|
+
}
|
31404
|
+
this.setState({
|
31405
|
+
a11yTreeItems,
|
31406
|
+
});
|
31355
31407
|
}
|
31356
31408
|
_getHTMLTwinItemsFromNodes(rootItems) {
|
31357
31409
|
if (!rootItems || rootItems.length === 0) {
|
@@ -31364,7 +31416,7 @@ class HTMLTwinHostComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Component
|
|
31364
31416
|
if (!curNode.isEnabled()) {
|
31365
31417
|
continue;
|
31366
31418
|
}
|
31367
|
-
if (this.
|
31419
|
+
if (this._isMeshGUI(curNode)) {
|
31368
31420
|
// if node texture is GUI, add that as a a11y GUI item (renders differently)
|
31369
31421
|
const curMesh = curNode;
|
31370
31422
|
const adt = curMesh.material?.getActiveTextures()[0];
|
@@ -31401,7 +31453,10 @@ class HTMLTwinHostComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Component
|
|
31401
31453
|
}
|
31402
31454
|
return result;
|
31403
31455
|
}
|
31404
|
-
|
31456
|
+
_isFullscreenGUI(texture) {
|
31457
|
+
return texture.getClassName() === "AdvancedDynamicTexture" && !!(texture.layer && !texture.layer.isBackground);
|
31458
|
+
}
|
31459
|
+
_isMeshGUI(node) {
|
31405
31460
|
let isGUI = false;
|
31406
31461
|
if (node instanceof core_Meshes_abstractMesh__WEBPACK_IMPORTED_MODULE_5__.AbstractMesh) {
|
31407
31462
|
const curMesh = node;
|