@gtkx/testing 1.6.0 → 2.0.0-beta.2

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 (70) hide show
  1. package/README.md +5 -5
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +1 -3
  4. package/dist/config.js.map +1 -1
  5. package/dist/fire-event.js +1 -1
  6. package/dist/fire-event.js.map +1 -1
  7. package/dist/matchers.d.ts.map +1 -1
  8. package/dist/matchers.js +1 -14
  9. package/dist/matchers.js.map +1 -1
  10. package/dist/queries.d.ts +30 -126
  11. package/dist/queries.d.ts.map +1 -1
  12. package/dist/queries.js +30 -126
  13. package/dist/queries.js.map +1 -1
  14. package/dist/query-helpers.d.ts.map +1 -1
  15. package/dist/query-helpers.js +8 -2
  16. package/dist/query-helpers.js.map +1 -1
  17. package/dist/screenshot.d.ts.map +1 -1
  18. package/dist/screenshot.js +1 -3
  19. package/dist/screenshot.js.map +1 -1
  20. package/dist/user-event/adjustment.d.ts +2 -14
  21. package/dist/user-event/adjustment.d.ts.map +1 -1
  22. package/dist/user-event/adjustment.js +2 -14
  23. package/dist/user-event/adjustment.js.map +1 -1
  24. package/dist/user-event/click.d.ts +3 -41
  25. package/dist/user-event/click.d.ts.map +1 -1
  26. package/dist/user-event/click.js +5 -43
  27. package/dist/user-event/click.js.map +1 -1
  28. package/dist/user-event/gesture.d.ts +9 -43
  29. package/dist/user-event/gesture.d.ts.map +1 -1
  30. package/dist/user-event/gesture.js +9 -43
  31. package/dist/user-event/gesture.js.map +1 -1
  32. package/dist/user-event/index.d.ts +16 -85
  33. package/dist/user-event/index.d.ts.map +1 -1
  34. package/dist/user-event/index.js +1 -5
  35. package/dist/user-event/index.js.map +1 -1
  36. package/dist/user-event/keyboard.d.ts +1 -1
  37. package/dist/user-event/keyboard.d.ts.map +1 -1
  38. package/dist/user-event/keyboard.js +1 -1
  39. package/dist/user-event/keyboard.js.map +1 -1
  40. package/dist/user-event/list-row-click.d.ts +1 -1
  41. package/dist/user-event/list-row-click.d.ts.map +1 -1
  42. package/dist/user-event/list-row-click.js +2 -1
  43. package/dist/user-event/list-row-click.js.map +1 -1
  44. package/dist/user-event/selection.d.ts +2 -18
  45. package/dist/user-event/selection.d.ts.map +1 -1
  46. package/dist/user-event/selection.js +3 -21
  47. package/dist/user-event/selection.js.map +1 -1
  48. package/dist/user-event/text.d.ts +5 -34
  49. package/dist/user-event/text.d.ts.map +1 -1
  50. package/dist/user-event/text.js +5 -34
  51. package/dist/user-event/text.js.map +1 -1
  52. package/dist/widget-accessible-properties.d.ts.map +1 -1
  53. package/dist/widget-accessible-properties.js +14 -34
  54. package/dist/widget-accessible-properties.js.map +1 -1
  55. package/package.json +12 -8
  56. package/src/config.ts +1 -3
  57. package/src/fire-event.ts +1 -1
  58. package/src/matchers.ts +1 -22
  59. package/src/queries.ts +30 -126
  60. package/src/query-helpers.ts +8 -2
  61. package/src/screenshot.ts +1 -3
  62. package/src/user-event/adjustment.ts +2 -14
  63. package/src/user-event/click.ts +5 -43
  64. package/src/user-event/gesture.ts +9 -43
  65. package/src/user-event/index.ts +16 -85
  66. package/src/user-event/keyboard.ts +1 -1
  67. package/src/user-event/list-row-click.ts +2 -2
  68. package/src/user-event/selection.ts +3 -21
  69. package/src/user-event/text.ts +5 -34
  70. package/src/widget-accessible-properties.ts +22 -44
