ember-aria-voyager 0.0.3 → 0.0.5
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/LICENSE +7 -0
- package/README.md +4 -4
- package/declarations/test-support/-private/-get-element.d.ts.map +1 -1
- package/declarations/test-support/-private/-get-elements.d.ts.map +1 -1
- package/declarations/test-support/-private/composite.d.ts +1 -1
- package/declarations/test-support/-private/composite.d.ts.map +1 -1
- package/declarations/test-support/listbox.d.ts.map +1 -1
- package/declarations/test-support/menu.d.ts.map +1 -1
- package/dist/modifiers/listbox.js.map +1 -1
- package/dist/modifiers/menu.js.map +1 -1
- package/dist/test-support/index.js +28 -13
- package/dist/test-support/index.js.map +1 -1
- package/package.json +30 -29
package/LICENSE
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Copyright 2024 Thomas Gossmann
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
|
+
|
|
5
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
6
|
+
|
|
7
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ pnpm add ember-aria-voyager
|
|
|
30
30
|
|
|
31
31
|
Basic example:
|
|
32
32
|
|
|
33
|
-
```
|
|
33
|
+
```glimmer-ts
|
|
34
34
|
import { listbox } from 'ember-aria-voyager';
|
|
35
35
|
const options = ['apple', 'banana', 'pineapple'];
|
|
36
36
|
|
|
@@ -66,7 +66,7 @@ When passing `items` the `select()` and `selection` can work off of your passed
|
|
|
66
66
|
|
|
67
67
|
Full example:
|
|
68
68
|
|
|
69
|
-
```
|
|
69
|
+
```glimmer-ts
|
|
70
70
|
import { listbox } from 'ember-aria-voyager';
|
|
71
71
|
const options = ['apple', 'banana', 'pineapple'];
|
|
72
72
|
const context = new class {
|
|
@@ -99,7 +99,7 @@ const selection = ['banana'];
|
|
|
99
99
|
|
|
100
100
|
Basic example:
|
|
101
101
|
|
|
102
|
-
```
|
|
102
|
+
```glimmer-ts
|
|
103
103
|
import { menu } from 'ember-aria-voyager';
|
|
104
104
|
|
|
105
105
|
<template>
|
|
@@ -126,7 +126,7 @@ interface MenuSignature<T> {
|
|
|
126
126
|
|
|
127
127
|
Here is a full example:
|
|
128
128
|
|
|
129
|
-
```
|
|
129
|
+
```glimmer-ts
|
|
130
130
|
import { menu } from 'ember-aria-voyager';
|
|
131
131
|
const items = [
|
|
132
132
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"-get-element.d.ts","sourceRoot":"","sources":["../../../src/test-support/-private/-get-element.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,iBAAS,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,qBAAqB,GAAG,oBAAoB,CAAC,EAChF,MAAM,EAAE,CAAC,GACR,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC/D,iBAAS,UAAU,CAAC,CAAC,SAAS,MAAM,qBAAqB,EACvD,MAAM,EAAE,CAAC,GACR,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACnC,iBAAS,UAAU,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACtD,MAAM,EAAE,CAAC,GACR,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAClC,iBAAS,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,OAAO,GAAG,IAAI,CAAC;AAC5E,iBAAS,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;AAC9C,iBAAS,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AACzD,iBAAS,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"-get-element.d.ts","sourceRoot":"","sources":["../../../src/test-support/-private/-get-element.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,iBAAS,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,qBAAqB,GAAG,oBAAoB,CAAC,EAChF,MAAM,EAAE,CAAC,GACR,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC/D,iBAAS,UAAU,CAAC,CAAC,SAAS,MAAM,qBAAqB,EACvD,MAAM,EAAE,CAAC,GACR,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACnC,iBAAS,UAAU,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACtD,MAAM,EAAE,CAAC,GACR,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAClC,iBAAS,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,OAAO,GAAG,IAAI,CAAC;AAC5E,iBAAS,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;AAC9C,iBAAS,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AACzD,iBAAS,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;AA6B/D,eAAe,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"-get-elements.d.ts","sourceRoot":"","sources":["../../../src/test-support/-private/-get-elements.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,yBAAyB,CAAC;AAEjC,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAC1D,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"-get-elements.d.ts","sourceRoot":"","sources":["../../../src/test-support/-private/-get-elements.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,yBAAyB,CAAC;AAEjC,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAC1D,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AA2BhF,eAAe,WAAW,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function
|
|
1
|
+
export declare function getCompositeItems(parent: HTMLElement, selector: string, parentSelector?: string): HTMLElement[];
|
|
2
2
|
//# sourceMappingURL=composite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composite.d.ts","sourceRoot":"","sources":["../../../src/test-support/-private/composite.ts"],"names":[],"mappings":"AAAA,wBAAgB,
|
|
1
|
+
{"version":3,"file":"composite.d.ts","sourceRoot":"","sources":["../../../src/test-support/-private/composite.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,GACtB,WAAW,EAAE,CAaf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listbox.d.ts","sourceRoot":"","sources":["../../src/test-support/listbox.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,KAAK,SAAS,GAAG;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"listbox.d.ts","sourceRoot":"","sources":["../../src/test-support/listbox.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,KAAK,SAAS,GAAG;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAuCF,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,OAAO,CAAC,SAAS,CAAqB,GAChD,OAAO,CAAC,IAAI,CAAC,CAiBf;AA0CD,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,OAAO,CAAC,SAAS,CAAqB,GAChD,OAAO,CAAC,IAAI,CAAC,CAOf;AAMD,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,OAAO,CAAC,SAAS,CAAqB,GAChD,OAAO,CAAC,IAAI,CAAC,CAcf;AAwCD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,OAAO,CAAC,SAAS,CAAqB,GAChD,OAAO,CAAC,IAAI,CAAC,CAOf;AAMD,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,sBAAsB,UAAQ,iBAS/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/test-support/menu.ts"],"names":[],"mappings":"AAMA,KAAK,SAAS,GAAG;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/test-support/menu.ts"],"names":[],"mappings":"AAMA,KAAK,SAAS,GAAG;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AA4CF,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,OAAO,CAAC,SAAS,CAAqB,GAChD,OAAO,CAAC,IAAI,CAAC,CA0Ef;AAMD,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,OAAO,CAAC,SAAS,CAAqB,GAChD,OAAO,CAAC,IAAI,CAAC,CA4Ef"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listbox.js","sources":["../../src/modifiers/listbox.ts"],"sourcesContent":["import { IndexEmitStrategy, ItemEmitStrategy, Listbox, ReactiveUpdateStrategy } from 'aria-voyager';\nimport Modifier from 'ember-modifier';\nimport isEqual from 'lodash.isequal';\n\nimport type { EmitStrategy } from 'aria-voyager';\nimport type { NamedArgs, PositionalArgs } from 'ember-modifier';\n\nfunction asArray(val?: unknown) {\n if (val === undefined) {\n return [];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return Array.isArray(val) ? val : [val];\n}\n\nfunction createItemEmitter<T>(listbox: Listbox, options: NamedArgs<ListboxSignature<T>>) {\n return new ItemEmitStrategy(listbox, {\n select: (selection: HTMLElement[]) => {\n (options.select as ((selection: HTMLElement | HTMLElement[]) => void) | undefined)?.(\n options.multi ? selection : (selection[0] as HTMLElement)\n );\n },\n\n activateItem: (item: HTMLElement) => {\n (options.activateItem as ((item: HTMLElement) => void) | undefined)?.(item);\n }\n });\n}\n\nfunction createIndexEmitter<T>(listbox: Listbox, options: NamedArgs<ListboxSignature<T>>) {\n const findByIndex = (index: number) => {\n return (options as WithItems<T>).items[index] ?? undefined;\n };\n\n return new IndexEmitStrategy(listbox, {\n select: (selection: number[]) => {\n if (options.multi) {\n const items = selection\n .map((index) => findByIndex(index))\n .filter((i) => i !== undefined) as T[];\n\n (options.select as ((selection: T[]) => void) | undefined)?.(items);\n } else {\n const item = findByIndex(selection[0] as number);\n\n if (item) {\n (options.select as ((selection: T) => void) | undefined)?.(item);\n }\n }\n },\n\n activateItem: (index: number) => {\n const item = findByIndex(index);\n\n if (item) {\n (options.activateItem as ((item: T) => void) | undefined)?.(item);\n }\n }\n });\n}\n\ntype WithItems<T> = {\n items: T[];\n selection?: T | T[];\n activateItem?: (item: T) => void;\n} & (\n | {\n multi: true;\n select?: (selection: T[]) => void;\n }\n | {\n multi?: false;\n select?: (selection: T) => void;\n }\n);\n\ntype OptionalItems = {\n items?: HTMLElement[];\n selection?: HTMLElement | HTMLElement[];\n activateItem?: (item: HTMLElement) => void;\n} & (\n | {\n multi: true;\n select?: (selection: HTMLElement[]) => void;\n }\n | {\n multi?: false;\n select?: (selection: HTMLElement) => void;\n }\n);\n\ninterface ListboxSignature<T> {\n Args: {\n Positional: [];\n Named: { disabled?: boolean } & (WithItems<T> | OptionalItems);\n };\n}\n\nexport default class ListboxModifier<T> extends Modifier<ListboxSignature<T>> {\n private listbox?: Listbox;\n private declare updater: ReactiveUpdateStrategy;\n private declare emitter: EmitStrategy;\n\n private prevItems?: T[];\n private prevSelection?: T | T[];\n private prevMulti?: boolean;\n private prevDisabled?: boolean;\n\n modify(\n element: Element,\n _: PositionalArgs<ListboxSignature<T>>,\n options: NamedArgs<ListboxSignature<T>>\n ) {\n if (!this.listbox) {\n this.updater = new ReactiveUpdateStrategy();\n\n this.listbox = new Listbox(element as HTMLElement, {\n updater: this.updater\n });\n }\n\n if (options.items && !(this.emitter instanceof IndexEmitStrategy)) {\n this.emitter = createIndexEmitter<T>(this.listbox, options);\n } else if (!options.items && !(this.emitter instanceof ItemEmitStrategy)) {\n this.emitter = createItemEmitter<T>(this.listbox, options);\n }\n\n if (options.items && !isEqual(this.prevItems, (options as WithItems<T>).items)) {\n this.updater.updateItems();\n this.prevItems = [...(options as WithItems<T>).items];\n }\n\n if (options.selection && !isEqual(asArray(this.prevSelection), asArray(options.selection))) {\n this.updater.updateSelection();\n this.prevSelection = asArray(options.selection);\n }\n\n let optionsChanged = false;\n\n if (this.prevMulti !== options.multi) {\n if (options.multi) {\n element.setAttribute('aria-multiselectable', 'true');\n } else {\n element.removeAttribute('aria-multiselectable');\n }\n\n optionsChanged = true;\n\n this.prevMulti = options.multi;\n }\n\n if (this.prevDisabled !== options.disabled) {\n if (options.disabled) {\n element.setAttribute('aria-disabled', 'true');\n } else {\n element.removeAttribute('aria-disabled');\n }\n\n optionsChanged = true;\n\n this.prevDisabled = options.disabled;\n }\n\n if (optionsChanged) {\n this.updater.updateOptions();\n }\n }\n}\n"],"names":["asArray","val","undefined","Array","isArray","createItemEmitter","listbox","options","ItemEmitStrategy","select","selection","multi","activateItem","item","createIndexEmitter","findByIndex","index","items","IndexEmitStrategy","map","filter","i","ListboxModifier","Modifier","modify","element","_","updater","ReactiveUpdateStrategy","Listbox","emitter","isEqual","prevItems","updateItems","prevSelection","updateSelection","optionsChanged","prevMulti","setAttribute","removeAttribute","prevDisabled","disabled","updateOptions"],"mappings":";;;;AAOA,SAASA,OAAOA,CAACC,GAAa,EAAE;EAC9B,IAAIA,GAAG,KAAKC,SAAS,EAAE;AACrB,IAAA,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"listbox.js","sources":["../../src/modifiers/listbox.ts"],"sourcesContent":["import { IndexEmitStrategy, ItemEmitStrategy, Listbox, ReactiveUpdateStrategy } from 'aria-voyager';\nimport Modifier from 'ember-modifier';\nimport isEqual from 'lodash.isequal';\n\nimport type { EmitStrategy } from 'aria-voyager';\nimport type { NamedArgs, PositionalArgs } from 'ember-modifier';\n\nfunction asArray(val?: unknown) {\n if (val === undefined) {\n return [];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return Array.isArray(val) ? val : [val];\n}\n\nfunction createItemEmitter<T>(listbox: Listbox, options: NamedArgs<ListboxSignature<T>>) {\n return new ItemEmitStrategy(listbox, {\n select: (selection: HTMLElement[]) => {\n (options.select as ((selection: HTMLElement | HTMLElement[]) => void) | undefined)?.(\n options.multi ? selection : (selection[0] as HTMLElement)\n );\n },\n\n activateItem: (item: HTMLElement) => {\n (options.activateItem as ((item: HTMLElement) => void) | undefined)?.(item);\n }\n });\n}\n\nfunction createIndexEmitter<T>(listbox: Listbox, options: NamedArgs<ListboxSignature<T>>) {\n const findByIndex = (index: number) => {\n return (options as WithItems<T>).items[index] ?? undefined;\n };\n\n return new IndexEmitStrategy(listbox, {\n select: (selection: number[]) => {\n if (options.multi) {\n const items = selection\n .map((index) => findByIndex(index))\n .filter((i) => i !== undefined) as T[];\n\n (options.select as ((selection: T[]) => void) | undefined)?.(items);\n } else {\n const item = findByIndex(selection[0] as number);\n\n if (item) {\n (options.select as ((selection: T) => void) | undefined)?.(item);\n }\n }\n },\n\n activateItem: (index: number) => {\n const item = findByIndex(index);\n\n if (item) {\n (options.activateItem as ((item: T) => void) | undefined)?.(item);\n }\n }\n });\n}\n\ntype WithItems<T> = {\n items: T[];\n selection?: T | T[];\n activateItem?: (item: T) => void;\n} & (\n | {\n multi: true;\n select?: (selection: T[]) => void;\n }\n | {\n multi?: false;\n select?: (selection: T) => void;\n }\n);\n\ntype OptionalItems = {\n items?: HTMLElement[];\n selection?: HTMLElement | HTMLElement[];\n activateItem?: (item: HTMLElement) => void;\n} & (\n | {\n multi: true;\n select?: (selection: HTMLElement[]) => void;\n }\n | {\n multi?: false;\n select?: (selection: HTMLElement) => void;\n }\n);\n\ninterface ListboxSignature<T> {\n Args: {\n Positional: [];\n Named: { disabled?: boolean } & (WithItems<T> | OptionalItems);\n };\n}\n\nexport default class ListboxModifier<T> extends Modifier<ListboxSignature<T>> {\n private listbox?: Listbox;\n private declare updater: ReactiveUpdateStrategy;\n private declare emitter: EmitStrategy;\n\n private prevItems?: T[];\n private prevSelection?: T | T[];\n private prevMulti?: boolean;\n private prevDisabled?: boolean;\n\n modify(\n element: Element,\n _: PositionalArgs<ListboxSignature<T>>,\n options: NamedArgs<ListboxSignature<T>>\n ) {\n if (!this.listbox) {\n this.updater = new ReactiveUpdateStrategy();\n\n this.listbox = new Listbox(element as HTMLElement, {\n updater: this.updater\n });\n }\n\n if (options.items && !(this.emitter instanceof IndexEmitStrategy)) {\n this.emitter = createIndexEmitter<T>(this.listbox, options);\n } else if (!options.items && !(this.emitter instanceof ItemEmitStrategy)) {\n this.emitter = createItemEmitter<T>(this.listbox, options);\n }\n\n if (options.items && !isEqual(this.prevItems, (options as WithItems<T>).items)) {\n this.updater.updateItems();\n this.prevItems = [...(options as WithItems<T>).items];\n }\n\n if (options.selection && !isEqual(asArray(this.prevSelection), asArray(options.selection))) {\n this.updater.updateSelection();\n this.prevSelection = asArray(options.selection);\n }\n\n let optionsChanged = false;\n\n if (this.prevMulti !== options.multi) {\n if (options.multi) {\n element.setAttribute('aria-multiselectable', 'true');\n } else {\n element.removeAttribute('aria-multiselectable');\n }\n\n optionsChanged = true;\n\n this.prevMulti = options.multi;\n }\n\n if (this.prevDisabled !== options.disabled) {\n if (options.disabled) {\n element.setAttribute('aria-disabled', 'true');\n } else {\n element.removeAttribute('aria-disabled');\n }\n\n optionsChanged = true;\n\n this.prevDisabled = options.disabled;\n }\n\n if (optionsChanged) {\n this.updater.updateOptions();\n }\n }\n}\n"],"names":["asArray","val","undefined","Array","isArray","createItemEmitter","listbox","options","ItemEmitStrategy","select","selection","multi","activateItem","item","createIndexEmitter","findByIndex","index","items","IndexEmitStrategy","map","filter","i","ListboxModifier","Modifier","modify","element","_","updater","ReactiveUpdateStrategy","Listbox","emitter","isEqual","prevItems","updateItems","prevSelection","updateSelection","optionsChanged","prevMulti","setAttribute","removeAttribute","prevDisabled","disabled","updateOptions"],"mappings":";;;;AAOA,SAASA,OAAOA,CAACC,GAAa,EAAE;EAC9B,IAAIA,GAAG,KAAKC,SAAS,EAAE;AACrB,IAAA,OAAO,EAAE;AACX;;AAEA;EACA,OAAOC,KAAK,CAACC,OAAO,CAACH,GAAG,CAAC,GAAGA,GAAG,GAAG,CAACA,GAAG,CAAC;AACzC;AAEA,SAASI,iBAAiBA,CAAIC,OAAgB,EAAEC,OAAuC,EAAE;AACvF,EAAA,OAAO,IAAIC,gBAAgB,CAACF,OAAO,EAAE;IACnCG,MAAM,EAAGC,SAAwB,IAAK;AACnCH,MAAAA,OAAO,CAACE,MAAM,GACbF,OAAO,CAACI,KAAK,GAAGD,SAAS,GAAIA,SAAS,CAAC,CAAC,CAC1C,CAAC;KACF;IAEDE,YAAY,EAAGC,IAAiB,IAAK;AAClCN,MAAAA,OAAO,CAACK,YAAY,GAAiDC,IAAI,CAAC;AAC7E;AACF,GAAC,CAAC;AACJ;AAEA,SAASC,kBAAkBA,CAAIR,OAAgB,EAAEC,OAAuC,EAAE;EACxF,MAAMQ,WAAW,GAAIC,KAAa,IAAK;AACrC,IAAA,OAAQT,OAAO,CAAkBU,KAAK,CAACD,KAAK,CAAC,IAAId,SAAS;GAC3D;AAED,EAAA,OAAO,IAAIgB,iBAAiB,CAACZ,OAAO,EAAE;IACpCG,MAAM,EAAGC,SAAmB,IAAK;MAC/B,IAAIH,OAAO,CAACI,KAAK,EAAE;QACjB,MAAMM,KAAK,GAAGP,SAAS,CACpBS,GAAG,CAAEH,KAAK,IAAKD,WAAW,CAACC,KAAK,CAAC,CAAC,CAClCI,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKnB,SAAS,CAAQ;AAEvCK,QAAAA,OAAO,CAACE,MAAM,GAA8CQ,KAAK,CAAC;AACrE,OAAC,MAAM;QACL,MAAMJ,IAAI,GAAGE,WAAW,CAACL,SAAS,CAAC,CAAC,CAAW,CAAC;AAEhD,QAAA,IAAIG,IAAI,EAAE;AACPN,UAAAA,OAAO,CAACE,MAAM,GAA4CI,IAAI,CAAC;AAClE;AACF;KACD;IAEDD,YAAY,EAAGI,KAAa,IAAK;AAC/B,MAAA,MAAMH,IAAI,GAAGE,WAAW,CAACC,KAAK,CAAC;AAE/B,MAAA,IAAIH,IAAI,EAAE;AACPN,QAAAA,OAAO,CAACK,YAAY,GAAuCC,IAAI,CAAC;AACnE;AACF;AACF,GAAC,CAAC;AACJ;AAuCe,MAAMS,eAAe,SAAYC,QAAQ,CAAsB;AAU5EC,EAAAA,MAAMA,CACJC,OAAgB,EAChBC,CAAsC,EACtCnB,OAAuC,EACvC;AACA,IAAA,IAAI,CAAC,IAAI,CAACD,OAAO,EAAE;AACjB,MAAA,IAAI,CAACqB,OAAO,GAAG,IAAIC,sBAAsB,EAAE;AAE3C,MAAA,IAAI,CAACtB,OAAO,GAAG,IAAIuB,OAAO,CAACJ,OAAO,EAAiB;QACjDE,OAAO,EAAE,IAAI,CAACA;AAChB,OAAC,CAAC;AACJ;IAEA,IAAIpB,OAAO,CAACU,KAAK,IAAI,EAAE,IAAI,CAACa,OAAO,YAAYZ,iBAAiB,CAAC,EAAE;MACjE,IAAI,CAACY,OAAO,GAAGhB,kBAAkB,CAAI,IAAI,CAACR,OAAO,EAAEC,OAAO,CAAC;AAC7D,KAAC,MAAM,IAAI,CAACA,OAAO,CAACU,KAAK,IAAI,EAAE,IAAI,CAACa,OAAO,YAAYtB,gBAAgB,CAAC,EAAE;MACxE,IAAI,CAACsB,OAAO,GAAGzB,iBAAiB,CAAI,IAAI,CAACC,OAAO,EAAEC,OAAO,CAAC;AAC5D;AAEA,IAAA,IAAIA,OAAO,CAACU,KAAK,IAAI,CAACc,OAAO,CAAC,IAAI,CAACC,SAAS,EAAGzB,OAAO,CAAkBU,KAAK,CAAC,EAAE;AAC9E,MAAA,IAAI,CAACU,OAAO,CAACM,WAAW,EAAE;MAC1B,IAAI,CAACD,SAAS,GAAG,CAAC,GAAIzB,OAAO,CAAkBU,KAAK,CAAC;AACvD;IAEA,IAAIV,OAAO,CAACG,SAAS,IAAI,CAACqB,OAAO,CAAC/B,OAAO,CAAC,IAAI,CAACkC,aAAa,CAAC,EAAElC,OAAO,CAACO,OAAO,CAACG,SAAS,CAAC,CAAC,EAAE;AAC1F,MAAA,IAAI,CAACiB,OAAO,CAACQ,eAAe,EAAE;MAC9B,IAAI,CAACD,aAAa,GAAGlC,OAAO,CAACO,OAAO,CAACG,SAAS,CAAC;AACjD;IAEA,IAAI0B,cAAc,GAAG,KAAK;AAE1B,IAAA,IAAI,IAAI,CAACC,SAAS,KAAK9B,OAAO,CAACI,KAAK,EAAE;MACpC,IAAIJ,OAAO,CAACI,KAAK,EAAE;AACjBc,QAAAA,OAAO,CAACa,YAAY,CAAC,sBAAsB,EAAE,MAAM,CAAC;AACtD,OAAC,MAAM;AACLb,QAAAA,OAAO,CAACc,eAAe,CAAC,sBAAsB,CAAC;AACjD;AAEAH,MAAAA,cAAc,GAAG,IAAI;AAErB,MAAA,IAAI,CAACC,SAAS,GAAG9B,OAAO,CAACI,KAAK;AAChC;AAEA,IAAA,IAAI,IAAI,CAAC6B,YAAY,KAAKjC,OAAO,CAACkC,QAAQ,EAAE;MAC1C,IAAIlC,OAAO,CAACkC,QAAQ,EAAE;AACpBhB,QAAAA,OAAO,CAACa,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;AAC/C,OAAC,MAAM;AACLb,QAAAA,OAAO,CAACc,eAAe,CAAC,eAAe,CAAC;AAC1C;AAEAH,MAAAA,cAAc,GAAG,IAAI;AAErB,MAAA,IAAI,CAACI,YAAY,GAAGjC,OAAO,CAACkC,QAAQ;AACtC;AAEA,IAAA,IAAIL,cAAc,EAAE;AAClB,MAAA,IAAI,CAACT,OAAO,CAACe,aAAa,EAAE;AAC9B;AACF;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.js","sources":["../../src/modifiers/menu.ts"],"sourcesContent":["import { Menu, ReactiveUpdateStrategy } from 'aria-voyager';\nimport Modifier from 'ember-modifier';\nimport isEqual from 'lodash.isequal';\n\nimport type { EmitStrategy } from 'aria-voyager';\nimport type { NamedArgs, PositionalArgs } from 'ember-modifier';\n\nexport interface MenuSignature<T> {\n Element: HTMLElement;\n Args: {\n Positional: [];\n Named: {\n items?: T[];\n disabled?: boolean;\n };\n };\n}\nexport default class MenuModifier<T> extends Modifier<MenuSignature<T>> {\n private menu?: Menu;\n private declare updater: ReactiveUpdateStrategy;\n private declare emitter: EmitStrategy;\n\n private prevItems?: T[];\n private prevDisabled?: boolean;\n\n modify(\n element: Element,\n _: PositionalArgs<MenuSignature<T>>,\n options: NamedArgs<MenuSignature<T>>\n ) {\n if (!this.menu) {\n this.updater = new ReactiveUpdateStrategy();\n\n this.menu = new Menu(element as HTMLElement, {\n updater: this.updater\n });\n }\n\n if (options.items && !isEqual(this.prevItems, options.items)) {\n this.updater.updateItems();\n this.prevItems = [...options.items];\n }\n\n let optionsChanged = false;\n\n if (this.prevDisabled !== options.disabled) {\n if (options.disabled) {\n element.setAttribute('aria-disabled', 'true');\n } else {\n element.removeAttribute('aria-disabled');\n }\n\n optionsChanged = true;\n\n this.prevDisabled = options.disabled;\n }\n\n if (optionsChanged) {\n this.updater.updateOptions();\n }\n }\n}\n"],"names":["MenuModifier","Modifier","modify","element","_","options","menu","updater","ReactiveUpdateStrategy","Menu","items","isEqual","prevItems","updateItems","optionsChanged","prevDisabled","disabled","setAttribute","removeAttribute","updateOptions"],"mappings":";;;;AAiBe,MAAMA,YAAY,SAAYC,QAAQ,CAAmB;AAQtEC,EAAAA,MAAMA,CACJC,OAAgB,EAChBC,CAAmC,EACnCC,OAAoC,EACpC;AACA,IAAA,IAAI,CAAC,IAAI,CAACC,IAAI,EAAE;AACd,MAAA,IAAI,CAACC,OAAO,GAAG,IAAIC,sBAAsB,EAAE
|
|
1
|
+
{"version":3,"file":"menu.js","sources":["../../src/modifiers/menu.ts"],"sourcesContent":["import { Menu, ReactiveUpdateStrategy } from 'aria-voyager';\nimport Modifier from 'ember-modifier';\nimport isEqual from 'lodash.isequal';\n\nimport type { EmitStrategy } from 'aria-voyager';\nimport type { NamedArgs, PositionalArgs } from 'ember-modifier';\n\nexport interface MenuSignature<T> {\n Element: HTMLElement;\n Args: {\n Positional: [];\n Named: {\n items?: T[];\n disabled?: boolean;\n };\n };\n}\nexport default class MenuModifier<T> extends Modifier<MenuSignature<T>> {\n private menu?: Menu;\n private declare updater: ReactiveUpdateStrategy;\n private declare emitter: EmitStrategy;\n\n private prevItems?: T[];\n private prevDisabled?: boolean;\n\n modify(\n element: Element,\n _: PositionalArgs<MenuSignature<T>>,\n options: NamedArgs<MenuSignature<T>>\n ) {\n if (!this.menu) {\n this.updater = new ReactiveUpdateStrategy();\n\n this.menu = new Menu(element as HTMLElement, {\n updater: this.updater\n });\n }\n\n if (options.items && !isEqual(this.prevItems, options.items)) {\n this.updater.updateItems();\n this.prevItems = [...options.items];\n }\n\n let optionsChanged = false;\n\n if (this.prevDisabled !== options.disabled) {\n if (options.disabled) {\n element.setAttribute('aria-disabled', 'true');\n } else {\n element.removeAttribute('aria-disabled');\n }\n\n optionsChanged = true;\n\n this.prevDisabled = options.disabled;\n }\n\n if (optionsChanged) {\n this.updater.updateOptions();\n }\n }\n}\n"],"names":["MenuModifier","Modifier","modify","element","_","options","menu","updater","ReactiveUpdateStrategy","Menu","items","isEqual","prevItems","updateItems","optionsChanged","prevDisabled","disabled","setAttribute","removeAttribute","updateOptions"],"mappings":";;;;AAiBe,MAAMA,YAAY,SAAYC,QAAQ,CAAmB;AAQtEC,EAAAA,MAAMA,CACJC,OAAgB,EAChBC,CAAmC,EACnCC,OAAoC,EACpC;AACA,IAAA,IAAI,CAAC,IAAI,CAACC,IAAI,EAAE;AACd,MAAA,IAAI,CAACC,OAAO,GAAG,IAAIC,sBAAsB,EAAE;AAE3C,MAAA,IAAI,CAACF,IAAI,GAAG,IAAIG,IAAI,CAACN,OAAO,EAAiB;QAC3CI,OAAO,EAAE,IAAI,CAACA;AAChB,OAAC,CAAC;AACJ;AAEA,IAAA,IAAIF,OAAO,CAACK,KAAK,IAAI,CAACC,OAAO,CAAC,IAAI,CAACC,SAAS,EAAEP,OAAO,CAACK,KAAK,CAAC,EAAE;AAC5D,MAAA,IAAI,CAACH,OAAO,CAACM,WAAW,EAAE;MAC1B,IAAI,CAACD,SAAS,GAAG,CAAC,GAAGP,OAAO,CAACK,KAAK,CAAC;AACrC;IAEA,IAAII,cAAc,GAAG,KAAK;AAE1B,IAAA,IAAI,IAAI,CAACC,YAAY,KAAKV,OAAO,CAACW,QAAQ,EAAE;MAC1C,IAAIX,OAAO,CAACW,QAAQ,EAAE;AACpBb,QAAAA,OAAO,CAACc,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;AAC/C,OAAC,MAAM;AACLd,QAAAA,OAAO,CAACe,eAAe,CAAC,eAAe,CAAC;AAC1C;AAEAJ,MAAAA,cAAc,GAAG,IAAI;AAErB,MAAA,IAAI,CAACC,YAAY,GAAGV,OAAO,CAACW,QAAQ;AACtC;AAEA,IAAA,IAAIF,cAAc,EAAE;AAClB,MAAA,IAAI,CAACP,OAAO,CAACY,aAAa,EAAE;AAC9B;AACF;AACF;;;;"}
|
|
@@ -337,6 +337,10 @@ function setupListTest(assert, selectors) {
|
|
|
337
337
|
};
|
|
338
338
|
}
|
|
339
339
|
|
|
340
|
+
// function getItems(parent: HTMLElement) {
|
|
341
|
+
// return getCompositeItems(parent, '[role="option"]', '[role="listbox"]');
|
|
342
|
+
// }
|
|
343
|
+
|
|
340
344
|
//
|
|
341
345
|
// KEYBOARD
|
|
342
346
|
//
|
|
@@ -479,14 +483,21 @@ async function selectListbox(target, options, keepPreviouslySelected = false) {
|
|
|
479
483
|
// });
|
|
480
484
|
// }
|
|
481
485
|
|
|
482
|
-
function
|
|
483
|
-
|
|
486
|
+
function getCompositeItems(parent, selector, parentSelector) {
|
|
487
|
+
const items = [...parent.querySelectorAll(selector)];
|
|
488
|
+
{
|
|
489
|
+
// make sure to filter out descendands that are within a nested menu but not the root menu
|
|
490
|
+
return items.filter(item => {
|
|
491
|
+
const closestParent = item.closest(parentSelector);
|
|
492
|
+
return !closestParent || closestParent === parent;
|
|
493
|
+
});
|
|
494
|
+
}
|
|
484
495
|
}
|
|
485
496
|
|
|
486
497
|
const DEFAULT_SELECTORS = {
|
|
487
498
|
trigger: 'button',
|
|
488
499
|
menu: '[role="menu"]',
|
|
489
|
-
item: '
|
|
500
|
+
item: '[role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"]'
|
|
490
501
|
};
|
|
491
502
|
function setupMenuTest(assert, selectors) {
|
|
492
503
|
const fullSelectors = {
|
|
@@ -504,6 +515,9 @@ function setupMenuTest(assert, selectors) {
|
|
|
504
515
|
selectors: fullSelectors
|
|
505
516
|
};
|
|
506
517
|
}
|
|
518
|
+
function getItems(parent) {
|
|
519
|
+
return getCompositeItems(parent, '[role="menuitem"], [role="menuitemradio"], [role="menuitemcheckbox"]', 'menu, [role="menu"]');
|
|
520
|
+
}
|
|
507
521
|
|
|
508
522
|
//
|
|
509
523
|
// KEYBOARD
|
|
@@ -511,8 +525,7 @@ function setupMenuTest(assert, selectors) {
|
|
|
511
525
|
|
|
512
526
|
async function testMenuKeyboardNavigation(assert, selectors = DEFAULT_SELECTORS) {
|
|
513
527
|
const {
|
|
514
|
-
elements
|
|
515
|
-
selectors: allSelectors
|
|
528
|
+
elements
|
|
516
529
|
} = setupMenuTest(assert, selectors);
|
|
517
530
|
const {
|
|
518
531
|
trigger,
|
|
@@ -522,7 +535,7 @@ async function testMenuKeyboardNavigation(assert, selectors = DEFAULT_SELECTORS)
|
|
|
522
535
|
const socialMenu = getRootElement().querySelectorAll('[role="menu"]').item(2);
|
|
523
536
|
await click(trigger);
|
|
524
537
|
assert.true(menu.matches(':popover-open'), 'Main menu opened');
|
|
525
|
-
const items = getItems(menu
|
|
538
|
+
const items = getItems(menu);
|
|
526
539
|
const [first, second,, fourth] = items;
|
|
527
540
|
const last = items[items.length - 1];
|
|
528
541
|
assert.dom(first).hasAttribute('tabindex', '0', 'First item is activated');
|
|
@@ -542,14 +555,14 @@ async function testMenuKeyboardNavigation(assert, selectors = DEFAULT_SELECTORS)
|
|
|
542
555
|
assert.false(shareMenu.matches(':popover-open'), '`ArrowLeft` closes share menu');
|
|
543
556
|
|
|
544
557
|
// open sub-submenu and closing all of it
|
|
545
|
-
const shareItems = getItems(shareMenu
|
|
558
|
+
const shareItems = getItems(shareMenu);
|
|
546
559
|
await triggerKeyEvent(menu, 'keydown', 'ArrowRight');
|
|
547
560
|
assert.true(shareMenu.matches(':popover-open'), '`ArrowRight` opens share menu again');
|
|
548
561
|
await triggerKeyEvent(shareMenu, 'keydown', 'ArrowDown');
|
|
549
562
|
assert.dom(shareItems[1]).hasAttribute('tabindex', '0', '`ArrowDown` moves to the next item in the submenu');
|
|
550
563
|
await triggerKeyEvent(shareMenu, 'keydown', 'ArrowRight');
|
|
551
564
|
assert.true(socialMenu.matches(':popover-open'), '`ArrowRight` opens social menu');
|
|
552
|
-
const socialItems = getItems(socialMenu
|
|
565
|
+
const socialItems = getItems(socialMenu);
|
|
553
566
|
const spy = sinon.spy();
|
|
554
567
|
socialItems[0]?.addEventListener('click', spy, {
|
|
555
568
|
once: true
|
|
@@ -576,8 +589,7 @@ async function testMenuKeyboardNavigation(assert, selectors = DEFAULT_SELECTORS)
|
|
|
576
589
|
|
|
577
590
|
async function testMenuPointerNavigation(assert, selectors = DEFAULT_SELECTORS) {
|
|
578
591
|
const {
|
|
579
|
-
elements
|
|
580
|
-
selectors: allSelectors
|
|
592
|
+
elements
|
|
581
593
|
} = setupMenuTest(assert, selectors);
|
|
582
594
|
const {
|
|
583
595
|
trigger,
|
|
@@ -587,7 +599,7 @@ async function testMenuPointerNavigation(assert, selectors = DEFAULT_SELECTORS)
|
|
|
587
599
|
const socialMenu = getRootElement().querySelectorAll('[role="menu"]').item(2);
|
|
588
600
|
await click(trigger);
|
|
589
601
|
assert.true(menu.matches(':popover-open'), 'Main menu opened');
|
|
590
|
-
const items = getItems(menu
|
|
602
|
+
const items = getItems(menu);
|
|
591
603
|
const [first, second,, fourth, fifth] = items;
|
|
592
604
|
assert.dom(first).hasAttribute('tabindex', '0', 'First item is activated');
|
|
593
605
|
await triggerEvent(second, 'pointerover');
|
|
@@ -596,6 +608,9 @@ async function testMenuPointerNavigation(assert, selectors = DEFAULT_SELECTORS)
|
|
|
596
608
|
|
|
597
609
|
// assert.dom(fourth).hasAttribute('tabindex', '0', '`ArrowDown` 2x activates fourth item');
|
|
598
610
|
|
|
611
|
+
await click('[role="menu"] span');
|
|
612
|
+
assert.true(menu.matches(':popover-open'), 'Main menu still open after clicking a non-item inside the popover');
|
|
613
|
+
|
|
599
614
|
// open and close menu with Pointerover
|
|
600
615
|
|
|
601
616
|
assert.false(shareMenu.matches(':popover-open'), 'Share menu is closed');
|
|
@@ -607,7 +622,7 @@ async function testMenuPointerNavigation(assert, selectors = DEFAULT_SELECTORS)
|
|
|
607
622
|
assert.false(shareMenu.matches(':popover-open'), '`pointerover` fifth element closes share menu');
|
|
608
623
|
|
|
609
624
|
// open sub-submenu and closing all of it
|
|
610
|
-
const shareItems = getItems(shareMenu
|
|
625
|
+
const shareItems = getItems(shareMenu);
|
|
611
626
|
await triggerEvent(fourth, 'pointerover');
|
|
612
627
|
assert.true(shareMenu.matches(':popover-open'), '`pointerover` fourth element opens share menu again');
|
|
613
628
|
assert.dom(shareItems[0]).hasAttribute('tabindex', '0', 'first item is active');
|
|
@@ -619,7 +634,7 @@ async function testMenuPointerNavigation(assert, selectors = DEFAULT_SELECTORS)
|
|
|
619
634
|
}));
|
|
620
635
|
assert.dom(shareItems[1]).hasAttribute('tabindex', '0', '`pointerover` activates second item');
|
|
621
636
|
assert.true(socialMenu.matches(':popover-open'), '... and opens social menu');
|
|
622
|
-
const socialItems = getItems(socialMenu
|
|
637
|
+
const socialItems = getItems(socialMenu);
|
|
623
638
|
const spy = sinon.spy();
|
|
624
639
|
socialItems[0]?.addEventListener('click', spy, {
|
|
625
640
|
once: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/test-support/-private/-get-description.ts","../../src/test-support/-private/-target.ts","../../src/test-support/-private/-get-element.ts","../../src/test-support/-private/selection.ts","../../src/test-support/-private/list.ts","../../src/test-support/listbox.ts","../../src/test-support/-private/composite.ts","../../src/test-support/menu.ts"],"sourcesContent":["import { isDescriptor, lookupDescriptorData } from 'dom-element-descriptors';\n\nimport type { Target } from '@ember/test-helpers';\n\n/**\n Used internally by the DOM interaction helpers to get a description of a\n target for debug/error messaging.\n\n @private\n @param {Target} target the target\n @returns {string} a description of the target\n*/\nexport default function getDescription(target: Target): string {\n let data = isDescriptor(target) ? lookupDescriptorData(target) : null;\n\n if (data) {\n return data.description || '<unknown descriptor>';\n } else {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return target.toString();\n }\n}\n","import type { Target } from '@ember/test-helpers';\n\nexport interface HTMLElementContentEditable extends HTMLElement {\n isContentEditable: true;\n}\n\n// eslint-disable-next-line require-jsdoc\nexport function isElement(target: unknown): target is Element {\n return (\n target !== null &&\n typeof target === 'object' &&\n Reflect.get(target, 'nodeType') === Node.ELEMENT_NODE\n );\n}\n\n// eslint-disable-next-line require-jsdoc\nexport function isWindow(target: Target): target is Window {\n return target instanceof Window;\n}\n\n// eslint-disable-next-line require-jsdoc\nexport function isDocument(target: unknown): target is Document {\n return (\n target !== null &&\n typeof target === 'object' &&\n Reflect.get(target, 'nodeType') === Node.DOCUMENT_NODE\n );\n}\n\n// eslint-disable-next-line require-jsdoc\nexport function isContentEditable(element: Element): element is HTMLElementContentEditable {\n return 'isContentEditable' in element && (element as HTMLElement).isContentEditable;\n}\n","import { getRootElement } from '@ember/test-helpers';\n\nimport {\n type IDOMElementDescriptor,\n lookupDescriptorData,\n resolveDOMElement\n} from 'dom-element-descriptors';\n\nimport { isDocument, isElement } from './-target';\n\nimport type { Target } from '@ember/test-helpers';\n\nfunction getElement<K extends keyof (HTMLElementTagNameMap | SVGElementTagNameMap)>(\n target: K\n): (HTMLElementTagNameMap[K] | SVGElementTagNameMap[K]) | null;\nfunction getElement<K extends keyof HTMLElementTagNameMap>(\n target: K\n): HTMLElementTagNameMap[K] | null;\nfunction getElement<K extends keyof SVGElementTagNameMap>(\n target: K\n): SVGElementTagNameMap[K] | null;\nfunction getElement(target: string | IDOMElementDescriptor): Element | null;\nfunction getElement(target: Element): Element;\nfunction getElement(target: Document | Window): Document;\nfunction getElement(target: Target): Element | Document | null;\n/**\n Used internally by the DOM interaction helpers to find one element.\n\n @private\n @param {string|Element} target the element or selector to retrieve\n @returns {Element} the target or selector\n*/\nfunction getElement(target: Target): Element | Document | null {\n if (typeof target === 'string') {\n let rootElement = getRootElement();\n\n return rootElement.querySelector(target);\n } else if (isElement(target) || isDocument(target)) {\n return target;\n } else if (target instanceof Window) {\n return target.document;\n } else {\n let descriptorData = lookupDescriptorData(target);\n\n if (descriptorData) {\n return resolveDOMElement(descriptorData);\n } else {\n throw new Error('Must use an element, selector string, or DOM element descriptor');\n }\n }\n}\n\nexport default getElement;\n","import { triggerEvent } from '@ember/test-helpers';\n\nimport getDescription from './-get-description';\nimport getElement from './-get-element';\n\nimport type { Target } from '@ember/test-helpers';\n\nfunction errorMessage(message: string, target: Target, name: string) {\n let description = getDescription(target);\n\n return `${message} when calling \\`${name}('${description}')\\`.`;\n}\n\nexport function getOptions(parent: HTMLElement, selector: string): HTMLElement[] {\n return [...parent.querySelectorAll(selector)] as HTMLElement[];\n}\n\nfunction findOption(\n target: Target,\n text: string,\n {\n selectors\n }: {\n selectors: { option: string };\n }\n): HTMLElement | undefined {\n if (!target) {\n throw new Error(`Must pass an element, selector, or descriptor to \\`findOption\\`.`);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (typeof text === 'undefined' || text === null) {\n throw new Error(`Must provide an \\`text\\` to select when calling \\`findOption\\`.`);\n }\n\n const element = getElement(target);\n\n if (!element) {\n throw new Error(errorMessage('Element not found', target, 'findOption'));\n }\n\n return getOptions(element as HTMLElement, selectors.option).find((e) =>\n e.textContent?.trim().includes(text)\n );\n}\n\nexport function findOptions(\n target: Target,\n texts: string[],\n {\n selectors\n }: {\n selectors: { option: string };\n }\n): HTMLElement[] {\n if (!target) {\n throw new Error(`Must pass an element, selector, or descriptor to \\`findOption\\`.`);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (typeof texts === 'undefined' || texts === null) {\n throw new Error(`Must provide an \\`texts\\` to select when calling \\`findOption\\`.`);\n }\n\n const element = getElement(target);\n\n if (!element) {\n throw new Error(errorMessage('Element not found', target, 'findOption'));\n }\n\n return getOptions(element as HTMLElement, selectors.option).filter((e) =>\n texts.includes(e.textContent?.trim() as string)\n );\n}\n\nexport async function select(\n target: Target,\n options: string | string[],\n {\n keepPreviouslySelected = false,\n labels: { name, element: elementName },\n selectors\n }: {\n keepPreviouslySelected?: boolean;\n labels: { name: string; element: string };\n selectors: { option: string };\n }\n): Promise<void> {\n if (!target) {\n throw new Error(`Must pass an element, selector, or descriptor to \\`${name}\\`.`);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (typeof options === 'undefined' || options === null) {\n throw new Error(\n `Must provide an \\`option\\` or \\`options\\` to select when calling \\`${name}\\`.`\n );\n }\n\n const element = getElement(target);\n\n if (!element) {\n throw new Error(errorMessage('Element not found', target, name));\n }\n\n // if (!isSelectElement(element)) {\n // throw new Error(errorMessage('Element is not a HTMLSelectElement', target));\n // }\n\n // if (list.disabled) {\n // throw new Error(errorMessage('Element is disabled', selectors.list, name));\n // }\n\n const multi = (element as HTMLElement).getAttribute('aria-multiselectable') === 'true';\n\n if (!multi && Array.isArray(options)) {\n throw new Error(\n errorMessage(\n `${elementName} \\`multiple\\` attribute is set to \\`false\\` but multiple options were passed`,\n target,\n name\n )\n );\n }\n\n const optionElements = (\n Array.isArray(options)\n ? findOptions(element, options, { selectors })\n : [findOption(element, options, { selectors })]\n )\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n .filter((e) => e !== null) as HTMLElement[];\n\n const items = element.querySelectorAll(selectors.option);\n\n for (const item of items) {\n if (optionElements.includes(item as HTMLElement)) {\n item.setAttribute('aria-selected', 'true');\n } else if (!keepPreviouslySelected) {\n item.removeAttribute('aria-selected');\n }\n }\n\n await triggerEvent(element, 'change');\n}\n","import { triggerEvent, triggerKeyEvent } from '@ember/test-helpers';\n\nimport { getOptions } from './selection';\n\n//\n// KEYBOARD\n//\n\nexport async function testListboxKeyboardNavigation(\n assert: Assert,\n elements: {\n target: HTMLElement;\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { target, list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options;\n\n assert.dom(first).hasAria('current', 'true', 'First option is activated');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n\n assert.dom(second).hasAria('current', 'true', 'ArrowDown activates second option');\n assert.dom(first).doesNotHaveAria('current', '... and deactivates first option');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n\n assert.dom(last).hasAria('current', 'true', 'ArrowDown activates last option');\n\n await triggerKeyEvent(target, 'keydown', 'Home');\n assert.dom(first).hasAria('current', 'true', 'Home activates first option');\n\n await triggerKeyEvent(target, 'keydown', 'End');\n assert.dom(last).hasAria('current', 'true', 'End activates last option');\n}\n\nexport async function testListboxForKeyboardSingleSelection(\n assert: Assert,\n elements: {\n target: HTMLElement;\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { target, list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options;\n\n assert.dom(first).hasAria('current', 'true', 'First option is activated');\n assert.dom(first).hasAria('selected', 'true', '... and selected');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n assert.dom(second).hasAria('selected', 'true', 'ArrowDown selects second option');\n assert.dom(first).doesNotHaveAria('selected', '... and deselects first option');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n assert.dom(last).hasAria('selected', 'true', 'ArrowDown selects last option');\n\n await triggerKeyEvent(target, 'keydown', 'Home');\n assert.dom(first).hasAria('selected', 'true', 'Home selects first option');\n\n await triggerKeyEvent(target, 'keydown', 'End');\n assert.dom(last).hasAria('selected', 'true', 'End selects last option');\n}\n\nexport async function testListboxForKeyboardMultiSelection(\n assert: Assert,\n elements: {\n target: HTMLElement;\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { target, list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options;\n\n assert.dom(first).hasAria('current', 'true', 'First option is activated');\n assert.dom(first).doesNotHaveAria('selected', '... and not selected');\n\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(first).hasAria('selected', 'true', 'SPACE selects first option');\n\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(first).doesNotHaveAria('selected', 'SPACE deselects first option');\n\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(first).hasAria('selected', 'true', 'SPACE selects first option');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(second).hasAria('selected', 'true', 'ArrowDown + SPACE selects second option');\n assert.dom(first).hasAria('selected', 'true', '... and first option still selected');\n\n await triggerKeyEvent(target, 'keydown', 'End');\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(last).hasAria('selected', 'true', 'End + SPACE selects last option');\n assert.dom(first).hasAria('selected', 'true', '... and first option still selected');\n assert.dom(second).hasAria('selected', 'true', '... and second option still selected');\n\n await triggerKeyEvent(target, 'keydown', 'Home');\n await triggerKeyEvent(target, 'keydown', ' ');\n\n assert.dom(first).doesNotHaveAria('selected', 'Home + SPACE deselects first option');\n assert.dom(second).hasAria('selected', 'true', '... and second option still selected');\n assert.dom(last).hasAria('selected', 'true', '... and last option still selected');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(second).doesNotHaveAria('selected', 'ArrowDown + SPACE deselects second option');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(last).doesNotHaveAria('selected', 'ArrowDown + SPACE deselects last option');\n\n await triggerKeyEvent(target, 'keydown', 'KeyA', { metaKey: true });\n assert.dom(first).hasAria('selected', 'true', 'Meta + A selects all');\n assert.dom(second).hasAria('selected', 'true', '... second option selected');\n assert.dom(last).hasAria('selected', 'true', '... last option selected');\n}\n\n//\n// MOUSE\n//\n\nexport async function testListboxPointerNavigation(\n assert: Assert,\n elements: {\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options as [HTMLElement, HTMLElement, HTMLElement];\n\n await triggerEvent(first, 'pointerup');\n assert.dom(first).hasAria('current', 'true', 'Clicking first option activates it');\n\n await triggerEvent(second, 'pointerup');\n assert.dom(second).hasAria('current', 'true', 'Clicking second option activates it');\n assert.dom(first).doesNotHaveAria('current', '... and deactivates first option');\n\n await triggerEvent(last, 'pointerup');\n assert.dom(last).hasAria('current', 'true', 'Clicking last option activates it');\n assert.dom(second).doesNotHaveAria('current', '... and deactivates second option');\n}\n\nexport async function testListboxForPointerSingleSelection(\n assert: Assert,\n elements: {\n target: HTMLElement;\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options as [HTMLElement, HTMLElement, HTMLElement];\n\n await triggerEvent(first, 'pointerup', { bubbles: true });\n assert.dom(first).hasAria('selected', 'true', 'Clicking first option selects it');\n\n await triggerEvent(second, 'pointerup');\n assert.dom(second).hasAria('selected', 'true', 'Clicking second option selects it');\n assert.dom(first).doesNotHaveAria('selected', '... and deselects first option');\n\n await triggerEvent(last, 'pointerup');\n assert.dom(last).hasAria('selected', 'true', 'Clicking last option selects it');\n assert.dom(second).doesNotHaveAria('selected', '... and deselects second option');\n}\n\nexport async function testListboxForPointerMultiSelection(\n assert: Assert,\n elements: {\n target: HTMLElement;\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options as [HTMLElement, HTMLElement, HTMLElement];\n\n await triggerEvent(first, 'pointerup');\n assert.dom(first).hasAria('selected', 'true', 'Clicking first option selects it');\n\n await triggerEvent(first, 'pointerup', { metaKey: true });\n assert.dom(first).doesNotHaveAria('selected', 'Clicking first option deselects it');\n\n await triggerEvent(first, 'pointerup');\n assert.dom(first).hasAria('selected', 'true', 'Clicking first option selects it');\n\n await triggerEvent(second, 'pointerup', { metaKey: true });\n assert.dom(second).hasAria('selected', 'true', 'Clicking second option (with meta) selects it');\n assert.dom(first).hasAria('selected', 'true', '... and first option still selected');\n\n await triggerEvent(last, 'pointerup', { metaKey: true });\n\n assert.dom(last).hasAria('selected', 'true', 'Clicking last option (with meta) selects it');\n assert.dom(first).hasAria('selected', 'true', '... and first option still selected');\n assert.dom(second).hasAria('selected', 'true', '... and second option still selected');\n\n await triggerEvent(first, 'pointerup', { metaKey: true });\n\n assert.dom(first).doesNotHaveAria('selected', 'Clicking first option (with meta) deselects it');\n assert.dom(second).hasAria('selected', 'true', '... and second option still selected');\n assert.dom(last).hasAria('selected', 'true', '... and last option still selected');\n\n await triggerEvent(second, 'pointerup', { metaKey: true });\n assert.dom(second).doesNotHaveAria('selected', 'Clicking second option (with meta) deselects it');\n\n await triggerEvent(last, 'pointerup', { metaKey: true });\n assert.dom(last).doesNotHaveAria('selected', 'Clicking last option (with meta) deselects it');\n\n await triggerEvent(first, 'pointerup');\n assert.dom(first).hasAria('selected', 'true', 'Clicking first option selects it');\n\n await triggerEvent(last, 'pointerup', { shiftKey: true });\n assert.dom(last).hasAria('selected', 'true', 'Clicking last option (with shift) selects it');\n assert.dom(second).hasAria('selected', 'true', '... and second option, too');\n}\n","import { focus, getRootElement } from '@ember/test-helpers';\n\nimport {\n testListboxForKeyboardMultiSelection,\n testListboxForKeyboardSingleSelection,\n testListboxForPointerMultiSelection,\n testListboxForPointerSingleSelection,\n testListboxKeyboardNavigation,\n testListboxPointerNavigation\n} from './-private/list';\nimport { select } from './-private/selection';\n\nimport type { Target } from '@ember/test-helpers';\n\ntype Selectors = {\n trigger: string;\n list: string;\n option: string;\n};\n\ntype Elements = {\n trigger: HTMLElement;\n list: HTMLElement;\n};\n\nconst DEFAULT_SELECTORS = {\n trigger: '[role=\"listbox\"]',\n list: '[role=\"listbox\"]',\n option: '[role=\"option\"]'\n};\n\nfunction setupListTest(\n assert: Assert,\n selectors: Partial<Selectors>\n): { elements: Elements; selectors: Selectors } {\n const fullSelectors = { ...DEFAULT_SELECTORS, ...selectors };\n const list = getRootElement().querySelector(selectors.list as string);\n\n assert.dom(list).exists('list exists');\n\n return {\n elements: {\n trigger: list as HTMLElement,\n list: list as HTMLElement\n },\n selectors: fullSelectors\n };\n}\n\n//\n// KEYBOARD\n//\n\nexport async function testListKeyboardNavigation(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements, selectors: allSelectors } = setupListTest(assert, selectors);\n\n const { trigger, list } = elements;\n\n await focus(list);\n\n await testListboxKeyboardNavigation(\n assert,\n {\n target: trigger,\n list\n },\n {\n option: allSelectors.option\n }\n );\n}\n\nasync function testListForKeyboardSingleSelection(\n assert: Assert,\n elements: Elements,\n selectors: Selectors\n) {\n const { trigger, list } = elements;\n\n await focus(list);\n await testListboxForKeyboardSingleSelection(\n assert,\n {\n target: trigger,\n list\n },\n {\n option: selectors.option\n }\n );\n}\n\nasync function testListForKeyboardMultiSelection(\n assert: Assert,\n elements: Elements,\n selectors: Selectors\n) {\n const { trigger, list } = elements;\n\n await focus(list);\n await testListboxForKeyboardMultiSelection(\n assert,\n {\n target: trigger,\n list\n },\n {\n option: selectors.option\n }\n );\n}\n\nexport async function testListKeyboardSelection(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements, selectors: allSelectors } = setupListTest(assert, selectors);\n const multi = elements.list.getAttribute('aria-multiselectable');\n\n await (multi\n ? testListForKeyboardMultiSelection(assert, elements, allSelectors)\n : testListForKeyboardSingleSelection(assert, elements, allSelectors));\n}\n\n//\n// MOUSE\n//\n\nexport async function testListPointerNavigation(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements, selectors: allSelectors } = setupListTest(assert, selectors);\n\n const { list } = elements;\n\n await testListboxPointerNavigation(\n assert,\n {\n list\n },\n {\n option: allSelectors.option\n }\n );\n}\n\nasync function testListForPointerSingleSelection(\n assert: Assert,\n elements: Elements,\n selectors: Selectors\n) {\n const { trigger, list } = elements;\n\n await testListboxForPointerSingleSelection(\n assert,\n {\n target: trigger,\n list\n },\n {\n option: selectors.option\n }\n );\n}\n\nasync function testListForPointerMultiSelection(\n assert: Assert,\n elements: Elements,\n selectors: Selectors\n) {\n const { trigger, list } = elements;\n\n await testListboxForPointerMultiSelection(\n assert,\n {\n target: trigger,\n list\n },\n {\n option: selectors.option\n }\n );\n}\n\nexport async function testListPointerSelection(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements, selectors: allSelectors } = setupListTest(assert, selectors);\n const multi = elements.list.getAttribute('aria-multiselectable');\n\n await (multi\n ? testListForPointerMultiSelection(assert, elements, allSelectors)\n : testListForPointerSingleSelection(assert, elements, allSelectors));\n}\n\n//\n// BEHAVIOR\n//\n\nexport async function selectListbox(\n target: Target,\n options: string | string[],\n keepPreviouslySelected = false\n) {\n await select(target, options, {\n keepPreviouslySelected,\n labels: { name: 'selectListbox', element: 'Listbox' },\n selectors: {\n option: DEFAULT_SELECTORS.option\n }\n });\n}\n\n//\n// utility functions\n//\n\n// export function findListboxOption(target: Target, text: string) {\n// return findOption(target, text, {\n// selectors: { option: DEFAULT_SELECTORS.option },\n// labels: { name: 'findListboxOption' }\n// });\n// }\n\n// export function findListboxOptions(target: Target, texts: string[]) {\n// return findOptions(target, texts, {\n// selectors: { option: DEFAULT_SELECTORS.option },\n// labels: { name: 'findListboxOptions' }\n// });\n// }\n","export function getItems(parent: HTMLElement, selector: string): HTMLElement[] {\n return [...parent.querySelectorAll(selector)] as HTMLElement[];\n}\n","import { click, getRootElement, triggerEvent, triggerKeyEvent } from '@ember/test-helpers';\n\nimport sinon from 'sinon';\n\nimport { getItems } from './-private/composite';\n\ntype Selectors = {\n trigger: string;\n menu: string;\n item: string;\n};\n\ntype Elements = {\n trigger: HTMLElement;\n menu: HTMLElement;\n};\n\nconst DEFAULT_SELECTORS = {\n trigger: 'button',\n menu: '[role=\"menu\"]',\n item: '& > [role=\"menuitem\"]'\n};\n\nfunction setupMenuTest(\n assert: Assert,\n selectors: Partial<Selectors>\n): { elements: Elements; selectors: Selectors } {\n const fullSelectors = { ...DEFAULT_SELECTORS, ...selectors };\n const menu = getRootElement().querySelector(selectors.menu as string);\n const trigger = getRootElement().querySelector(selectors.trigger as string);\n\n assert.dom(menu).exists('Menu exists');\n\n return {\n elements: {\n trigger: (trigger as HTMLElement | null) ?? (menu as HTMLElement),\n menu: menu as HTMLElement\n },\n selectors: fullSelectors\n };\n}\n\n//\n// KEYBOARD\n//\n\nexport async function testMenuKeyboardNavigation(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements, selectors: allSelectors } = setupMenuTest(assert, selectors);\n const { trigger, menu } = elements;\n\n const shareMenu = getRootElement().querySelectorAll('[role=\"menu\"]').item(1) as HTMLElement;\n const socialMenu = getRootElement().querySelectorAll('[role=\"menu\"]').item(2) as HTMLElement;\n\n await click(trigger);\n\n assert.true(menu.matches(':popover-open'), 'Main menu opened');\n\n const items = getItems(menu, allSelectors.item);\n const [first, second, , fourth] = items;\n const last = items[items.length - 1];\n\n assert.dom(first).hasAttribute('tabindex', '0', 'First item is activated');\n\n await triggerKeyEvent(menu, 'keydown', 'ArrowDown');\n\n assert.dom(second).hasAttribute('tabindex', '0', '`ArrowDown` activates second item');\n assert.dom(first).hasAttribute('tabindex', '-1', '... and deactivates first item');\n\n await triggerKeyEvent(menu, 'keydown', 'ArrowDown');\n await triggerKeyEvent(menu, 'keydown', 'ArrowDown');\n\n assert.dom(fourth).hasAttribute('tabindex', '0', '`ArrowDown` 2x activates fourth item');\n\n // open and close menu with ArrowRight / ArrowLeft\n\n assert.false(shareMenu.matches(':popover-open'), 'Share menu is closed');\n\n await triggerKeyEvent(menu, 'keydown', 'ArrowRight');\n assert.true(shareMenu.matches(':popover-open'), '`ArrowRight` opens share menu');\n\n await triggerKeyEvent(shareMenu, 'keydown', 'ArrowLeft');\n assert.false(shareMenu.matches(':popover-open'), '`ArrowLeft` closes share menu');\n\n // open sub-submenu and closing all of it\n const shareItems = getItems(shareMenu, allSelectors.item);\n\n await triggerKeyEvent(menu, 'keydown', 'ArrowRight');\n assert.true(shareMenu.matches(':popover-open'), '`ArrowRight` opens share menu again');\n\n await triggerKeyEvent(shareMenu, 'keydown', 'ArrowDown');\n\n assert\n .dom(shareItems[1])\n .hasAttribute('tabindex', '0', '`ArrowDown` moves to the next item in the submenu');\n\n await triggerKeyEvent(shareMenu, 'keydown', 'ArrowRight');\n assert.true(socialMenu.matches(':popover-open'), '`ArrowRight` opens social menu');\n\n const socialItems = getItems(socialMenu, allSelectors.item);\n const spy = sinon.spy();\n\n socialItems[0]?.addEventListener('click', spy, { once: true });\n\n // await click(socialItems[0] as HTMLElement);\n await triggerKeyEvent(socialMenu, 'keydown', 'Enter');\n\n assert.true(spy.calledOnce, '`Enter` invokes menu item');\n\n assert.false(socialMenu.matches(':popover-open'), 'Social menu is closed');\n assert.false(shareMenu.matches(':popover-open'), 'Share menu closed');\n assert.false(menu.matches(':popover-open'), 'Main menu closed');\n\n // Home + End\n await click(trigger);\n\n await triggerKeyEvent(menu, 'keydown', 'End');\n assert.dom(last).hasAttribute('tabindex', '0', '`End` activates last item');\n\n await triggerKeyEvent(menu, 'keydown', 'Home');\n assert.dom(first).hasAttribute('tabindex', '0', '`Home` activates first item');\n}\n\n//\n// POINTER\n//\n\nexport async function testMenuPointerNavigation(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements, selectors: allSelectors } = setupMenuTest(assert, selectors);\n const { trigger, menu } = elements;\n\n const shareMenu = getRootElement().querySelectorAll('[role=\"menu\"]').item(1) as HTMLElement;\n const socialMenu = getRootElement().querySelectorAll('[role=\"menu\"]').item(2) as HTMLElement;\n\n await click(trigger);\n\n assert.true(menu.matches(':popover-open'), 'Main menu opened');\n\n const items = getItems(menu, allSelectors.item);\n const [first, second, , fourth, fifth] = items;\n\n assert.dom(first).hasAttribute('tabindex', '0', 'First item is activated');\n\n await triggerEvent(second as HTMLElement, 'pointerover');\n\n assert.dom(second).hasAttribute('tabindex', '0', '`pointerover` activates second item');\n assert.dom(first).hasAttribute('tabindex', '-1', '... and deactivates first item');\n\n // assert.dom(fourth).hasAttribute('tabindex', '0', '`ArrowDown` 2x activates fourth item');\n\n // open and close menu with Pointerover\n\n assert.false(shareMenu.matches(':popover-open'), 'Share menu is closed');\n\n await triggerEvent(fourth as HTMLElement, 'pointerover');\n assert.dom(fourth).hasAttribute('tabindex', '0', '`pointerover` activates fourth item');\n assert.true(shareMenu.matches(':popover-open'), '`pointerover` fourth element opens share menu');\n\n await triggerEvent(fifth as HTMLElement, 'pointerover');\n assert.dom(fifth).hasAttribute('tabindex', '0', '`pointerover` activates fifth item');\n assert.false(shareMenu.matches(':popover-open'), '`pointerover` fifth element closes share menu');\n\n // open sub-submenu and closing all of it\n const shareItems = getItems(shareMenu, allSelectors.item);\n\n await triggerEvent(fourth as HTMLElement, 'pointerover');\n assert.true(\n shareMenu.matches(':popover-open'),\n '`pointerover` fourth element opens share menu again'\n );\n\n assert.dom(shareItems[0] as HTMLElement).hasAttribute('tabindex', '0', 'first item is active');\n\n // huh? Why does the second line work, but not the first one?\n // await triggerEvent(shareItems[1] as HTMLElement, 'pointover');\n (shareItems[1] as HTMLElement).dispatchEvent(new Event('pointerover', { bubbles: true }));\n\n assert\n .dom(shareItems[1] as HTMLElement)\n .hasAttribute('tabindex', '0', '`pointerover` activates second item');\n\n assert.true(socialMenu.matches(':popover-open'), '... and opens social menu');\n\n const socialItems = getItems(socialMenu, allSelectors.item);\n const spy = sinon.spy();\n\n socialItems[0]?.addEventListener('click', spy, { once: true });\n\n // see: https://github.com/emberjs/ember-test-helpers/issues/267\n await triggerEvent(socialItems[0] as HTMLElement, 'pointerup');\n (socialItems[0] as HTMLElement).click();\n\n assert.true(spy.calledOnce, '`Enter` invokes menu item');\n\n assert.false(socialMenu.matches(':popover-open'), 'Social menu is closed');\n assert.false(shareMenu.matches(':popover-open'), 'Share menu closed');\n assert.false(menu.matches(':popover-open'), 'Main menu closed');\n}\n"],"names":["getDescription","target","data","isDescriptor","lookupDescriptorData","description","toString","isElement","Reflect","get","Node","ELEMENT_NODE","isDocument","DOCUMENT_NODE","getElement","rootElement","getRootElement","querySelector","Window","document","descriptorData","resolveDOMElement","Error","errorMessage","message","name","getOptions","parent","selector","querySelectorAll","findOption","text","selectors","element","option","find","e","textContent","trim","includes","findOptions","texts","filter","select","options","keepPreviouslySelected","labels","elementName","multi","getAttribute","Array","isArray","optionElements","items","item","setAttribute","removeAttribute","triggerEvent","testListboxKeyboardNavigation","assert","elements","list","first","second","last","dom","hasAria","triggerKeyEvent","doesNotHaveAria","testListboxForKeyboardSingleSelection","testListboxForKeyboardMultiSelection","metaKey","testListboxPointerNavigation","testListboxForPointerSingleSelection","bubbles","testListboxForPointerMultiSelection","shiftKey","DEFAULT_SELECTORS","trigger","setupListTest","fullSelectors","exists","testListKeyboardNavigation","allSelectors","focus","testListForKeyboardSingleSelection","testListForKeyboardMultiSelection","testListKeyboardSelection","testListPointerNavigation","testListForPointerSingleSelection","testListForPointerMultiSelection","testListPointerSelection","selectListbox","getItems","menu","setupMenuTest","testMenuKeyboardNavigation","shareMenu","socialMenu","click","true","matches","fourth","length","hasAttribute","false","shareItems","socialItems","spy","sinon","addEventListener","once","calledOnce","testMenuPointerNavigation","fifth","dispatchEvent","Event"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/test-support/-private/-get-description.ts","../../src/test-support/-private/-target.ts","../../src/test-support/-private/-get-element.ts","../../src/test-support/-private/selection.ts","../../src/test-support/-private/list.ts","../../src/test-support/listbox.ts","../../src/test-support/-private/composite.ts","../../src/test-support/menu.ts"],"sourcesContent":["import { isDescriptor, lookupDescriptorData } from 'dom-element-descriptors';\n\nimport type { Target } from '@ember/test-helpers';\n\n/**\n Used internally by the DOM interaction helpers to get a description of a\n target for debug/error messaging.\n\n @private\n @param {Target} target the target\n @returns {string} a description of the target\n*/\nexport default function getDescription(target: Target): string {\n let data = isDescriptor(target) ? lookupDescriptorData(target) : null;\n\n if (data) {\n return data.description || '<unknown descriptor>';\n } else {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return target.toString();\n }\n}\n","import type { Target } from '@ember/test-helpers';\n\nexport interface HTMLElementContentEditable extends HTMLElement {\n isContentEditable: true;\n}\n\n// eslint-disable-next-line require-jsdoc\nexport function isElement(target: unknown): target is Element {\n return (\n target !== null &&\n typeof target === 'object' &&\n Reflect.get(target, 'nodeType') === Node.ELEMENT_NODE\n );\n}\n\n// eslint-disable-next-line require-jsdoc\nexport function isWindow(target: Target): target is Window {\n return target instanceof Window;\n}\n\n// eslint-disable-next-line require-jsdoc\nexport function isDocument(target: unknown): target is Document {\n return (\n target !== null &&\n typeof target === 'object' &&\n Reflect.get(target, 'nodeType') === Node.DOCUMENT_NODE\n );\n}\n\n// eslint-disable-next-line require-jsdoc\nexport function isContentEditable(element: Element): element is HTMLElementContentEditable {\n return 'isContentEditable' in element && (element as HTMLElement).isContentEditable;\n}\n","import { getRootElement } from '@ember/test-helpers';\n\nimport {\n type IDOMElementDescriptor,\n lookupDescriptorData,\n resolveDOMElement\n} from 'dom-element-descriptors';\n\nimport { isDocument, isElement } from './-target';\n\nimport type { Target } from '@ember/test-helpers';\n\nfunction getElement<K extends keyof (HTMLElementTagNameMap | SVGElementTagNameMap)>(\n target: K\n): (HTMLElementTagNameMap[K] | SVGElementTagNameMap[K]) | null;\nfunction getElement<K extends keyof HTMLElementTagNameMap>(\n target: K\n): HTMLElementTagNameMap[K] | null;\nfunction getElement<K extends keyof SVGElementTagNameMap>(\n target: K\n): SVGElementTagNameMap[K] | null;\nfunction getElement(target: string | IDOMElementDescriptor): Element | null;\nfunction getElement(target: Element): Element;\nfunction getElement(target: Document | Window): Document;\nfunction getElement(target: Target): Element | Document | null;\n\n/**\n Used internally by the DOM interaction helpers to find one element.\n\n @private\n @param {string|Element} target the element or selector to retrieve\n @returns {Element} the target or selector\n*/\nfunction getElement(target: Target): Element | Document | null {\n if (typeof target === 'string') {\n let rootElement = getRootElement();\n\n return rootElement.querySelector(target);\n } else if (isElement(target) || isDocument(target)) {\n return target;\n } else if (target instanceof Window) {\n return target.document;\n } else {\n let descriptorData = lookupDescriptorData(target);\n\n if (descriptorData) {\n return resolveDOMElement(descriptorData);\n } else {\n throw new Error('Must use an element, selector string, or DOM element descriptor');\n }\n }\n}\n\nexport default getElement;\n","import { triggerEvent } from '@ember/test-helpers';\n\nimport getDescription from './-get-description';\nimport getElement from './-get-element';\n\nimport type { Target } from '@ember/test-helpers';\n\nfunction errorMessage(message: string, target: Target, name: string) {\n let description = getDescription(target);\n\n return `${message} when calling \\`${name}('${description}')\\`.`;\n}\n\nexport function getOptions(parent: HTMLElement, selector: string): HTMLElement[] {\n return [...parent.querySelectorAll(selector)] as HTMLElement[];\n}\n\nfunction findOption(\n target: Target,\n text: string,\n {\n selectors\n }: {\n selectors: { option: string };\n }\n): HTMLElement | undefined {\n if (!target) {\n throw new Error(`Must pass an element, selector, or descriptor to \\`findOption\\`.`);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (typeof text === 'undefined' || text === null) {\n throw new Error(`Must provide an \\`text\\` to select when calling \\`findOption\\`.`);\n }\n\n const element = getElement(target);\n\n if (!element) {\n throw new Error(errorMessage('Element not found', target, 'findOption'));\n }\n\n return getOptions(element as HTMLElement, selectors.option).find((e) =>\n e.textContent?.trim().includes(text)\n );\n}\n\nexport function findOptions(\n target: Target,\n texts: string[],\n {\n selectors\n }: {\n selectors: { option: string };\n }\n): HTMLElement[] {\n if (!target) {\n throw new Error(`Must pass an element, selector, or descriptor to \\`findOption\\`.`);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (typeof texts === 'undefined' || texts === null) {\n throw new Error(`Must provide an \\`texts\\` to select when calling \\`findOption\\`.`);\n }\n\n const element = getElement(target);\n\n if (!element) {\n throw new Error(errorMessage('Element not found', target, 'findOption'));\n }\n\n return getOptions(element as HTMLElement, selectors.option).filter((e) =>\n texts.includes(e.textContent?.trim() as string)\n );\n}\n\nexport async function select(\n target: Target,\n options: string | string[],\n {\n keepPreviouslySelected = false,\n labels: { name, element: elementName },\n selectors\n }: {\n keepPreviouslySelected?: boolean;\n labels: { name: string; element: string };\n selectors: { option: string };\n }\n): Promise<void> {\n if (!target) {\n throw new Error(`Must pass an element, selector, or descriptor to \\`${name}\\`.`);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (typeof options === 'undefined' || options === null) {\n throw new Error(\n `Must provide an \\`option\\` or \\`options\\` to select when calling \\`${name}\\`.`\n );\n }\n\n const element = getElement(target);\n\n if (!element) {\n throw new Error(errorMessage('Element not found', target, name));\n }\n\n // if (!isSelectElement(element)) {\n // throw new Error(errorMessage('Element is not a HTMLSelectElement', target));\n // }\n\n // if (list.disabled) {\n // throw new Error(errorMessage('Element is disabled', selectors.list, name));\n // }\n\n const multi = (element as HTMLElement).getAttribute('aria-multiselectable') === 'true';\n\n if (!multi && Array.isArray(options)) {\n throw new Error(\n errorMessage(\n `${elementName} \\`multiple\\` attribute is set to \\`false\\` but multiple options were passed`,\n target,\n name\n )\n );\n }\n\n const optionElements = (\n Array.isArray(options)\n ? findOptions(element, options, { selectors })\n : [findOption(element, options, { selectors })]\n )\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n .filter((e) => e !== null) as HTMLElement[];\n\n const items = element.querySelectorAll(selectors.option);\n\n for (const item of items) {\n if (optionElements.includes(item as HTMLElement)) {\n item.setAttribute('aria-selected', 'true');\n } else if (!keepPreviouslySelected) {\n item.removeAttribute('aria-selected');\n }\n }\n\n await triggerEvent(element, 'change');\n}\n","import { triggerEvent, triggerKeyEvent } from '@ember/test-helpers';\n\nimport { getOptions } from './selection';\n\n//\n// KEYBOARD\n//\n\nexport async function testListboxKeyboardNavigation(\n assert: Assert,\n elements: {\n target: HTMLElement;\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { target, list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options;\n\n assert.dom(first).hasAria('current', 'true', 'First option is activated');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n\n assert.dom(second).hasAria('current', 'true', 'ArrowDown activates second option');\n assert.dom(first).doesNotHaveAria('current', '... and deactivates first option');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n\n assert.dom(last).hasAria('current', 'true', 'ArrowDown activates last option');\n\n await triggerKeyEvent(target, 'keydown', 'Home');\n assert.dom(first).hasAria('current', 'true', 'Home activates first option');\n\n await triggerKeyEvent(target, 'keydown', 'End');\n assert.dom(last).hasAria('current', 'true', 'End activates last option');\n}\n\nexport async function testListboxForKeyboardSingleSelection(\n assert: Assert,\n elements: {\n target: HTMLElement;\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { target, list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options;\n\n assert.dom(first).hasAria('current', 'true', 'First option is activated');\n assert.dom(first).hasAria('selected', 'true', '... and selected');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n assert.dom(second).hasAria('selected', 'true', 'ArrowDown selects second option');\n assert.dom(first).doesNotHaveAria('selected', '... and deselects first option');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n assert.dom(last).hasAria('selected', 'true', 'ArrowDown selects last option');\n\n await triggerKeyEvent(target, 'keydown', 'Home');\n assert.dom(first).hasAria('selected', 'true', 'Home selects first option');\n\n await triggerKeyEvent(target, 'keydown', 'End');\n assert.dom(last).hasAria('selected', 'true', 'End selects last option');\n}\n\nexport async function testListboxForKeyboardMultiSelection(\n assert: Assert,\n elements: {\n target: HTMLElement;\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { target, list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options;\n\n assert.dom(first).hasAria('current', 'true', 'First option is activated');\n assert.dom(first).doesNotHaveAria('selected', '... and not selected');\n\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(first).hasAria('selected', 'true', 'SPACE selects first option');\n\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(first).doesNotHaveAria('selected', 'SPACE deselects first option');\n\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(first).hasAria('selected', 'true', 'SPACE selects first option');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(second).hasAria('selected', 'true', 'ArrowDown + SPACE selects second option');\n assert.dom(first).hasAria('selected', 'true', '... and first option still selected');\n\n await triggerKeyEvent(target, 'keydown', 'End');\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(last).hasAria('selected', 'true', 'End + SPACE selects last option');\n assert.dom(first).hasAria('selected', 'true', '... and first option still selected');\n assert.dom(second).hasAria('selected', 'true', '... and second option still selected');\n\n await triggerKeyEvent(target, 'keydown', 'Home');\n await triggerKeyEvent(target, 'keydown', ' ');\n\n assert.dom(first).doesNotHaveAria('selected', 'Home + SPACE deselects first option');\n assert.dom(second).hasAria('selected', 'true', '... and second option still selected');\n assert.dom(last).hasAria('selected', 'true', '... and last option still selected');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(second).doesNotHaveAria('selected', 'ArrowDown + SPACE deselects second option');\n\n await triggerKeyEvent(target, 'keydown', 'ArrowDown');\n await triggerKeyEvent(target, 'keydown', ' ');\n assert.dom(last).doesNotHaveAria('selected', 'ArrowDown + SPACE deselects last option');\n\n await triggerKeyEvent(target, 'keydown', 'KeyA', { metaKey: true });\n assert.dom(first).hasAria('selected', 'true', 'Meta + A selects all');\n assert.dom(second).hasAria('selected', 'true', '... second option selected');\n assert.dom(last).hasAria('selected', 'true', '... last option selected');\n}\n\n//\n// MOUSE\n//\n\nexport async function testListboxPointerNavigation(\n assert: Assert,\n elements: {\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options as [HTMLElement, HTMLElement, HTMLElement];\n\n await triggerEvent(first, 'pointerup');\n assert.dom(first).hasAria('current', 'true', 'Clicking first option activates it');\n\n await triggerEvent(second, 'pointerup');\n assert.dom(second).hasAria('current', 'true', 'Clicking second option activates it');\n assert.dom(first).doesNotHaveAria('current', '... and deactivates first option');\n\n await triggerEvent(last, 'pointerup');\n assert.dom(last).hasAria('current', 'true', 'Clicking last option activates it');\n assert.dom(second).doesNotHaveAria('current', '... and deactivates second option');\n}\n\nexport async function testListboxForPointerSingleSelection(\n assert: Assert,\n elements: {\n target: HTMLElement;\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options as [HTMLElement, HTMLElement, HTMLElement];\n\n await triggerEvent(first, 'pointerup', { bubbles: true });\n assert.dom(first).hasAria('selected', 'true', 'Clicking first option selects it');\n\n await triggerEvent(second, 'pointerup');\n assert.dom(second).hasAria('selected', 'true', 'Clicking second option selects it');\n assert.dom(first).doesNotHaveAria('selected', '... and deselects first option');\n\n await triggerEvent(last, 'pointerup');\n assert.dom(last).hasAria('selected', 'true', 'Clicking last option selects it');\n assert.dom(second).doesNotHaveAria('selected', '... and deselects second option');\n}\n\nexport async function testListboxForPointerMultiSelection(\n assert: Assert,\n elements: {\n target: HTMLElement;\n list: HTMLElement;\n },\n selectors: {\n option: string;\n }\n): Promise<void> {\n const { list } = elements;\n const options = getOptions(list, selectors.option);\n const [first, second, last] = options as [HTMLElement, HTMLElement, HTMLElement];\n\n await triggerEvent(first, 'pointerup');\n assert.dom(first).hasAria('selected', 'true', 'Clicking first option selects it');\n\n await triggerEvent(first, 'pointerup', { metaKey: true });\n assert.dom(first).doesNotHaveAria('selected', 'Clicking first option deselects it');\n\n await triggerEvent(first, 'pointerup');\n assert.dom(first).hasAria('selected', 'true', 'Clicking first option selects it');\n\n await triggerEvent(second, 'pointerup', { metaKey: true });\n assert.dom(second).hasAria('selected', 'true', 'Clicking second option (with meta) selects it');\n assert.dom(first).hasAria('selected', 'true', '... and first option still selected');\n\n await triggerEvent(last, 'pointerup', { metaKey: true });\n\n assert.dom(last).hasAria('selected', 'true', 'Clicking last option (with meta) selects it');\n assert.dom(first).hasAria('selected', 'true', '... and first option still selected');\n assert.dom(second).hasAria('selected', 'true', '... and second option still selected');\n\n await triggerEvent(first, 'pointerup', { metaKey: true });\n\n assert.dom(first).doesNotHaveAria('selected', 'Clicking first option (with meta) deselects it');\n assert.dom(second).hasAria('selected', 'true', '... and second option still selected');\n assert.dom(last).hasAria('selected', 'true', '... and last option still selected');\n\n await triggerEvent(second, 'pointerup', { metaKey: true });\n assert.dom(second).doesNotHaveAria('selected', 'Clicking second option (with meta) deselects it');\n\n await triggerEvent(last, 'pointerup', { metaKey: true });\n assert.dom(last).doesNotHaveAria('selected', 'Clicking last option (with meta) deselects it');\n\n await triggerEvent(first, 'pointerup');\n assert.dom(first).hasAria('selected', 'true', 'Clicking first option selects it');\n\n await triggerEvent(last, 'pointerup', { shiftKey: true });\n assert.dom(last).hasAria('selected', 'true', 'Clicking last option (with shift) selects it');\n assert.dom(second).hasAria('selected', 'true', '... and second option, too');\n}\n","import { focus, getRootElement } from '@ember/test-helpers';\n\nimport {\n testListboxForKeyboardMultiSelection,\n testListboxForKeyboardSingleSelection,\n testListboxForPointerMultiSelection,\n testListboxForPointerSingleSelection,\n testListboxKeyboardNavigation,\n testListboxPointerNavigation\n} from './-private/list';\nimport { select } from './-private/selection';\n\nimport type { Target } from '@ember/test-helpers';\n\ntype Selectors = {\n trigger: string;\n list: string;\n option: string;\n};\n\ntype Elements = {\n trigger: HTMLElement;\n list: HTMLElement;\n};\n\nconst DEFAULT_SELECTORS = {\n trigger: '[role=\"listbox\"]',\n list: '[role=\"listbox\"]',\n option: '[role=\"option\"]'\n};\n\nfunction setupListTest(\n assert: Assert,\n selectors: Partial<Selectors>\n): { elements: Elements; selectors: Selectors } {\n const fullSelectors = { ...DEFAULT_SELECTORS, ...selectors };\n const list = getRootElement().querySelector(selectors.list as string);\n\n assert.dom(list).exists('list exists');\n\n return {\n elements: {\n trigger: list as HTMLElement,\n list: list as HTMLElement\n },\n selectors: fullSelectors\n };\n}\n\n// function getItems(parent: HTMLElement) {\n// return getCompositeItems(parent, '[role=\"option\"]', '[role=\"listbox\"]');\n// }\n\n//\n// KEYBOARD\n//\n\nexport async function testListKeyboardNavigation(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements, selectors: allSelectors } = setupListTest(assert, selectors);\n\n const { trigger, list } = elements;\n\n await focus(list);\n\n await testListboxKeyboardNavigation(\n assert,\n {\n target: trigger,\n list\n },\n {\n option: allSelectors.option\n }\n );\n}\n\nasync function testListForKeyboardSingleSelection(\n assert: Assert,\n elements: Elements,\n selectors: Selectors\n) {\n const { trigger, list } = elements;\n\n await focus(list);\n await testListboxForKeyboardSingleSelection(\n assert,\n {\n target: trigger,\n list\n },\n {\n option: selectors.option\n }\n );\n}\n\nasync function testListForKeyboardMultiSelection(\n assert: Assert,\n elements: Elements,\n selectors: Selectors\n) {\n const { trigger, list } = elements;\n\n await focus(list);\n await testListboxForKeyboardMultiSelection(\n assert,\n {\n target: trigger,\n list\n },\n {\n option: selectors.option\n }\n );\n}\n\nexport async function testListKeyboardSelection(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements, selectors: allSelectors } = setupListTest(assert, selectors);\n const multi = elements.list.getAttribute('aria-multiselectable');\n\n await (multi\n ? testListForKeyboardMultiSelection(assert, elements, allSelectors)\n : testListForKeyboardSingleSelection(assert, elements, allSelectors));\n}\n\n//\n// MOUSE\n//\n\nexport async function testListPointerNavigation(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements, selectors: allSelectors } = setupListTest(assert, selectors);\n\n const { list } = elements;\n\n await testListboxPointerNavigation(\n assert,\n {\n list\n },\n {\n option: allSelectors.option\n }\n );\n}\n\nasync function testListForPointerSingleSelection(\n assert: Assert,\n elements: Elements,\n selectors: Selectors\n) {\n const { trigger, list } = elements;\n\n await testListboxForPointerSingleSelection(\n assert,\n {\n target: trigger,\n list\n },\n {\n option: selectors.option\n }\n );\n}\n\nasync function testListForPointerMultiSelection(\n assert: Assert,\n elements: Elements,\n selectors: Selectors\n) {\n const { trigger, list } = elements;\n\n await testListboxForPointerMultiSelection(\n assert,\n {\n target: trigger,\n list\n },\n {\n option: selectors.option\n }\n );\n}\n\nexport async function testListPointerSelection(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements, selectors: allSelectors } = setupListTest(assert, selectors);\n const multi = elements.list.getAttribute('aria-multiselectable');\n\n await (multi\n ? testListForPointerMultiSelection(assert, elements, allSelectors)\n : testListForPointerSingleSelection(assert, elements, allSelectors));\n}\n\n//\n// BEHAVIOR\n//\n\nexport async function selectListbox(\n target: Target,\n options: string | string[],\n keepPreviouslySelected = false\n) {\n await select(target, options, {\n keepPreviouslySelected,\n labels: { name: 'selectListbox', element: 'Listbox' },\n selectors: {\n option: DEFAULT_SELECTORS.option\n }\n });\n}\n\n//\n// utility functions\n//\n\n// export function findListboxOption(target: Target, text: string) {\n// return findOption(target, text, {\n// selectors: { option: DEFAULT_SELECTORS.option },\n// labels: { name: 'findListboxOption' }\n// });\n// }\n\n// export function findListboxOptions(target: Target, texts: string[]) {\n// return findOptions(target, texts, {\n// selectors: { option: DEFAULT_SELECTORS.option },\n// labels: { name: 'findListboxOptions' }\n// });\n// }\n","export function getCompositeItems(\n parent: HTMLElement,\n selector: string,\n parentSelector?: string\n): HTMLElement[] {\n const items = [...parent.querySelectorAll(selector)] as HTMLElement[];\n\n if (parentSelector) {\n // make sure to filter out descendands that are within a nested menu but not the root menu\n return items.filter((item) => {\n const closestParent = item.closest(parentSelector);\n\n return !closestParent || closestParent === parent;\n });\n }\n\n return items;\n}\n","import { click, getRootElement, triggerEvent, triggerKeyEvent } from '@ember/test-helpers';\n\nimport sinon from 'sinon';\n\nimport { getCompositeItems } from './-private/composite';\n\ntype Selectors = {\n trigger: string;\n menu: string;\n item: string;\n};\n\ntype Elements = {\n trigger: HTMLElement;\n menu: HTMLElement;\n};\n\nconst DEFAULT_SELECTORS = {\n trigger: 'button',\n menu: '[role=\"menu\"]',\n item: '[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"]'\n};\n\nfunction setupMenuTest(\n assert: Assert,\n selectors: Partial<Selectors>\n): { elements: Elements; selectors: Selectors } {\n const fullSelectors = { ...DEFAULT_SELECTORS, ...selectors };\n const menu = getRootElement().querySelector(selectors.menu as string);\n const trigger = getRootElement().querySelector(selectors.trigger as string);\n\n assert.dom(menu).exists('Menu exists');\n\n return {\n elements: {\n trigger: (trigger as HTMLElement | null) ?? (menu as HTMLElement),\n menu: menu as HTMLElement\n },\n selectors: fullSelectors\n };\n}\n\nfunction getItems(parent: HTMLElement) {\n return getCompositeItems(\n parent,\n '[role=\"menuitem\"], [role=\"menuitemradio\"], [role=\"menuitemcheckbox\"]',\n 'menu, [role=\"menu\"]'\n );\n}\n\n//\n// KEYBOARD\n//\n\nexport async function testMenuKeyboardNavigation(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements } = setupMenuTest(assert, selectors);\n const { trigger, menu } = elements;\n\n const shareMenu = getRootElement().querySelectorAll('[role=\"menu\"]').item(1) as HTMLElement;\n const socialMenu = getRootElement().querySelectorAll('[role=\"menu\"]').item(2) as HTMLElement;\n\n await click(trigger);\n\n assert.true(menu.matches(':popover-open'), 'Main menu opened');\n\n const items = getItems(menu);\n const [first, second, , fourth] = items;\n const last = items[items.length - 1];\n\n assert.dom(first).hasAttribute('tabindex', '0', 'First item is activated');\n\n await triggerKeyEvent(menu, 'keydown', 'ArrowDown');\n\n assert.dom(second).hasAttribute('tabindex', '0', '`ArrowDown` activates second item');\n assert.dom(first).hasAttribute('tabindex', '-1', '... and deactivates first item');\n\n await triggerKeyEvent(menu, 'keydown', 'ArrowDown');\n await triggerKeyEvent(menu, 'keydown', 'ArrowDown');\n\n assert.dom(fourth).hasAttribute('tabindex', '0', '`ArrowDown` 2x activates fourth item');\n\n // open and close menu with ArrowRight / ArrowLeft\n\n assert.false(shareMenu.matches(':popover-open'), 'Share menu is closed');\n\n await triggerKeyEvent(menu, 'keydown', 'ArrowRight');\n assert.true(shareMenu.matches(':popover-open'), '`ArrowRight` opens share menu');\n\n await triggerKeyEvent(shareMenu, 'keydown', 'ArrowLeft');\n assert.false(shareMenu.matches(':popover-open'), '`ArrowLeft` closes share menu');\n\n // open sub-submenu and closing all of it\n const shareItems = getItems(shareMenu);\n\n await triggerKeyEvent(menu, 'keydown', 'ArrowRight');\n assert.true(shareMenu.matches(':popover-open'), '`ArrowRight` opens share menu again');\n\n await triggerKeyEvent(shareMenu, 'keydown', 'ArrowDown');\n\n assert\n .dom(shareItems[1])\n .hasAttribute('tabindex', '0', '`ArrowDown` moves to the next item in the submenu');\n\n await triggerKeyEvent(shareMenu, 'keydown', 'ArrowRight');\n assert.true(socialMenu.matches(':popover-open'), '`ArrowRight` opens social menu');\n\n const socialItems = getItems(socialMenu);\n const spy = sinon.spy();\n\n socialItems[0]?.addEventListener('click', spy, { once: true });\n\n // await click(socialItems[0] as HTMLElement);\n await triggerKeyEvent(socialMenu, 'keydown', 'Enter');\n\n assert.true(spy.calledOnce, '`Enter` invokes menu item');\n\n assert.false(socialMenu.matches(':popover-open'), 'Social menu is closed');\n assert.false(shareMenu.matches(':popover-open'), 'Share menu closed');\n assert.false(menu.matches(':popover-open'), 'Main menu closed');\n\n // Home + End\n await click(trigger);\n\n await triggerKeyEvent(menu, 'keydown', 'End');\n assert.dom(last).hasAttribute('tabindex', '0', '`End` activates last item');\n\n await triggerKeyEvent(menu, 'keydown', 'Home');\n assert.dom(first).hasAttribute('tabindex', '0', '`Home` activates first item');\n}\n\n//\n// POINTER\n//\n\nexport async function testMenuPointerNavigation(\n assert: Assert,\n selectors: Partial<Selectors> = DEFAULT_SELECTORS\n): Promise<void> {\n const { elements } = setupMenuTest(assert, selectors);\n const { trigger, menu } = elements;\n\n const shareMenu = getRootElement().querySelectorAll('[role=\"menu\"]').item(1) as HTMLElement;\n const socialMenu = getRootElement().querySelectorAll('[role=\"menu\"]').item(2) as HTMLElement;\n\n await click(trigger);\n\n assert.true(menu.matches(':popover-open'), 'Main menu opened');\n\n const items = getItems(menu);\n const [first, second, , fourth, fifth] = items;\n\n assert.dom(first).hasAttribute('tabindex', '0', 'First item is activated');\n\n await triggerEvent(second as HTMLElement, 'pointerover');\n\n assert.dom(second).hasAttribute('tabindex', '0', '`pointerover` activates second item');\n assert.dom(first).hasAttribute('tabindex', '-1', '... and deactivates first item');\n\n // assert.dom(fourth).hasAttribute('tabindex', '0', '`ArrowDown` 2x activates fourth item');\n\n await click('[role=\"menu\"] span');\n assert.true(\n menu.matches(':popover-open'),\n 'Main menu still open after clicking a non-item inside the popover'\n );\n\n // open and close menu with Pointerover\n\n assert.false(shareMenu.matches(':popover-open'), 'Share menu is closed');\n\n await triggerEvent(fourth as HTMLElement, 'pointerover');\n assert.dom(fourth).hasAttribute('tabindex', '0', '`pointerover` activates fourth item');\n assert.true(shareMenu.matches(':popover-open'), '`pointerover` fourth element opens share menu');\n\n await triggerEvent(fifth as HTMLElement, 'pointerover');\n assert.dom(fifth).hasAttribute('tabindex', '0', '`pointerover` activates fifth item');\n assert.false(shareMenu.matches(':popover-open'), '`pointerover` fifth element closes share menu');\n\n // open sub-submenu and closing all of it\n const shareItems = getItems(shareMenu);\n\n await triggerEvent(fourth as HTMLElement, 'pointerover');\n assert.true(\n shareMenu.matches(':popover-open'),\n '`pointerover` fourth element opens share menu again'\n );\n\n assert.dom(shareItems[0] as HTMLElement).hasAttribute('tabindex', '0', 'first item is active');\n\n // huh? Why does the second line work, but not the first one?\n // await triggerEvent(shareItems[1] as HTMLElement, 'pointover');\n (shareItems[1] as HTMLElement).dispatchEvent(new Event('pointerover', { bubbles: true }));\n\n assert\n .dom(shareItems[1] as HTMLElement)\n .hasAttribute('tabindex', '0', '`pointerover` activates second item');\n\n assert.true(socialMenu.matches(':popover-open'), '... and opens social menu');\n\n const socialItems = getItems(socialMenu);\n const spy = sinon.spy();\n\n socialItems[0]?.addEventListener('click', spy, { once: true });\n\n // see: https://github.com/emberjs/ember-test-helpers/issues/267\n await triggerEvent(socialItems[0] as HTMLElement, 'pointerup');\n (socialItems[0] as HTMLElement).click();\n\n assert.true(spy.calledOnce, '`Enter` invokes menu item');\n\n assert.false(socialMenu.matches(':popover-open'), 'Social menu is closed');\n assert.false(shareMenu.matches(':popover-open'), 'Share menu closed');\n assert.false(menu.matches(':popover-open'), 'Main menu closed');\n}\n"],"names":["getDescription","target","data","isDescriptor","lookupDescriptorData","description","toString","isElement","Reflect","get","Node","ELEMENT_NODE","isDocument","DOCUMENT_NODE","getElement","rootElement","getRootElement","querySelector","Window","document","descriptorData","resolveDOMElement","Error","errorMessage","message","name","getOptions","parent","selector","querySelectorAll","findOption","text","selectors","element","option","find","e","textContent","trim","includes","findOptions","texts","filter","select","options","keepPreviouslySelected","labels","elementName","multi","getAttribute","Array","isArray","optionElements","items","item","setAttribute","removeAttribute","triggerEvent","testListboxKeyboardNavigation","assert","elements","list","first","second","last","dom","hasAria","triggerKeyEvent","doesNotHaveAria","testListboxForKeyboardSingleSelection","testListboxForKeyboardMultiSelection","metaKey","testListboxPointerNavigation","testListboxForPointerSingleSelection","bubbles","testListboxForPointerMultiSelection","shiftKey","DEFAULT_SELECTORS","trigger","setupListTest","fullSelectors","exists","testListKeyboardNavigation","allSelectors","focus","testListForKeyboardSingleSelection","testListForKeyboardMultiSelection","testListKeyboardSelection","testListPointerNavigation","testListForPointerSingleSelection","testListForPointerMultiSelection","testListPointerSelection","selectListbox","getCompositeItems","parentSelector","closestParent","closest","menu","setupMenuTest","getItems","testMenuKeyboardNavigation","shareMenu","socialMenu","click","true","matches","fourth","length","hasAttribute","false","shareItems","socialItems","spy","sinon","addEventListener","once","calledOnce","testMenuPointerNavigation","fifth","dispatchEvent","Event"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ember-aria-voyager",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "Navigation patterns for various aria roles and features in ember.js",
|
|
5
|
+
"author": "gossi",
|
|
6
|
+
"license": "MIT",
|
|
5
7
|
"keywords": [
|
|
6
8
|
"ember-addon"
|
|
7
9
|
],
|
|
8
|
-
"author": "gossi",
|
|
9
10
|
"files": [
|
|
10
11
|
"addon-main.js",
|
|
11
12
|
"declarations",
|
|
@@ -16,11 +17,11 @@
|
|
|
16
17
|
"lodash.isequal": "^4.5.0",
|
|
17
18
|
"dom-element-descriptors": "^0.5.0",
|
|
18
19
|
"ember-modifier": "^4.2.0",
|
|
19
|
-
"sinon": "^
|
|
20
|
-
"aria-voyager": "0.0.
|
|
20
|
+
"sinon": "^19.0.0",
|
|
21
|
+
"aria-voyager": "0.0.4"
|
|
21
22
|
},
|
|
22
23
|
"peerDependencies": {
|
|
23
|
-
"@ember/test-helpers": "^
|
|
24
|
+
"@ember/test-helpers": "^4.0.0"
|
|
24
25
|
},
|
|
25
26
|
"peerDependenciesMeta": {
|
|
26
27
|
"@ember/test-helpers": {
|
|
@@ -28,38 +29,38 @@
|
|
|
28
29
|
}
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
|
-
"@babel/core": "7.
|
|
32
|
-
"@babel/eslint-parser": "7.25.
|
|
33
|
-
"@babel/plugin-transform-typescript": "7.25.
|
|
34
|
-
"@babel/preset-typescript": "7.
|
|
35
|
-
"@babel/runtime": "7.
|
|
36
|
-
"@ember/test-helpers": "
|
|
37
|
-
"@embroider/addon-dev": "
|
|
38
|
-
"@glint/template": "1.
|
|
39
|
-
"@gossi/config-eslint": "0.
|
|
40
|
-
"@gossi/config-prettier": "0.9.
|
|
41
|
-
"@gossi/config-targets": "0.9.
|
|
42
|
-
"@gossi/config-template-lint": "0.8.
|
|
32
|
+
"@babel/core": "7.26.0",
|
|
33
|
+
"@babel/eslint-parser": "7.25.9",
|
|
34
|
+
"@babel/plugin-transform-typescript": "7.25.9",
|
|
35
|
+
"@babel/preset-typescript": "7.26.0",
|
|
36
|
+
"@babel/runtime": "7.26.0",
|
|
37
|
+
"@ember/test-helpers": "4.0.4",
|
|
38
|
+
"@embroider/addon-dev": "6.0.1",
|
|
39
|
+
"@glint/template": "1.5.0",
|
|
40
|
+
"@gossi/config-eslint": "0.13.0",
|
|
41
|
+
"@gossi/config-prettier": "0.9.1",
|
|
42
|
+
"@gossi/config-targets": "0.9.1",
|
|
43
|
+
"@gossi/config-template-lint": "0.8.1",
|
|
43
44
|
"@rollup/plugin-babel": "6.0.4",
|
|
44
|
-
"@rollup/plugin-node-resolve": "15.
|
|
45
|
+
"@rollup/plugin-node-resolve": "15.3.0",
|
|
45
46
|
"@tsconfig/ember": "3.0.8",
|
|
46
47
|
"@types/lodash.isequal": "4.5.8",
|
|
47
|
-
"@types/qunit": "2.19.
|
|
48
|
+
"@types/qunit": "2.19.11",
|
|
48
49
|
"@types/sinon": "17.0.3",
|
|
49
|
-
"concurrently": "
|
|
50
|
-
"ember-cli-code-coverage": "3.
|
|
50
|
+
"concurrently": "9.0.1",
|
|
51
|
+
"ember-cli-code-coverage": "3.1.0",
|
|
51
52
|
"ember-cli-htmlbars": "6.3.0",
|
|
52
|
-
"eslint-plugin-ember": "12.
|
|
53
|
-
"ember-source": "5.
|
|
53
|
+
"eslint-plugin-ember": "12.3.1",
|
|
54
|
+
"ember-source": "5.12.0",
|
|
54
55
|
"ember-template-lint": "6.0.0",
|
|
55
|
-
"eslint": "8.57.
|
|
56
|
-
"postcss": "8.4.
|
|
56
|
+
"eslint": "8.57.1",
|
|
57
|
+
"postcss": "8.4.47",
|
|
57
58
|
"prettier": "3.3.3",
|
|
58
|
-
"qunit-dom": "3.2.
|
|
59
|
-
"rollup": "4.
|
|
59
|
+
"qunit-dom": "3.2.1",
|
|
60
|
+
"rollup": "4.24.2",
|
|
60
61
|
"rollup-plugin-postcss": "4.0.2",
|
|
61
|
-
"typescript": "5.
|
|
62
|
-
"webpack": "5.
|
|
62
|
+
"typescript": "5.6.3",
|
|
63
|
+
"webpack": "5.95.0"
|
|
63
64
|
},
|
|
64
65
|
"ember": {
|
|
65
66
|
"edition": "octane"
|