@combos-fun/plugin-a11y 0.0.27 → 0.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/plugin-a11y.cjs.js
CHANGED
|
@@ -6,9 +6,8 @@ var pluginRenderer = require('@combos-fun/plugin-renderer');
|
|
|
6
6
|
var inspectorDecorator = require('@combos-fun/inspector-decorator');
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
* @param len
|
|
11
|
-
* @param radix 基
|
|
9
|
+
* Generate a unique identifier.
|
|
10
|
+
* @param len length
|
|
12
11
|
*/
|
|
13
12
|
function uuid(len) {
|
|
14
13
|
let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
|
|
@@ -19,9 +18,9 @@ function uuid(len) {
|
|
|
19
18
|
return uuid.join('');
|
|
20
19
|
}
|
|
21
20
|
/**
|
|
22
|
-
*
|
|
23
|
-
* @param
|
|
24
|
-
* @param style
|
|
21
|
+
* Apply styles to a DOM element.
|
|
22
|
+
* @param element the DOM element to style
|
|
23
|
+
* @param style style properties
|
|
25
24
|
*/
|
|
26
25
|
const setStyle = (element, style) => {
|
|
27
26
|
const { width, height, position, left = 0, top = 0, zIndex, pointerEvents, background } = style;
|
|
@@ -49,17 +48,17 @@ const setTransform = (element, transform, ratioX, ratioY) => {
|
|
|
49
48
|
class A11y extends engine.Component {
|
|
50
49
|
static { this.componentName = 'A11y'; }
|
|
51
50
|
/**
|
|
52
|
-
*
|
|
53
|
-
* @param param interactive
|
|
51
|
+
* Accessibility component constructor.
|
|
52
|
+
* @param param `interactive` defaults to false; pass true if the GameObject is interactive.
|
|
54
53
|
* @example
|
|
55
|
-
* //
|
|
56
|
-
* new A11y({hint: '
|
|
57
|
-
* //
|
|
58
|
-
* new A11y({hint: '
|
|
59
|
-
* //
|
|
60
|
-
* new A11y({hint:'
|
|
61
|
-
* //
|
|
62
|
-
* new A11y({hint: '
|
|
54
|
+
* // Provide read-aloud support for a GameObject
|
|
55
|
+
* new A11y({hint: 'This is a div'})
|
|
56
|
+
* // The GameObject has an event; pass the event object
|
|
57
|
+
* new A11y({hint: 'Click event object', event: event})
|
|
58
|
+
* // Accessibility attributes
|
|
59
|
+
* new A11y({hint:'Button', role: 'button', state: {aria-hidden="true"}})
|
|
60
|
+
* // Custom attributes
|
|
61
|
+
* new A11y({hint: 'Custom attribute', attr: {key: '1'}})
|
|
63
62
|
*/
|
|
64
63
|
constructor(param) {
|
|
65
64
|
super();
|
|
@@ -101,7 +100,7 @@ exports.A11yActivate = void 0;
|
|
|
101
100
|
A11yActivate[A11yActivate["CHECK"] = 2] = "CHECK";
|
|
102
101
|
})(exports.A11yActivate || (exports.A11yActivate = {}));
|
|
103
102
|
/**
|
|
104
|
-
*
|
|
103
|
+
* Pointer events for the accessibility DOM.
|
|
105
104
|
*/
|
|
106
105
|
var PointerEvents;
|
|
107
106
|
(function (PointerEvents) {
|
|
@@ -109,7 +108,7 @@ var PointerEvents;
|
|
|
109
108
|
PointerEvents["AUTO"] = "auto";
|
|
110
109
|
})(PointerEvents || (PointerEvents = {}));
|
|
111
110
|
/**
|
|
112
|
-
*
|
|
111
|
+
* Style of the accessibility DOM layer.
|
|
113
112
|
*/
|
|
114
113
|
var MaskBackground;
|
|
115
114
|
(function (MaskBackground) {
|
|
@@ -117,7 +116,7 @@ var MaskBackground;
|
|
|
117
116
|
MaskBackground["NONE"] = "transparent";
|
|
118
117
|
})(MaskBackground || (MaskBackground = {}));
|
|
119
118
|
/**
|
|
120
|
-
*
|
|
119
|
+
* Type of the accessibility DOM element.
|
|
121
120
|
*/
|
|
122
121
|
var ElementType;
|
|
123
122
|
(function (ElementType) {
|
|
@@ -140,17 +139,14 @@ const getEventFunc = function (event, gameObject, e) {
|
|
|
140
139
|
let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
141
140
|
static { this.systemName = 'A11ySystem'; }
|
|
142
141
|
/**
|
|
143
|
-
*
|
|
144
|
-
* @param opt
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
* 无障碍插件初始化函数
|
|
148
|
-
* @param opt 无障碍插件选项
|
|
149
|
-
* @param opt.activate 是否开启无障碍能力,默认为自动根据系统读屏能力进行开启 AUTO | ENABLE | DISABLE
|
|
142
|
+
* Accessibility plugin initializer.
|
|
143
|
+
* @param opt accessibility plugin options
|
|
144
|
+
* @param opt.activate whether to enable accessibility; defaults to AUTO based on the
|
|
145
|
+
* system's screen-reader capability. One of AUTO | ENABLE | DISABLE.
|
|
150
146
|
* @example
|
|
151
|
-
* //
|
|
147
|
+
* // Enable debug: accessibility regions show a red translucent background
|
|
152
148
|
* new A11ySystem({debug: true})
|
|
153
|
-
* //
|
|
149
|
+
* // Disable accessibility
|
|
154
150
|
* new A11ySystem({activate: A11yActivate.DISABLE})
|
|
155
151
|
*/
|
|
156
152
|
constructor(opt) {
|
|
@@ -158,8 +154,7 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
158
154
|
this.cache = new Map();
|
|
159
155
|
this.eventCache = new Map();
|
|
160
156
|
/**
|
|
161
|
-
*
|
|
162
|
-
* dom 的 zIndex
|
|
157
|
+
* The DOM `zIndex`.
|
|
163
158
|
*/
|
|
164
159
|
this.zIndex = ZINDEX;
|
|
165
160
|
}
|
|
@@ -217,10 +212,11 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
217
212
|
}
|
|
218
213
|
if (!this.activate)
|
|
219
214
|
return;
|
|
220
|
-
//
|
|
215
|
+
// Render the parent container.
|
|
221
216
|
const div = document.createElement('div');
|
|
222
217
|
this.div = div;
|
|
223
|
-
//
|
|
218
|
+
// If a parent node exists, mount this div so children position relative to it;
|
|
219
|
+
// otherwise children position relative to the body.
|
|
224
220
|
if (this.game.canvas.parentNode) {
|
|
225
221
|
this.game.canvas.parentNode.insertBefore(this.div, this.game.canvas);
|
|
226
222
|
}
|
|
@@ -244,14 +240,14 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
244
240
|
return { renderWidth, renderHeight };
|
|
245
241
|
}
|
|
246
242
|
getCanvasBoundingClientRect() {
|
|
247
|
-
//
|
|
243
|
+
// Actual pixel width/height and position of the render canvas relative to the viewport.
|
|
248
244
|
const { width, height, left, top } = this.game.canvas.getBoundingClientRect();
|
|
249
245
|
return { width, height, left, top };
|
|
250
246
|
}
|
|
251
247
|
initDiv() {
|
|
252
248
|
const { pageXOffset, pageYOffset } = window;
|
|
253
249
|
const { width, height, left, top } = this.getCanvasBoundingClientRect();
|
|
254
|
-
//
|
|
250
|
+
// Parent container position.
|
|
255
251
|
const style = {
|
|
256
252
|
width,
|
|
257
253
|
height,
|
|
@@ -263,7 +259,7 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
263
259
|
background: MaskBackground.NONE,
|
|
264
260
|
};
|
|
265
261
|
setStyle(this.div, style);
|
|
266
|
-
//
|
|
262
|
+
// Attach a capture-phase listener on the parent container to track event coordinates.
|
|
267
263
|
this.div.addEventListener('click', e => {
|
|
268
264
|
const currentTarget = e.currentTarget;
|
|
269
265
|
const { left, top } = currentTarget.getBoundingClientRect();
|
|
@@ -273,7 +269,7 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
273
269
|
}, true);
|
|
274
270
|
}
|
|
275
271
|
/**
|
|
276
|
-
*
|
|
272
|
+
* Handle plugin updates.
|
|
277
273
|
*/
|
|
278
274
|
async update() {
|
|
279
275
|
const changes = this.componentObserver.clear();
|
|
@@ -314,8 +310,8 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
314
310
|
this.cache.delete(a11yId);
|
|
315
311
|
}
|
|
316
312
|
/**
|
|
317
|
-
*
|
|
318
|
-
* @param changed
|
|
313
|
+
* Handle a component being added to a GameObject.
|
|
314
|
+
* @param changed the changed component
|
|
319
315
|
*/
|
|
320
316
|
add(changed) {
|
|
321
317
|
if (!this.activate)
|
|
@@ -345,7 +341,7 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
345
341
|
}
|
|
346
342
|
}, delay || this.delay);
|
|
347
343
|
}
|
|
348
|
-
//
|
|
344
|
+
// React to scene changes.
|
|
349
345
|
transformChange(changed) {
|
|
350
346
|
const component = changed.component;
|
|
351
347
|
const { gameObject } = changed;
|
|
@@ -354,13 +350,13 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
354
350
|
return;
|
|
355
351
|
const { a11yId } = a11yComponent;
|
|
356
352
|
if (!component.inScene) {
|
|
357
|
-
//
|
|
353
|
+
// GameObject removed from the scene.
|
|
358
354
|
const dom = this.div.querySelector(`#${a11yId}`);
|
|
359
355
|
dom && this.div.removeChild(dom);
|
|
360
356
|
// this.cache.delete(a11yId)
|
|
361
357
|
}
|
|
362
358
|
else {
|
|
363
|
-
//
|
|
359
|
+
// GameObject added to the scene.
|
|
364
360
|
// this.div.appendChild(this.cache)
|
|
365
361
|
if (this.cache.has(a11yId)) {
|
|
366
362
|
const addDom = this.cache.get(a11yId);
|
|
@@ -369,10 +365,10 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
369
365
|
}
|
|
370
366
|
}
|
|
371
367
|
/**
|
|
372
|
-
*
|
|
373
|
-
* @param element DOM
|
|
374
|
-
* @param event
|
|
375
|
-
* @param gameObject
|
|
368
|
+
* Attach a listener for the accessibility component.
|
|
369
|
+
* @param element DOM element
|
|
370
|
+
* @param event event component object
|
|
371
|
+
* @param gameObject the GameObject
|
|
376
372
|
*/
|
|
377
373
|
setEvent(element, event, gameObject, id) {
|
|
378
374
|
if (!event) {
|
|
@@ -406,10 +402,10 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
406
402
|
element && element.removeEventListener('click', func);
|
|
407
403
|
}
|
|
408
404
|
/**
|
|
409
|
-
*
|
|
410
|
-
* @param element DOM
|
|
411
|
-
* @param hint
|
|
412
|
-
* @param interactive
|
|
405
|
+
* Set accessibility attribute tags.
|
|
406
|
+
* @param element DOM element
|
|
407
|
+
* @param hint accessibility read-aloud text
|
|
408
|
+
* @param interactive whether it is interactive
|
|
413
409
|
*/
|
|
414
410
|
setA11yAttr(element, component) {
|
|
415
411
|
const { hint, props = {}, state = {}, role, a11yId: id } = component;
|
|
@@ -417,7 +413,7 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
417
413
|
element.setAttribute('role', realRole);
|
|
418
414
|
element.setAttribute('aria-label', hint);
|
|
419
415
|
element.id = id;
|
|
420
|
-
//
|
|
416
|
+
// Backward-compatibility handling.
|
|
421
417
|
const ariaProps = Object.keys(props);
|
|
422
418
|
for (const key of ariaProps) {
|
|
423
419
|
element.setAttribute(key, props[key]);
|
|
@@ -433,18 +429,18 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
433
429
|
}
|
|
434
430
|
}
|
|
435
431
|
/**
|
|
436
|
-
*
|
|
437
|
-
* @param element DOM
|
|
438
|
-
* @param transform
|
|
432
|
+
* Position the accessibility element accordingly.
|
|
433
|
+
* @param element DOM element
|
|
434
|
+
* @param transform position properties
|
|
439
435
|
*/
|
|
440
436
|
setPosition(element, transform) {
|
|
441
|
-
//
|
|
437
|
+
// Positioned relative to the canvas.
|
|
442
438
|
// const { x: anchorX, y: anchorY } = transform.anchor
|
|
443
|
-
//
|
|
439
|
+
// GameObject width/height.
|
|
444
440
|
const { width, height } = transform.size;
|
|
445
441
|
// position
|
|
446
442
|
// const { x: positionX, y: positionY } = transform.position
|
|
447
|
-
//
|
|
443
|
+
// Set the accessibility DOM style; DragonBones animations default to 2px.
|
|
448
444
|
const style = {
|
|
449
445
|
width: width === 0 ? 1 : width * this.ratioX,
|
|
450
446
|
height: height === 0 ? 1 : height * this.ratioY,
|
|
@@ -457,7 +453,7 @@ let A11ySystem$1 = class A11ySystem extends engine.System {
|
|
|
457
453
|
...transform,
|
|
458
454
|
};
|
|
459
455
|
setStyle(element, style);
|
|
460
|
-
//
|
|
456
|
+
// Adjust the DOM position.
|
|
461
457
|
setTransform(element, transformProps, this.ratioX, this.ratioY);
|
|
462
458
|
}
|
|
463
459
|
onDestroy() {
|
|
@@ -479,7 +475,7 @@ var A11ySystem = A11ySystem$1;
|
|
|
479
475
|
/** Auto-generated by scripts/build-package.mjs — do not edit. */
|
|
480
476
|
Object.assign(A11ySystem, {
|
|
481
477
|
packageName: "@combos-fun/plugin-a11y",
|
|
482
|
-
packageVersion: "0.0.
|
|
478
|
+
packageVersion: "0.0.28",
|
|
483
479
|
});
|
|
484
480
|
|
|
485
481
|
exports.A11y = A11y;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-a11y.cjs.js","sources":["../lib/utils.ts","../lib/A11y.ts","../lib/constant.ts","../lib/A11ySystem.ts","../lib/__combosPackageMeta.gen.ts"],"sourcesContent":["import { A11yMaskStyle } from './constant';\n\n/**\n * 生成唯一的标识符\n * @param len 长度\n * @param radix 基\n */\nfunction uuid(len: number) {\n let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\n let uuid = [];\n let radix = chars.length;\n for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];\n return uuid.join('');\n}\n\n/**\n * 设置 dom 样式\n * @param div 需要设置样式的dom元素\n * @param style 样式属性\n */\nconst setStyle = (element: HTMLElement, style: A11yMaskStyle) => {\n const { width, height, position, left = 0, top = 0, zIndex, pointerEvents, background } = style;\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n element.style.position = position;\n element.style.left = `${left}`;\n element.style.top = `${top}`;\n element.style.zIndex = `${zIndex}`;\n element.style.pointerEvents = pointerEvents;\n element.style.background = background;\n element.style.border = 'none';\n element.style.overflow = 'hidden';\n};\n\nconst setTransform = (element: HTMLElement, transform, ratioX, ratioY) => {\n const { worldTransform } = transform;\n const { a, b, c, d, tx, ty } = worldTransform;\n const matrix = `matrix(${a}, ${b}, ${c}, ${d}, ${tx * ratioX}, ${ty * ratioY})`;\n element.style.transform = `${matrix}`;\n element.style.webkitTransform = `${matrix}`;\n element.style.transformOrigin = 'left top';\n element.style.webkitTransformOrigin = 'left top';\n};\n\nexport { setStyle, setTransform, uuid };\n","import {Component} from '@combos-fun/engine';\nimport {type, step} from '@combos-fun/inspector-decorator';\nimport {uuid} from './utils';\n\nexport interface A11yParams {\n hint: string;\n event?: Component;\n delay?: number;\n role?: string;\n props?: object;\n state?: object;\n attr?: object;\n a11yId?: string;\n [propName: string]: string | object | number;\n}\n\nexport default class A11y extends Component<A11yParams> {\n static componentName: string = 'A11y';\n\n /**\n * 是否可交互\n */\n @type('boolean') interactive: boolean;\n /**\n * 无障碍标签朗读内容\n */\n @type('string') hint: string;\n /**\n * 弃用,将根据Event组件自动添加\n * 事件对象\n */\n event: Component;\n /**\n * 延时加载时间(millisecond)\n */\n @type('number') @step(1) delay: number;\n\n /**\n * role 属性\n */\n @type('string') role: string;\n\n /**\n * 弃用,将属性写在component上\n * aria-value 属性\n * @example\n * aria-valuemin = \"0\"\n */\n props: object;\n\n /**\n * 弃用,将属性写在component上\n * aria state 属性\n * @example\n * aria-hidden = \"true\"\n */\n state: object;\n\n /**\n * 弃用,将属性写在component上\n * 传入自定义属性\n */\n attr: object;\n\n /**\n * 辅助Dom id 自动生成\n */\n @type('string') a11yId: string;\n\n /**\n * 无障碍组件构造函数\n * @param param interactive 默认为 false,如果游戏对象可交互,传入 true\n * @example\n * // 为游戏对象提供朗读能力\n * new A11y({hint: '这是一个div'})\n * // 游戏对象有事件,传入 event 对象\n * new A11y({hint: '点击事件对象', event: event})\n * // 无障碍属性\n * new A11y({hint:'按钮', role: 'button', state: {aria-hidden=\"true\"}})\n * // 自定义属性\n * new A11y({hint: '自定义属性', attr: {key: '1'}})\n */\n constructor(param: A11yParams) {\n super();\n Object.assign(this, param);\n const { hint = '', event, delay = 0, attr = {}, role = '', props = {}, state = {} } = param;\n this.hint = hint;\n this.event = event;\n this.delay = delay;\n this.attr = attr;\n this.role = role;\n this.props = props;\n this.state = state;\n this.a11yId = `_${uuid(6)}`;\n }\n}\n","export const POSITION = 'absolute';\nexport const ZINDEX = 3;\n\nexport enum A11yActivate {\n ENABLE = 0,\n DISABLE = 1,\n CHECK = 2,\n}\n\n/**\n * 无障碍 DOM 的指针事件\n */\nexport enum PointerEvents {\n NONE = 'none', // 元素不会成为鼠标事件的target,会被穿透\n AUTO = 'auto', // 默认值正常\n}\n\n/**\n * 无障碍 DOM 层的样式\n */\nexport enum MaskBackground {\n DEBUG = 'rgba(255,0,0,0.5)',\n NONE = 'transparent',\n}\n\n/**\n * 无障碍 DOM 的类型\n */\nexport enum ElementType {\n BUTTON = 'button',\n DIV = 'div',\n}\n\n/**\n * 无障碍遮罩层样式\n */\nexport interface A11yMaskStyle {\n width: number;\n height: number;\n background: string;\n position: string;\n left?: string;\n top?: string;\n zIndex: number;\n pointerEvents: PointerEvents;\n}\n\n/**\n * 点击事件位置\n */\nexport interface EventPosition {\n x: number;\n y: number;\n}\n","import { System, decorators, ComponentChanged, Transform, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { GameObject } from '@combos-fun/engine';\nimport { RendererSystem } from '@combos-fun/plugin-renderer';\nimport EE from 'eventemitter3';\n\nimport A11y from './A11y';\nimport { setStyle, setTransform } from './utils';\nimport {\n POSITION,\n ZINDEX,\n PointerEvents,\n MaskBackground,\n EventPosition,\n A11yMaskStyle,\n A11yActivate,\n} from './constant';\n\ninterface SystemParam {\n debug?: boolean;\n activate?: A11yActivate;\n delay?: number;\n zIndex?: number;\n checkA11yOpen?: () => Promise<boolean>;\n}\n\nconst notAttr = ['hint', 'event', 'delay', 'attr', 'role', 'props', 'state', 'a11yId', 'name'];\n\nconst getEventFunc = function (event: EE, gameObject: GameObject, e: MouseEvent) {\n ['touchstart', 'touchend', 'tap'].forEach(name => {\n event.emit(name, {\n stopPropagation: () => e.stopPropagation(),\n data: {\n position: this.eventPosition,\n },\n gameObject,\n });\n });\n};\n\n@decorators.componentObserver({\n A11y: ['hint'],\n Transform: ['inScene'],\n Event: [],\n})\nexport default class A11ySystem extends System {\n static systemName = 'A11ySystem';\n\n /**\n * 无障碍覆盖层\n */\n div: HTMLDivElement;\n /**\n * 是否开启调试\n */\n debug: boolean;\n /**\n * 横向的比例\n */\n _ratioX: number;\n /**\n * 纵向的比例\n */\n _ratioY: number;\n /**\n * 事件坐标\n */\n eventPosition: EventPosition;\n /**\n * 是否开启无障碍能力\n */\n activate: boolean;\n /**\n * dom 延迟放置\n */\n delay: number;\n cache: Map<string, HTMLElement> = new Map();\n eventCache: Map<string, (e: MouseEvent) => void> = new Map();\n /**\n * \n * dom 的 zIndex\n */\n zIndex: number = ZINDEX;\n /**\n *\n * @param opt\n */\n\n /**\n * 无障碍插件初始化函数\n * @param opt 无障碍插件选项\n * @param opt.activate 是否开启无障碍能力,默认为自动根据系统读屏能力进行开启 AUTO | ENABLE | DISABLE\n * @example\n * // 开启调试,无障碍区域会显示红色透明背景\n * new A11ySystem({debug: true})\n * // 禁用无障碍\n * new A11ySystem({activate: A11yActivate.DISABLE})\n */\n constructor(opt?: SystemParam) {\n super(opt);\n }\n\n get ratioX() {\n if (this._ratioX) {\n return this._ratioX;\n } else {\n const success = this.setRatio();\n if (success) {\n return this._ratioX;\n } else {\n return 0;\n }\n }\n }\n get ratioY() {\n if (this._ratioY) {\n return this._ratioY;\n } else {\n const success = this.setRatio();\n if (success) {\n return this._ratioY;\n } else {\n return 0;\n }\n }\n }\n\n async init(opt: SystemParam = {}) {\n const { activate = A11yActivate.CHECK, delay = 100, checkA11yOpen = () => Promise.resolve(false), zIndex } = opt;\n this.delay = delay;\n this.zIndex = zIndex || this.zIndex\n switch (activate) {\n case A11yActivate.CHECK:\n try {\n this.activate = await checkA11yOpen();\n } catch (error) {\n this.activate = false;\n }\n break;\n case A11yActivate.DISABLE:\n this.activate = false;\n break;\n case A11yActivate.ENABLE:\n this.activate = true;\n break;\n }\n this.debug = opt.debug || false;\n if (this.debug) {\n this.activate = true;\n }\n\n if (!this.activate) return;\n // 渲染出父容器\n const div = document.createElement('div');\n this.div = div;\n // 如果存在父容器,则渲染这个 div,子元素则会相对这个 div 进行定位,否则直接相对于 body 进行定位\n if (this.game.canvas.parentNode) {\n this.game.canvas.parentNode.insertBefore(this.div, this.game.canvas);\n }\n }\n setRatio() {\n const { width, height } = this.getCanvasBoundingClientRect();\n const { renderWidth, renderHeight } = this.getRenderRect();\n this._ratioX = width / renderWidth;\n this._ratioY = height / renderHeight;\n if (width || height) {\n this.initDiv();\n return true;\n } else {\n return false;\n }\n }\n getRenderRect() {\n const { params = { width: 300, height: 300 } } = this.game.getSystem(RendererSystem);\n const { height: renderHeight, width: renderWidth } = params;\n return { renderWidth, renderHeight };\n }\n getCanvasBoundingClientRect() {\n // 渲染画布相对于视口的实际宽高以及位置,实际的像素\n const { width, height, left, top } = this.game.canvas.getBoundingClientRect();\n return { width, height, left, top };\n }\n initDiv() {\n const { pageXOffset, pageYOffset } = window;\n\n const { width, height, left, top } = this.getCanvasBoundingClientRect();\n // 父容器位置\n const style: A11yMaskStyle = {\n width,\n height,\n left: `${left + pageXOffset}px`,\n top: `${top + pageYOffset}px`,\n position: POSITION,\n zIndex: this.zIndex,\n pointerEvents: PointerEvents.NONE,\n background: MaskBackground.NONE,\n };\n setStyle(this.div, style);\n // 给父容器设置捕获事件,用于监听事件坐标\n this.div.addEventListener(\n 'click',\n e => {\n const currentTarget = e.currentTarget as HTMLDivElement;\n const { left, top } = currentTarget.getBoundingClientRect();\n const x = (e.pageX - left) / this.ratioX;\n const y = (e.pageY - top) / this.ratioY;\n this.eventPosition = { x, y };\n },\n true,\n );\n }\n\n /**\n * 监听插件更新\n */\n async update() {\n const changes = this.componentObserver.clear();\n if (!this.activate) {\n return;\n }\n for (const changed of changes) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD:\n changed.componentName === 'Event' && this.addEvent(changed.gameObject);\n changed.componentName === 'A11y' && this.add(changed);\n break;\n case OBSERVER_TYPE.CHANGE:\n changed.componentName === 'Transform' && this.transformChange(changed);\n changed.componentName === 'A11y' && this.change(changed);\n break;\n case OBSERVER_TYPE.REMOVE:\n changed.componentName === 'Event' && this.removeEvent(changed);\n changed.componentName === 'A11y' && this.remove(changed);\n }\n }\n }\n\n change(changed: ComponentChanged) {\n const component = changed.component as A11y\n if (changed.prop.prop[0] === 'hint') {\n const dom = this.cache.get(component.a11yId)\n dom?.setAttribute('aria-label', component.hint)\n dom && this.setPosition(dom, changed.gameObject.transform)\n }\n }\n\n remove(changed: ComponentChanged) {\n const component = changed.component as A11y;\n if (!component) return;\n const { a11yId } = component;\n const element = this.div.querySelector(`#${a11yId}`);\n element && this.div.removeChild(element);\n this.cache.delete(a11yId);\n }\n\n /**\n * 监听组件被添加至游戏对象\n * @param changed 改变的组件\n */\n add(changed: ComponentChanged) {\n if (!this.activate) return;\n const component = changed.component as A11y;\n const { gameObject } = changed;\n const { delay, a11yId: id } = component;\n let { event } = component;\n if (!gameObject) return;\n const { transform } = gameObject;\n if (!transform) return;\n const element = document.createElement('div');\n this.cache.set(id, element);\n if (!event) {\n event = gameObject.getComponent('Event');\n }\n setTimeout(() => {\n this.setPosition(element, transform);\n this.setA11yAttr(element, component);\n if (event) {\n this.addEvent(gameObject);\n }\n if (gameObject.scene) {\n this.div.appendChild(element);\n }\n }, delay || this.delay);\n }\n\n // 监听 scene 改变\n transformChange(changed: ComponentChanged) {\n const component = changed.component as Transform;\n const { gameObject } = changed;\n const a11yComponent = gameObject.getComponent(A11y) as A11y;\n if (!a11yComponent) return;\n const { a11yId } = a11yComponent;\n if (!component.inScene) {\n // 监听 scene 删除游戏对象\n const dom = this.div.querySelector(`#${a11yId}`);\n dom && this.div.removeChild(dom);\n // this.cache.delete(a11yId)\n } else {\n // 监听 scene add\n // this.div.appendChild(this.cache)\n if (this.cache.has(a11yId)) {\n const addDom = this.cache.get(a11yId);\n addDom && this.div.appendChild(addDom);\n }\n }\n }\n\n /**\n * 为无障碍组件设置监听事件\n * @param element DOM 元素\n * @param event 事件组件对象\n * @param gameObject 游戏对象\n */\n setEvent(element: HTMLElement, event: EE, gameObject: GameObject, id) {\n if (!event) {\n return;\n }\n const func = getEventFunc.bind(this, event, gameObject) as (e: MouseEvent) => void;\n this.eventCache.set(id, func);\n element.addEventListener('click', func);\n }\n\n addEvent(gameObject: GameObject) {\n const a11y = gameObject.getComponent(A11y) as A11y;\n if (!a11y) return;\n const event = gameObject.getComponent('Event');\n if (!event) return;\n const element = this.cache.get(a11y.a11yId);\n element && this.setEvent(element, event, gameObject, a11y.a11yId);\n }\n\n removeEvent(changed: ComponentChanged) {\n const { gameObject } = changed;\n const a11y = gameObject.getComponent(A11y) as A11y;\n if (!a11y) return;\n const event = changed.component;\n if (!event) return;\n const { a11yId } = a11y;\n const func = this.eventCache.get(a11yId);\n const element = this.cache.get(a11yId);\n element && element.removeEventListener('click', func);\n }\n\n /**\n * 设置无障碍属性标签\n * @param element DOM 元素\n * @param hint 无障碍朗读文字\n * @param interactive 是否可交互\n */\n setA11yAttr(element: HTMLElement, component: A11y) {\n const { hint, props = {}, state = {}, role, a11yId: id } = component;\n const realRole = role || 'text';\n element.setAttribute('role', realRole);\n element.setAttribute('aria-label', hint);\n element.id = id;\n\n // 这里兼容\n const ariaProps = Object.keys(props);\n for (const key of ariaProps) {\n element.setAttribute(key, props[key]);\n }\n const ariaState = Object.keys(state);\n for (const key of ariaState) {\n element.setAttribute(key, state[key]);\n }\n\n for (const key of Object.keys(component)) {\n if (typeof component[key] === 'string' && notAttr.indexOf(key) === -1 && key.indexOf('_') !== 1) {\n element.setAttribute(key, component[key]);\n }\n }\n }\n\n /**\n * 将无障碍元素设置到对应的位置\n * @param element DOM 元素\n * @param transform 位置属性\n */\n setPosition(element: HTMLElement, transform: Transform) {\n // 相对画布定位\n // const { x: anchorX, y: anchorY } = transform.anchor\n // 游戏对象的宽高\n const { width, height } = transform.size;\n // position\n // const { x: positionX, y: positionY } = transform.position\n // 设置无障碍 DOM 的样式,龙骨动画默认 2px\n const style: A11yMaskStyle = {\n width: width === 0 ? 1 : width * this.ratioX,\n height: height === 0 ? 1 : height * this.ratioY,\n position: POSITION,\n zIndex: this.zIndex,\n pointerEvents: PointerEvents.AUTO,\n background: this.debug ? MaskBackground.DEBUG : MaskBackground.NONE,\n };\n const transformProps = {\n ...transform,\n };\n setStyle(element, style);\n // 调整 DOM 的位置\n setTransform(element, transformProps, this.ratioX, this.ratioY);\n }\n onDestroy() {\n this.div.parentElement.removeChild(this.div);\n this.cache = null;\n this.eventCache = null;\n this.div = null\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport A11ySystem from './A11ySystem';\n\nObject.assign(A11ySystem, {\n packageName: \"@combos-fun/plugin-a11y\",\n packageVersion: \"0.0.27\",\n});\n"],"names":["Component","__decorate","type","step","A11yActivate","A11ySystem","System","RendererSystem","OBSERVER_TYPE","decorators"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin-a11y.cjs.js","sources":["../lib/utils.ts","../lib/A11y.ts","../lib/constant.ts","../lib/A11ySystem.ts","../lib/__combosPackageMeta.gen.ts"],"sourcesContent":["import { A11yMaskStyle } from './constant';\n\n/**\n * Generate a unique identifier.\n * @param len length\n */\nfunction uuid(len: number) {\n let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\n let uuid = [];\n let radix = chars.length;\n for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];\n return uuid.join('');\n}\n\n/**\n * Apply styles to a DOM element.\n * @param element the DOM element to style\n * @param style style properties\n */\nconst setStyle = (element: HTMLElement, style: A11yMaskStyle) => {\n const { width, height, position, left = 0, top = 0, zIndex, pointerEvents, background } = style;\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n element.style.position = position;\n element.style.left = `${left}`;\n element.style.top = `${top}`;\n element.style.zIndex = `${zIndex}`;\n element.style.pointerEvents = pointerEvents;\n element.style.background = background;\n element.style.border = 'none';\n element.style.overflow = 'hidden';\n};\n\nconst setTransform = (element: HTMLElement, transform, ratioX, ratioY) => {\n const { worldTransform } = transform;\n const { a, b, c, d, tx, ty } = worldTransform;\n const matrix = `matrix(${a}, ${b}, ${c}, ${d}, ${tx * ratioX}, ${ty * ratioY})`;\n element.style.transform = `${matrix}`;\n element.style.webkitTransform = `${matrix}`;\n element.style.transformOrigin = 'left top';\n element.style.webkitTransformOrigin = 'left top';\n};\n\nexport { setStyle, setTransform, uuid };\n","import {Component} from '@combos-fun/engine';\nimport {type, step} from '@combos-fun/inspector-decorator';\nimport {uuid} from './utils';\n\nexport interface A11yParams {\n hint: string;\n event?: Component;\n delay?: number;\n role?: string;\n props?: object;\n state?: object;\n attr?: object;\n a11yId?: string;\n [propName: string]: string | object | number;\n}\n\nexport default class A11y extends Component<A11yParams> {\n static componentName: string = 'A11y';\n\n /**\n * Whether the element is interactive.\n */\n @type('boolean') interactive: boolean;\n /**\n * Text read aloud for the accessibility label.\n */\n @type('string') hint: string;\n /**\n * Deprecated: added automatically based on the Event component.\n * The event object.\n */\n event: Component;\n /**\n * Delayed load time (milliseconds).\n */\n @type('number') @step(1) delay: number;\n\n /**\n * The `role` attribute.\n */\n @type('string') role: string;\n\n /**\n * Deprecated: set the attribute on the component instead.\n * `aria-*` value attributes.\n * @example\n * aria-valuemin = \"0\"\n */\n props: object;\n\n /**\n * Deprecated: set the attribute on the component instead.\n * `aria` state attributes.\n * @example\n * aria-hidden = \"true\"\n */\n state: object;\n\n /**\n * Deprecated: set the attribute on the component instead.\n * Custom attributes.\n */\n attr: object;\n\n /**\n * Auto-generated id for the helper DOM.\n */\n @type('string') a11yId: string;\n\n /**\n * Accessibility component constructor.\n * @param param `interactive` defaults to false; pass true if the GameObject is interactive.\n * @example\n * // Provide read-aloud support for a GameObject\n * new A11y({hint: 'This is a div'})\n * // The GameObject has an event; pass the event object\n * new A11y({hint: 'Click event object', event: event})\n * // Accessibility attributes\n * new A11y({hint:'Button', role: 'button', state: {aria-hidden=\"true\"}})\n * // Custom attributes\n * new A11y({hint: 'Custom attribute', attr: {key: '1'}})\n */\n constructor(param: A11yParams) {\n super();\n Object.assign(this, param);\n const { hint = '', event, delay = 0, attr = {}, role = '', props = {}, state = {} } = param;\n this.hint = hint;\n this.event = event;\n this.delay = delay;\n this.attr = attr;\n this.role = role;\n this.props = props;\n this.state = state;\n this.a11yId = `_${uuid(6)}`;\n }\n}\n","export const POSITION = 'absolute';\nexport const ZINDEX = 3;\n\nexport enum A11yActivate {\n ENABLE = 0,\n DISABLE = 1,\n CHECK = 2,\n}\n\n/**\n * Pointer events for the accessibility DOM.\n */\nexport enum PointerEvents {\n NONE = 'none', // The element is not a mouse-event target; events pass through.\n AUTO = 'auto', // Default behavior.\n}\n\n/**\n * Style of the accessibility DOM layer.\n */\nexport enum MaskBackground {\n DEBUG = 'rgba(255,0,0,0.5)',\n NONE = 'transparent',\n}\n\n/**\n * Type of the accessibility DOM element.\n */\nexport enum ElementType {\n BUTTON = 'button',\n DIV = 'div',\n}\n\n/**\n * Style of the accessibility mask layer.\n */\nexport interface A11yMaskStyle {\n width: number;\n height: number;\n background: string;\n position: string;\n left?: string;\n top?: string;\n zIndex: number;\n pointerEvents: PointerEvents;\n}\n\n/**\n * Click event position.\n */\nexport interface EventPosition {\n x: number;\n y: number;\n}\n","import { System, decorators, ComponentChanged, Transform, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { GameObject } from '@combos-fun/engine';\nimport { RendererSystem } from '@combos-fun/plugin-renderer';\nimport EE from 'eventemitter3';\n\nimport A11y from './A11y';\nimport { setStyle, setTransform } from './utils';\nimport {\n POSITION,\n ZINDEX,\n PointerEvents,\n MaskBackground,\n EventPosition,\n A11yMaskStyle,\n A11yActivate,\n} from './constant';\n\ninterface SystemParam {\n debug?: boolean;\n activate?: A11yActivate;\n delay?: number;\n zIndex?: number;\n checkA11yOpen?: () => Promise<boolean>;\n}\n\nconst notAttr = ['hint', 'event', 'delay', 'attr', 'role', 'props', 'state', 'a11yId', 'name'];\n\nconst getEventFunc = function (event: EE, gameObject: GameObject, e: MouseEvent) {\n ['touchstart', 'touchend', 'tap'].forEach(name => {\n event.emit(name, {\n stopPropagation: () => e.stopPropagation(),\n data: {\n position: this.eventPosition,\n },\n gameObject,\n });\n });\n};\n\n@decorators.componentObserver({\n A11y: ['hint'],\n Transform: ['inScene'],\n Event: [],\n})\nexport default class A11ySystem extends System {\n static systemName = 'A11ySystem';\n\n /**\n * Accessibility overlay layer.\n */\n div: HTMLDivElement;\n /**\n * Whether debug mode is enabled.\n */\n debug: boolean;\n /**\n * Horizontal scale ratio.\n */\n _ratioX: number;\n /**\n * Vertical scale ratio.\n */\n _ratioY: number;\n /**\n * Event coordinates.\n */\n eventPosition: EventPosition;\n /**\n * Whether accessibility is enabled.\n */\n activate: boolean;\n /**\n * Delay before placing the DOM.\n */\n delay: number;\n cache: Map<string, HTMLElement> = new Map();\n eventCache: Map<string, (e: MouseEvent) => void> = new Map();\n /**\n * The DOM `zIndex`.\n */\n zIndex: number = ZINDEX;\n\n /**\n * Accessibility plugin initializer.\n * @param opt accessibility plugin options\n * @param opt.activate whether to enable accessibility; defaults to AUTO based on the\n * system's screen-reader capability. One of AUTO | ENABLE | DISABLE.\n * @example\n * // Enable debug: accessibility regions show a red translucent background\n * new A11ySystem({debug: true})\n * // Disable accessibility\n * new A11ySystem({activate: A11yActivate.DISABLE})\n */\n constructor(opt?: SystemParam) {\n super(opt);\n }\n\n get ratioX() {\n if (this._ratioX) {\n return this._ratioX;\n } else {\n const success = this.setRatio();\n if (success) {\n return this._ratioX;\n } else {\n return 0;\n }\n }\n }\n get ratioY() {\n if (this._ratioY) {\n return this._ratioY;\n } else {\n const success = this.setRatio();\n if (success) {\n return this._ratioY;\n } else {\n return 0;\n }\n }\n }\n\n async init(opt: SystemParam = {}) {\n const { activate = A11yActivate.CHECK, delay = 100, checkA11yOpen = () => Promise.resolve(false), zIndex } = opt;\n this.delay = delay;\n this.zIndex = zIndex || this.zIndex\n switch (activate) {\n case A11yActivate.CHECK:\n try {\n this.activate = await checkA11yOpen();\n } catch (error) {\n this.activate = false;\n }\n break;\n case A11yActivate.DISABLE:\n this.activate = false;\n break;\n case A11yActivate.ENABLE:\n this.activate = true;\n break;\n }\n this.debug = opt.debug || false;\n if (this.debug) {\n this.activate = true;\n }\n\n if (!this.activate) return;\n // Render the parent container.\n const div = document.createElement('div');\n this.div = div;\n // If a parent node exists, mount this div so children position relative to it;\n // otherwise children position relative to the body.\n if (this.game.canvas.parentNode) {\n this.game.canvas.parentNode.insertBefore(this.div, this.game.canvas);\n }\n }\n setRatio() {\n const { width, height } = this.getCanvasBoundingClientRect();\n const { renderWidth, renderHeight } = this.getRenderRect();\n this._ratioX = width / renderWidth;\n this._ratioY = height / renderHeight;\n if (width || height) {\n this.initDiv();\n return true;\n } else {\n return false;\n }\n }\n getRenderRect() {\n const { params = { width: 300, height: 300 } } = this.game.getSystem(RendererSystem);\n const { height: renderHeight, width: renderWidth } = params;\n return { renderWidth, renderHeight };\n }\n getCanvasBoundingClientRect() {\n // Actual pixel width/height and position of the render canvas relative to the viewport.\n const { width, height, left, top } = this.game.canvas.getBoundingClientRect();\n return { width, height, left, top };\n }\n initDiv() {\n const { pageXOffset, pageYOffset } = window;\n\n const { width, height, left, top } = this.getCanvasBoundingClientRect();\n // Parent container position.\n const style: A11yMaskStyle = {\n width,\n height,\n left: `${left + pageXOffset}px`,\n top: `${top + pageYOffset}px`,\n position: POSITION,\n zIndex: this.zIndex,\n pointerEvents: PointerEvents.NONE,\n background: MaskBackground.NONE,\n };\n setStyle(this.div, style);\n // Attach a capture-phase listener on the parent container to track event coordinates.\n this.div.addEventListener(\n 'click',\n e => {\n const currentTarget = e.currentTarget as HTMLDivElement;\n const { left, top } = currentTarget.getBoundingClientRect();\n const x = (e.pageX - left) / this.ratioX;\n const y = (e.pageY - top) / this.ratioY;\n this.eventPosition = { x, y };\n },\n true,\n );\n }\n\n /**\n * Handle plugin updates.\n */\n async update() {\n const changes = this.componentObserver.clear();\n if (!this.activate) {\n return;\n }\n for (const changed of changes) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD:\n changed.componentName === 'Event' && this.addEvent(changed.gameObject);\n changed.componentName === 'A11y' && this.add(changed);\n break;\n case OBSERVER_TYPE.CHANGE:\n changed.componentName === 'Transform' && this.transformChange(changed);\n changed.componentName === 'A11y' && this.change(changed);\n break;\n case OBSERVER_TYPE.REMOVE:\n changed.componentName === 'Event' && this.removeEvent(changed);\n changed.componentName === 'A11y' && this.remove(changed);\n }\n }\n }\n\n change(changed: ComponentChanged) {\n const component = changed.component as A11y\n if (changed.prop.prop[0] === 'hint') {\n const dom = this.cache.get(component.a11yId)\n dom?.setAttribute('aria-label', component.hint)\n dom && this.setPosition(dom, changed.gameObject.transform)\n }\n }\n\n remove(changed: ComponentChanged) {\n const component = changed.component as A11y;\n if (!component) return;\n const { a11yId } = component;\n const element = this.div.querySelector(`#${a11yId}`);\n element && this.div.removeChild(element);\n this.cache.delete(a11yId);\n }\n\n /**\n * Handle a component being added to a GameObject.\n * @param changed the changed component\n */\n add(changed: ComponentChanged) {\n if (!this.activate) return;\n const component = changed.component as A11y;\n const { gameObject } = changed;\n const { delay, a11yId: id } = component;\n let { event } = component;\n if (!gameObject) return;\n const { transform } = gameObject;\n if (!transform) return;\n const element = document.createElement('div');\n this.cache.set(id, element);\n if (!event) {\n event = gameObject.getComponent('Event');\n }\n setTimeout(() => {\n this.setPosition(element, transform);\n this.setA11yAttr(element, component);\n if (event) {\n this.addEvent(gameObject);\n }\n if (gameObject.scene) {\n this.div.appendChild(element);\n }\n }, delay || this.delay);\n }\n\n // React to scene changes.\n transformChange(changed: ComponentChanged) {\n const component = changed.component as Transform;\n const { gameObject } = changed;\n const a11yComponent = gameObject.getComponent(A11y) as A11y;\n if (!a11yComponent) return;\n const { a11yId } = a11yComponent;\n if (!component.inScene) {\n // GameObject removed from the scene.\n const dom = this.div.querySelector(`#${a11yId}`);\n dom && this.div.removeChild(dom);\n // this.cache.delete(a11yId)\n } else {\n // GameObject added to the scene.\n // this.div.appendChild(this.cache)\n if (this.cache.has(a11yId)) {\n const addDom = this.cache.get(a11yId);\n addDom && this.div.appendChild(addDom);\n }\n }\n }\n\n /**\n * Attach a listener for the accessibility component.\n * @param element DOM element\n * @param event event component object\n * @param gameObject the GameObject\n */\n setEvent(element: HTMLElement, event: EE, gameObject: GameObject, id) {\n if (!event) {\n return;\n }\n const func = getEventFunc.bind(this, event, gameObject) as (e: MouseEvent) => void;\n this.eventCache.set(id, func);\n element.addEventListener('click', func);\n }\n\n addEvent(gameObject: GameObject) {\n const a11y = gameObject.getComponent(A11y) as A11y;\n if (!a11y) return;\n const event = gameObject.getComponent('Event');\n if (!event) return;\n const element = this.cache.get(a11y.a11yId);\n element && this.setEvent(element, event, gameObject, a11y.a11yId);\n }\n\n removeEvent(changed: ComponentChanged) {\n const { gameObject } = changed;\n const a11y = gameObject.getComponent(A11y) as A11y;\n if (!a11y) return;\n const event = changed.component;\n if (!event) return;\n const { a11yId } = a11y;\n const func = this.eventCache.get(a11yId);\n const element = this.cache.get(a11yId);\n element && element.removeEventListener('click', func);\n }\n\n /**\n * Set accessibility attribute tags.\n * @param element DOM element\n * @param hint accessibility read-aloud text\n * @param interactive whether it is interactive\n */\n setA11yAttr(element: HTMLElement, component: A11y) {\n const { hint, props = {}, state = {}, role, a11yId: id } = component;\n const realRole = role || 'text';\n element.setAttribute('role', realRole);\n element.setAttribute('aria-label', hint);\n element.id = id;\n\n // Backward-compatibility handling.\n const ariaProps = Object.keys(props);\n for (const key of ariaProps) {\n element.setAttribute(key, props[key]);\n }\n const ariaState = Object.keys(state);\n for (const key of ariaState) {\n element.setAttribute(key, state[key]);\n }\n\n for (const key of Object.keys(component)) {\n if (typeof component[key] === 'string' && notAttr.indexOf(key) === -1 && key.indexOf('_') !== 1) {\n element.setAttribute(key, component[key]);\n }\n }\n }\n\n /**\n * Position the accessibility element accordingly.\n * @param element DOM element\n * @param transform position properties\n */\n setPosition(element: HTMLElement, transform: Transform) {\n // Positioned relative to the canvas.\n // const { x: anchorX, y: anchorY } = transform.anchor\n // GameObject width/height.\n const { width, height } = transform.size;\n // position\n // const { x: positionX, y: positionY } = transform.position\n // Set the accessibility DOM style; DragonBones animations default to 2px.\n const style: A11yMaskStyle = {\n width: width === 0 ? 1 : width * this.ratioX,\n height: height === 0 ? 1 : height * this.ratioY,\n position: POSITION,\n zIndex: this.zIndex,\n pointerEvents: PointerEvents.AUTO,\n background: this.debug ? MaskBackground.DEBUG : MaskBackground.NONE,\n };\n const transformProps = {\n ...transform,\n };\n setStyle(element, style);\n // Adjust the DOM position.\n setTransform(element, transformProps, this.ratioX, this.ratioY);\n }\n onDestroy() {\n this.div.parentElement.removeChild(this.div);\n this.cache = null;\n this.eventCache = null;\n this.div = null\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport A11ySystem from './A11ySystem';\n\nObject.assign(A11ySystem, {\n packageName: \"@combos-fun/plugin-a11y\",\n packageVersion: \"0.0.28\",\n});\n"],"names":["Component","__decorate","type","step","A11yActivate","A11ySystem","System","RendererSystem","OBSERVER_TYPE","decorators"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var t=require("tslib"),e=require("@combos-fun/engine"),i=require("@combos-fun/plugin-renderer"),n=require("@combos-fun/inspector-decorator");const s=(t,e)=>{const{width:i,height:n,position:s,left:o=0,top:r=0,zIndex:a,pointerEvents:c,background:h}=e;t.style.width=`${i}px`,t.style.height=`${n}px`,t.style.position=s,t.style.left=`${o}`,t.style.top=`${r}`,t.style.zIndex=`${a}`,t.style.pointerEvents=c,t.style.background=h,t.style.border="none",t.style.overflow="hidden"};class o extends e.Component{static{this.componentName="A11y"}constructor(t){super(),Object.assign(this,t);const{hint:e="",event:i,delay:n=0,attr:s={},role:o="",props:r={},state:a={}}=t;this.hint=e,this.event=i,this.delay=n,this.attr=s,this.role=o,this.props=r,this.state=a,this.a11yId=`_${function(t){let e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),i=[],n=e.length;for(let s=0;s<t;s++)i[s]=e[0|Math.random()*n];return i.join("")}(6)}`}}t.__decorate([n.type("boolean")],o.prototype,"interactive",void 0),t.__decorate([n.type("string")],o.prototype,"hint",void 0),t.__decorate([n.type("number"),n.step(1)],o.prototype,"delay",void 0),t.__decorate([n.type("string")],o.prototype,"role",void 0),t.__decorate([n.type("string")],o.prototype,"a11yId",void 0);const r="absolute";var a,c,h,d;exports.A11yActivate=void 0,(a=exports.A11yActivate||(exports.A11yActivate={}))[a.ENABLE=0]="ENABLE",a[a.DISABLE=1]="DISABLE",a[a.CHECK=2]="CHECK",function(t){t.NONE="none",t.AUTO="auto"}(c||(c={})),function(t){t.DEBUG="rgba(255,0,0,0.5)",t.NONE="transparent"}(h||(h={})),function(t){t.BUTTON="button",t.DIV="div"}(d||(d={}));const p=["hint","event","delay","attr","role","props","state","a11yId","name"],v=function(t,e,i){["touchstart","touchend","tap"].forEach(n=>{t.emit(n,{stopPropagation:()=>i.stopPropagation(),data:{position:this.eventPosition},gameObject:e})})};let l=class extends e.System{static{this.systemName="A11ySystem"}constructor(t){super(t),this.cache=new Map,this.eventCache=new Map,this.zIndex=3}get ratioX(){if(this._ratioX)return this._ratioX;return this.setRatio()?this._ratioX:0}get ratioY(){if(this._ratioY)return this._ratioY;return this.setRatio()?this._ratioY:0}async init(t={}){const{activate:e=exports.A11yActivate.CHECK,delay:i=100,checkA11yOpen:n=()=>Promise.resolve(!1),zIndex:s}=t;switch(this.delay=i,this.zIndex=s||this.zIndex,e){case exports.A11yActivate.CHECK:try{this.activate=await n()}catch(t){this.activate=!1}break;case exports.A11yActivate.DISABLE:this.activate=!1;break;case exports.A11yActivate.ENABLE:this.activate=!0}if(this.debug=t.debug||!1,this.debug&&(this.activate=!0),!this.activate)return;const o=document.createElement("div");this.div=o,this.game.canvas.parentNode&&this.game.canvas.parentNode.insertBefore(this.div,this.game.canvas)}setRatio(){const{width:t,height:e}=this.getCanvasBoundingClientRect(),{renderWidth:i,renderHeight:n}=this.getRenderRect();return this._ratioX=t/i,this._ratioY=e/n,!(!t&&!e)&&(this.initDiv(),!0)}getRenderRect(){const{params:t={width:300,height:300}}=this.game.getSystem(i.RendererSystem),{height:e,width:n}=t;return{renderWidth:n,renderHeight:e}}getCanvasBoundingClientRect(){const{width:t,height:e,left:i,top:n}=this.game.canvas.getBoundingClientRect();return{width:t,height:e,left:i,top:n}}initDiv(){const{pageXOffset:t,pageYOffset:e}=window,{width:i,height:n,left:o,top:a}=this.getCanvasBoundingClientRect(),d={width:i,height:n,left:`${o+t}px`,top:`${a+e}px`,position:r,zIndex:this.zIndex,pointerEvents:c.NONE,background:h.NONE};s(this.div,d),this.div.addEventListener("click",t=>{const e=t.currentTarget,{left:i,top:n}=e.getBoundingClientRect(),s=(t.pageX-i)/this.ratioX,o=(t.pageY-n)/this.ratioY;this.eventPosition={x:s,y:o}},!0)}async update(){const t=this.componentObserver.clear();if(this.activate)for(const i of t)switch(i.type){case e.OBSERVER_TYPE.ADD:"Event"===i.componentName&&this.addEvent(i.gameObject),"A11y"===i.componentName&&this.add(i);break;case e.OBSERVER_TYPE.CHANGE:"Transform"===i.componentName&&this.transformChange(i),"A11y"===i.componentName&&this.change(i);break;case e.OBSERVER_TYPE.REMOVE:"Event"===i.componentName&&this.removeEvent(i),"A11y"===i.componentName&&this.remove(i)}}change(t){const e=t.component;if("hint"===t.prop.prop[0]){const i=this.cache.get(e.a11yId);i?.setAttribute("aria-label",e.hint),i&&this.setPosition(i,t.gameObject.transform)}}remove(t){const e=t.component;if(!e)return;const{a11yId:i}=e,n=this.div.querySelector(`#${i}`);n&&this.div.removeChild(n),this.cache.delete(i)}add(t){if(!this.activate)return;const e=t.component,{gameObject:i}=t,{delay:n,a11yId:s}=e;let{event:o}=e;if(!i)return;const{transform:r}=i;if(!r)return;const a=document.createElement("div");this.cache.set(s,a),o||(o=i.getComponent("Event")),setTimeout(()=>{this.setPosition(a,r),this.setA11yAttr(a,e),o&&this.addEvent(i),i.scene&&this.div.appendChild(a)},n||this.delay)}transformChange(t){const e=t.component,{gameObject:i}=t,n=i.getComponent(o);if(!n)return;const{a11yId:s}=n;if(e.inScene){if(this.cache.has(s)){const t=this.cache.get(s);t&&this.div.appendChild(t)}}else{const t=this.div.querySelector(`#${s}`);t&&this.div.removeChild(t)}}setEvent(t,e,i,n){if(!e)return;const s=v.bind(this,e,i);this.eventCache.set(n,s),t.addEventListener("click",s)}addEvent(t){const e=t.getComponent(o);if(!e)return;const i=t.getComponent("Event");if(!i)return;const n=this.cache.get(e.a11yId);n&&this.setEvent(n,i,t,e.a11yId)}removeEvent(t){const{gameObject:e}=t,i=e.getComponent(o);if(!i)return;if(!t.component)return;const{a11yId:n}=i,s=this.eventCache.get(n),r=this.cache.get(n);r&&r.removeEventListener("click",s)}setA11yAttr(t,e){const{hint:i,props:n={},state:s={},role:o,a11yId:r}=e,a=o||"text";t.setAttribute("role",a),t.setAttribute("aria-label",i),t.id=r;const c=Object.keys(n);for(const e of c)t.setAttribute(e,n[e]);const h=Object.keys(s);for(const e of h)t.setAttribute(e,s[e]);for(const i of Object.keys(e))"string"==typeof e[i]&&-1===p.indexOf(i)&&1!==i.indexOf("_")&&t.setAttribute(i,e[i])}setPosition(t,e){const{width:i,height:n}=e.size,o={width:0===i?1:i*this.ratioX,height:0===n?1:n*this.ratioY,position:r,zIndex:this.zIndex,pointerEvents:c.AUTO,background:this.debug?h.DEBUG:h.NONE},a={...e};s(t,o),((t,e,i,n)=>{const{worldTransform:s}=e,{a:o,b:r,c:a,d:c,tx:h,ty:d}=s,p=`matrix(${o}, ${r}, ${a}, ${c}, ${h*i}, ${d*n})`;t.style.transform=`${p}`,t.style.webkitTransform=`${p}`,t.style.transformOrigin="left top",t.style.webkitTransformOrigin="left top"})(t,a,this.ratioX,this.ratioY)}onDestroy(){this.div.parentElement.removeChild(this.div),this.cache=null,this.eventCache=null,this.div=null}};l=t.__decorate([e.decorators.componentObserver({A11y:["hint"],Transform:["inScene"],Event:[]})],l);var g=l;Object.assign(g,{packageName:"@combos-fun/plugin-a11y",packageVersion:"0.0.
|
|
1
|
+
"use strict";var t=require("tslib"),e=require("@combos-fun/engine"),i=require("@combos-fun/plugin-renderer"),n=require("@combos-fun/inspector-decorator");const s=(t,e)=>{const{width:i,height:n,position:s,left:o=0,top:r=0,zIndex:a,pointerEvents:c,background:h}=e;t.style.width=`${i}px`,t.style.height=`${n}px`,t.style.position=s,t.style.left=`${o}`,t.style.top=`${r}`,t.style.zIndex=`${a}`,t.style.pointerEvents=c,t.style.background=h,t.style.border="none",t.style.overflow="hidden"};class o extends e.Component{static{this.componentName="A11y"}constructor(t){super(),Object.assign(this,t);const{hint:e="",event:i,delay:n=0,attr:s={},role:o="",props:r={},state:a={}}=t;this.hint=e,this.event=i,this.delay=n,this.attr=s,this.role=o,this.props=r,this.state=a,this.a11yId=`_${function(t){let e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),i=[],n=e.length;for(let s=0;s<t;s++)i[s]=e[0|Math.random()*n];return i.join("")}(6)}`}}t.__decorate([n.type("boolean")],o.prototype,"interactive",void 0),t.__decorate([n.type("string")],o.prototype,"hint",void 0),t.__decorate([n.type("number"),n.step(1)],o.prototype,"delay",void 0),t.__decorate([n.type("string")],o.prototype,"role",void 0),t.__decorate([n.type("string")],o.prototype,"a11yId",void 0);const r="absolute";var a,c,h,d;exports.A11yActivate=void 0,(a=exports.A11yActivate||(exports.A11yActivate={}))[a.ENABLE=0]="ENABLE",a[a.DISABLE=1]="DISABLE",a[a.CHECK=2]="CHECK",function(t){t.NONE="none",t.AUTO="auto"}(c||(c={})),function(t){t.DEBUG="rgba(255,0,0,0.5)",t.NONE="transparent"}(h||(h={})),function(t){t.BUTTON="button",t.DIV="div"}(d||(d={}));const p=["hint","event","delay","attr","role","props","state","a11yId","name"],v=function(t,e,i){["touchstart","touchend","tap"].forEach(n=>{t.emit(n,{stopPropagation:()=>i.stopPropagation(),data:{position:this.eventPosition},gameObject:e})})};let l=class extends e.System{static{this.systemName="A11ySystem"}constructor(t){super(t),this.cache=new Map,this.eventCache=new Map,this.zIndex=3}get ratioX(){if(this._ratioX)return this._ratioX;return this.setRatio()?this._ratioX:0}get ratioY(){if(this._ratioY)return this._ratioY;return this.setRatio()?this._ratioY:0}async init(t={}){const{activate:e=exports.A11yActivate.CHECK,delay:i=100,checkA11yOpen:n=()=>Promise.resolve(!1),zIndex:s}=t;switch(this.delay=i,this.zIndex=s||this.zIndex,e){case exports.A11yActivate.CHECK:try{this.activate=await n()}catch(t){this.activate=!1}break;case exports.A11yActivate.DISABLE:this.activate=!1;break;case exports.A11yActivate.ENABLE:this.activate=!0}if(this.debug=t.debug||!1,this.debug&&(this.activate=!0),!this.activate)return;const o=document.createElement("div");this.div=o,this.game.canvas.parentNode&&this.game.canvas.parentNode.insertBefore(this.div,this.game.canvas)}setRatio(){const{width:t,height:e}=this.getCanvasBoundingClientRect(),{renderWidth:i,renderHeight:n}=this.getRenderRect();return this._ratioX=t/i,this._ratioY=e/n,!(!t&&!e)&&(this.initDiv(),!0)}getRenderRect(){const{params:t={width:300,height:300}}=this.game.getSystem(i.RendererSystem),{height:e,width:n}=t;return{renderWidth:n,renderHeight:e}}getCanvasBoundingClientRect(){const{width:t,height:e,left:i,top:n}=this.game.canvas.getBoundingClientRect();return{width:t,height:e,left:i,top:n}}initDiv(){const{pageXOffset:t,pageYOffset:e}=window,{width:i,height:n,left:o,top:a}=this.getCanvasBoundingClientRect(),d={width:i,height:n,left:`${o+t}px`,top:`${a+e}px`,position:r,zIndex:this.zIndex,pointerEvents:c.NONE,background:h.NONE};s(this.div,d),this.div.addEventListener("click",t=>{const e=t.currentTarget,{left:i,top:n}=e.getBoundingClientRect(),s=(t.pageX-i)/this.ratioX,o=(t.pageY-n)/this.ratioY;this.eventPosition={x:s,y:o}},!0)}async update(){const t=this.componentObserver.clear();if(this.activate)for(const i of t)switch(i.type){case e.OBSERVER_TYPE.ADD:"Event"===i.componentName&&this.addEvent(i.gameObject),"A11y"===i.componentName&&this.add(i);break;case e.OBSERVER_TYPE.CHANGE:"Transform"===i.componentName&&this.transformChange(i),"A11y"===i.componentName&&this.change(i);break;case e.OBSERVER_TYPE.REMOVE:"Event"===i.componentName&&this.removeEvent(i),"A11y"===i.componentName&&this.remove(i)}}change(t){const e=t.component;if("hint"===t.prop.prop[0]){const i=this.cache.get(e.a11yId);i?.setAttribute("aria-label",e.hint),i&&this.setPosition(i,t.gameObject.transform)}}remove(t){const e=t.component;if(!e)return;const{a11yId:i}=e,n=this.div.querySelector(`#${i}`);n&&this.div.removeChild(n),this.cache.delete(i)}add(t){if(!this.activate)return;const e=t.component,{gameObject:i}=t,{delay:n,a11yId:s}=e;let{event:o}=e;if(!i)return;const{transform:r}=i;if(!r)return;const a=document.createElement("div");this.cache.set(s,a),o||(o=i.getComponent("Event")),setTimeout(()=>{this.setPosition(a,r),this.setA11yAttr(a,e),o&&this.addEvent(i),i.scene&&this.div.appendChild(a)},n||this.delay)}transformChange(t){const e=t.component,{gameObject:i}=t,n=i.getComponent(o);if(!n)return;const{a11yId:s}=n;if(e.inScene){if(this.cache.has(s)){const t=this.cache.get(s);t&&this.div.appendChild(t)}}else{const t=this.div.querySelector(`#${s}`);t&&this.div.removeChild(t)}}setEvent(t,e,i,n){if(!e)return;const s=v.bind(this,e,i);this.eventCache.set(n,s),t.addEventListener("click",s)}addEvent(t){const e=t.getComponent(o);if(!e)return;const i=t.getComponent("Event");if(!i)return;const n=this.cache.get(e.a11yId);n&&this.setEvent(n,i,t,e.a11yId)}removeEvent(t){const{gameObject:e}=t,i=e.getComponent(o);if(!i)return;if(!t.component)return;const{a11yId:n}=i,s=this.eventCache.get(n),r=this.cache.get(n);r&&r.removeEventListener("click",s)}setA11yAttr(t,e){const{hint:i,props:n={},state:s={},role:o,a11yId:r}=e,a=o||"text";t.setAttribute("role",a),t.setAttribute("aria-label",i),t.id=r;const c=Object.keys(n);for(const e of c)t.setAttribute(e,n[e]);const h=Object.keys(s);for(const e of h)t.setAttribute(e,s[e]);for(const i of Object.keys(e))"string"==typeof e[i]&&-1===p.indexOf(i)&&1!==i.indexOf("_")&&t.setAttribute(i,e[i])}setPosition(t,e){const{width:i,height:n}=e.size,o={width:0===i?1:i*this.ratioX,height:0===n?1:n*this.ratioY,position:r,zIndex:this.zIndex,pointerEvents:c.AUTO,background:this.debug?h.DEBUG:h.NONE},a={...e};s(t,o),((t,e,i,n)=>{const{worldTransform:s}=e,{a:o,b:r,c:a,d:c,tx:h,ty:d}=s,p=`matrix(${o}, ${r}, ${a}, ${c}, ${h*i}, ${d*n})`;t.style.transform=`${p}`,t.style.webkitTransform=`${p}`,t.style.transformOrigin="left top",t.style.webkitTransformOrigin="left top"})(t,a,this.ratioX,this.ratioY)}onDestroy(){this.div.parentElement.removeChild(this.div),this.cache=null,this.eventCache=null,this.div=null}};l=t.__decorate([e.decorators.componentObserver({A11y:["hint"],Transform:["inScene"],Event:[]})],l);var g=l;Object.assign(g,{packageName:"@combos-fun/plugin-a11y",packageVersion:"0.0.28"}),exports.A11y=o,exports.A11ySystem=g;
|
package/dist/plugin-a11y.d.ts
CHANGED
|
@@ -15,61 +15,61 @@ interface A11yParams {
|
|
|
15
15
|
declare class A11y extends Component<A11yParams> {
|
|
16
16
|
static componentName: string;
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Whether the element is interactive.
|
|
19
19
|
*/
|
|
20
20
|
interactive: boolean;
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Text read aloud for the accessibility label.
|
|
23
23
|
*/
|
|
24
24
|
hint: string;
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
26
|
+
* Deprecated: added automatically based on the Event component.
|
|
27
|
+
* The event object.
|
|
28
28
|
*/
|
|
29
29
|
event: Component;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Delayed load time (milliseconds).
|
|
32
32
|
*/
|
|
33
33
|
delay: number;
|
|
34
34
|
/**
|
|
35
|
-
* role
|
|
35
|
+
* The `role` attribute.
|
|
36
36
|
*/
|
|
37
37
|
role: string;
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
40
|
-
* aria
|
|
39
|
+
* Deprecated: set the attribute on the component instead.
|
|
40
|
+
* `aria-*` value attributes.
|
|
41
41
|
* @example
|
|
42
42
|
* aria-valuemin = "0"
|
|
43
43
|
*/
|
|
44
44
|
props: object;
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
47
|
-
* aria state
|
|
46
|
+
* Deprecated: set the attribute on the component instead.
|
|
47
|
+
* `aria` state attributes.
|
|
48
48
|
* @example
|
|
49
49
|
* aria-hidden = "true"
|
|
50
50
|
*/
|
|
51
51
|
state: object;
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
53
|
+
* Deprecated: set the attribute on the component instead.
|
|
54
|
+
* Custom attributes.
|
|
55
55
|
*/
|
|
56
56
|
attr: object;
|
|
57
57
|
/**
|
|
58
|
-
*
|
|
58
|
+
* Auto-generated id for the helper DOM.
|
|
59
59
|
*/
|
|
60
60
|
a11yId: string;
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
63
|
-
* @param param interactive
|
|
62
|
+
* Accessibility component constructor.
|
|
63
|
+
* @param param `interactive` defaults to false; pass true if the GameObject is interactive.
|
|
64
64
|
* @example
|
|
65
|
-
* //
|
|
66
|
-
* new A11y({hint: '
|
|
67
|
-
* //
|
|
68
|
-
* new A11y({hint: '
|
|
69
|
-
* //
|
|
70
|
-
* new A11y({hint:'
|
|
71
|
-
* //
|
|
72
|
-
* new A11y({hint: '
|
|
65
|
+
* // Provide read-aloud support for a GameObject
|
|
66
|
+
* new A11y({hint: 'This is a div'})
|
|
67
|
+
* // The GameObject has an event; pass the event object
|
|
68
|
+
* new A11y({hint: 'Click event object', event: event})
|
|
69
|
+
* // Accessibility attributes
|
|
70
|
+
* new A11y({hint:'Button', role: 'button', state: {aria-hidden="true"}})
|
|
71
|
+
* // Custom attributes
|
|
72
|
+
* new A11y({hint: 'Custom attribute', attr: {key: '1'}})
|
|
73
73
|
*/
|
|
74
74
|
constructor(param: A11yParams);
|
|
75
75
|
}
|
|
@@ -80,7 +80,7 @@ declare enum A11yActivate {
|
|
|
80
80
|
CHECK = 2
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
|
-
*
|
|
83
|
+
* Click event position.
|
|
84
84
|
*/
|
|
85
85
|
interface EventPosition {
|
|
86
86
|
x: number;
|
|
@@ -97,52 +97,48 @@ interface SystemParam {
|
|
|
97
97
|
declare class A11ySystem extends System {
|
|
98
98
|
static systemName: string;
|
|
99
99
|
/**
|
|
100
|
-
*
|
|
100
|
+
* Accessibility overlay layer.
|
|
101
101
|
*/
|
|
102
102
|
div: HTMLDivElement;
|
|
103
103
|
/**
|
|
104
|
-
*
|
|
104
|
+
* Whether debug mode is enabled.
|
|
105
105
|
*/
|
|
106
106
|
debug: boolean;
|
|
107
107
|
/**
|
|
108
|
-
*
|
|
108
|
+
* Horizontal scale ratio.
|
|
109
109
|
*/
|
|
110
110
|
_ratioX: number;
|
|
111
111
|
/**
|
|
112
|
-
*
|
|
112
|
+
* Vertical scale ratio.
|
|
113
113
|
*/
|
|
114
114
|
_ratioY: number;
|
|
115
115
|
/**
|
|
116
|
-
*
|
|
116
|
+
* Event coordinates.
|
|
117
117
|
*/
|
|
118
118
|
eventPosition: EventPosition;
|
|
119
119
|
/**
|
|
120
|
-
*
|
|
120
|
+
* Whether accessibility is enabled.
|
|
121
121
|
*/
|
|
122
122
|
activate: boolean;
|
|
123
123
|
/**
|
|
124
|
-
*
|
|
124
|
+
* Delay before placing the DOM.
|
|
125
125
|
*/
|
|
126
126
|
delay: number;
|
|
127
127
|
cache: Map<string, HTMLElement>;
|
|
128
128
|
eventCache: Map<string, (e: MouseEvent) => void>;
|
|
129
129
|
/**
|
|
130
|
-
*
|
|
131
|
-
* dom 的 zIndex
|
|
130
|
+
* The DOM `zIndex`.
|
|
132
131
|
*/
|
|
133
132
|
zIndex: number;
|
|
134
133
|
/**
|
|
135
|
-
*
|
|
136
|
-
* @param opt
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
* 无障碍插件初始化函数
|
|
140
|
-
* @param opt 无障碍插件选项
|
|
141
|
-
* @param opt.activate 是否开启无障碍能力,默认为自动根据系统读屏能力进行开启 AUTO | ENABLE | DISABLE
|
|
134
|
+
* Accessibility plugin initializer.
|
|
135
|
+
* @param opt accessibility plugin options
|
|
136
|
+
* @param opt.activate whether to enable accessibility; defaults to AUTO based on the
|
|
137
|
+
* system's screen-reader capability. One of AUTO | ENABLE | DISABLE.
|
|
142
138
|
* @example
|
|
143
|
-
* //
|
|
139
|
+
* // Enable debug: accessibility regions show a red translucent background
|
|
144
140
|
* new A11ySystem({debug: true})
|
|
145
|
-
* //
|
|
141
|
+
* // Disable accessibility
|
|
146
142
|
* new A11ySystem({activate: A11yActivate.DISABLE})
|
|
147
143
|
*/
|
|
148
144
|
constructor(opt?: SystemParam);
|
|
@@ -162,37 +158,37 @@ declare class A11ySystem extends System {
|
|
|
162
158
|
};
|
|
163
159
|
initDiv(): void;
|
|
164
160
|
/**
|
|
165
|
-
*
|
|
161
|
+
* Handle plugin updates.
|
|
166
162
|
*/
|
|
167
163
|
update(): Promise<void>;
|
|
168
164
|
change(changed: ComponentChanged): void;
|
|
169
165
|
remove(changed: ComponentChanged): void;
|
|
170
166
|
/**
|
|
171
|
-
*
|
|
172
|
-
* @param changed
|
|
167
|
+
* Handle a component being added to a GameObject.
|
|
168
|
+
* @param changed the changed component
|
|
173
169
|
*/
|
|
174
170
|
add(changed: ComponentChanged): void;
|
|
175
171
|
transformChange(changed: ComponentChanged): void;
|
|
176
172
|
/**
|
|
177
|
-
*
|
|
178
|
-
* @param element DOM
|
|
179
|
-
* @param event
|
|
180
|
-
* @param gameObject
|
|
173
|
+
* Attach a listener for the accessibility component.
|
|
174
|
+
* @param element DOM element
|
|
175
|
+
* @param event event component object
|
|
176
|
+
* @param gameObject the GameObject
|
|
181
177
|
*/
|
|
182
178
|
setEvent(element: HTMLElement, event: EE, gameObject: GameObject, id: any): void;
|
|
183
179
|
addEvent(gameObject: GameObject): void;
|
|
184
180
|
removeEvent(changed: ComponentChanged): void;
|
|
185
181
|
/**
|
|
186
|
-
*
|
|
187
|
-
* @param element DOM
|
|
188
|
-
* @param hint
|
|
189
|
-
* @param interactive
|
|
182
|
+
* Set accessibility attribute tags.
|
|
183
|
+
* @param element DOM element
|
|
184
|
+
* @param hint accessibility read-aloud text
|
|
185
|
+
* @param interactive whether it is interactive
|
|
190
186
|
*/
|
|
191
187
|
setA11yAttr(element: HTMLElement, component: A11y): void;
|
|
192
188
|
/**
|
|
193
|
-
*
|
|
194
|
-
* @param element DOM
|
|
195
|
-
* @param transform
|
|
189
|
+
* Position the accessibility element accordingly.
|
|
190
|
+
* @param element DOM element
|
|
191
|
+
* @param transform position properties
|
|
196
192
|
*/
|
|
197
193
|
setPosition(element: HTMLElement, transform: Transform): void;
|
|
198
194
|
onDestroy(): void;
|
package/dist/plugin-a11y.esm.js
CHANGED
|
@@ -4,9 +4,8 @@ import { RendererSystem } from '@combos-fun/plugin-renderer';
|
|
|
4
4
|
import { type, step } from '@combos-fun/inspector-decorator';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
* @param len
|
|
9
|
-
* @param radix 基
|
|
7
|
+
* Generate a unique identifier.
|
|
8
|
+
* @param len length
|
|
10
9
|
*/
|
|
11
10
|
function uuid(len) {
|
|
12
11
|
let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
|
|
@@ -17,9 +16,9 @@ function uuid(len) {
|
|
|
17
16
|
return uuid.join('');
|
|
18
17
|
}
|
|
19
18
|
/**
|
|
20
|
-
*
|
|
21
|
-
* @param
|
|
22
|
-
* @param style
|
|
19
|
+
* Apply styles to a DOM element.
|
|
20
|
+
* @param element the DOM element to style
|
|
21
|
+
* @param style style properties
|
|
23
22
|
*/
|
|
24
23
|
const setStyle = (element, style) => {
|
|
25
24
|
const { width, height, position, left = 0, top = 0, zIndex, pointerEvents, background } = style;
|
|
@@ -47,17 +46,17 @@ const setTransform = (element, transform, ratioX, ratioY) => {
|
|
|
47
46
|
class A11y extends Component {
|
|
48
47
|
static { this.componentName = 'A11y'; }
|
|
49
48
|
/**
|
|
50
|
-
*
|
|
51
|
-
* @param param interactive
|
|
49
|
+
* Accessibility component constructor.
|
|
50
|
+
* @param param `interactive` defaults to false; pass true if the GameObject is interactive.
|
|
52
51
|
* @example
|
|
53
|
-
* //
|
|
54
|
-
* new A11y({hint: '
|
|
55
|
-
* //
|
|
56
|
-
* new A11y({hint: '
|
|
57
|
-
* //
|
|
58
|
-
* new A11y({hint:'
|
|
59
|
-
* //
|
|
60
|
-
* new A11y({hint: '
|
|
52
|
+
* // Provide read-aloud support for a GameObject
|
|
53
|
+
* new A11y({hint: 'This is a div'})
|
|
54
|
+
* // The GameObject has an event; pass the event object
|
|
55
|
+
* new A11y({hint: 'Click event object', event: event})
|
|
56
|
+
* // Accessibility attributes
|
|
57
|
+
* new A11y({hint:'Button', role: 'button', state: {aria-hidden="true"}})
|
|
58
|
+
* // Custom attributes
|
|
59
|
+
* new A11y({hint: 'Custom attribute', attr: {key: '1'}})
|
|
61
60
|
*/
|
|
62
61
|
constructor(param) {
|
|
63
62
|
super();
|
|
@@ -99,7 +98,7 @@ var A11yActivate;
|
|
|
99
98
|
A11yActivate[A11yActivate["CHECK"] = 2] = "CHECK";
|
|
100
99
|
})(A11yActivate || (A11yActivate = {}));
|
|
101
100
|
/**
|
|
102
|
-
*
|
|
101
|
+
* Pointer events for the accessibility DOM.
|
|
103
102
|
*/
|
|
104
103
|
var PointerEvents;
|
|
105
104
|
(function (PointerEvents) {
|
|
@@ -107,7 +106,7 @@ var PointerEvents;
|
|
|
107
106
|
PointerEvents["AUTO"] = "auto";
|
|
108
107
|
})(PointerEvents || (PointerEvents = {}));
|
|
109
108
|
/**
|
|
110
|
-
*
|
|
109
|
+
* Style of the accessibility DOM layer.
|
|
111
110
|
*/
|
|
112
111
|
var MaskBackground;
|
|
113
112
|
(function (MaskBackground) {
|
|
@@ -115,7 +114,7 @@ var MaskBackground;
|
|
|
115
114
|
MaskBackground["NONE"] = "transparent";
|
|
116
115
|
})(MaskBackground || (MaskBackground = {}));
|
|
117
116
|
/**
|
|
118
|
-
*
|
|
117
|
+
* Type of the accessibility DOM element.
|
|
119
118
|
*/
|
|
120
119
|
var ElementType;
|
|
121
120
|
(function (ElementType) {
|
|
@@ -138,17 +137,14 @@ const getEventFunc = function (event, gameObject, e) {
|
|
|
138
137
|
let A11ySystem = class A11ySystem extends System {
|
|
139
138
|
static { this.systemName = 'A11ySystem'; }
|
|
140
139
|
/**
|
|
141
|
-
*
|
|
142
|
-
* @param opt
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
* 无障碍插件初始化函数
|
|
146
|
-
* @param opt 无障碍插件选项
|
|
147
|
-
* @param opt.activate 是否开启无障碍能力,默认为自动根据系统读屏能力进行开启 AUTO | ENABLE | DISABLE
|
|
140
|
+
* Accessibility plugin initializer.
|
|
141
|
+
* @param opt accessibility plugin options
|
|
142
|
+
* @param opt.activate whether to enable accessibility; defaults to AUTO based on the
|
|
143
|
+
* system's screen-reader capability. One of AUTO | ENABLE | DISABLE.
|
|
148
144
|
* @example
|
|
149
|
-
* //
|
|
145
|
+
* // Enable debug: accessibility regions show a red translucent background
|
|
150
146
|
* new A11ySystem({debug: true})
|
|
151
|
-
* //
|
|
147
|
+
* // Disable accessibility
|
|
152
148
|
* new A11ySystem({activate: A11yActivate.DISABLE})
|
|
153
149
|
*/
|
|
154
150
|
constructor(opt) {
|
|
@@ -156,8 +152,7 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
156
152
|
this.cache = new Map();
|
|
157
153
|
this.eventCache = new Map();
|
|
158
154
|
/**
|
|
159
|
-
*
|
|
160
|
-
* dom 的 zIndex
|
|
155
|
+
* The DOM `zIndex`.
|
|
161
156
|
*/
|
|
162
157
|
this.zIndex = ZINDEX;
|
|
163
158
|
}
|
|
@@ -215,10 +210,11 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
215
210
|
}
|
|
216
211
|
if (!this.activate)
|
|
217
212
|
return;
|
|
218
|
-
//
|
|
213
|
+
// Render the parent container.
|
|
219
214
|
const div = document.createElement('div');
|
|
220
215
|
this.div = div;
|
|
221
|
-
//
|
|
216
|
+
// If a parent node exists, mount this div so children position relative to it;
|
|
217
|
+
// otherwise children position relative to the body.
|
|
222
218
|
if (this.game.canvas.parentNode) {
|
|
223
219
|
this.game.canvas.parentNode.insertBefore(this.div, this.game.canvas);
|
|
224
220
|
}
|
|
@@ -242,14 +238,14 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
242
238
|
return { renderWidth, renderHeight };
|
|
243
239
|
}
|
|
244
240
|
getCanvasBoundingClientRect() {
|
|
245
|
-
//
|
|
241
|
+
// Actual pixel width/height and position of the render canvas relative to the viewport.
|
|
246
242
|
const { width, height, left, top } = this.game.canvas.getBoundingClientRect();
|
|
247
243
|
return { width, height, left, top };
|
|
248
244
|
}
|
|
249
245
|
initDiv() {
|
|
250
246
|
const { pageXOffset, pageYOffset } = window;
|
|
251
247
|
const { width, height, left, top } = this.getCanvasBoundingClientRect();
|
|
252
|
-
//
|
|
248
|
+
// Parent container position.
|
|
253
249
|
const style = {
|
|
254
250
|
width,
|
|
255
251
|
height,
|
|
@@ -261,7 +257,7 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
261
257
|
background: MaskBackground.NONE,
|
|
262
258
|
};
|
|
263
259
|
setStyle(this.div, style);
|
|
264
|
-
//
|
|
260
|
+
// Attach a capture-phase listener on the parent container to track event coordinates.
|
|
265
261
|
this.div.addEventListener('click', e => {
|
|
266
262
|
const currentTarget = e.currentTarget;
|
|
267
263
|
const { left, top } = currentTarget.getBoundingClientRect();
|
|
@@ -271,7 +267,7 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
271
267
|
}, true);
|
|
272
268
|
}
|
|
273
269
|
/**
|
|
274
|
-
*
|
|
270
|
+
* Handle plugin updates.
|
|
275
271
|
*/
|
|
276
272
|
async update() {
|
|
277
273
|
const changes = this.componentObserver.clear();
|
|
@@ -312,8 +308,8 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
312
308
|
this.cache.delete(a11yId);
|
|
313
309
|
}
|
|
314
310
|
/**
|
|
315
|
-
*
|
|
316
|
-
* @param changed
|
|
311
|
+
* Handle a component being added to a GameObject.
|
|
312
|
+
* @param changed the changed component
|
|
317
313
|
*/
|
|
318
314
|
add(changed) {
|
|
319
315
|
if (!this.activate)
|
|
@@ -343,7 +339,7 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
343
339
|
}
|
|
344
340
|
}, delay || this.delay);
|
|
345
341
|
}
|
|
346
|
-
//
|
|
342
|
+
// React to scene changes.
|
|
347
343
|
transformChange(changed) {
|
|
348
344
|
const component = changed.component;
|
|
349
345
|
const { gameObject } = changed;
|
|
@@ -352,13 +348,13 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
352
348
|
return;
|
|
353
349
|
const { a11yId } = a11yComponent;
|
|
354
350
|
if (!component.inScene) {
|
|
355
|
-
//
|
|
351
|
+
// GameObject removed from the scene.
|
|
356
352
|
const dom = this.div.querySelector(`#${a11yId}`);
|
|
357
353
|
dom && this.div.removeChild(dom);
|
|
358
354
|
// this.cache.delete(a11yId)
|
|
359
355
|
}
|
|
360
356
|
else {
|
|
361
|
-
//
|
|
357
|
+
// GameObject added to the scene.
|
|
362
358
|
// this.div.appendChild(this.cache)
|
|
363
359
|
if (this.cache.has(a11yId)) {
|
|
364
360
|
const addDom = this.cache.get(a11yId);
|
|
@@ -367,10 +363,10 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
367
363
|
}
|
|
368
364
|
}
|
|
369
365
|
/**
|
|
370
|
-
*
|
|
371
|
-
* @param element DOM
|
|
372
|
-
* @param event
|
|
373
|
-
* @param gameObject
|
|
366
|
+
* Attach a listener for the accessibility component.
|
|
367
|
+
* @param element DOM element
|
|
368
|
+
* @param event event component object
|
|
369
|
+
* @param gameObject the GameObject
|
|
374
370
|
*/
|
|
375
371
|
setEvent(element, event, gameObject, id) {
|
|
376
372
|
if (!event) {
|
|
@@ -404,10 +400,10 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
404
400
|
element && element.removeEventListener('click', func);
|
|
405
401
|
}
|
|
406
402
|
/**
|
|
407
|
-
*
|
|
408
|
-
* @param element DOM
|
|
409
|
-
* @param hint
|
|
410
|
-
* @param interactive
|
|
403
|
+
* Set accessibility attribute tags.
|
|
404
|
+
* @param element DOM element
|
|
405
|
+
* @param hint accessibility read-aloud text
|
|
406
|
+
* @param interactive whether it is interactive
|
|
411
407
|
*/
|
|
412
408
|
setA11yAttr(element, component) {
|
|
413
409
|
const { hint, props = {}, state = {}, role, a11yId: id } = component;
|
|
@@ -415,7 +411,7 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
415
411
|
element.setAttribute('role', realRole);
|
|
416
412
|
element.setAttribute('aria-label', hint);
|
|
417
413
|
element.id = id;
|
|
418
|
-
//
|
|
414
|
+
// Backward-compatibility handling.
|
|
419
415
|
const ariaProps = Object.keys(props);
|
|
420
416
|
for (const key of ariaProps) {
|
|
421
417
|
element.setAttribute(key, props[key]);
|
|
@@ -431,18 +427,18 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
431
427
|
}
|
|
432
428
|
}
|
|
433
429
|
/**
|
|
434
|
-
*
|
|
435
|
-
* @param element DOM
|
|
436
|
-
* @param transform
|
|
430
|
+
* Position the accessibility element accordingly.
|
|
431
|
+
* @param element DOM element
|
|
432
|
+
* @param transform position properties
|
|
437
433
|
*/
|
|
438
434
|
setPosition(element, transform) {
|
|
439
|
-
//
|
|
435
|
+
// Positioned relative to the canvas.
|
|
440
436
|
// const { x: anchorX, y: anchorY } = transform.anchor
|
|
441
|
-
//
|
|
437
|
+
// GameObject width/height.
|
|
442
438
|
const { width, height } = transform.size;
|
|
443
439
|
// position
|
|
444
440
|
// const { x: positionX, y: positionY } = transform.position
|
|
445
|
-
//
|
|
441
|
+
// Set the accessibility DOM style; DragonBones animations default to 2px.
|
|
446
442
|
const style = {
|
|
447
443
|
width: width === 0 ? 1 : width * this.ratioX,
|
|
448
444
|
height: height === 0 ? 1 : height * this.ratioY,
|
|
@@ -455,7 +451,7 @@ let A11ySystem = class A11ySystem extends System {
|
|
|
455
451
|
...transform,
|
|
456
452
|
};
|
|
457
453
|
setStyle(element, style);
|
|
458
|
-
//
|
|
454
|
+
// Adjust the DOM position.
|
|
459
455
|
setTransform(element, transformProps, this.ratioX, this.ratioY);
|
|
460
456
|
}
|
|
461
457
|
onDestroy() {
|
|
@@ -477,7 +473,7 @@ var A11ySystem$1 = A11ySystem;
|
|
|
477
473
|
/** Auto-generated by scripts/build-package.mjs — do not edit. */
|
|
478
474
|
Object.assign(A11ySystem$1, {
|
|
479
475
|
packageName: "@combos-fun/plugin-a11y",
|
|
480
|
-
packageVersion: "0.0.
|
|
476
|
+
packageVersion: "0.0.28",
|
|
481
477
|
});
|
|
482
478
|
|
|
483
479
|
export { A11y, A11yActivate, A11ySystem$1 as A11ySystem };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-a11y.esm.js","sources":["../lib/utils.ts","../lib/A11y.ts","../lib/constant.ts","../lib/A11ySystem.ts","../lib/__combosPackageMeta.gen.ts"],"sourcesContent":["import { A11yMaskStyle } from './constant';\n\n/**\n * 生成唯一的标识符\n * @param len 长度\n * @param radix 基\n */\nfunction uuid(len: number) {\n let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\n let uuid = [];\n let radix = chars.length;\n for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];\n return uuid.join('');\n}\n\n/**\n * 设置 dom 样式\n * @param div 需要设置样式的dom元素\n * @param style 样式属性\n */\nconst setStyle = (element: HTMLElement, style: A11yMaskStyle) => {\n const { width, height, position, left = 0, top = 0, zIndex, pointerEvents, background } = style;\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n element.style.position = position;\n element.style.left = `${left}`;\n element.style.top = `${top}`;\n element.style.zIndex = `${zIndex}`;\n element.style.pointerEvents = pointerEvents;\n element.style.background = background;\n element.style.border = 'none';\n element.style.overflow = 'hidden';\n};\n\nconst setTransform = (element: HTMLElement, transform, ratioX, ratioY) => {\n const { worldTransform } = transform;\n const { a, b, c, d, tx, ty } = worldTransform;\n const matrix = `matrix(${a}, ${b}, ${c}, ${d}, ${tx * ratioX}, ${ty * ratioY})`;\n element.style.transform = `${matrix}`;\n element.style.webkitTransform = `${matrix}`;\n element.style.transformOrigin = 'left top';\n element.style.webkitTransformOrigin = 'left top';\n};\n\nexport { setStyle, setTransform, uuid };\n","import {Component} from '@combos-fun/engine';\nimport {type, step} from '@combos-fun/inspector-decorator';\nimport {uuid} from './utils';\n\nexport interface A11yParams {\n hint: string;\n event?: Component;\n delay?: number;\n role?: string;\n props?: object;\n state?: object;\n attr?: object;\n a11yId?: string;\n [propName: string]: string | object | number;\n}\n\nexport default class A11y extends Component<A11yParams> {\n static componentName: string = 'A11y';\n\n /**\n * 是否可交互\n */\n @type('boolean') interactive: boolean;\n /**\n * 无障碍标签朗读内容\n */\n @type('string') hint: string;\n /**\n * 弃用,将根据Event组件自动添加\n * 事件对象\n */\n event: Component;\n /**\n * 延时加载时间(millisecond)\n */\n @type('number') @step(1) delay: number;\n\n /**\n * role 属性\n */\n @type('string') role: string;\n\n /**\n * 弃用,将属性写在component上\n * aria-value 属性\n * @example\n * aria-valuemin = \"0\"\n */\n props: object;\n\n /**\n * 弃用,将属性写在component上\n * aria state 属性\n * @example\n * aria-hidden = \"true\"\n */\n state: object;\n\n /**\n * 弃用,将属性写在component上\n * 传入自定义属性\n */\n attr: object;\n\n /**\n * 辅助Dom id 自动生成\n */\n @type('string') a11yId: string;\n\n /**\n * 无障碍组件构造函数\n * @param param interactive 默认为 false,如果游戏对象可交互,传入 true\n * @example\n * // 为游戏对象提供朗读能力\n * new A11y({hint: '这是一个div'})\n * // 游戏对象有事件,传入 event 对象\n * new A11y({hint: '点击事件对象', event: event})\n * // 无障碍属性\n * new A11y({hint:'按钮', role: 'button', state: {aria-hidden=\"true\"}})\n * // 自定义属性\n * new A11y({hint: '自定义属性', attr: {key: '1'}})\n */\n constructor(param: A11yParams) {\n super();\n Object.assign(this, param);\n const { hint = '', event, delay = 0, attr = {}, role = '', props = {}, state = {} } = param;\n this.hint = hint;\n this.event = event;\n this.delay = delay;\n this.attr = attr;\n this.role = role;\n this.props = props;\n this.state = state;\n this.a11yId = `_${uuid(6)}`;\n }\n}\n","export const POSITION = 'absolute';\nexport const ZINDEX = 3;\n\nexport enum A11yActivate {\n ENABLE = 0,\n DISABLE = 1,\n CHECK = 2,\n}\n\n/**\n * 无障碍 DOM 的指针事件\n */\nexport enum PointerEvents {\n NONE = 'none', // 元素不会成为鼠标事件的target,会被穿透\n AUTO = 'auto', // 默认值正常\n}\n\n/**\n * 无障碍 DOM 层的样式\n */\nexport enum MaskBackground {\n DEBUG = 'rgba(255,0,0,0.5)',\n NONE = 'transparent',\n}\n\n/**\n * 无障碍 DOM 的类型\n */\nexport enum ElementType {\n BUTTON = 'button',\n DIV = 'div',\n}\n\n/**\n * 无障碍遮罩层样式\n */\nexport interface A11yMaskStyle {\n width: number;\n height: number;\n background: string;\n position: string;\n left?: string;\n top?: string;\n zIndex: number;\n pointerEvents: PointerEvents;\n}\n\n/**\n * 点击事件位置\n */\nexport interface EventPosition {\n x: number;\n y: number;\n}\n","import { System, decorators, ComponentChanged, Transform, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { GameObject } from '@combos-fun/engine';\nimport { RendererSystem } from '@combos-fun/plugin-renderer';\nimport EE from 'eventemitter3';\n\nimport A11y from './A11y';\nimport { setStyle, setTransform } from './utils';\nimport {\n POSITION,\n ZINDEX,\n PointerEvents,\n MaskBackground,\n EventPosition,\n A11yMaskStyle,\n A11yActivate,\n} from './constant';\n\ninterface SystemParam {\n debug?: boolean;\n activate?: A11yActivate;\n delay?: number;\n zIndex?: number;\n checkA11yOpen?: () => Promise<boolean>;\n}\n\nconst notAttr = ['hint', 'event', 'delay', 'attr', 'role', 'props', 'state', 'a11yId', 'name'];\n\nconst getEventFunc = function (event: EE, gameObject: GameObject, e: MouseEvent) {\n ['touchstart', 'touchend', 'tap'].forEach(name => {\n event.emit(name, {\n stopPropagation: () => e.stopPropagation(),\n data: {\n position: this.eventPosition,\n },\n gameObject,\n });\n });\n};\n\n@decorators.componentObserver({\n A11y: ['hint'],\n Transform: ['inScene'],\n Event: [],\n})\nexport default class A11ySystem extends System {\n static systemName = 'A11ySystem';\n\n /**\n * 无障碍覆盖层\n */\n div: HTMLDivElement;\n /**\n * 是否开启调试\n */\n debug: boolean;\n /**\n * 横向的比例\n */\n _ratioX: number;\n /**\n * 纵向的比例\n */\n _ratioY: number;\n /**\n * 事件坐标\n */\n eventPosition: EventPosition;\n /**\n * 是否开启无障碍能力\n */\n activate: boolean;\n /**\n * dom 延迟放置\n */\n delay: number;\n cache: Map<string, HTMLElement> = new Map();\n eventCache: Map<string, (e: MouseEvent) => void> = new Map();\n /**\n * \n * dom 的 zIndex\n */\n zIndex: number = ZINDEX;\n /**\n *\n * @param opt\n */\n\n /**\n * 无障碍插件初始化函数\n * @param opt 无障碍插件选项\n * @param opt.activate 是否开启无障碍能力,默认为自动根据系统读屏能力进行开启 AUTO | ENABLE | DISABLE\n * @example\n * // 开启调试,无障碍区域会显示红色透明背景\n * new A11ySystem({debug: true})\n * // 禁用无障碍\n * new A11ySystem({activate: A11yActivate.DISABLE})\n */\n constructor(opt?: SystemParam) {\n super(opt);\n }\n\n get ratioX() {\n if (this._ratioX) {\n return this._ratioX;\n } else {\n const success = this.setRatio();\n if (success) {\n return this._ratioX;\n } else {\n return 0;\n }\n }\n }\n get ratioY() {\n if (this._ratioY) {\n return this._ratioY;\n } else {\n const success = this.setRatio();\n if (success) {\n return this._ratioY;\n } else {\n return 0;\n }\n }\n }\n\n async init(opt: SystemParam = {}) {\n const { activate = A11yActivate.CHECK, delay = 100, checkA11yOpen = () => Promise.resolve(false), zIndex } = opt;\n this.delay = delay;\n this.zIndex = zIndex || this.zIndex\n switch (activate) {\n case A11yActivate.CHECK:\n try {\n this.activate = await checkA11yOpen();\n } catch (error) {\n this.activate = false;\n }\n break;\n case A11yActivate.DISABLE:\n this.activate = false;\n break;\n case A11yActivate.ENABLE:\n this.activate = true;\n break;\n }\n this.debug = opt.debug || false;\n if (this.debug) {\n this.activate = true;\n }\n\n if (!this.activate) return;\n // 渲染出父容器\n const div = document.createElement('div');\n this.div = div;\n // 如果存在父容器,则渲染这个 div,子元素则会相对这个 div 进行定位,否则直接相对于 body 进行定位\n if (this.game.canvas.parentNode) {\n this.game.canvas.parentNode.insertBefore(this.div, this.game.canvas);\n }\n }\n setRatio() {\n const { width, height } = this.getCanvasBoundingClientRect();\n const { renderWidth, renderHeight } = this.getRenderRect();\n this._ratioX = width / renderWidth;\n this._ratioY = height / renderHeight;\n if (width || height) {\n this.initDiv();\n return true;\n } else {\n return false;\n }\n }\n getRenderRect() {\n const { params = { width: 300, height: 300 } } = this.game.getSystem(RendererSystem);\n const { height: renderHeight, width: renderWidth } = params;\n return { renderWidth, renderHeight };\n }\n getCanvasBoundingClientRect() {\n // 渲染画布相对于视口的实际宽高以及位置,实际的像素\n const { width, height, left, top } = this.game.canvas.getBoundingClientRect();\n return { width, height, left, top };\n }\n initDiv() {\n const { pageXOffset, pageYOffset } = window;\n\n const { width, height, left, top } = this.getCanvasBoundingClientRect();\n // 父容器位置\n const style: A11yMaskStyle = {\n width,\n height,\n left: `${left + pageXOffset}px`,\n top: `${top + pageYOffset}px`,\n position: POSITION,\n zIndex: this.zIndex,\n pointerEvents: PointerEvents.NONE,\n background: MaskBackground.NONE,\n };\n setStyle(this.div, style);\n // 给父容器设置捕获事件,用于监听事件坐标\n this.div.addEventListener(\n 'click',\n e => {\n const currentTarget = e.currentTarget as HTMLDivElement;\n const { left, top } = currentTarget.getBoundingClientRect();\n const x = (e.pageX - left) / this.ratioX;\n const y = (e.pageY - top) / this.ratioY;\n this.eventPosition = { x, y };\n },\n true,\n );\n }\n\n /**\n * 监听插件更新\n */\n async update() {\n const changes = this.componentObserver.clear();\n if (!this.activate) {\n return;\n }\n for (const changed of changes) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD:\n changed.componentName === 'Event' && this.addEvent(changed.gameObject);\n changed.componentName === 'A11y' && this.add(changed);\n break;\n case OBSERVER_TYPE.CHANGE:\n changed.componentName === 'Transform' && this.transformChange(changed);\n changed.componentName === 'A11y' && this.change(changed);\n break;\n case OBSERVER_TYPE.REMOVE:\n changed.componentName === 'Event' && this.removeEvent(changed);\n changed.componentName === 'A11y' && this.remove(changed);\n }\n }\n }\n\n change(changed: ComponentChanged) {\n const component = changed.component as A11y\n if (changed.prop.prop[0] === 'hint') {\n const dom = this.cache.get(component.a11yId)\n dom?.setAttribute('aria-label', component.hint)\n dom && this.setPosition(dom, changed.gameObject.transform)\n }\n }\n\n remove(changed: ComponentChanged) {\n const component = changed.component as A11y;\n if (!component) return;\n const { a11yId } = component;\n const element = this.div.querySelector(`#${a11yId}`);\n element && this.div.removeChild(element);\n this.cache.delete(a11yId);\n }\n\n /**\n * 监听组件被添加至游戏对象\n * @param changed 改变的组件\n */\n add(changed: ComponentChanged) {\n if (!this.activate) return;\n const component = changed.component as A11y;\n const { gameObject } = changed;\n const { delay, a11yId: id } = component;\n let { event } = component;\n if (!gameObject) return;\n const { transform } = gameObject;\n if (!transform) return;\n const element = document.createElement('div');\n this.cache.set(id, element);\n if (!event) {\n event = gameObject.getComponent('Event');\n }\n setTimeout(() => {\n this.setPosition(element, transform);\n this.setA11yAttr(element, component);\n if (event) {\n this.addEvent(gameObject);\n }\n if (gameObject.scene) {\n this.div.appendChild(element);\n }\n }, delay || this.delay);\n }\n\n // 监听 scene 改变\n transformChange(changed: ComponentChanged) {\n const component = changed.component as Transform;\n const { gameObject } = changed;\n const a11yComponent = gameObject.getComponent(A11y) as A11y;\n if (!a11yComponent) return;\n const { a11yId } = a11yComponent;\n if (!component.inScene) {\n // 监听 scene 删除游戏对象\n const dom = this.div.querySelector(`#${a11yId}`);\n dom && this.div.removeChild(dom);\n // this.cache.delete(a11yId)\n } else {\n // 监听 scene add\n // this.div.appendChild(this.cache)\n if (this.cache.has(a11yId)) {\n const addDom = this.cache.get(a11yId);\n addDom && this.div.appendChild(addDom);\n }\n }\n }\n\n /**\n * 为无障碍组件设置监听事件\n * @param element DOM 元素\n * @param event 事件组件对象\n * @param gameObject 游戏对象\n */\n setEvent(element: HTMLElement, event: EE, gameObject: GameObject, id) {\n if (!event) {\n return;\n }\n const func = getEventFunc.bind(this, event, gameObject) as (e: MouseEvent) => void;\n this.eventCache.set(id, func);\n element.addEventListener('click', func);\n }\n\n addEvent(gameObject: GameObject) {\n const a11y = gameObject.getComponent(A11y) as A11y;\n if (!a11y) return;\n const event = gameObject.getComponent('Event');\n if (!event) return;\n const element = this.cache.get(a11y.a11yId);\n element && this.setEvent(element, event, gameObject, a11y.a11yId);\n }\n\n removeEvent(changed: ComponentChanged) {\n const { gameObject } = changed;\n const a11y = gameObject.getComponent(A11y) as A11y;\n if (!a11y) return;\n const event = changed.component;\n if (!event) return;\n const { a11yId } = a11y;\n const func = this.eventCache.get(a11yId);\n const element = this.cache.get(a11yId);\n element && element.removeEventListener('click', func);\n }\n\n /**\n * 设置无障碍属性标签\n * @param element DOM 元素\n * @param hint 无障碍朗读文字\n * @param interactive 是否可交互\n */\n setA11yAttr(element: HTMLElement, component: A11y) {\n const { hint, props = {}, state = {}, role, a11yId: id } = component;\n const realRole = role || 'text';\n element.setAttribute('role', realRole);\n element.setAttribute('aria-label', hint);\n element.id = id;\n\n // 这里兼容\n const ariaProps = Object.keys(props);\n for (const key of ariaProps) {\n element.setAttribute(key, props[key]);\n }\n const ariaState = Object.keys(state);\n for (const key of ariaState) {\n element.setAttribute(key, state[key]);\n }\n\n for (const key of Object.keys(component)) {\n if (typeof component[key] === 'string' && notAttr.indexOf(key) === -1 && key.indexOf('_') !== 1) {\n element.setAttribute(key, component[key]);\n }\n }\n }\n\n /**\n * 将无障碍元素设置到对应的位置\n * @param element DOM 元素\n * @param transform 位置属性\n */\n setPosition(element: HTMLElement, transform: Transform) {\n // 相对画布定位\n // const { x: anchorX, y: anchorY } = transform.anchor\n // 游戏对象的宽高\n const { width, height } = transform.size;\n // position\n // const { x: positionX, y: positionY } = transform.position\n // 设置无障碍 DOM 的样式,龙骨动画默认 2px\n const style: A11yMaskStyle = {\n width: width === 0 ? 1 : width * this.ratioX,\n height: height === 0 ? 1 : height * this.ratioY,\n position: POSITION,\n zIndex: this.zIndex,\n pointerEvents: PointerEvents.AUTO,\n background: this.debug ? MaskBackground.DEBUG : MaskBackground.NONE,\n };\n const transformProps = {\n ...transform,\n };\n setStyle(element, style);\n // 调整 DOM 的位置\n setTransform(element, transformProps, this.ratioX, this.ratioY);\n }\n onDestroy() {\n this.div.parentElement.removeChild(this.div);\n this.cache = null;\n this.eventCache = null;\n this.div = null\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport A11ySystem from './A11ySystem';\n\nObject.assign(A11ySystem, {\n packageName: \"@combos-fun/plugin-a11y\",\n packageVersion: \"0.0.27\",\n});\n"],"names":["A11ySystem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin-a11y.esm.js","sources":["../lib/utils.ts","../lib/A11y.ts","../lib/constant.ts","../lib/A11ySystem.ts","../lib/__combosPackageMeta.gen.ts"],"sourcesContent":["import { A11yMaskStyle } from './constant';\n\n/**\n * Generate a unique identifier.\n * @param len length\n */\nfunction uuid(len: number) {\n let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\n let uuid = [];\n let radix = chars.length;\n for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];\n return uuid.join('');\n}\n\n/**\n * Apply styles to a DOM element.\n * @param element the DOM element to style\n * @param style style properties\n */\nconst setStyle = (element: HTMLElement, style: A11yMaskStyle) => {\n const { width, height, position, left = 0, top = 0, zIndex, pointerEvents, background } = style;\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n element.style.position = position;\n element.style.left = `${left}`;\n element.style.top = `${top}`;\n element.style.zIndex = `${zIndex}`;\n element.style.pointerEvents = pointerEvents;\n element.style.background = background;\n element.style.border = 'none';\n element.style.overflow = 'hidden';\n};\n\nconst setTransform = (element: HTMLElement, transform, ratioX, ratioY) => {\n const { worldTransform } = transform;\n const { a, b, c, d, tx, ty } = worldTransform;\n const matrix = `matrix(${a}, ${b}, ${c}, ${d}, ${tx * ratioX}, ${ty * ratioY})`;\n element.style.transform = `${matrix}`;\n element.style.webkitTransform = `${matrix}`;\n element.style.transformOrigin = 'left top';\n element.style.webkitTransformOrigin = 'left top';\n};\n\nexport { setStyle, setTransform, uuid };\n","import {Component} from '@combos-fun/engine';\nimport {type, step} from '@combos-fun/inspector-decorator';\nimport {uuid} from './utils';\n\nexport interface A11yParams {\n hint: string;\n event?: Component;\n delay?: number;\n role?: string;\n props?: object;\n state?: object;\n attr?: object;\n a11yId?: string;\n [propName: string]: string | object | number;\n}\n\nexport default class A11y extends Component<A11yParams> {\n static componentName: string = 'A11y';\n\n /**\n * Whether the element is interactive.\n */\n @type('boolean') interactive: boolean;\n /**\n * Text read aloud for the accessibility label.\n */\n @type('string') hint: string;\n /**\n * Deprecated: added automatically based on the Event component.\n * The event object.\n */\n event: Component;\n /**\n * Delayed load time (milliseconds).\n */\n @type('number') @step(1) delay: number;\n\n /**\n * The `role` attribute.\n */\n @type('string') role: string;\n\n /**\n * Deprecated: set the attribute on the component instead.\n * `aria-*` value attributes.\n * @example\n * aria-valuemin = \"0\"\n */\n props: object;\n\n /**\n * Deprecated: set the attribute on the component instead.\n * `aria` state attributes.\n * @example\n * aria-hidden = \"true\"\n */\n state: object;\n\n /**\n * Deprecated: set the attribute on the component instead.\n * Custom attributes.\n */\n attr: object;\n\n /**\n * Auto-generated id for the helper DOM.\n */\n @type('string') a11yId: string;\n\n /**\n * Accessibility component constructor.\n * @param param `interactive` defaults to false; pass true if the GameObject is interactive.\n * @example\n * // Provide read-aloud support for a GameObject\n * new A11y({hint: 'This is a div'})\n * // The GameObject has an event; pass the event object\n * new A11y({hint: 'Click event object', event: event})\n * // Accessibility attributes\n * new A11y({hint:'Button', role: 'button', state: {aria-hidden=\"true\"}})\n * // Custom attributes\n * new A11y({hint: 'Custom attribute', attr: {key: '1'}})\n */\n constructor(param: A11yParams) {\n super();\n Object.assign(this, param);\n const { hint = '', event, delay = 0, attr = {}, role = '', props = {}, state = {} } = param;\n this.hint = hint;\n this.event = event;\n this.delay = delay;\n this.attr = attr;\n this.role = role;\n this.props = props;\n this.state = state;\n this.a11yId = `_${uuid(6)}`;\n }\n}\n","export const POSITION = 'absolute';\nexport const ZINDEX = 3;\n\nexport enum A11yActivate {\n ENABLE = 0,\n DISABLE = 1,\n CHECK = 2,\n}\n\n/**\n * Pointer events for the accessibility DOM.\n */\nexport enum PointerEvents {\n NONE = 'none', // The element is not a mouse-event target; events pass through.\n AUTO = 'auto', // Default behavior.\n}\n\n/**\n * Style of the accessibility DOM layer.\n */\nexport enum MaskBackground {\n DEBUG = 'rgba(255,0,0,0.5)',\n NONE = 'transparent',\n}\n\n/**\n * Type of the accessibility DOM element.\n */\nexport enum ElementType {\n BUTTON = 'button',\n DIV = 'div',\n}\n\n/**\n * Style of the accessibility mask layer.\n */\nexport interface A11yMaskStyle {\n width: number;\n height: number;\n background: string;\n position: string;\n left?: string;\n top?: string;\n zIndex: number;\n pointerEvents: PointerEvents;\n}\n\n/**\n * Click event position.\n */\nexport interface EventPosition {\n x: number;\n y: number;\n}\n","import { System, decorators, ComponentChanged, Transform, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { GameObject } from '@combos-fun/engine';\nimport { RendererSystem } from '@combos-fun/plugin-renderer';\nimport EE from 'eventemitter3';\n\nimport A11y from './A11y';\nimport { setStyle, setTransform } from './utils';\nimport {\n POSITION,\n ZINDEX,\n PointerEvents,\n MaskBackground,\n EventPosition,\n A11yMaskStyle,\n A11yActivate,\n} from './constant';\n\ninterface SystemParam {\n debug?: boolean;\n activate?: A11yActivate;\n delay?: number;\n zIndex?: number;\n checkA11yOpen?: () => Promise<boolean>;\n}\n\nconst notAttr = ['hint', 'event', 'delay', 'attr', 'role', 'props', 'state', 'a11yId', 'name'];\n\nconst getEventFunc = function (event: EE, gameObject: GameObject, e: MouseEvent) {\n ['touchstart', 'touchend', 'tap'].forEach(name => {\n event.emit(name, {\n stopPropagation: () => e.stopPropagation(),\n data: {\n position: this.eventPosition,\n },\n gameObject,\n });\n });\n};\n\n@decorators.componentObserver({\n A11y: ['hint'],\n Transform: ['inScene'],\n Event: [],\n})\nexport default class A11ySystem extends System {\n static systemName = 'A11ySystem';\n\n /**\n * Accessibility overlay layer.\n */\n div: HTMLDivElement;\n /**\n * Whether debug mode is enabled.\n */\n debug: boolean;\n /**\n * Horizontal scale ratio.\n */\n _ratioX: number;\n /**\n * Vertical scale ratio.\n */\n _ratioY: number;\n /**\n * Event coordinates.\n */\n eventPosition: EventPosition;\n /**\n * Whether accessibility is enabled.\n */\n activate: boolean;\n /**\n * Delay before placing the DOM.\n */\n delay: number;\n cache: Map<string, HTMLElement> = new Map();\n eventCache: Map<string, (e: MouseEvent) => void> = new Map();\n /**\n * The DOM `zIndex`.\n */\n zIndex: number = ZINDEX;\n\n /**\n * Accessibility plugin initializer.\n * @param opt accessibility plugin options\n * @param opt.activate whether to enable accessibility; defaults to AUTO based on the\n * system's screen-reader capability. One of AUTO | ENABLE | DISABLE.\n * @example\n * // Enable debug: accessibility regions show a red translucent background\n * new A11ySystem({debug: true})\n * // Disable accessibility\n * new A11ySystem({activate: A11yActivate.DISABLE})\n */\n constructor(opt?: SystemParam) {\n super(opt);\n }\n\n get ratioX() {\n if (this._ratioX) {\n return this._ratioX;\n } else {\n const success = this.setRatio();\n if (success) {\n return this._ratioX;\n } else {\n return 0;\n }\n }\n }\n get ratioY() {\n if (this._ratioY) {\n return this._ratioY;\n } else {\n const success = this.setRatio();\n if (success) {\n return this._ratioY;\n } else {\n return 0;\n }\n }\n }\n\n async init(opt: SystemParam = {}) {\n const { activate = A11yActivate.CHECK, delay = 100, checkA11yOpen = () => Promise.resolve(false), zIndex } = opt;\n this.delay = delay;\n this.zIndex = zIndex || this.zIndex\n switch (activate) {\n case A11yActivate.CHECK:\n try {\n this.activate = await checkA11yOpen();\n } catch (error) {\n this.activate = false;\n }\n break;\n case A11yActivate.DISABLE:\n this.activate = false;\n break;\n case A11yActivate.ENABLE:\n this.activate = true;\n break;\n }\n this.debug = opt.debug || false;\n if (this.debug) {\n this.activate = true;\n }\n\n if (!this.activate) return;\n // Render the parent container.\n const div = document.createElement('div');\n this.div = div;\n // If a parent node exists, mount this div so children position relative to it;\n // otherwise children position relative to the body.\n if (this.game.canvas.parentNode) {\n this.game.canvas.parentNode.insertBefore(this.div, this.game.canvas);\n }\n }\n setRatio() {\n const { width, height } = this.getCanvasBoundingClientRect();\n const { renderWidth, renderHeight } = this.getRenderRect();\n this._ratioX = width / renderWidth;\n this._ratioY = height / renderHeight;\n if (width || height) {\n this.initDiv();\n return true;\n } else {\n return false;\n }\n }\n getRenderRect() {\n const { params = { width: 300, height: 300 } } = this.game.getSystem(RendererSystem);\n const { height: renderHeight, width: renderWidth } = params;\n return { renderWidth, renderHeight };\n }\n getCanvasBoundingClientRect() {\n // Actual pixel width/height and position of the render canvas relative to the viewport.\n const { width, height, left, top } = this.game.canvas.getBoundingClientRect();\n return { width, height, left, top };\n }\n initDiv() {\n const { pageXOffset, pageYOffset } = window;\n\n const { width, height, left, top } = this.getCanvasBoundingClientRect();\n // Parent container position.\n const style: A11yMaskStyle = {\n width,\n height,\n left: `${left + pageXOffset}px`,\n top: `${top + pageYOffset}px`,\n position: POSITION,\n zIndex: this.zIndex,\n pointerEvents: PointerEvents.NONE,\n background: MaskBackground.NONE,\n };\n setStyle(this.div, style);\n // Attach a capture-phase listener on the parent container to track event coordinates.\n this.div.addEventListener(\n 'click',\n e => {\n const currentTarget = e.currentTarget as HTMLDivElement;\n const { left, top } = currentTarget.getBoundingClientRect();\n const x = (e.pageX - left) / this.ratioX;\n const y = (e.pageY - top) / this.ratioY;\n this.eventPosition = { x, y };\n },\n true,\n );\n }\n\n /**\n * Handle plugin updates.\n */\n async update() {\n const changes = this.componentObserver.clear();\n if (!this.activate) {\n return;\n }\n for (const changed of changes) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD:\n changed.componentName === 'Event' && this.addEvent(changed.gameObject);\n changed.componentName === 'A11y' && this.add(changed);\n break;\n case OBSERVER_TYPE.CHANGE:\n changed.componentName === 'Transform' && this.transformChange(changed);\n changed.componentName === 'A11y' && this.change(changed);\n break;\n case OBSERVER_TYPE.REMOVE:\n changed.componentName === 'Event' && this.removeEvent(changed);\n changed.componentName === 'A11y' && this.remove(changed);\n }\n }\n }\n\n change(changed: ComponentChanged) {\n const component = changed.component as A11y\n if (changed.prop.prop[0] === 'hint') {\n const dom = this.cache.get(component.a11yId)\n dom?.setAttribute('aria-label', component.hint)\n dom && this.setPosition(dom, changed.gameObject.transform)\n }\n }\n\n remove(changed: ComponentChanged) {\n const component = changed.component as A11y;\n if (!component) return;\n const { a11yId } = component;\n const element = this.div.querySelector(`#${a11yId}`);\n element && this.div.removeChild(element);\n this.cache.delete(a11yId);\n }\n\n /**\n * Handle a component being added to a GameObject.\n * @param changed the changed component\n */\n add(changed: ComponentChanged) {\n if (!this.activate) return;\n const component = changed.component as A11y;\n const { gameObject } = changed;\n const { delay, a11yId: id } = component;\n let { event } = component;\n if (!gameObject) return;\n const { transform } = gameObject;\n if (!transform) return;\n const element = document.createElement('div');\n this.cache.set(id, element);\n if (!event) {\n event = gameObject.getComponent('Event');\n }\n setTimeout(() => {\n this.setPosition(element, transform);\n this.setA11yAttr(element, component);\n if (event) {\n this.addEvent(gameObject);\n }\n if (gameObject.scene) {\n this.div.appendChild(element);\n }\n }, delay || this.delay);\n }\n\n // React to scene changes.\n transformChange(changed: ComponentChanged) {\n const component = changed.component as Transform;\n const { gameObject } = changed;\n const a11yComponent = gameObject.getComponent(A11y) as A11y;\n if (!a11yComponent) return;\n const { a11yId } = a11yComponent;\n if (!component.inScene) {\n // GameObject removed from the scene.\n const dom = this.div.querySelector(`#${a11yId}`);\n dom && this.div.removeChild(dom);\n // this.cache.delete(a11yId)\n } else {\n // GameObject added to the scene.\n // this.div.appendChild(this.cache)\n if (this.cache.has(a11yId)) {\n const addDom = this.cache.get(a11yId);\n addDom && this.div.appendChild(addDom);\n }\n }\n }\n\n /**\n * Attach a listener for the accessibility component.\n * @param element DOM element\n * @param event event component object\n * @param gameObject the GameObject\n */\n setEvent(element: HTMLElement, event: EE, gameObject: GameObject, id) {\n if (!event) {\n return;\n }\n const func = getEventFunc.bind(this, event, gameObject) as (e: MouseEvent) => void;\n this.eventCache.set(id, func);\n element.addEventListener('click', func);\n }\n\n addEvent(gameObject: GameObject) {\n const a11y = gameObject.getComponent(A11y) as A11y;\n if (!a11y) return;\n const event = gameObject.getComponent('Event');\n if (!event) return;\n const element = this.cache.get(a11y.a11yId);\n element && this.setEvent(element, event, gameObject, a11y.a11yId);\n }\n\n removeEvent(changed: ComponentChanged) {\n const { gameObject } = changed;\n const a11y = gameObject.getComponent(A11y) as A11y;\n if (!a11y) return;\n const event = changed.component;\n if (!event) return;\n const { a11yId } = a11y;\n const func = this.eventCache.get(a11yId);\n const element = this.cache.get(a11yId);\n element && element.removeEventListener('click', func);\n }\n\n /**\n * Set accessibility attribute tags.\n * @param element DOM element\n * @param hint accessibility read-aloud text\n * @param interactive whether it is interactive\n */\n setA11yAttr(element: HTMLElement, component: A11y) {\n const { hint, props = {}, state = {}, role, a11yId: id } = component;\n const realRole = role || 'text';\n element.setAttribute('role', realRole);\n element.setAttribute('aria-label', hint);\n element.id = id;\n\n // Backward-compatibility handling.\n const ariaProps = Object.keys(props);\n for (const key of ariaProps) {\n element.setAttribute(key, props[key]);\n }\n const ariaState = Object.keys(state);\n for (const key of ariaState) {\n element.setAttribute(key, state[key]);\n }\n\n for (const key of Object.keys(component)) {\n if (typeof component[key] === 'string' && notAttr.indexOf(key) === -1 && key.indexOf('_') !== 1) {\n element.setAttribute(key, component[key]);\n }\n }\n }\n\n /**\n * Position the accessibility element accordingly.\n * @param element DOM element\n * @param transform position properties\n */\n setPosition(element: HTMLElement, transform: Transform) {\n // Positioned relative to the canvas.\n // const { x: anchorX, y: anchorY } = transform.anchor\n // GameObject width/height.\n const { width, height } = transform.size;\n // position\n // const { x: positionX, y: positionY } = transform.position\n // Set the accessibility DOM style; DragonBones animations default to 2px.\n const style: A11yMaskStyle = {\n width: width === 0 ? 1 : width * this.ratioX,\n height: height === 0 ? 1 : height * this.ratioY,\n position: POSITION,\n zIndex: this.zIndex,\n pointerEvents: PointerEvents.AUTO,\n background: this.debug ? MaskBackground.DEBUG : MaskBackground.NONE,\n };\n const transformProps = {\n ...transform,\n };\n setStyle(element, style);\n // Adjust the DOM position.\n setTransform(element, transformProps, this.ratioX, this.ratioY);\n }\n onDestroy() {\n this.div.parentElement.removeChild(this.div);\n this.cache = null;\n this.eventCache = null;\n this.div = null\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport A11ySystem from './A11ySystem';\n\nObject.assign(A11ySystem, {\n packageName: \"@combos-fun/plugin-a11y\",\n packageVersion: \"0.0.28\",\n});\n"],"names":["A11ySystem"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@combos-fun/plugin-a11y",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.29",
|
|
4
4
|
"description": "Accessibility plugin",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "dist/plugin-a11y.esm.js",
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
"author": "sun668 <q947692259@gmail.com>",
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"eventemitter3": "^5.0.4",
|
|
39
|
-
"@combos-fun/engine": "0.0.
|
|
40
|
-
"@combos-fun/plugin-renderer": "0.0.
|
|
41
|
-
"@combos-fun/inspector-decorator": "0.0.
|
|
39
|
+
"@combos-fun/engine": "0.0.29",
|
|
40
|
+
"@combos-fun/plugin-renderer": "0.0.29",
|
|
41
|
+
"@combos-fun/inspector-decorator": "0.0.29"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"build": "node ../../scripts/build-package.mjs"
|