@@ -1 +1 @@
1
- {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/user-event/selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AA6JpC;;;;;;;;;GASG;AACH,QAAA,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CACd,CAAC;AAoBtE;;;;;;;GAOG;AACH,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CACZ,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/user-event/selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AA2JpC,iDAAiD;AACjD,QAAA,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CACd,CAAC;AAoBtE,mDAAmD;AACnD,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CACZ,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
@@ -8,9 +8,7 @@ const SELECTABLE_ROLES = new Set([
8
8
  Gtk.AccessibleRole.GRID,
9
9
  Gtk.AccessibleRole.LIST,
10
10
  ]);
11
- const isSelectable = (widget) => {
12
- return SELECTABLE_ROLES.has(widget.getAccessibleRole());
13
- };
11
+ const isSelectable = (widget) => SELECTABLE_ROLES.has(widget.getAccessibleRole());
14
12
  const selectListViewItems = (selectionModel, positions, isExclusive) => {
15
13
  if (positions.length === 0) {
16
14
  selectionModel.unselectRange(0, selectionModel.getNItems());
@@ -94,16 +92,7 @@ const runSelectionEvent = (widget, values, inListView, byRole) => wrapEvent(widg
94
92
  }
95
93
  byRole(widget, valueArray);
96
94
  });
97
- /**
98
- * Selects the items at the given positions through a list, grid, or column view's selection model,
99
- * by setting the selected position of a widget with the COMBO_BOX role, or by selecting the indexed
100
- * children of a list box or flow box through their container. An empty array clears a view's
101
- * selection. The children are never activated, so no row-activated handler runs.
102
- *
103
- * @throws When a view has no selection model, when a COMBO_BOX-role widget is given more than one
104
- * position or exposes no `setSelected`, or when the widget's role is none of COMBO_BOX, GRID, or
105
- * LIST.
106
- */
95
+ /** Selects positions without activating them. */
107
96
  const selectOptions = (widget, values) => runSelectionEvent(widget, values, selectInListView, selectByRole);
108
97
  const deselectInListView = (widget, valueArray) => {
109
98
  const selectionModel = requireSelectionModel(widget, "deselect");
@@ -118,14 +107,7 @@ const deselectByRole = (widget, valueArray) => {
118
107
  }
119
108
  applyIndexedChildren(widget, valueArray, unselectChildRow);
120
109
  };
121
- /**
122
- * Unselects the items at the given positions in a list, grid, or column view, or unselects the
123
- * indexed children of a list box or flow box through their container. A child that is not selected
124
- * is left alone, and no child is activated.
125
- *
126
- * @throws When a view has no selection model, when the widget's role is none of COMBO_BOX, GRID, or
127
- * LIST, or when it exposes no indexed children.
128
- */
110
+ /** Unselects positions without activating them. */
129
111
  const deselectOptions = (widget, values) => runSelectionEvent(widget, values, deselectInListView, deselectByRole);
130
112
  export { selectOptions, deselectOptions };
131
113
  //# sourceMappingURL=selection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/user-event/selection.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport { formatRoleList } from \"../role-helpers.js\";\nimport { getCallableMethod } from \"../widget-getters.js\";\nimport { wrapEvent } from \"./event-wrapper.js\";\nimport {\n getChildAtIndex,\n hasIndexedChildren,\n isChildSelected,\n selectContainerChild,\n unselectContainerChild,\n} from \"./indexed-children.js\";\n\ntype CollectionWidget = Gtk.ListView | Gtk.GridView | Gtk.ColumnView;\ntype IndexedChildAction = (container: Gtk.Widget, child: Gtk.Widget) => void;\n\nconst SELECTABLE_ROLES: Set<Gtk.AccessibleRole> = new Set([\n Gtk.AccessibleRole.COMBO_BOX,\n Gtk.AccessibleRole.GRID,\n Gtk.AccessibleRole.LIST,\n]);\n\nconst isSelectable = (widget: Gtk.Widget): boolean => {\n return SELECTABLE_ROLES.has(widget.getAccessibleRole());\n};\n\nconst selectListViewItems = (\n selectionModel: Gtk.SelectionModel,\n positions: number[],\n isExclusive: boolean,\n): void => {\n if (positions.length === 0) {\n selectionModel.unselectRange(0, selectionModel.getNItems());\n\n return;\n }\n\n const [first] = positions;\n\n if (isExclusive && first !== undefined && positions.length === 1) {\n selectionModel.selectItem(first, true);\n\n return;\n }\n\n const nItems = selectionModel.getNItems();\n const selected = Gtk.Bitset.newEmpty();\n const mask = Gtk.Bitset.newRange(0, nItems);\n\n for (const pos of positions) {\n selected.add(pos);\n }\n\n selectionModel.setSelection(selected, mask);\n};\n\nconst isListView = (widget: Gtk.Widget): widget is CollectionWidget =>\n widget instanceof Gtk.ListView || widget instanceof Gtk.GridView || widget instanceof Gtk.ColumnView;\n\nconst getIndexSelector = (widget: Gtk.Widget): ((position: number) => void) | null =>\n getCallableMethod<[number], unknown>(widget, \"setSelected\");\n\nconst selectDropDownOption = (widget: Gtk.Widget, valueArray: number[]): void => {\n const setSelected = getIndexSelector(widget);\n\n if (!setSelected) {\n throw new TypeError(\"Cannot select options: the COMBO_BOX role needs a widget exposing setSelected\");\n }\n\n if (valueArray.length > 1) {\n throw new Error(\"Cannot select multiple options: a drop-down only supports single selection\");\n }\n\n const [selection] = valueArray;\n\n if (selection !== undefined) {\n setSelected(selection);\n }\n};\n\nconst unselectChildRow = (container: Gtk.Widget, child: Gtk.Widget): void => {\n if (isChildSelected(child)) {\n unselectContainerChild(container, child);\n }\n};\n\nconst applyIndexedChildren = (widget: Gtk.Widget, valueArray: number[], apply: IndexedChildAction): void => {\n for (const value of valueArray) {\n const child = getChildAtIndex(widget, value);\n\n if (child) {\n apply(widget, child);\n }\n }\n};\n\nconst requireSelectionModel = (\n widget: CollectionWidget,\n verb: string,\n): Gtk.SelectionModel => {\n const selectionModel = widget.getModel();\n\n if (selectionModel === null) {\n throw new Error(`Cannot ${verb} options: list view has no selection model`);\n }\n\n return selectionModel;\n};\n\nconst selectInListView = (widget: CollectionWidget, valueArray: number[]): void => {\n const selectionModel = requireSelectionModel(widget, \"select\");\n const isMultiSelection = selectionModel instanceof Gtk.MultiSelection;\n selectListViewItems(selectionModel, valueArray, !isMultiSelection);\n};\n\nconst requireSelectableRole = (widget: Gtk.Widget, verb: string): void => {\n if (!isSelectable(widget)) {\n throw new Error(\n `Cannot ${verb} options: expected selectable widget (${formatRoleList(SELECTABLE_ROLES)})`,\n );\n }\n};\n\nconst selectByRole = (widget: Gtk.Widget, valueArray: number[]): void => {\n requireSelectableRole(widget, \"select\");\n const role = widget.getAccessibleRole();\n\n if (role === Gtk.AccessibleRole.COMBO_BOX) {\n selectDropDownOption(widget, valueArray);\n\n return;\n }\n\n if (!hasIndexedChildren(widget)) {\n throw new TypeError(\"Cannot select options: the widget exposes no children to select by index\");\n }\n\n applyIndexedChildren(widget, valueArray, selectContainerChild);\n};\n\nconst runSelectionEvent = (\n widget: Gtk.Widget,\n values: number | number[],\n inListView: (view: Gtk.ListView | Gtk.GridView | Gtk.ColumnView, valueArray: number[]) => void,\n byRole: (widget: Gtk.Widget, valueArray: number[]) => void,\n): Promise<void> =>\n wrapEvent(widget, () => {\n const valueArray = Array.isArray(values) ? values : [values];\n\n if (isListView(widget)) {\n inListView(widget, valueArray);\n\n return;\n }\n\n byRole(widget, valueArray);\n });\n\n/**\n * Selects the items at the given positions through a list, grid, or column view's selection model,\n * by setting the selected position of a widget with the COMBO_BOX role, or by selecting the indexed\n * children of a list box or flow box through their container. An empty array clears a view's\n * selection. The children are never activated, so no row-activated handler runs.\n *\n * @throws When a view has no selection model, when a COMBO_BOX-role widget is given more than one\n * position or exposes no `setSelected`, or when the widget's role is none of COMBO_BOX, GRID, or\n * LIST.\n */\nconst selectOptions = (widget: Gtk.Widget, values: number | number[]): Promise<void> =>\n runSelectionEvent(widget, values, selectInListView, selectByRole);\n\nconst deselectInListView = (widget: Gtk.ListView | Gtk.GridView | Gtk.ColumnView, valueArray: number[]): void => {\n const selectionModel = requireSelectionModel(widget, \"deselect\");\n\n for (const pos of valueArray) {\n selectionModel.unselectItem(pos);\n }\n};\n\nconst deselectByRole = (widget: Gtk.Widget, valueArray: number[]): void => {\n requireSelectableRole(widget, \"deselect\");\n\n if (!hasIndexedChildren(widget)) {\n throw new TypeError(\"Cannot deselect options: the widget exposes no children to deselect by index\");\n }\n\n applyIndexedChildren(widget, valueArray, unselectChildRow);\n};\n\n/**\n * Unselects the items at the given positions in a list, grid, or column view, or unselects the\n * indexed children of a list box or flow box through their container. A child that is not selected\n * is left alone, and no child is activated.\n *\n * @throws When a view has no selection model, when the widget's role is none of COMBO_BOX, GRID, or\n * LIST, or when it exposes no indexed children.\n */\nconst deselectOptions = (widget: Gtk.Widget, values: number | number[]): Promise<void> =>\n runSelectionEvent(widget, values, deselectInListView, deselectByRole);\n\nexport { selectOptions, deselectOptions };\n"]}
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/user-event/selection.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport { formatRoleList } from \"../role-helpers.js\";\nimport { getCallableMethod } from \"../widget-getters.js\";\nimport { wrapEvent } from \"./event-wrapper.js\";\nimport {\n getChildAtIndex,\n hasIndexedChildren,\n isChildSelected,\n selectContainerChild,\n unselectContainerChild,\n} from \"./indexed-children.js\";\n\ntype CollectionWidget = Gtk.ListView | Gtk.GridView | Gtk.ColumnView;\ntype IndexedChildAction = (container: Gtk.Widget, child: Gtk.Widget) => void;\n\nconst SELECTABLE_ROLES: Set<Gtk.AccessibleRole> = new Set([\n Gtk.AccessibleRole.COMBO_BOX,\n Gtk.AccessibleRole.GRID,\n Gtk.AccessibleRole.LIST,\n]);\n\nconst isSelectable = (widget: Gtk.Widget): boolean => SELECTABLE_ROLES.has(widget.getAccessibleRole());\n\nconst selectListViewItems = (\n selectionModel: Gtk.SelectionModel,\n positions: number[],\n isExclusive: boolean,\n): void => {\n if (positions.length === 0) {\n selectionModel.unselectRange(0, selectionModel.getNItems());\n\n return;\n }\n\n const [first] = positions;\n\n if (isExclusive && first !== undefined && positions.length === 1) {\n selectionModel.selectItem(first, true);\n\n return;\n }\n\n const nItems = selectionModel.getNItems();\n const selected = Gtk.Bitset.newEmpty();\n const mask = Gtk.Bitset.newRange(0, nItems);\n\n for (const pos of positions) {\n selected.add(pos);\n }\n\n selectionModel.setSelection(selected, mask);\n};\n\nconst isListView = (widget: Gtk.Widget): widget is CollectionWidget =>\n widget instanceof Gtk.ListView || widget instanceof Gtk.GridView || widget instanceof Gtk.ColumnView;\n\nconst getIndexSelector = (widget: Gtk.Widget): ((position: number) => void) | null =>\n getCallableMethod<[number], unknown>(widget, \"setSelected\");\n\nconst selectDropDownOption = (widget: Gtk.Widget, valueArray: number[]): void => {\n const setSelected = getIndexSelector(widget);\n\n if (!setSelected) {\n throw new TypeError(\"Cannot select options: the COMBO_BOX role needs a widget exposing setSelected\");\n }\n\n if (valueArray.length > 1) {\n throw new Error(\"Cannot select multiple options: a drop-down only supports single selection\");\n }\n\n const [selection] = valueArray;\n\n if (selection !== undefined) {\n setSelected(selection);\n }\n};\n\nconst unselectChildRow = (container: Gtk.Widget, child: Gtk.Widget): void => {\n if (isChildSelected(child)) {\n unselectContainerChild(container, child);\n }\n};\n\nconst applyIndexedChildren = (widget: Gtk.Widget, valueArray: number[], apply: IndexedChildAction): void => {\n for (const value of valueArray) {\n const child = getChildAtIndex(widget, value);\n\n if (child) {\n apply(widget, child);\n }\n }\n};\n\nconst requireSelectionModel = (\n widget: CollectionWidget,\n verb: string,\n): Gtk.SelectionModel => {\n const selectionModel = widget.getModel();\n\n if (selectionModel === null) {\n throw new Error(`Cannot ${verb} options: list view has no selection model`);\n }\n\n return selectionModel;\n};\n\nconst selectInListView = (widget: CollectionWidget, valueArray: number[]): void => {\n const selectionModel = requireSelectionModel(widget, \"select\");\n const isMultiSelection = selectionModel instanceof Gtk.MultiSelection;\n selectListViewItems(selectionModel, valueArray, !isMultiSelection);\n};\n\nconst requireSelectableRole = (widget: Gtk.Widget, verb: string): void => {\n if (!isSelectable(widget)) {\n throw new Error(\n `Cannot ${verb} options: expected selectable widget (${formatRoleList(SELECTABLE_ROLES)})`,\n );\n }\n};\n\nconst selectByRole = (widget: Gtk.Widget, valueArray: number[]): void => {\n requireSelectableRole(widget, \"select\");\n const role = widget.getAccessibleRole();\n\n if (role === Gtk.AccessibleRole.COMBO_BOX) {\n selectDropDownOption(widget, valueArray);\n\n return;\n }\n\n if (!hasIndexedChildren(widget)) {\n throw new TypeError(\"Cannot select options: the widget exposes no children to select by index\");\n }\n\n applyIndexedChildren(widget, valueArray, selectContainerChild);\n};\n\nconst runSelectionEvent = (\n widget: Gtk.Widget,\n values: number | number[],\n inListView: (view: Gtk.ListView | Gtk.GridView | Gtk.ColumnView, valueArray: number[]) => void,\n byRole: (widget: Gtk.Widget, valueArray: number[]) => void,\n): Promise<void> =>\n wrapEvent(widget, () => {\n const valueArray = Array.isArray(values) ? values : [values];\n\n if (isListView(widget)) {\n inListView(widget, valueArray);\n\n return;\n }\n\n byRole(widget, valueArray);\n });\n\n/** Selects positions without activating them. */\nconst selectOptions = (widget: Gtk.Widget, values: number | number[]): Promise<void> =>\n runSelectionEvent(widget, values, selectInListView, selectByRole);\n\nconst deselectInListView = (widget: Gtk.ListView | Gtk.GridView | Gtk.ColumnView, valueArray: number[]): void => {\n const selectionModel = requireSelectionModel(widget, \"deselect\");\n\n for (const pos of valueArray) {\n selectionModel.unselectItem(pos);\n }\n};\n\nconst deselectByRole = (widget: Gtk.Widget, valueArray: number[]): void => {\n requireSelectableRole(widget, \"deselect\");\n\n if (!hasIndexedChildren(widget)) {\n throw new TypeError(\"Cannot deselect options: the widget exposes no children to deselect by index\");\n }\n\n applyIndexedChildren(widget, valueArray, unselectChildRow);\n};\n\n/** Unselects positions without activating them. */\nconst deselectOptions = (widget: Gtk.Widget, values: number | number[]): Promise<void> =>\n runSelectionEvent(widget, values, deselectInListView, deselectByRole);\n\nexport { selectOptions, deselectOptions };\n"]}
@@ -9,44 +9,15 @@ type TypeOptions = {
9
9
  initialSelectionEnd?: number | undefined;
10
10
  };
11
11
  declare const resetClipboard: () => void;
12
- /**
13
- * Focuses the widget unless `shouldFocus` is false, applies any initial selection, and inserts the
14
- * text at the cursor, deleting the text the widget has selected first, the way typing over a
15
- * selection does in GTK4. Focusing works the way clicking into the widget does, leaving its text
16
- * unselected: a `Gtk.Editable` takes its caret to the end of its text, a `Gtk.TextView` keeps the
17
- * caret where it stands, and the replaced text stays on the widget's undo stack either way.
18
- *
19
- * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.
20
- */
12
+ /** Types into an editable widget. */
21
13
  declare const type: (widget: Gtk.Widget, text: string, options?: TypeOptions) => Promise<void>;
22
- /**
23
- * Focuses an editable widget and deletes its whole text through the widget's own editing API, so the
24
- * deletion emits the signals an edit made by hand emits. Text a tag protects is detected before the
25
- * deletion runs, leaving such a widget untouched. A widget that writes a new value back in response
26
- * to the deletion, as an input mask does, is cleared successfully and keeps whatever it wrote.
27
- *
28
- * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView, when it refuses edits, when
29
- * a tag protects part of its text, or when a handler blocks the deletion.
30
- */
14
+ /** Deletes all text from an editable widget. */
31
15
  declare const clear: (widget: Gtk.Widget) => Promise<void>;
32
- /**
33
- * Writes an editable widget's selected text to its clipboard, or the empty string when nothing is selected.
34
- *
35
- * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.
36
- */
16
+ /** Copies the current selection. */
37
17
  declare const copy: (widget: Gtk.Widget) => Promise<void>;
38
- /**
39
- * Writes an editable widget's selected text to its clipboard, then deletes that selection.
40
- *
41
- * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.
42
- */
18
+ /** Cuts the current selection. */
43
19
  declare const cut: (widget: Gtk.Widget) => Promise<void>;
44
- /**
45
- * Inserts the given text at an editable widget's cursor, reading the clipboard instead when no text
46
- * is given, and deleting the text the widget has selected first, the way a paste does in GTK4.
47
- *
48
- * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.
49
- */
20
+ /** Pastes text or clipboard contents. */
50
21
  declare const paste: (widget: Gtk.Widget, text?: string) => Promise<void>;
51
22
  export { resetClipboard, type, clear, copy, cut, paste, type TypeOptions };
