@gtkx/testing 1.0.0-rc.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/accessible-native.d.ts +16 -0
- package/dist/accessible-native.d.ts.map +1 -0
- package/dist/accessible-native.js +206 -0
- package/dist/accessible-native.js.map +1 -0
- package/dist/build-queries.d.ts +27 -10
- package/dist/build-queries.d.ts.map +1 -1
- package/dist/build-queries.js +22 -24
- package/dist/build-queries.js.map +1 -1
- package/dist/cleanup-registry.d.ts +1 -1
- package/dist/cleanup-registry.d.ts.map +1 -1
- package/dist/cleanup-registry.js.map +1 -1
- package/dist/errors.d.ts +10 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +10 -1
- package/dist/errors.js.map +1 -1
- package/dist/fire-event.d.ts +35 -6
- package/dist/fire-event.d.ts.map +1 -1
- package/dist/fire-event.js +23 -7
- package/dist/fire-event.js.map +1 -1
- package/dist/frame-sync.d.ts +2 -1
- package/dist/frame-sync.d.ts.map +1 -1
- package/dist/frame-sync.js +15 -5
- package/dist/frame-sync.js.map +1 -1
- package/dist/harness-window.d.ts +4 -0
- package/dist/harness-window.d.ts.map +1 -0
- package/dist/harness-window.js +6 -0
- package/dist/harness-window.js.map +1 -0
- package/dist/index.d.ts +14 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +4 -0
- package/dist/internal.js.map +1 -0
- package/dist/matchers.d.ts +88 -46
- package/dist/matchers.d.ts.map +1 -1
- package/dist/matchers.js +156 -18
- package/dist/matchers.js.map +1 -1
- package/dist/pretty-format.d.ts +2 -0
- package/dist/pretty-format.d.ts.map +1 -0
- package/dist/pretty-format.js +2 -0
- package/dist/pretty-format.js.map +1 -0
- package/dist/pretty-widget.d.ts +5 -2
- package/dist/pretty-widget.d.ts.map +1 -1
- package/dist/pretty-widget.js +73 -56
- package/dist/pretty-widget.js.map +1 -1
- package/dist/production.d.ts +8 -0
- package/dist/production.d.ts.map +1 -0
- package/dist/production.js +34 -0
- package/dist/production.js.map +1 -0
- package/dist/queries.d.ts +98 -56
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +123 -83
- package/dist/queries.js.map +1 -1
- package/dist/query-helpers.d.ts +44 -0
- package/dist/query-helpers.d.ts.map +1 -0
- package/dist/query-helpers.js +57 -0
- package/dist/query-helpers.js.map +1 -0
- package/dist/render-children.d.ts +9 -0
- package/dist/render-children.d.ts.map +1 -0
- package/dist/render-children.js +11 -0
- package/dist/render-children.js.map +1 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +11 -9
- package/dist/render.js.map +1 -1
- package/dist/role-helpers.d.ts +12 -3
- package/dist/role-helpers.d.ts.map +1 -1
- package/dist/role-helpers.js +13 -4
- package/dist/role-helpers.js.map +1 -1
- package/dist/role-naming.d.ts +5 -0
- package/dist/role-naming.d.ts.map +1 -0
- package/dist/role-naming.js +96 -0
- package/dist/role-naming.js.map +1 -0
- package/dist/screenshot.d.ts +12 -20
- package/dist/screenshot.d.ts.map +1 -1
- package/dist/screenshot.js +183 -91
- package/dist/screenshot.js.map +1 -1
- package/dist/traversal.d.ts +4 -1
- package/dist/traversal.d.ts.map +1 -1
- package/dist/traversal.js +25 -6
- package/dist/traversal.js.map +1 -1
- package/dist/types.d.ts +26 -14
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/user-event/adjustment.d.ts +3 -0
- package/dist/user-event/adjustment.d.ts.map +1 -1
- package/dist/user-event/adjustment.js +23 -2
- package/dist/user-event/adjustment.js.map +1 -1
- package/dist/user-event/click.d.ts +43 -8
- package/dist/user-event/click.d.ts.map +1 -1
- package/dist/user-event/click.js +175 -44
- package/dist/user-event/click.js.map +1 -1
- package/dist/user-event/column-header-click.d.ts +4 -0
- package/dist/user-event/column-header-click.d.ts.map +1 -0
- package/dist/user-event/column-header-click.js +65 -0
- package/dist/user-event/column-header-click.js.map +1 -0
- package/dist/user-event/event-wrapper.d.ts.map +1 -1
- package/dist/user-event/event-wrapper.js +2 -1
- package/dist/user-event/event-wrapper.js.map +1 -1
- package/dist/user-event/index.d.ts +51 -10
- package/dist/user-event/index.d.ts.map +1 -1
- package/dist/user-event/index.js +43 -26
- package/dist/user-event/index.js.map +1 -1
- package/dist/user-event/indexed-children.d.ts +10 -0
- package/dist/user-event/indexed-children.d.ts.map +1 -0
- package/dist/user-event/indexed-children.js +50 -0
- package/dist/user-event/indexed-children.js.map +1 -0
- package/dist/user-event/keyboard.d.ts.map +1 -1
- package/dist/user-event/keyboard.js +33 -4
- package/dist/user-event/keyboard.js.map +1 -1
- package/dist/user-event/list-row-click.d.ts +4 -0
- package/dist/user-event/list-row-click.d.ts.map +1 -0
- package/dist/user-event/list-row-click.js +39 -0
- package/dist/user-event/list-row-click.js.map +1 -0
- package/dist/user-event/native-click.d.ts +6 -0
- package/dist/user-event/native-click.d.ts.map +1 -0
- package/dist/user-event/native-click.js +32 -0
- package/dist/user-event/native-click.js.map +1 -0
- package/dist/user-event/pointer.d.ts +1 -1
- package/dist/user-event/pointer.d.ts.map +1 -1
- package/dist/user-event/pointer.js +33 -9
- package/dist/user-event/pointer.js.map +1 -1
- package/dist/user-event/selection.d.ts +11 -8
- package/dist/user-event/selection.d.ts.map +1 -1
- package/dist/user-event/selection.js +49 -38
- package/dist/user-event/selection.js.map +1 -1
- package/dist/user-event/text.d.ts +6 -2
- package/dist/user-event/text.d.ts.map +1 -1
- package/dist/user-event/text.js +68 -18
- package/dist/user-event/text.js.map +1 -1
- package/dist/widget-accessible-properties.d.ts +14 -26
- package/dist/widget-accessible-properties.d.ts.map +1 -1
- package/dist/widget-accessible-properties.js +135 -190
- package/dist/widget-accessible-properties.js.map +1 -1
- package/dist/widget-getters.d.ts +8 -0
- package/dist/widget-getters.d.ts.map +1 -0
- package/dist/widget-getters.js +19 -0
- package/dist/widget-getters.js.map +1 -0
- package/dist/within.d.ts +3 -2
- package/dist/within.d.ts.map +1 -1
- package/dist/within.js +3 -2
- package/dist/within.js.map +1 -1
- package/package.json +12 -7
- package/src/accessible-native.ts +333 -0
- package/src/build-queries.ts +47 -41
- package/src/cleanup-registry.ts +1 -1
- package/src/errors.ts +12 -1
- package/src/fire-event.ts +61 -8
- package/src/frame-sync.ts +21 -5
- package/src/harness-window.ts +9 -0
- package/src/index.ts +18 -11
- package/src/internal.ts +11 -0
- package/src/matchers.ts +428 -70
- package/src/pretty-format.ts +1 -0
- package/src/pretty-widget.ts +97 -70
- package/src/production.ts +52 -0
- package/src/queries.ts +127 -89
- package/src/query-helpers.ts +97 -0
- package/src/render-children.ts +25 -0
- package/src/render.tsx +16 -11
- package/src/role-helpers.ts +14 -4
- package/src/role-naming.ts +99 -0
- package/src/screenshot.ts +272 -103
- package/src/traversal.ts +44 -6
- package/src/types.ts +28 -16
- package/src/user-event/adjustment.ts +29 -2
- package/src/user-event/click.ts +247 -52
- package/src/user-event/column-header-click.ts +90 -0
- package/src/user-event/event-wrapper.ts +3 -1
- package/src/user-event/index.ts +100 -37
- package/src/user-event/indexed-children.ts +75 -0
- package/src/user-event/keyboard.ts +52 -4
- package/src/user-event/list-row-click.ts +57 -0
- package/src/user-event/native-click.ts +46 -0
- package/src/user-event/pointer.ts +48 -9
- package/src/user-event/selection.ts +67 -41
- package/src/user-event/text.ts +92 -21
- package/src/widget-accessible-properties.ts +183 -230
- package/src/widget-getters.ts +32 -0
- package/src/within.ts +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-accessible-properties.js","sourceRoot":"","sources":["../src/widget-accessible-properties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAY7C,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AAE1E,MAAM,gBAAgB,GAA4B,IAAI,GAAG,CAAqB;IAC1E,GAAG,CAAC,cAAc,CAAC,GAAG;IACtB,GAAG,CAAC,cAAc,CAAC,SAAS;IAC5B,GAAG,CAAC,cAAc,CAAC,SAAS;IAC5B,GAAG,CAAC,cAAc,CAAC,MAAM;IACzB,GAAG,CAAC,cAAc,CAAC,SAAS;CAC/B,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,MAAkB,EAAE,MAAc,EAAiB,EAAE;IAC3E,MAAM,EAAE,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAI,EAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvD,OAAO,KAAK,IAAI,IAAI,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAiB,EAAE;IAC5E,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEjD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAiB,EAAE;IAC5E,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEjD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAuB,EAAE;IACnF,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAsB,EAAE,CAAC,IAAI,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC;IAEvF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAkB,EAAE;IAC9E,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEjD,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAkB,EAAiB,EAAE;IACvD,IAAI,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC5D,KAAK,MAAM,MAAM,IAAI,oBAAoB,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE/C,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAE/E,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC1D,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,YAAY,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChG,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAwB,EAAE,yBAAkC,EAAW,EAAE,CAChG,IAAI,KAAK,GAAG,CAAC,cAAc,CAAC,KAAK;IACjC,CAAC,yBAAyB,IAAI,IAAI,KAAK,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAE5E,MAAM,aAAa,GAAG,CAAC,MAAkB,EAAY,EAAE;IACnD,MAAM,qBAAqB,GAAG,MAAM,CAAC,iBAAiB,EAAE,KAAK,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC;IAC1F,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,qBAAqB,CAAC,EAAE,CAAC;YAC5E,SAAS;QACb,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAE9C,IAAI,SAAS,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC7D,IAAI,MAAM,CAAC,iBAAiB,EAAE,KAAK,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,MAAkB;IAC7C,IAAI,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IAEnC,OAAO,KAAK,EAAE,CAAC;QACX,MAAM,KAAK,CAAC;QACZ,KAAK,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;IACnC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,MAAkB,EAAY,EAAE;IACtD,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEtC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AAChF,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC/D,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEvC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,MAAkB,EAAW,EAAE,CAC5D,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;AAEjE,MAAM,qBAAqB,GAAG,CAAC,KAAiB,EAAiB,EAAE,CAC/D,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAEjG,MAAM,gBAAgB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC3D,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAE1C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAkB,EAAiB,EAAE;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAElC,IAAI,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;IACrD,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAClE,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAExC,IAAI,IAAI,KAAK,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QACxC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,cAAc,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEvD,IAAI,cAAc,EAAE,CAAC;QACjB,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAExE,IAAI,eAAe,EAAE,CAAC;QAClB,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAkB,EAAiB,EAAE;IACxD,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IACnE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAElE,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,YAAY,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAErE,OAAO,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;AACzF,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAChE,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvE,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,MAAM,CAAC,iBAAiB,EAAE,KAAK,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC9D,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAW,EAAE;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAExC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC;AACrG,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,MAAkB,EAAW,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AAEhF,MAAM,sBAAsB,GAAG,CAAC,MAAkB,EAAW,EAAE;IAC3D,IAAI,OAAO,GAAsB,MAAM,CAAC;IAExC,OAAO,OAAO,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAW,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAE/G,MAAM,sBAAsB,GAAG,CAAC,MAAkB,EAAkB,EAAE,CAClE,qBAAqB,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAExD,MAAM,qBAAqB,GAAG,CAAC,IAAkB,EAAiB,EAAE;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IAE/D,OAAO,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,QAAsB,EAAiB,EAAE;IACpE,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,kBAAkB,EAAE,CAAC;IAEjE,OAAO,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC7D,IAAI,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAAiB,EAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAEpG,MAAM,iBAAiB,GAAG,CAAC,MAAkB,EAAW,EAAE,CACtD,MAAM,YAAY,GAAG,CAAC,MAAM;IAC5B,CAAC,MAAM,YAAY,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,iBAAiB,EAAE,KAAK,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAEpG,MAAM,qBAAqB,GAAG,CAAC,MAAkB,EAAuB,EAAE;IACtE,IAAI,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAkB,EAAE;IAC3D,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE5C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,MAAkB,EAAkB,EAAE;IACjE,IAAI,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAkB,EAAkB,EAAE;IAClE,IAAI,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC;IACtD,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAkB,EAAkB,EAAE;IAClE,IAAI,MAAM,YAAY,GAAG,CAAC,UAAU,IAAI,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,CAAC;QACzE,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAkB,EAAiB,EAAE;IACzD,OAAO,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,CAAC,MAAkB,EAAqC,EAAE;IACpF,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAEhE,OAAO,KAAK,IAAI,IAAI,CAAC;AACzB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,qBAAqB,GAAG,CAAC,MAAkB,EAAuB,EAAE,CACtE,qBAAqB,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;AAE5D,MAAM,kBAAkB,GAAG,CAAC,MAAkB,EAAkB,EAAE;IAC9D,OAAO,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC/D,OAAO,oBAAoB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,UAA0B,EAAgB,EAAE,CAAC,CAAC;IACnE,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,MAAkB,EAAuB,EAAE;IACtE,IAAI,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,CAAC;QAClC,OAAO,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,CAAC;QACnC,OAAO,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAkB,EAAuB,EAAE;IACnE,MAAM,eAAe,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAEtD,IAAI,eAAe,EAAE,CAAC;QAClB,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;IAC5F,CAAC;IAED,IAAI,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAkB,EAAe,EAAE;IACvD,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACH,GAAG,EAAE,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC;QACvD,GAAG,EAAE,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC;QACvD,GAAG,EAAE,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC;QACvD,IAAI;KACP,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC5D,OAAO,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,OAAqB,EAAY,EAAE;IAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAClE,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAEtE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAE9C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAkB,EAAW,EAAE,CACxD,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAK,IAAI;IACxD,iBAAiB,CAAC,MAAM,CAAC,KAAK,IAAI;IAClC,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAEvC,MAAM,wBAAwB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IACnE,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEtE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAE1E,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAkB,EAAW,EAAE;IACnD,IAAI,OAAO,GAAsB,MAAM,CAAC;IAExC,OAAO,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACvB,aAAa,EACb,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,cAAc,GAGjB,CAAC","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport { getAccessibleMetadata } from \"@gtkx/react/internal\";\nimport { EDITABLE_ROLES, isEditable, readEditableText } from \"./editable.js\";\nimport { descendants } from \"./traversal.js\";\n\ntype WidgetValue = {\n now: number | null;\n min: number | null;\n max: number | null;\n text: string | null;\n};\n\ntype ValueTriplet = { now: number | null; min: number | null; max: number | null };\ntype CheckedState = \"checked\" | \"unchecked\" | \"mixed\";\n\nconst DEFAULT_TEXT_GETTERS = [\"getLabel\", \"getText\", \"getTitle\"] as const;\n\nconst SELECTABLE_ROLES: Set<Gtk.AccessibleRole> = new Set<Gtk.AccessibleRole>([\n Gtk.AccessibleRole.ROW,\n Gtk.AccessibleRole.LIST_ITEM,\n Gtk.AccessibleRole.GRID_CELL,\n Gtk.AccessibleRole.OPTION,\n Gtk.AccessibleRole.TREE_ITEM,\n]);\n\nconst callStringGetter = (widget: Gtk.Widget, method: string): string | null => {\n const fn: unknown = Reflect.get(widget, method);\n\n if (typeof fn !== \"function\") {\n return null;\n }\n\n const value = (fn as () => string | null).call(widget);\n\n return value ?? null;\n};\n\nconst readAccessibleString = (widget: Gtk.Widget, key: string): string | null => {\n const value = getAccessibleMetadata(widget, key);\n\n return typeof value === \"string\" ? value : null;\n};\n\nconst readAccessibleNumber = (widget: Gtk.Widget, key: string): number | null => {\n const value = getAccessibleMetadata(widget, key);\n\n return typeof value === \"number\" ? value : null;\n};\n\nconst readAccessibleWidgets = (widget: Gtk.Widget, key: string): Gtk.Widget[] | null => {\n const value = getAccessibleMetadata(widget, key);\n\n if (!Array.isArray(value)) {\n return null;\n }\n\n const widgets = value.filter((item): item is Gtk.Widget => item instanceof Gtk.Widget);\n\n return widgets.length > 0 ? widgets : null;\n};\n\nconst readAccessibleBoolean = (widget: Gtk.Widget, key: string): boolean | null => {\n const value = getAccessibleMetadata(widget, key);\n\n return typeof value === \"boolean\" ? value : null;\n};\n\nconst getLabelText = (widget: Gtk.Widget): string | null => {\n if (widget instanceof Gtk.Label) {\n return widget.getLabel();\n }\n\n if (widget instanceof Gtk.Inscription) {\n return widget.getText() ?? null;\n }\n\n return null;\n};\n\n/**\n * Returns a widget's own text by trying its label, text, and title getters in\n * order, or null when none produce a value.\n *\n * @param widget The widget to read text from.\n */\nconst getWidgetNodeText = (widget: Gtk.Widget): string | null => {\n for (const getter of DEFAULT_TEXT_GETTERS) {\n const value = callStringGetter(widget, getter);\n\n if (value) {\n return value;\n }\n }\n\n return null;\n};\n\nconst stripMnemonic = (text: string): string => text.replaceAll(/_(.)/g, \"$1\");\n\nconst namingLabelText = (widget: Gtk.Widget): string | null => {\n const text = getLabelText(widget);\n\n if (text === null) {\n return null;\n }\n\n return widget instanceof Gtk.Label && widget.getUseUnderline() ? stripMnemonic(text) : text;\n};\n\nconst isNamingLabelRole = (role: Gtk.AccessibleRole, shouldIncludePresentation: boolean): boolean =>\n role === Gtk.AccessibleRole.LABEL ||\n (shouldIncludePresentation && role === Gtk.AccessibleRole.PRESENTATION);\n\nconst collectLabels = (widget: Gtk.Widget): string[] => {\n const isIncludePresentation = widget.getAccessibleRole() === Gtk.AccessibleRole.MENU_ITEM;\n const labels: string[] = [];\n\n for (const descendant of descendants(widget)) {\n if (!isNamingLabelRole(descendant.getAccessibleRole(), isIncludePresentation)) {\n continue;\n }\n\n const labelText = namingLabelText(descendant);\n\n if (labelText) {\n labels.push(labelText);\n }\n }\n\n return labels;\n};\n\nconst getWidgetLabelText = (widget: Gtk.Widget): string | null => {\n if (widget.getAccessibleRole() !== Gtk.AccessibleRole.LABEL) {\n return null;\n }\n\n return getLabelText(widget);\n};\n\nconst getChildren = function* (widget: Gtk.Widget): Generator<Gtk.Widget> {\n let child = widget.getFirstChild();\n\n while (child) {\n yield child;\n child = child.getNextSibling();\n }\n};\n\nconst textContentParts = (widget: Gtk.Widget): string[] => {\n const own = getWidgetNodeText(widget);\n\n if (own !== null) {\n return [own];\n }\n\n return [...getChildren(widget)].flatMap((child) => textContentParts(child));\n};\n\n/**\n * Returns a widget's own text, or the space-joined text of its descendants when it has none of its\n * own, or null when neither produces a value.\n *\n * @param widget The widget whose subtree is read.\n */\nconst getWidgetTextContent = (widget: Gtk.Widget): string | null => {\n const parts = textContentParts(widget);\n\n return parts.length > 0 ? parts.join(\" \") : null;\n};\n\nconst isComboBoxFaceCandidate = (widget: Gtk.Widget): boolean =>\n !(widget instanceof Gtk.Popover) && widget.getChildVisible();\n\nconst comboBoxChildFaceText = (child: Gtk.Widget): string | null =>\n isComboBoxFaceCandidate(child) ? getWidgetLabelText(child) ?? comboBoxFaceText(child) : null;\n\nconst comboBoxFaceText = (widget: Gtk.Widget): string | null => {\n for (const child of getChildren(widget)) {\n const text = comboBoxChildFaceText(child);\n\n if (text !== null) {\n return text;\n }\n }\n\n return null;\n};\n\nconst tabPanelTitle = (widget: Gtk.Widget): string | null => {\n const parent = widget.getParent();\n\n if (parent instanceof Gtk.Stack) {\n return parent.getPage(widget).getTitle() ?? null;\n }\n\n return null;\n};\n\nconst getWidgetAccessibleName = (widget: Gtk.Widget): string | null => {\n const role = widget.getAccessibleRole();\n\n if (role === Gtk.AccessibleRole.TAB_PANEL) {\n return tabPanelTitle(widget);\n }\n\n const labelledByText = getWidgetLabelledByText(widget);\n\n if (labelledByText) {\n return labelledByText;\n }\n\n const accessibleLabel = readAccessibleString(widget, \"accessibleLabel\");\n\n if (accessibleLabel) {\n return accessibleLabel;\n }\n\n const ownText = getWidgetNodeText(widget);\n\n if (ownText) {\n return ownText;\n }\n\n const childLabels = collectLabels(widget);\n\n if (childLabels.length > 0) {\n return childLabels.join(\" \");\n }\n\n return callStringGetter(widget, \"getTooltipText\");\n};\n\nconst getWidgetName = (widget: Gtk.Widget): string | null => {\n return widget.getName();\n};\n\nconst getWidgetPlaceholderText = (widget: Gtk.Widget): string | null => {\n if (!EDITABLE_ROLES.has(widget.getAccessibleRole()) || !(widget instanceof Gtk.Editable)) {\n return null;\n }\n\n const fromGetter = callStringGetter(widget, \"getPlaceholderText\");\n\n if (fromGetter !== null) {\n return fromGetter;\n }\n\n const fromAccessor: unknown = Reflect.get(widget, \"placeholderText\");\n\n return typeof fromAccessor === \"string\" && fromAccessor !== \"\" ? fromAccessor : null;\n};\n\nconst getWidgetDisplayValue = (widget: Gtk.Widget): string | null => {\n if (EDITABLE_ROLES.has(widget.getAccessibleRole()) && isEditable(widget)) {\n return readEditableText(widget);\n }\n\n if (widget.getAccessibleRole() === Gtk.AccessibleRole.COMBO_BOX) {\n return comboBoxFaceText(widget);\n }\n\n return null;\n};\n\nconst hasDisplayValue = (widget: Gtk.Widget): boolean => {\n const role = widget.getAccessibleRole();\n\n return (EDITABLE_ROLES.has(role) && isEditable(widget)) || role === Gtk.AccessibleRole.COMBO_BOX;\n};\n\nconst isWidgetDisabled = (widget: Gtk.Widget): boolean => !widget.isSensitive();\n\nconst hasZeroOpacityAncestor = (widget: Gtk.Widget): boolean => {\n let current: Gtk.Widget | null = widget;\n\n while (current) {\n if (current.getOpacity() === 0) {\n return true;\n }\n\n current = current.getParent();\n }\n\n return false;\n};\n\nconst isWidgetVisible = (widget: Gtk.Widget): boolean => widget.isVisible() && !hasZeroOpacityAncestor(widget);\n\nconst getWidgetRequiredState = (widget: Gtk.Widget): boolean | null =>\n readAccessibleBoolean(widget, \"accessibleRequired\");\n\nconst readTextViewSelection = (view: Gtk.TextView): string | null => {\n const buffer = view.getBuffer();\n const [hasSelection, start, end] = buffer.getSelectionBounds();\n\n return hasSelection ? buffer.getText(start, end, true) : null;\n};\n\nconst readEditableSelection = (editable: Gtk.Editable): string | null => {\n const [hasSelection, start, end] = editable.getSelectionBounds();\n\n return hasSelection ? editable.getChars(start, end) : null;\n};\n\nconst getWidgetSelection = (widget: Gtk.Widget): string | null => {\n if (widget instanceof Gtk.TextView) {\n return readTextViewSelection(widget);\n }\n\n if (widget instanceof Gtk.Editable) {\n return readEditableSelection(widget);\n }\n\n return null;\n};\n\nconst checkedFromActive = (isActive: boolean): CheckedState => (isActive ? \"checked\" : \"unchecked\");\n\nconst isCheckableToggle = (widget: Gtk.Widget): boolean =>\n widget instanceof Gtk.Switch ||\n (widget instanceof Gtk.ToggleButton && widget.getAccessibleRole() === Gtk.AccessibleRole.RADIO);\n\nconst getWidgetCheckedState = (widget: Gtk.Widget): CheckedState | null => {\n if (widget instanceof Gtk.CheckButton) {\n return widget.getInconsistent() ? \"mixed\" : checkedFromActive(widget.getActive());\n }\n\n if (isCheckableToggle(widget)) {\n return checkedFromActive(Reflect.get(widget, \"active\") === true);\n }\n\n return null;\n};\n\nconst isWidgetChecked = (widget: Gtk.Widget): boolean | null => {\n const state = getWidgetCheckedState(widget);\n\n return state === null || state === \"mixed\" ? null : state === \"checked\";\n};\n\nconst getWidgetPressedState = (widget: Gtk.Widget): boolean | null => {\n if (widget instanceof Gtk.ToggleButton) {\n return widget.getActive();\n }\n\n return null;\n};\n\nconst getWidgetExpandedState = (widget: Gtk.Widget): boolean | null => {\n if (widget instanceof Gtk.Expander) {\n return widget.getExpanded();\n }\n\n if (widget instanceof Gtk.TreeExpander) {\n return widget.getListRow()?.getExpanded() ?? null;\n }\n\n return null;\n};\n\nconst getWidgetSelectedState = (widget: Gtk.Widget): boolean | null => {\n if (widget instanceof Gtk.ListBoxRow || widget instanceof Gtk.FlowBoxChild) {\n return widget.isSelected();\n }\n\n if (SELECTABLE_ROLES.has(widget.getAccessibleRole())) {\n return (widget.getStateFlags() & Gtk.StateFlags.SELECTED) !== 0;\n }\n\n return null;\n};\n\nconst getWidgetLevel = (widget: Gtk.Widget): number | null => {\n return readAccessibleNumber(widget, \"accessibleLevel\");\n};\n\n/**\n * Returns the accessible invalid state declared on a widget, or null when it declares none.\n *\n * @param widget The widget to read the state from.\n */\nconst getWidgetInvalidState = (widget: Gtk.Widget): Gtk.AccessibleInvalidState | null => {\n const value = readAccessibleNumber(widget, \"accessibleInvalid\");\n\n return value ?? null;\n};\n\n/**\n * Returns the widgets a widget's accessible error-message relation points at, or null when it\n * declares none.\n *\n * @param widget The widget to read the relation from.\n */\nconst getWidgetErrorMessage = (widget: Gtk.Widget): Gtk.Widget[] | null =>\n readAccessibleWidgets(widget, \"accessibleErrorMessage\");\n\nconst getWidgetBusyState = (widget: Gtk.Widget): boolean | null => {\n return readAccessibleBoolean(widget, \"accessibleBusy\");\n};\n\nconst getWidgetDescription = (widget: Gtk.Widget): string | null => {\n return readAccessibleString(widget, \"accessibleDescription\");\n};\n\nconst adjustmentValue = (adjustment: Gtk.Adjustment): ValueTriplet => ({\n now: adjustment.getValue(),\n min: adjustment.getLower(),\n max: adjustment.getUpper(),\n});\n\nconst adjustmentWidgetValue = (widget: Gtk.Widget): ValueTriplet | null => {\n if (widget instanceof Gtk.Range) {\n return adjustmentValue(widget.getAdjustment());\n }\n\n if (widget instanceof Gtk.Scrollbar) {\n return adjustmentValue(widget.getAdjustment());\n }\n\n if (widget instanceof Gtk.SpinButton) {\n return adjustmentValue(widget.getAdjustment());\n }\n\n if (widget instanceof Gtk.ScaleButton) {\n return adjustmentValue(widget.getAdjustment());\n }\n\n return null;\n};\n\nconst getWidgetLiveValue = (widget: Gtk.Widget): ValueTriplet | null => {\n const adjustmentBased = adjustmentWidgetValue(widget);\n\n if (adjustmentBased) {\n return adjustmentBased;\n }\n\n if (widget instanceof Gtk.LevelBar) {\n return { now: widget.getValue(), min: widget.getMinValue(), max: widget.getMaxValue() };\n }\n\n if (widget instanceof Gtk.ProgressBar) {\n return { now: widget.getFraction(), min: 0, max: 1 };\n }\n\n return null;\n};\n\nconst getWidgetValue = (widget: Gtk.Widget): WidgetValue => {\n const text = readAccessibleString(widget, \"accessibleValueText\");\n const live = getWidgetLiveValue(widget);\n\n if (live) {\n return { ...live, text };\n }\n\n return {\n now: readAccessibleNumber(widget, \"accessibleValueNow\"),\n min: readAccessibleNumber(widget, \"accessibleValueMin\"),\n max: readAccessibleNumber(widget, \"accessibleValueMax\"),\n text,\n };\n};\n\nconst getWidgetOwnLabel = (widget: Gtk.Widget): string | null => {\n return readAccessibleString(widget, \"accessibleLabel\");\n};\n\nconst collectAccessibleNames = (targets: Gtk.Widget[]): string[] => {\n const texts: string[] = [];\n\n for (const target of targets) {\n const text = getWidgetAccessibleName(target);\n\n if (text !== null) {\n texts.push(text);\n }\n }\n\n return texts;\n};\n\nconst getWidgetLabelledByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, \"accessibleLabelledBy\");\n\n if (targets === null) {\n return null;\n }\n\n const texts = collectAccessibleNames(targets);\n\n return texts.length > 0 ? texts.join(\" \") : null;\n};\n\nconst isTooltipUsedAsName = (widget: Gtk.Widget): boolean =>\n readAccessibleString(widget, \"accessibleLabel\") === null &&\n getWidgetNodeText(widget) === null &&\n collectLabels(widget).length === 0;\n\nconst getWidgetDescribedByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, \"accessibleDescribedBy\");\n const texts = targets === null ? [] : collectAccessibleNames(targets);\n\n if (texts.length > 0) {\n return texts.join(\" \");\n }\n\n const description = readAccessibleString(widget, \"accessibleDescription\");\n\n if (description !== null) {\n return description;\n }\n\n return isTooltipUsedAsName(widget) ? null : callStringGetter(widget, \"getTooltipText\");\n};\n\nconst isInaccessible = (widget: Gtk.Widget): boolean => {\n let current: Gtk.Widget | null = widget;\n\n while (current) {\n if (!current.getVisible()) {\n return true;\n }\n\n if (readAccessibleBoolean(current, \"accessibleHidden\") === true) {\n return true;\n }\n\n current = current.getParent();\n }\n\n return false;\n};\n\nexport {\n getWidgetNodeText,\n getWidgetTextContent,\n getWidgetLabelText,\n getWidgetAccessibleName,\n getWidgetName,\n getWidgetPlaceholderText,\n getWidgetDisplayValue,\n hasDisplayValue,\n isWidgetDisabled,\n isWidgetVisible,\n getWidgetRequiredState,\n getWidgetSelection,\n getWidgetDescribedByText,\n getWidgetCheckedState,\n isWidgetChecked,\n getWidgetPressedState,\n getWidgetExpandedState,\n getWidgetSelectedState,\n getWidgetLevel,\n getWidgetInvalidState,\n getWidgetErrorMessage,\n getWidgetBusyState,\n getWidgetDescription,\n getWidgetValue,\n getWidgetOwnLabel,\n getWidgetLabelledByText,\n isInaccessible,\n type CheckedState,\n type WidgetValue,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"widget-accessible-properties.js","sourceRoot":"","sources":["../src/widget-accessible-properties.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport {\n isAccessibleNumberMatch,\n readAccessibleBooleanProperty,\n readAccessibleFlag,\n readAccessibleInt,\n readAccessibleRelation,\n readAccessibleState,\n readAccessibleNumber as readNativeNumber,\n readAccessibleString as readNativeString,\n} from \"./accessible-native.js\";\nimport { EDITABLE_ROLES, isEditable, readEditableText } from \"./editable.js\";\nimport { isNameFromAuthor, isNameProhibited } from \"./role-naming.js\";\nimport { children, descendants, relationCandidates } from \"./traversal.js\";\nimport { callBooleanGetter, callStringGetter, getCallableMethod } from \"./widget-getters.js\";\n\ntype WidgetValueField = \"now\" | \"min\" | \"max\";\ntype CheckedState = \"checked\" | \"unchecked\" | \"mixed\";\n\nconst EDITABLE_TEXT_GETTER = \"getText\";\nconst DEFAULT_TEXT_GETTERS = [\"getLabel\", EDITABLE_TEXT_GETTER, \"getTitle\"];\n\nconst SELECTABLE_ROLES: Set<Gtk.AccessibleRole> = new Set<Gtk.AccessibleRole>([\n Gtk.AccessibleRole.ROW,\n Gtk.AccessibleRole.LIST_ITEM,\n Gtk.AccessibleRole.GRID_CELL,\n Gtk.AccessibleRole.OPTION,\n Gtk.AccessibleRole.TREE_ITEM,\n]);\n\nconst PRESSED_BY_TRISTATE: Map<number, boolean> = new Map<number, boolean>([\n [Gtk.AccessibleTristate.FALSE, false],\n [Gtk.AccessibleTristate.TRUE, true],\n]);\n\nconst CHECKED_BY_TRISTATE: Map<number, CheckedState> = new Map<number, CheckedState>([\n [Gtk.AccessibleTristate.FALSE, \"unchecked\"],\n [Gtk.AccessibleTristate.TRUE, \"checked\"],\n [Gtk.AccessibleTristate.MIXED, \"mixed\"],\n]);\n\nconst VALUE_PROPERTIES: Record<WidgetValueField, Gtk.AccessibleProperty> = {\n now: Gtk.AccessibleProperty.VALUE_NOW,\n min: Gtk.AccessibleProperty.VALUE_MIN,\n max: Gtk.AccessibleProperty.VALUE_MAX,\n};\n\nconst readAccessibleString = (widget: Gtk.Widget, property: Gtk.AccessibleProperty): string | null =>\n readNativeString(widget, property);\n\nconst readAccessibleNumber = (widget: Gtk.Widget, property: Gtk.AccessibleProperty): number | null =>\n readNativeNumber(widget, property);\n\nconst readAccessibleWidgets = (widget: Gtk.Widget, relation: Gtk.AccessibleRelation): Gtk.Widget[] | null => {\n const targets = readAccessibleRelation(widget, relation, relationCandidates(widget));\n const widgets = targets.filter((target): target is Gtk.Widget => target instanceof Gtk.Widget);\n\n return widgets.length > 0 ? widgets : null;\n};\n\nconst readAccessibleBoolean = (widget: Gtk.Widget, state: Gtk.AccessibleState): boolean | null =>\n readAccessibleFlag(widget, state);\n\nconst getLabelText = (widget: Gtk.Widget): string | null => {\n if (widget instanceof Gtk.Label) {\n return widget.getLabel();\n }\n\n return readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n};\n\nconst stripMnemonic = (text: string): string => text.replaceAll(/_(.)/g, \"$1\");\nconst isUnderlineUsed = (widget: Gtk.Widget): boolean => callBooleanGetter(widget, \"getUseUnderline\") ?? false;\n\nconst readNamingText = (widget: Gtk.Widget, getter: string, value: string): string =>\n getter !== EDITABLE_TEXT_GETTER && isUnderlineUsed(widget) ? stripMnemonic(value) : value;\n\nconst readFirstText = (widget: Gtk.Widget, getters: string[]): string | null => {\n for (const getter of getters) {\n const value = callStringGetter(widget, getter);\n\n if (value) {\n return readNamingText(widget, getter, value);\n }\n }\n\n return null;\n};\n\n/**\n * Returns a widget's own text by trying its label, text, and title getters in\n * order, or null when none produce a value.\n *\n * @param widget The widget to read text from.\n */\nconst getWidgetText = (widget: Gtk.Widget): string | null => readFirstText(widget, DEFAULT_TEXT_GETTERS);\n\nconst namingLabelText = (widget: Gtk.Widget): string | null => {\n const text = getLabelText(widget);\n\n if (text === null) {\n return null;\n }\n\n return isUnderlineUsed(widget) ? stripMnemonic(text) : text;\n};\n\nconst isNamingLabelRole = (role: Gtk.AccessibleRole, shouldIncludePresentation: boolean): boolean =>\n role === Gtk.AccessibleRole.LABEL ||\n (shouldIncludePresentation && role === Gtk.AccessibleRole.PRESENTATION);\n\nconst collectLabels = (widget: Gtk.Widget): string[] => {\n const isIncludePresentation = widget.getAccessibleRole() === Gtk.AccessibleRole.MENU_ITEM;\n const labels: string[] = [];\n\n for (const descendant of descendants(widget)) {\n if (!isNamingLabelRole(descendant.getAccessibleRole(), isIncludePresentation)) {\n continue;\n }\n\n const labelText = namingLabelText(descendant);\n\n if (labelText) {\n labels.push(labelText);\n }\n }\n\n return labels;\n};\n\nconst getWidgetLabelText = (widget: Gtk.Widget): string | null => {\n if (widget.getAccessibleRole() !== Gtk.AccessibleRole.LABEL) {\n return null;\n }\n\n return namingLabelText(widget);\n};\n\nconst textContentParts = (widget: Gtk.Widget): string[] => {\n const own = getWidgetText(widget);\n\n if (own !== null) {\n return [own];\n }\n\n return [...children(widget)].flatMap((child) => textContentParts(child));\n};\n\nconst getWidgetTextContent = (widget: Gtk.Widget): string | null => {\n const parts = textContentParts(widget);\n\n return parts.length > 0 ? parts.join(\" \") : null;\n};\n\nconst isDropDownFaceCandidate = (widget: Gtk.Widget): boolean =>\n !(widget instanceof Gtk.Popover) && widget.getChildVisible();\n\nconst dropDownChildFaceText = (child: Gtk.Widget): string | null =>\n isDropDownFaceCandidate(child) ? getWidgetLabelText(child) ?? dropDownFaceText(child) : null;\n\nconst dropDownFaceText = (widget: Gtk.Widget): string | null => {\n for (const child of children(widget)) {\n const text = dropDownChildFaceText(child);\n\n if (text !== null) {\n return text;\n }\n }\n\n return null;\n};\n\nconst tabPanelTitle = (widget: Gtk.Widget): string | null => {\n const parent = widget.getParent();\n\n if (parent instanceof Gtk.Stack) {\n return parent.getPage(widget).getTitle() ?? null;\n }\n\n return null;\n};\n\nconst nameFromAuthor = (widget: Gtk.Widget): string | null =>\n getWidgetLabelledByText(widget) ?? readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n\nconst nameFromContent = (widget: Gtk.Widget): string | null => {\n const ownText = getWidgetText(widget);\n\n if (ownText) {\n return ownText;\n }\n\n const childLabels = collectLabels(widget);\n\n return childLabels.length > 0 ? childLabels.join(\" \") : null;\n};\n\nconst getWidgetAccessibleName = (widget: Gtk.Widget): string | null => {\n const role = widget.getAccessibleRole();\n\n if (isNameProhibited(role)) {\n return null;\n }\n\n if (role === Gtk.AccessibleRole.TAB_PANEL) {\n return tabPanelTitle(widget);\n }\n\n const authored = isNameFromAuthor(role) ? nameFromAuthor(widget) : null;\n\n if (authored) {\n return authored;\n }\n\n return nameFromContent(widget) ?? callStringGetter(widget, \"getTooltipText\");\n};\n\nconst getWidgetName = (widget: Gtk.Widget): string | null => {\n return widget.getName();\n};\n\nconst nonEmptyText = (text: string | null): string | null => (text === null || text === \"\" ? null : text);\n\nconst readPlaceholderProperty = (widget: Gtk.Widget): string | null => {\n const value: unknown = Reflect.get(widget, \"placeholderText\");\n\n return typeof value === \"string\" ? nonEmptyText(value) : null;\n};\n\nconst getWidgetPlaceholderText = (widget: Gtk.Widget): string | null => {\n if (!EDITABLE_ROLES.has(widget.getAccessibleRole())) {\n return null;\n }\n\n return (\n nonEmptyText(callStringGetter(widget, \"getPlaceholderText\")) ??\n readPlaceholderProperty(widget) ??\n nonEmptyText(readAccessibleString(widget, Gtk.AccessibleProperty.PLACEHOLDER))\n );\n};\n\nconst comboBoxDisplayValue = (widget: Gtk.Widget): string | null =>\n widget instanceof Gtk.DropDown\n ? (dropDownFaceText(widget) ?? getWidgetValueText(widget))\n : (getWidgetValueText(widget) ?? dropDownFaceText(widget));\n\nconst getWidgetDisplayValue = (widget: Gtk.Widget): string | null => {\n if (EDITABLE_ROLES.has(widget.getAccessibleRole()) && isEditable(widget)) {\n return readEditableText(widget);\n }\n\n if (widget.getAccessibleRole() === Gtk.AccessibleRole.COMBO_BOX) {\n return comboBoxDisplayValue(widget);\n }\n\n return null;\n};\n\nconst hasDisplayValue = (widget: Gtk.Widget): boolean => {\n const role = widget.getAccessibleRole();\n\n return (EDITABLE_ROLES.has(role) && isEditable(widget)) || role === Gtk.AccessibleRole.COMBO_BOX;\n};\n\nconst isWidgetDisabled = (widget: Gtk.Widget): boolean => !widget.isSensitive();\n\nconst hasZeroOpacityAncestor = (widget: Gtk.Widget): boolean => {\n let current: Gtk.Widget | null = widget;\n\n while (current) {\n if (current.getOpacity() === 0) {\n return true;\n }\n\n current = current.getParent();\n }\n\n return false;\n};\n\nconst isWidgetVisible = (widget: Gtk.Widget): boolean => widget.isVisible() && !hasZeroOpacityAncestor(widget);\n\nconst getWidgetRequiredState = (widget: Gtk.Widget): boolean | null =>\n readAccessibleBooleanProperty(widget, Gtk.AccessibleProperty.REQUIRED);\n\nconst readTextViewSelection = (view: Gtk.TextView): string | null => {\n const buffer = view.getBuffer();\n const [hasSelection, start, end] = buffer.getSelectionBounds();\n\n return hasSelection ? buffer.getText(start, end, true) : null;\n};\n\nconst sliceSelectedText = (widget: Gtk.Widget, start: number, end: number): string | null => {\n const chars = getCallableMethod<[number, number], string | null>(widget, \"getChars\");\n\n if (chars) {\n return chars(start, end) ?? null;\n }\n\n const text = callStringGetter(widget, \"getText\");\n\n /* eslint-disable-next-line @typescript-eslint/no-misused-spread -- bounds are code point offsets */\n return text === null ? null : [...text].slice(start, end).join(\"\");\n};\n\nconst readBoundedSelection = (widget: Gtk.Widget): string | null => {\n const bounds = getCallableMethod<[], [boolean, number, number]>(widget, \"getSelectionBounds\");\n\n if (!bounds) {\n return null;\n }\n\n const [hasSelection, start, end] = bounds();\n\n return hasSelection ? sliceSelectedText(widget, start, end) : null;\n};\n\nconst getWidgetSelection = (widget: Gtk.Widget): string | null =>\n widget instanceof Gtk.TextView ? readTextViewSelection(widget) : readBoundedSelection(widget);\n\nconst checkedFromActive = (isActive: boolean): CheckedState => (isActive ? \"checked\" : \"unchecked\");\n\nconst isRadioToggle = (widget: Gtk.Widget): widget is Gtk.ToggleButton =>\n widget instanceof Gtk.ToggleButton && widget.getAccessibleRole() === Gtk.AccessibleRole.RADIO;\n\nconst getWidgetCheckedState = (widget: Gtk.Widget): CheckedState | null => {\n const tristate = readAccessibleState(widget, Gtk.AccessibleState.CHECKED);\n const state = tristate === null ? undefined : CHECKED_BY_TRISTATE.get(tristate);\n\n if (state !== undefined) {\n return state;\n }\n\n return isRadioToggle(widget) ? checkedFromActive(widget.getActive()) : null;\n};\n\nconst isWidgetChecked = (widget: Gtk.Widget): boolean | null => {\n const state = getWidgetCheckedState(widget);\n\n return state === null || state === \"mixed\" ? null : state === \"checked\";\n};\n\nconst getWidgetPressedState = (widget: Gtk.Widget): boolean | null => {\n const tristate = readAccessibleState(widget, Gtk.AccessibleState.PRESSED);\n\n return tristate === null ? null : PRESSED_BY_TRISTATE.get(tristate) ?? null;\n};\n\nconst getWidgetExpandedState = (widget: Gtk.Widget): boolean | null => {\n if (widget instanceof Gtk.TreeExpander) {\n return widget.getListRow()?.getExpanded() ?? null;\n }\n\n return readAccessibleBoolean(widget, Gtk.AccessibleState.EXPANDED);\n};\n\nconst getWidgetSelectedState = (widget: Gtk.Widget): boolean | null => {\n const selected = readAccessibleBoolean(widget, Gtk.AccessibleState.SELECTED);\n\n if (selected !== null) {\n return selected;\n }\n\n if (SELECTABLE_ROLES.has(widget.getAccessibleRole())) {\n return (widget.getStateFlags() & Gtk.StateFlags.SELECTED) !== 0;\n }\n\n return null;\n};\n\nconst getWidgetLevel = (widget: Gtk.Widget): number | null => {\n return readAccessibleInt(widget, Gtk.AccessibleProperty.LEVEL);\n};\n\nconst getWidgetInvalidState = (widget: Gtk.Widget): Gtk.AccessibleInvalidState | null => {\n const value = readAccessibleState(widget, Gtk.AccessibleState.INVALID);\n\n return value ?? null;\n};\n\nconst getWidgetErrorMessage = (widget: Gtk.Widget): Gtk.Widget[] | null =>\n readAccessibleWidgets(widget, Gtk.AccessibleRelation.ERROR_MESSAGE);\n\nconst getWidgetBusyState = (widget: Gtk.Widget): boolean | null => {\n return readAccessibleBoolean(widget, Gtk.AccessibleState.BUSY);\n};\n\nconst getWidgetDescription = (widget: Gtk.Widget): string | null => {\n return readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);\n};\n\nconst getWidgetValueNow = (widget: Gtk.Widget): number | null =>\n readAccessibleNumber(widget, Gtk.AccessibleProperty.VALUE_NOW);\n\nconst getWidgetValueText = (widget: Gtk.Widget): string | null =>\n readAccessibleString(widget, Gtk.AccessibleProperty.VALUE_TEXT);\n\nconst isWidgetValueMatch = (widget: Gtk.Widget, field: WidgetValueField, expected: number): boolean =>\n isAccessibleNumberMatch(widget, VALUE_PROPERTIES[field], expected);\n\nconst getWidgetOwnLabel = (widget: Gtk.Widget): string | null => {\n return readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n};\n\nconst collectAccessibleNames = (targets: Gtk.Widget[]): string[] => {\n const texts: string[] = [];\n\n for (const target of targets) {\n const text = getWidgetAccessibleName(target);\n\n if (text) {\n texts.push(text);\n }\n }\n\n return texts;\n};\n\nconst isSelfLabelling = (widget: Gtk.Widget, targets: Gtk.Widget[]): boolean => {\n const own = new Set(descendants(widget));\n\n return targets.every((target) => own.has(target));\n};\n\nconst getWidgetLabelledByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);\n\n if (targets === null) {\n return null;\n }\n\n const texts = collectAccessibleNames(targets);\n\n return texts.length > 0 ? texts.join(\" \") : null;\n};\n\nconst getWidgetExternalLabelText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);\n\n return targets === null || isSelfLabelling(widget, targets) ? null : getWidgetLabelledByText(widget);\n};\n\nconst isTooltipUsedAsName = (widget: Gtk.Widget): boolean =>\n readAccessibleString(widget, Gtk.AccessibleProperty.LABEL) === null &&\n getWidgetText(widget) === null &&\n collectLabels(widget).length === 0;\n\nconst getWidgetDescribedByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.DESCRIBED_BY);\n const texts = targets === null ? [] : collectAccessibleNames(targets);\n\n if (texts.length > 0) {\n return texts.join(\" \");\n }\n\n const description = readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);\n\n if (description !== null) {\n return description;\n }\n\n return isTooltipUsedAsName(widget) ? null : callStringGetter(widget, \"getTooltipText\");\n};\n\n/**\n * Returns whether a widget is excluded from the accessibility tree, because it or one of its\n * ancestors is marked hidden.\n *\n * @param widget The widget to test.\n */\nconst isInaccessible = (widget: Gtk.Widget): boolean => {\n let current: Gtk.Widget | null = widget;\n\n while (current) {\n if (readAccessibleBoolean(current, Gtk.AccessibleState.HIDDEN) === true) {\n return true;\n }\n\n current = current.getParent();\n }\n\n return false;\n};\n\nexport {\n namingLabelText,\n getWidgetText,\n getWidgetTextContent,\n getWidgetLabelText,\n getWidgetAccessibleName,\n getWidgetName,\n getWidgetPlaceholderText,\n getWidgetDisplayValue,\n hasDisplayValue,\n isWidgetDisabled,\n isWidgetVisible,\n getWidgetRequiredState,\n getWidgetSelection,\n getWidgetDescribedByText,\n getWidgetCheckedState,\n isWidgetChecked,\n getWidgetPressedState,\n getWidgetExpandedState,\n getWidgetSelectedState,\n getWidgetLevel,\n getWidgetInvalidState,\n getWidgetErrorMessage,\n getWidgetBusyState,\n getWidgetDescription,\n getWidgetValueNow,\n getWidgetValueText,\n getWidgetOwnLabel,\n getWidgetExternalLabelText,\n getWidgetLabelledByText,\n isInaccessible,\n isWidgetValueMatch,\n type CheckedState,\n type WidgetValueField,\n};\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type * as Gtk from "@gtkx/gi/gtk";
|
|
2
|
+
declare const getWidgetTypeName: (widget: Gtk.Widget) => string | null;
|
|
3
|
+
declare const hasWidgetMethod: (widget: Gtk.Widget, name: string) => boolean;
|
|
4
|
+
declare const getCallableMethod: <Args extends unknown[], Result>(widget: Gtk.Widget, name: string) => ((...args: Args) => Result) | null;
|
|
5
|
+
declare const callBooleanGetter: (widget: Gtk.Widget, method: string) => boolean | null;
|
|
6
|
+
declare const callStringGetter: (widget: Gtk.Widget, method: string) => string | null;
|
|
7
|
+
export { callBooleanGetter, callStringGetter, getCallableMethod, getWidgetTypeName, hasWidgetMethod };
|
|
8
|
+
//# sourceMappingURL=widget-getters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-getters.d.ts","sourceRoot":"","sources":["../src/widget-getters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AAIzC,QAAA,MAAM,iBAAiB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAAyC,CAAC;AAEnG,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,MAAM,KAAG,OACL,CAAC;AAGxD,QAAA,MAAM,iBAAiB,GAAI,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,EACrD,QAAQ,GAAG,CAAC,MAAM,EAClB,MAAM,MAAM,KACb,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,GAAG,IAIhC,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,GAAG,IAIzE,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAM,GAAG,IAIvE,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getInstanceType, typeName } from "@gtkx/runtime";
|
|
2
|
+
const getWidgetMethod = (widget, name) => Reflect.get(widget, name);
|
|
3
|
+
const getWidgetTypeName = (widget) => typeName(getInstanceType(widget));
|
|
4
|
+
const hasWidgetMethod = (widget, name) => typeof getWidgetMethod(widget, name) === "function";
|
|
5
|
+
/* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- callers name the signature */
|
|
6
|
+
const getCallableMethod = (widget, name) => {
|
|
7
|
+
const fn = getWidgetMethod(widget, name);
|
|
8
|
+
return typeof fn === "function" ? fn.bind(widget) : null;
|
|
9
|
+
};
|
|
10
|
+
const callBooleanGetter = (widget, method) => {
|
|
11
|
+
const value = getCallableMethod(widget, method)?.();
|
|
12
|
+
return typeof value === "boolean" ? value : null;
|
|
13
|
+
};
|
|
14
|
+
const callStringGetter = (widget, method) => {
|
|
15
|
+
const value = getCallableMethod(widget, method)?.();
|
|
16
|
+
return typeof value === "string" ? value : null;
|
|
17
|
+
};
|
|
18
|
+
export { callBooleanGetter, callStringGetter, getCallableMethod, getWidgetTypeName, hasWidgetMethod };
|
|
19
|
+
//# sourceMappingURL=widget-getters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-getters.js","sourceRoot":"","sources":["../src/widget-getters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAE,IAAY,EAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACjG,MAAM,iBAAiB,GAAG,CAAC,MAAkB,EAAiB,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AAEnG,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAE,IAAY,EAAW,EAAE,CAClE,OAAO,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,UAAU,CAAC;AAExD,8GAA8G;AAC9G,MAAM,iBAAiB,GAAG,CACtB,MAAkB,EAClB,IAAY,EACsB,EAAE;IACpC,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEzC,OAAO,OAAO,EAAE,KAAK,UAAU,CAAC,CAAC,CAAE,EAAgC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5F,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAkB,EAAE,MAAc,EAAkB,EAAE;IAC7E,MAAM,KAAK,GAAG,iBAAiB,CAAc,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;IAEjE,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,MAAkB,EAAE,MAAc,EAAiB,EAAE;IAC3E,MAAM,KAAK,GAAG,iBAAiB,CAAc,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;IAEjE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport { getInstanceType, typeName } from \"@gtkx/runtime\";\n\nconst getWidgetMethod = (widget: Gtk.Widget, name: string): unknown => Reflect.get(widget, name);\nconst getWidgetTypeName = (widget: Gtk.Widget): string | null => typeName(getInstanceType(widget));\n\nconst hasWidgetMethod = (widget: Gtk.Widget, name: string): boolean =>\n typeof getWidgetMethod(widget, name) === \"function\";\n\n/* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- callers name the signature */\nconst getCallableMethod = <Args extends unknown[], Result>(\n widget: Gtk.Widget,\n name: string,\n): ((...args: Args) => Result) | null => {\n const fn = getWidgetMethod(widget, name);\n\n return typeof fn === \"function\" ? (fn as (...args: Args) => Result).bind(widget) : null;\n};\n\nconst callBooleanGetter = (widget: Gtk.Widget, method: string): boolean | null => {\n const value = getCallableMethod<[], unknown>(widget, method)?.();\n\n return typeof value === \"boolean\" ? value : null;\n};\n\nconst callStringGetter = (widget: Gtk.Widget, method: string): string | null => {\n const value = getCallableMethod<[], unknown>(widget, method)?.();\n\n return typeof value === \"string\" ? value : null;\n};\n\nexport { callBooleanGetter, callStringGetter, getCallableMethod, getWidgetTypeName, hasWidgetMethod };\n"]}
|
package/dist/within.d.ts
CHANGED
|
@@ -3,12 +3,13 @@ import type { Container } from "./traversal.js";
|
|
|
3
3
|
import type { BoundCustomQueries, QueryMap } from "./types.js";
|
|
4
4
|
/**
|
|
5
5
|
* Binds the built-in queries, and any custom queries, to a specific container
|
|
6
|
-
* so they search only within that scope.
|
|
6
|
+
* so they search only within that scope. Also exported as `getQueriesForElement`,
|
|
7
|
+
* which reads better in library code.
|
|
7
8
|
*
|
|
8
9
|
* @param container The scope the returned queries operate on.
|
|
9
10
|
* @param queries Optional custom queries to bind alongside the built-in ones.
|
|
10
11
|
* @returns The queries bound to the container.
|
|
11
12
|
*/
|
|
12
13
|
declare const within: <Q extends QueryMap = Record<never, never>>(container: Container, queries?: Q) => BoundQueries & BoundCustomQueries<Q>;
|
|
13
|
-
export { within };
|
|
14
|
+
export { within, within as getQueriesForElement };
|
|
14
15
|
//# sourceMappingURL=within.d.ts.map
|
package/dist/within.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"within.d.ts","sourceRoot":"","sources":["../src/within.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAc/D
|
|
1
|
+
{"version":3,"file":"within.d.ts","sourceRoot":"","sources":["../src/within.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAc/D;;;;;;;;GAQG;AACH,QAAA,MAAM,MAAM,GAAI,CAAC,SAAS,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EACrD,WAAW,SAAS,EACpB,UAAU,CAAC,KACZ,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAGpC,CAAC;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC"}
|
package/dist/within.js
CHANGED
|
@@ -6,7 +6,8 @@ const bindCustomQueries = (customQueries, container) => {
|
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
8
8
|
* Binds the built-in queries, and any custom queries, to a specific container
|
|
9
|
-
* so they search only within that scope.
|
|
9
|
+
* so they search only within that scope. Also exported as `getQueriesForElement`,
|
|
10
|
+
* which reads better in library code.
|
|
10
11
|
*
|
|
11
12
|
* @param container The scope the returned queries operate on.
|
|
12
13
|
* @param queries Optional custom queries to bind alongside the built-in ones.
|
|
@@ -16,5 +17,5 @@ const within = (container, queries) => ({
|
|
|
16
17
|
...bindCustomQueries(builtinQueries, container),
|
|
17
18
|
...(queries ? bindCustomQueries(queries, container) : {}),
|
|
18
19
|
});
|
|
19
|
-
export { within };
|
|
20
|
+
export { within, within as getQueriesForElement };
|
|
20
21
|
//# sourceMappingURL=within.js.map
|
package/dist/within.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"within.js","sourceRoot":"","sources":["../src/within.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,SAAS,GACX,CAAiC,KAAsD,EAAE,SAAoB,EAAE,EAAE,CAC7G,CAAC,GAAG,IAAU,EAAU,EAAE,CACtB,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;AAEtC,MAAM,iBAAiB,GAAG,CAAqB,aAAgB,EAAE,SAAoB,EAAyB,EAAE;IAC5G,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAU,CAAC,CAAC;IAEjH,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAA0B,CAAC;AAChE,CAAC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"within.js","sourceRoot":"","sources":["../src/within.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,SAAS,GACX,CAAiC,KAAsD,EAAE,SAAoB,EAAE,EAAE,CAC7G,CAAC,GAAG,IAAU,EAAU,EAAE,CACtB,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;AAEtC,MAAM,iBAAiB,GAAG,CAAqB,aAAgB,EAAE,SAAoB,EAAyB,EAAE;IAC5G,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAU,CAAC,CAAC;IAEjH,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAA0B,CAAC;AAChE,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,GAAG,CACX,SAAoB,EACpB,OAAW,EACyB,EAAE,CAAC,CAAC;IACxC,GAAI,iBAAiB,CAAC,cAAc,EAAE,SAAS,CAAkB;IACjE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAE,EAA4B,CAAC;CACvF,CAAC,CAAC;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC","sourcesContent":["import type { BoundQueries } from \"./bound-queries.js\";\nimport type { Container } from \"./traversal.js\";\nimport type { BoundCustomQueries, QueryMap } from \"./types.js\";\nimport { builtinQueries } from \"./queries.js\";\n\nconst bindQuery =\n <Args extends unknown[], Result>(query: (container: Container, ...args: Args) => Result, container: Container) =>\n (...args: Args): Result =>\n query(container, ...args);\n\nconst bindCustomQueries = <Q extends QueryMap>(customQueries: Q, container: Container): BoundCustomQueries<Q> => {\n const entries = Object.entries(customQueries).map(([key, query]) => [key, bindQuery(query, container)] as const);\n\n return Object.fromEntries(entries) as BoundCustomQueries<Q>;\n};\n\n/**\n * Binds the built-in queries, and any custom queries, to a specific container\n * so they search only within that scope. Also exported as `getQueriesForElement`,\n * which reads better in library code.\n *\n * @param container The scope the returned queries operate on.\n * @param queries Optional custom queries to bind alongside the built-in ones.\n * @returns The queries bound to the container.\n */\nconst within = <Q extends QueryMap = Record<never, never>>(\n container: Container,\n queries?: Q,\n): BoundQueries & BoundCustomQueries<Q> => ({\n ...(bindCustomQueries(builtinQueries, container) as BoundQueries),\n ...(queries ? bindCustomQueries(queries, container) : ({} as BoundCustomQueries<Q>)),\n});\n\nexport { within, within as getQueriesForElement };\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gtkx/testing",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Testing Library-style queries, user events, and screenshots for GTK4 widget trees rendered by GTKX",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gtkx",
|
|
@@ -30,6 +30,10 @@
|
|
|
30
30
|
".": {
|
|
31
31
|
"types": "./dist/index.d.ts",
|
|
32
32
|
"default": "./dist/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./internal": {
|
|
35
|
+
"types": "./dist/internal.d.ts",
|
|
36
|
+
"default": "./dist/internal.js"
|
|
33
37
|
}
|
|
34
38
|
},
|
|
35
39
|
"sideEffects": [
|
|
@@ -44,9 +48,11 @@
|
|
|
44
48
|
"node": ">=24"
|
|
45
49
|
},
|
|
46
50
|
"dependencies": {
|
|
47
|
-
"@
|
|
48
|
-
"@
|
|
49
|
-
"@gtkx/
|
|
51
|
+
"@vitest/expect": "^4.1.10",
|
|
52
|
+
"@vitest/pretty-format": "^4.1.10",
|
|
53
|
+
"@gtkx/react": "1.0.0",
|
|
54
|
+
"@gtkx/utils": "1.0.0",
|
|
55
|
+
"@gtkx/runtime": "1.0.0"
|
|
50
56
|
},
|
|
51
57
|
"peerDependencies": {
|
|
52
58
|
"@types/react": "^19.2",
|
|
@@ -54,10 +60,9 @@
|
|
|
54
60
|
},
|
|
55
61
|
"devDependencies": {
|
|
56
62
|
"@types/react": "^19.2.18",
|
|
57
|
-
"@vitest/expect": "^4.1.10",
|
|
58
63
|
"vitest": "^4.1.10",
|
|
59
|
-
"@gtkx/
|
|
60
|
-
"@gtkx/
|
|
64
|
+
"@gtkx/config": "1.0.0",
|
|
65
|
+
"@gtkx/vitest": "1.0.0"
|
|
61
66
|
},
|
|
62
67
|
"scripts": {
|
|
63
68
|
"release": "tsx ../../scripts/release-package.ts"
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import * as Gtk from "@gtkx/gi/gtk";
|
|
2
|
+
import { getHandle, t } from "@gtkx/runtime";
|
|
3
|
+
|
|
4
|
+
type CheckInt = (handle: unknown, attribute: number, expected: number) => string | null;
|
|
5
|
+
type CheckString = (handle: unknown, attribute: number, expected: string | null) => string | null;
|
|
6
|
+
type CheckDouble = (handle: unknown, attribute: number, expected: number) => string | null;
|
|
7
|
+
type CheckRelation = (...args: unknown[]) => string | null;
|
|
8
|
+
/** A value GTK holds for an accessible property: a string, a number, a token, or a boolean. */
|
|
9
|
+
type AccessibleAttributeValue = boolean | number | string;
|
|
10
|
+
type PropertyReader = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty) => AccessibleAttributeValue | null;
|
|
11
|
+
type NativeCall = (...inputs: unknown[]) => unknown;
|
|
12
|
+
type CheckArg = typeof DOUBLE_ARG | typeof INT_ARG | typeof OBJECT_ARG | typeof STRING_ARG;
|
|
13
|
+
|
|
14
|
+
const LIB = "libgtk-4.so.1";
|
|
15
|
+
const MAX_RELATION_TARGETS = 8;
|
|
16
|
+
const relationBindings: Map<number, CheckRelation> = new Map();
|
|
17
|
+
|
|
18
|
+
const REVERSE_RELATIONS: Partial<Record<Gtk.AccessibleRelation, Gtk.AccessibleRelation>> = {
|
|
19
|
+
[Gtk.AccessibleRelation.LABELLED_BY]: Gtk.AccessibleRelation.LABEL_FOR,
|
|
20
|
+
[Gtk.AccessibleRelation.DESCRIBED_BY]: Gtk.AccessibleRelation.DESCRIPTION_FOR,
|
|
21
|
+
[Gtk.AccessibleRelation.ERROR_MESSAGE]: Gtk.AccessibleRelation.ERROR_MESSAGE_FOR,
|
|
22
|
+
[Gtk.AccessibleRelation.CONTROLS]: Gtk.AccessibleRelation.CONTROLLED_BY,
|
|
23
|
+
[Gtk.AccessibleRelation.DETAILS]: Gtk.AccessibleRelation.DETAILS_FOR,
|
|
24
|
+
[Gtk.AccessibleRelation.FLOW_TO]: Gtk.AccessibleRelation.FLOW_FROM,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const UNDEFINED_VALUE = -1;
|
|
28
|
+
const INT_SENTINEL = -2_147_483_648;
|
|
29
|
+
const NUMBER_SENTINEL = -Number.MAX_VALUE;
|
|
30
|
+
const ACCESSIBLE_NUMBER_TOLERANCE = 0.001;
|
|
31
|
+
const BOOLEAN_DOMAIN = [0, 1];
|
|
32
|
+
const OPTIONAL_BOOLEAN_DOMAIN = [0, 1, UNDEFINED_VALUE];
|
|
33
|
+
const TRISTATE_DOMAIN = [Gtk.AccessibleTristate.FALSE, Gtk.AccessibleTristate.TRUE, Gtk.AccessibleTristate.MIXED];
|
|
34
|
+
|
|
35
|
+
const INVALID_DOMAIN = [
|
|
36
|
+
Gtk.AccessibleInvalidState.FALSE,
|
|
37
|
+
Gtk.AccessibleInvalidState.TRUE,
|
|
38
|
+
Gtk.AccessibleInvalidState.GRAMMAR,
|
|
39
|
+
Gtk.AccessibleInvalidState.SPELLING,
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
const STATE_DOMAINS: Partial<Record<Gtk.AccessibleState, number[]>> = {
|
|
43
|
+
[Gtk.AccessibleState.BUSY]: BOOLEAN_DOMAIN,
|
|
44
|
+
[Gtk.AccessibleState.CHECKED]: TRISTATE_DOMAIN,
|
|
45
|
+
[Gtk.AccessibleState.DISABLED]: BOOLEAN_DOMAIN,
|
|
46
|
+
[Gtk.AccessibleState.EXPANDED]: OPTIONAL_BOOLEAN_DOMAIN,
|
|
47
|
+
[Gtk.AccessibleState.HIDDEN]: BOOLEAN_DOMAIN,
|
|
48
|
+
[Gtk.AccessibleState.INVALID]: INVALID_DOMAIN,
|
|
49
|
+
[Gtk.AccessibleState.PRESSED]: TRISTATE_DOMAIN,
|
|
50
|
+
[Gtk.AccessibleState.SELECTED]: OPTIONAL_BOOLEAN_DOMAIN,
|
|
51
|
+
[Gtk.AccessibleState.VISITED]: OPTIONAL_BOOLEAN_DOMAIN,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const AUTOCOMPLETE_DOMAIN = [
|
|
55
|
+
Gtk.AccessibleAutocomplete.NONE,
|
|
56
|
+
Gtk.AccessibleAutocomplete.INLINE,
|
|
57
|
+
Gtk.AccessibleAutocomplete.LIST,
|
|
58
|
+
Gtk.AccessibleAutocomplete.BOTH,
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
const ORIENTATION_DOMAIN = [Gtk.Orientation.HORIZONTAL, Gtk.Orientation.VERTICAL];
|
|
62
|
+
|
|
63
|
+
const SORT_DOMAIN = [
|
|
64
|
+
Gtk.AccessibleSort.NONE,
|
|
65
|
+
Gtk.AccessibleSort.ASCENDING,
|
|
66
|
+
Gtk.AccessibleSort.DESCENDING,
|
|
67
|
+
Gtk.AccessibleSort.OTHER,
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const TOKEN_DOMAINS: Partial<Record<Gtk.AccessibleProperty, number[]>> = {
|
|
71
|
+
[Gtk.AccessibleProperty.AUTOCOMPLETE]: AUTOCOMPLETE_DOMAIN,
|
|
72
|
+
[Gtk.AccessibleProperty.ORIENTATION]: ORIENTATION_DOMAIN,
|
|
73
|
+
[Gtk.AccessibleProperty.SORT]: SORT_DOMAIN,
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const STRING_PROPERTIES: Set<Gtk.AccessibleProperty> = new Set<Gtk.AccessibleProperty>([
|
|
77
|
+
Gtk.AccessibleProperty.DESCRIPTION,
|
|
78
|
+
Gtk.AccessibleProperty.HELP_TEXT,
|
|
79
|
+
Gtk.AccessibleProperty.KEY_SHORTCUTS,
|
|
80
|
+
Gtk.AccessibleProperty.LABEL,
|
|
81
|
+
Gtk.AccessibleProperty.PLACEHOLDER,
|
|
82
|
+
Gtk.AccessibleProperty.ROLE_DESCRIPTION,
|
|
83
|
+
Gtk.AccessibleProperty.VALUE_TEXT,
|
|
84
|
+
]);
|
|
85
|
+
|
|
86
|
+
const BOOLEAN_PROPERTIES: Set<Gtk.AccessibleProperty> = new Set<Gtk.AccessibleProperty>([
|
|
87
|
+
Gtk.AccessibleProperty.HAS_POPUP,
|
|
88
|
+
Gtk.AccessibleProperty.MODAL,
|
|
89
|
+
Gtk.AccessibleProperty.MULTI_LINE,
|
|
90
|
+
Gtk.AccessibleProperty.MULTI_SELECTABLE,
|
|
91
|
+
Gtk.AccessibleProperty.READ_ONLY,
|
|
92
|
+
Gtk.AccessibleProperty.REQUIRED,
|
|
93
|
+
]);
|
|
94
|
+
|
|
95
|
+
const NUMBER_PROPERTIES: Set<Gtk.AccessibleProperty> = new Set<Gtk.AccessibleProperty>([
|
|
96
|
+
Gtk.AccessibleProperty.VALUE_MAX,
|
|
97
|
+
Gtk.AccessibleProperty.VALUE_MIN,
|
|
98
|
+
Gtk.AccessibleProperty.VALUE_NOW,
|
|
99
|
+
]);
|
|
100
|
+
|
|
101
|
+
const OBJECT_ARG = { type: t.object("borrowed") };
|
|
102
|
+
const INT_ARG = { type: t.int32 };
|
|
103
|
+
const DOUBLE_ARG = { type: t.float64 };
|
|
104
|
+
const STRING_ARG = { type: t.string("borrowed") };
|
|
105
|
+
const CHECK_PROPERTY = "gtk_test_accessible_check_property";
|
|
106
|
+
const checkStateInt = buildAccessibleCheck("gtk_test_accessible_check_state", [INT_ARG]) as CheckInt;
|
|
107
|
+
const checkPropertyInt = buildAccessibleCheck(CHECK_PROPERTY, [INT_ARG]) as CheckInt;
|
|
108
|
+
const checkPropertyDouble = buildAccessibleCheck(CHECK_PROPERTY, [DOUBLE_ARG]) as CheckDouble;
|
|
109
|
+
const checkPropertyString = buildAccessibleCheck(CHECK_PROPERTY, [STRING_ARG]) as CheckString;
|
|
110
|
+
|
|
111
|
+
function buildAccessibleCheck(symbol: string, varargs: CheckArg[]): NativeCall {
|
|
112
|
+
return t.fn(LIB, symbol, {
|
|
113
|
+
args: [OBJECT_ARG, INT_ARG, ...varargs],
|
|
114
|
+
returns: t.string("full"),
|
|
115
|
+
fixedArgCount: 2,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const buildRelationBinding = (targetCount: number): CheckRelation => {
|
|
120
|
+
const targets = Array.from({ length: targetCount + 1 }, () => OBJECT_ARG);
|
|
121
|
+
|
|
122
|
+
return buildAccessibleCheck("gtk_test_accessible_check_relation", targets) as CheckRelation;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const relationBindingFor = (targetCount: number): CheckRelation => {
|
|
126
|
+
const cached = relationBindings.get(targetCount);
|
|
127
|
+
|
|
128
|
+
if (cached !== undefined) {
|
|
129
|
+
return cached;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const built = buildRelationBinding(targetCount);
|
|
133
|
+
relationBindings.set(targetCount, built);
|
|
134
|
+
|
|
135
|
+
return built;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
const isRelationExactly = (
|
|
139
|
+
accessible: Gtk.Accessible,
|
|
140
|
+
relation: Gtk.AccessibleRelation,
|
|
141
|
+
candidate: Gtk.Accessible,
|
|
142
|
+
targetCount: number,
|
|
143
|
+
): boolean => {
|
|
144
|
+
const call = relationBindingFor(targetCount);
|
|
145
|
+
const repeated = Array.from({ length: targetCount }, () => getHandle(candidate));
|
|
146
|
+
|
|
147
|
+
return call(getHandle(accessible), relation, ...repeated, null) === null;
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const hasRelationSize = (
|
|
151
|
+
accessible: Gtk.Accessible,
|
|
152
|
+
relation: Gtk.AccessibleRelation,
|
|
153
|
+
candidates: Gtk.Accessible[],
|
|
154
|
+
size: number,
|
|
155
|
+
): boolean => candidates.some((candidate) => isRelationExactly(accessible, relation, candidate, size));
|
|
156
|
+
|
|
157
|
+
const findRelationSize = (
|
|
158
|
+
accessible: Gtk.Accessible,
|
|
159
|
+
relation: Gtk.AccessibleRelation,
|
|
160
|
+
candidates: Gtk.Accessible[],
|
|
161
|
+
): number => {
|
|
162
|
+
for (let size = 1; size <= MAX_RELATION_TARGETS; size += 1) {
|
|
163
|
+
if (hasRelationSize(accessible, relation, candidates, size)) {
|
|
164
|
+
return size;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return 0;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
const possibleTargets = (relation: Gtk.AccessibleRelation, candidates: Gtk.Accessible[]): Gtk.Accessible[] => {
|
|
172
|
+
const reverse = REVERSE_RELATIONS[relation];
|
|
173
|
+
|
|
174
|
+
if (reverse === undefined) {
|
|
175
|
+
return candidates;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return candidates.filter((candidate) => Gtk.testAccessibleHasRelation(candidate, reverse));
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const readAccessibleRelation = (
|
|
182
|
+
accessible: Gtk.Accessible,
|
|
183
|
+
relation: Gtk.AccessibleRelation,
|
|
184
|
+
pool: Gtk.Accessible[],
|
|
185
|
+
): Gtk.Accessible[] => {
|
|
186
|
+
if (!Gtk.testAccessibleHasRelation(accessible, relation)) {
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const candidates = possibleTargets(relation, pool);
|
|
191
|
+
const size = findRelationSize(accessible, relation, candidates);
|
|
192
|
+
|
|
193
|
+
if (size === 0) {
|
|
194
|
+
return [];
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return candidates.filter((candidate) => isRelationExactly(accessible, relation, candidate, size));
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
const memberOfDomain = (check: CheckInt, handle: unknown, attribute: number, domain: number[]): number | null => {
|
|
201
|
+
for (const candidate of domain) {
|
|
202
|
+
if (check(handle, attribute, candidate) === null) {
|
|
203
|
+
return candidate;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return null;
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const readAccessibleState = (accessible: Gtk.Accessible, state: Gtk.AccessibleState): number | null => {
|
|
211
|
+
const domain = STATE_DOMAINS[state];
|
|
212
|
+
|
|
213
|
+
if (domain === undefined || !Gtk.testAccessibleHasState(accessible, state)) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const member = memberOfDomain(checkStateInt, getHandle(accessible), state, domain);
|
|
218
|
+
|
|
219
|
+
return member === UNDEFINED_VALUE ? null : member;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
const readAccessibleFlag = (accessible: Gtk.Accessible, state: Gtk.AccessibleState): boolean | null => {
|
|
223
|
+
const value = readAccessibleState(accessible, state);
|
|
224
|
+
|
|
225
|
+
return value === null ? null : value === 1;
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
const readAccessibleString = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty): string | null => {
|
|
229
|
+
if (!Gtk.testAccessibleHasProperty(accessible, property)) {
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return checkPropertyString(getHandle(accessible), property, null);
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
const readAccessibleToken = (
|
|
237
|
+
accessible: Gtk.Accessible,
|
|
238
|
+
property: Gtk.AccessibleProperty,
|
|
239
|
+
domain: number[],
|
|
240
|
+
): number | null => {
|
|
241
|
+
if (!Gtk.testAccessibleHasProperty(accessible, property)) {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return memberOfDomain(checkPropertyInt, getHandle(accessible), property, domain);
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
const readAccessibleBooleanProperty = (
|
|
249
|
+
accessible: Gtk.Accessible,
|
|
250
|
+
property: Gtk.AccessibleProperty,
|
|
251
|
+
): boolean | null => {
|
|
252
|
+
const member = readAccessibleToken(accessible, property, BOOLEAN_DOMAIN);
|
|
253
|
+
|
|
254
|
+
return member === null ? null : member === 1;
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
const readAgainstSentinel = (
|
|
258
|
+
check: CheckDouble,
|
|
259
|
+
sentinel: number,
|
|
260
|
+
accessible: Gtk.Accessible,
|
|
261
|
+
property: Gtk.AccessibleProperty,
|
|
262
|
+
): number | null => {
|
|
263
|
+
if (!Gtk.testAccessibleHasProperty(accessible, property)) {
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
const reported = check(getHandle(accessible), property, sentinel);
|
|
268
|
+
|
|
269
|
+
return reported === null ? sentinel : Number(reported);
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
const readAccessibleInt = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty): number | null =>
|
|
273
|
+
readAgainstSentinel(checkPropertyInt, INT_SENTINEL, accessible, property);
|
|
274
|
+
|
|
275
|
+
const readAccessibleNumber = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty): number | null =>
|
|
276
|
+
readAgainstSentinel(checkPropertyDouble, NUMBER_SENTINEL, accessible, property);
|
|
277
|
+
|
|
278
|
+
const isAccessibleNumberProperty = (property: Gtk.AccessibleProperty): boolean => NUMBER_PROPERTIES.has(property);
|
|
279
|
+
|
|
280
|
+
const isAccessibleNumberMatch = (
|
|
281
|
+
accessible: Gtk.Accessible,
|
|
282
|
+
property: Gtk.AccessibleProperty,
|
|
283
|
+
expected: number,
|
|
284
|
+
): boolean =>
|
|
285
|
+
Gtk.testAccessibleHasProperty(accessible, property) &&
|
|
286
|
+
checkPropertyDouble(getHandle(accessible), property, expected) === null;
|
|
287
|
+
|
|
288
|
+
const tokenReaderFor =
|
|
289
|
+
(domain: number[]): PropertyReader =>
|
|
290
|
+
(accessible, property) =>
|
|
291
|
+
readAccessibleToken(accessible, property, domain);
|
|
292
|
+
|
|
293
|
+
const propertyReaderFor = (property: Gtk.AccessibleProperty): PropertyReader => {
|
|
294
|
+
const domain = TOKEN_DOMAINS[property];
|
|
295
|
+
|
|
296
|
+
if (domain !== undefined) {
|
|
297
|
+
return tokenReaderFor(domain);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (STRING_PROPERTIES.has(property)) {
|
|
301
|
+
return readAccessibleString;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
if (BOOLEAN_PROPERTIES.has(property)) {
|
|
305
|
+
return readAccessibleBooleanProperty;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
if (NUMBER_PROPERTIES.has(property)) {
|
|
309
|
+
return readAccessibleNumber;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return readAccessibleInt;
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
const readAccessibleProperty = (
|
|
316
|
+
accessible: Gtk.Accessible,
|
|
317
|
+
property: Gtk.AccessibleProperty,
|
|
318
|
+
): AccessibleAttributeValue | null => propertyReaderFor(property)(accessible, property);
|
|
319
|
+
|
|
320
|
+
export {
|
|
321
|
+
ACCESSIBLE_NUMBER_TOLERANCE,
|
|
322
|
+
isAccessibleNumberMatch,
|
|
323
|
+
isAccessibleNumberProperty,
|
|
324
|
+
readAccessibleBooleanProperty,
|
|
325
|
+
readAccessibleFlag,
|
|
326
|
+
readAccessibleInt,
|
|
327
|
+
readAccessibleNumber,
|
|
328
|
+
readAccessibleProperty,
|
|
329
|
+
readAccessibleRelation,
|
|
330
|
+
readAccessibleState,
|
|
331
|
+
readAccessibleString,
|
|
332
|
+
type AccessibleAttributeValue,
|
|
333
|
+
};
|