@gtkx/testing 2.0.0-beta.1 → 2.0.0-beta.10

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.
Files changed (112) hide show
  1. package/README.md +43 -40
  2. package/dist/accessible-native.d.ts +1 -1
  3. package/dist/accessible-native.d.ts.map +1 -1
  4. package/dist/accessible-native.js +29 -8
  5. package/dist/accessible-native.js.map +1 -1
  6. package/dist/build-queries.d.ts +9 -9
  7. package/dist/build-queries.d.ts.map +1 -1
  8. package/dist/build-queries.js +2 -1
  9. package/dist/build-queries.js.map +1 -1
  10. package/dist/fire-event.d.ts +3 -3
  11. package/dist/fire-event.d.ts.map +1 -1
  12. package/dist/fire-event.js +14 -4
  13. package/dist/fire-event.js.map +1 -1
  14. package/dist/matchers.d.ts +52 -56
  15. package/dist/matchers.d.ts.map +1 -1
  16. package/dist/matchers.js +4 -16
  17. package/dist/matchers.js.map +1 -1
  18. package/dist/queries.d.ts +7 -7
  19. package/dist/queries.d.ts.map +1 -1
  20. package/dist/queries.js +18 -10
  21. package/dist/queries.js.map +1 -1
  22. package/dist/query-helpers.d.ts +2 -2
  23. package/dist/query-helpers.d.ts.map +1 -1
  24. package/dist/query-helpers.js +10 -3
  25. package/dist/query-helpers.js.map +1 -1
  26. package/dist/render.d.ts.map +1 -1
  27. package/dist/render.js +4 -0
  28. package/dist/render.js.map +1 -1
  29. package/dist/role-helpers.d.ts +1 -1
  30. package/dist/role-helpers.d.ts.map +1 -1
  31. package/dist/role-helpers.js +2 -1
  32. package/dist/role-helpers.js.map +1 -1
  33. package/dist/screenshot.d.ts +1 -1
  34. package/dist/screenshot.d.ts.map +1 -1
  35. package/dist/screenshot.js +25 -5
  36. package/dist/screenshot.js.map +1 -1
  37. package/dist/suggestions.d.ts +1 -1
  38. package/dist/suggestions.d.ts.map +1 -1
  39. package/dist/suggestions.js +3 -1
  40. package/dist/suggestions.js.map +1 -1
  41. package/dist/traversal.d.ts +4 -4
  42. package/dist/traversal.d.ts.map +1 -1
  43. package/dist/traversal.js +25 -7
  44. package/dist/traversal.js.map +1 -1
  45. package/dist/types.d.ts +10 -10
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/types.js.map +1 -1
  48. package/dist/user-event/click.d.ts +17 -4
  49. package/dist/user-event/click.d.ts.map +1 -1
  50. package/dist/user-event/click.js +28 -9
  51. package/dist/user-event/click.js.map +1 -1
  52. package/dist/user-event/controller.d.ts +5 -5
  53. package/dist/user-event/controller.d.ts.map +1 -1
  54. package/dist/user-event/controller.js +5 -2
  55. package/dist/user-event/controller.js.map +1 -1
  56. package/dist/user-event/index.d.ts +22 -22
  57. package/dist/user-event/index.d.ts.map +1 -1
  58. package/dist/user-event/index.js +28 -25
  59. package/dist/user-event/index.js.map +1 -1
  60. package/dist/user-event/keyboard.d.ts.map +1 -1
  61. package/dist/user-event/keyboard.js +23 -2
  62. package/dist/user-event/keyboard.js.map +1 -1
  63. package/dist/user-event/list-row-click.d.ts +1 -1
  64. package/dist/user-event/list-row-click.d.ts.map +1 -1
  65. package/dist/user-event/list-row-click.js +2 -1
  66. package/dist/user-event/list-row-click.js.map +1 -1
  67. package/dist/user-event/pointer.d.ts.map +1 -1
  68. package/dist/user-event/pointer.js +9 -11
  69. package/dist/user-event/pointer.js.map +1 -1
  70. package/dist/user-event/selection.d.ts +2 -2
  71. package/dist/user-event/selection.d.ts.map +1 -1
  72. package/dist/user-event/selection.js +8 -2
  73. package/dist/user-event/selection.js.map +1 -1
  74. package/dist/wait-for.d.ts +2 -2
  75. package/dist/wait-for.d.ts.map +1 -1
  76. package/dist/wait-for.js +6 -4
  77. package/dist/wait-for.js.map +1 -1
  78. package/dist/widget-accessible-properties.d.ts +4 -3
  79. package/dist/widget-accessible-properties.d.ts.map +1 -1
  80. package/dist/widget-accessible-properties.js +24 -17
  81. package/dist/widget-accessible-properties.js.map +1 -1
  82. package/dist/widget-getters.d.ts +7 -9
  83. package/dist/widget-getters.d.ts.map +1 -1
  84. package/dist/widget-getters.js.map +1 -1
  85. package/dist/widget-target.d.ts +4 -0
  86. package/dist/widget-target.d.ts.map +1 -0
  87. package/dist/widget-target.js +9 -0
  88. package/dist/widget-target.js.map +1 -0
  89. package/package.json +13 -10
  90. package/src/accessible-native.ts +45 -9
  91. package/src/build-queries.ts +60 -30
  92. package/src/fire-event.ts +32 -8
  93. package/src/matchers.ts +63 -85
  94. package/src/queries.ts +64 -30
  95. package/src/query-helpers.ts +17 -9
  96. package/src/render.tsx +7 -2
  97. package/src/role-helpers.ts +3 -1
  98. package/src/screenshot.ts +48 -5
  99. package/src/suggestions.ts +3 -1
  100. package/src/traversal.ts +35 -11
  101. package/src/types.ts +14 -10
  102. package/src/user-event/click.ts +37 -17
  103. package/src/user-event/controller.ts +8 -5
  104. package/src/user-event/index.ts +133 -47
  105. package/src/user-event/keyboard.ts +32 -3
  106. package/src/user-event/list-row-click.ts +2 -2
  107. package/src/user-event/pointer.ts +11 -15
  108. package/src/user-event/selection.ts +12 -4
  109. package/src/wait-for.ts +9 -6
  110. package/src/widget-accessible-properties.ts +39 -25
  111. package/src/widget-getters.ts +11 -13
  112. package/src/widget-target.ts +11 -0
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/user-event/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAa/C,MAAM,OAAO,GAA2B;IACpC,KAAK,EAAE,GAAG,CAAC,UAAU;IACrB,GAAG,EAAE,GAAG,CAAC,OAAO;IAChB,MAAM,EAAE,GAAG,CAAC,UAAU;IACtB,SAAS,EAAE,GAAG,CAAC,aAAa;IAC5B,MAAM,EAAE,GAAG,CAAC,UAAU;IACtB,OAAO,EAAE,GAAG,CAAC,MAAM;IACnB,SAAS,EAAE,GAAG,CAAC,QAAQ;IACvB,SAAS,EAAE,GAAG,CAAC,QAAQ;IACvB,UAAU,EAAE,GAAG,CAAC,SAAS;IACzB,IAAI,EAAE,GAAG,CAAC,QAAQ;IAClB,GAAG,EAAE,GAAG,CAAC,OAAO;IAChB,MAAM,EAAE,GAAG,CAAC,WAAW;IACvB,QAAQ,EAAE,GAAG,CAAC,aAAa;IAC3B,KAAK,EAAE,GAAG,CAAC,SAAS;IACpB,KAAK,EAAE,GAAG,CAAC,WAAW;IACtB,OAAO,EAAE,GAAG,CAAC,aAAa;IAC1B,GAAG,EAAE,GAAG,CAAC,SAAS;IAClB,IAAI,EAAE,GAAG,CAAC,UAAU;IACpB,EAAE,EAAE,GAAG,CAAC,MAAM;IACd,EAAE,EAAE,GAAG,CAAC,MAAM;IACd,EAAE,EAAE,GAAG,CAAC,MAAM;IACd,EAAE,EAAE,GAAG,CAAC,MAAM;IACd,EAAE,EAAE,GAAG,CAAC,MAAM;IACd,EAAE,EAAE,GAAG,CAAC,MAAM;IACd,EAAE,EAAE,GAAG,CAAC,MAAM;IACd,EAAE,EAAE,GAAG,CAAC,MAAM;IACd,EAAE,EAAE,GAAG,CAAC,MAAM;IACd,GAAG,EAAE,GAAG,CAAC,OAAO;IAChB,GAAG,EAAE,GAAG,CAAC,OAAO;IAChB,GAAG,EAAE,GAAG,CAAC,OAAO;CACnB,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,uBAAuB,GAA2B;IACpD,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,UAAU;IAC9C,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,UAAU;IAC9C,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,YAAY;IAClD,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,YAAY;IAClD,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;IAC1C,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;IAC1C,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,SAAS;IAC5C,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,SAAS;CAC/C,CAAC;AAEF,4CAA4C;AAC5C,MAAM,GAAG,GAAG,CAAC,MAAkB,EAAE,OAAoB,EAAiB,EAAE,CACpE,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE;IACnB,MAAM,SAAS,GAAG,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC;IACxG,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAE9B,IAAI,IAAI,EAAE,CAAC;QACP,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,MAAM,aAAa,GAAG,CAAC,KAAa,EAA4D,EAAE;IAC9F,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,SAAS,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,CAAS,EAAa,EAAE;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEzC,OAAO;QACH,OAAO,EAAE;YACL,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;YACzB,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;SAC7B;QACD,IAAI,EAAE,CAAC,GAAG,CAAC;KACd,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,CAAS,EAAoB,EAAE;IAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAEvC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnF,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,CAAS,EAAoB,EAAE,CAC/D,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAEtE,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAe,EAAE;IACtD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEnC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM;QACV,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,KAAqB,EAAE,MAAiB,EAAQ,EAAE;IAC3E,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEpD,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO;IACX,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC;IAChC,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC;IACjC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACnB,OAAmC,EACnC,MAAc,EACd,SAA2B,EACpB,EAAE;IACT,IAAI,OAAO,YAAY,GAAG,CAAC,aAAa,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC,SAAS,EAAE,KAAK,MAAM,IAAI,OAAO,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC;IAClF,CAAC;IAED,IAAI,OAAO,YAAY,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC5C,OAAO,CACH,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC;YACrD,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CACzD,CAAC;IACN,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,QAAQ,CAAC,EAAE,MAAkB;IAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IAChD,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE1C,IAAI,UAAU,YAAY,GAAG,CAAC,eAAe,EAAE,CAAC;YAC5C,MAAM,UAAU,CAAC;QACrB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,UAAkC,EAAE,QAAsB,EAAW,EAAE;IACxF,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,UAA+B,EAAE,QAAsB,EAAW,EAAE,CAC5F,UAAU,YAAY,GAAG,CAAC,kBAAkB;IAC5C,UAAU,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,aAAa,CAAC,KAAK;IACjD,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEtC,MAAM,mBAAmB,GAAG,CAAC,OAAmB,EAAE,QAAsB,EAAqB,EAAE;IAC3F,KAAK,MAAM,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACvD,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;YACxF,OAAO,OAAO,CAAC;QACnB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAA0B,EAAW,EAAE,CAC1D,MAAM,YAAY,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,aAAa,EAAE,KAAK,YAAY,CAAC;AAElF,MAAM,cAAc,GAAG,CAAC,IAAgB,EAAW,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AAE7F,MAAM,oBAAoB,GAAG,CAAC,QAAsB,EAAE,IAAgB,EAAW,EAAE;IAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IAEpC,IAAI,MAAM,KAAK,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACpE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,CAAC,CAA4B,EAAE,IAAI,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;AACxF,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,QAAsB,EACtB,MAAkB,EAClB,MAAc,EACd,SAA2B,EACpB,EAAE;IACT,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAChC,UAAkC,EAClC,MAAkB,EAClB,MAAc,EACd,SAAiB,EACV,EAAE;IACT,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,CAAC,CAAC,QAAQ,YAAY,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,SAAS;QACb,CAAC;QAED,IAAI,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,SAA2B,EAAW,EAAE;IACzF,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,CAAC,GAAG,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAE5E,OAAO,QAAQ,IAAI,WAAW,KAAK,MAAM,IAAI,cAAc,KAAK,SAAS,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,WAA4B,EAC5B,kBAA0B,EAC1B,MAAc,EACd,SAAiB,EACV,EAAE,CACT,WAAW,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAE/G,MAAM,yBAAyB,GAAG,CAAC,MAAkB,EAAE,kBAA0B,EAAW,EAAE;IAC1F,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAExF,OAAO,QAAQ,IAAI,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,MAAkB,EAAE,MAAc,EAAE,SAAiB,EAAW,EAAE;IACjG,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;IAE5C,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,kBAAkB,IAAI,WAAW,CAAC,sBAAsB,EAAE,EAAE,CAAC;QACpE,IAAI,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;YACvE,OAAO,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,MAAkB,EAAE,MAAc,EAAE,SAAiB,EAAW,EAAE;IACpG,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAE9B,OAAO,IAAI,YAAY,GAAG,CAAC,MAAM,IAAI,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAC5F,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,UAA+B,EAAmC,EAAE;IAC7F,IAAI,UAAU,YAAY,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC/C,OAAO,UAAU,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;IAC7D,CAAC;IAED,OAAO,UAAU,YAAY,GAAG,CAAC,kBAAkB,IAAI,iBAAiB,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;AACjH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAE,KAA2B,EAAa,EAAE;IACnF,MAAM,KAAK,GAAc,EAAE,CAAC;IAE5B,KAAK,MAAM,UAAU,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,IAAI,UAAU,CAAC,mBAAmB,EAAE,KAAK,KAAK,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;YAChF,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,MAAkB,EAAgB,EAAE;IAC1D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAkB,EAAa,EAAE;IAC1D,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;IAErC,OAAO;QACH,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClG,GAAG,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC5D,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;KACvF,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAE,MAAc,EAAE,SAA2B,EAAW,EAAE;IAC/F,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAEpC,IAAI,UAAU,YAAY,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC/C,OAAO,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAkB,EAAE,MAAc,EAAE,SAA2B,EAAW,EAAE,CAChG,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;IACvD,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAE5F,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAE,MAAc,EAAE,SAA2B,EAAQ,EAAE;IAC9F,KAAK,MAAM,IAAI,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,UAAU,YAAY,GAAG,CAAC,kBAAkB,EAAE,CAAC;YACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,KAAK,EAAE,MAAkB,EAAE,MAAc,EAAE,SAA2B,EAAiB,EAAE;IAC3G,IAAI,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QAC5C,OAAO;IACX,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9D,MAAM,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,MAAkB,EAAE,KAAqB,EAAE,MAAiB,EAAiB,EAAE;IACzG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEnC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAEhE,OAAO;IACX,CAAC;IAED,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,KAAqB,EAAE,MAAkB,EAAE,KAAa,EAAiB,EAAE,CACzF,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;IACzB,KAAK,MAAM,MAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAmB,CAAC","sourcesContent":["import * as Gdk from \"@gtkx/gi/gdk\";\nimport * as Gio from \"@gtkx/gi/gio\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { hasSignalListener } from \"@gtkx/runtime/internal\";\nimport type { UserEventState } from \"./state.js\";\nimport { getEditableDelegate } from \"../editable.js\";\nimport { fireEvent } from \"../fire-event.js\";\nimport { ancestors, descendants } from \"../traversal.js\";\nimport { wrapEvent } from \"./event-wrapper.js\";\n\n/** Options for `userEvent.tab`. */\ntype TabOptions = {\n /** Move focus backward instead of forward. */\n isShiftHeld?: boolean;\n};\n\ntype KeyAction = { keyval: number; isPress: boolean };\ntype ParseStep = { actions: KeyAction[]; next: number };\ntype KeyStopController = Gtk.EventControllerKey | Gtk.ShortcutController;\ntype KeyStop = { widget: Gtk.Widget; controller: KeyStopController };\n\nconst KEY_MAP: Record<string, number> = {\n Enter: Gdk.KEY_Return,\n Tab: Gdk.KEY_Tab,\n Escape: Gdk.KEY_Escape,\n Backspace: Gdk.KEY_BackSpace,\n Delete: Gdk.KEY_Delete,\n ArrowUp: Gdk.KEY_Up,\n ArrowDown: Gdk.KEY_Down,\n ArrowLeft: Gdk.KEY_Left,\n ArrowRight: Gdk.KEY_Right,\n Home: Gdk.KEY_Home,\n End: Gdk.KEY_End,\n PageUp: Gdk.KEY_Page_Up,\n PageDown: Gdk.KEY_Page_Down,\n Space: Gdk.KEY_space,\n Shift: Gdk.KEY_Shift_L,\n Control: Gdk.KEY_Control_L,\n Alt: Gdk.KEY_Alt_L,\n Meta: Gdk.KEY_Meta_L,\n F1: Gdk.KEY_F1,\n F2: Gdk.KEY_F2,\n F3: Gdk.KEY_F3,\n F4: Gdk.KEY_F4,\n F5: Gdk.KEY_F5,\n F6: Gdk.KEY_F6,\n F7: Gdk.KEY_F7,\n F8: Gdk.KEY_F8,\n F9: Gdk.KEY_F9,\n F10: Gdk.KEY_F10,\n F11: Gdk.KEY_F11,\n F12: Gdk.KEY_F12,\n};\n\nconst KEY_CONTROLLER_SIGNALS = [\"key-pressed\", \"key-released\"];\n\nconst MODIFIER_KEYVAL_TO_MASK: Record<number, number> = {\n [Gdk.KEY_Shift_L]: Gdk.ModifierType.SHIFT_MASK,\n [Gdk.KEY_Shift_R]: Gdk.ModifierType.SHIFT_MASK,\n [Gdk.KEY_Control_L]: Gdk.ModifierType.CONTROL_MASK,\n [Gdk.KEY_Control_R]: Gdk.ModifierType.CONTROL_MASK,\n [Gdk.KEY_Alt_L]: Gdk.ModifierType.ALT_MASK,\n [Gdk.KEY_Alt_R]: Gdk.ModifierType.ALT_MASK,\n [Gdk.KEY_Meta_L]: Gdk.ModifierType.META_MASK,\n [Gdk.KEY_Meta_R]: Gdk.ModifierType.META_MASK,\n};\n\n/** Moves focus within the widget's root. */\nconst tab = (widget: Gtk.Widget, options?: TabOptions): Promise<void> =>\n wrapEvent(widget, () => {\n const direction = options?.isShiftHeld ? Gtk.DirectionType.TAB_BACKWARD : Gtk.DirectionType.TAB_FORWARD;\n const root = widget.getRoot();\n\n if (root) {\n root.childFocus(direction);\n }\n });\n\nconst parseKeyToken = (token: string): { keyval: number; isPress: boolean; isRelease: boolean } => {\n let keyName = token;\n let isPress = true;\n let isRelease = true;\n\n if (keyName.startsWith(\"/\")) {\n keyName = keyName.slice(1);\n isPress = false;\n } else if (keyName.endsWith(\">\")) {\n keyName = keyName.slice(0, -1);\n isRelease = false;\n }\n\n const keyval = KEY_MAP[keyName];\n\n if (keyval === undefined) {\n throw new Error(`Unknown key: {${keyName}}`);\n }\n\n return { keyval, isPress, isRelease };\n};\n\nconst parseCharAt = (input: string, i: number): ParseStep => {\n const keyval = input.codePointAt(i) ?? 0;\n\n return {\n actions: [\n { keyval, isPress: true },\n { keyval, isPress: false },\n ],\n next: i + 1,\n };\n};\n\nconst parseBraceAt = (input: string, i: number): ParseStep | null => {\n const endBrace = input.indexOf(\"}\", i);\n\n if (endBrace === -1) {\n return null;\n }\n\n const { keyval, isPress, isRelease } = parseKeyToken(input.slice(i + 1, endBrace));\n const actions: KeyAction[] = [];\n\n if (isPress) {\n actions.push({ keyval, isPress: true });\n }\n\n if (isRelease) {\n actions.push({ keyval, isPress: false });\n }\n\n return { actions, next: endBrace + 1 };\n};\n\nconst parseStepAt = (input: string, i: number): ParseStep | null =>\n input[i] === \"{\" ? parseBraceAt(input, i) : parseCharAt(input, i);\n\nconst parseKeyboardInput = (input: string): KeyAction[] => {\n const actions: KeyAction[] = [];\n let i = 0;\n\n while (i < input.length) {\n const step = parseStepAt(input, i);\n\n if (step === null) {\n break;\n }\n\n actions.push(...step.actions);\n i = step.next;\n }\n\n return actions;\n};\n\nconst updateModifierState = (state: UserEventState, action: KeyAction): void => {\n const mask = MODIFIER_KEYVAL_TO_MASK[action.keyval];\n\n if (!mask) {\n return;\n }\n\n if (action.isPress) {\n state.modifierState |= mask;\n } else {\n state.modifierState &= ~mask;\n }\n};\n\nconst isTriggerMatch = (\n trigger: Gtk.ShortcutTrigger | null,\n keyval: number,\n modifiers: Gdk.ModifierType,\n): boolean => {\n if (trigger instanceof Gtk.KeyvalTrigger) {\n return trigger.getKeyval() === keyval && trigger.getModifiers() === modifiers;\n }\n\n if (trigger instanceof Gtk.AlternativeTrigger) {\n return (\n isTriggerMatch(trigger.getFirst(), keyval, modifiers) ||\n isTriggerMatch(trigger.getSecond(), keyval, modifiers)\n );\n }\n\n return false;\n};\n\nconst controllersOn = function* (widget: Gtk.Widget): Generator<Gtk.EventController> {\n const controllers = widget.observeControllers();\n const count = controllers.getNItems();\n\n for (let i = 0; i < count; i++) {\n const controller = controllers.getItem(i);\n\n if (controller instanceof Gtk.EventController) {\n yield controller;\n }\n }\n};\n\nconst hasShortcut = (controller: Gtk.ShortcutController, shortcut: Gtk.Shortcut): boolean => {\n const count = controller.getNItems();\n\n for (let i = 0; i < count; i++) {\n if (controller.getItem(i) === shortcut) {\n return true;\n }\n }\n\n return false;\n};\n\nconst isManagingShortcut = (controller: Gtk.EventController, shortcut: Gtk.Shortcut): boolean =>\n controller instanceof Gtk.ShortcutController &&\n controller.getScope() !== Gtk.ShortcutScope.LOCAL &&\n hasShortcut(controller, shortcut);\n\nconst managedShortcutHost = (manager: Gtk.Widget, shortcut: Gtk.Shortcut): Gtk.Widget | null => {\n for (const current of [manager, ...descendants(manager)]) {\n if (controllersOn(current).some((controller) => isManagingShortcut(controller, shortcut))) {\n return current;\n }\n }\n\n return null;\n};\n\nconst isMovingFocus = (action: Gtk.ShortcutAction): boolean =>\n action instanceof Gtk.SignalAction && action.getSignalName() === \"move-focus\";\n\nconst isShortcutLive = (host: Gtk.Widget): boolean => host.isSensitive() && host.getMapped();\n\nconst didRunShortcutAction = (shortcut: Gtk.Shortcut, host: Gtk.Widget): boolean => {\n const action = shortcut.getAction();\n\n if (action === null || isMovingFocus(action) || !isShortcutLive(host)) {\n return false;\n }\n\n return action.activate(0 as Gtk.ShortcutActionFlags, host, shortcut.getArguments());\n};\n\nconst didActivateShortcut = (\n shortcut: Gtk.Shortcut,\n widget: Gtk.Widget,\n keyval: number,\n modifiers: Gdk.ModifierType,\n): boolean => {\n if (!isTriggerMatch(shortcut.getTrigger(), keyval, modifiers)) {\n return false;\n }\n\n return didRunShortcutAction(shortcut, managedShortcutHost(widget, shortcut) ?? widget);\n};\n\nconst didActivateMatchingShortcut = (\n controller: Gtk.ShortcutController,\n widget: Gtk.Widget,\n keyval: number,\n modifiers: number,\n): boolean => {\n const count = controller.getNItems();\n\n for (let j = 0; j < count; j++) {\n const shortcut = controller.getItem(j);\n\n if (!(shortcut instanceof Gtk.Shortcut)) {\n continue;\n }\n\n if (didActivateShortcut(shortcut, widget, keyval, modifiers)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst isAccelMatch = (accel: string, keyval: number, modifiers: Gdk.ModifierType): boolean => {\n const [isParsed, accelKeyval, accelModifiers] = Gtk.acceleratorParse(accel);\n\n return isParsed && accelKeyval === keyval && accelModifiers === modifiers;\n};\n\nconst hasMatchingAccel = (\n application: Gtk.Application,\n detailedActionName: string,\n keyval: number,\n modifiers: number,\n): boolean =>\n application.getAccelsForAction(detailedActionName).some((accel) => isAccelMatch(accel, keyval, modifiers));\n\nconst didActivateDetailedAction = (window: Gtk.Window, detailedActionName: string): boolean => {\n const [isParsed, actionName, target] = Gio.Action.parseDetailedName(detailedActionName);\n\n return isParsed && window.activateAction(actionName, target);\n};\n\nconst didDispatchAccelsOnWindow = (window: Gtk.Window, keyval: number, modifiers: number): boolean => {\n const application = window.getApplication();\n\n if (!application) {\n return false;\n }\n\n for (const detailedActionName of application.listActionDescriptions()) {\n if (hasMatchingAccel(application, detailedActionName, keyval, modifiers)) {\n return didActivateDetailedAction(window, detailedActionName);\n }\n }\n\n return false;\n};\n\nconst didDispatchApplicationAccels = (widget: Gtk.Widget, keyval: number, modifiers: number): boolean => {\n const root = widget.getRoot();\n\n return root instanceof Gtk.Window && didDispatchAccelsOnWindow(root, keyval, modifiers);\n};\n\nconst isKeyStopController = (controller: Gtk.EventController): controller is KeyStopController => {\n if (controller instanceof Gtk.ShortcutController) {\n return controller.getScope() === Gtk.ShortcutScope.LOCAL;\n }\n\n return controller instanceof Gtk.EventControllerKey && hasSignalListener(controller, KEY_CONTROLLER_SIGNALS);\n};\n\nconst keyStopsInPhase = (widget: Gtk.Widget, phase: Gtk.PropagationPhase): KeyStop[] => {\n const stops: KeyStop[] = [];\n\n for (const controller of controllersOn(widget)) {\n if (controller.getPropagationPhase() === phase && isKeyStopController(controller)) {\n stops.push({ widget, controller });\n }\n }\n\n return stops;\n};\n\nconst propagationChain = (widget: Gtk.Widget): Gtk.Widget[] => {\n const delegate = getEditableDelegate(widget);\n const below = delegate === null ? [] : [delegate];\n\n return [...below, widget, ...ancestors(widget)];\n};\n\nconst keyPropagationChain = (widget: Gtk.Widget): KeyStop[] => {\n const chain = propagationChain(widget);\n const [eventWidget = widget] = chain;\n\n return [\n ...chain.toReversed().flatMap((current) => keyStopsInPhase(current, Gtk.PropagationPhase.CAPTURE)),\n ...keyStopsInPhase(eventWidget, Gtk.PropagationPhase.TARGET),\n ...chain.flatMap((current) => keyStopsInPhase(current, Gtk.PropagationPhase.BUBBLE)),\n ];\n};\n\nconst didStopHandlePress = (stop: KeyStop, keyval: number, modifiers: Gdk.ModifierType): boolean => {\n const { controller, widget } = stop;\n\n if (controller instanceof Gtk.ShortcutController) {\n return didActivateMatchingShortcut(controller, widget, keyval, modifiers);\n }\n\n return controller.emit(\"key-pressed\", keyval, 0, modifiers);\n};\n\nconst didHandlePress = (widget: Gtk.Widget, keyval: number, modifiers: Gdk.ModifierType): boolean =>\n didDispatchApplicationAccels(widget, keyval, modifiers) ||\n keyPropagationChain(widget).some((stop) => didStopHandlePress(stop, keyval, modifiers));\n\nconst emitKeyReleased = (widget: Gtk.Widget, keyval: number, modifiers: Gdk.ModifierType): void => {\n for (const stop of keyPropagationChain(widget)) {\n if (stop.controller instanceof Gtk.EventControllerKey) {\n stop.controller.emit(\"key-released\", keyval, 0, modifiers);\n }\n }\n};\n\nconst applyKeyPress = async (widget: Gtk.Widget, keyval: number, modifiers: Gdk.ModifierType): Promise<void> => {\n if (didHandlePress(widget, keyval, modifiers)) {\n return;\n }\n\n if (keyval === Gdk.KEY_Return && widget instanceof Gtk.Editable) {\n await fireEvent(widget, \"activate\");\n }\n};\n\nconst applyKeyAction = async (widget: Gtk.Widget, state: UserEventState, action: KeyAction): Promise<void> => {\n updateModifierState(state, action);\n\n if (action.isPress) {\n await applyKeyPress(widget, action.keyval, state.modifierState);\n\n return;\n }\n\n emitKeyReleased(widget, action.keyval, state.modifierState);\n};\n\nconst keyboard = (state: UserEventState, widget: Gtk.Widget, input: string): Promise<void> =>\n wrapEvent(widget, async () => {\n for (const action of parseKeyboardInput(input)) {\n await applyKeyAction(widget, state, action);\n }\n });\n\nexport { tab, keyboard, type TabOptions };\n"]}
1
+ {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/user-event/keyboard.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gdk from \"@gtkx/gi/gdk\";\nimport * as Gio from \"@gtkx/gi/gio\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { hasSignalListener } from \"@gtkx/runtime/internal\";\nimport type { UserEventState } from \"./state.js\";\nimport { getEditableDelegate } from \"../editable.js\";\nimport { fireEvent } from \"../fire-event.js\";\nimport { ancestors, descendants } from \"../traversal.js\";\nimport { wrapEvent } from \"./event-wrapper.js\";\n\n/** Options for `userEvent.tab`. */\ntype TabOptions = {\n /** Move focus backward instead of forward. */\n isShiftHeld?: boolean;\n};\n\ntype KeyAction = { keyval: number; isPress: boolean };\ntype ParseStep = { actions: KeyAction[]; next: number };\ntype KeyStopController = Gtk.EventControllerKey | Gtk.ShortcutController;\ntype KeyStop = { widget: Gtk.Widget; controller: KeyStopController };\ntype KeyTarget = { root: Gtk.Root | null; focus: Gtk.Widget | null };\n\nconst KEY_MAP: Record<string, number> = {\n Enter: Gdk.KEY_Return,\n Tab: Gdk.KEY_Tab,\n Escape: Gdk.KEY_Escape,\n Backspace: Gdk.KEY_BackSpace,\n Delete: Gdk.KEY_Delete,\n ArrowUp: Gdk.KEY_Up,\n ArrowDown: Gdk.KEY_Down,\n ArrowLeft: Gdk.KEY_Left,\n ArrowRight: Gdk.KEY_Right,\n Home: Gdk.KEY_Home,\n End: Gdk.KEY_End,\n PageUp: Gdk.KEY_Page_Up,\n PageDown: Gdk.KEY_Page_Down,\n Space: Gdk.KEY_space,\n Shift: Gdk.KEY_Shift_L,\n Control: Gdk.KEY_Control_L,\n Alt: Gdk.KEY_Alt_L,\n Meta: Gdk.KEY_Meta_L,\n F1: Gdk.KEY_F1,\n F2: Gdk.KEY_F2,\n F3: Gdk.KEY_F3,\n F4: Gdk.KEY_F4,\n F5: Gdk.KEY_F5,\n F6: Gdk.KEY_F6,\n F7: Gdk.KEY_F7,\n F8: Gdk.KEY_F8,\n F9: Gdk.KEY_F9,\n F10: Gdk.KEY_F10,\n F11: Gdk.KEY_F11,\n F12: Gdk.KEY_F12,\n};\n\nconst KEY_CONTROLLER_SIGNALS = [\"key-pressed\", \"key-released\"];\n\nconst MODIFIER_KEYVAL_TO_MASK: Record<number, number> = {\n [Gdk.KEY_Shift_L]: Gdk.ModifierType.SHIFT_MASK,\n [Gdk.KEY_Shift_R]: Gdk.ModifierType.SHIFT_MASK,\n [Gdk.KEY_Control_L]: Gdk.ModifierType.CONTROL_MASK,\n [Gdk.KEY_Control_R]: Gdk.ModifierType.CONTROL_MASK,\n [Gdk.KEY_Alt_L]: Gdk.ModifierType.ALT_MASK,\n [Gdk.KEY_Alt_R]: Gdk.ModifierType.ALT_MASK,\n [Gdk.KEY_Meta_L]: Gdk.ModifierType.META_MASK,\n [Gdk.KEY_Meta_R]: Gdk.ModifierType.META_MASK,\n};\n\n/** Moves focus within the widget's root. */\nconst tab = (widget: Gtk.Widget, options?: TabOptions): Promise<void> =>\n wrapEvent(widget, () => {\n const direction = options?.isShiftHeld ? Gtk.DirectionType.TAB_BACKWARD : Gtk.DirectionType.TAB_FORWARD;\n const root = widget.getRoot();\n\n if (root) {\n root.childFocus(direction);\n }\n });\n\nconst parseKeyToken = (token: string): { keyval: number; isPress: boolean; isRelease: boolean } => {\n let keyName = token;\n let isPress = true;\n let isRelease = true;\n\n if (keyName.startsWith(\"/\")) {\n keyName = keyName.slice(1);\n isPress = false;\n } else if (keyName.endsWith(\">\")) {\n keyName = keyName.slice(0, -1);\n isRelease = false;\n }\n\n const keyval = KEY_MAP[keyName];\n\n if (keyval === undefined) {\n throw new Error(`Unknown key: {${keyName}}`);\n }\n\n return { keyval, isPress, isRelease };\n};\n\nconst parseCharAt = (input: string, i: number): ParseStep => {\n const keyval = input.codePointAt(i) ?? 0;\n\n return {\n actions: [\n { keyval, isPress: true },\n { keyval, isPress: false },\n ],\n next: i + 1,\n };\n};\n\nconst parseBraceAt = (input: string, i: number): ParseStep | null => {\n const endBrace = input.indexOf(\"}\", i);\n\n if (endBrace === -1) {\n return null;\n }\n\n const { keyval, isPress, isRelease } = parseKeyToken(input.slice(i + 1, endBrace));\n const actions: KeyAction[] = [];\n\n if (isPress) {\n actions.push({ keyval, isPress: true });\n }\n\n if (isRelease) {\n actions.push({ keyval, isPress: false });\n }\n\n return { actions, next: endBrace + 1 };\n};\n\nconst parseStepAt = (input: string, i: number): ParseStep | null =>\n input[i] === \"{\" ? parseBraceAt(input, i) : parseCharAt(input, i);\n\nconst parseKeyboardInput = (input: string): KeyAction[] => {\n const actions: KeyAction[] = [];\n let i = 0;\n\n while (i < input.length) {\n const step = parseStepAt(input, i);\n\n if (step === null) {\n break;\n }\n\n actions.push(...step.actions);\n i = step.next;\n }\n\n return actions;\n};\n\nconst updateModifierState = (state: UserEventState, action: KeyAction): void => {\n const mask = MODIFIER_KEYVAL_TO_MASK[action.keyval];\n\n if (!mask) {\n return;\n }\n\n if (action.isPress) {\n state.modifierState |= mask;\n } else {\n state.modifierState &= ~mask;\n }\n};\n\nconst isTriggerMatch = (\n trigger: Gtk.ShortcutTrigger | null,\n keyval: number,\n modifiers: Gdk.ModifierType,\n): boolean => {\n if (trigger instanceof Gtk.KeyvalTrigger) {\n return trigger.getKeyval() === keyval && trigger.getModifiers() === modifiers;\n }\n\n if (trigger instanceof Gtk.AlternativeTrigger) {\n return (\n isTriggerMatch(trigger.getFirst(), keyval, modifiers) ||\n isTriggerMatch(trigger.getSecond(), keyval, modifiers)\n );\n }\n\n return false;\n};\n\nconst controllersOn = function* (widget: Gtk.Widget): Generator<Gtk.EventController> {\n const controllers = widget.observeControllers();\n const count = controllers.getNItems();\n\n for (let i = 0; i < count; i++) {\n const controller = controllers.getItem(i);\n\n if (controller instanceof Gtk.EventController) {\n yield controller;\n }\n }\n};\n\nconst hasShortcut = (controller: Gtk.ShortcutController, shortcut: Gtk.Shortcut): boolean => {\n const count = controller.getNItems();\n\n for (let i = 0; i < count; i++) {\n if (controller.getItem(i) === shortcut) {\n return true;\n }\n }\n\n return false;\n};\n\nconst isManagingShortcut = (controller: Gtk.EventController, shortcut: Gtk.Shortcut): boolean =>\n controller instanceof Gtk.ShortcutController &&\n controller.getScope() !== Gtk.ShortcutScope.LOCAL &&\n hasShortcut(controller, shortcut);\n\nconst managedShortcutHost = (manager: Gtk.Widget, shortcut: Gtk.Shortcut): Gtk.Widget | null => {\n for (const current of [manager, ...descendants(manager)]) {\n if (controllersOn(current).some((controller) => isManagingShortcut(controller, shortcut))) {\n return current;\n }\n }\n\n return null;\n};\n\nconst isMovingFocus = (action: Gtk.ShortcutAction): boolean =>\n action instanceof Gtk.SignalAction && action.getSignalName() === \"move-focus\";\n\nconst isShortcutLive = (host: Gtk.Widget): boolean => host.isSensitive() && host.getMapped();\n\nconst didRunShortcutAction = (shortcut: Gtk.Shortcut, host: Gtk.Widget): boolean => {\n const action = shortcut.getAction();\n\n if (action === null || isMovingFocus(action) || !isShortcutLive(host)) {\n return false;\n }\n\n return action.activate(0 as Gtk.ShortcutActionFlags, host, shortcut.getArguments());\n};\n\nconst didActivateShortcut = (\n shortcut: Gtk.Shortcut,\n widget: Gtk.Widget,\n keyval: number,\n modifiers: Gdk.ModifierType,\n): boolean => {\n if (!isTriggerMatch(shortcut.getTrigger(), keyval, modifiers)) {\n return false;\n }\n\n return didRunShortcutAction(shortcut, managedShortcutHost(widget, shortcut) ?? widget);\n};\n\nconst didActivateMatchingShortcut = (\n controller: Gtk.ShortcutController,\n widget: Gtk.Widget,\n keyval: number,\n modifiers: number,\n): boolean => {\n const count = controller.getNItems();\n\n for (let j = 0; j < count; j++) {\n const shortcut = controller.getItem(j);\n\n if (!(shortcut instanceof Gtk.Shortcut)) {\n continue;\n }\n\n if (didActivateShortcut(shortcut, widget, keyval, modifiers)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst isAccelMatch = (accel: string, keyval: number, modifiers: Gdk.ModifierType): boolean => {\n const [isParsed, accelKeyval, accelModifiers] = Gtk.acceleratorParse(accel);\n\n return isParsed && accelKeyval === keyval && accelModifiers === modifiers;\n};\n\nconst hasMatchingAccel = (\n application: Gtk.Application,\n detailedActionName: string,\n keyval: number,\n modifiers: number,\n): boolean =>\n application.getAccelsForAction(detailedActionName).some((accel) => isAccelMatch(accel, keyval, modifiers));\n\nconst didActivateDetailedAction = (window: Gtk.Window, detailedActionName: string): boolean => {\n const [isParsed, actionName, target] = Gio.Action.parseDetailedName(detailedActionName);\n\n return isParsed && window.activateAction(actionName, target);\n};\n\nconst didDispatchAccelsOnWindow = (window: Gtk.Window, keyval: number, modifiers: number): boolean => {\n const application = window.getApplication();\n\n if (!application) {\n return false;\n }\n\n for (const detailedActionName of application.listActionDescriptions()) {\n if (hasMatchingAccel(application, detailedActionName, keyval, modifiers)) {\n return didActivateDetailedAction(window, detailedActionName);\n }\n }\n\n return false;\n};\n\nconst didDispatchApplicationAccels = (widget: Gtk.Widget, keyval: number, modifiers: number): boolean => {\n const root = widget.getRoot();\n\n return root instanceof Gtk.Window && didDispatchAccelsOnWindow(root, keyval, modifiers);\n};\n\nconst isKeyStopController = (controller: Gtk.EventController): controller is KeyStopController => {\n if (controller instanceof Gtk.ShortcutController) {\n return controller.getScope() === Gtk.ShortcutScope.LOCAL;\n }\n\n return controller instanceof Gtk.EventControllerKey && hasSignalListener(controller, KEY_CONTROLLER_SIGNALS);\n};\n\nconst keyStopsInPhase = (widget: Gtk.Widget, phase: Gtk.PropagationPhase): KeyStop[] => {\n const stops: KeyStop[] = [];\n\n for (const controller of controllersOn(widget)) {\n if (controller.getPropagationPhase() === phase && isKeyStopController(controller)) {\n stops.push({ widget, controller });\n }\n }\n\n return stops;\n};\n\nconst propagationChain = (widget: Gtk.Widget): Gtk.Widget[] => {\n const delegate = getEditableDelegate(widget);\n const below = delegate === null ? [] : [delegate];\n\n return [...below, widget, ...ancestors(widget)];\n};\n\nconst keyPropagationChain = (widget: Gtk.Widget): KeyStop[] => {\n const chain = propagationChain(widget);\n const [eventWidget = widget] = chain;\n\n return [\n ...chain.toReversed().flatMap((current) => keyStopsInPhase(current, Gtk.PropagationPhase.CAPTURE)),\n ...keyStopsInPhase(eventWidget, Gtk.PropagationPhase.TARGET),\n ...chain.flatMap((current) => keyStopsInPhase(current, Gtk.PropagationPhase.BUBBLE)),\n ];\n};\n\nconst didStopHandlePress = (stop: KeyStop, keyval: number, modifiers: Gdk.ModifierType): boolean => {\n const { controller, widget } = stop;\n\n if (controller instanceof Gtk.ShortcutController) {\n return didActivateMatchingShortcut(controller, widget, keyval, modifiers);\n }\n\n return controller.emit(\"key-pressed\", keyval, 0, modifiers);\n};\n\nconst keyTargetFor = (widget: Gtk.Widget): KeyTarget => {\n const root = widget.getRoot();\n\n return { root, focus: root instanceof Gtk.Window ? root.getFocus() : null };\n};\n\nconst isKeyTargetInvalidated = (widget: Gtk.Widget, target: KeyTarget): boolean => {\n const current = keyTargetFor(widget);\n\n return current.root !== target.root || current.focus !== target.focus || !widget.getMapped();\n};\n\nconst didHandlePress = (widget: Gtk.Widget, keyval: number, modifiers: Gdk.ModifierType): boolean => {\n const target = keyTargetFor(widget);\n\n if (didDispatchApplicationAccels(widget, keyval, modifiers)) {\n return true;\n }\n\n if (isKeyTargetInvalidated(widget, target)) {\n return true;\n }\n\n for (const stop of keyPropagationChain(widget)) {\n if (didStopHandlePress(stop, keyval, modifiers) || isKeyTargetInvalidated(widget, target)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst emitKeyReleased = (widget: Gtk.Widget, keyval: number, modifiers: Gdk.ModifierType): void => {\n for (const stop of keyPropagationChain(widget)) {\n if (stop.controller instanceof Gtk.EventControllerKey) {\n stop.controller.emit(\"key-released\", keyval, 0, modifiers);\n }\n }\n};\n\nconst applyKeyPress = async (widget: Gtk.Widget, keyval: number, modifiers: Gdk.ModifierType): Promise<void> => {\n if (didHandlePress(widget, keyval, modifiers)) {\n return;\n }\n\n if (keyval === Gdk.KEY_Return && widget instanceof Gtk.Editable) {\n await fireEvent(widget, \"activate\");\n }\n};\n\nconst applyKeyAction = async (widget: Gtk.Widget, state: UserEventState, action: KeyAction): Promise<void> => {\n updateModifierState(state, action);\n\n if (action.isPress) {\n await applyKeyPress(widget, action.keyval, state.modifierState);\n\n return;\n }\n\n emitKeyReleased(widget, action.keyval, state.modifierState);\n};\n\nconst keyboard = (state: UserEventState, widget: Gtk.Widget, input: string): Promise<void> =>\n wrapEvent(widget, async () => {\n for (const action of parseKeyboardInput(input)) {\n await applyKeyAction(widget, state, action);\n }\n });\n\nexport { tab, keyboard, type TabOptions };\n"]}
@@ -1,4 +1,4 @@
1
- import type * as Gtk from "@gtkx/gi/gtk";
1
+ import * as Gtk from "@gtkx/gi/gtk";
2
2
  declare const applyRowClick: (row: Gtk.Widget, nPress: number) => void;