52
23
  //# sourceMappingURL=text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/user-event/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAcpC,oCAAoC;AACpC,KAAK,WAAW,GAAG;IACf,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,+FAA+F;IAC/F,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,0EAA0E;IAC1E,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C,CAAC;AAgKF,QAAA,MAAM,cAAc,QAAO,IAE1B,CAAC;AAeF;;;;;;;;GAQG;AACH,QAAA,MAAM,IAAI,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,MAAM,EAAE,UAAU,WAAW,KAAG,OAAO,CAAC,IAAI,CAQ9E,CAAC;AAuEP;;;;;;;;GAQG;AACH,QAAA,MAAM,KAAK,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CACmB,CAAC;AAEpE;;;;GAIG;AACH,QAAA,MAAM,IAAI,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAGzC,CAAC;AAEP;;;;GAIG;AACH,QAAA,MAAM,GAAG,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAIxC,CAAC;AAEP;;;;;GAKG;AACH,QAAA,MAAM,KAAK,GAAU,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAUpE,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/user-event/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAcpC,oCAAoC;AACpC,KAAK,WAAW,GAAG;IACf,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,+FAA+F;IAC/F,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,0EAA0E;IAC1E,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C,CAAC;AAgKF,QAAA,MAAM,cAAc,QAAO,IAE1B,CAAC;AAeF,qCAAqC;AACrC,QAAA,MAAM,IAAI,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,MAAM,EAAE,UAAU,WAAW,KAAG,OAAO,CAAC,IAAI,CAQ9E,CAAC;AAuEP,gDAAgD;AAChD,QAAA,MAAM,KAAK,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CACmB,CAAC;AAEpE,oCAAoC;AACpC,QAAA,MAAM,IAAI,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAGzC,CAAC;AAEP,kCAAkC;AAClC,QAAA,MAAM,GAAG,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAIxC,CAAC;AAEP,yCAAyC;AACzC,QAAA,MAAM,KAAK,GAAU,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAUpE,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,CAAC"}
@@ -128,15 +128,7 @@ const runEditableEvent = (widget, failure, action) => wrapEvent(widget, () => {
128
128
  }
129
129
  action(widget);
130
130
  });
