@gtkx/testing 2.0.0-beta.5 → 2.0.0-beta.7

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 (38) 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/queries.d.ts.map +1 -1
  7. package/dist/queries.js +4 -3
  8. package/dist/queries.js.map +1 -1
  9. package/dist/screenshot.d.ts.map +1 -1
  10. package/dist/screenshot.js +22 -4
  11. package/dist/screenshot.js.map +1 -1
  12. package/dist/traversal.d.ts +1 -1
  13. package/dist/traversal.d.ts.map +1 -1
  14. package/dist/traversal.js +24 -6
  15. package/dist/traversal.js.map +1 -1
  16. package/dist/user-event/click.d.ts +17 -4
  17. package/dist/user-event/click.d.ts.map +1 -1
  18. package/dist/user-event/click.js +26 -7
  19. package/dist/user-event/click.js.map +1 -1
  20. package/dist/user-event/keyboard.d.ts.map +1 -1
  21. package/dist/user-event/keyboard.js +23 -2
  22. package/dist/user-event/keyboard.js.map +1 -1
  23. package/dist/user-event/pointer.d.ts.map +1 -1
  24. package/dist/user-event/pointer.js +9 -11
  25. package/dist/user-event/pointer.js.map +1 -1
  26. package/dist/widget-accessible-properties.d.ts +2 -1
  27. package/dist/widget-accessible-properties.d.ts.map +1 -1
  28. package/dist/widget-accessible-properties.js +23 -18
  29. package/dist/widget-accessible-properties.js.map +1 -1
  30. package/package.json +8 -6
  31. package/src/accessible-native.ts +45 -9
  32. package/src/queries.ts +5 -3
  33. package/src/screenshot.ts +45 -4
  34. package/src/traversal.ts +31 -7
  35. package/src/user-event/click.ts +35 -15
  36. package/src/user-event/keyboard.ts +32 -3
  37. package/src/user-event/pointer.ts +11 -15
  38. package/src/widget-accessible-properties.ts +34 -22
package/README.md CHANGED
@@ -5,9 +5,9 @@
5
5
  <h1 align="center">GTKX</h1>
6
6
 
7
7
  <p align="center">
8
- The React framework for Linux, built on GTK.<br />
9
- Write native GTK4 desktop applications with React and TypeScript.
10
- Real GTK widgets, the GNOME stack, and standard web tooling.
8
+ The React framework for Linux.<br />
9
+ Write native GNOME applications with React and TypeScript.
10
+ Real Adwaita and GTK4 widgets with standard web tooling.
11
11
  </p>
12
12
 
13
13
  <p align="center">
@@ -38,11 +38,12 @@
38
38
 
39
39
  ## Demo
40
40
 
41
- The intrinsic elements in this snippet render GTK4 widgets, and ordinary React hooks and events drive them:
41
+ This app starts with an Adwaita application shell, renders native GTK4 widgets inside it, and uses ordinary React hooks and events:
42
42
 
43
43
  ```tsx
44
44
  import * as Gtk from "@gtkx/gi/gtk";
45
- import { GtkApplication, GtkApplicationWindow, GtkBox, GtkButton, GtkLabel } from "@gtkx/jsx/gtk";
45
+ import { AdwApplication, AdwApplicationWindow, AdwHeaderBar, AdwToolbarView } from "@gtkx/jsx/adw";
46
+ import { GtkBox, GtkButton, GtkLabel } from "@gtkx/jsx/gtk";
46
47
  import { createRoot, quit } from "@gtkx/react";
47
48
  import { useState } from "react";
48
49
 
@@ -50,38 +51,40 @@ const Counter = () => {
50
51
  const [count, setCount] = useState(0);
51
52
 
52
53
  return (
53
- <GtkApplicationWindow
54
+ <AdwApplicationWindow
54
55
  title="Hello GTKX"
55
56
  defaultWidth={400}
56
57
  defaultHeight={300}
57
58
  onCloseRequest={quit}
58
59
  >
59
- <GtkBox
60
- orientation={Gtk.Orientation.VERTICAL}
61
- spacing={20}
62
- marginTop={40}
63
- marginBottom={40}
64
- marginStart={40}
65
- marginEnd={40}
66
- valign={Gtk.Align.CENTER}
67
- halign={Gtk.Align.CENTER}
68
- >
69
- <GtkLabel cssClasses={["title-1"]}>Welcome to GTKX!</GtkLabel>
70
- <GtkLabel cssClasses={["title-2"]}>{`Count: ${count}`}</GtkLabel>
71
- <GtkButton
72
- label="Increment"
73
- onClicked={() => setCount((c) => c + 1)}
74
- cssClasses={["suggested-action", "pill"]}
75
- />
76
- </GtkBox>
77
- </GtkApplicationWindow>
60
+ <AdwToolbarView topBar={<AdwHeaderBar />}>
61
+ <GtkBox
62
+ orientation={Gtk.Orientation.VERTICAL}
63
+ spacing={20}
64
+ marginTop={40}
65
+ marginBottom={40}
66
+ marginStart={40}
67
+ marginEnd={40}
68
+ valign={Gtk.Align.CENTER}
69
+ halign={Gtk.Align.CENTER}
70
+ >
71
+ <GtkLabel cssClasses={["title-1"]}>Welcome to GTKX!</GtkLabel>
72
+ <GtkLabel cssClasses={["title-2"]}>{`Count: ${String(count)}`}</GtkLabel>
73
+ <GtkButton
74
+ label="Increment"
75
+ onClicked={() => setCount((c) => c + 1)}
76
+ cssClasses={["suggested-action", "pill"]}
77
+ />
78
+ </GtkBox>
79
+ </AdwToolbarView>
80
+ </AdwApplicationWindow>
78
81
  );
79
82
  };
80
83
 
81
84
  const App = () => (
82
- <GtkApplication>
85
+ <AdwApplication>
83
86
  <Counter />
84
- </GtkApplication>
87
+ </AdwApplication>
85
88
  );
86
89
 
87
90
  createRoot().render(<App />);
@@ -91,9 +94,9 @@ This is the [`hello-world`](https://github.com/gtkx-org/gtkx/tree/main/examples/
91
94
 
92
95
  ## Why GTKX
93
96
 
94
- ### A declarative layer for the GNOME stack
97
+ ### Adwaita-first application development
95
98
 
96
- GTK4 is mature, and GtkBuilder XML can lay out a static interface, but nothing re-renders that interface when your application state changes, and nothing hot-reloads it as you work. GTKX adds that missing layer, and the tooling around it, on top of the stack you already know:
99
+ GTKX uses Adwaita as the foundation for applications, windows, navigation, dialogs, and adaptive layouts, with the complete GTK4 toolkit underneath. It adds a declarative React layer and an integrated TypeScript toolchain to the GNOME platform:
97
100
 
98
101
  - a React reconciler that exposes every GObject as a JSX element,
99
102
  - a CLI for scaffolding, development, and production builds,
@@ -102,17 +105,17 @@ GTK4 is mature, and GtkBuilder XML can lay out a static interface, but nothing r
102
105
  - a Testing Library-style API for querying and driving your widgets in tests,
103
106
  - and a Model Context Protocol (MCP) server that exposes your live app to AI agents.
104
107
 
105
- ### The full GNOME API surface
108
+ ### Native GNOME widgets, without a compatibility layer
106
109
 
107
- React Native and similar frameworks hide the native toolkit so one API can run everywhere. GTKX exposes it: GTK4, Adwaita, and any other GObject-Introspection library on your system. Linux-only by design.
110
+ React Native and similar frameworks hide the native toolkit so one API can run everywhere. GTKX renders real Adwaita and GTK4 widgets and exposes any other GObject-Introspection library on your system. It is GNOME-native and Linux-only by design.
108
111
 
109
112
  ### Why Node.js, and why generated bindings
110
113
 
111
114
  GTKX runs on Node.js, which puts native modules, the npm ecosystem, and the tooling built for Node.js APIs within reach. GJS is GNOME's own runtime, built on SpiderMonkey rather than V8; node-gtk runs on Node.js but is lightly maintained, on the older nan/V8 ABI rather than N-API, and still centered on GTK3. The [Why GTKX guide](https://gtkx.dev/guide/why-gtkx) covers what running on Node.js means day to day.
112
115
 
113
- GTKX generates the TypeScript types and the native FFI calls from the same GObject-Introspection data, so the types cannot drift from the calls they back. Codegen covers the whole GTK4 and Adwaita surface.
116
+ GTKX generates the TypeScript types and native FFI calls from the same GObject-Introspection data, so the types cannot drift from the calls they back. `Adw-1` is the sole default GIR root; its GIR include pulls in `Gtk-4.0`, so codegen covers both complete API surfaces. Neither belongs in a GTKX 2 `libraries` list.
114
117
 
115
- At runtime, the native Rust core calls straight into the system GTK4, Adwaita, and GLib libraries through libffi, without loading libgirepository at all.
118
+ At runtime, the native Rust core calls straight into the system Adwaita, GTK4, and GLib libraries through libffi, without loading libgirepository at all.
116
119
 
117
120
  ## Quick start
118
121
 
@@ -121,10 +124,10 @@ GTKX is Linux-only and needs Node.js 26.7 or later. See [Requirements](#requirem
121
124
  Scaffold a new app with the `create-gtkx` initializer:
122
125
 
123
126
  ```sh
