@@ -8,7 +8,7 @@ const elementRoleList = buildElementRoleList(elementRoles)
8
8
* @param {Element } element -
9
9
* @returns {boolean } - `true` if `element` and its subtree are inaccessible
10
10
*/
11
- function isSubtreeInaccessible ( element ) {
11
+ function isSubtreeInaccessible ( element : HTMLElement ) : boolean {
12
12
if ( element . hidden === true ) {
13
13
return true
14
14
}
@@ -25,6 +25,9 @@ function isSubtreeInaccessible(element) {
25
25
return false
26
26
}
27
27
28
+ interface IsInaccessibleOptions {
29
+ isSubtreeInaccessible ?: typeof isSubtreeInaccessible
30
+ }
28
31
/**
29
32
* Partial implementation https://www.w3.org/TR/wai-aria-1.2/#tree_exclusion
30
33
* which should only be used for elements with a non-presentational role i.e.
@@ -39,7 +42,10 @@ function isSubtreeInaccessible(element) {
39
42
* can be used to return cached results from previous isSubtreeInaccessible calls
40
43
* @returns {boolean } true if excluded, otherwise false
41
44
*/
42
- function isInaccessible ( element , options = { } ) {
45
+ function isInaccessible (
46
+ element : HTMLElement ,
47
+ options : IsInaccessibleOptions = { } ,
48
+ ) : boolean {
43
49
const {
44
50
isSubtreeInaccessible : isSubtreeInaccessibleImpl = isSubtreeInaccessible ,
45
51
} = options
@@ -118,8 +124,8 @@ function buildElementRoleList(elementRolesMap) {
118
124
return result . sort ( bySelectorSpecificity )
119
125
}
120
126
121
- function getRoles ( container , { hidden = false } = { } ) {
122
- function flattenDOM ( node ) {
127
+ function getRoles ( container , { hidden = false } = { } ) : Record < string , Element [ ] > {
128
+ function flattenDOM ( node : ParentNode ) {
123
129
return [
124
130
node ,
125
131
...Array . from ( node . children ) . reduce (
@@ -133,8 +139,8 @@ function getRoles(container, {hidden = false} = {}) {
133
139
. filter ( element => {
134
140
return hidden === false ? isInaccessible ( element ) === false : true
135
141
} )
136
- . reduce ( ( acc , node ) => {
137
- let roles = [ ]
142
+ . reduce ( ( acc , node : Element ) => {
143
+ let roles : Array < string > = [ ]
138
144
// TODO: This violates html-aria which does not allow any role on every element
139
145
if ( node . hasAttribute ( 'role' ) ) {
140
146
roles = node . getAttribute ( 'role' ) . split ( ' ' ) . slice ( 0 , 1 )
@@ -152,7 +158,7 @@ function getRoles(container, {hidden = false} = {}) {
152
158
} , { } )
153
159
}
154
160
155
- function prettyRoles ( dom , { hidden} ) {
161
+ function prettyRoles ( dom : HTMLElement , { hidden} ) {
156
162
const roles = getRoles ( dom , { hidden} )
157
163
158
164
return Object . entries ( roles )
@@ -161,7 +167,7 @@ function prettyRoles(dom, {hidden}) {
161
167
const elementsString = elements
162
168
. map ( el => {
163
169
const nameString = `Name "${ computeAccessibleName ( el ) } ":\n`
164
- const domString = prettyDOM ( el . cloneNode ( false ) )
170
+ const domString = prettyDOM ( el . cloneNode ( false ) as Element )
165
171
return `${ nameString } ${ domString } `
166
172
} )
167
173
. join ( '\n\n' )
@@ -171,7 +177,7 @@ function prettyRoles(dom, {hidden}) {
171
177
. join ( '\n' )
172
178
}
173
179
174
- const logRoles = ( dom , { hidden = false } = { } ) =>
180
+ const logRoles = ( dom : HTMLElement , { hidden = false } = { } ) =>
175
181
console . log ( prettyRoles ( dom , { hidden} ) )
176
182
177
183
/**
0 commit comments