131
- /**
132
- * Focuses the widget unless `shouldFocus` is false, applies any initial selection, and inserts the
133
- * text at the cursor, deleting the text the widget has selected first, the way typing over a
134
- * selection does in GTK4. Focusing works the way clicking into the widget does, leaving its text
135
- * unselected: a `Gtk.Editable` takes its caret to the end of its text, a `Gtk.TextView` keeps the
136
- * caret where it stands, and the replaced text stays on the widget's undo stack either way.
137
- *
138
- * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.
139
- */
131
+ /** Types into an editable widget. */
140
132
  const type = (widget, text, options) => runEditableEvent(widget, "Cannot type into element", (editable) => {
141
133
  if (options?.shouldFocus ?? true) {
142
134
  focusEditable(editable);
@@ -195,39 +187,18 @@ const clearEditable = (editable) => {
195
187
  throw new Error(CLEAR_REFUSED);
196
188
  }
197
189
  };
198
- /**
199
- * Focuses an editable widget and deletes its whole text through the widget's own editing API, so the
200
- * deletion emits the signals an edit made by hand emits. Text a tag protects is detected before the
201
- * deletion runs, leaving such a widget untouched. A widget that writes a new value back in response
202
- * to the deletion, as an input mask does, is cleared successfully and keeps whatever it wrote.
203
- *
204
- * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView, when it refuses edits, when
205
- * a tag protects part of its text, or when a handler blocks the deletion.
206
- */
190
+ /** Deletes all text from an editable widget. */
207
191
  const clear = (widget) => runEditableEvent(widget, "Cannot clear element", clearEditable);
208
- /**
209
- * Writes an editable widget's selected text to its clipboard, or the empty string when nothing is selected.
210
- *
211
- * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.
212
- */
192
+ /** Copies the current selection. */
213
193
  const copy = (widget) => runEditableEvent(widget, "Cannot copy", (editable) => {
214
194
  writeClipboardText(editable, readSelection(editable));
215
195
  });
216
- /**
217
- * Writes an editable widget's selected text to its clipboard, then deletes that selection.
218
- *
219
- * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.
220
- */
196
+ /** Cuts the current selection. */
221
197
  const cut = (widget) => runEditableEvent(widget, "Cannot cut", (editable) => {
222
198
  writeClipboardText(editable, readSelection(editable));
223
199
  deleteSelection(editable);
224
200
  });
225
- /**
226
- * Inserts the given text at an editable widget's cursor, reading the clipboard instead when no text
227
- * is given, and deleting the text the widget has selected first, the way a paste does in GTK4.
228
- *
229
- * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.
230
- */
201
+ /** Pastes text or clipboard contents. */
231
202
  const paste = async (widget, text) => {
232
203
  if (!isEditable(widget)) {
233
204
  throw new Error(`Cannot paste: ${EDITABLE_REQUIRED}`);
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/user-event/text.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gdk from \"@gtkx/gi/gdk\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { EDITABLE_ROLES, type EditableTarget, getEditableDelegate, isEditable, readEditableText } from \"../editable.js\";\nimport { formatRoleList } from \"../role-helpers.js\";\nimport { getWidgetSelection } from \"../widget-accessible-properties.js\";\nimport { callBooleanGetter } from \"../widget-getters.js\";\nimport { wrapEvent } from \"./event-wrapper.js\";\n\ntype SignalWatchTarget = {\n on(signal: string, handler: (...args: unknown[]) => unknown, isAfter?: boolean): unknown;\n off(signal: string, handler: (...args: unknown[]) => unknown): unknown;\n};\n\ntype InsertKind = \"typing\" | \"pasting\";\n\n/** Options for `userEvent.type`. */\ntype TypeOptions = {\n /** Focus the widget before typing; defaults to true. */\n shouldFocus?: boolean | undefined;\n /** Select from this offset before typing, replacing the selected range with the typed text. */\n initialSelectionStart?: number | undefined;\n /** End offset of the initial selection (defaults to the start offset). */\n initialSelectionEnd?: number | undefined;\n};\n\nconst EDITABLE_REQUIRED = `expected editable widget (${formatRoleList(EDITABLE_ROLES)})`;\nconst CLEAR_REFUSED = \"Cannot clear element: the widget refuses to delete part of its text\";\nconst SELECTION_DELETE_COUNT = 1;\nconst SINGLE_CHARACTER_LENGTH = 1;\nconst TEXT_END_POSITION = -1;\n\nconst isWidgetEditable = (widget: Gtk.Widget): boolean => callBooleanGetter(widget, \"getEditable\") ?? true;\nconst readSelection = (widget: EditableTarget): string => getWidgetSelection(widget) ?? \"\";\nconst hasSelectedText = (widget: Gtk.Editable): boolean => widget.getSelectionBounds()[0];\n\nconst getDelegateText = (widget: Gtk.Editable): Gtk.Text | null => {\n const delegate = getEditableDelegate(widget) ?? widget;\n\n return delegate instanceof Gtk.Text ? delegate : null;\n};\n\nconst getSelectionLength = (buffer: Gtk.TextBuffer): number => {\n const [isSelected, start, end] = buffer.getSelectionBounds();\n\n return isSelected ? end.getOffset() - start.getOffset() : 0;\n};\n\nconst deleteSelection = (widget: EditableTarget): void => {\n if (widget instanceof Gtk.TextView) {\n widget.getBuffer().deleteSelection(false, true);\n\n return;\n }\n\n widget.deleteSelection();\n};\n\nconst focusPlainEditable = (widget: Gtk.Editable): void => {\n const [isSelected, start, end] = widget.getSelectionBounds();\n widget.grabFocus();\n\n if (isSelected) {\n widget.selectRegion(start, end);\n\n return;\n }\n\n widget.setPosition(TEXT_END_POSITION);\n};\n\nconst focusEditable = (widget: EditableTarget): void => {\n if (widget instanceof Gtk.TextView) {\n widget.grabFocus();\n\n return;\n }\n\n const target = getDelegateText(widget);\n\n if (target === null) {\n focusPlainEditable(widget);\n\n return;\n }\n\n target.grabFocusWithoutSelecting();\n\n if (!hasSelectedText(widget)) {\n widget.setPosition(TEXT_END_POSITION);\n }\n};\n\nconst insertTextViewText = (widget: Gtk.TextView, text: string, kind: InsertKind): void => {\n const buffer = widget.getBuffer();\n const length = getSelectionLength(buffer);\n buffer.beginUserAction();\n\n if (length > 0) {\n widget.emit(\"delete-from-cursor\", Gtk.DeleteType.CHARS, SELECTION_DELETE_COUNT);\n\n if (kind === \"typing\" && length > SINGLE_CHARACTER_LENGTH) {\n buffer.endUserAction();\n buffer.beginUserAction();\n }\n }\n\n widget.emit(\"insert-at-cursor\", text);\n buffer.endUserAction();\n};\n\nconst insertDelegateText = (target: Gtk.Text, text: string): void => {\n if (hasSelectedText(target)) {\n target.emit(\"delete-from-cursor\", Gtk.DeleteType.CHARS, SELECTION_DELETE_COUNT);\n }\n\n target.emit(\"insert-at-cursor\", text);\n};\n\nconst insertPlainText = (widget: Gtk.Editable, text: string): void => {\n if (!isWidgetEditable(widget)) {\n return;\n }\n\n if (hasSelectedText(widget)) {\n widget.deleteSelection();\n }\n\n const position = widget.getPosition();\n const newPosition = widget.insertText(text, text.length, position);\n widget.setPosition(newPosition);\n};\n\nconst insertEditableText = (widget: EditableTarget, text: string, kind: InsertKind): void => {\n if (widget instanceof Gtk.TextView) {\n insertTextViewText(widget, text, kind);\n\n return;\n }\n\n const target = getDelegateText(widget);\n\n if (target === null) {\n insertPlainText(widget, text);\n\n return;\n }\n\n insertDelegateText(target, text);\n};\n\nconst deleteAllText = (widget: EditableTarget): void => {\n if (widget instanceof Gtk.TextView) {\n const buffer = widget.getBuffer();\n buffer.deleteInteractive(buffer.getStartIter(), buffer.getEndIter(), widget.getEditable());\n\n return;\n }\n\n widget.deleteText(0, -1);\n};\n\nconst applyInitialSelection = (widget: EditableTarget, options: TypeOptions): void => {\n if (options.initialSelectionStart === undefined) {\n return;\n }\n\n const start = options.initialSelectionStart;\n const end = options.initialSelectionEnd ?? start;\n\n if (widget instanceof Gtk.TextView) {\n const buffer = widget.getBuffer();\n buffer.selectRange(buffer.getIterAtOffset(start), buffer.getIterAtOffset(end));\n\n return;\n }\n\n widget.selectRegion(start, end);\n};\n\nconst writeClipboardText = (widget: Gtk.Widget, text: string): void => {\n widget.getClipboard().set(text);\n};\n\nconst resetClipboard = (): void => {\n Gdk.Display.getDefault()?.getClipboard().setContent(null);\n};\n\nconst runEditableEvent = (\n widget: Gtk.Widget,\n failure: string,\n action: (editable: EditableTarget) => void,\n): Promise<void> =>\n wrapEvent(widget, () => {\n if (!isEditable(widget)) {\n throw new Error(`${failure}: ${EDITABLE_REQUIRED}`);\n }\n\n action(widget);\n });\n\n/**\n * Focuses the widget unless `shouldFocus` is false, applies any initial selection, and inserts the\n * text at the cursor, deleting the text the widget has selected first, the way typing over a\n * selection does in GTK4. Focusing works the way clicking into the widget does, leaving its text\n * unselected: a `Gtk.Editable` takes its caret to the end of its text, a `Gtk.TextView` keeps the\n * caret where it stands, and the replaced text stays on the widget's undo stack either way.\n *\n * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.\n */\nconst type = (widget: Gtk.Widget, text: string, options?: TypeOptions): Promise<void> =>\n runEditableEvent(widget, \"Cannot type into element\", (editable) => {\n if (options?.shouldFocus ?? true) {\n focusEditable(editable);\n }\n\n applyInitialSelection(editable, options ?? {});\n insertEditableText(editable, text, \"typing\");\n });\n\nconst hasNonEditableChar = (iter: Gtk.TextIter, isDefaultEditable: boolean): boolean => {\n while (!iter.isEnd()) {\n if (!iter.editable(isDefaultEditable)) {\n return true;\n }\n\n if (!iter.forwardChar()) {\n return false;\n }\n }\n\n return false;\n};\n\nconst hasProtectedText = (widget: EditableTarget): boolean =>\n widget instanceof Gtk.TextView && hasNonEditableChar(widget.getBuffer().getStartIter(), widget.getEditable());\n\nconst requireClearableText = (editable: EditableTarget): void => {\n if (!isWidgetEditable(editable)) {\n throw new Error(\"Cannot clear element: the widget is not editable\");\n }\n\n if (hasProtectedText(editable)) {\n throw new Error(CLEAR_REFUSED);\n }\n};\n\nconst deletionSignalFor = (widget: EditableTarget): [SignalWatchTarget, string] =>\n widget instanceof Gtk.TextView ? [widget.getBuffer(), \"delete-range\"] : [widget, \"delete-text\"];\n\nconst isDeletionApplied = (emitter: SignalWatchTarget, signal: string, apply: () => void): boolean => {\n let isApplied = false;\n\n const watch = (): void => {\n isApplied = true;\n };\n\n emitter.on(signal, watch, true);\n\n try {\n apply();\n } finally {\n emitter.off(signal, watch);\n }\n\n return isApplied;\n};\n\nconst didDeleteAllText = (widget: EditableTarget): boolean => {\n const [emitter, signal] = deletionSignalFor(widget);\n\n return isDeletionApplied(emitter, signal, () => {\n deleteAllText(widget);\n });\n};\n\nconst clearEditable = (editable: EditableTarget): void => {\n requireClearableText(editable);\n focusEditable(editable);\n\n if (readEditableText(editable) === \"\") {\n return;\n }\n\n if (!didDeleteAllText(editable)) {\n throw new Error(CLEAR_REFUSED);\n }\n};\n\n/**\n * Focuses an editable widget and deletes its whole text through the widget's own editing API, so the\n * deletion emits the signals an edit made by hand emits. Text a tag protects is detected before the\n * deletion runs, leaving such a widget untouched. A widget that writes a new value back in response\n * to the deletion, as an input mask does, is cleared successfully and keeps whatever it wrote.\n *\n * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView, when it refuses edits, when\n * a tag protects part of its text, or when a handler blocks the deletion.\n */\nconst clear = (widget: Gtk.Widget): Promise<void> =>\n runEditableEvent(widget, \"Cannot clear element\", clearEditable);\n\n/**\n * Writes an editable widget's selected text to its clipboard, or the empty string when nothing is selected.\n *\n * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.\n */\nconst copy = (widget: Gtk.Widget): Promise<void> =>\n runEditableEvent(widget, \"Cannot copy\", (editable) => {\n writeClipboardText(editable, readSelection(editable));\n });\n\n/**\n * Writes an editable widget's selected text to its clipboard, then deletes that selection.\n *\n * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.\n */\nconst cut = (widget: Gtk.Widget): Promise<void> =>\n runEditableEvent(widget, \"Cannot cut\", (editable) => {\n writeClipboardText(editable, readSelection(editable));\n deleteSelection(editable);\n });\n\n/**\n * Inserts the given text at an editable widget's cursor, reading the clipboard instead when no text\n * is given, and deleting the text the widget has selected first, the way a paste does in GTK4.\n *\n * @throws When the widget is neither a Gtk.Editable nor a Gtk.TextView.\n */\nconst paste = async (widget: Gtk.Widget, text?: string): Promise<void> => {\n if (!isEditable(widget)) {\n throw new Error(`Cannot paste: ${EDITABLE_REQUIRED}`);\n }\n\n const content = text ?? (await widget.getClipboard().readTextAsync(null)) ?? \"\";\n\n await wrapEvent(widget, () => {\n insertEditableText(widget, content, \"pasting\");\n });\n};\n\nexport { resetClipboard, type, clear, copy, cut, paste, type TypeOptions };\n"]}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/user-event/text.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gdk from \"@gtkx/gi/gdk\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { EDITABLE_ROLES, type EditableTarget, getEditableDelegate, isEditable, readEditableText } from \"../editable.js\";\nimport { formatRoleList } from \"../role-helpers.js\";\nimport { getWidgetSelection } from \"../widget-accessible-properties.js\";\nimport { callBooleanGetter } from \"../widget-getters.js\";\nimport { wrapEvent } from \"./event-wrapper.js\";\n\ntype SignalWatchTarget = {\n on(signal: string, handler: (...args: unknown[]) => unknown, isAfter?: boolean): unknown;\n off(signal: string, handler: (...args: unknown[]) => unknown): unknown;\n};\n\ntype InsertKind = \"typing\" | \"pasting\";\n\n/** Options for `userEvent.type`. */\ntype TypeOptions = {\n /** Focus the widget before typing; defaults to true. */\n shouldFocus?: boolean | undefined;\n /** Select from this offset before typing, replacing the selected range with the typed text. */\n initialSelectionStart?: number | undefined;\n /** End offset of the initial selection (defaults to the start offset). */\n initialSelectionEnd?: number | undefined;\n};\n\nconst EDITABLE_REQUIRED = `expected editable widget (${formatRoleList(EDITABLE_ROLES)})`;\nconst CLEAR_REFUSED = \"Cannot clear element: the widget refuses to delete part of its text\";\nconst SELECTION_DELETE_COUNT = 1;\nconst SINGLE_CHARACTER_LENGTH = 1;\nconst TEXT_END_POSITION = -1;\n\nconst isWidgetEditable = (widget: Gtk.Widget): boolean => callBooleanGetter(widget, \"getEditable\") ?? true;\nconst readSelection = (widget: EditableTarget): string => getWidgetSelection(widget) ?? \"\";\nconst hasSelectedText = (widget: Gtk.Editable): boolean => widget.getSelectionBounds()[0];\n\nconst getDelegateText = (widget: Gtk.Editable): Gtk.Text | null => {\n const delegate = getEditableDelegate(widget) ?? widget;\n\n return delegate instanceof Gtk.Text ? delegate : null;\n};\n\nconst getSelectionLength = (buffer: Gtk.TextBuffer): number => {\n const [isSelected, start, end] = buffer.getSelectionBounds();\n\n return isSelected ? end.getOffset() - start.getOffset() : 0;\n};\n\nconst deleteSelection = (widget: EditableTarget): void => {\n if (widget instanceof Gtk.TextView) {\n widget.getBuffer().deleteSelection(false, true);\n\n return;\n }\n\n widget.deleteSelection();\n};\n\nconst focusPlainEditable = (widget: Gtk.Editable): void => {\n const [isSelected, start, end] = widget.getSelectionBounds();\n widget.grabFocus();\n\n if (isSelected) {\n widget.selectRegion(start, end);\n\n return;\n }\n\n widget.setPosition(TEXT_END_POSITION);\n};\n\nconst focusEditable = (widget: EditableTarget): void => {\n if (widget instanceof Gtk.TextView) {\n widget.grabFocus();\n\n return;\n }\n\n const target = getDelegateText(widget);\n\n if (target === null) {\n focusPlainEditable(widget);\n\n return;\n }\n\n target.grabFocusWithoutSelecting();\n\n if (!hasSelectedText(widget)) {\n widget.setPosition(TEXT_END_POSITION);\n }\n};\n\nconst insertTextViewText = (widget: Gtk.TextView, text: string, kind: InsertKind): void => {\n const buffer = widget.getBuffer();\n const length = getSelectionLength(buffer);\n buffer.beginUserAction();\n\n if (length > 0) {\n widget.emit(\"delete-from-cursor\", Gtk.DeleteType.CHARS, SELECTION_DELETE_COUNT);\n\n if (kind === \"typing\" && length > SINGLE_CHARACTER_LENGTH) {\n buffer.endUserAction();\n buffer.beginUserAction();\n }\n }\n\n widget.emit(\"insert-at-cursor\", text);\n buffer.endUserAction();\n};\n\nconst insertDelegateText = (target: Gtk.Text, text: string): void => {\n if (hasSelectedText(target)) {\n target.emit(\"delete-from-cursor\", Gtk.DeleteType.CHARS, SELECTION_DELETE_COUNT);\n }\n\n target.emit(\"insert-at-cursor\", text);\n};\n\nconst insertPlainText = (widget: Gtk.Editable, text: string): void => {\n if (!isWidgetEditable(widget)) {\n return;\n }\n\n if (hasSelectedText(widget)) {\n widget.deleteSelection();\n }\n\n const position = widget.getPosition();\n const newPosition = widget.insertText(text, text.length, position);\n widget.setPosition(newPosition);\n};\n\nconst insertEditableText = (widget: EditableTarget, text: string, kind: InsertKind): void => {\n if (widget instanceof Gtk.TextView) {\n insertTextViewText(widget, text, kind);\n\n return;\n }\n\n const target = getDelegateText(widget);\n\n if (target === null) {\n insertPlainText(widget, text);\n\n return;\n }\n\n insertDelegateText(target, text);\n};\n\nconst deleteAllText = (widget: EditableTarget): void => {\n if (widget instanceof Gtk.TextView) {\n const buffer = widget.getBuffer();\n buffer.deleteInteractive(buffer.getStartIter(), buffer.getEndIter(), widget.getEditable());\n\n return;\n }\n\n widget.deleteText(0, -1);\n};\n\nconst applyInitialSelection = (widget: EditableTarget, options: TypeOptions): void => {\n if (options.initialSelectionStart === undefined) {\n return;\n }\n\n const start = options.initialSelectionStart;\n const end = options.initialSelectionEnd ?? start;\n\n if (widget instanceof Gtk.TextView) {\n const buffer = widget.getBuffer();\n buffer.selectRange(buffer.getIterAtOffset(start), buffer.getIterAtOffset(end));\n\n return;\n }\n\n widget.selectRegion(start, end);\n};\n\nconst writeClipboardText = (widget: Gtk.Widget, text: string): void => {\n widget.getClipboard().set(text);\n};\n\nconst resetClipboard = (): void => {\n Gdk.Display.getDefault()?.getClipboard().setContent(null);\n};\n\nconst runEditableEvent = (\n widget: Gtk.Widget,\n failure: string,\n action: (editable: EditableTarget) => void,\n): Promise<void> =>\n wrapEvent(widget, () => {\n if (!isEditable(widget)) {\n throw new Error(`${failure}: ${EDITABLE_REQUIRED}`);\n }\n\n action(widget);\n });\n\n/** Types into an editable widget. */\nconst type = (widget: Gtk.Widget, text: string, options?: TypeOptions): Promise<void> =>\n runEditableEvent(widget, \"Cannot type into element\", (editable) => {\n if (options?.shouldFocus ?? true) {\n focusEditable(editable);\n }\n\n applyInitialSelection(editable, options ?? {});\n insertEditableText(editable, text, \"typing\");\n });\n\nconst hasNonEditableChar = (iter: Gtk.TextIter, isDefaultEditable: boolean): boolean => {\n while (!iter.isEnd()) {\n if (!iter.editable(isDefaultEditable)) {\n return true;\n }\n\n if (!iter.forwardChar()) {\n return false;\n }\n }\n\n return false;\n};\n\nconst hasProtectedText = (widget: EditableTarget): boolean =>\n widget instanceof Gtk.TextView && hasNonEditableChar(widget.getBuffer().getStartIter(), widget.getEditable());\n\nconst requireClearableText = (editable: EditableTarget): void => {\n if (!isWidgetEditable(editable)) {\n throw new Error(\"Cannot clear element: the widget is not editable\");\n }\n\n if (hasProtectedText(editable)) {\n throw new Error(CLEAR_REFUSED);\n }\n};\n\nconst deletionSignalFor = (widget: EditableTarget): [SignalWatchTarget, string] =>\n widget instanceof Gtk.TextView ? [widget.getBuffer(), \"delete-range\"] : [widget, \"delete-text\"];\n\nconst isDeletionApplied = (emitter: SignalWatchTarget, signal: string, apply: () => void): boolean => {\n let isApplied = false;\n\n const watch = (): void => {\n isApplied = true;\n };\n\n emitter.on(signal, watch, true);\n\n try {\n apply();\n } finally {\n emitter.off(signal, watch);\n }\n\n return isApplied;\n};\n\nconst didDeleteAllText = (widget: EditableTarget): boolean => {\n const [emitter, signal] = deletionSignalFor(widget);\n\n return isDeletionApplied(emitter, signal, () => {\n deleteAllText(widget);\n });\n};\n\nconst clearEditable = (editable: EditableTarget): void => {\n requireClearableText(editable);\n focusEditable(editable);\n\n if (readEditableText(editable) === \"\") {\n return;\n }\n\n if (!didDeleteAllText(editable)) {\n throw new Error(CLEAR_REFUSED);\n }\n};\n\n/** Deletes all text from an editable widget. */\nconst clear = (widget: Gtk.Widget): Promise<void> =>\n runEditableEvent(widget, \"Cannot clear element\", clearEditable);\n\n/** Copies the current selection. */\nconst copy = (widget: Gtk.Widget): Promise<void> =>\n runEditableEvent(widget, \"Cannot copy\", (editable) => {\n writeClipboardText(editable, readSelection(editable));\n });\n\n/** Cuts the current selection. */\nconst cut = (widget: Gtk.Widget): Promise<void> =>\n runEditableEvent(widget, \"Cannot cut\", (editable) => {\n writeClipboardText(editable, readSelection(editable));\n deleteSelection(editable);\n });\n\n/** Pastes text or clipboard contents. */\nconst paste = async (widget: Gtk.Widget, text?: string): Promise<void> => {\n if (!isEditable(widget)) {\n throw new Error(`Cannot paste: ${EDITABLE_REQUIRED}`);\n }\n\n const content = text ?? (await widget.getClipboard().readTextAsync(null)) ?? \"\";\n\n await wrapEvent(widget, () => {\n insertEditableText(widget, content, \"pasting\");\n });\n};\n\nexport { resetClipboard, type, clear, copy, cut, paste, type TypeOptions };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"widget-accessible-properties.d.ts","sourceRoot":"","sources":["../src/widget-accessible-properties.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"widget-accessible-properties.d.ts","sourceRoot":"","sources":["../src/widget-accessible-properties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAgBpC,KAAK,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC9C,KAAK,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAkEtD;;;;;GAKG;AACH,QAAA,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAAmD,CAAC;AAEzG,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAQtD,CAAC;AAyBF,QAAA,MAAM,kBAAkB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAMzD,CAAC;AAYF,QAAA,MAAM,oBAAoB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAI3D,CAAC;AA6CF,QAAA,MAAM,uBAAuB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAkB9D,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAAwB,CAAC;AAU9E,QAAA,MAAM,wBAAwB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAU/D,CAAC;AAOF,QAAA,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAU5D,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAI7C,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAgC,CAAC;AAgBhF,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAgE,CAAC;AAE/G,QAAA,MAAM,sBAAsB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IACW,CAAC;AAkC3E,QAAA,MAAM,kBAAkB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACuC,CAAC;AAKlG,QAAA,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,YAAY,GAAG,IAalE,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAIvD,CAAC;AAEF,QAAA,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAI7D,CAAC;AAEF,QAAA,MAAM,sBAAsB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAM9D,CAAC;AAEF,QAAA,MAAM,sBAAsB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAY9D,CAAC;AAEF,QAAA,MAAM,cAAc,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACK,CAAC;AAE5D,QAAA,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,GAAG,CAAC,sBAAsB,GAAG,IACrB,CAAC;AAE7D,QAAA,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,GAAG,CAAC,MAAM,EAAE,GAAG,IACI,CAAC;AAExE,QAAA,MAAM,kBAAkB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IACA,CAAC;AAE5D,QAAA,MAAM,oBAAoB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACQ,CAAC;AAErE,QAAA,MAAM,iBAAiB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACS,CAAC;AAEnE,QAAA,MAAM,kBAAkB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACS,CAAC;AAEpE,QAAA,MAAM,kBAAkB,GAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,gBAAgB,EAAE,UAAU,MAAM,KAAG,OACtB,CAAC;AAEvE,QAAA,MAAM,iBAAiB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IACK,CAAC;AAa/D,QAAA,MAAM,uBAAuB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAU9D,CAAC;AAEF,QAAA,MAAM,0BAA0B,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAIjE,CAAC;AAOF,QAAA,MAAM,wBAAwB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAe/D,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,cAAc,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAY5C,CAAC;AAEF,OAAO,EACH,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACvB,aAAa,EACb,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACxB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import * as Gtk from "@gtkx/gi/gtk";
2
- import { isAccessibleNumberMatch, readAccessibleBooleanProperty, readAccessibleFlag, readAccessibleInt, readAccessibleRelation, readAccessibleState, readAccessibleNumber as readNativeNumber, readAccessibleString as readNativeString, } from "./accessible-native.js";
2
+ import { isAccessibleNumberMatch, readAccessibleBooleanProperty, readAccessibleFlag, readAccessibleInt, readAccessibleNumber, readAccessibleRelation, readAccessibleState, readAccessibleString, } from "./accessible-native.js";
3
3
  import { EDITABLE_ROLES, isEditable, readEditableText } from "./editable.js";
4
4
  import { isNameFromAuthor, isNameProhibited } from "./role-naming.js";
5
5
  import { children, descendants, relationCandidates } from "./traversal.js";
@@ -27,8 +27,6 @@ const VALUE_PROPERTIES = {
27
27
  min: Gtk.AccessibleProperty.VALUE_MIN,
28
28
  max: Gtk.AccessibleProperty.VALUE_MAX,
29
29
  };
30
- const readAccessibleString = (widget, property) => readNativeString(widget, property);
31
- const readAccessibleNumber = (widget, property) => readNativeNumber(widget, property);
32
30
  const readAccessibleWidgets = (widget, relation) => {
33
31
  const targets = readAccessibleRelation(widget, relation, relationCandidates(widget));
34
32
  const widgets = targets.filter((target) => target instanceof Gtk.Widget);
@@ -141,9 +139,7 @@ const getWidgetAccessibleName = (widget) => {
141
139
  }
142
140
  return nameFromContent(widget) ?? callStringGetter(widget, "getTooltipText");
143
141
  };
144
- const getWidgetName = (widget) => {
145
- return widget.getName();
146
- };
142
+ const getWidgetName = (widget) => widget.getName();
147
143
  const nonEmptyText = (text) => (text === null || text === "" ? null : text);
148
144
  const readPlaceholderProperty = (widget) => {
149
145
  const value = Reflect.get(widget, "placeholderText");
@@ -209,7 +205,6 @@ const readBoundedSelection = (widget) => {
209
205
  return hasSelection ? sliceSelectedText(widget, start, end) : null;
210
206
  };
211
207
  const getWidgetSelection = (widget) => widget instanceof Gtk.TextView ? readTextViewSelection(widget) : readBoundedSelection(widget);
212
- const checkedFromActive = (isActive) => (isActive ? "checked" : "unchecked");
213
208
  const isRadioToggle = (widget) => widget instanceof Gtk.ToggleButton && widget.getAccessibleRole() === Gtk.AccessibleRole.RADIO;
214
209
  const getWidgetCheckedState = (widget) => {
215
210
  const tristate = readAccessibleState(widget, Gtk.AccessibleState.CHECKED);
@@ -217,7 +212,10 @@ const getWidgetCheckedState = (widget) => {
217
212
  if (state !== undefined) {
218
213
  return state;
219
214
  }
220
- return isRadioToggle(widget) ? checkedFromActive(widget.getActive()) : null;
215
+ if (!isRadioToggle(widget)) {
216
+ return null;
217
+ }
218
+ return widget.getActive() ? "checked" : "unchecked";
221
219
  };
222
220
  const isWidgetChecked = (widget) => {
223
221
  const state = getWidgetCheckedState(widget);
@@ -243,36 +241,18 @@ const getWidgetSelectedState = (widget) => {
243
241
  }
244
242
  return null;
245
243
  };
246
- const getWidgetLevel = (widget) => {
247
- return readAccessibleInt(widget, Gtk.AccessibleProperty.LEVEL);
248
- };
249
- const getWidgetInvalidState = (widget) => {
250
- const value = readAccessibleState(widget, Gtk.AccessibleState.INVALID);
251
- return value ?? null;
252
- };
244
+ const getWidgetLevel = (widget) => readAccessibleInt(widget, Gtk.AccessibleProperty.LEVEL);
245
+ const getWidgetInvalidState = (widget) => readAccessibleState(widget, Gtk.AccessibleState.INVALID);
253
246
  const getWidgetErrorMessage = (widget) => readAccessibleWidgets(widget, Gtk.AccessibleRelation.ERROR_MESSAGE);
254
- const getWidgetBusyState = (widget) => {
255
- return readAccessibleBoolean(widget, Gtk.AccessibleState.BUSY);
256
- };
257
- const getWidgetDescription = (widget) => {
258
- return readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);
259
- };
247
+ const getWidgetBusyState = (widget) => readAccessibleBoolean(widget, Gtk.AccessibleState.BUSY);
248
+ const getWidgetDescription = (widget) => readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);
260
249
  const getWidgetValueNow = (widget) => readAccessibleNumber(widget, Gtk.AccessibleProperty.VALUE_NOW);
261
250
  const getWidgetValueText = (widget) => readAccessibleString(widget, Gtk.AccessibleProperty.VALUE_TEXT);
262
251
  const isWidgetValueMatch = (widget, field, expected) => isAccessibleNumberMatch(widget, VALUE_PROPERTIES[field], expected);
263
- const getWidgetOwnLabel = (widget) => {
264
- return readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);
265
- };
266
- const collectAccessibleNames = (targets) => {
267
- const texts = [];
268
- for (const target of targets) {
269
- const text = getWidgetAccessibleName(target);
270
- if (text) {
271
- texts.push(text);
272
- }
273
- }
274
- return texts;
275
- };
252
+ const getWidgetOwnLabel = (widget) => readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);
253
+ const collectAccessibleNames = (targets) => targets
254
+ .map((target) => getWidgetAccessibleName(target))
255
+ .filter((text) => text !== null && text !== "");
276
256
  const isSelfLabelling = (widget, targets) => {
277
257
  const own = new Set(descendants(widget));
278
258
  return targets.every((target) => own.has(target));
@@ -1 +1 @@
1
- {"version":3,"file":"widget-accessible-properties.js","sourceRoot":"","sources":["../src/widget-accessible-properties.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport {\n isAccessibleNumberMatch,\n readAccessibleBooleanProperty,\n readAccessibleFlag,\n readAccessibleInt,\n readAccessibleRelation,\n readAccessibleState,\n readAccessibleNumber as readNativeNumber,\n readAccessibleString as readNativeString,\n} from \"./accessible-native.js\";\nimport { EDITABLE_ROLES, isEditable, readEditableText } from \"./editable.js\";\nimport { isNameFromAuthor, isNameProhibited } from \"./role-naming.js\";\nimport { children, descendants, relationCandidates } from \"./traversal.js\";\nimport { callBooleanGetter, callStringGetter, getCallableMethod } from \"./widget-getters.js\";\n\ntype WidgetValueField = \"now\" | \"min\" | \"max\";\ntype CheckedState = \"checked\" | \"unchecked\" | \"mixed\";\n\nconst EDITABLE_TEXT_GETTER = \"getText\";\nconst DEFAULT_TEXT_GETTERS = [\"getLabel\", EDITABLE_TEXT_GETTER, \"getTitle\"];\n\nconst SELECTABLE_ROLES: Set<Gtk.AccessibleRole> = new Set<Gtk.AccessibleRole>([\n Gtk.AccessibleRole.ROW,\n Gtk.AccessibleRole.LIST_ITEM,\n Gtk.AccessibleRole.GRID_CELL,\n Gtk.AccessibleRole.OPTION,\n Gtk.AccessibleRole.TREE_ITEM,\n]);\n\nconst PRESSED_BY_TRISTATE: Map<number, boolean> = new Map<number, boolean>([\n [Gtk.AccessibleTristate.FALSE, false],\n [Gtk.AccessibleTristate.TRUE, true],\n]);\n\nconst CHECKED_BY_TRISTATE: Map<number, CheckedState> = new Map<number, CheckedState>([\n [Gtk.AccessibleTristate.FALSE, \"unchecked\"],\n [Gtk.AccessibleTristate.TRUE, \"checked\"],\n [Gtk.AccessibleTristate.MIXED, \"mixed\"],\n]);\n\nconst VALUE_PROPERTIES: Record<WidgetValueField, Gtk.AccessibleProperty> = {\n now: Gtk.AccessibleProperty.VALUE_NOW,\n min: Gtk.AccessibleProperty.VALUE_MIN,\n max: Gtk.AccessibleProperty.VALUE_MAX,\n};\n\nconst readAccessibleString = (widget: Gtk.Widget, property: Gtk.AccessibleProperty): string | null =>\n readNativeString(widget, property);\n\nconst readAccessibleNumber = (widget: Gtk.Widget, property: Gtk.AccessibleProperty): number | null =>\n readNativeNumber(widget, property);\n\nconst readAccessibleWidgets = (widget: Gtk.Widget, relation: Gtk.AccessibleRelation): Gtk.Widget[] | null => {\n const targets = readAccessibleRelation(widget, relation, relationCandidates(widget));\n const widgets = targets.filter((target): target is Gtk.Widget => target instanceof Gtk.Widget);\n\n return widgets.length > 0 ? widgets : null;\n};\n\nconst readAccessibleBoolean = (widget: Gtk.Widget, state: Gtk.AccessibleState): boolean | null =>\n readAccessibleFlag(widget, state);\n\nconst getLabelText = (widget: Gtk.Widget): string | null => {\n if (widget instanceof Gtk.Label) {\n return widget.getLabel();\n }\n\n return readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n};\n\nconst stripMnemonic = (text: string): string => text.replaceAll(/_(.)/g, \"$1\");\nconst isUnderlineUsed = (widget: Gtk.Widget): boolean => callBooleanGetter(widget, \"getUseUnderline\") ?? false;\n\nconst readNamingText = (widget: Gtk.Widget, getter: string, value: string): string =>\n getter !== EDITABLE_TEXT_GETTER && isUnderlineUsed(widget) ? stripMnemonic(value) : value;\n\nconst readFirstText = (widget: Gtk.Widget, getters: string[]): string | null => {\n for (const getter of getters) {\n const value = callStringGetter(widget, getter);\n\n if (value) {\n return readNamingText(widget, getter, value);\n }\n }\n\n return null;\n};\n\n/**\n * Returns a widget's own text by trying its label, text, and title getters in\n * order, or null when none produce a value.\n *\n * @param widget The widget to read text from.\n */\nconst getWidgetText = (widget: Gtk.Widget): string | null => readFirstText(widget, DEFAULT_TEXT_GETTERS);\n\nconst namingLabelText = (widget: Gtk.Widget): string | null => {\n const text = getLabelText(widget);\n\n if (text === null) {\n return null;\n }\n\n return isUnderlineUsed(widget) ? stripMnemonic(text) : text;\n};\n\nconst isNamingLabelRole = (role: Gtk.AccessibleRole, shouldIncludePresentation: boolean): boolean =>\n role === Gtk.AccessibleRole.LABEL ||\n (shouldIncludePresentation && role === Gtk.AccessibleRole.PRESENTATION);\n\nconst collectLabels = (widget: Gtk.Widget): string[] => {\n const isIncludePresentation = widget.getAccessibleRole() === Gtk.AccessibleRole.MENU_ITEM;\n const labels: string[] = [];\n\n for (const descendant of descendants(widget)) {\n if (!isNamingLabelRole(descendant.getAccessibleRole(), isIncludePresentation)) {\n continue;\n }\n\n const labelText = namingLabelText(descendant);\n\n if (labelText) {\n labels.push(labelText);\n }\n }\n\n return labels;\n};\n\nconst getWidgetLabelText = (widget: Gtk.Widget): string | null => {\n if (widget.getAccessibleRole() !== Gtk.AccessibleRole.LABEL) {\n return null;\n }\n\n return namingLabelText(widget);\n};\n\nconst textContentParts = (widget: Gtk.Widget): string[] => {\n const own = getWidgetText(widget);\n\n if (own !== null) {\n return [own];\n }\n\n return [...children(widget)].flatMap((child) => textContentParts(child));\n};\n\nconst getWidgetTextContent = (widget: Gtk.Widget): string | null => {\n const parts = textContentParts(widget);\n\n return parts.length > 0 ? parts.join(\" \") : null;\n};\n\nconst isDropDownFaceCandidate = (widget: Gtk.Widget): boolean =>\n !(widget instanceof Gtk.Popover) && widget.getChildVisible();\n\nconst dropDownChildFaceText = (child: Gtk.Widget): string | null =>\n isDropDownFaceCandidate(child) ? getWidgetLabelText(child) ?? dropDownFaceText(child) : null;\n\nconst dropDownFaceText = (widget: Gtk.Widget): string | null => {\n for (const child of children(widget)) {\n const text = dropDownChildFaceText(child);\n\n if (text !== null) {\n return text;\n }\n }\n\n return null;\n};\n\nconst tabPanelTitle = (widget: Gtk.Widget): string | null => {\n const parent = widget.getParent();\n\n if (parent instanceof Gtk.Stack) {\n return parent.getPage(widget).getTitle() ?? null;\n }\n\n return null;\n};\n\nconst nameFromAuthor = (widget: Gtk.Widget): string | null =>\n getWidgetLabelledByText(widget) ?? readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n\nconst nameFromContent = (widget: Gtk.Widget): string | null => {\n const ownText = getWidgetText(widget);\n\n if (ownText) {\n return ownText;\n }\n\n const childLabels = collectLabels(widget);\n\n return childLabels.length > 0 ? childLabels.join(\" \") : null;\n};\n\nconst getWidgetAccessibleName = (widget: Gtk.Widget): string | null => {\n const role = widget.getAccessibleRole();\n\n if (isNameProhibited(role)) {\n return null;\n }\n\n if (role === Gtk.AccessibleRole.TAB_PANEL) {\n return tabPanelTitle(widget);\n }\n\n const authored = isNameFromAuthor(role) ? nameFromAuthor(widget) : null;\n\n if (authored) {\n return authored;\n }\n\n return nameFromContent(widget) ?? callStringGetter(widget, \"getTooltipText\");\n};\n\nconst getWidgetName = (widget: Gtk.Widget): string | null => {\n return widget.getName();\n};\n\nconst nonEmptyText = (text: string | null): string | null => (text === null || text === \"\" ? null : text);\n\nconst readPlaceholderProperty = (widget: Gtk.Widget): string | null => {\n const value: unknown = Reflect.get(widget, \"placeholderText\");\n\n return typeof value === \"string\" ? nonEmptyText(value) : null;\n};\n\nconst getWidgetPlaceholderText = (widget: Gtk.Widget): string | null => {\n if (!EDITABLE_ROLES.has(widget.getAccessibleRole())) {\n return null;\n }\n\n return (\n nonEmptyText(callStringGetter(widget, \"getPlaceholderText\")) ??\n readPlaceholderProperty(widget) ??\n nonEmptyText(readAccessibleString(widget, Gtk.AccessibleProperty.PLACEHOLDER))\n );\n};\n\nconst comboBoxDisplayValue = (widget: Gtk.Widget): string | null =>\n widget instanceof Gtk.DropDown\n ? (dropDownFaceText(widget) ?? getWidgetValueText(widget))\n : (getWidgetValueText(widget) ?? dropDownFaceText(widget));\n\nconst getWidgetDisplayValue = (widget: Gtk.Widget): string | null => {\n if (EDITABLE_ROLES.has(widget.getAccessibleRole()) && isEditable(widget)) {\n return readEditableText(widget);\n }\n\n if (widget.getAccessibleRole() === Gtk.AccessibleRole.COMBO_BOX) {\n return comboBoxDisplayValue(widget);\n }\n\n return null;\n};\n\nconst hasDisplayValue = (widget: Gtk.Widget): boolean => {\n const role = widget.getAccessibleRole();\n\n return (EDITABLE_ROLES.has(role) && isEditable(widget)) || role === Gtk.AccessibleRole.COMBO_BOX;\n};\n\nconst isWidgetDisabled = (widget: Gtk.Widget): boolean => !widget.isSensitive();\n\nconst hasZeroOpacityAncestor = (widget: Gtk.Widget): boolean => {\n let current: Gtk.Widget | null = widget;\n\n while (current) {\n if (current.getOpacity() === 0) {\n return true;\n }\n\n current = current.getParent();\n }\n\n return false;\n};\n\nconst isWidgetVisible = (widget: Gtk.Widget): boolean => widget.isVisible() && !hasZeroOpacityAncestor(widget);\n\nconst getWidgetRequiredState = (widget: Gtk.Widget): boolean | null =>\n readAccessibleBooleanProperty(widget, Gtk.AccessibleProperty.REQUIRED);\n\nconst readTextViewSelection = (view: Gtk.TextView): string | null => {\n const buffer = view.getBuffer();\n const [hasSelection, start, end] = buffer.getSelectionBounds();\n\n return hasSelection ? buffer.getText(start, end, true) : null;\n};\n\nconst sliceSelectedText = (widget: Gtk.Widget, start: number, end: number): string | null => {\n const chars = getCallableMethod<[number, number], string | null>(widget, \"getChars\");\n\n if (chars) {\n return chars(start, end) ?? null;\n }\n\n const text = callStringGetter(widget, \"getText\");\n\n /* eslint-disable-next-line @typescript-eslint/no-misused-spread -- bounds are code point offsets */\n return text === null ? null : [...text].slice(start, end).join(\"\");\n};\n\nconst readBoundedSelection = (widget: Gtk.Widget): string | null => {\n const bounds = getCallableMethod<[], [boolean, number, number]>(widget, \"getSelectionBounds\");\n\n if (!bounds) {\n return null;\n }\n\n const [hasSelection, start, end] = bounds();\n\n return hasSelection ? sliceSelectedText(widget, start, end) : null;\n};\n\nconst getWidgetSelection = (widget: Gtk.Widget): string | null =>\n widget instanceof Gtk.TextView ? readTextViewSelection(widget) : readBoundedSelection(widget);\n\nconst checkedFromActive = (isActive: boolean): CheckedState => (isActive ? \"checked\" : \"unchecked\");\n\nconst isRadioToggle = (widget: Gtk.Widget): widget is Gtk.ToggleButton =>\n widget instanceof Gtk.ToggleButton && widget.getAccessibleRole() === Gtk.AccessibleRole.RADIO;\n\nconst getWidgetCheckedState = (widget: Gtk.Widget): CheckedState | null => {\n const tristate = readAccessibleState(widget, Gtk.AccessibleState.CHECKED);\n const state = tristate === null ? undefined : CHECKED_BY_TRISTATE.get(tristate);\n\n if (state !== undefined) {\n return state;\n }\n\n return isRadioToggle(widget) ? checkedFromActive(widget.getActive()) : null;\n};\n\nconst isWidgetChecked = (widget: Gtk.Widget): boolean | null => {\n const state = getWidgetCheckedState(widget);\n\n return state === null || state === \"mixed\" ? null : state === \"checked\";\n};\n\nconst getWidgetPressedState = (widget: Gtk.Widget): boolean | null => {\n const tristate = readAccessibleState(widget, Gtk.AccessibleState.PRESSED);\n\n return tristate === null ? null : PRESSED_BY_TRISTATE.get(tristate) ?? null;\n};\n\nconst getWidgetExpandedState = (widget: Gtk.Widget): boolean | null => {\n if (widget instanceof Gtk.TreeExpander) {\n return widget.getListRow()?.getExpanded() ?? null;\n }\n\n return readAccessibleBoolean(widget, Gtk.AccessibleState.EXPANDED);\n};\n\nconst getWidgetSelectedState = (widget: Gtk.Widget): boolean | null => {\n const selected = readAccessibleBoolean(widget, Gtk.AccessibleState.SELECTED);\n\n if (selected !== null) {\n return selected;\n }\n\n if (SELECTABLE_ROLES.has(widget.getAccessibleRole())) {\n return (widget.getStateFlags() & Gtk.StateFlags.SELECTED) !== 0;\n }\n\n return null;\n};\n\nconst getWidgetLevel = (widget: Gtk.Widget): number | null => {\n return readAccessibleInt(widget, Gtk.AccessibleProperty.LEVEL);\n};\n\nconst getWidgetInvalidState = (widget: Gtk.Widget): Gtk.AccessibleInvalidState | null => {\n const value = readAccessibleState(widget, Gtk.AccessibleState.INVALID);\n\n return value ?? null;\n};\n\nconst getWidgetErrorMessage = (widget: Gtk.Widget): Gtk.Widget[] | null =>\n readAccessibleWidgets(widget, Gtk.AccessibleRelation.ERROR_MESSAGE);\n\nconst getWidgetBusyState = (widget: Gtk.Widget): boolean | null => {\n return readAccessibleBoolean(widget, Gtk.AccessibleState.BUSY);\n};\n\nconst getWidgetDescription = (widget: Gtk.Widget): string | null => {\n return readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);\n};\n\nconst getWidgetValueNow = (widget: Gtk.Widget): number | null =>\n readAccessibleNumber(widget, Gtk.AccessibleProperty.VALUE_NOW);\n\nconst getWidgetValueText = (widget: Gtk.Widget): string | null =>\n readAccessibleString(widget, Gtk.AccessibleProperty.VALUE_TEXT);\n\nconst isWidgetValueMatch = (widget: Gtk.Widget, field: WidgetValueField, expected: number): boolean =>\n isAccessibleNumberMatch(widget, VALUE_PROPERTIES[field], expected);\n\nconst getWidgetOwnLabel = (widget: Gtk.Widget): string | null => {\n return readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n};\n\nconst collectAccessibleNames = (targets: Gtk.Widget[]): string[] => {\n const texts: string[] = [];\n\n for (const target of targets) {\n const text = getWidgetAccessibleName(target);\n\n if (text) {\n texts.push(text);\n }\n }\n\n return texts;\n};\n\nconst isSelfLabelling = (widget: Gtk.Widget, targets: Gtk.Widget[]): boolean => {\n const own = new Set(descendants(widget));\n\n return targets.every((target) => own.has(target));\n};\n\nconst getWidgetLabelledByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);\n\n if (targets === null) {\n return null;\n }\n\n const texts = collectAccessibleNames(targets);\n\n return texts.length > 0 ? texts.join(\" \") : null;\n};\n\nconst getWidgetExternalLabelText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);\n\n return targets === null || isSelfLabelling(widget, targets) ? null : getWidgetLabelledByText(widget);\n};\n\nconst isTooltipUsedAsName = (widget: Gtk.Widget): boolean =>\n readAccessibleString(widget, Gtk.AccessibleProperty.LABEL) === null &&\n getWidgetText(widget) === null &&\n collectLabels(widget).length === 0;\n\nconst getWidgetDescribedByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.DESCRIBED_BY);\n const texts = targets === null ? [] : collectAccessibleNames(targets);\n\n if (texts.length > 0) {\n return texts.join(\" \");\n }\n\n const description = readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);\n\n if (description !== null) {\n return description;\n }\n\n return isTooltipUsedAsName(widget) ? null : callStringGetter(widget, \"getTooltipText\");\n};\n\n/**\n * Returns whether a widget is excluded from the accessibility tree, because it or one of its\n * ancestors is marked hidden.\n *\n * @param widget The widget to test.\n */\nconst isInaccessible = (widget: Gtk.Widget): boolean => {\n let current: Gtk.Widget | null = widget;\n\n while (current) {\n if (readAccessibleBoolean(current, Gtk.AccessibleState.HIDDEN) === true) {\n return true;\n }\n\n current = current.getParent();\n }\n\n return false;\n};\n\nexport {\n namingLabelText,\n getWidgetText,\n getWidgetTextContent,\n getWidgetLabelText,\n getWidgetAccessibleName,\n getWidgetName,\n getWidgetPlaceholderText,\n getWidgetDisplayValue,\n hasDisplayValue,\n isWidgetDisabled,\n isWidgetVisible,\n getWidgetRequiredState,\n getWidgetSelection,\n getWidgetDescribedByText,\n getWidgetCheckedState,\n isWidgetChecked,\n getWidgetPressedState,\n getWidgetExpandedState,\n getWidgetSelectedState,\n getWidgetLevel,\n getWidgetInvalidState,\n getWidgetErrorMessage,\n getWidgetBusyState,\n getWidgetDescription,\n getWidgetValueNow,\n getWidgetValueText,\n getWidgetOwnLabel,\n getWidgetExternalLabelText,\n getWidgetLabelledByText,\n isInaccessible,\n isWidgetValueMatch,\n type CheckedState,\n type WidgetValueField,\n};\n"]}
1
+ {"version":3,"file":"widget-accessible-properties.js","sourceRoot":"","sources":["../src/widget-accessible-properties.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport {\n isAccessibleNumberMatch,\n readAccessibleBooleanProperty,\n readAccessibleFlag,\n readAccessibleInt,\n readAccessibleNumber,\n readAccessibleRelation,\n readAccessibleState,\n readAccessibleString,\n} from \"./accessible-native.js\";\nimport { EDITABLE_ROLES, isEditable, readEditableText } from \"./editable.js\";\nimport { isNameFromAuthor, isNameProhibited } from \"./role-naming.js\";\nimport { children, descendants, relationCandidates } from \"./traversal.js\";\nimport { callBooleanGetter, callStringGetter, getCallableMethod } from \"./widget-getters.js\";\n\ntype WidgetValueField = \"now\" | \"min\" | \"max\";\ntype CheckedState = \"checked\" | \"unchecked\" | \"mixed\";\n\nconst EDITABLE_TEXT_GETTER = \"getText\";\nconst DEFAULT_TEXT_GETTERS = [\"getLabel\", EDITABLE_TEXT_GETTER, \"getTitle\"];\n\nconst SELECTABLE_ROLES: Set<Gtk.AccessibleRole> = new Set<Gtk.AccessibleRole>([\n Gtk.AccessibleRole.ROW,\n Gtk.AccessibleRole.LIST_ITEM,\n Gtk.AccessibleRole.GRID_CELL,\n Gtk.AccessibleRole.OPTION,\n Gtk.AccessibleRole.TREE_ITEM,\n]);\n\nconst PRESSED_BY_TRISTATE: Map<number, boolean> = new Map<number, boolean>([\n [Gtk.AccessibleTristate.FALSE, false],\n [Gtk.AccessibleTristate.TRUE, true],\n]);\n\nconst CHECKED_BY_TRISTATE: Map<number, CheckedState> = new Map<number, CheckedState>([\n [Gtk.AccessibleTristate.FALSE, \"unchecked\"],\n [Gtk.AccessibleTristate.TRUE, \"checked\"],\n [Gtk.AccessibleTristate.MIXED, \"mixed\"],\n]);\n\nconst VALUE_PROPERTIES: Record<WidgetValueField, Gtk.AccessibleProperty> = {\n now: Gtk.AccessibleProperty.VALUE_NOW,\n min: Gtk.AccessibleProperty.VALUE_MIN,\n max: Gtk.AccessibleProperty.VALUE_MAX,\n};\n\nconst readAccessibleWidgets = (widget: Gtk.Widget, relation: Gtk.AccessibleRelation): Gtk.Widget[] | null => {\n const targets = readAccessibleRelation(widget, relation, relationCandidates(widget));\n const widgets = targets.filter((target): target is Gtk.Widget => target instanceof Gtk.Widget);\n\n return widgets.length > 0 ? widgets : null;\n};\n\nconst readAccessibleBoolean = (widget: Gtk.Widget, state: Gtk.AccessibleState): boolean | null =>\n readAccessibleFlag(widget, state);\n\nconst getLabelText = (widget: Gtk.Widget): string | null => {\n if (widget instanceof Gtk.Label) {\n return widget.getLabel();\n }\n\n return readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n};\n\nconst stripMnemonic = (text: string): string => text.replaceAll(/_(.)/g, \"$1\");\nconst isUnderlineUsed = (widget: Gtk.Widget): boolean => callBooleanGetter(widget, \"getUseUnderline\") ?? false;\n\nconst readNamingText = (widget: Gtk.Widget, getter: string, value: string): string =>\n getter !== EDITABLE_TEXT_GETTER && isUnderlineUsed(widget) ? stripMnemonic(value) : value;\n\nconst readFirstText = (widget: Gtk.Widget, getters: string[]): string | null => {\n for (const getter of getters) {\n const value = callStringGetter(widget, getter);\n\n if (value) {\n return readNamingText(widget, getter, value);\n }\n }\n\n return null;\n};\n\n/**\n * Returns a widget's own text by trying its label, text, and title getters in\n * order, or null when none produce a value.\n *\n * @param widget The widget to read text from.\n */\nconst getWidgetText = (widget: Gtk.Widget): string | null => readFirstText(widget, DEFAULT_TEXT_GETTERS);\n\nconst namingLabelText = (widget: Gtk.Widget): string | null => {\n const text = getLabelText(widget);\n\n if (text === null) {\n return null;\n }\n\n return isUnderlineUsed(widget) ? stripMnemonic(text) : text;\n};\n\nconst isNamingLabelRole = (role: Gtk.AccessibleRole, shouldIncludePresentation: boolean): boolean =>\n role === Gtk.AccessibleRole.LABEL ||\n (shouldIncludePresentation && role === Gtk.AccessibleRole.PRESENTATION);\n\nconst collectLabels = (widget: Gtk.Widget): string[] => {\n const isIncludePresentation = widget.getAccessibleRole() === Gtk.AccessibleRole.MENU_ITEM;\n const labels: string[] = [];\n\n for (const descendant of descendants(widget)) {\n if (!isNamingLabelRole(descendant.getAccessibleRole(), isIncludePresentation)) {\n continue;\n }\n\n const labelText = namingLabelText(descendant);\n\n if (labelText) {\n labels.push(labelText);\n }\n }\n\n return labels;\n};\n\nconst getWidgetLabelText = (widget: Gtk.Widget): string | null => {\n if (widget.getAccessibleRole() !== Gtk.AccessibleRole.LABEL) {\n return null;\n }\n\n return namingLabelText(widget);\n};\n\nconst textContentParts = (widget: Gtk.Widget): string[] => {\n const own = getWidgetText(widget);\n\n if (own !== null) {\n return [own];\n }\n\n return [...children(widget)].flatMap((child) => textContentParts(child));\n};\n\nconst getWidgetTextContent = (widget: Gtk.Widget): string | null => {\n const parts = textContentParts(widget);\n\n return parts.length > 0 ? parts.join(\" \") : null;\n};\n\nconst isDropDownFaceCandidate = (widget: Gtk.Widget): boolean =>\n !(widget instanceof Gtk.Popover) && widget.getChildVisible();\n\nconst dropDownChildFaceText = (child: Gtk.Widget): string | null =>\n isDropDownFaceCandidate(child) ? getWidgetLabelText(child) ?? dropDownFaceText(child) : null;\n\nconst dropDownFaceText = (widget: Gtk.Widget): string | null => {\n for (const child of children(widget)) {\n const text = dropDownChildFaceText(child);\n\n if (text !== null) {\n return text;\n }\n }\n\n return null;\n};\n\nconst tabPanelTitle = (widget: Gtk.Widget): string | null => {\n const parent = widget.getParent();\n\n if (parent instanceof Gtk.Stack) {\n return parent.getPage(widget).getTitle() ?? null;\n }\n\n return null;\n};\n\nconst nameFromAuthor = (widget: Gtk.Widget): string | null =>\n getWidgetLabelledByText(widget) ?? readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n\nconst nameFromContent = (widget: Gtk.Widget): string | null => {\n const ownText = getWidgetText(widget);\n\n if (ownText) {\n return ownText;\n }\n\n const childLabels = collectLabels(widget);\n\n return childLabels.length > 0 ? childLabels.join(\" \") : null;\n};\n\nconst getWidgetAccessibleName = (widget: Gtk.Widget): string | null => {\n const role = widget.getAccessibleRole();\n\n if (isNameProhibited(role)) {\n return null;\n }\n\n if (role === Gtk.AccessibleRole.TAB_PANEL) {\n return tabPanelTitle(widget);\n }\n\n const authored = isNameFromAuthor(role) ? nameFromAuthor(widget) : null;\n\n if (authored) {\n return authored;\n }\n\n return nameFromContent(widget) ?? callStringGetter(widget, \"getTooltipText\");\n};\n\nconst getWidgetName = (widget: Gtk.Widget): string | null => widget.getName();\n\nconst nonEmptyText = (text: string | null): string | null => (text === null || text === \"\" ? null : text);\n\nconst readPlaceholderProperty = (widget: Gtk.Widget): string | null => {\n const value: unknown = Reflect.get(widget, \"placeholderText\");\n\n return typeof value === \"string\" ? nonEmptyText(value) : null;\n};\n\nconst getWidgetPlaceholderText = (widget: Gtk.Widget): string | null => {\n if (!EDITABLE_ROLES.has(widget.getAccessibleRole())) {\n return null;\n }\n\n return (\n nonEmptyText(callStringGetter(widget, \"getPlaceholderText\")) ??\n readPlaceholderProperty(widget) ??\n nonEmptyText(readAccessibleString(widget, Gtk.AccessibleProperty.PLACEHOLDER))\n );\n};\n\nconst comboBoxDisplayValue = (widget: Gtk.Widget): string | null =>\n widget instanceof Gtk.DropDown\n ? (dropDownFaceText(widget) ?? getWidgetValueText(widget))\n : (getWidgetValueText(widget) ?? dropDownFaceText(widget));\n\nconst getWidgetDisplayValue = (widget: Gtk.Widget): string | null => {\n if (EDITABLE_ROLES.has(widget.getAccessibleRole()) && isEditable(widget)) {\n return readEditableText(widget);\n }\n\n if (widget.getAccessibleRole() === Gtk.AccessibleRole.COMBO_BOX) {\n return comboBoxDisplayValue(widget);\n }\n\n return null;\n};\n\nconst hasDisplayValue = (widget: Gtk.Widget): boolean => {\n const role = widget.getAccessibleRole();\n\n return (EDITABLE_ROLES.has(role) && isEditable(widget)) || role === Gtk.AccessibleRole.COMBO_BOX;\n};\n\nconst isWidgetDisabled = (widget: Gtk.Widget): boolean => !widget.isSensitive();\n\nconst hasZeroOpacityAncestor = (widget: Gtk.Widget): boolean => {\n let current: Gtk.Widget | null = widget;\n\n while (current) {\n if (current.getOpacity() === 0) {\n return true;\n }\n\n current = current.getParent();\n }\n\n return false;\n};\n\nconst isWidgetVisible = (widget: Gtk.Widget): boolean => widget.isVisible() && !hasZeroOpacityAncestor(widget);\n\nconst getWidgetRequiredState = (widget: Gtk.Widget): boolean | null =>\n readAccessibleBooleanProperty(widget, Gtk.AccessibleProperty.REQUIRED);\n\nconst readTextViewSelection = (view: Gtk.TextView): string | null => {\n const buffer = view.getBuffer();\n const [hasSelection, start, end] = buffer.getSelectionBounds();\n\n return hasSelection ? buffer.getText(start, end, true) : null;\n};\n\nconst sliceSelectedText = (widget: Gtk.Widget, start: number, end: number): string | null => {\n const chars = getCallableMethod<[number, number], string | null>(widget, \"getChars\");\n\n if (chars) {\n return chars(start, end) ?? null;\n }\n\n const text = callStringGetter(widget, \"getText\");\n\n /* eslint-disable-next-line @typescript-eslint/no-misused-spread -- bounds are code point offsets */\n return text === null ? null : [...text].slice(start, end).join(\"\");\n};\n\nconst readBoundedSelection = (widget: Gtk.Widget): string | null => {\n const bounds = getCallableMethod<[], [boolean, number, number]>(widget, \"getSelectionBounds\");\n\n if (!bounds) {\n return null;\n }\n\n const [hasSelection, start, end] = bounds();\n\n return hasSelection ? sliceSelectedText(widget, start, end) : null;\n};\n\nconst getWidgetSelection = (widget: Gtk.Widget): string | null =>\n widget instanceof Gtk.TextView ? readTextViewSelection(widget) : readBoundedSelection(widget);\n\nconst isRadioToggle = (widget: Gtk.Widget): widget is Gtk.ToggleButton =>\n widget instanceof Gtk.ToggleButton && widget.getAccessibleRole() === Gtk.AccessibleRole.RADIO;\n\nconst getWidgetCheckedState = (widget: Gtk.Widget): CheckedState | null => {\n const tristate = readAccessibleState(widget, Gtk.AccessibleState.CHECKED);\n const state = tristate === null ? undefined : CHECKED_BY_TRISTATE.get(tristate);\n\n if (state !== undefined) {\n return state;\n }\n\n if (!isRadioToggle(widget)) {\n return null;\n }\n\n return widget.getActive() ? \"checked\" : \"unchecked\";\n};\n\nconst isWidgetChecked = (widget: Gtk.Widget): boolean | null => {\n const state = getWidgetCheckedState(widget);\n\n return state === null || state === \"mixed\" ? null : state === \"checked\";\n};\n\nconst getWidgetPressedState = (widget: Gtk.Widget): boolean | null => {\n const tristate = readAccessibleState(widget, Gtk.AccessibleState.PRESSED);\n\n return tristate === null ? null : PRESSED_BY_TRISTATE.get(tristate) ?? null;\n};\n\nconst getWidgetExpandedState = (widget: Gtk.Widget): boolean | null => {\n if (widget instanceof Gtk.TreeExpander) {\n return widget.getListRow()?.getExpanded() ?? null;\n }\n\n return readAccessibleBoolean(widget, Gtk.AccessibleState.EXPANDED);\n};\n\nconst getWidgetSelectedState = (widget: Gtk.Widget): boolean | null => {\n const selected = readAccessibleBoolean(widget, Gtk.AccessibleState.SELECTED);\n\n if (selected !== null) {\n return selected;\n }\n\n if (SELECTABLE_ROLES.has(widget.getAccessibleRole())) {\n return (widget.getStateFlags() & Gtk.StateFlags.SELECTED) !== 0;\n }\n\n return null;\n};\n\nconst getWidgetLevel = (widget: Gtk.Widget): number | null =>\n readAccessibleInt(widget, Gtk.AccessibleProperty.LEVEL);\n\nconst getWidgetInvalidState = (widget: Gtk.Widget): Gtk.AccessibleInvalidState | null =>\n readAccessibleState(widget, Gtk.AccessibleState.INVALID);\n\nconst getWidgetErrorMessage = (widget: Gtk.Widget): Gtk.Widget[] | null =>\n readAccessibleWidgets(widget, Gtk.AccessibleRelation.ERROR_MESSAGE);\n\nconst getWidgetBusyState = (widget: Gtk.Widget): boolean | null =>\n readAccessibleBoolean(widget, Gtk.AccessibleState.BUSY);\n\nconst getWidgetDescription = (widget: Gtk.Widget): string | null =>\n readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);\n\nconst getWidgetValueNow = (widget: Gtk.Widget): number | null =>\n readAccessibleNumber(widget, Gtk.AccessibleProperty.VALUE_NOW);\n\nconst getWidgetValueText = (widget: Gtk.Widget): string | null =>\n readAccessibleString(widget, Gtk.AccessibleProperty.VALUE_TEXT);\n\nconst isWidgetValueMatch = (widget: Gtk.Widget, field: WidgetValueField, expected: number): boolean =>\n isAccessibleNumberMatch(widget, VALUE_PROPERTIES[field], expected);\n\nconst getWidgetOwnLabel = (widget: Gtk.Widget): string | null =>\n readAccessibleString(widget, Gtk.AccessibleProperty.LABEL);\n\nconst collectAccessibleNames = (targets: Gtk.Widget[]): string[] =>\n targets\n .map((target) => getWidgetAccessibleName(target))\n .filter((text): text is string => text !== null && text !== \"\");\n\nconst isSelfLabelling = (widget: Gtk.Widget, targets: Gtk.Widget[]): boolean => {\n const own = new Set(descendants(widget));\n\n return targets.every((target) => own.has(target));\n};\n\nconst getWidgetLabelledByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);\n\n if (targets === null) {\n return null;\n }\n\n const texts = collectAccessibleNames(targets);\n\n return texts.length > 0 ? texts.join(\" \") : null;\n};\n\nconst getWidgetExternalLabelText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.LABELLED_BY);\n\n return targets === null || isSelfLabelling(widget, targets) ? null : getWidgetLabelledByText(widget);\n};\n\nconst isTooltipUsedAsName = (widget: Gtk.Widget): boolean =>\n readAccessibleString(widget, Gtk.AccessibleProperty.LABEL) === null &&\n getWidgetText(widget) === null &&\n collectLabels(widget).length === 0;\n\nconst getWidgetDescribedByText = (widget: Gtk.Widget): string | null => {\n const targets = readAccessibleWidgets(widget, Gtk.AccessibleRelation.DESCRIBED_BY);\n const texts = targets === null ? [] : collectAccessibleNames(targets);\n\n if (texts.length > 0) {\n return texts.join(\" \");\n }\n\n const description = readAccessibleString(widget, Gtk.AccessibleProperty.DESCRIPTION);\n\n if (description !== null) {\n return description;\n }\n\n return isTooltipUsedAsName(widget) ? null : callStringGetter(widget, \"getTooltipText\");\n};\n\n/**\n * Returns whether a widget is excluded from the accessibility tree, because it or one of its\n * ancestors is marked hidden.\n *\n * @param widget The widget to test.\n */\nconst isInaccessible = (widget: Gtk.Widget): boolean => {\n let current: Gtk.Widget | null = widget;\n\n while (current) {\n if (readAccessibleBoolean(current, Gtk.AccessibleState.HIDDEN) === true) {\n return true;\n }\n\n current = current.getParent();\n }\n\n return false;\n};\n\nexport {\n namingLabelText,\n getWidgetText,\n getWidgetTextContent,\n getWidgetLabelText,\n getWidgetAccessibleName,\n getWidgetName,\n getWidgetPlaceholderText,\n getWidgetDisplayValue,\n hasDisplayValue,\n isWidgetDisabled,\n isWidgetVisible,\n getWidgetRequiredState,\n getWidgetSelection,\n getWidgetDescribedByText,\n getWidgetCheckedState,\n isWidgetChecked,\n getWidgetPressedState,\n getWidgetExpandedState,\n getWidgetSelectedState,\n getWidgetLevel,\n getWidgetInvalidState,\n getWidgetErrorMessage,\n getWidgetBusyState,\n getWidgetDescription,\n getWidgetValueNow,\n getWidgetValueText,\n getWidgetOwnLabel,\n getWidgetExternalLabelText,\n getWidgetLabelledByText,\n isInaccessible,\n isWidgetValueMatch,\n type CheckedState,\n type WidgetValueField,\n};\n"]}