3
3
  export { applyRowClick };
4
4
  //# sourceMappingURL=list-row-click.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-row-click.d.ts","sourceRoot":"","sources":["../../src/user-event/list-row-click.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AA+CzC,QAAA,MAAM,aAAa,GAAI,KAAK,GAAG,CAAC,MAAM,EAAE,QAAQ,MAAM,KAAG,IAIxD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"list-row-click.d.ts","sourceRoot":"","sources":["../../src/user-event/list-row-click.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AA8CpC,QAAA,MAAM,aAAa,GAAI,KAAK,GAAG,CAAC,MAAM,EAAE,QAAQ,MAAM,KAAG,IAIxD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import * as GLib from "@gtkx/gi/glib";
2
+ import * as Gtk from "@gtkx/gi/gtk";
2
3
  import { ancestors } from "../traversal.js";
3
4
  import { callBooleanGetter, hasWidgetMethod } from "../widget-getters.js";
4
5
  const SELECT_ACTION = "listitem.select";
@@ -26,7 +27,7 @@ const applyRowPress = (row, press) => {
26
27
  }
27
28
  selectRow(row);
28
29
  if (isRowActivatedByPress(row, press)) {
29
- row.activate();
30
+ Gtk.Widget.prototype.activate.call(row);
30
31
  }
