@gtkx/testing 0.21.0 → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -34
- package/dist/act.d.ts +19 -0
- package/dist/act.d.ts.map +1 -0
- package/dist/act.js +48 -0
- package/dist/act.js.map +1 -0
- package/dist/bound-queries.d.ts +32 -0
- package/dist/bound-queries.d.ts.map +1 -0
- package/dist/bound-queries.js +2 -0
- package/dist/bound-queries.js.map +1 -0
- package/dist/build-queries.d.ts +16 -0
- package/dist/build-queries.d.ts.map +1 -0
- package/dist/build-queries.js +103 -0
- package/dist/build-queries.js.map +1 -0
- package/dist/cleanup-registry.d.ts +4 -0
- package/dist/cleanup-registry.d.ts.map +1 -0
- package/dist/cleanup-registry.js +11 -0
- package/dist/cleanup-registry.js.map +1 -0
- package/dist/config.d.ts +18 -51
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -40
- package/dist/config.js.map +1 -1
- package/dist/editable.d.ts +7 -0
- package/dist/editable.d.ts.map +1 -0
- package/dist/editable.js +24 -0
- package/dist/editable.js.map +1 -0
- package/dist/errors.d.ts +29 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +119 -0
- package/dist/errors.js.map +1 -0
- package/dist/fire-event.d.ts +7 -25
- package/dist/fire-event.d.ts.map +1 -1
- package/dist/fire-event.js +9 -29
- package/dist/fire-event.js.map +1 -1
- package/dist/frame-sync.d.ts +3 -0
- package/dist/frame-sync.d.ts.map +1 -0
- package/dist/frame-sync.js +30 -0
- package/dist/frame-sync.js.map +1 -0
- package/dist/index.d.ts +16 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/matchers.d.ts +55 -0
- package/dist/matchers.d.ts.map +1 -0
- package/dist/matchers.js +103 -0
- package/dist/matchers.js.map +1 -0
- package/dist/pretty-widget.d.ts +21 -25
- package/dist/pretty-widget.d.ts.map +1 -1
- package/dist/pretty-widget.js +69 -115
- package/dist/pretty-widget.js.map +1 -1
- package/dist/queries.d.ts +130 -177
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +212 -325
- package/dist/queries.js.map +1 -1
- package/dist/register-test-hooks.d.ts +2 -0
- package/dist/register-test-hooks.d.ts.map +1 -0
- package/dist/register-test-hooks.js +15 -0
- package/dist/register-test-hooks.js.map +1 -0
- package/dist/render-hook.d.ts +14 -35
- package/dist/render-hook.d.ts.map +1 -1
- package/dist/render-hook.js +8 -45
- package/dist/render-hook.js.map +1 -1
- package/dist/render.d.ts +11 -41
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +129 -118
- package/dist/render.js.map +1 -1
- package/dist/role-helpers.d.ts +16 -51
- package/dist/role-helpers.d.ts.map +1 -1
- package/dist/role-helpers.js +39 -58
- package/dist/role-helpers.js.map +1 -1
- package/dist/screen.d.ts +6 -63
- package/dist/screen.d.ts.map +1 -1
- package/dist/screen.js +21 -109
- package/dist/screen.js.map +1 -1
- package/dist/screenshot.d.ts +20 -23
- package/dist/screenshot.d.ts.map +1 -1
- package/dist/screenshot.js +89 -48
- package/dist/screenshot.js.map +1 -1
- package/dist/suggestions.d.ts +22 -0
- package/dist/suggestions.d.ts.map +1 -0
- package/dist/suggestions.js +56 -0
- package/dist/suggestions.js.map +1 -0
- package/dist/traversal.d.ts +10 -8
- package/dist/traversal.d.ts.map +1 -1
- package/dist/traversal.js +28 -13
- package/dist/traversal.js.map +1 -1
- package/dist/types.d.ts +103 -172
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/user-event/adjustment.d.ts +8 -0
- package/dist/user-event/adjustment.d.ts.map +1 -0
- package/dist/user-event/adjustment.js +33 -0
- package/dist/user-event/adjustment.js.map +1 -0
- package/dist/user-event/click.d.ts +7 -0
- package/dist/user-event/click.d.ts.map +1 -0
- package/dist/user-event/click.js +65 -0
- package/dist/user-event/click.js.map +1 -0
- package/dist/user-event/controller.d.ts +7 -0
- package/dist/user-event/controller.d.ts.map +1 -0
- package/dist/user-event/controller.js +28 -0
- package/dist/user-event/controller.js.map +1 -0
- package/dist/user-event/dispatch.d.ts +7 -0
- package/dist/user-event/dispatch.d.ts.map +1 -0
- package/dist/user-event/dispatch.js +10 -0
- package/dist/user-event/dispatch.js.map +1 -0
- package/dist/user-event/event-wrapper.d.ts +3 -0
- package/dist/user-event/event-wrapper.d.ts.map +1 -0
- package/dist/user-event/event-wrapper.js +48 -0
- package/dist/user-event/event-wrapper.js.map +1 -0
- package/dist/user-event/gesture.d.ts +31 -0
- package/dist/user-event/gesture.d.ts.map +1 -0
- package/dist/user-event/gesture.js +105 -0
- package/dist/user-event/gesture.js.map +1 -0
- package/dist/user-event/index.d.ts +44 -0
- package/dist/user-event/index.d.ts.map +1 -0
- package/dist/user-event/index.js +38 -0
- package/dist/user-event/index.js.map +1 -0
- package/dist/user-event/keyboard.d.ts +9 -0
- package/dist/user-event/keyboard.d.ts.map +1 -0
- package/dist/user-event/keyboard.js +173 -0
- package/dist/user-event/keyboard.js.map +1 -0
- package/dist/user-event/pointer.d.ts +6 -0
- package/dist/user-event/pointer.d.ts.map +1 -0
- package/dist/user-event/pointer.js +27 -0
- package/dist/user-event/pointer.js.map +1 -0
- package/dist/user-event/selection.d.ts +4 -0
- package/dist/user-event/selection.d.ts.map +1 -0
- package/dist/user-event/selection.js +106 -0
- package/dist/user-event/selection.js.map +1 -0
- package/dist/user-event/state.d.ts +6 -0
- package/dist/user-event/state.d.ts.map +1 -0
- package/dist/user-event/state.js +2 -0
- package/dist/user-event/state.js.map +1 -0
- package/dist/user-event/text.d.ts +17 -0
- package/dist/user-event/text.d.ts.map +1 -0
- package/dist/user-event/text.js +107 -0
- package/dist/user-event/text.js.map +1 -0
- package/dist/wait-for.d.ts +13 -33
- package/dist/wait-for.d.ts.map +1 -1
- package/dist/wait-for.js +62 -73
- package/dist/wait-for.js.map +1 -1
- package/dist/widget-accessible-properties.d.ts +33 -0
- package/dist/widget-accessible-properties.d.ts.map +1 -0
- package/dist/widget-accessible-properties.js +215 -0
- package/dist/widget-accessible-properties.js.map +1 -0
- package/dist/within.d.ts +9 -26
- package/dist/within.d.ts.map +1 -1
- package/dist/within.js +15 -25
- package/dist/within.js.map +1 -1
- package/package.json +21 -12
- package/src/act.ts +68 -0
- package/src/bound-queries.ts +36 -0
- package/src/build-queries.ts +185 -0
- package/src/cleanup-registry.ts +14 -0
- package/src/config.ts +28 -59
- package/src/editable.ts +30 -0
- package/src/errors.ts +130 -0
- package/src/fire-event.ts +11 -38
- package/src/frame-sync.ts +34 -0
- package/src/index.ts +56 -14
- package/src/matchers.ts +200 -0
- package/src/pretty-widget.ts +99 -138
- package/src/queries.ts +320 -420
- package/src/register-test-hooks.ts +16 -0
- package/src/render-hook.tsx +31 -44
- package/src/render.tsx +161 -149
- package/src/role-helpers.ts +47 -67
- package/src/screen.ts +21 -114
- package/src/screenshot.ts +104 -55
- package/src/suggestions.ts +87 -0
- package/src/traversal.ts +32 -18
- package/src/types.ts +115 -176
- package/src/user-event/adjustment.ts +49 -0
- package/src/user-event/click.ts +70 -0
- package/src/user-event/controller.ts +44 -0
- package/src/user-event/dispatch.ts +23 -0
- package/src/user-event/event-wrapper.ts +54 -0
- package/src/user-event/gesture.ts +154 -0
- package/src/user-event/index.ts +74 -0
- package/src/user-event/keyboard.ts +204 -0
- package/src/user-event/pointer.ts +34 -0
- package/src/user-event/selection.ts +122 -0
- package/src/user-event/state.ts +6 -0
- package/src/user-event/text.ts +137 -0
- package/src/wait-for.ts +79 -81
- package/src/widget-accessible-properties.ts +244 -0
- package/src/within.ts +26 -27
- package/dist/bind-queries.d.ts +0 -14
- package/dist/bind-queries.d.ts.map +0 -1
- package/dist/bind-queries.js +0 -29
- package/dist/bind-queries.js.map +0 -1
- package/dist/error-builder.d.ts +0 -28
- package/dist/error-builder.d.ts.map +0 -1
- package/dist/error-builder.js +0 -81
- package/dist/error-builder.js.map +0 -1
- package/dist/timing.d.ts +0 -18
- package/dist/timing.d.ts.map +0 -1
- package/dist/timing.js +0 -18
- package/dist/timing.js.map +0 -1
- package/dist/user-event.d.ts +0 -138
- package/dist/user-event.d.ts.map +0 -1
- package/dist/user-event.js +0 -411
- package/dist/user-event.js.map +0 -1
- package/dist/widget-text.d.ts +0 -69
- package/dist/widget-text.d.ts.map +0 -1
- package/dist/widget-text.js +0 -177
- package/dist/widget-text.js.map +0 -1
- package/dist/widget.d.ts +0 -3
- package/dist/widget.d.ts.map +0 -1
- package/dist/widget.js +0 -13
- package/dist/widget.js.map +0 -1
- package/src/bind-queries.ts +0 -52
- package/src/error-builder.ts +0 -102
- package/src/timing.ts +0 -17
- package/src/user-event.ts +0 -492
- package/src/widget-text.ts +0 -202
- package/src/widget.ts +0 -15
package/dist/user-event.js
DELETED
|
@@ -1,411 +0,0 @@
|
|
|
1
|
-
import * as Gdk from "@gtkx/ffi/gdk";
|
|
2
|
-
import { signalEmitv, signalLookup, typeFromName, Value } from "@gtkx/ffi/gobject";
|
|
3
|
-
import * as Gtk from "@gtkx/ffi/gtk";
|
|
4
|
-
import { fireEvent } from "./fire-event.js";
|
|
5
|
-
import { tick } from "./timing.js";
|
|
6
|
-
import { isEditable } from "./widget.js";
|
|
7
|
-
const click = async (element) => {
|
|
8
|
-
element.activate();
|
|
9
|
-
await tick();
|
|
10
|
-
};
|
|
11
|
-
const emitClickSequence = async (element, nPress) => {
|
|
12
|
-
const controller = getOrCreateController(element, Gtk.GestureClick);
|
|
13
|
-
for (let i = 1; i <= nPress; i++) {
|
|
14
|
-
const args = [
|
|
15
|
-
Value.newFromObject(controller),
|
|
16
|
-
Value.newFromInt(i),
|
|
17
|
-
Value.newFromDouble(0),
|
|
18
|
-
Value.newFromDouble(0),
|
|
19
|
-
];
|
|
20
|
-
signalEmitv(args, getSignalId(controller, "pressed"), 0);
|
|
21
|
-
signalEmitv(args, getSignalId(controller, "released"), 0);
|
|
22
|
-
}
|
|
23
|
-
await tick();
|
|
24
|
-
};
|
|
25
|
-
const dblClick = async (element) => {
|
|
26
|
-
await emitClickSequence(element, 2);
|
|
27
|
-
};
|
|
28
|
-
const tripleClick = async (element) => {
|
|
29
|
-
await emitClickSequence(element, 3);
|
|
30
|
-
};
|
|
31
|
-
const tab = async (element, options) => {
|
|
32
|
-
const direction = options?.shift ? Gtk.DirectionType.TAB_BACKWARD : Gtk.DirectionType.TAB_FORWARD;
|
|
33
|
-
const root = element.getRoot();
|
|
34
|
-
if (root && root instanceof Gtk.Widget) {
|
|
35
|
-
root.childFocus(direction);
|
|
36
|
-
}
|
|
37
|
-
await tick();
|
|
38
|
-
};
|
|
39
|
-
const type = async (element, text) => {
|
|
40
|
-
if (!isEditable(element)) {
|
|
41
|
-
throw new Error("Cannot type into element: expected editable widget (TEXT_BOX, SEARCH_BOX, or SPIN_BUTTON)");
|
|
42
|
-
}
|
|
43
|
-
const currentText = element.getText();
|
|
44
|
-
element.setText(currentText + text);
|
|
45
|
-
await tick();
|
|
46
|
-
};
|
|
47
|
-
const clear = async (element) => {
|
|
48
|
-
if (!isEditable(element)) {
|
|
49
|
-
throw new Error("Cannot clear element: expected editable widget (TEXT_BOX, SEARCH_BOX, or SPIN_BUTTON)");
|
|
50
|
-
}
|
|
51
|
-
element.setText("");
|
|
52
|
-
await tick();
|
|
53
|
-
};
|
|
54
|
-
const SELECTABLE_ROLES = new Set([Gtk.AccessibleRole.COMBO_BOX, Gtk.AccessibleRole.LIST]);
|
|
55
|
-
const isSelectable = (widget) => {
|
|
56
|
-
if (!widget)
|
|
57
|
-
return false;
|
|
58
|
-
return SELECTABLE_ROLES.has(widget.getAccessibleRole());
|
|
59
|
-
};
|
|
60
|
-
const selectListViewItems = (selectionModel, positions, exclusive) => {
|
|
61
|
-
if (positions.length === 0) {
|
|
62
|
-
selectionModel.unselectRange(0, selectionModel.getNItems());
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
if (exclusive && positions.length === 1) {
|
|
66
|
-
selectionModel.selectItem(positions[0], true);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
const nItems = selectionModel.getNItems();
|
|
70
|
-
const selected = new Gtk.Bitset();
|
|
71
|
-
const mask = Gtk.Bitset.newRange(0, nItems);
|
|
72
|
-
for (const pos of positions) {
|
|
73
|
-
selected.add(pos);
|
|
74
|
-
}
|
|
75
|
-
selectionModel.setSelection(selected, mask);
|
|
76
|
-
};
|
|
77
|
-
const isListView = (widget) => {
|
|
78
|
-
return widget instanceof Gtk.ListView || widget instanceof Gtk.GridView || widget instanceof Gtk.ColumnView;
|
|
79
|
-
};
|
|
80
|
-
const selectOptions = async (element, values) => {
|
|
81
|
-
const valueArray = Array.isArray(values) ? values : [values];
|
|
82
|
-
if (isListView(element)) {
|
|
83
|
-
const selectionModel = element.getModel();
|
|
84
|
-
const isMultiSelection = selectionModel instanceof Gtk.MultiSelection;
|
|
85
|
-
selectListViewItems(selectionModel, valueArray, !isMultiSelection);
|
|
86
|
-
await tick();
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (!isSelectable(element)) {
|
|
90
|
-
throw new Error("Cannot select options: expected selectable widget (COMBO_BOX or LIST)");
|
|
91
|
-
}
|
|
92
|
-
const role = element.getAccessibleRole();
|
|
93
|
-
if (role === Gtk.AccessibleRole.COMBO_BOX) {
|
|
94
|
-
if (Array.isArray(values) && values.length > 1) {
|
|
95
|
-
throw new Error("Cannot select multiple options: ComboBox only supports single selection");
|
|
96
|
-
}
|
|
97
|
-
if (element instanceof Gtk.DropDown) {
|
|
98
|
-
element.setSelected(valueArray[0]);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
element.setActive(valueArray[0]);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else if (role === Gtk.AccessibleRole.LIST) {
|
|
105
|
-
const listBox = element;
|
|
106
|
-
for (const value of valueArray) {
|
|
107
|
-
const row = listBox.getRowAtIndex(value);
|
|
108
|
-
if (row) {
|
|
109
|
-
listBox.selectRow(row);
|
|
110
|
-
row.activate();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
await tick();
|
|
115
|
-
};
|
|
116
|
-
const deselectOptions = async (element, values) => {
|
|
117
|
-
const valueArray = Array.isArray(values) ? values : [values];
|
|
118
|
-
if (isListView(element)) {
|
|
119
|
-
const selectionModel = element.getModel();
|
|
120
|
-
for (const pos of valueArray) {
|
|
121
|
-
selectionModel.unselectItem(pos);
|
|
122
|
-
}
|
|
123
|
-
await tick();
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
const role = element.getAccessibleRole();
|
|
127
|
-
if (role !== Gtk.AccessibleRole.LIST) {
|
|
128
|
-
throw new Error("Cannot deselect options: only ListBox supports deselection");
|
|
129
|
-
}
|
|
130
|
-
const listBox = element;
|
|
131
|
-
for (const value of valueArray) {
|
|
132
|
-
const row = listBox.getRowAtIndex(value);
|
|
133
|
-
if (row) {
|
|
134
|
-
listBox.unselectRow(row);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
await tick();
|
|
138
|
-
};
|
|
139
|
-
const getOrCreateController = (element, controllerType) => {
|
|
140
|
-
const controllers = element.observeControllers();
|
|
141
|
-
const nItems = controllers.getNItems();
|
|
142
|
-
for (let i = 0; i < nItems; i++) {
|
|
143
|
-
const controller = controllers.getObject(i);
|
|
144
|
-
if (controller instanceof controllerType) {
|
|
145
|
-
return controller;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
const controller = new controllerType();
|
|
149
|
-
element.addController(controller);
|
|
150
|
-
return controller;
|
|
151
|
-
};
|
|
152
|
-
const getSignalId = (target, signalName) => {
|
|
153
|
-
const gtype = typeFromName(target.constructor.glibTypeName);
|
|
154
|
-
return signalLookup(signalName, gtype);
|
|
155
|
-
};
|
|
156
|
-
const hover = async (element) => {
|
|
157
|
-
const controller = getOrCreateController(element, Gtk.EventControllerMotion);
|
|
158
|
-
signalEmitv([Value.newFromObject(controller), Value.newFromDouble(0), Value.newFromDouble(0)], getSignalId(controller, "enter"), 0);
|
|
159
|
-
await tick();
|
|
160
|
-
};
|
|
161
|
-
const unhover = async (element) => {
|
|
162
|
-
const controller = getOrCreateController(element, Gtk.EventControllerMotion);
|
|
163
|
-
signalEmitv([Value.newFromObject(controller)], getSignalId(controller, "leave"), 0);
|
|
164
|
-
await tick();
|
|
165
|
-
};
|
|
166
|
-
const KEY_MAP = {
|
|
167
|
-
Enter: Gdk.KEY_Return,
|
|
168
|
-
Tab: Gdk.KEY_Tab,
|
|
169
|
-
Escape: Gdk.KEY_Escape,
|
|
170
|
-
Backspace: Gdk.KEY_BackSpace,
|
|
171
|
-
Delete: Gdk.KEY_Delete,
|
|
172
|
-
ArrowUp: Gdk.KEY_Up,
|
|
173
|
-
ArrowDown: Gdk.KEY_Down,
|
|
174
|
-
ArrowLeft: Gdk.KEY_Left,
|
|
175
|
-
ArrowRight: Gdk.KEY_Right,
|
|
176
|
-
Home: Gdk.KEY_Home,
|
|
177
|
-
End: Gdk.KEY_End,
|
|
178
|
-
PageUp: Gdk.KEY_Page_Up,
|
|
179
|
-
PageDown: Gdk.KEY_Page_Down,
|
|
180
|
-
Space: Gdk.KEY_space,
|
|
181
|
-
Shift: Gdk.KEY_Shift_L,
|
|
182
|
-
Control: Gdk.KEY_Control_L,
|
|
183
|
-
Alt: Gdk.KEY_Alt_L,
|
|
184
|
-
Meta: Gdk.KEY_Meta_L,
|
|
185
|
-
};
|
|
186
|
-
const parseKeyboardInput = (input) => {
|
|
187
|
-
const actions = [];
|
|
188
|
-
let i = 0;
|
|
189
|
-
while (i < input.length) {
|
|
190
|
-
if (input[i] === "{") {
|
|
191
|
-
const endBrace = input.indexOf("}", i);
|
|
192
|
-
if (endBrace === -1)
|
|
193
|
-
break;
|
|
194
|
-
let keyName = input.slice(i + 1, endBrace);
|
|
195
|
-
let press = true;
|
|
196
|
-
let release = true;
|
|
197
|
-
if (keyName.startsWith("/")) {
|
|
198
|
-
keyName = keyName.slice(1);
|
|
199
|
-
press = false;
|
|
200
|
-
}
|
|
201
|
-
else if (keyName.endsWith(">")) {
|
|
202
|
-
keyName = keyName.slice(0, -1);
|
|
203
|
-
release = false;
|
|
204
|
-
}
|
|
205
|
-
const keyval = KEY_MAP[keyName];
|
|
206
|
-
if (keyval === undefined) {
|
|
207
|
-
throw new Error(`Unknown key: {${keyName}}`);
|
|
208
|
-
}
|
|
209
|
-
if (press)
|
|
210
|
-
actions.push({ keyval, press: true });
|
|
211
|
-
if (release)
|
|
212
|
-
actions.push({ keyval, press: false });
|
|
213
|
-
i = endBrace + 1;
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
const keyval = input.charCodeAt(i);
|
|
217
|
-
actions.push({ keyval, press: true });
|
|
218
|
-
actions.push({ keyval, press: false });
|
|
219
|
-
i++;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
return actions;
|
|
223
|
-
};
|
|
224
|
-
const MODIFIER_KEYVAL_TO_MASK = {
|
|
225
|
-
[Gdk.KEY_Shift_L]: Gdk.ModifierType.SHIFT_MASK,
|
|
226
|
-
[Gdk.KEY_Shift_R]: Gdk.ModifierType.SHIFT_MASK,
|
|
227
|
-
[Gdk.KEY_Control_L]: Gdk.ModifierType.CONTROL_MASK,
|
|
228
|
-
[Gdk.KEY_Control_R]: Gdk.ModifierType.CONTROL_MASK,
|
|
229
|
-
[Gdk.KEY_Alt_L]: Gdk.ModifierType.ALT_MASK,
|
|
230
|
-
[Gdk.KEY_Alt_R]: Gdk.ModifierType.ALT_MASK,
|
|
231
|
-
[Gdk.KEY_Meta_L]: Gdk.ModifierType.META_MASK,
|
|
232
|
-
[Gdk.KEY_Meta_R]: Gdk.ModifierType.META_MASK,
|
|
233
|
-
};
|
|
234
|
-
let gdkModifierType = null;
|
|
235
|
-
const keyboard = async (element, input) => {
|
|
236
|
-
gdkModifierType ??= typeFromName("GdkModifierType");
|
|
237
|
-
const controller = getOrCreateController(element, Gtk.EventControllerKey);
|
|
238
|
-
const actions = parseKeyboardInput(input);
|
|
239
|
-
let modifierState = 0;
|
|
240
|
-
for (const action of actions) {
|
|
241
|
-
const mask = MODIFIER_KEYVAL_TO_MASK[action.keyval];
|
|
242
|
-
if (mask) {
|
|
243
|
-
if (action.press) {
|
|
244
|
-
modifierState |= mask;
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
modifierState &= ~mask;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
const signalName = action.press ? "key-pressed" : "key-released";
|
|
251
|
-
const returnValue = action.press ? Value.newFromBoolean(false) : undefined;
|
|
252
|
-
signalEmitv([
|
|
253
|
-
Value.newFromObject(controller),
|
|
254
|
-
Value.newFromUint(action.keyval),
|
|
255
|
-
Value.newFromUint(0),
|
|
256
|
-
Value.newFromFlags(gdkModifierType, modifierState),
|
|
257
|
-
], getSignalId(controller, signalName), 0, returnValue);
|
|
258
|
-
if (action.press && action.keyval === Gdk.KEY_Return && isEditable(element)) {
|
|
259
|
-
await fireEvent(element, "activate");
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
await tick();
|
|
263
|
-
};
|
|
264
|
-
const pointer = async (element, input) => {
|
|
265
|
-
const controller = getOrCreateController(element, Gtk.GestureClick);
|
|
266
|
-
const pressedArgs = [
|
|
267
|
-
Value.newFromObject(controller),
|
|
268
|
-
Value.newFromInt(1),
|
|
269
|
-
Value.newFromDouble(0),
|
|
270
|
-
Value.newFromDouble(0),
|
|
271
|
-
];
|
|
272
|
-
const releasedArgs = [
|
|
273
|
-
Value.newFromObject(controller),
|
|
274
|
-
Value.newFromInt(1),
|
|
275
|
-
Value.newFromDouble(0),
|
|
276
|
-
Value.newFromDouble(0),
|
|
277
|
-
];
|
|
278
|
-
if (input === "[MouseLeft]" || input === "click") {
|
|
279
|
-
signalEmitv(pressedArgs, getSignalId(controller, "pressed"), 0);
|
|
280
|
-
signalEmitv(releasedArgs, getSignalId(controller, "released"), 0);
|
|
281
|
-
}
|
|
282
|
-
else if (input === "[MouseLeft>]" || input === "down") {
|
|
283
|
-
signalEmitv(pressedArgs, getSignalId(controller, "pressed"), 0);
|
|
284
|
-
}
|
|
285
|
-
else if (input === "[/MouseLeft]" || input === "up") {
|
|
286
|
-
signalEmitv(releasedArgs, getSignalId(controller, "released"), 0);
|
|
287
|
-
}
|
|
288
|
-
await tick();
|
|
289
|
-
};
|
|
290
|
-
/**
|
|
291
|
-
* User interaction utilities for testing.
|
|
292
|
-
*
|
|
293
|
-
* Simulates user actions like clicking, typing, and selecting.
|
|
294
|
-
* All methods are async and wait for GTK event processing.
|
|
295
|
-
*
|
|
296
|
-
* @example
|
|
297
|
-
* ```tsx
|
|
298
|
-
* import { render, screen, userEvent } from "@gtkx/testing";
|
|
299
|
-
*
|
|
300
|
-
* test("form submission", async () => {
|
|
301
|
-
* await render(<LoginForm />);
|
|
302
|
-
*
|
|
303
|
-
* const input = await screen.findByRole(Gtk.AccessibleRole.TEXT_BOX);
|
|
304
|
-
* await userEvent.type(input, "username");
|
|
305
|
-
*
|
|
306
|
-
* const button = await screen.findByRole(Gtk.AccessibleRole.BUTTON);
|
|
307
|
-
* await userEvent.click(button);
|
|
308
|
-
* });
|
|
309
|
-
* ```
|
|
310
|
-
*/
|
|
311
|
-
export const userEvent = {
|
|
312
|
-
/**
|
|
313
|
-
* Activates a widget.
|
|
314
|
-
*
|
|
315
|
-
* Uses GTK's native `Gtk.Widget.activate()` to trigger the widget's
|
|
316
|
-
* default action — clicking buttons, toggling checkboxes/switches, etc.
|
|
317
|
-
*/
|
|
318
|
-
click,
|
|
319
|
-
/**
|
|
320
|
-
* Double-clicks a widget.
|
|
321
|
-
*
|
|
322
|
-
* Emits pressed/released signals with n_press=1, then n_press=2.
|
|
323
|
-
*/
|
|
324
|
-
dblClick,
|
|
325
|
-
/**
|
|
326
|
-
* Triple-clicks a widget.
|
|
327
|
-
*
|
|
328
|
-
* Emits pressed/released signals with n_press=1, 2, then 3. Useful for text selection.
|
|
329
|
-
*/
|
|
330
|
-
tripleClick,
|
|
331
|
-
/**
|
|
332
|
-
* Simulates Tab key navigation.
|
|
333
|
-
*
|
|
334
|
-
* @param element - Starting element
|
|
335
|
-
* @param options - Use `shift: true` for backwards navigation
|
|
336
|
-
*/
|
|
337
|
-
tab,
|
|
338
|
-
/**
|
|
339
|
-
* Types text into an editable widget.
|
|
340
|
-
*
|
|
341
|
-
* Appends text to the current content. Works with Entry, SearchEntry,
|
|
342
|
-
* and SpinButton widgets.
|
|
343
|
-
*
|
|
344
|
-
* @param element - The editable widget
|
|
345
|
-
* @param text - Text to type
|
|
346
|
-
*/
|
|
347
|
-
type,
|
|
348
|
-
/**
|
|
349
|
-
* Clears an editable widget's content.
|
|
350
|
-
*
|
|
351
|
-
* Sets the text to empty string.
|
|
352
|
-
*/
|
|
353
|
-
clear,
|
|
354
|
-
/**
|
|
355
|
-
* Selects options in a dropdown or list.
|
|
356
|
-
*
|
|
357
|
-
* Works with DropDown, ComboBox, ListBox, ListView, GridView, and ColumnView.
|
|
358
|
-
*
|
|
359
|
-
* @param element - The selectable widget
|
|
360
|
-
* @param values - Index or array of indices to select
|
|
361
|
-
*/
|
|
362
|
-
selectOptions,
|
|
363
|
-
/**
|
|
364
|
-
* Deselects options in a list.
|
|
365
|
-
*
|
|
366
|
-
* Works with ListBox and multi-selection list views.
|
|
367
|
-
*
|
|
368
|
-
* @param element - The selectable widget
|
|
369
|
-
* @param values - Index or array of indices to deselect
|
|
370
|
-
*/
|
|
371
|
-
deselectOptions,
|
|
372
|
-
/**
|
|
373
|
-
* Simulates mouse entering a widget (hover).
|
|
374
|
-
*
|
|
375
|
-
* Triggers the "enter" signal on the widget's EventControllerMotion.
|
|
376
|
-
*/
|
|
377
|
-
hover,
|
|
378
|
-
/**
|
|
379
|
-
* Simulates mouse leaving a widget (unhover).
|
|
380
|
-
*
|
|
381
|
-
* Triggers the "leave" signal on the widget's EventControllerMotion.
|
|
382
|
-
*/
|
|
383
|
-
unhover,
|
|
384
|
-
/**
|
|
385
|
-
* Simulates keyboard input.
|
|
386
|
-
*
|
|
387
|
-
* Supports special keys in braces: `{Enter}`, `{Tab}`, `{Escape}`, etc.
|
|
388
|
-
* Use `{Key>}` to hold a key down, `{/Key}` to release.
|
|
389
|
-
*
|
|
390
|
-
* @example
|
|
391
|
-
* ```tsx
|
|
392
|
-
* await userEvent.keyboard(element, "hello");
|
|
393
|
-
* await userEvent.keyboard(element, "{Enter}");
|
|
394
|
-
* await userEvent.keyboard(element, "{Shift>}A{/Shift}");
|
|
395
|
-
* ```
|
|
396
|
-
*/
|
|
397
|
-
keyboard,
|
|
398
|
-
/**
|
|
399
|
-
* Simulates pointer (mouse) input.
|
|
400
|
-
*
|
|
401
|
-
* Supports: `"click"`, `"[MouseLeft]"`, `"down"`, `"up"`.
|
|
402
|
-
*
|
|
403
|
-
* @example
|
|
404
|
-
* ```tsx
|
|
405
|
-
* await userEvent.pointer(element, "click");
|
|
406
|
-
* await userEvent.pointer(element, "[MouseLeft]");
|
|
407
|
-
* ```
|
|
408
|
-
*/
|
|
409
|
-
pointer,
|
|
410
|
-
};
|
|
411
|
-
//# sourceMappingURL=user-event.js.map
|
package/dist/user-event.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user-event.js","sourceRoot":"","sources":["../src/user-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AACrC,OAAO,EAA0B,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC3G,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAUzC,MAAM,KAAK,GAAG,KAAK,EAAE,OAAmB,EAAiB,EAAE;IACvD,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnB,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAmB,EAAE,MAAc,EAAiB,EAAE;IACnF,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAEpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG;YACT,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC;YAC/B,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YACnB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;YACtB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;SACzB,CAAC;QACF,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAmB,EAAiB,EAAE;IAC1D,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EAAE,OAAmB,EAAiB,EAAE;IAC7D,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,KAAK,EAAE,OAAmB,EAAE,OAAoB,EAAiB,EAAE;IAC3E,MAAM,SAAS,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC;IAClG,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAE/B,IAAI,IAAI,IAAI,IAAI,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,KAAK,EAAE,OAAmB,EAAE,IAAY,EAAiB,EAAE;IACpE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;IACjH,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IACtC,OAAO,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAEpC,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,KAAK,EAAE,OAAmB,EAAiB,EAAE;IACvD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;IAC7G,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAEpB,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAE1F,MAAM,YAAY,GAAG,CAAC,MAAkB,EAAW,EAAE;IACjD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,cAAkC,EAAE,SAAmB,EAAE,SAAkB,EAAQ,EAAE;IAC9G,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5D,OAAO;IACX,CAAC;IAED,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAW,EAAE,IAAI,CAAC,CAAC;QACxD,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAE5C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC1B,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAkB,EAA0D,EAAE;IAC9F,OAAO,MAAM,YAAY,GAAG,CAAC,QAAQ,IAAI,MAAM,YAAY,GAAG,CAAC,QAAQ,IAAI,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC;AAChH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,KAAK,EAAE,OAAmB,EAAE,MAAyB,EAAiB,EAAE;IAC1F,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAE7D,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACtB,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAwB,CAAC;QAChE,MAAM,gBAAgB,GAAG,cAAc,YAAY,GAAG,CAAC,cAAc,CAAC;QACtE,mBAAmB,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC,gBAAgB,CAAC,CAAC;QACnE,MAAM,IAAI,EAAE,CAAC;QACb,OAAO;IACX,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAEzC,IAAI,IAAI,KAAK,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,OAAO,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjC,OAAwB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAW,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACH,OAAwB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAW,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,KAAK,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,OAAsB,CAAC;QAEvC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAEzC,IAAI,GAAG,EAAE,CAAC;gBACN,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACvB,GAAG,CAAC,QAAQ,EAAE,CAAC;YACnB,CAAC;QACL,CAAC;IACL,CAAC;IAED,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,KAAK,EAAE,OAAmB,EAAE,MAAyB,EAAiB,EAAE;IAC5F,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAE7D,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACtB,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAwB,CAAC;QAEhE,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC3B,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,EAAE,CAAC;QACb,OAAO;IACX,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAEzC,IAAI,IAAI,KAAK,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,OAAO,GAAG,OAAsB,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,GAAG,EAAE,CAAC;YACN,OAAO,CAAC,WAAW,CAAC,GAAqB,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAgC,OAAmB,EAAE,cAA2B,EAAK,EAAE;IACjH,MAAM,WAAW,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,UAAU,YAAY,cAAc,EAAE,CAAC;YACvC,OAAO,UAAe,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,cAAc,EAAE,CAAC;IACxC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAClC,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,MAA2B,EAAE,UAAkB,EAAU,EAAE;IAC5E,MAAM,KAAK,GAAG,YAAY,CAAE,MAAM,CAAC,WAA8B,CAAC,YAAY,CAAC,CAAC;IAChF,OAAO,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,KAAK,EAAE,OAAmB,EAAiB,EAAE;IACvD,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC7E,WAAW,CACP,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EACjF,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,EAChC,CAAC,CACJ,CAAC;IACF,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,KAAK,EAAE,OAAmB,EAAiB,EAAE;IACzD,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC7E,WAAW,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,OAAO,GAA2B;IACpC,KAAK,EAAE,GAAG,CAAC,UAAU;IACrB,GAAG,EAAE,GAAG,CAAC,OAAO;IAChB,MAAM,EAAE,GAAG,CAAC,UAAU;IACtB,SAAS,EAAE,GAAG,CAAC,aAAa;IAC5B,MAAM,EAAE,GAAG,CAAC,UAAU;IACtB,OAAO,EAAE,GAAG,CAAC,MAAM;IACnB,SAAS,EAAE,GAAG,CAAC,QAAQ;IACvB,SAAS,EAAE,GAAG,CAAC,QAAQ;IACvB,UAAU,EAAE,GAAG,CAAC,SAAS;IACzB,IAAI,EAAE,GAAG,CAAC,QAAQ;IAClB,GAAG,EAAE,GAAG,CAAC,OAAO;IAChB,MAAM,EAAE,GAAG,CAAC,WAAW;IACvB,QAAQ,EAAE,GAAG,CAAC,aAAa;IAC3B,KAAK,EAAE,GAAG,CAAC,SAAS;IACpB,KAAK,EAAE,GAAG,CAAC,WAAW;IACtB,OAAO,EAAE,GAAG,CAAC,aAAa;IAC1B,GAAG,EAAE,GAAG,CAAC,SAAS;IAClB,IAAI,EAAE,GAAG,CAAC,UAAU;CACvB,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAA6C,EAAE;IACpF,MAAM,OAAO,GAA8C,EAAE,CAAC;IAC9D,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,QAAQ,KAAK,CAAC,CAAC;gBAAE,MAAM;YAE3B,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC3C,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,IAAI,OAAO,GAAG,IAAI,CAAC;YAEnB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,KAAK,GAAG,KAAK,CAAC;YAClB,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/B,OAAO,GAAG,KAAK,CAAC;YACpB,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,GAAG,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAEpD,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACvC,CAAC,EAAE,CAAC;QACR,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAA2B;IACpD,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,UAAU;IAC9C,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,UAAU;IAC9C,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,YAAY;IAClD,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,YAAY;IAClD,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;IAC1C,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;IAC1C,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,SAAS;IAC5C,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,SAAS;CAC/C,CAAC;AAEF,IAAI,eAAe,GAAkB,IAAI,CAAC;AAE1C,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAmB,EAAE,KAAa,EAAiB,EAAE;IACzE,eAAe,KAAK,YAAY,CAAC,iBAAiB,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEpD,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,aAAa,IAAI,IAAI,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACJ,aAAa,IAAI,CAAC,IAAI,CAAC;YAC3B,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC;QACjE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,WAAW,CACP;YACI,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC;YAC/B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;YAChC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;YACpB,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC;SACrD,EACD,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,EACnC,CAAC,EACD,WAAW,CACd,CAAC;QAEF,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1E,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC;AAWF,MAAM,OAAO,GAAG,KAAK,EAAE,OAAmB,EAAE,KAAmB,EAAiB,EAAE;IAC9E,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG;QAChB,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC;QAC/B,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACnB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QACtB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;KACzB,CAAC;IACF,MAAM,YAAY,GAAG;QACjB,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC;QAC/B,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACnB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QACtB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;KACzB,CAAC;IAEF,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QAC/C,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;SAAM,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACtD,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;SAAM,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpD,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB;;;;;OAKG;IACH,KAAK;IACL;;;;OAIG;IACH,QAAQ;IACR;;;;OAIG;IACH,WAAW;IACX;;;;;OAKG;IACH,GAAG;IACH;;;;;;;;OAQG;IACH,IAAI;IACJ;;;;OAIG;IACH,KAAK;IACL;;;;;;;OAOG;IACH,aAAa;IACb;;;;;;;OAOG;IACH,eAAe;IACf;;;;OAIG;IACH,KAAK;IACL;;;;OAIG;IACH,OAAO;IACP;;;;;;;;;;;;OAYG;IACH,QAAQ;IACR;;;;;;;;;;OAUG;IACH,OAAO;CACV,CAAC"}
|
package/dist/widget-text.d.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import * as Gtk from "@gtkx/ffi/gtk";
|
|
2
|
-
/**
|
|
3
|
-
* Returns the text content of a widget, analogous to RTL's getNodeText.
|
|
4
|
-
*
|
|
5
|
-
* Collects direct child GtkLabel text (treated as text nodes) and joins
|
|
6
|
-
* them into a single string. Widget properties like getLabel(), getTitle(),
|
|
7
|
-
* getText() are NOT included — those are attributes, not text content.
|
|
8
|
-
*
|
|
9
|
-
* @param widget - The widget to extract text from
|
|
10
|
-
* @returns The joined text content or null if none found
|
|
11
|
-
*/
|
|
12
|
-
export declare const getWidgetText: (widget: Gtk.Widget) => string | null;
|
|
13
|
-
/**
|
|
14
|
-
* Returns the widget's own text from properties (getLabel, getText, getTitle).
|
|
15
|
-
*
|
|
16
|
-
* Used for display/debugging purposes (e.g., prettyWidget). This is
|
|
17
|
-
* analogous to HTML attributes like aria-label, not text content.
|
|
18
|
-
*
|
|
19
|
-
* @param widget - The widget to extract property text from
|
|
20
|
-
* @returns The property text or null if none found
|
|
21
|
-
*/
|
|
22
|
-
export declare const getWidgetPropertyText: (widget: Gtk.Widget) => string | null;
|
|
23
|
-
/**
|
|
24
|
-
* Computes the accessible name of a widget for role-based queries.
|
|
25
|
-
*
|
|
26
|
-
* Uses the widget's own text properties first, then recursively collects
|
|
27
|
-
* all descendant label text. This mirrors how ARIA accessible name
|
|
28
|
-
* computation works in the DOM.
|
|
29
|
-
*
|
|
30
|
-
* @param widget - The widget to compute the accessible name for
|
|
31
|
-
* @returns The accessible name or null if none found
|
|
32
|
-
*/
|
|
33
|
-
export declare const getWidgetAccessibleName: (widget: Gtk.Widget) => string | null;
|
|
34
|
-
/**
|
|
35
|
-
* Gets the widget name (gtk_widget_get_name).
|
|
36
|
-
*
|
|
37
|
-
* @param widget - The widget to get the name from
|
|
38
|
-
* @returns The widget name or null if not set
|
|
39
|
-
*/
|
|
40
|
-
export declare const getWidgetName: (widget: Gtk.Widget) => string | null;
|
|
41
|
-
/**
|
|
42
|
-
* Gets the checked state from toggle-like widgets.
|
|
43
|
-
*
|
|
44
|
-
* @param widget - The widget to get the checked state from
|
|
45
|
-
* @returns The checked state or null if not applicable
|
|
46
|
-
*/
|
|
47
|
-
export declare const getWidgetCheckedState: (widget: Gtk.Widget) => boolean | null;
|
|
48
|
-
/**
|
|
49
|
-
* Gets the pressed state from toggle button widgets.
|
|
50
|
-
*
|
|
51
|
-
* @param widget - The widget to get the pressed state from
|
|
52
|
-
* @returns The pressed state or null if not applicable
|
|
53
|
-
*/
|
|
54
|
-
export declare const getWidgetPressedState: (widget: Gtk.Widget) => boolean | null;
|
|
55
|
-
/**
|
|
56
|
-
* Gets the expanded state from expander widgets.
|
|
57
|
-
*
|
|
58
|
-
* @param widget - The widget to get the expanded state from
|
|
59
|
-
* @returns The expanded state or null if not applicable
|
|
60
|
-
*/
|
|
61
|
-
export declare const getWidgetExpandedState: (widget: Gtk.Widget) => boolean | null;
|
|
62
|
-
/**
|
|
63
|
-
* Gets the selected state from selectable widgets.
|
|
64
|
-
*
|
|
65
|
-
* @param widget - The widget to get the selected state from
|
|
66
|
-
* @returns The selected state or null if not applicable
|
|
67
|
-
*/
|
|
68
|
-
export declare const getWidgetSelectedState: (widget: Gtk.Widget) => boolean | null;
|
|
69
|
-
//# sourceMappingURL=widget-text.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"widget-text.d.ts","sourceRoot":"","sources":["../src/widget-text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AAwDrC;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAM3D,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAEnE,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAqBrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAE3D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAcpE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAQpE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAUrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAQrE,CAAC"}
|
package/dist/widget-text.js
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { getNativeInterface } from "@gtkx/ffi";
|
|
2
|
-
import * as Gtk from "@gtkx/ffi/gtk";
|
|
3
|
-
const getLabelText = (widget) => {
|
|
4
|
-
const asLabel = widget;
|
|
5
|
-
const asInscription = widget;
|
|
6
|
-
return asLabel.getLabel?.() ?? asInscription.getText?.() ?? null;
|
|
7
|
-
};
|
|
8
|
-
const getDefaultText = (widget) => {
|
|
9
|
-
if ("getLabel" in widget && typeof widget.getLabel === "function") {
|
|
10
|
-
return widget.getLabel() || null;
|
|
11
|
-
}
|
|
12
|
-
if ("getText" in widget && typeof widget.getText === "function") {
|
|
13
|
-
return widget.getText() || null;
|
|
14
|
-
}
|
|
15
|
-
if ("getTitle" in widget && typeof widget.getTitle === "function") {
|
|
16
|
-
return widget.getTitle() || null;
|
|
17
|
-
}
|
|
18
|
-
return getNativeInterface(widget, Gtk.Editable)?.getText() || null;
|
|
19
|
-
};
|
|
20
|
-
const collectDirectChildLabels = (widget) => {
|
|
21
|
-
const labels = [];
|
|
22
|
-
let child = widget.getFirstChild();
|
|
23
|
-
while (child) {
|
|
24
|
-
if (child.getAccessibleRole() === Gtk.AccessibleRole.LABEL) {
|
|
25
|
-
const labelText = getLabelText(child);
|
|
26
|
-
if (labelText)
|
|
27
|
-
labels.push(labelText);
|
|
28
|
-
}
|
|
29
|
-
child = child.getNextSibling();
|
|
30
|
-
}
|
|
31
|
-
return labels;
|
|
32
|
-
};
|
|
33
|
-
const collectChildLabels = (widget) => {
|
|
34
|
-
const labels = [];
|
|
35
|
-
let child = widget.getFirstChild();
|
|
36
|
-
while (child) {
|
|
37
|
-
if (child.getAccessibleRole() === Gtk.AccessibleRole.LABEL) {
|
|
38
|
-
const labelText = getLabelText(child);
|
|
39
|
-
if (labelText)
|
|
40
|
-
labels.push(labelText);
|
|
41
|
-
}
|
|
42
|
-
labels.push(...collectChildLabels(child));
|
|
43
|
-
child = child.getNextSibling();
|
|
44
|
-
}
|
|
45
|
-
return labels;
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* Returns the text content of a widget, analogous to RTL's getNodeText.
|
|
49
|
-
*
|
|
50
|
-
* Collects direct child GtkLabel text (treated as text nodes) and joins
|
|
51
|
-
* them into a single string. Widget properties like getLabel(), getTitle(),
|
|
52
|
-
* getText() are NOT included — those are attributes, not text content.
|
|
53
|
-
*
|
|
54
|
-
* @param widget - The widget to extract text from
|
|
55
|
-
* @returns The joined text content or null if none found
|
|
56
|
-
*/
|
|
57
|
-
export const getWidgetText = (widget) => {
|
|
58
|
-
const role = widget.getAccessibleRole();
|
|
59
|
-
if (role === undefined)
|
|
60
|
-
return null;
|
|
61
|
-
const childLabels = collectDirectChildLabels(widget);
|
|
62
|
-
return childLabels.length > 0 ? childLabels.join("") : null;
|
|
63
|
-
};
|
|
64
|
-
/**
|
|
65
|
-
* Returns the widget's own text from properties (getLabel, getText, getTitle).
|
|
66
|
-
*
|
|
67
|
-
* Used for display/debugging purposes (e.g., prettyWidget). This is
|
|
68
|
-
* analogous to HTML attributes like aria-label, not text content.
|
|
69
|
-
*
|
|
70
|
-
* @param widget - The widget to extract property text from
|
|
71
|
-
* @returns The property text or null if none found
|
|
72
|
-
*/
|
|
73
|
-
export const getWidgetPropertyText = (widget) => {
|
|
74
|
-
return getDefaultText(widget);
|
|
75
|
-
};
|
|
76
|
-
/**
|
|
77
|
-
* Computes the accessible name of a widget for role-based queries.
|
|
78
|
-
*
|
|
79
|
-
* Uses the widget's own text properties first, then recursively collects
|
|
80
|
-
* all descendant label text. This mirrors how ARIA accessible name
|
|
81
|
-
* computation works in the DOM.
|
|
82
|
-
*
|
|
83
|
-
* @param widget - The widget to compute the accessible name for
|
|
84
|
-
* @returns The accessible name or null if none found
|
|
85
|
-
*/
|
|
86
|
-
export const getWidgetAccessibleName = (widget) => {
|
|
87
|
-
const role = widget.getAccessibleRole();
|
|
88
|
-
if (role === undefined)
|
|
89
|
-
return null;
|
|
90
|
-
if (role === Gtk.AccessibleRole.TAB_PANEL) {
|
|
91
|
-
const parent = widget.getParent();
|
|
92
|
-
if (parent) {
|
|
93
|
-
const stack = parent;
|
|
94
|
-
const page = stack.getPage?.(widget);
|
|
95
|
-
if (page) {
|
|
96
|
-
return page.getTitle() ?? null;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
const ownText = getDefaultText(widget);
|
|
102
|
-
if (ownText)
|
|
103
|
-
return ownText;
|
|
104
|
-
const childLabels = collectChildLabels(widget);
|
|
105
|
-
return childLabels.length > 0 ? childLabels.join(" ") : null;
|
|
106
|
-
};
|
|
107
|
-
/**
|
|
108
|
-
* Gets the widget name (gtk_widget_get_name).
|
|
109
|
-
*
|
|
110
|
-
* @param widget - The widget to get the name from
|
|
111
|
-
* @returns The widget name or null if not set
|
|
112
|
-
*/
|
|
113
|
-
export const getWidgetName = (widget) => {
|
|
114
|
-
return widget.getName();
|
|
115
|
-
};
|
|
116
|
-
/**
|
|
117
|
-
* Gets the checked state from toggle-like widgets.
|
|
118
|
-
*
|
|
119
|
-
* @param widget - The widget to get the checked state from
|
|
120
|
-
* @returns The checked state or null if not applicable
|
|
121
|
-
*/
|
|
122
|
-
export const getWidgetCheckedState = (widget) => {
|
|
123
|
-
const role = widget.getAccessibleRole();
|
|
124
|
-
switch (role) {
|
|
125
|
-
case Gtk.AccessibleRole.CHECKBOX:
|
|
126
|
-
case Gtk.AccessibleRole.RADIO:
|
|
127
|
-
return widget.getActive();
|
|
128
|
-
case Gtk.AccessibleRole.TOGGLE_BUTTON:
|
|
129
|
-
return widget.getActive();
|
|
130
|
-
case Gtk.AccessibleRole.SWITCH:
|
|
131
|
-
return widget.getActive();
|
|
132
|
-
default:
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
/**
|
|
137
|
-
* Gets the pressed state from toggle button widgets.
|
|
138
|
-
*
|
|
139
|
-
* @param widget - The widget to get the pressed state from
|
|
140
|
-
* @returns The pressed state or null if not applicable
|
|
141
|
-
*/
|
|
142
|
-
export const getWidgetPressedState = (widget) => {
|
|
143
|
-
const role = widget.getAccessibleRole();
|
|
144
|
-
if (role === Gtk.AccessibleRole.TOGGLE_BUTTON) {
|
|
145
|
-
return widget.getActive();
|
|
146
|
-
}
|
|
147
|
-
return null;
|
|
148
|
-
};
|
|
149
|
-
/**
|
|
150
|
-
* Gets the expanded state from expander widgets.
|
|
151
|
-
*
|
|
152
|
-
* @param widget - The widget to get the expanded state from
|
|
153
|
-
* @returns The expanded state or null if not applicable
|
|
154
|
-
*/
|
|
155
|
-
export const getWidgetExpandedState = (widget) => {
|
|
156
|
-
if (widget instanceof Gtk.Expander) {
|
|
157
|
-
return widget.getExpanded();
|
|
158
|
-
}
|
|
159
|
-
if (widget instanceof Gtk.TreeExpander) {
|
|
160
|
-
return widget.getListRow()?.getExpanded() ?? null;
|
|
161
|
-
}
|
|
162
|
-
return null;
|
|
163
|
-
};
|
|
164
|
-
/**
|
|
165
|
-
* Gets the selected state from selectable widgets.
|
|
166
|
-
*
|
|
167
|
-
* @param widget - The widget to get the selected state from
|
|
168
|
-
* @returns The selected state or null if not applicable
|
|
169
|
-
*/
|
|
170
|
-
export const getWidgetSelectedState = (widget) => {
|
|
171
|
-
const role = widget.getAccessibleRole();
|
|
172
|
-
if (role === Gtk.AccessibleRole.ROW) {
|
|
173
|
-
return widget.isSelected();
|
|
174
|
-
}
|
|
175
|
-
return null;
|
|
176
|
-
};
|
|
177
|
-
//# sourceMappingURL=widget-text.js.map
|