124
- npm create gtkx
127
+ npm create gtkx@beta
125
128
  ```
126
129
 
127
- The same command works with other package managers: `pnpm create gtkx` or `yarn create gtkx`.
130
+ The same command works with other package managers: `pnpm create gtkx@beta` or `yarn create gtkx@beta`.
128
131
 
129
132
  Then run your new app:
130
133
 
@@ -145,7 +148,7 @@ The documentation at **[gtkx.dev](https://gtkx.dev)** includes a step-by-step tu
145
148
 
146
149
  GTKX is Linux-only. You need:
147
150
 
148
- - Linux with the GTK4 (4.20 or later), Adwaita (1.8 or later), and GLib development libraries
151
+ - Linux with the Adwaita (1.8 or later), GTK4 (4.20 or later), and GLib development libraries
149
152
  - Node.js 26.7 or later
150
153
 
151
154
  The `@gtkx/native` addon ships prebuilt for x64 and arm64 glibc Linux; other targets need to build it from the GTKX repository, which requires a Rust toolchain.
@@ -154,10 +157,10 @@ The `@gtkx/native` addon ships prebuilt for x64 and arm64 glibc Linux; other tar
154
157
 
155
158
  Explore the [example apps](https://github.com/gtkx-org/gtkx/tree/main/examples):
156
159
 
157
- - [`hello-world`](https://github.com/gtkx-org/gtkx/tree/main/examples/hello-world): the counter above.
158
- - [`gtk-demo`](https://github.com/gtkx-org/gtkx/tree/main/examples/gtk-demo): a React port of the official GTK4 widget showcase, covering lists, dialogs, gestures, CSS, and OpenGL.
159
- - [`browser`](https://github.com/gtkx-org/gtkx/tree/main/examples/browser): a WebKitWebView-based web browser.
160
- - [`animations`](https://github.com/gtkx-org/gtkx/tree/main/examples/animations): a tour of `@gtkx/animated`, React Spring animations driven by the GTK frame clock.
160
+ - [`hello-world`](https://github.com/gtkx-org/gtkx/tree/main/examples/hello-world): the Adwaita counter above.
161
+ - [`gtk-demo`](https://github.com/gtkx-org/gtkx/tree/main/examples/gtk-demo): the official GTK4 widget showcase in an Adwaita application shell, covering lists, dialogs, gestures, CSS, and OpenGL.
162
+ - [`browser`](https://github.com/gtkx-org/gtkx/tree/main/examples/browser): an Adwaita browser built around `WebKitWebView`.
163
+ - [`animations`](https://github.com/gtkx-org/gtkx/tree/main/examples/animations): an Adwaita showcase for `@gtkx/animated`, with React Spring animations driven by the GTK frame clock.
161
164
  - [`navigation`](https://github.com/gtkx-org/gtkx/tree/main/examples/navigation): a tour of `@gtkx/navigation`, React Navigation's stack, tab, and drawer navigators rendered with libadwaita.
162
165
  - [`tutorial`](https://github.com/gtkx-org/gtkx/tree/main/examples/tutorial): the Tasks app the documentation builds.
163
166
 
@@ -2,7 +2,7 @@ import * as Gtk from "@gtkx/gi/gtk";
2
2
  /** A value GTK holds for an accessible property: a string, a number, a token, or a boolean. */
3
3
  type AccessibleAttributeValue = boolean | number | string;
4
4
  declare const ACCESSIBLE_NUMBER_TOLERANCE = 0.001;
5
- declare const readAccessibleRelation: (accessible: Gtk.Accessible, relation: Gtk.AccessibleRelation, pool: Gtk.Accessible[]) => Gtk.Accessible[];
5
+ declare const readAccessibleRelation: (accessible: Gtk.Accessible, relation: Gtk.AccessibleRelation, tiers: Iterable<Gtk.Accessible>[]) => Gtk.Accessible[];
6
6
  declare const readAccessibleState: (accessible: Gtk.Accessible, state: Gtk.AccessibleState) => number | null;
7
7
  declare const readAccessibleFlag: (accessible: Gtk.Accessible, state: Gtk.AccessibleState) => boolean | null;
8
8
  declare const readAccessibleString: (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty) => string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"accessible-native.d.ts","sourceRoot":"","sources":["../src/accessible-native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAOpC,+FAA+F;AAC/F,KAAK,wBAAwB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAqB1D,QAAA,MAAM,2BAA2B,QAAQ,CAAC;AAuJ1C,QAAA,MAAM,sBAAsB,GACxB,YAAY,GAAG,CAAC,UAAU,EAC1B,UAAU,GAAG,CAAC,kBAAkB,EAChC,MAAM,GAAG,CAAC,UAAU,EAAE,KACvB,GAAG,CAAC,UAAU,EAahB,CAAC;AAYF,QAAA,MAAM,mBAAmB,GAAI,YAAY,GAAG,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC,eAAe,KAAG,MAAM,GAAG,IAU9F,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,YAAY,GAAG,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC,eAAe,KAAG,OAAO,GAAG,IAI9F,CAAC;AAEF,QAAA,MAAM,oBAAoB,GAAI,YAAY,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,kBAAkB,KAAG,MAAM,GAAG,IAMrG,CAAC;AAcF,QAAA,MAAM,6BAA6B,GAC/B,YAAY,GAAG,CAAC,UAAU,EAC1B,UAAU,GAAG,CAAC,kBAAkB,KACjC,OAAO,GAAG,IAIZ,CAAC;AAiBF,QAAA,MAAM,iBAAiB,GAAI,YAAY,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,kBAAkB,KAAG,MAAM,GAAG,IACtB,CAAC;AAE9E,QAAA,MAAM,oBAAoB,GAAI,YAAY,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,kBAAkB,KAAG,MAAM,GAAG,IACnB,CAAC;AAEpF,QAAA,MAAM,0BAA0B,GAAI,UAAU,GAAG,CAAC,kBAAkB,KAAG,OAA0C,CAAC;AAElH,QAAA,MAAM,uBAAuB,GACzB,YAAY,GAAG,CAAC,UAAU,EAC1B,UAAU,GAAG,CAAC,kBAAkB,EAChC,UAAU,MAAM,KACjB,OAEwE,CAAC;AA6B5E,QAAA,MAAM,sBAAsB,GACxB,YAAY,GAAG,CAAC,UAAU,EAC1B,UAAU,GAAG,CAAC,kBAAkB,KACjC,wBAAwB,GAAG,IAAyD,CAAC;AAExF,OAAO,EACH,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,wBAAwB,GAChC,CAAC"}
1
+ {"version":3,"file":"accessible-native.d.ts","sourceRoot":"","sources":["../src/accessible-native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAOpC,+FAA+F;AAC/F,KAAK,wBAAwB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAqB1D,QAAA,MAAM,2BAA2B,QAAQ,CAAC;AAuL1C,QAAA,MAAM,sBAAsB,GACxB,YAAY,GAAG,CAAC,UAAU,EAC1B,UAAU,GAAG,CAAC,kBAAkB,EAChC,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAClC,GAAG,CAAC,UAAU,EAiBhB,CAAC;AAYF,QAAA,MAAM,mBAAmB,GAAI,YAAY,GAAG,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC,eAAe,KAAG,MAAM,GAAG,IAU9F,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,YAAY,GAAG,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC,eAAe,KAAG,OAAO,GAAG,IAI9F,CAAC;AAEF,QAAA,MAAM,oBAAoB,GAAI,YAAY,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,kBAAkB,KAAG,MAAM,GAAG,IAMrG,CAAC;AAcF,QAAA,MAAM,6BAA6B,GAC/B,YAAY,GAAG,CAAC,UAAU,EAC1B,UAAU,GAAG,CAAC,kBAAkB,KACjC,OAAO,GAAG,IAIZ,CAAC;AAiBF,QAAA,MAAM,iBAAiB,GAAI,YAAY,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,kBAAkB,KAAG,MAAM,GAAG,IACtB,CAAC;AAE9E,QAAA,MAAM,oBAAoB,GAAI,YAAY,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,kBAAkB,KAAG,MAAM,GAAG,IACnB,CAAC;AAEpF,QAAA,MAAM,0BAA0B,GAAI,UAAU,GAAG,CAAC,kBAAkB,KAAG,OAA0C,CAAC;AAElH,QAAA,MAAM,uBAAuB,GACzB,YAAY,GAAG,CAAC,UAAU,EAC1B,UAAU,GAAG,CAAC,kBAAkB,EAChC,UAAU,MAAM,KACjB,OAEwE,CAAC;AA6B5E,QAAA,MAAM,sBAAsB,GACxB,YAAY,GAAG,CAAC,UAAU,EAC1B,UAAU,GAAG,CAAC,kBAAkB,KACjC,wBAAwB,GAAG,IAAyD,CAAC;AAExF,OAAO,EACH,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,wBAAwB,GAChC,CAAC"}
@@ -118,23 +118,44 @@ const findRelationSize = (accessible, relation, candidates) => {
118
118
  }
119
119
  return 0;
120
120
  };
121
+ const unseen = function* (items, seen) {
122
+ for (const item of items) {
123
+ if (seen.has(item)) {
124
+ continue;
125
+ }
126
+ seen.add(item);
127
+ yield item;
128
+ }
129
+ };
121
130
  const possibleTargets = (relation, candidates) => {
122
131
  const reverse = REVERSE_RELATIONS[relation];
123
132
  if (reverse === undefined) {
124
- return candidates;
133
+ return [...candidates];
125
134
  }
126
- return candidates.filter((candidate) => Gtk.testAccessibleHasRelation(candidate, reverse));
135
+ return [...candidates].filter((candidate) => Gtk.testAccessibleHasRelation(candidate, reverse));
127
136
  };
128
- const readAccessibleRelation = (accessible, relation, pool) => {
137
+ const scanRelationTier = (accessible, relation, candidates, scan) => {
138
+ const size = scan.size > 0 ? scan.size : findRelationSize(accessible, relation, candidates);
139
+ if (size === 0) {
140
+ return scan;
141
+ }
142
+ const found = candidates.filter((candidate) => isRelationExactly(accessible, relation, candidate, size));
143
+ return { size, targets: [...scan.targets, ...found] };
144
+ };
145
+ const isRelationComplete = (scan) => scan.size > 0 && scan.targets.length >= scan.size;
146
+ const readAccessibleRelation = (accessible, relation, tiers) => {
129
147
  if (!Gtk.testAccessibleHasRelation(accessible, relation)) {
130
148
  return [];
131
149
  }
132
- const candidates = possibleTargets(relation, pool);
133
- const size = findRelationSize(accessible, relation, candidates);
134
- if (size === 0) {
135
- return [];
150
+ const seen = new Set();
151
+ let scan = { size: 0, targets: [] };
152
+ for (const tier of tiers) {
153
+ scan = scanRelationTier(accessible, relation, possibleTargets(relation, unseen(tier, seen)), scan);
154
+ if (isRelationComplete(scan)) {
155
+ break;
156
+ }
136
157
  }
137
- return candidates.filter((candidate) => isRelationExactly(accessible, relation, candidate, size));
158
+ return scan.targets;
138
159
  };
139
160
  const memberOfDomain = (check, handle, attribute, domain) => {
140
161
  for (const candidate of domain) {
@@ -1 +1 @@
1
- {"version":3,"file":"accessible-native.js","sourceRoot":"","sources":["../src/accessible-native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAY7C,MAAM,GAAG,GAAG,eAAe,CAAC;AAC5B,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAC/B,MAAM,gBAAgB,GAA+B,IAAI,GAAG,EAAE,CAAC;AAE/D,MAAM,iBAAiB,GAAoE;IACvF,CAAC,GAAG,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,kBAAkB,CAAC,SAAS;IACtE,CAAC,GAAG,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,kBAAkB,CAAC,eAAe;IAC7E,CAAC,GAAG,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,kBAAkB,CAAC,iBAAiB;IAChF,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,kBAAkB,CAAC,aAAa;IACvE,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,kBAAkB,CAAC,WAAW;IACpE,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,kBAAkB,CAAC,SAAS;CACrE,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,CAAC,CAAC;AAC3B,MAAM,YAAY,GAAG,CAAC,aAAa,CAAC;AACpC,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AAC1C,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAC1C,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,MAAM,uBAAuB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;AACxD,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAElH,MAAM,cAAc,GAAG;IACnB,GAAG,CAAC,sBAAsB,CAAC,KAAK;IAChC,GAAG,CAAC,sBAAsB,CAAC,IAAI;IAC/B,GAAG,CAAC,sBAAsB,CAAC,OAAO;IAClC,GAAG,CAAC,sBAAsB,CAAC,QAAQ;CACtC,CAAC;AAEF,MAAM,aAAa,GAAmD;IAClE,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,cAAc;IAC1C,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe;IAC9C,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,cAAc;IAC9C,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,uBAAuB;IACvD,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,cAAc;IAC5C,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,cAAc;IAC7C,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe;IAC9C,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,uBAAuB;IACvD,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,uBAAuB;CACzD,CAAC;AAEF,MAAM,mBAAmB,GAAG;IACxB,GAAG,CAAC,sBAAsB,CAAC,IAAI;IAC/B,GAAG,CAAC,sBAAsB,CAAC,MAAM;IACjC,GAAG,CAAC,sBAAsB,CAAC,IAAI;IAC/B,GAAG,CAAC,sBAAsB,CAAC,IAAI;CAClC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAElF,MAAM,WAAW,GAAG;IAChB,GAAG,CAAC,cAAc,CAAC,IAAI;IACvB,GAAG,CAAC,cAAc,CAAC,SAAS;IAC5B,GAAG,CAAC,cAAc,CAAC,UAAU;IAC7B,GAAG,CAAC,cAAc,CAAC,KAAK;CAC3B,CAAC;AAEF,MAAM,aAAa,GAAsD;IACrE,CAAC,GAAG,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,mBAAmB;IAC1D,CAAC,GAAG,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,kBAAkB;IACxD,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,WAAW;CAC7C,CAAC;AAEF,MAAM,iBAAiB,GAAgC,IAAI,GAAG,CAAyB;IACnF,GAAG,CAAC,kBAAkB,CAAC,WAAW;IAClC,GAAG,CAAC,kBAAkB,CAAC,SAAS;IAChC,GAAG,CAAC,kBAAkB,CAAC,aAAa;IACpC,GAAG,CAAC,kBAAkB,CAAC,KAAK;IAC5B,GAAG,CAAC,kBAAkB,CAAC,WAAW;IAClC,GAAG,CAAC,kBAAkB,CAAC,gBAAgB;IACvC,GAAG,CAAC,kBAAkB,CAAC,UAAU;CACpC,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAgC,IAAI,GAAG,CAAyB;IACpF,GAAG,CAAC,kBAAkB,CAAC,SAAS;IAChC,GAAG,CAAC,kBAAkB,CAAC,KAAK;IAC5B,GAAG,CAAC,kBAAkB,CAAC,UAAU;IACjC,GAAG,CAAC,kBAAkB,CAAC,gBAAgB;IACvC,GAAG,CAAC,kBAAkB,CAAC,SAAS;IAChC,GAAG,CAAC,kBAAkB,CAAC,QAAQ;CAClC,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAgC,IAAI,GAAG,CAAyB;IACnF,GAAG,CAAC,kBAAkB,CAAC,SAAS;IAChC,GAAG,CAAC,kBAAkB,CAAC,SAAS;IAChC,GAAG,CAAC,kBAAkB,CAAC,SAAS;CACnC,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AAClD,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAClC,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AACvC,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AAClD,MAAM,cAAc,GAAG,oCAAoC,CAAC;AAC5D,MAAM,aAAa,GAAG,oBAAoB,CAAC,iCAAiC,EAAE,CAAC,OAAO,CAAC,CAAa,CAAC;AACrG,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAa,CAAC;AACrF,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,cAAc,EAAE,CAAC,UAAU,CAAC,CAAgB,CAAC;AAC9F,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,cAAc,EAAE,CAAC,UAAU,CAAC,CAAgB,CAAC;AAE9F,SAAS,oBAAoB,CAAC,MAAc,EAAE,OAAmB;IAC7D,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE;QACrB,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QACvC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QACzB,aAAa,EAAE,CAAC;KACnB,CAAC,CAAC;AACP,CAAC;AAED,MAAM,oBAAoB,GAAG,CAAC,WAAmB,EAAiB,EAAE;IAChE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;IAE1E,OAAO,oBAAoB,CAAC,oCAAoC,EAAE,OAAO,CAAkB,CAAC;AAChG,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,WAAmB,EAAiB,EAAE;IAC9D,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEjD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAChD,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEzC,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACtB,UAA0B,EAC1B,QAAgC,EAChC,SAAyB,EACzB,WAAmB,EACZ,EAAE;IACT,MAAM,IAAI,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEjF,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACpB,UAA0B,EAC1B,QAAgC,EAChC,UAA4B,EAC5B,IAAY,EACL,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AAEvG,MAAM,gBAAgB,GAAG,CACrB,UAA0B,EAC1B,QAAgC,EAChC,UAA4B,EACtB,EAAE;IACR,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,oBAAoB,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACzD,IAAI,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,QAAgC,EAAE,UAA4B,EAAoB,EAAE;IACzG,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/F,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC3B,UAA0B,EAC1B,QAAgC,EAChC,IAAsB,EACN,EAAE;IAClB,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QACvD,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEhE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AACtG,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAe,EAAE,MAAe,EAAE,SAAiB,EAAE,MAAgB,EAAiB,EAAE;IAC5G,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/C,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,UAA0B,EAAE,KAA0B,EAAiB,EAAE;IAClG,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAEpC,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAEnF,OAAO,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,UAA0B,EAAE,KAA0B,EAAkB,EAAE;IAClG,MAAM,KAAK,GAAG,mBAAmB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAErD,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,UAA0B,EAAE,QAAgC,EAAiB,EAAE;IACzG,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,UAA0B,EAC1B,QAAgC,EAChC,MAAgB,EACH,EAAE;IACf,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAClC,UAA0B,EAC1B,QAAgC,EAClB,EAAE;IAChB,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAEzE,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,KAAkB,EAClB,QAAgB,EAChB,UAA0B,EAC1B,QAAgC,EACnB,EAAE;IACf,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAElE,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,UAA0B,EAAE,QAAgC,EAAiB,EAAE,CACtG,mBAAmB,CAAC,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAE9E,MAAM,oBAAoB,GAAG,CAAC,UAA0B,EAAE,QAAgC,EAAiB,EAAE,CACzG,mBAAmB,CAAC,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEpF,MAAM,0BAA0B,GAAG,CAAC,QAAgC,EAAW,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAElH,MAAM,uBAAuB,GAAG,CAC5B,UAA0B,EAC1B,QAAgC,EAChC,QAAgB,EACT,EAAE,CACT,GAAG,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,CAAC;IACnD,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC;AAE5E,MAAM,cAAc,GAChB,CAAC,MAAgB,EAAkB,EAAE,CACjC,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,CACrB,mBAAmB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE9D,MAAM,iBAAiB,GAAG,CAAC,QAAgC,EAAkB,EAAE;IAC3E,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAED,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO,6BAA6B,CAAC;IACzC,CAAC;IAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC3B,UAA0B,EAC1B,QAAgC,EACD,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAExF,OAAO,EACH,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GAEvB,CAAC","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport { getHandle, t } from \"@gtkx/runtime\";\n\ntype CheckInt = (handle: unknown, attribute: number, expected: number) => string | null;\ntype CheckString = (handle: unknown, attribute: number, expected: string | null) => string | null;\ntype CheckDouble = (handle: unknown, attribute: number, expected: number) => string | null;\ntype CheckRelation = (...args: unknown[]) => string | null;\n/** A value GTK holds for an accessible property: a string, a number, a token, or a boolean. */\ntype AccessibleAttributeValue = boolean | number | string;\ntype PropertyReader = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty) => AccessibleAttributeValue | null;\ntype NativeCall = (...inputs: unknown[]) => unknown;\ntype CheckArg = typeof DOUBLE_ARG | typeof INT_ARG | typeof OBJECT_ARG | typeof STRING_ARG;\n\nconst LIB = \"libgtk-4.so.1\";\nconst MAX_RELATION_TARGETS = 8;\nconst relationBindings: Map<number, CheckRelation> = new Map();\n\nconst REVERSE_RELATIONS: Partial<Record<Gtk.AccessibleRelation, Gtk.AccessibleRelation>> = {\n [Gtk.AccessibleRelation.LABELLED_BY]: Gtk.AccessibleRelation.LABEL_FOR,\n [Gtk.AccessibleRelation.DESCRIBED_BY]: Gtk.AccessibleRelation.DESCRIPTION_FOR,\n [Gtk.AccessibleRelation.ERROR_MESSAGE]: Gtk.AccessibleRelation.ERROR_MESSAGE_FOR,\n [Gtk.AccessibleRelation.CONTROLS]: Gtk.AccessibleRelation.CONTROLLED_BY,\n [Gtk.AccessibleRelation.DETAILS]: Gtk.AccessibleRelation.DETAILS_FOR,\n [Gtk.AccessibleRelation.FLOW_TO]: Gtk.AccessibleRelation.FLOW_FROM,\n};\n\nconst UNDEFINED_VALUE = -1;\nconst INT_SENTINEL = -2_147_483_648;\nconst NUMBER_SENTINEL = -Number.MAX_VALUE;\nconst ACCESSIBLE_NUMBER_TOLERANCE = 0.001;\nconst BOOLEAN_DOMAIN = [0, 1];\nconst OPTIONAL_BOOLEAN_DOMAIN = [0, 1, UNDEFINED_VALUE];\nconst TRISTATE_DOMAIN = [Gtk.AccessibleTristate.FALSE, Gtk.AccessibleTristate.TRUE, Gtk.AccessibleTristate.MIXED];\n\nconst INVALID_DOMAIN = [\n Gtk.AccessibleInvalidState.FALSE,\n Gtk.AccessibleInvalidState.TRUE,\n Gtk.AccessibleInvalidState.GRAMMAR,\n Gtk.AccessibleInvalidState.SPELLING,\n];\n\nconst STATE_DOMAINS: Partial<Record<Gtk.AccessibleState, number[]>> = {\n [Gtk.AccessibleState.BUSY]: BOOLEAN_DOMAIN,\n [Gtk.AccessibleState.CHECKED]: TRISTATE_DOMAIN,\n [Gtk.AccessibleState.DISABLED]: BOOLEAN_DOMAIN,\n [Gtk.AccessibleState.EXPANDED]: OPTIONAL_BOOLEAN_DOMAIN,\n [Gtk.AccessibleState.HIDDEN]: BOOLEAN_DOMAIN,\n [Gtk.AccessibleState.INVALID]: INVALID_DOMAIN,\n [Gtk.AccessibleState.PRESSED]: TRISTATE_DOMAIN,\n [Gtk.AccessibleState.SELECTED]: OPTIONAL_BOOLEAN_DOMAIN,\n [Gtk.AccessibleState.VISITED]: OPTIONAL_BOOLEAN_DOMAIN,\n};\n\nconst AUTOCOMPLETE_DOMAIN = [\n Gtk.AccessibleAutocomplete.NONE,\n Gtk.AccessibleAutocomplete.INLINE,\n Gtk.AccessibleAutocomplete.LIST,\n Gtk.AccessibleAutocomplete.BOTH,\n];\n\nconst ORIENTATION_DOMAIN = [Gtk.Orientation.HORIZONTAL, Gtk.Orientation.VERTICAL];\n\nconst SORT_DOMAIN = [\n Gtk.AccessibleSort.NONE,\n Gtk.AccessibleSort.ASCENDING,\n Gtk.AccessibleSort.DESCENDING,\n Gtk.AccessibleSort.OTHER,\n];\n\nconst TOKEN_DOMAINS: Partial<Record<Gtk.AccessibleProperty, number[]>> = {\n [Gtk.AccessibleProperty.AUTOCOMPLETE]: AUTOCOMPLETE_DOMAIN,\n [Gtk.AccessibleProperty.ORIENTATION]: ORIENTATION_DOMAIN,\n [Gtk.AccessibleProperty.SORT]: SORT_DOMAIN,\n};\n\nconst STRING_PROPERTIES: Set<Gtk.AccessibleProperty> = new Set<Gtk.AccessibleProperty>([\n Gtk.AccessibleProperty.DESCRIPTION,\n Gtk.AccessibleProperty.HELP_TEXT,\n Gtk.AccessibleProperty.KEY_SHORTCUTS,\n Gtk.AccessibleProperty.LABEL,\n Gtk.AccessibleProperty.PLACEHOLDER,\n Gtk.AccessibleProperty.ROLE_DESCRIPTION,\n Gtk.AccessibleProperty.VALUE_TEXT,\n]);\n\nconst BOOLEAN_PROPERTIES: Set<Gtk.AccessibleProperty> = new Set<Gtk.AccessibleProperty>([\n Gtk.AccessibleProperty.HAS_POPUP,\n Gtk.AccessibleProperty.MODAL,\n Gtk.AccessibleProperty.MULTI_LINE,\n Gtk.AccessibleProperty.MULTI_SELECTABLE,\n Gtk.AccessibleProperty.READ_ONLY,\n Gtk.AccessibleProperty.REQUIRED,\n]);\n\nconst NUMBER_PROPERTIES: Set<Gtk.AccessibleProperty> = new Set<Gtk.AccessibleProperty>([\n Gtk.AccessibleProperty.VALUE_MAX,\n Gtk.AccessibleProperty.VALUE_MIN,\n Gtk.AccessibleProperty.VALUE_NOW,\n]);\n\nconst OBJECT_ARG = { type: t.object(\"borrowed\") };\nconst INT_ARG = { type: t.int32 };\nconst DOUBLE_ARG = { type: t.float64 };\nconst STRING_ARG = { type: t.string(\"borrowed\") };\nconst CHECK_PROPERTY = \"gtk_test_accessible_check_property\";\nconst checkStateInt = buildAccessibleCheck(\"gtk_test_accessible_check_state\", [INT_ARG]) as CheckInt;\nconst checkPropertyInt = buildAccessibleCheck(CHECK_PROPERTY, [INT_ARG]) as CheckInt;\nconst checkPropertyDouble = buildAccessibleCheck(CHECK_PROPERTY, [DOUBLE_ARG]) as CheckDouble;\nconst checkPropertyString = buildAccessibleCheck(CHECK_PROPERTY, [STRING_ARG]) as CheckString;\n\nfunction buildAccessibleCheck(symbol: string, varargs: CheckArg[]): NativeCall {\n return t.fn(LIB, symbol, {\n args: [OBJECT_ARG, INT_ARG, ...varargs],\n returns: t.string(\"full\"),\n fixedArgCount: 2,\n });\n}\n\nconst buildRelationBinding = (targetCount: number): CheckRelation => {\n const targets = Array.from({ length: targetCount + 1 }, () => OBJECT_ARG);\n\n return buildAccessibleCheck(\"gtk_test_accessible_check_relation\", targets) as CheckRelation;\n};\n\nconst relationBindingFor = (targetCount: number): CheckRelation => {\n const cached = relationBindings.get(targetCount);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const built = buildRelationBinding(targetCount);\n relationBindings.set(targetCount, built);\n\n return built;\n};\n\nconst isRelationExactly = (\n accessible: Gtk.Accessible,\n relation: Gtk.AccessibleRelation,\n candidate: Gtk.Accessible,\n targetCount: number,\n): boolean => {\n const call = relationBindingFor(targetCount);\n const repeated = Array.from({ length: targetCount }, () => getHandle(candidate));\n\n return call(getHandle(accessible), relation, ...repeated, null) === null;\n};\n\nconst hasRelationSize = (\n accessible: Gtk.Accessible,\n relation: Gtk.AccessibleRelation,\n candidates: Gtk.Accessible[],\n size: number,\n): boolean => candidates.some((candidate) => isRelationExactly(accessible, relation, candidate, size));\n\nconst findRelationSize = (\n accessible: Gtk.Accessible,\n relation: Gtk.AccessibleRelation,\n candidates: Gtk.Accessible[],\n): number => {\n for (let size = 1; size <= MAX_RELATION_TARGETS; size += 1) {\n if (hasRelationSize(accessible, relation, candidates, size)) {\n return size;\n }\n }\n\n return 0;\n};\n\nconst possibleTargets = (relation: Gtk.AccessibleRelation, candidates: Gtk.Accessible[]): Gtk.Accessible[] => {\n const reverse = REVERSE_RELATIONS[relation];\n\n if (reverse === undefined) {\n return candidates;\n }\n\n return candidates.filter((candidate) => Gtk.testAccessibleHasRelation(candidate, reverse));\n};\n\nconst readAccessibleRelation = (\n accessible: Gtk.Accessible,\n relation: Gtk.AccessibleRelation,\n pool: Gtk.Accessible[],\n): Gtk.Accessible[] => {\n if (!Gtk.testAccessibleHasRelation(accessible, relation)) {\n return [];\n }\n\n const candidates = possibleTargets(relation, pool);\n const size = findRelationSize(accessible, relation, candidates);\n\n if (size === 0) {\n return [];\n }\n\n return candidates.filter((candidate) => isRelationExactly(accessible, relation, candidate, size));\n};\n\nconst memberOfDomain = (check: CheckInt, handle: unknown, attribute: number, domain: number[]): number | null => {\n for (const candidate of domain) {\n if (check(handle, attribute, candidate) === null) {\n return candidate;\n }\n }\n\n return null;\n};\n\nconst readAccessibleState = (accessible: Gtk.Accessible, state: Gtk.AccessibleState): number | null => {\n const domain = STATE_DOMAINS[state];\n\n if (domain === undefined || !Gtk.testAccessibleHasState(accessible, state)) {\n return null;\n }\n\n const member = memberOfDomain(checkStateInt, getHandle(accessible), state, domain);\n\n return member === UNDEFINED_VALUE ? null : member;\n};\n\nconst readAccessibleFlag = (accessible: Gtk.Accessible, state: Gtk.AccessibleState): boolean | null => {\n const value = readAccessibleState(accessible, state);\n\n return value === null ? null : value === 1;\n};\n\nconst readAccessibleString = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty): string | null => {\n if (!Gtk.testAccessibleHasProperty(accessible, property)) {\n return null;\n }\n\n return checkPropertyString(getHandle(accessible), property, null);\n};\n\nconst readAccessibleToken = (\n accessible: Gtk.Accessible,\n property: Gtk.AccessibleProperty,\n domain: number[],\n): number | null => {\n if (!Gtk.testAccessibleHasProperty(accessible, property)) {\n return null;\n }\n\n return memberOfDomain(checkPropertyInt, getHandle(accessible), property, domain);\n};\n\nconst readAccessibleBooleanProperty = (\n accessible: Gtk.Accessible,\n property: Gtk.AccessibleProperty,\n): boolean | null => {\n const member = readAccessibleToken(accessible, property, BOOLEAN_DOMAIN);\n\n return member === null ? null : member === 1;\n};\n\nconst readAgainstSentinel = (\n check: CheckDouble,\n sentinel: number,\n accessible: Gtk.Accessible,\n property: Gtk.AccessibleProperty,\n): number | null => {\n if (!Gtk.testAccessibleHasProperty(accessible, property)) {\n return null;\n }\n\n const reported = check(getHandle(accessible), property, sentinel);\n\n return reported === null ? sentinel : Number(reported);\n};\n\nconst readAccessibleInt = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty): number | null =>\n readAgainstSentinel(checkPropertyInt, INT_SENTINEL, accessible, property);\n\nconst readAccessibleNumber = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty): number | null =>\n readAgainstSentinel(checkPropertyDouble, NUMBER_SENTINEL, accessible, property);\n\nconst isAccessibleNumberProperty = (property: Gtk.AccessibleProperty): boolean => NUMBER_PROPERTIES.has(property);\n\nconst isAccessibleNumberMatch = (\n accessible: Gtk.Accessible,\n property: Gtk.AccessibleProperty,\n expected: number,\n): boolean =>\n Gtk.testAccessibleHasProperty(accessible, property) &&\n checkPropertyDouble(getHandle(accessible), property, expected) === null;\n\nconst tokenReaderFor =\n (domain: number[]): PropertyReader =>\n (accessible, property) =>\n readAccessibleToken(accessible, property, domain);\n\nconst propertyReaderFor = (property: Gtk.AccessibleProperty): PropertyReader => {\n const domain = TOKEN_DOMAINS[property];\n\n if (domain !== undefined) {\n return tokenReaderFor(domain);\n }\n\n if (STRING_PROPERTIES.has(property)) {\n return readAccessibleString;\n }\n\n if (BOOLEAN_PROPERTIES.has(property)) {\n return readAccessibleBooleanProperty;\n }\n\n if (NUMBER_PROPERTIES.has(property)) {\n return readAccessibleNumber;\n }\n\n return readAccessibleInt;\n};\n\nconst readAccessibleProperty = (\n accessible: Gtk.Accessible,\n property: Gtk.AccessibleProperty,\n): AccessibleAttributeValue | null => propertyReaderFor(property)(accessible, property);\n\nexport {\n ACCESSIBLE_NUMBER_TOLERANCE,\n isAccessibleNumberMatch,\n isAccessibleNumberProperty,\n readAccessibleBooleanProperty,\n readAccessibleFlag,\n readAccessibleInt,\n readAccessibleNumber,\n readAccessibleProperty,\n readAccessibleRelation,\n readAccessibleState,\n readAccessibleString,\n type AccessibleAttributeValue,\n};\n"]}
1
+ {"version":3,"file":"accessible-native.js","sourceRoot":"","sources":["../src/accessible-native.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport { getHandle, t } from \"@gtkx/runtime\";\n\ntype CheckInt = (handle: unknown, attribute: number, expected: number) => string | null;\ntype CheckString = (handle: unknown, attribute: number, expected: string | null) => string | null;\ntype CheckDouble = (handle: unknown, attribute: number, expected: number) => string | null;\ntype CheckRelation = (...args: unknown[]) => string | null;\n/** A value GTK holds for an accessible property: a string, a number, a token, or a boolean. */\ntype AccessibleAttributeValue = boolean | number | string;\ntype PropertyReader = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty) => AccessibleAttributeValue | null;\ntype NativeCall = (...inputs: unknown[]) => unknown;\ntype CheckArg = typeof DOUBLE_ARG | typeof INT_ARG | typeof OBJECT_ARG | typeof STRING_ARG;\n\nconst LIB = \"libgtk-4.so.1\";\nconst MAX_RELATION_TARGETS = 8;\nconst relationBindings: Map<number, CheckRelation> = new Map();\n\nconst REVERSE_RELATIONS: Partial<Record<Gtk.AccessibleRelation, Gtk.AccessibleRelation>> = {\n [Gtk.AccessibleRelation.LABELLED_BY]: Gtk.AccessibleRelation.LABEL_FOR,\n [Gtk.AccessibleRelation.DESCRIBED_BY]: Gtk.AccessibleRelation.DESCRIPTION_FOR,\n [Gtk.AccessibleRelation.ERROR_MESSAGE]: Gtk.AccessibleRelation.ERROR_MESSAGE_FOR,\n [Gtk.AccessibleRelation.CONTROLS]: Gtk.AccessibleRelation.CONTROLLED_BY,\n [Gtk.AccessibleRelation.DETAILS]: Gtk.AccessibleRelation.DETAILS_FOR,\n [Gtk.AccessibleRelation.FLOW_TO]: Gtk.AccessibleRelation.FLOW_FROM,\n};\n\nconst UNDEFINED_VALUE = -1;\nconst INT_SENTINEL = -2_147_483_648;\nconst NUMBER_SENTINEL = -Number.MAX_VALUE;\nconst ACCESSIBLE_NUMBER_TOLERANCE = 0.001;\nconst BOOLEAN_DOMAIN = [0, 1];\nconst OPTIONAL_BOOLEAN_DOMAIN = [0, 1, UNDEFINED_VALUE];\nconst TRISTATE_DOMAIN = [Gtk.AccessibleTristate.FALSE, Gtk.AccessibleTristate.TRUE, Gtk.AccessibleTristate.MIXED];\n\nconst INVALID_DOMAIN = [\n Gtk.AccessibleInvalidState.FALSE,\n Gtk.AccessibleInvalidState.TRUE,\n Gtk.AccessibleInvalidState.GRAMMAR,\n Gtk.AccessibleInvalidState.SPELLING,\n];\n\nconst STATE_DOMAINS: Partial<Record<Gtk.AccessibleState, number[]>> = {\n [Gtk.AccessibleState.BUSY]: BOOLEAN_DOMAIN,\n [Gtk.AccessibleState.CHECKED]: TRISTATE_DOMAIN,\n [Gtk.AccessibleState.DISABLED]: BOOLEAN_DOMAIN,\n [Gtk.AccessibleState.EXPANDED]: OPTIONAL_BOOLEAN_DOMAIN,\n [Gtk.AccessibleState.HIDDEN]: BOOLEAN_DOMAIN,\n [Gtk.AccessibleState.INVALID]: INVALID_DOMAIN,\n [Gtk.AccessibleState.PRESSED]: TRISTATE_DOMAIN,\n [Gtk.AccessibleState.SELECTED]: OPTIONAL_BOOLEAN_DOMAIN,\n [Gtk.AccessibleState.VISITED]: OPTIONAL_BOOLEAN_DOMAIN,\n};\n\nconst AUTOCOMPLETE_DOMAIN = [\n Gtk.AccessibleAutocomplete.NONE,\n Gtk.AccessibleAutocomplete.INLINE,\n Gtk.AccessibleAutocomplete.LIST,\n Gtk.AccessibleAutocomplete.BOTH,\n];\n\nconst ORIENTATION_DOMAIN = [Gtk.Orientation.HORIZONTAL, Gtk.Orientation.VERTICAL];\n\nconst SORT_DOMAIN = [\n Gtk.AccessibleSort.NONE,\n Gtk.AccessibleSort.ASCENDING,\n Gtk.AccessibleSort.DESCENDING,\n Gtk.AccessibleSort.OTHER,\n];\n\nconst TOKEN_DOMAINS: Partial<Record<Gtk.AccessibleProperty, number[]>> = {\n [Gtk.AccessibleProperty.AUTOCOMPLETE]: AUTOCOMPLETE_DOMAIN,\n [Gtk.AccessibleProperty.ORIENTATION]: ORIENTATION_DOMAIN,\n [Gtk.AccessibleProperty.SORT]: SORT_DOMAIN,\n};\n\nconst STRING_PROPERTIES: Set<Gtk.AccessibleProperty> = new Set<Gtk.AccessibleProperty>([\n Gtk.AccessibleProperty.DESCRIPTION,\n Gtk.AccessibleProperty.HELP_TEXT,\n Gtk.AccessibleProperty.KEY_SHORTCUTS,\n Gtk.AccessibleProperty.LABEL,\n Gtk.AccessibleProperty.PLACEHOLDER,\n Gtk.AccessibleProperty.ROLE_DESCRIPTION,\n Gtk.AccessibleProperty.VALUE_TEXT,\n]);\n\nconst BOOLEAN_PROPERTIES: Set<Gtk.AccessibleProperty> = new Set<Gtk.AccessibleProperty>([\n Gtk.AccessibleProperty.HAS_POPUP,\n Gtk.AccessibleProperty.MODAL,\n Gtk.AccessibleProperty.MULTI_LINE,\n Gtk.AccessibleProperty.MULTI_SELECTABLE,\n Gtk.AccessibleProperty.READ_ONLY,\n Gtk.AccessibleProperty.REQUIRED,\n]);\n\nconst NUMBER_PROPERTIES: Set<Gtk.AccessibleProperty> = new Set<Gtk.AccessibleProperty>([\n Gtk.AccessibleProperty.VALUE_MAX,\n Gtk.AccessibleProperty.VALUE_MIN,\n Gtk.AccessibleProperty.VALUE_NOW,\n]);\n\nconst OBJECT_ARG = { type: t.object(\"borrowed\") };\nconst INT_ARG = { type: t.int32 };\nconst DOUBLE_ARG = { type: t.float64 };\nconst STRING_ARG = { type: t.string(\"borrowed\") };\nconst CHECK_PROPERTY = \"gtk_test_accessible_check_property\";\nconst checkStateInt = buildAccessibleCheck(\"gtk_test_accessible_check_state\", [INT_ARG]) as CheckInt;\nconst checkPropertyInt = buildAccessibleCheck(CHECK_PROPERTY, [INT_ARG]) as CheckInt;\nconst checkPropertyDouble = buildAccessibleCheck(CHECK_PROPERTY, [DOUBLE_ARG]) as CheckDouble;\nconst checkPropertyString = buildAccessibleCheck(CHECK_PROPERTY, [STRING_ARG]) as CheckString;\n\nfunction buildAccessibleCheck(symbol: string, varargs: CheckArg[]): NativeCall {\n return t.fn(LIB, symbol, {\n args: [OBJECT_ARG, INT_ARG, ...varargs],\n returns: t.string(\"full\"),\n fixedArgCount: 2,\n });\n}\n\nconst buildRelationBinding = (targetCount: number): CheckRelation => {\n const targets = Array.from({ length: targetCount + 1 }, () => OBJECT_ARG);\n\n return buildAccessibleCheck(\"gtk_test_accessible_check_relation\", targets) as CheckRelation;\n};\n\nconst relationBindingFor = (targetCount: number): CheckRelation => {\n const cached = relationBindings.get(targetCount);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const built = buildRelationBinding(targetCount);\n relationBindings.set(targetCount, built);\n\n return built;\n};\n\nconst isRelationExactly = (\n accessible: Gtk.Accessible,\n relation: Gtk.AccessibleRelation,\n candidate: Gtk.Accessible,\n targetCount: number,\n): boolean => {\n const call = relationBindingFor(targetCount);\n const repeated = Array.from({ length: targetCount }, () => getHandle(candidate));\n\n return call(getHandle(accessible), relation, ...repeated, null) === null;\n};\n\nconst hasRelationSize = (\n accessible: Gtk.Accessible,\n relation: Gtk.AccessibleRelation,\n candidates: Gtk.Accessible[],\n size: number,\n): boolean => candidates.some((candidate) => isRelationExactly(accessible, relation, candidate, size));\n\nconst findRelationSize = (\n accessible: Gtk.Accessible,\n relation: Gtk.AccessibleRelation,\n candidates: Gtk.Accessible[],\n): number => {\n for (let size = 1; size <= MAX_RELATION_TARGETS; size += 1) {\n if (hasRelationSize(accessible, relation, candidates, size)) {\n return size;\n }\n }\n\n return 0;\n};\n\ntype RelationScan = { size: number; targets: Gtk.Accessible[] };\n\nconst unseen = function* <T>(items: Iterable<T>, seen: Set<T>): Generator<T> {\n for (const item of items) {\n if (seen.has(item)) {\n continue;\n }\n\n seen.add(item);\n yield item;\n }\n};\n\nconst possibleTargets = (relation: Gtk.AccessibleRelation, candidates: Iterable<Gtk.Accessible>): Gtk.Accessible[] => {\n const reverse = REVERSE_RELATIONS[relation];\n\n if (reverse === undefined) {\n return [...candidates];\n }\n\n return [...candidates].filter((candidate) => Gtk.testAccessibleHasRelation(candidate, reverse));\n};\n\nconst scanRelationTier = (\n accessible: Gtk.Accessible,\n relation: Gtk.AccessibleRelation,\n candidates: Gtk.Accessible[],\n scan: RelationScan,\n): RelationScan => {\n const size = scan.size > 0 ? scan.size : findRelationSize(accessible, relation, candidates);\n\n if (size === 0) {\n return scan;\n }\n\n const found = candidates.filter((candidate) => isRelationExactly(accessible, relation, candidate, size));\n\n return { size, targets: [...scan.targets, ...found] };\n};\n\nconst isRelationComplete = (scan: RelationScan): boolean => scan.size > 0 && scan.targets.length >= scan.size;\n\nconst readAccessibleRelation = (\n accessible: Gtk.Accessible,\n relation: Gtk.AccessibleRelation,\n tiers: Iterable<Gtk.Accessible>[],\n): Gtk.Accessible[] => {\n if (!Gtk.testAccessibleHasRelation(accessible, relation)) {\n return [];\n }\n\n const seen: Set<Gtk.Accessible> = new Set();\n let scan: RelationScan = { size: 0, targets: [] };\n\n for (const tier of tiers) {\n scan = scanRelationTier(accessible, relation, possibleTargets(relation, unseen(tier, seen)), scan);\n\n if (isRelationComplete(scan)) {\n break;\n }\n }\n\n return scan.targets;\n};\n\nconst memberOfDomain = (check: CheckInt, handle: unknown, attribute: number, domain: number[]): number | null => {\n for (const candidate of domain) {\n if (check(handle, attribute, candidate) === null) {\n return candidate;\n }\n }\n\n return null;\n};\n\nconst readAccessibleState = (accessible: Gtk.Accessible, state: Gtk.AccessibleState): number | null => {\n const domain = STATE_DOMAINS[state];\n\n if (domain === undefined || !Gtk.testAccessibleHasState(accessible, state)) {\n return null;\n }\n\n const member = memberOfDomain(checkStateInt, getHandle(accessible), state, domain);\n\n return member === UNDEFINED_VALUE ? null : member;\n};\n\nconst readAccessibleFlag = (accessible: Gtk.Accessible, state: Gtk.AccessibleState): boolean | null => {\n const value = readAccessibleState(accessible, state);\n\n return value === null ? null : value === 1;\n};\n\nconst readAccessibleString = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty): string | null => {\n if (!Gtk.testAccessibleHasProperty(accessible, property)) {\n return null;\n }\n\n return checkPropertyString(getHandle(accessible), property, null);\n};\n\nconst readAccessibleToken = (\n accessible: Gtk.Accessible,\n property: Gtk.AccessibleProperty,\n domain: number[],\n): number | null => {\n if (!Gtk.testAccessibleHasProperty(accessible, property)) {\n return null;\n }\n\n return memberOfDomain(checkPropertyInt, getHandle(accessible), property, domain);\n};\n\nconst readAccessibleBooleanProperty = (\n accessible: Gtk.Accessible,\n property: Gtk.AccessibleProperty,\n): boolean | null => {\n const member = readAccessibleToken(accessible, property, BOOLEAN_DOMAIN);\n\n return member === null ? null : member === 1;\n};\n\nconst readAgainstSentinel = (\n check: CheckDouble,\n sentinel: number,\n accessible: Gtk.Accessible,\n property: Gtk.AccessibleProperty,\n): number | null => {\n if (!Gtk.testAccessibleHasProperty(accessible, property)) {\n return null;\n }\n\n const reported = check(getHandle(accessible), property, sentinel);\n\n return reported === null ? sentinel : Number(reported);\n};\n\nconst readAccessibleInt = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty): number | null =>\n readAgainstSentinel(checkPropertyInt, INT_SENTINEL, accessible, property);\n\nconst readAccessibleNumber = (accessible: Gtk.Accessible, property: Gtk.AccessibleProperty): number | null =>\n readAgainstSentinel(checkPropertyDouble, NUMBER_SENTINEL, accessible, property);\n\nconst isAccessibleNumberProperty = (property: Gtk.AccessibleProperty): boolean => NUMBER_PROPERTIES.has(property);\n\nconst isAccessibleNumberMatch = (\n accessible: Gtk.Accessible,\n property: Gtk.AccessibleProperty,\n expected: number,\n): boolean =>\n Gtk.testAccessibleHasProperty(accessible, property) &&\n checkPropertyDouble(getHandle(accessible), property, expected) === null;\n\nconst tokenReaderFor =\n (domain: number[]): PropertyReader =>\n (accessible, property) =>\n readAccessibleToken(accessible, property, domain);\n\nconst propertyReaderFor = (property: Gtk.AccessibleProperty): PropertyReader => {\n const domain = TOKEN_DOMAINS[property];\n\n if (domain !== undefined) {\n return tokenReaderFor(domain);\n }\n\n if (STRING_PROPERTIES.has(property)) {\n return readAccessibleString;\n }\n\n if (BOOLEAN_PROPERTIES.has(property)) {\n return readAccessibleBooleanProperty;\n }\n\n if (NUMBER_PROPERTIES.has(property)) {\n return readAccessibleNumber;\n }\n\n return readAccessibleInt;\n};\n\nconst readAccessibleProperty = (\n accessible: Gtk.Accessible,\n property: Gtk.AccessibleProperty,\n): AccessibleAttributeValue | null => propertyReaderFor(property)(accessible, property);\n\nexport {\n ACCESSIBLE_NUMBER_TOLERANCE,\n isAccessibleNumberMatch,\n isAccessibleNumberProperty,\n readAccessibleBooleanProperty,\n readAccessibleFlag,\n readAccessibleInt,\n readAccessibleNumber,\n readAccessibleProperty,\n readAccessibleRelation,\n readAccessibleState,\n readAccessibleString,\n type AccessibleAttributeValue,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
package/dist/queries.js CHANGED
@@ -3,7 +3,7 @@ import { buildQueries } from "./build-queries.js";
3
3
  import { multipleFoundError, notFoundError } from "./errors.js";
4
4
  import { getDefaultNormalizer } from "./normalize.js";
5
5
  import { findAll, traverse } from "./traversal.js";
6
- import { getWidgetAccessibleName, getWidgetBusyState, getWidgetDescription, getWidgetDisplayValue, getWidgetExpandedState, getWidgetExternalLabelText, getWidgetLabelText, getWidgetLevel, getWidgetName, getWidgetOwnLabel, getWidgetPlaceholderText, getWidgetPressedState, getWidgetSelectedState, getWidgetValueText, isInaccessible, isWidgetChecked, isWidgetValueMatch, namingLabelText, } from "./widget-accessible-properties.js";
6
+ import { buildInaccessibilityCheck, getWidgetAccessibleName, getWidgetBusyState, getWidgetDescription, getWidgetDisplayValue, getWidgetExpandedState, getWidgetExternalLabelText, getWidgetLabelText, getWidgetLevel, getWidgetName, getWidgetOwnLabel, getWidgetPlaceholderText, getWidgetPressedState, getWidgetSelectedState, getWidgetValueText, isWidgetChecked, isWidgetValueMatch, namingLabelText, } from "./widget-accessible-properties.js";
7
7
  const roleQueries = nameQueryFamily("Role", queryAllByRole, buildQueries(queryAllByRole, (container, matches, role, options) => multipleFoundError(container, { queryType: "role", role, options }, matches), (container, role, options) => notFoundError(container, { queryType: "role", role, options })));
8
8
  const labelTextQueries = nameQueryFamily("LabelText", queryAllByLabelText, buildQueries(queryAllByLabelText, (container, matches, text) => multipleFoundError(container, { queryType: "labelText", text }, matches), (container, text) => notFoundError(container, { queryType: "labelText", text })));
9
9
  const textQueries = nameQueryFamily("Text", queryAllByText, buildQueries(queryAllByText, (container, matches, text) => multipleFoundError(container, { queryType: "text", text }, matches), (container, text) => notFoundError(container, { queryType: "text", text })));
@@ -185,14 +185,15 @@ function nameQueryFamily(suffix, queryAllBy, built) {
185
185
  * @returns Every matching widget, or an empty array when none match.
186
186
  */
187
187
  function queryAllByRole(container, role, options) {
188
+ const isInaccessible = buildInaccessibilityCheck();
188
189
  const matches = findAll(container, (widget) => {
189
190
  if (widget.getAccessibleRole() !== role) {
190
191
  return false;
191
192
  }
192
- if (!options?.hidden && isInaccessible(widget)) {
193
+ if (!isMatchingWidgetType(widget, options)) {
193
194
  return false;
194
195
  }
195
- if (!isMatchingWidgetType(widget, options)) {
196
+ if (!options?.hidden && isInaccessible(widget)) {
196
197
  return false;
197
198
  }
198
199
  return hasMatchingAccessibleOptions(widget, options);
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport type {\n ByRoleOptions,\n ByRoleValue,\n Matcher,\n MatcherOptions,\n NormalizerFn,\n QueryFamilies,\n} from \"./types.js\";\nimport { buildQueries, type BuiltQueries, type QueryAllBy } from \"./build-queries.js\";\nimport { multipleFoundError, notFoundError } from \"./errors.js\";\nimport { getDefaultNormalizer } from \"./normalize.js\";\nimport { type Container, findAll, traverse } from \"./traversal.js\";\nimport {\n getWidgetAccessibleName,\n getWidgetBusyState,\n getWidgetDescription,\n getWidgetDisplayValue,\n getWidgetExpandedState,\n getWidgetExternalLabelText,\n getWidgetLabelText,\n getWidgetLevel,\n getWidgetName,\n getWidgetOwnLabel,\n getWidgetPlaceholderText,\n getWidgetPressedState,\n getWidgetSelectedState,\n getWidgetValueText,\n isInaccessible,\n isWidgetChecked,\n isWidgetValueMatch,\n namingLabelText,\n type WidgetValueField,\n} from \"./widget-accessible-properties.js\";\n\n/** The built-in queries in their unbound form, each taking the container to search as its first argument. */\ntype BuiltinQueries = QueryFamilies<[container: Container]>;\n\nconst roleQueries = nameQueryFamily(\n \"Role\",\n queryAllByRole,\n buildQueries<[role: Gtk.AccessibleRole, options?: ByRoleOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByRole,\n (container, matches, role, options) =>\n multipleFoundError(container, { queryType: \"role\", role, options }, matches),\n (container, role, options) => notFoundError(container, { queryType: \"role\", role, options }),\n ),\n);\n\nconst labelTextQueries = nameQueryFamily(\n \"LabelText\",\n queryAllByLabelText,\n buildQueries<[text: Matcher, options?: MatcherOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByLabelText,\n (container, matches, text) => multipleFoundError(container, { queryType: \"labelText\", text }, matches),\n (container, text) => notFoundError(container, { queryType: \"labelText\", text }),\n ),\n);\n\nconst textQueries = nameQueryFamily(\n \"Text\",\n queryAllByText,\n buildQueries<[text: Matcher, options?: MatcherOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByText,\n (container, matches, text) => multipleFoundError(container, { queryType: \"text\", text }, matches),\n (container, text) => notFoundError(container, { queryType: \"text\", text }),\n ),\n);\n\nconst nameQueries = nameQueryFamily(\n \"Name\",\n queryAllByName,\n buildQueries<[name: Matcher, options?: MatcherOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByName,\n (container, matches, name) => multipleFoundError(container, { queryType: \"name\", name }, matches),\n (container, name) => notFoundError(container, { queryType: \"name\", name }),\n ),\n);\n\nconst placeholderTextQueries = nameQueryFamily(\n \"PlaceholderText\",\n queryAllByPlaceholderText,\n buildQueries<[text: Matcher, options?: MatcherOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByPlaceholderText,\n (container, matches, text) => multipleFoundError(container, { queryType: \"placeholderText\", text }, matches),\n (container, text) => notFoundError(container, { queryType: \"placeholderText\", text }),\n ),\n);\n\nconst displayValueQueries = nameQueryFamily(\n \"DisplayValue\",\n queryAllByDisplayValue,\n buildQueries<[value: Matcher, options?: MatcherOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByDisplayValue,\n (container, matches, value) => multipleFoundError(container, { queryType: \"displayValue\", value }, matches),\n (container, value) => notFoundError(container, { queryType: \"displayValue\", value }),\n ),\n);\n\nconst builtinQueries = {\n ...roleQueries,\n ...labelTextQueries,\n ...textQueries,\n ...nameQueries,\n ...placeholderTextQueries,\n ...displayValueQueries,\n} as BuiltinQueries;\n\n/** Queries one mapped widget by accessible role. */\nconst queryByRole: BuiltinQueries[\"queryByRole\"] = builtinQueries.queryByRole;\n/** Gets all mapped widgets with an accessible role. */\nconst getAllByRole: BuiltinQueries[\"getAllByRole\"] = builtinQueries.getAllByRole;\n/** Gets one mapped widget by accessible role. */\nconst getByRole: BuiltinQueries[\"getByRole\"] = builtinQueries.getByRole;\n/** Finds all mapped widgets with an accessible role. */\nconst findAllByRole: BuiltinQueries[\"findAllByRole\"] = builtinQueries.findAllByRole;\n/** Finds one mapped widget by accessible role. */\nconst findByRole: BuiltinQueries[\"findByRole\"] = builtinQueries.findByRole;\n/** Queries one mapped widget by label text. */\nconst queryByLabelText: BuiltinQueries[\"queryByLabelText\"] = builtinQueries.queryByLabelText;\n/** Gets all mapped widgets with label text. */\nconst getAllByLabelText: BuiltinQueries[\"getAllByLabelText\"] = builtinQueries.getAllByLabelText;\n/** Gets one mapped widget by label text. */\nconst getByLabelText: BuiltinQueries[\"getByLabelText\"] = builtinQueries.getByLabelText;\n/** Finds all mapped widgets with label text. */\nconst findAllByLabelText: BuiltinQueries[\"findAllByLabelText\"] = builtinQueries.findAllByLabelText;\n/** Finds one mapped widget by label text. */\nconst findByLabelText: BuiltinQueries[\"findByLabelText\"] = builtinQueries.findByLabelText;\n/** Queries one mapped widget by rendered text. */\nconst queryByText: BuiltinQueries[\"queryByText\"] = builtinQueries.queryByText;\n/** Gets all mapped widgets with rendered text. */\nconst getAllByText: BuiltinQueries[\"getAllByText\"] = builtinQueries.getAllByText;\n/** Gets one mapped widget by rendered text. */\nconst getByText: BuiltinQueries[\"getByText\"] = builtinQueries.getByText;\n/** Finds all mapped widgets with rendered text. */\nconst findAllByText: BuiltinQueries[\"findAllByText\"] = builtinQueries.findAllByText;\n/** Finds one mapped widget by rendered text. */\nconst findByText: BuiltinQueries[\"findByText\"] = builtinQueries.findByText;\n/** Queries one mapped widget by GTK name. */\nconst queryByName: BuiltinQueries[\"queryByName\"] = builtinQueries.queryByName;\n/** Gets all mapped widgets with a GTK name. */\nconst getAllByName: BuiltinQueries[\"getAllByName\"] = builtinQueries.getAllByName;\n/** Gets one mapped widget by GTK name. */\nconst getByName: BuiltinQueries[\"getByName\"] = builtinQueries.getByName;\n/** Finds all mapped widgets with a GTK name. */\nconst findAllByName: BuiltinQueries[\"findAllByName\"] = builtinQueries.findAllByName;\n/** Finds one mapped widget by GTK name. */\nconst findByName: BuiltinQueries[\"findByName\"] = builtinQueries.findByName;\n/** Queries one mapped widget by placeholder text. */\nconst queryByPlaceholderText: BuiltinQueries[\"queryByPlaceholderText\"] = builtinQueries.queryByPlaceholderText;\n/** Gets all mapped widgets with placeholder text. */\nconst getAllByPlaceholderText: BuiltinQueries[\"getAllByPlaceholderText\"] = builtinQueries.getAllByPlaceholderText;\n/** Gets one mapped widget by placeholder text. */\nconst getByPlaceholderText: BuiltinQueries[\"getByPlaceholderText\"] = builtinQueries.getByPlaceholderText;\n/** Finds all mapped widgets with placeholder text. */\nconst findAllByPlaceholderText: BuiltinQueries[\"findAllByPlaceholderText\"] = builtinQueries.findAllByPlaceholderText;\n/** Finds one mapped widget by placeholder text. */\nconst findByPlaceholderText: BuiltinQueries[\"findByPlaceholderText\"] = builtinQueries.findByPlaceholderText;\n/** Queries one mapped widget by display value. */\nconst queryByDisplayValue: BuiltinQueries[\"queryByDisplayValue\"] = builtinQueries.queryByDisplayValue;\n/** Gets all mapped widgets with a display value. */\nconst getAllByDisplayValue: BuiltinQueries[\"getAllByDisplayValue\"] = builtinQueries.getAllByDisplayValue;\n/** Gets one mapped widget by display value. */\nconst getByDisplayValue: BuiltinQueries[\"getByDisplayValue\"] = builtinQueries.getByDisplayValue;\n/** Finds all mapped widgets with a display value. */\nconst findAllByDisplayValue: BuiltinQueries[\"findAllByDisplayValue\"] = builtinQueries.findAllByDisplayValue;\n/** Finds one mapped widget by display value. */\nconst findByDisplayValue: BuiltinQueries[\"findByDisplayValue\"] = builtinQueries.findByDisplayValue;\n\nconst buildNormalizer = (options?: MatcherOptions): NormalizerFn => {\n const { normalizer, trim, collapseWhitespace } = options ?? {};\n\n if (!normalizer) {\n return getDefaultNormalizer({ trim, collapseWhitespace });\n }\n\n if (trim !== undefined || collapseWhitespace !== undefined) {\n throw new Error(\n \"trim and collapseWhitespace are not supported with a normalizer. \" +\n \"If you want to use the default trim and collapseWhitespace logic in your normalizer, \" +\n \"use \\\"getDefaultNormalizer({ trim, collapseWhitespace })\\\" and compose that into your normalizer\",\n );\n }\n\n return normalizer;\n};\n\nconst normalizeText = (text: string, options?: MatcherOptions): string => {\n const normalizer = buildNormalizer(options);\n\n return normalizer(text);\n};\n\nconst isTextMatch = (\n actual: string | null,\n expected: Matcher,\n widget: Gtk.Widget,\n options?: MatcherOptions,\n): boolean => {\n if (actual === null) {\n return false;\n }\n\n const normalizedActual = normalizeText(actual, options);\n\n if (typeof expected === \"function\") {\n return expected(normalizedActual, widget);\n }\n\n if (expected instanceof RegExp) {\n expected.lastIndex = 0;\n\n return expected.test(normalizedActual);\n }\n\n const normalizedExpected = normalizeText(String(expected), options);\n const isExact = options?.exact ?? true;\n\n return isExact\n ? normalizedActual === normalizedExpected\n : normalizedActual.toLowerCase().includes(normalizedExpected.toLowerCase());\n};\n\nconst hasMatchingAccessibleName = (widget: Gtk.Widget, options: ByRoleOptions): boolean => {\n if (options.name === undefined) {\n return true;\n }\n\n const text = getWidgetAccessibleName(widget);\n\n return isTextMatch(text, options.name, widget, options);\n};\n\nconst isNumericValueMatch = (widget: Gtk.Widget, field: WidgetValueField, expected: number | undefined): boolean =>\n expected === undefined || isWidgetValueMatch(widget, field, expected);\n\nconst hasMatchingAccessibleValue = (widget: Gtk.Widget, value: ByRoleValue, options: ByRoleOptions): boolean => {\n const numericChecks: [WidgetValueField, number | undefined][] = [\n [\"now\", value.now],\n [\"min\", value.min],\n [\"max\", value.max],\n ];\n\n for (const [field, expected] of numericChecks) {\n if (!isNumericValueMatch(widget, field, expected)) {\n return false;\n }\n }\n\n return value.text === undefined || isTextMatch(getWidgetValueText(widget), value.text, widget, options);\n};\n\nconst hasMatchingBooleanStates = (widget: Gtk.Widget, options: ByRoleOptions): boolean => {\n const stateChecks: [boolean | undefined, () => boolean | null][] = [\n [options.checked, () => isWidgetChecked(widget)],\n [options.pressed, () => getWidgetPressedState(widget)],\n [options.expanded, () => getWidgetExpandedState(widget)],\n [options.selected, () => getWidgetSelectedState(widget)],\n [options.busy, () => getWidgetBusyState(widget) ?? false],\n ];\n\n for (const [expected, getActual] of stateChecks) {\n if (expected !== undefined && getActual() !== expected) {\n return false;\n }\n }\n\n return true;\n};\n\nconst hasMatchingLevelState = (widget: Gtk.Widget, options: ByRoleOptions): boolean =>\n options.level === undefined || getWidgetLevel(widget) === options.level;\n\nconst hasMatchingDescriptionState = (widget: Gtk.Widget, options: ByRoleOptions): boolean =>\n options.description === undefined ||\n isTextMatch(getWidgetDescription(widget), options.description, widget, options);\n\nconst hasMatchingValueState = (widget: Gtk.Widget, options: ByRoleOptions): boolean =>\n options.value === undefined || hasMatchingAccessibleValue(widget, options.value, options);\n\nconst hasMatchingAccessibleStates = (widget: Gtk.Widget, options: ByRoleOptions): boolean =>\n hasMatchingBooleanStates(widget, options) &&\n hasMatchingLevelState(widget, options) &&\n hasMatchingDescriptionState(widget, options) &&\n hasMatchingValueState(widget, options);\n\nconst isMatchingWidgetType = <T extends Gtk.Accessible>(\n widget: Gtk.Widget,\n options?: MatcherOptions<T>,\n): widget is Gtk.Widget & T =>\n options?.as === undefined || widget instanceof options.as;\n\nconst hasMatchingAccessibleOptions = (widget: Gtk.Widget, options?: ByRoleOptions): boolean => {\n if (!options) {\n return true;\n }\n\n return (\n hasMatchingAccessibleName(widget, options) &&\n hasMatchingAccessibleStates(widget, options)\n );\n};\n\nfunction nameQueryFamily<Args extends unknown[], Element extends Gtk.Accessible>(\n suffix: string,\n queryAllBy: QueryAllBy<Args, Element>,\n built: BuiltQueries<Args, Element>,\n): Record<string, unknown> {\n const [queryBy, getAllBy, getBy, findAllBy, findBy] = built;\n\n return {\n [`queryBy${suffix}`]: queryBy,\n [`queryAllBy${suffix}`]: queryAllBy,\n [`getBy${suffix}`]: getBy,\n [`getAllBy${suffix}`]: getAllBy,\n [`findBy${suffix}`]: findBy,\n [`findAllBy${suffix}`]: findAllBy,\n };\n}\n\n/**\n * Finds every widget under the container whose accessible role matches `role` and that satisfies the given options.\n * Widgets that are not mapped are never matched, and widgets excluded from the accessibility tree are\n * skipped unless `options.hidden` is set.\n * @param container Widget subtree to search.\n * @param role Accessible role to match.\n * @param options Additional accessible name, state, and value constraints.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByRole<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n role: Gtk.AccessibleRole,\n options?: ByRoleOptions<T>,\n): T[] {\n const matches = findAll(container, (widget) => {\n if (widget.getAccessibleRole() !== role) {\n return false;\n }\n\n if (!options?.hidden && isInaccessible(widget)) {\n return false;\n }\n\n if (!isMatchingWidgetType(widget, options)) {\n return false;\n }\n\n return hasMatchingAccessibleOptions(widget, options);\n });\n\n return matches.filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\nconst collectMnemonicMatch = (\n widget: Gtk.Widget,\n text: Matcher,\n options: MatcherOptions | undefined,\n): Gtk.Widget | null => {\n if (!(widget instanceof Gtk.Label)) {\n return null;\n }\n\n const labelText = namingLabelText(widget);\n\n if (!labelText || !isTextMatch(labelText, text, widget, options)) {\n return null;\n }\n\n return widget.getMnemonicWidget();\n};\n\nconst labellingText = (widget: Gtk.Widget): string | null => {\n const ownLabel = widget.getAccessibleRole() === Gtk.AccessibleRole.LABEL ? null : getWidgetOwnLabel(widget);\n\n return ownLabel ?? getWidgetExternalLabelText(widget);\n};\n\nconst collectLabelMatches = (\n results: Set<Gtk.Widget>,\n widget: Gtk.Widget,\n text: Matcher,\n options: MatcherOptions | undefined,\n): void => {\n const mnemonicTarget = collectMnemonicMatch(widget, text, options);\n\n if (mnemonicTarget) {\n results.add(mnemonicTarget);\n }\n\n const labelText = labellingText(widget);\n\n if (labelText !== null && isTextMatch(labelText, text, widget, options)) {\n results.add(widget);\n }\n};\n\n/**\n * Finds every widget associated with a label whose text matches: a Gtk.Label mnemonic target, the\n * widget's own accessible label, or its labelled-by relation. Widgets that are not mapped are never matched.\n * @param container Widget subtree to search.\n * @param text Matcher for the label text.\n * @param options Text matching options.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByLabelText<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n text: Matcher,\n options?: MatcherOptions<T>,\n): T[] {\n const results: Set<Gtk.Widget> = new Set();\n\n for (const widget of traverse(container)) {\n collectLabelMatches(results, widget, text, options);\n }\n\n return [...results].filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\n/**\n * Finds every widget whose rendered text content matches. Widgets that are not mapped are never matched.\n * @param container Widget subtree to search.\n * @param text Matcher for the widget text.\n * @param options Text matching options.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByText<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n text: Matcher,\n options?: MatcherOptions<T>,\n): T[] {\n const matches = findAll(\n container,\n (widget) =>\n isMatchingWidgetType(widget, options) && isTextMatch(getWidgetLabelText(widget), text, widget, options),\n );\n\n return matches.filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\n/**\n * Finds every widget whose widget name matches. Widgets that are not mapped are never matched.\n * @param container Widget subtree to search.\n * @param name Matcher for the widget name.\n * @param options Text matching options.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByName<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n name: Matcher,\n options?: MatcherOptions<T>,\n): T[] {\n const matches = findAll(\n container,\n (widget) => isMatchingWidgetType(widget, options) && isTextMatch(getWidgetName(widget), name, widget, options),\n );\n\n return matches.filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\n/**\n * Finds every widget whose placeholder text matches. Widgets that are not mapped are never matched.\n * @param container Widget subtree to search.\n * @param text Matcher for the placeholder text.\n * @param options Text matching options.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByPlaceholderText<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n text: Matcher,\n options?: MatcherOptions<T>,\n): T[] {\n const matches = findAll(\n container,\n (widget) =>\n isMatchingWidgetType(widget, options) &&\n isTextMatch(getWidgetPlaceholderText(widget), text, widget, options),\n );\n\n return matches.filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\n/**\n * Finds every widget whose current display value matches. Widgets that are not mapped are never matched.\n * @param container Widget subtree to search.\n * @param value Matcher for the display value.\n * @param options Text matching options.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByDisplayValue<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n value: Matcher,\n options?: MatcherOptions<T>,\n): T[] {\n const matches = findAll(\n container,\n (widget) =>\n isMatchingWidgetType(widget, options) &&\n isTextMatch(getWidgetDisplayValue(widget), value, widget, options),\n );\n\n return matches.filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\nexport {\n builtinQueries,\n isMatchingWidgetType,\n isTextMatch,\n queryByRole,\n getAllByRole,\n getByRole,\n findAllByRole,\n findByRole,\n queryByLabelText,\n getAllByLabelText,\n getByLabelText,\n findAllByLabelText,\n findByLabelText,\n queryByText,\n getAllByText,\n getByText,\n findAllByText,\n findByText,\n queryByName,\n getAllByName,\n getByName,\n findAllByName,\n findByName,\n queryByPlaceholderText,\n getAllByPlaceholderText,\n getByPlaceholderText,\n findAllByPlaceholderText,\n findByPlaceholderText,\n queryByDisplayValue,\n getAllByDisplayValue,\n getByDisplayValue,\n findAllByDisplayValue,\n findByDisplayValue,\n queryAllByRole,\n queryAllByLabelText,\n queryAllByText,\n queryAllByName,\n queryAllByPlaceholderText,\n queryAllByDisplayValue,\n};\n"]}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport type {\n ByRoleOptions,\n ByRoleValue,\n Matcher,\n MatcherOptions,\n NormalizerFn,\n QueryFamilies,\n} from \"./types.js\";\nimport { buildQueries, type BuiltQueries, type QueryAllBy } from \"./build-queries.js\";\nimport { multipleFoundError, notFoundError } from \"./errors.js\";\nimport { getDefaultNormalizer } from \"./normalize.js\";\nimport { type Container, findAll, traverse } from \"./traversal.js\";\nimport {\n buildInaccessibilityCheck,\n getWidgetAccessibleName,\n getWidgetBusyState,\n getWidgetDescription,\n getWidgetDisplayValue,\n getWidgetExpandedState,\n getWidgetExternalLabelText,\n getWidgetLabelText,\n getWidgetLevel,\n getWidgetName,\n getWidgetOwnLabel,\n getWidgetPlaceholderText,\n getWidgetPressedState,\n getWidgetSelectedState,\n getWidgetValueText,\n isWidgetChecked,\n isWidgetValueMatch,\n namingLabelText,\n type WidgetValueField,\n} from \"./widget-accessible-properties.js\";\n\n/** The built-in queries in their unbound form, each taking the container to search as its first argument. */\ntype BuiltinQueries = QueryFamilies<[container: Container]>;\n\nconst roleQueries = nameQueryFamily(\n \"Role\",\n queryAllByRole,\n buildQueries<[role: Gtk.AccessibleRole, options?: ByRoleOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByRole,\n (container, matches, role, options) =>\n multipleFoundError(container, { queryType: \"role\", role, options }, matches),\n (container, role, options) => notFoundError(container, { queryType: \"role\", role, options }),\n ),\n);\n\nconst labelTextQueries = nameQueryFamily(\n \"LabelText\",\n queryAllByLabelText,\n buildQueries<[text: Matcher, options?: MatcherOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByLabelText,\n (container, matches, text) => multipleFoundError(container, { queryType: \"labelText\", text }, matches),\n (container, text) => notFoundError(container, { queryType: \"labelText\", text }),\n ),\n);\n\nconst textQueries = nameQueryFamily(\n \"Text\",\n queryAllByText,\n buildQueries<[text: Matcher, options?: MatcherOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByText,\n (container, matches, text) => multipleFoundError(container, { queryType: \"text\", text }, matches),\n (container, text) => notFoundError(container, { queryType: \"text\", text }),\n ),\n);\n\nconst nameQueries = nameQueryFamily(\n \"Name\",\n queryAllByName,\n buildQueries<[name: Matcher, options?: MatcherOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByName,\n (container, matches, name) => multipleFoundError(container, { queryType: \"name\", name }, matches),\n (container, name) => notFoundError(container, { queryType: \"name\", name }),\n ),\n);\n\nconst placeholderTextQueries = nameQueryFamily(\n \"PlaceholderText\",\n queryAllByPlaceholderText,\n buildQueries<[text: Matcher, options?: MatcherOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByPlaceholderText,\n (container, matches, text) => multipleFoundError(container, { queryType: \"placeholderText\", text }, matches),\n (container, text) => notFoundError(container, { queryType: \"placeholderText\", text }),\n ),\n);\n\nconst displayValueQueries = nameQueryFamily(\n \"DisplayValue\",\n queryAllByDisplayValue,\n buildQueries<[value: Matcher, options?: MatcherOptions<Gtk.Widget>], Gtk.Widget>(\n queryAllByDisplayValue,\n (container, matches, value) => multipleFoundError(container, { queryType: \"displayValue\", value }, matches),\n (container, value) => notFoundError(container, { queryType: \"displayValue\", value }),\n ),\n);\n\nconst builtinQueries = {\n ...roleQueries,\n ...labelTextQueries,\n ...textQueries,\n ...nameQueries,\n ...placeholderTextQueries,\n ...displayValueQueries,\n} as BuiltinQueries;\n\n/** Queries one mapped widget by accessible role. */\nconst queryByRole: BuiltinQueries[\"queryByRole\"] = builtinQueries.queryByRole;\n/** Gets all mapped widgets with an accessible role. */\nconst getAllByRole: BuiltinQueries[\"getAllByRole\"] = builtinQueries.getAllByRole;\n/** Gets one mapped widget by accessible role. */\nconst getByRole: BuiltinQueries[\"getByRole\"] = builtinQueries.getByRole;\n/** Finds all mapped widgets with an accessible role. */\nconst findAllByRole: BuiltinQueries[\"findAllByRole\"] = builtinQueries.findAllByRole;\n/** Finds one mapped widget by accessible role. */\nconst findByRole: BuiltinQueries[\"findByRole\"] = builtinQueries.findByRole;\n/** Queries one mapped widget by label text. */\nconst queryByLabelText: BuiltinQueries[\"queryByLabelText\"] = builtinQueries.queryByLabelText;\n/** Gets all mapped widgets with label text. */\nconst getAllByLabelText: BuiltinQueries[\"getAllByLabelText\"] = builtinQueries.getAllByLabelText;\n/** Gets one mapped widget by label text. */\nconst getByLabelText: BuiltinQueries[\"getByLabelText\"] = builtinQueries.getByLabelText;\n/** Finds all mapped widgets with label text. */\nconst findAllByLabelText: BuiltinQueries[\"findAllByLabelText\"] = builtinQueries.findAllByLabelText;\n/** Finds one mapped widget by label text. */\nconst findByLabelText: BuiltinQueries[\"findByLabelText\"] = builtinQueries.findByLabelText;\n/** Queries one mapped widget by rendered text. */\nconst queryByText: BuiltinQueries[\"queryByText\"] = builtinQueries.queryByText;\n/** Gets all mapped widgets with rendered text. */\nconst getAllByText: BuiltinQueries[\"getAllByText\"] = builtinQueries.getAllByText;\n/** Gets one mapped widget by rendered text. */\nconst getByText: BuiltinQueries[\"getByText\"] = builtinQueries.getByText;\n/** Finds all mapped widgets with rendered text. */\nconst findAllByText: BuiltinQueries[\"findAllByText\"] = builtinQueries.findAllByText;\n/** Finds one mapped widget by rendered text. */\nconst findByText: BuiltinQueries[\"findByText\"] = builtinQueries.findByText;\n/** Queries one mapped widget by GTK name. */\nconst queryByName: BuiltinQueries[\"queryByName\"] = builtinQueries.queryByName;\n/** Gets all mapped widgets with a GTK name. */\nconst getAllByName: BuiltinQueries[\"getAllByName\"] = builtinQueries.getAllByName;\n/** Gets one mapped widget by GTK name. */\nconst getByName: BuiltinQueries[\"getByName\"] = builtinQueries.getByName;\n/** Finds all mapped widgets with a GTK name. */\nconst findAllByName: BuiltinQueries[\"findAllByName\"] = builtinQueries.findAllByName;\n/** Finds one mapped widget by GTK name. */\nconst findByName: BuiltinQueries[\"findByName\"] = builtinQueries.findByName;\n/** Queries one mapped widget by placeholder text. */\nconst queryByPlaceholderText: BuiltinQueries[\"queryByPlaceholderText\"] = builtinQueries.queryByPlaceholderText;\n/** Gets all mapped widgets with placeholder text. */\nconst getAllByPlaceholderText: BuiltinQueries[\"getAllByPlaceholderText\"] = builtinQueries.getAllByPlaceholderText;\n/** Gets one mapped widget by placeholder text. */\nconst getByPlaceholderText: BuiltinQueries[\"getByPlaceholderText\"] = builtinQueries.getByPlaceholderText;\n/** Finds all mapped widgets with placeholder text. */\nconst findAllByPlaceholderText: BuiltinQueries[\"findAllByPlaceholderText\"] = builtinQueries.findAllByPlaceholderText;\n/** Finds one mapped widget by placeholder text. */\nconst findByPlaceholderText: BuiltinQueries[\"findByPlaceholderText\"] = builtinQueries.findByPlaceholderText;\n/** Queries one mapped widget by display value. */\nconst queryByDisplayValue: BuiltinQueries[\"queryByDisplayValue\"] = builtinQueries.queryByDisplayValue;\n/** Gets all mapped widgets with a display value. */\nconst getAllByDisplayValue: BuiltinQueries[\"getAllByDisplayValue\"] = builtinQueries.getAllByDisplayValue;\n/** Gets one mapped widget by display value. */\nconst getByDisplayValue: BuiltinQueries[\"getByDisplayValue\"] = builtinQueries.getByDisplayValue;\n/** Finds all mapped widgets with a display value. */\nconst findAllByDisplayValue: BuiltinQueries[\"findAllByDisplayValue\"] = builtinQueries.findAllByDisplayValue;\n/** Finds one mapped widget by display value. */\nconst findByDisplayValue: BuiltinQueries[\"findByDisplayValue\"] = builtinQueries.findByDisplayValue;\n\nconst buildNormalizer = (options?: MatcherOptions): NormalizerFn => {\n const { normalizer, trim, collapseWhitespace } = options ?? {};\n\n if (!normalizer) {\n return getDefaultNormalizer({ trim, collapseWhitespace });\n }\n\n if (trim !== undefined || collapseWhitespace !== undefined) {\n throw new Error(\n \"trim and collapseWhitespace are not supported with a normalizer. \" +\n \"If you want to use the default trim and collapseWhitespace logic in your normalizer, \" +\n \"use \\\"getDefaultNormalizer({ trim, collapseWhitespace })\\\" and compose that into your normalizer\",\n );\n }\n\n return normalizer;\n};\n\nconst normalizeText = (text: string, options?: MatcherOptions): string => {\n const normalizer = buildNormalizer(options);\n\n return normalizer(text);\n};\n\nconst isTextMatch = (\n actual: string | null,\n expected: Matcher,\n widget: Gtk.Widget,\n options?: MatcherOptions,\n): boolean => {\n if (actual === null) {\n return false;\n }\n\n const normalizedActual = normalizeText(actual, options);\n\n if (typeof expected === \"function\") {\n return expected(normalizedActual, widget);\n }\n\n if (expected instanceof RegExp) {\n expected.lastIndex = 0;\n\n return expected.test(normalizedActual);\n }\n\n const normalizedExpected = normalizeText(String(expected), options);\n const isExact = options?.exact ?? true;\n\n return isExact\n ? normalizedActual === normalizedExpected\n : normalizedActual.toLowerCase().includes(normalizedExpected.toLowerCase());\n};\n\nconst hasMatchingAccessibleName = (widget: Gtk.Widget, options: ByRoleOptions): boolean => {\n if (options.name === undefined) {\n return true;\n }\n\n const text = getWidgetAccessibleName(widget);\n\n return isTextMatch(text, options.name, widget, options);\n};\n\nconst isNumericValueMatch = (widget: Gtk.Widget, field: WidgetValueField, expected: number | undefined): boolean =>\n expected === undefined || isWidgetValueMatch(widget, field, expected);\n\nconst hasMatchingAccessibleValue = (widget: Gtk.Widget, value: ByRoleValue, options: ByRoleOptions): boolean => {\n const numericChecks: [WidgetValueField, number | undefined][] = [\n [\"now\", value.now],\n [\"min\", value.min],\n [\"max\", value.max],\n ];\n\n for (const [field, expected] of numericChecks) {\n if (!isNumericValueMatch(widget, field, expected)) {\n return false;\n }\n }\n\n return value.text === undefined || isTextMatch(getWidgetValueText(widget), value.text, widget, options);\n};\n\nconst hasMatchingBooleanStates = (widget: Gtk.Widget, options: ByRoleOptions): boolean => {\n const stateChecks: [boolean | undefined, () => boolean | null][] = [\n [options.checked, () => isWidgetChecked(widget)],\n [options.pressed, () => getWidgetPressedState(widget)],\n [options.expanded, () => getWidgetExpandedState(widget)],\n [options.selected, () => getWidgetSelectedState(widget)],\n [options.busy, () => getWidgetBusyState(widget) ?? false],\n ];\n\n for (const [expected, getActual] of stateChecks) {\n if (expected !== undefined && getActual() !== expected) {\n return false;\n }\n }\n\n return true;\n};\n\nconst hasMatchingLevelState = (widget: Gtk.Widget, options: ByRoleOptions): boolean =>\n options.level === undefined || getWidgetLevel(widget) === options.level;\n\nconst hasMatchingDescriptionState = (widget: Gtk.Widget, options: ByRoleOptions): boolean =>\n options.description === undefined ||\n isTextMatch(getWidgetDescription(widget), options.description, widget, options);\n\nconst hasMatchingValueState = (widget: Gtk.Widget, options: ByRoleOptions): boolean =>\n options.value === undefined || hasMatchingAccessibleValue(widget, options.value, options);\n\nconst hasMatchingAccessibleStates = (widget: Gtk.Widget, options: ByRoleOptions): boolean =>\n hasMatchingBooleanStates(widget, options) &&\n hasMatchingLevelState(widget, options) &&\n hasMatchingDescriptionState(widget, options) &&\n hasMatchingValueState(widget, options);\n\nconst isMatchingWidgetType = <T extends Gtk.Accessible>(\n widget: Gtk.Widget,\n options?: MatcherOptions<T>,\n): widget is Gtk.Widget & T =>\n options?.as === undefined || widget instanceof options.as;\n\nconst hasMatchingAccessibleOptions = (widget: Gtk.Widget, options?: ByRoleOptions): boolean => {\n if (!options) {\n return true;\n }\n\n return (\n hasMatchingAccessibleName(widget, options) &&\n hasMatchingAccessibleStates(widget, options)\n );\n};\n\nfunction nameQueryFamily<Args extends unknown[], Element extends Gtk.Accessible>(\n suffix: string,\n queryAllBy: QueryAllBy<Args, Element>,\n built: BuiltQueries<Args, Element>,\n): Record<string, unknown> {\n const [queryBy, getAllBy, getBy, findAllBy, findBy] = built;\n\n return {\n [`queryBy${suffix}`]: queryBy,\n [`queryAllBy${suffix}`]: queryAllBy,\n [`getBy${suffix}`]: getBy,\n [`getAllBy${suffix}`]: getAllBy,\n [`findBy${suffix}`]: findBy,\n [`findAllBy${suffix}`]: findAllBy,\n };\n}\n\n/**\n * Finds every widget under the container whose accessible role matches `role` and that satisfies the given options.\n * Widgets that are not mapped are never matched, and widgets excluded from the accessibility tree are\n * skipped unless `options.hidden` is set.\n * @param container Widget subtree to search.\n * @param role Accessible role to match.\n * @param options Additional accessible name, state, and value constraints.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByRole<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n role: Gtk.AccessibleRole,\n options?: ByRoleOptions<T>,\n): T[] {\n const isInaccessible = buildInaccessibilityCheck();\n\n const matches = findAll(container, (widget) => {\n if (widget.getAccessibleRole() !== role) {\n return false;\n }\n\n if (!isMatchingWidgetType(widget, options)) {\n return false;\n }\n\n if (!options?.hidden && isInaccessible(widget)) {\n return false;\n }\n\n return hasMatchingAccessibleOptions(widget, options);\n });\n\n return matches.filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\nconst collectMnemonicMatch = (\n widget: Gtk.Widget,\n text: Matcher,\n options: MatcherOptions | undefined,\n): Gtk.Widget | null => {\n if (!(widget instanceof Gtk.Label)) {\n return null;\n }\n\n const labelText = namingLabelText(widget);\n\n if (!labelText || !isTextMatch(labelText, text, widget, options)) {\n return null;\n }\n\n return widget.getMnemonicWidget();\n};\n\nconst labellingText = (widget: Gtk.Widget): string | null => {\n const ownLabel = widget.getAccessibleRole() === Gtk.AccessibleRole.LABEL ? null : getWidgetOwnLabel(widget);\n\n return ownLabel ?? getWidgetExternalLabelText(widget);\n};\n\nconst collectLabelMatches = (\n results: Set<Gtk.Widget>,\n widget: Gtk.Widget,\n text: Matcher,\n options: MatcherOptions | undefined,\n): void => {\n const mnemonicTarget = collectMnemonicMatch(widget, text, options);\n\n if (mnemonicTarget) {\n results.add(mnemonicTarget);\n }\n\n const labelText = labellingText(widget);\n\n if (labelText !== null && isTextMatch(labelText, text, widget, options)) {\n results.add(widget);\n }\n};\n\n/**\n * Finds every widget associated with a label whose text matches: a Gtk.Label mnemonic target, the\n * widget's own accessible label, or its labelled-by relation. Widgets that are not mapped are never matched.\n * @param container Widget subtree to search.\n * @param text Matcher for the label text.\n * @param options Text matching options.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByLabelText<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n text: Matcher,\n options?: MatcherOptions<T>,\n): T[] {\n const results: Set<Gtk.Widget> = new Set();\n\n for (const widget of traverse(container)) {\n collectLabelMatches(results, widget, text, options);\n }\n\n return [...results].filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\n/**\n * Finds every widget whose rendered text content matches. Widgets that are not mapped are never matched.\n * @param container Widget subtree to search.\n * @param text Matcher for the widget text.\n * @param options Text matching options.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByText<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n text: Matcher,\n options?: MatcherOptions<T>,\n): T[] {\n const matches = findAll(\n container,\n (widget) =>\n isMatchingWidgetType(widget, options) && isTextMatch(getWidgetLabelText(widget), text, widget, options),\n );\n\n return matches.filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\n/**\n * Finds every widget whose widget name matches. Widgets that are not mapped are never matched.\n * @param container Widget subtree to search.\n * @param name Matcher for the widget name.\n * @param options Text matching options.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByName<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n name: Matcher,\n options?: MatcherOptions<T>,\n): T[] {\n const matches = findAll(\n container,\n (widget) => isMatchingWidgetType(widget, options) && isTextMatch(getWidgetName(widget), name, widget, options),\n );\n\n return matches.filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\n/**\n * Finds every widget whose placeholder text matches. Widgets that are not mapped are never matched.\n * @param container Widget subtree to search.\n * @param text Matcher for the placeholder text.\n * @param options Text matching options.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByPlaceholderText<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n text: Matcher,\n options?: MatcherOptions<T>,\n): T[] {\n const matches = findAll(\n container,\n (widget) =>\n isMatchingWidgetType(widget, options) &&\n isTextMatch(getWidgetPlaceholderText(widget), text, widget, options),\n );\n\n return matches.filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\n/**\n * Finds every widget whose current display value matches. Widgets that are not mapped are never matched.\n * @param container Widget subtree to search.\n * @param value Matcher for the display value.\n * @param options Text matching options.\n * @returns Every matching widget, or an empty array when none match.\n */\nfunction queryAllByDisplayValue<T extends Gtk.Accessible = Gtk.Widget>(\n container: Container,\n value: Matcher,\n options?: MatcherOptions<T>,\n): T[] {\n const matches = findAll(\n container,\n (widget) =>\n isMatchingWidgetType(widget, options) &&\n isTextMatch(getWidgetDisplayValue(widget), value, widget, options),\n );\n\n return matches.filter((widget): widget is Gtk.Widget & T => isMatchingWidgetType(widget, options));\n}\n\nexport {\n builtinQueries,\n isMatchingWidgetType,\n isTextMatch,\n queryByRole,\n getAllByRole,\n getByRole,\n findAllByRole,\n findByRole,\n queryByLabelText,\n getAllByLabelText,\n getByLabelText,\n findAllByLabelText,\n findByLabelText,\n queryByText,\n getAllByText,\n getByText,\n findAllByText,\n findByText,\n queryByName,\n getAllByName,\n getByName,\n findAllByName,\n findByName,\n queryByPlaceholderText,\n getAllByPlaceholderText,\n getByPlaceholderText,\n findAllByPlaceholderText,\n findByPlaceholderText,\n queryByDisplayValue,\n getAllByDisplayValue,\n getByDisplayValue,\n findAllByDisplayValue,\n findByDisplayValue,\n queryAllByRole,\n queryAllByLabelText,\n queryAllByText,\n queryAllByName,\n queryAllByPlaceholderText,\n queryAllByDisplayValue,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../src/screenshot.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAGpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA4RtE;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,UAAU,GAAU,QAAQ,GAAG,CAAC,UAAU,EAAE,UAAU,iBAAiB,KAAG,OAAO,CAAC,gBAAgB,CAmBvG,CAAC;AAYF,QAAA,MAAM,aAAa,GAAU,UAAU,iBAAiB,KAAG,OAAO,CAAC,gBAAgB,CAC5C,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../src/screenshot.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAGpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAqUtE;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,UAAU,GAAU,QAAQ,GAAG,CAAC,UAAU,EAAE,UAAU,iBAAiB,KAAG,OAAO,CAAC,gBAAgB,CAmBvG,CAAC;AAYF,QAAA,MAAM,aAAa,GAAU,UAAU,iBAAiB,KAAG,OAAO,CAAC,gBAAgB,CAC5C,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC"}
@@ -109,13 +109,31 @@ const getChildrenNode = (widget, scale) => {
109
109
  appendPopovers(snapshot, widget);
110
110
  return snapshot.toNode();
111
111
  };
112
+ const addWindowBackground = (widget, node, { scale, width, height }) => {
113
+ if (!(widget instanceof Gtk.Window)) {
114
+ return node;
115
+ }
116
+ const snapshot = new Gtk.Snapshot();
117
+ const backgroundSnapshot = snapshot;
118
+ const styledWidget = widget;
119
+ snapshot.save();
120
+ snapshot.scale(scale, scale);
121
+ backgroundSnapshot.renderBackground(styledWidget.getStyleContext(), 0, 0, width, height);
122
+ snapshot.restore();
123
+ snapshot.appendNode(node);
124
+ return snapshot.toNode() ?? node;
125
+ };
126
+ const getFallbackNode = (widget, size) => {
127
+ const content = getChildrenNode(widget, size.scale);
128
+ return content === null ? null : addWindowBackground(widget, content, size);
129
+ };
112
130
  const getRenderNode = (widget, scale, width, height) => {
113
- const presented = getPaintableNode(widget, scale, width, height);
114
- if (presented) {
115
- return presented;
131
+ const content = getPaintableNode(widget, scale, width, height);
132
+ if (content) {
133
+ return content;
116
134
  }
117
135
  allocateRoot(widget);
118
- return getPaintableNode(widget, scale, width, height) ?? getChildrenNode(widget, scale);
136
+ return getPaintableNode(widget, scale, width, height) ?? getFallbackNode(widget, { scale, width, height });
119
137
  };
120
138
  const renderToPng = (widget, node, width, height) => {
121
139
  const renderer = new Gsk.CairoRenderer();