31
32
  };
32
33
  const applyRowClick = (row, nPress) => {
@@ -1 +1 @@
1
- {"version":3,"file":"list-row-click.js","sourceRoot":"","sources":["../../src/user-event/list-row-click.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,aAAa,GAAG,iBAAiB,CAAC;AACxC,MAAM,4BAA4B,GAAG,wBAAwB,CAAC;AAC9D,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,OAAO,GAAG,CAAC,GAAe,EAAqB,EAAE;IACnD,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,eAAe,CAAC,QAAQ,EAAE,4BAA4B,CAAC,EAAE,CAAC;YAC1D,OAAO,QAAQ,CAAC;QACpB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,GAAe,EAAW,EAAE;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1B,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,4BAA4B,CAAC,IAAI,KAAK,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAe,EAAQ,EAAE;IACxC,GAAG,CAAC,cAAc,CACd,aAAa,EACb,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAC1F,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,GAAe,EAAE,KAAa,EAAW,EAAE,CACtE,KAAK,KAAK,kBAAkB,IAAI,2BAA2B,CAAC,GAAG,CAAC,CAAC;AAErE,MAAM,aAAa,GAAG,CAAC,GAAe,EAAE,KAAa,EAAQ,EAAE;IAC3D,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC;QACxB,GAAG,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAED,SAAS,CAAC,GAAG,CAAC,CAAC;IAEf,IAAI,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;QACpC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACnB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAe,EAAE,MAAc,EAAQ,EAAE;IAC5D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport * as GLib from \"@gtkx/gi/glib\";\nimport { ancestors } from \"../traversal.js\";\nimport { callBooleanGetter, hasWidgetMethod } from \"../widget-getters.js\";\n\nconst SELECT_ACTION = \"listitem.select\";\nconst SINGLE_CLICK_ACTIVATE_GETTER = \"getSingleClickActivate\";\nconst DOUBLE_CLICK_PRESS = 2;\n\nconst viewFor = (row: Gtk.Widget): Gtk.Widget | null => {\n for (const ancestor of ancestors(row)) {\n if (hasWidgetMethod(ancestor, SINGLE_CLICK_ACTIVATE_GETTER)) {\n return ancestor;\n }\n }\n\n return null;\n};\n\nconst isViewSingleClickActivating = (row: Gtk.Widget): boolean => {\n const view = viewFor(row);\n\n return view === null ? false : callBooleanGetter(view, SINGLE_CLICK_ACTIVATE_GETTER) ?? false;\n};\n\nconst selectRow = (row: Gtk.Widget): void => {\n row.activateAction(\n SELECT_ACTION,\n GLib.Variant.newTuple([GLib.Variant.newBoolean(false), GLib.Variant.newBoolean(false)]),\n );\n};\n\nconst isRowActivatedByPress = (row: Gtk.Widget, press: number): boolean =>\n press === DOUBLE_CLICK_PRESS || isViewSingleClickActivating(row);\n\nconst applyRowPress = (row: Gtk.Widget, press: number): void => {\n if (row.getFocusOnClick()) {\n row.grabFocus();\n }\n\n selectRow(row);\n\n if (isRowActivatedByPress(row, press)) {\n row.activate();\n }\n};\n\nconst applyRowClick = (row: Gtk.Widget, nPress: number): void => {\n for (let press = 1; press <= nPress; press++) {\n applyRowPress(row, press);\n }\n};\n\nexport { applyRowClick };\n"]}
1
+ {"version":3,"file":"list-row-click.js","sourceRoot":"","sources":["../../src/user-event/list-row-click.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,aAAa,GAAG,iBAAiB,CAAC;AACxC,MAAM,4BAA4B,GAAG,wBAAwB,CAAC;AAC9D,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,OAAO,GAAG,CAAC,GAAe,EAAqB,EAAE;IACnD,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,eAAe,CAAC,QAAQ,EAAE,4BAA4B,CAAC,EAAE,CAAC;YAC1D,OAAO,QAAQ,CAAC;QACpB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,GAAe,EAAW,EAAE;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1B,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,4BAA4B,CAAC,IAAI,KAAK,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAe,EAAQ,EAAE;IACxC,GAAG,CAAC,cAAc,CACd,aAAa,EACb,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAC1F,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,GAAe,EAAE,KAAa,EAAW,EAAE,CACtE,KAAK,KAAK,kBAAkB,IAAI,2BAA2B,CAAC,GAAG,CAAC,CAAC;AAErE,MAAM,aAAa,GAAG,CAAC,GAAe,EAAE,KAAa,EAAQ,EAAE;IAC3D,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC;QACxB,GAAG,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAED,SAAS,CAAC,GAAG,CAAC,CAAC;IAEf,IAAI,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;QACpC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAe,EAAE,MAAc,EAAQ,EAAE;IAC5D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import * as GLib from \"@gtkx/gi/glib\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { ancestors } from \"../traversal.js\";\nimport { callBooleanGetter, hasWidgetMethod } from \"../widget-getters.js\";\n\nconst SELECT_ACTION = \"listitem.select\";\nconst SINGLE_CLICK_ACTIVATE_GETTER = \"getSingleClickActivate\";\nconst DOUBLE_CLICK_PRESS = 2;\n\nconst viewFor = (row: Gtk.Widget): Gtk.Widget | null => {\n for (const ancestor of ancestors(row)) {\n if (hasWidgetMethod(ancestor, SINGLE_CLICK_ACTIVATE_GETTER)) {\n return ancestor;\n }\n }\n\n return null;\n};\n\nconst isViewSingleClickActivating = (row: Gtk.Widget): boolean => {\n const view = viewFor(row);\n\n return view === null ? false : callBooleanGetter(view, SINGLE_CLICK_ACTIVATE_GETTER) ?? false;\n};\n\nconst selectRow = (row: Gtk.Widget): void => {\n row.activateAction(\n SELECT_ACTION,\n GLib.Variant.newTuple([GLib.Variant.newBoolean(false), GLib.Variant.newBoolean(false)]),\n );\n};\n\nconst isRowActivatedByPress = (row: Gtk.Widget, press: number): boolean =>\n press === DOUBLE_CLICK_PRESS || isViewSingleClickActivating(row);\n\nconst applyRowPress = (row: Gtk.Widget, press: number): void => {\n if (row.getFocusOnClick()) {\n row.grabFocus();\n }\n\n selectRow(row);\n\n if (isRowActivatedByPress(row, press)) {\n Gtk.Widget.prototype.activate.call(row);\n }\n};\n\nconst applyRowClick = (row: Gtk.Widget, nPress: number): void => {\n for (let press = 1; press <= nPress; press++) {\n applyRowPress(row, press);\n }\n};\n\nexport { applyRowClick };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../src/user-event/pointer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD;;;GAGG;AACH,KAAK,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;AAoE9F,QAAA,MAAM,OAAO,GAAI,OAAO,cAAc,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,YAAY,KAAG,OAAO,CAAC,IAAI,CAGxF,CAAC;AAEP,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../src/user-event/pointer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD;;;GAGG;AACH,KAAK,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;AAiE9F,QAAA,MAAM,OAAO,GAAI,OAAO,cAAc,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,YAAY,KAAG,OAAO,CAAC,IAAI,CAGxF,CAAC;AAEP,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
- import { clickGestures, emitClickPhase, getAuthoredClickGestures } from "./click.js";
1
+ import { directClickFor, emitSitePhase } from "./click.js";
2
2
  import { wrapEvent } from "./event-wrapper.js";
3
- import { isClickTransparent, nativeClickFor } from "./native-click.js";
3
+ import { isClickTransparent } from "./native-click.js";
4
4
  const PRESS_INPUTS = new Set(["[MouseLeft>]", "down"]);
5
5
  const RELEASE_INPUTS = new Set(["[/MouseLeft]", "up"]);
6
6
  const CLICK_INPUTS = new Set(["[MouseLeft]", "click"]);
@@ -15,20 +15,18 @@ const pointerWidgetFor = (widget) => {
15
15
  }
16
16
  return current;
17
17
  };
18
- const pointerGesturesFor = (widget, native) => native === null ? clickGestures(widget) : getAuthoredClickGestures(widget);
19
18
  const pointerTargetFor = (widget) => {
20
19
  const target = pointerWidgetFor(widget);
21
- const native = nativeClickFor(target, true);
22
- return { widget: target, gestures: pointerGesturesFor(target, native), native };
20
+ return { widget: target, click: directClickFor(target) };
23
21
  };
24
- const pressPointer = ({ widget, gestures }) => {
25
- emitClickPhase(widget, gestures, 1, "pressed");
22
+ const pressPointer = ({ click }) => {
23
+ emitSitePhase(click.sites, 1, "pressed");
26
24
  };
27
- const releasePointer = ({ widget, gestures, native }) => {
28
- emitClickPhase(widget, gestures, 1, "released");
29
- native?.(widget, 1);
25
+ const releasePointer = ({ widget, click }) => {
26
+ emitSitePhase(click.sites, 1, "released");
27
+ click.outcome?.(widget, 1);
30
28
  };
31
- const isPointerPressable = (target) => target.native !== null || target.gestures.length > 0;
29
+ const isPointerPressable = (target) => target.click.outcome !== null || target.click.sites.some((site) => site.gestures.length > 0);
32
30
  const applyPointerInput = (widget, state, input) => {
33
31
  const target = pointerTargetFor(widget);
34
32
  if (CLICK_INPUTS.has(input)) {
@@ -1 +1 @@
1
- {"version":3,"file":"pointer.js","sourceRoot":"","sources":["../../src/user-event/pointer.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport type { NativeClick } from \"./native-click.js\";\nimport type { UserEventState } from \"./state.js\";\nimport { clickGestures, emitClickPhase, getAuthoredClickGestures } from \"./click.js\";\nimport { wrapEvent } from \"./event-wrapper.js\";\nimport { isClickTransparent, nativeClickFor } from \"./native-click.js\";\n\n/**\n * A pointer action token: a full click (`click`, `[MouseLeft]`), a button press (`down`,\n * `[MouseLeft>]`), or a button release (`up`, `[/MouseLeft]`).\n */\ntype PointerInput = \"click\" | \"down\" | \"up\" | \"[MouseLeft]\" | \"[MouseLeft>]\" | \"[/MouseLeft]\";\ntype PointerTarget = { widget: Gtk.Widget; gestures: Gtk.GestureClick[]; native: NativeClick | null };\n\nconst PRESS_INPUTS: Set<PointerInput> = new Set([\"[MouseLeft>]\", \"down\"]);\nconst RELEASE_INPUTS: Set<PointerInput> = new Set([\"[/MouseLeft]\", \"up\"]);\nconst CLICK_INPUTS: Set<PointerInput> = new Set([\"[MouseLeft]\", \"click\"]);\n\nconst pointerWidgetFor = (widget: Gtk.Widget): Gtk.Widget => {\n let current = widget;\n\n while (isClickTransparent(current)) {\n const parent = current.getParent();\n\n if (parent === null) {\n return current;\n }\n\n current = parent;\n }\n\n return current;\n};\n\nconst pointerGesturesFor = (widget: Gtk.Widget, native: NativeClick | null): Gtk.GestureClick[] =>\n native === null ? clickGestures(widget) : getAuthoredClickGestures(widget);\n\nconst pointerTargetFor = (widget: Gtk.Widget): PointerTarget => {\n const target = pointerWidgetFor(widget);\n const native = nativeClickFor(target, true);\n\n return { widget: target, gestures: pointerGesturesFor(target, native), native };\n};\n\nconst pressPointer = ({ widget, gestures }: PointerTarget): void => {\n emitClickPhase(widget, gestures, 1, \"pressed\");\n};\n\nconst releasePointer = ({ widget, gestures, native }: PointerTarget): void => {\n emitClickPhase(widget, gestures, 1, \"released\");\n native?.(widget, 1);\n};\n\nconst isPointerPressable = (target: PointerTarget): boolean => target.native !== null || target.gestures.length > 0;\n\nconst applyPointerInput = (widget: Gtk.Widget, state: UserEventState, input: PointerInput): void => {\n const target = pointerTargetFor(widget);\n\n if (CLICK_INPUTS.has(input)) {\n pressPointer(target);\n releasePointer(target);\n state.isMouseLeftDown = false;\n\n return;\n }\n\n if (PRESS_INPUTS.has(input) && !state.isMouseLeftDown && isPointerPressable(target)) {\n pressPointer(target);\n state.isMouseLeftDown = true;\n\n return;\n }\n\n if (RELEASE_INPUTS.has(input) && state.isMouseLeftDown) {\n releasePointer(target);\n state.isMouseLeftDown = false;\n }\n};\n\nconst pointer = (state: UserEventState, widget: Gtk.Widget, input: PointerInput): Promise<void> =>\n wrapEvent(widget, () => {\n applyPointerInput(widget, state, input);\n });\n\nexport { pointer, type PointerInput };\n"]}
1
+ {"version":3,"file":"pointer.js","sourceRoot":"","sources":["../../src/user-event/pointer.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport type { UserEventState } from \"./state.js\";\nimport { type DirectClick, directClickFor, emitSitePhase } from \"./click.js\";\nimport { wrapEvent } from \"./event-wrapper.js\";\nimport { isClickTransparent } from \"./native-click.js\";\n\n/**\n * A pointer action token: a full click (`click`, `[MouseLeft]`), a button press (`down`,\n * `[MouseLeft>]`), or a button release (`up`, `[/MouseLeft]`).\n */\ntype PointerInput = \"click\" | \"down\" | \"up\" | \"[MouseLeft]\" | \"[MouseLeft>]\" | \"[/MouseLeft]\";\ntype PointerTarget = { widget: Gtk.Widget; click: DirectClick };\n\nconst PRESS_INPUTS: Set<PointerInput> = new Set([\"[MouseLeft>]\", \"down\"]);\nconst RELEASE_INPUTS: Set<PointerInput> = new Set([\"[/MouseLeft]\", \"up\"]);\nconst CLICK_INPUTS: Set<PointerInput> = new Set([\"[MouseLeft]\", \"click\"]);\n\nconst pointerWidgetFor = (widget: Gtk.Widget): Gtk.Widget => {\n let current = widget;\n\n while (isClickTransparent(current)) {\n const parent = current.getParent();\n\n if (parent === null) {\n return current;\n }\n\n current = parent;\n }\n\n return current;\n};\n\nconst pointerTargetFor = (widget: Gtk.Widget): PointerTarget => {\n const target = pointerWidgetFor(widget);\n\n return { widget: target, click: directClickFor(target) };\n};\n\nconst pressPointer = ({ click }: PointerTarget): void => {\n emitSitePhase(click.sites, 1, \"pressed\");\n};\n\nconst releasePointer = ({ widget, click }: PointerTarget): void => {\n emitSitePhase(click.sites, 1, \"released\");\n click.outcome?.(widget, 1);\n};\n\nconst isPointerPressable = (target: PointerTarget): boolean =>\n target.click.outcome !== null || target.click.sites.some((site) => site.gestures.length > 0);\n\nconst applyPointerInput = (widget: Gtk.Widget, state: UserEventState, input: PointerInput): void => {\n const target = pointerTargetFor(widget);\n\n if (CLICK_INPUTS.has(input)) {\n pressPointer(target);\n releasePointer(target);\n state.isMouseLeftDown = false;\n\n return;\n }\n\n if (PRESS_INPUTS.has(input) && !state.isMouseLeftDown && isPointerPressable(target)) {\n pressPointer(target);\n state.isMouseLeftDown = true;\n\n return;\n }\n\n if (RELEASE_INPUTS.has(input) && state.isMouseLeftDown) {\n releasePointer(target);\n state.isMouseLeftDown = false;\n }\n};\n\nconst pointer = (state: UserEventState, widget: Gtk.Widget, input: PointerInput): Promise<void> =>\n wrapEvent(widget, () => {\n applyPointerInput(widget, state, input);\n });\n\nexport { pointer, type PointerInput };\n"]}
@@ -1,7 +1,7 @@
1
1
  import * as Gtk from "@gtkx/gi/gtk";
2
2
  /** Selects positions without activating them. */
3
- declare const selectOptions: (widget: Gtk.Widget, values: number | number[]) => Promise<void>;
3
+ declare const selectOptions: (widget: Gtk.Accessible, values: number | number[]) => Promise<void>;
4
4
  /** Unselects positions without activating them. */
5
- declare const deselectOptions: (widget: Gtk.Widget, values: number | number[]) => Promise<void>;
5
+ declare const deselectOptions: (widget: Gtk.Accessible, values: number | number[]) => Promise<void>;
6
6
  export { selectOptions, deselectOptions };
7
7
  //# sourceMappingURL=selection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/user-event/selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AA2JpC,iDAAiD;AACjD,QAAA,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CACd,CAAC;AAoBtE,mDAAmD;AACnD,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CACZ,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/user-event/selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAmKpC,iDAAiD;AACjD,QAAA,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,UAAU,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CACH,CAAC;AAoBrF,mDAAmD;AACnD,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,UAAU,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CACD,CAAC;AAEzF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
@@ -92,8 +92,14 @@ const runSelectionEvent = (widget, values, inListView, byRole) => wrapEvent(widg
92
92
  }
93
93
  byRole(widget, valueArray);
94
94
  });
95
+ const requireWidget = (target) => {
96
+ if (!(target instanceof Gtk.Widget)) {
97
+ throw new TypeError("Cannot select options on a non-widget accessible");
98
+ }
99
+ return target;
100
+ };
95
101
  /** Selects positions without activating them. */
96
- const selectOptions = (widget, values) => runSelectionEvent(widget, values, selectInListView, selectByRole);
102
+ const selectOptions = (widget, values) => runSelectionEvent(requireWidget(widget), values, selectInListView, selectByRole);
97
103
  const deselectInListView = (widget, valueArray) => {
98
104
  const selectionModel = requireSelectionModel(widget, "deselect");
99
105
  for (const pos of valueArray) {
@@ -108,6 +114,6 @@ const deselectByRole = (widget, valueArray) => {
108
114
  applyIndexedChildren(widget, valueArray, unselectChildRow);
109
115
  };
110
116
  /** Unselects positions without activating them. */
111
- const deselectOptions = (widget, values) => runSelectionEvent(widget, values, deselectInListView, deselectByRole);
117
+ const deselectOptions = (widget, values) => runSelectionEvent(requireWidget(widget), values, deselectInListView, deselectByRole);
112
118
  export { selectOptions, deselectOptions };
113
119
  //# sourceMappingURL=selection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/user-event/selection.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport { formatRoleList } from \"../role-helpers.js\";\nimport { getCallableMethod } from \"../widget-getters.js\";\nimport { wrapEvent } from \"./event-wrapper.js\";\nimport {\n getChildAtIndex,\n hasIndexedChildren,\n isChildSelected,\n selectContainerChild,\n unselectContainerChild,\n} from \"./indexed-children.js\";\n\ntype CollectionWidget = Gtk.ListView | Gtk.GridView | Gtk.ColumnView;\ntype IndexedChildAction = (container: Gtk.Widget, child: Gtk.Widget) => void;\n\nconst SELECTABLE_ROLES: Set<Gtk.AccessibleRole> = new Set([\n Gtk.AccessibleRole.COMBO_BOX,\n Gtk.AccessibleRole.GRID,\n Gtk.AccessibleRole.LIST,\n]);\n\nconst isSelectable = (widget: Gtk.Widget): boolean => SELECTABLE_ROLES.has(widget.getAccessibleRole());\n\nconst selectListViewItems = (\n selectionModel: Gtk.SelectionModel,\n positions: number[],\n isExclusive: boolean,\n): void => {\n if (positions.length === 0) {\n selectionModel.unselectRange(0, selectionModel.getNItems());\n\n return;\n }\n\n const [first] = positions;\n\n if (isExclusive && first !== undefined && positions.length === 1) {\n selectionModel.selectItem(first, true);\n\n return;\n }\n\n const nItems = selectionModel.getNItems();\n const selected = Gtk.Bitset.newEmpty();\n const mask = Gtk.Bitset.newRange(0, nItems);\n\n for (const pos of positions) {\n selected.add(pos);\n }\n\n selectionModel.setSelection(selected, mask);\n};\n\nconst isListView = (widget: Gtk.Widget): widget is CollectionWidget =>\n widget instanceof Gtk.ListView || widget instanceof Gtk.GridView || widget instanceof Gtk.ColumnView;\n\nconst getIndexSelector = (widget: Gtk.Widget): ((position: number) => void) | null =>\n getCallableMethod<[number], unknown>(widget, \"setSelected\");\n\nconst selectDropDownOption = (widget: Gtk.Widget, valueArray: number[]): void => {\n const setSelected = getIndexSelector(widget);\n\n if (!setSelected) {\n throw new TypeError(\"Cannot select options: the COMBO_BOX role needs a widget exposing setSelected\");\n }\n\n if (valueArray.length > 1) {\n throw new Error(\"Cannot select multiple options: a drop-down only supports single selection\");\n }\n\n const [selection] = valueArray;\n\n if (selection !== undefined) {\n setSelected(selection);\n }\n};\n\nconst unselectChildRow = (container: Gtk.Widget, child: Gtk.Widget): void => {\n if (isChildSelected(child)) {\n unselectContainerChild(container, child);\n }\n};\n\nconst applyIndexedChildren = (widget: Gtk.Widget, valueArray: number[], apply: IndexedChildAction): void => {\n for (const value of valueArray) {\n const child = getChildAtIndex(widget, value);\n\n if (child) {\n apply(widget, child);\n }\n }\n};\n\nconst requireSelectionModel = (\n widget: CollectionWidget,\n verb: string,\n): Gtk.SelectionModel => {\n const selectionModel = widget.getModel();\n\n if (selectionModel === null) {\n throw new Error(`Cannot ${verb} options: list view has no selection model`);\n }\n\n return selectionModel;\n};\n\nconst selectInListView = (widget: CollectionWidget, valueArray: number[]): void => {\n const selectionModel = requireSelectionModel(widget, \"select\");\n const isMultiSelection = selectionModel instanceof Gtk.MultiSelection;\n selectListViewItems(selectionModel, valueArray, !isMultiSelection);\n};\n\nconst requireSelectableRole = (widget: Gtk.Widget, verb: string): void => {\n if (!isSelectable(widget)) {\n throw new Error(\n `Cannot ${verb} options: expected selectable widget (${formatRoleList(SELECTABLE_ROLES)})`,\n );\n }\n};\n\nconst selectByRole = (widget: Gtk.Widget, valueArray: number[]): void => {\n requireSelectableRole(widget, \"select\");\n const role = widget.getAccessibleRole();\n\n if (role === Gtk.AccessibleRole.COMBO_BOX) {\n selectDropDownOption(widget, valueArray);\n\n return;\n }\n\n if (!hasIndexedChildren(widget)) {\n throw new TypeError(\"Cannot select options: the widget exposes no children to select by index\");\n }\n\n applyIndexedChildren(widget, valueArray, selectContainerChild);\n};\n\nconst runSelectionEvent = (\n widget: Gtk.Widget,\n values: number | number[],\n inListView: (view: Gtk.ListView | Gtk.GridView | Gtk.ColumnView, valueArray: number[]) => void,\n byRole: (widget: Gtk.Widget, valueArray: number[]) => void,\n): Promise<void> =>\n wrapEvent(widget, () => {\n const valueArray = Array.isArray(values) ? values : [values];\n\n if (isListView(widget)) {\n inListView(widget, valueArray);\n\n return;\n }\n\n byRole(widget, valueArray);\n });\n\n/** Selects positions without activating them. */\nconst selectOptions = (widget: Gtk.Widget, values: number | number[]): Promise<void> =>\n runSelectionEvent(widget, values, selectInListView, selectByRole);\n\nconst deselectInListView = (widget: Gtk.ListView | Gtk.GridView | Gtk.ColumnView, valueArray: number[]): void => {\n const selectionModel = requireSelectionModel(widget, \"deselect\");\n\n for (const pos of valueArray) {\n selectionModel.unselectItem(pos);\n }\n};\n\nconst deselectByRole = (widget: Gtk.Widget, valueArray: number[]): void => {\n requireSelectableRole(widget, \"deselect\");\n\n if (!hasIndexedChildren(widget)) {\n throw new TypeError(\"Cannot deselect options: the widget exposes no children to deselect by index\");\n }\n\n applyIndexedChildren(widget, valueArray, unselectChildRow);\n};\n\n/** Unselects positions without activating them. */\nconst deselectOptions = (widget: Gtk.Widget, values: number | number[]): Promise<void> =>\n runSelectionEvent(widget, values, deselectInListView, deselectByRole);\n\nexport { selectOptions, deselectOptions };\n"]}
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/user-event/selection.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport { formatRoleList } from \"../role-helpers.js\";\nimport { getCallableMethod } from \"../widget-getters.js\";\nimport { wrapEvent } from \"./event-wrapper.js\";\nimport {\n getChildAtIndex,\n hasIndexedChildren,\n isChildSelected,\n selectContainerChild,\n unselectContainerChild,\n} from \"./indexed-children.js\";\n\ntype CollectionWidget = Gtk.ListView | Gtk.GridView | Gtk.ColumnView;\ntype IndexedChildAction = (container: Gtk.Widget, child: Gtk.Widget) => void;\n\nconst SELECTABLE_ROLES: Set<Gtk.AccessibleRole> = new Set([\n Gtk.AccessibleRole.COMBO_BOX,\n Gtk.AccessibleRole.GRID,\n Gtk.AccessibleRole.LIST,\n]);\n\nconst isSelectable = (widget: Gtk.Widget): boolean => SELECTABLE_ROLES.has(widget.getAccessibleRole());\n\nconst selectListViewItems = (\n selectionModel: Gtk.SelectionModel,\n positions: number[],\n isExclusive: boolean,\n): void => {\n if (positions.length === 0) {\n selectionModel.unselectRange(0, selectionModel.getNItems());\n\n return;\n }\n\n const [first] = positions;\n\n if (isExclusive && first !== undefined && positions.length === 1) {\n selectionModel.selectItem(first, true);\n\n return;\n }\n\n const nItems = selectionModel.getNItems();\n const selected = Gtk.Bitset.newEmpty();\n const mask = Gtk.Bitset.newRange(0, nItems);\n\n for (const pos of positions) {\n selected.add(pos);\n }\n\n selectionModel.setSelection(selected, mask);\n};\n\nconst isListView = (widget: Gtk.Widget): widget is CollectionWidget =>\n widget instanceof Gtk.ListView || widget instanceof Gtk.GridView || widget instanceof Gtk.ColumnView;\n\nconst getIndexSelector = (widget: Gtk.Widget): ((position: number) => void) | null =>\n getCallableMethod<[number], unknown>(widget, \"setSelected\");\n\nconst selectDropDownOption = (widget: Gtk.Widget, valueArray: number[]): void => {\n const setSelected = getIndexSelector(widget);\n\n if (!setSelected) {\n throw new TypeError(\"Cannot select options: the COMBO_BOX role needs a widget exposing setSelected\");\n }\n\n if (valueArray.length > 1) {\n throw new Error(\"Cannot select multiple options: a drop-down only supports single selection\");\n }\n\n const [selection] = valueArray;\n\n if (selection !== undefined) {\n setSelected(selection);\n }\n};\n\nconst unselectChildRow = (container: Gtk.Widget, child: Gtk.Widget): void => {\n if (isChildSelected(child)) {\n unselectContainerChild(container, child);\n }\n};\n\nconst applyIndexedChildren = (widget: Gtk.Widget, valueArray: number[], apply: IndexedChildAction): void => {\n for (const value of valueArray) {\n const child = getChildAtIndex(widget, value);\n\n if (child) {\n apply(widget, child);\n }\n }\n};\n\nconst requireSelectionModel = (\n widget: CollectionWidget,\n verb: string,\n): Gtk.SelectionModel => {\n const selectionModel = widget.getModel();\n\n if (selectionModel === null) {\n throw new Error(`Cannot ${verb} options: list view has no selection model`);\n }\n\n return selectionModel;\n};\n\nconst selectInListView = (widget: CollectionWidget, valueArray: number[]): void => {\n const selectionModel = requireSelectionModel(widget, \"select\");\n const isMultiSelection = selectionModel instanceof Gtk.MultiSelection;\n selectListViewItems(selectionModel, valueArray, !isMultiSelection);\n};\n\nconst requireSelectableRole = (widget: Gtk.Widget, verb: string): void => {\n if (!isSelectable(widget)) {\n throw new Error(\n `Cannot ${verb} options: expected selectable widget (${formatRoleList(SELECTABLE_ROLES)})`,\n );\n }\n};\n\nconst selectByRole = (widget: Gtk.Widget, valueArray: number[]): void => {\n requireSelectableRole(widget, \"select\");\n const role = widget.getAccessibleRole();\n\n if (role === Gtk.AccessibleRole.COMBO_BOX) {\n selectDropDownOption(widget, valueArray);\n\n return;\n }\n\n if (!hasIndexedChildren(widget)) {\n throw new TypeError(\"Cannot select options: the widget exposes no children to select by index\");\n }\n\n applyIndexedChildren(widget, valueArray, selectContainerChild);\n};\n\nconst runSelectionEvent = (\n widget: Gtk.Widget,\n values: number | number[],\n inListView: (view: Gtk.ListView | Gtk.GridView | Gtk.ColumnView, valueArray: number[]) => void,\n byRole: (widget: Gtk.Widget, valueArray: number[]) => void,\n): Promise<void> =>\n wrapEvent(widget, () => {\n const valueArray = Array.isArray(values) ? values : [values];\n\n if (isListView(widget)) {\n inListView(widget, valueArray);\n\n return;\n }\n\n byRole(widget, valueArray);\n });\n\nconst requireWidget = (target: Gtk.Accessible): Gtk.Widget => {\n if (!(target instanceof Gtk.Widget)) {\n throw new TypeError(\"Cannot select options on a non-widget accessible\");\n }\n\n return target;\n};\n\n/** Selects positions without activating them. */\nconst selectOptions = (widget: Gtk.Accessible, values: number | number[]): Promise<void> =>\n runSelectionEvent(requireWidget(widget), values, selectInListView, selectByRole);\n\nconst deselectInListView = (widget: Gtk.ListView | Gtk.GridView | Gtk.ColumnView, valueArray: number[]): void => {\n const selectionModel = requireSelectionModel(widget, \"deselect\");\n\n for (const pos of valueArray) {\n selectionModel.unselectItem(pos);\n }\n};\n\nconst deselectByRole = (widget: Gtk.Widget, valueArray: number[]): void => {\n requireSelectableRole(widget, \"deselect\");\n\n if (!hasIndexedChildren(widget)) {\n throw new TypeError(\"Cannot deselect options: the widget exposes no children to deselect by index\");\n }\n\n applyIndexedChildren(widget, valueArray, unselectChildRow);\n};\n\n/** Unselects positions without activating them. */\nconst deselectOptions = (widget: Gtk.Accessible, values: number | number[]): Promise<void> =>\n runSelectionEvent(requireWidget(widget), values, deselectInListView, deselectByRole);\n\nexport { selectOptions, deselectOptions };\n"]}
@@ -1,9 +1,9 @@
1
1
  import type * as Gtk from "@gtkx/gi/gtk";
2
2
  import type { WaitForOptions } from "./types.js";
3
3
  /** Widgets watched for removal; null counts as already removed. */
4
- type RemovalTarget = Gtk.Widget | Gtk.Widget[] | null;
4
+ type RemovalTarget = Gtk.Accessible | Gtk.Accessible[] | null;
5
5
  /** The widgets to watch for removal, or a function re-read on every poll to locate them. */
6
- type ElementOrCallback = Gtk.Widget | Gtk.Widget[] | (() => RemovalTarget);
6
+ type ElementOrCallback = Gtk.Accessible | Gtk.Accessible[] | (() => RemovalTarget);
7
7
  /**
8
8
  * Repeatedly invokes a callback until it succeeds without throwing or the
9
9
  * timeout elapses, retrying on each rejection at a fixed interval.
@@ -1 +1 @@
1
- {"version":3,"file":"wait-for.d.ts","sourceRoot":"","sources":["../src/wait-for.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAOjD,mEAAmE;AACnE,KAAK,aAAa,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AACtD,4FAA4F;AAC5F,KAAK,iBAAiB,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,aAAa,CAAC,CAAC;AA4D3E;;;;;;;GAOG;AACH,QAAA,MAAM,OAAO,GAAI,CAAC,EAAE,UAAU,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,cAAc,KAAG,OAAO,CAAC,CAAC,CAoBvF,CAAC;AAyBF;;;;;;;GAOG;AACH,QAAA,MAAM,yBAAyB,GAC3B,mBAAmB,iBAAiB,EACpC,UAAU,cAAc,KACzB,OAAO,CAAC,IAAI,CAmBd,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
1
+ {"version":3,"file":"wait-for.d.ts","sourceRoot":"","sources":["../src/wait-for.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAQjD,mEAAmE;AACnE,KAAK,aAAa,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;AAC9D,4FAA4F;AAC5F,KAAK,iBAAiB,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,aAAa,CAAC,CAAC;AA4DnF;;;;;;;GAOG;AACH,QAAA,MAAM,OAAO,GAAI,CAAC,EAAE,UAAU,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,cAAc,KAAG,OAAO,CAAC,CAAC,CAoBvF,CAAC;AA2BF;;;;;;;GAOG;AACH,QAAA,MAAM,yBAAyB,GAC3B,mBAAmB,iBAAiB,EACpC,UAAU,cAAc,KACzB,OAAO,CAAC,IAAI,CAmBd,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
package/dist/wait-for.js CHANGED
@@ -2,6 +2,7 @@ import { runWithActEnvironment } from "./act.js";
2
2
  import { getConfig } from "./config.js";
3
3
  import { timeoutError } from "./errors.js";
4
4
  import { advanceFakeClock, delay, now } from "./timers.js";
5
+ import { requireWidget } from "./widget-target.js";
5
6
  const DEFAULT_INTERVAL = 50;
6
7
  const ELEMENT_NOT_REMOVED = new Error("Element not yet removed");
7
8
  const copyStackTrace = (target, source) => {
@@ -63,10 +64,8 @@ const waitFor = (callback, options) => {
63
64
  }));
64
65
  };
65
66
  const getTarget = (elementOrCallback) => typeof elementOrCallback === "function" ? elementOrCallback() : elementOrCallback;
66
- const isWidgetRemoved = (widget) => {
67
- if (widget === null) {
68
- return true;
69
- }
67
+ const isWidgetRemoved = (target) => {
68
+ const widget = requireWidget(target);
70
69
  try {
71
70
  return widget.getRoot() === null;
72
71
  }
@@ -75,6 +74,9 @@ const isWidgetRemoved = (widget) => {
75
74
  }
76
75
  };
77
76
  const isTargetRemoved = (target) => {
77
+ if (target === null) {
78
+ return true;
79
+ }
78
80
  if (Array.isArray(target)) {
79
81
  return target.every((widget) => isWidgetRemoved(widget));
80
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wait-for.js","sourceRoot":"","sources":["../src/wait-for.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport type { WaitForOptions } from \"./types.js\";\nimport { runWithActEnvironment } from \"./act.js\";\nimport { getConfig } from \"./config.js\";\nimport { timeoutError } from \"./errors.js\";\nimport { advanceFakeClock, delay, now } from \"./timers.js\";\n\ntype PollResult<T> = { status: \"resolved\"; value: T } | { status: \"timedout\"; lastError: Error | null };\n/** Widgets watched for removal; null counts as already removed. */\ntype RemovalTarget = Gtk.Widget | Gtk.Widget[] | null;\n/** The widgets to watch for removal, or a function re-read on every poll to locate them. */\ntype ElementOrCallback = Gtk.Widget | Gtk.Widget[] | (() => RemovalTarget);\n\nconst DEFAULT_INTERVAL = 50;\nconst ELEMENT_NOT_REMOVED = new Error(\"Element not yet removed\");\n\nconst copyStackTrace = (target: Error, source: Error): void => {\n const { stack } = source;\n\n if (stack === undefined) {\n return;\n }\n\n const index = stack.indexOf(source.message);\n\n if (index === -1) {\n target.stack = stack;\n\n return;\n }\n\n target.stack = stack.slice(0, index) + target.message + stack.slice(index + source.message.length);\n};\n\nconst pollUntilSuccess = async <T>(\n callback: () => T | Promise<T>,\n timeout: number,\n interval: number,\n): Promise<PollResult<T>> => {\n const startTime = now();\n let lastError: Error | null = null;\n\n while (now() - startTime < timeout) {\n try {\n const result = await callback();\n await delay(0);\n\n return { status: \"resolved\", value: result };\n } catch (error) {\n lastError = error as Error;\n await advanceFakeClock(interval);\n await delay(interval);\n }\n }\n\n return { status: \"timedout\", lastError };\n};\n\nconst buildTimeoutError = (\n timeout: number,\n lastError: Error | null,\n stackTraceError: Error,\n onTimeout: ((error: Error) => Error) | undefined,\n): Error => {\n const error = timeoutError(timeout, lastError);\n const finalError = onTimeout ? onTimeout(error) : error;\n copyStackTrace(finalError, stackTraceError);\n\n return finalError;\n};\n\n/**\n * Repeatedly invokes a callback until it succeeds without throwing or the\n * timeout elapses, retrying on each rejection at a fixed interval.\n *\n * @param callback The assertion or query to retry; its resolved value is returned.\n * @param options Optional timeout, interval, and timeout error customization.\n * @returns The callback's result once it succeeds.\n */\nconst waitFor = <T>(callback: () => T | Promise<T>, options?: WaitForOptions): Promise<T> => {\n if (typeof callback !== \"function\") {\n throw new TypeError(\"Received `callback` arg must be a function\");\n }\n\n const stackTraceError = options?.stackTraceError ?? new Error(\"STACK_TRACE_MESSAGE\");\n\n return Promise.resolve(\n runWithActEnvironment(false, async () => {\n const config = getConfig();\n const { timeout = config.asyncUtilTimeout, interval = DEFAULT_INTERVAL, onTimeout } = options ?? {};\n const result = await pollUntilSuccess(callback, timeout, interval);\n\n if (result.status === \"resolved\") {\n return result.value;\n }\n\n throw buildTimeoutError(timeout, result.lastError, stackTraceError, onTimeout);\n }),\n );\n};\n\nconst getTarget = (elementOrCallback: ElementOrCallback): RemovalTarget =>\n typeof elementOrCallback === \"function\" ? elementOrCallback() : elementOrCallback;\n\nconst isWidgetRemoved = (widget: Gtk.Widget | null): boolean => {\n if (widget === null) {\n return true;\n }\n\n try {\n return widget.getRoot() === null;\n } catch {\n return true;\n }\n};\n\nconst isTargetRemoved = (target: RemovalTarget): boolean => {\n if (Array.isArray(target)) {\n return target.every((widget) => isWidgetRemoved(widget));\n }\n\n return isWidgetRemoved(target);\n};\n\n/**\n * Waits until the given widget or widgets are detached from the tree. Rejects\n * immediately if the target is already absent when called.\n *\n * @param elementOrCallback The widget, array of widgets, or a function\n * returning them to observe for removal.\n * @param options Optional timeout and interval settings.\n */\nconst waitForElementToBeRemoved = (\n elementOrCallback: ElementOrCallback,\n options?: WaitForOptions,\n): Promise<void> => {\n const stackTraceError = new Error(\"STACK_TRACE_MESSAGE\");\n\n if (isTargetRemoved(getTarget(elementOrCallback))) {\n return Promise.reject(\n new Error(\n \"Element already removed: waitForElementToBeRemoved requires the element to be present initially\",\n ),\n );\n }\n\n return waitFor(\n () => {\n if (!isTargetRemoved(getTarget(elementOrCallback))) {\n throw ELEMENT_NOT_REMOVED;\n }\n },\n { ...options, stackTraceError },\n );\n};\n\nexport { waitFor, waitForElementToBeRemoved };\n"]}
1
+ {"version":3,"file":"wait-for.js","sourceRoot":"","sources":["../src/wait-for.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport type { WaitForOptions } from \"./types.js\";\nimport { runWithActEnvironment } from \"./act.js\";\nimport { getConfig } from \"./config.js\";\nimport { timeoutError } from \"./errors.js\";\nimport { advanceFakeClock, delay, now } from \"./timers.js\";\nimport { requireWidget } from \"./widget-target.js\";\n\ntype PollResult<T> = { status: \"resolved\"; value: T } | { status: \"timedout\"; lastError: Error | null };\n/** Widgets watched for removal; null counts as already removed. */\ntype RemovalTarget = Gtk.Accessible | Gtk.Accessible[] | null;\n/** The widgets to watch for removal, or a function re-read on every poll to locate them. */\ntype ElementOrCallback = Gtk.Accessible | Gtk.Accessible[] | (() => RemovalTarget);\n\nconst DEFAULT_INTERVAL = 50;\nconst ELEMENT_NOT_REMOVED = new Error(\"Element not yet removed\");\n\nconst copyStackTrace = (target: Error, source: Error): void => {\n const { stack } = source;\n\n if (stack === undefined) {\n return;\n }\n\n const index = stack.indexOf(source.message);\n\n if (index === -1) {\n target.stack = stack;\n\n return;\n }\n\n target.stack = stack.slice(0, index) + target.message + stack.slice(index + source.message.length);\n};\n\nconst pollUntilSuccess = async <T>(\n callback: () => T | Promise<T>,\n timeout: number,\n interval: number,\n): Promise<PollResult<T>> => {\n const startTime = now();\n let lastError: Error | null = null;\n\n while (now() - startTime < timeout) {\n try {\n const result = await callback();\n await delay(0);\n\n return { status: \"resolved\", value: result };\n } catch (error) {\n lastError = error as Error;\n await advanceFakeClock(interval);\n await delay(interval);\n }\n }\n\n return { status: \"timedout\", lastError };\n};\n\nconst buildTimeoutError = (\n timeout: number,\n lastError: Error | null,\n stackTraceError: Error,\n onTimeout: ((error: Error) => Error) | undefined,\n): Error => {\n const error = timeoutError(timeout, lastError);\n const finalError = onTimeout ? onTimeout(error) : error;\n copyStackTrace(finalError, stackTraceError);\n\n return finalError;\n};\n\n/**\n * Repeatedly invokes a callback until it succeeds without throwing or the\n * timeout elapses, retrying on each rejection at a fixed interval.\n *\n * @param callback The assertion or query to retry; its resolved value is returned.\n * @param options Optional timeout, interval, and timeout error customization.\n * @returns The callback's result once it succeeds.\n */\nconst waitFor = <T>(callback: () => T | Promise<T>, options?: WaitForOptions): Promise<T> => {\n if (typeof callback !== \"function\") {\n throw new TypeError(\"Received `callback` arg must be a function\");\n }\n\n const stackTraceError = options?.stackTraceError ?? new Error(\"STACK_TRACE_MESSAGE\");\n\n return Promise.resolve(\n runWithActEnvironment(false, async () => {\n const config = getConfig();\n const { timeout = config.asyncUtilTimeout, interval = DEFAULT_INTERVAL, onTimeout } = options ?? {};\n const result = await pollUntilSuccess(callback, timeout, interval);\n\n if (result.status === \"resolved\") {\n return result.value;\n }\n\n throw buildTimeoutError(timeout, result.lastError, stackTraceError, onTimeout);\n }),\n );\n};\n\nconst getTarget = (elementOrCallback: ElementOrCallback): RemovalTarget =>\n typeof elementOrCallback === \"function\" ? elementOrCallback() : elementOrCallback;\n\nconst isWidgetRemoved = (target: Gtk.Accessible): boolean => {\n const widget = requireWidget(target);\n\n try {\n return widget.getRoot() === null;\n } catch {\n return true;\n }\n};\n\nconst isTargetRemoved = (target: RemovalTarget): boolean => {\n if (target === null) {\n return true;\n }\n\n if (Array.isArray(target)) {\n return target.every((widget) => isWidgetRemoved(widget));\n }\n\n return isWidgetRemoved(target);\n};\n\n/**\n * Waits until the given widget or widgets are detached from the tree. Rejects\n * immediately if the target is already absent when called.\n *\n * @param elementOrCallback The widget, array of widgets, or a function\n * returning them to observe for removal.\n * @param options Optional timeout and interval settings.\n */\nconst waitForElementToBeRemoved = (\n elementOrCallback: ElementOrCallback,\n options?: WaitForOptions,\n): Promise<void> => {\n const stackTraceError = new Error(\"STACK_TRACE_MESSAGE\");\n\n if (isTargetRemoved(getTarget(elementOrCallback))) {\n return Promise.reject(\n new Error(\n \"Element already removed: waitForElementToBeRemoved requires the element to be present initially\",\n ),\n );\n }\n\n return waitFor(\n () => {\n if (!isTargetRemoved(getTarget(elementOrCallback))) {\n throw ELEMENT_NOT_REMOVED;\n }\n },\n { ...options, stackTraceError },\n );\n};\n\nexport { waitFor, waitForElementToBeRemoved };\n"]}
@@ -7,7 +7,7 @@ type CheckedState = "checked" | "unchecked" | "mixed";
7
7
  *
8
8
  * @param widget The widget to read text from.
9
9
  */
10
- declare const getWidgetText: (widget: Gtk.Widget) => string | null;
10
+ declare const getWidgetText: (widget: Gtk.Accessible) => string | null;
11
11
  declare const namingLabelText: (widget: Gtk.Widget) => string | null;
12
12
  declare const getWidgetLabelText: (widget: Gtk.Widget) => string | null;
13
13
  declare const getWidgetTextContent: (widget: Gtk.Widget) => string | null;
@@ -37,12 +37,13 @@ declare const getWidgetOwnLabel: (widget: Gtk.Widget) => string | null;
37
37
  declare const getWidgetLabelledByText: (widget: Gtk.Widget) => string | null;
38
38
  declare const getWidgetExternalLabelText: (widget: Gtk.Widget) => string | null;
39
39
  declare const getWidgetDescribedByText: (widget: Gtk.Widget) => string | null;
40
+ declare const buildInaccessibilityCheck: () => ((target: Gtk.Accessible) => boolean);
40
41
  /**
41
42
  * Returns whether a widget is excluded from the accessibility tree, because it or one of its
42
43
  * ancestors is marked hidden.
43
44
  *
44
45
  * @param widget The widget to test.
45
46
  */
46
- declare const isInaccessible: (widget: Gtk.Widget) => boolean;
47
- export { namingLabelText, getWidgetText, getWidgetTextContent, getWidgetLabelText, getWidgetAccessibleName, getWidgetName, getWidgetPlaceholderText, getWidgetDisplayValue, hasDisplayValue, isWidgetDisabled, isWidgetVisible, getWidgetRequiredState, getWidgetSelection, getWidgetDescribedByText, getWidgetCheckedState, isWidgetChecked, getWidgetPressedState, getWidgetExpandedState, getWidgetSelectedState, getWidgetLevel, getWidgetInvalidState, getWidgetErrorMessage, getWidgetBusyState, getWidgetDescription, getWidgetValueNow, getWidgetValueText, getWidgetOwnLabel, getWidgetExternalLabelText, getWidgetLabelledByText, isInaccessible, isWidgetValueMatch, type CheckedState, type WidgetValueField, };
47
+ declare const isInaccessible: (target: Gtk.Accessible) => boolean;
48
+ export { buildInaccessibilityCheck, namingLabelText, getWidgetText, getWidgetTextContent, getWidgetLabelText, getWidgetAccessibleName, getWidgetName, getWidgetPlaceholderText, getWidgetDisplayValue, hasDisplayValue, isWidgetDisabled, isWidgetVisible, getWidgetRequiredState, getWidgetSelection, getWidgetDescribedByText, getWidgetCheckedState, isWidgetChecked, getWidgetPressedState, getWidgetExpandedState, getWidgetSelectedState, getWidgetLevel, getWidgetInvalidState, getWidgetErrorMessage, getWidgetBusyState, getWidgetDescription, getWidgetValueNow, getWidgetValueText, getWidgetOwnLabel, getWidgetExternalLabelText, getWidgetLabelledByText, isInaccessible, isWidgetValueMatch, type CheckedState, type WidgetValueField, };
48
49
  //# sourceMappingURL=widget-accessible-properties.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"widget-accessible-properties.d.ts","sourceRoot":"","sources":["../src/widget-accessible-properties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAgBpC,KAAK,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC9C,KAAK,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAkEtD;;;;;GAKG;AACH,QAAA,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAAmD,CAAC;AAEzG,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAQtD,CAAC;AAyBF,QAAA,MAAM,kBAAkB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAMzD,CAAC;AAYF,QAAA,MAAM,oBAAoB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAI3D,CAAC;AA6CF,QAAA,MAAM,uBAAuB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAkB9D,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAAwB,CAAC;AAU9E,QAAA,MAAM,wBAAwB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAU/D,CAAC;AAOF,QAAA,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAU5D,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAI7C,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAgC,CAAC;AAgBhF,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAgE,CAAC;AAE/G,QAAA,MAAM,sBAAsB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IACW,CAAC;AAkC3E,QAAA,MAAM,kBAAkB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACuC,CAAC;AAKlG,QAAA,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,YAAY,GAAG,IAalE,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAIvD,CAAC;AAEF,QAAA,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAI7D,CAAC;AAEF,QAAA,MAAM,sBAAsB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAM9D,CAAC;AAEF,QAAA,MAAM,sBAAsB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAY9D,CAAC;AAEF,QAAA,MAAM,cAAc,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACK,CAAC;AAE5D,QAAA,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,GAAG,CAAC,sBAAsB,GAAG,IACrB,CAAC;AAE7D,QAAA,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,GAAG,CAAC,MAAM,EAAE,GAAG,IACI,CAAC;AAExE,QAAA,MAAM,kBAAkB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IACA,CAAC;AAE5D,QAAA,MAAM,oBAAoB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACQ,CAAC;AAErE,QAAA,MAAM,iBAAiB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACS,CAAC;AAEnE,QAAA,MAAM,kBAAkB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACS,CAAC;AAEpE,QAAA,MAAM,kBAAkB,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,gBAAgB,EAAE,UAAU,MAAM,KAAG,OACtB,CAAC;AAEvE,QAAA,MAAM,iBAAiB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACK,CAAC;AAa/D,QAAA,MAAM,uBAAuB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAU9D,CAAC;AAEF,QAAA,MAAM,0BAA0B,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAIjE,CAAC;AAOF,QAAA,MAAM,wBAAwB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAe/D,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,cAAc,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAY5C,CAAC;AAEF,OAAO,EACH,eAAe,EACf,aAAa,EACb,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,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACxB,CAAC"}
1
+ {"version":3,"file":"widget-accessible-properties.d.ts","sourceRoot":"","sources":["../src/widget-accessible-properties.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { EDITABLE_ROLES, isEditable, readEditableText } from "./editable.js";
4
4
  import { isNameFromAuthor, isNameProhibited } from "./role-naming.js";
5
5
  import { children, descendants, relationCandidates } from "./traversal.js";
6
6
  import { callBooleanGetter, callStringGetter, getCallableMethod } from "./widget-getters.js";
7
+ import { requireWidget } from "./widget-target.js";
7
8
  const EDITABLE_TEXT_GETTER = "getText";
8
9
  const DEFAULT_TEXT_GETTERS = ["getLabel", EDITABLE_TEXT_GETTER, "getTitle"];
9
10
  const SELECTABLE_ROLES = new Set([
@@ -257,17 +258,17 @@ const isSelfLabelling = (widget, targets) => {
257
258
  const own = new Set(descendants(widget));
258
259
  return targets.every((target) => own.has(target));
259
260
  };
260
- const getWidgetLabelledByText = (widget) => {
261
- const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);
262
- if (targets === null) {
263
- return null;
264
- }
261
+ const labelledByText = (targets) => {
265
262
  const texts = collectAccessibleNames(targets);
266
263
  return texts.length > 0 ? texts.join(" ") : null;
267
264
  };
265
+ const getWidgetLabelledByText = (widget) => {
266
+ const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);
267
+ return targets === null ? null : labelledByText(targets);
268
+ };
268
269
  const getWidgetExternalLabelText = (widget) => {
269
270
  const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);
270
- return targets === null || isSelfLabelling(widget, targets) ? null : getWidgetLabelledByText(widget);
271
+ return targets === null || isSelfLabelling(widget, targets) ? null : labelledByText(targets);
271
272
  };
272
273
  const isTooltipUsedAsName = (widget) => readAccessibleString(widget, Gtk.AccessibleProperty.LABEL) === null &&
273
274
  getWidgetText(widget) === null &&
@@ -284,21 +285,27 @@ const getWidgetDescribedByText = (widget) => {
284
285
  }
285
286
  return isTooltipUsedAsName(widget) ? null : callStringGetter(widget, "getTooltipText");
286
287
  };
288
+ const isHiddenWithin = (widget, hiddenWidgets) => {
289
+ const cached = hiddenWidgets.get(widget);
290
+ if (cached !== undefined) {
291
+ return cached;
292
+ }
293
+ const parent = widget.getParent();
294
+ const isHidden = readAccessibleBoolean(widget, Gtk.AccessibleState.HIDDEN) === true ||
295
+ (parent !== null && isHiddenWithin(parent, hiddenWidgets));
296
+ hiddenWidgets.set(widget, isHidden);
297
+ return isHidden;
298
+ };
299
+ const buildInaccessibilityCheck = () => {
300
+ const hiddenWidgets = new Map();
301
+ return (target) => isHiddenWithin(requireWidget(target), hiddenWidgets);
302
+ };
287
303
  /**
288
304
  * Returns whether a widget is excluded from the accessibility tree, because it or one of its
289
305
  * ancestors is marked hidden.
290
306
  *
291
307
  * @param widget The widget to test.
292
308
  */
293
- const isInaccessible = (widget) => {
294
- let current = widget;
295
- while (current) {
296
- if (readAccessibleBoolean(current, Gtk.AccessibleState.HIDDEN) === true) {
297
- return true;
298
- }
299
- current = current.getParent();
300
- }
301
- return false;
302
- };
303
- export { namingLabelText, getWidgetText, getWidgetTextContent, getWidgetLabelText, getWidgetAccessibleName, getWidgetName, getWidgetPlaceholderText, getWidgetDisplayValue, hasDisplayValue, isWidgetDisabled, isWidgetVisible, getWidgetRequiredState, getWidgetSelection, getWidgetDescribedByText, getWidgetCheckedState, isWidgetChecked, getWidgetPressedState, getWidgetExpandedState, getWidgetSelectedState, getWidgetLevel, getWidgetInvalidState, getWidgetErrorMessage, getWidgetBusyState, getWidgetDescription, getWidgetValueNow, getWidgetValueText, getWidgetOwnLabel, getWidgetExternalLabelText, getWidgetLabelledByText, isInaccessible, isWidgetValueMatch, };
309
+ const isInaccessible = (target) => buildInaccessibilityCheck()(target);
310
+ export { buildInaccessibilityCheck, namingLabelText, getWidgetText, getWidgetTextContent, getWidgetLabelText, getWidgetAccessibleName, getWidgetName, getWidgetPlaceholderText, getWidgetDisplayValue, hasDisplayValue, isWidgetDisabled, isWidgetVisible, getWidgetRequiredState, getWidgetSelection, getWidgetDescribedByText, getWidgetCheckedState, isWidgetChecked, getWidgetPressedState, getWidgetExpandedState, getWidgetSelectedState, getWidgetLevel, getWidgetInvalidState, getWidgetErrorMessage, getWidgetBusyState, getWidgetDescription, getWidgetValueNow, getWidgetValueText, getWidgetOwnLabel, getWidgetExternalLabelText, getWidgetLabelledByText, isInaccessible, isWidgetValueMatch, };
304
311
  //# sourceMappingURL=widget-accessible-properties.js.map