@gjsify/adwaita-core 0.64.13 → 0.64.14
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/lib/esm/conformance/index.js +1 -1
- package/lib/esm/conformance/menu.js +1 -1
- package/lib/esm/conformance/split-button.js +1 -1
- package/lib/esm/gio-menu.js +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/split-button.js +1 -1
- package/lib/types/conformance/index.d.ts +2 -2
- package/lib/types/conformance/menu.d.ts +345 -5
- package/lib/types/conformance/split-button.d.ts +10 -6
- package/lib/types/gio-menu.d.ts +310 -27
- package/lib/types/gio-menu.spec.d.ts +2 -0
- package/lib/types/index.d.ts +2 -2
- package/lib/types/menu-actions.d.ts +3 -3
- package/lib/types/menu-tree.d.ts +4 -4
- package/lib/types/menu.d.ts +27 -10
- package/lib/types/popup-menu-plan.d.ts +3 -3
- package/lib/types/split-button.d.ts +9 -14
- package/package.json +3 -3
package/lib/types/gio-menu.d.ts
CHANGED
|
@@ -1,46 +1,329 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Variant } from './glib-variant.js';
|
|
2
|
+
import { GIR_TYPE, GObjectObject } from './gobject.js';
|
|
3
|
+
import type { AdwMenuInput, AdwMenuTree } from './menu.js';
|
|
4
|
+
/** `G_MENU_ATTRIBUTE_ACTION`. */
|
|
5
|
+
export declare const MENU_ATTRIBUTE_ACTION = "action";
|
|
6
|
+
/** `G_MENU_ATTRIBUTE_ACTION_NAMESPACE` — carried, and never interpreted by the port. */
|
|
7
|
+
export declare const MENU_ATTRIBUTE_ACTION_NAMESPACE = "action-namespace";
|
|
8
|
+
/** `G_MENU_ATTRIBUTE_ICON`. The NAME is shared with GIO even where the type diverges. */
|
|
9
|
+
export declare const MENU_ATTRIBUTE_ICON = "icon";
|
|
10
|
+
/** `G_MENU_ATTRIBUTE_LABEL`. */
|
|
11
|
+
export declare const MENU_ATTRIBUTE_LABEL = "label";
|
|
12
|
+
/** `G_MENU_ATTRIBUTE_TARGET` — the one attribute whose variant type varies by target. */
|
|
13
|
+
export declare const MENU_ATTRIBUTE_TARGET = "target";
|
|
14
|
+
/** `G_MENU_LINK_SECTION`. */
|
|
15
|
+
export declare const MENU_LINK_SECTION = "section";
|
|
16
|
+
/** `G_MENU_LINK_SUBMENU`. */
|
|
17
|
+
export declare const MENU_LINK_SUBMENU = "submenu";
|
|
2
18
|
/**
|
|
3
|
-
*
|
|
19
|
+
* `G_MENU_EXPORTER_MAX_SECTION_SIZE`.
|
|
4
20
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
21
|
+
* Nothing in the port enforces it and nothing should — it is a D-Bus exporter limit. It is
|
|
22
|
+
* exported so a caller reading it is handed the real number rather than `undefined`, which
|
|
23
|
+
* is the failure mode of a port that exports only the constants it happens to use itself.
|
|
24
|
+
*/
|
|
25
|
+
export declare const MENU_EXPORTER_MAX_SECTION_SIZE = 1000;
|
|
26
|
+
/**
|
|
27
|
+
* One menu item, as `g_menu_item_new` builds one.
|
|
8
28
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
29
|
+
* IT IS A SNAPSHOT, and that is the measured fact a reader coming from the old `Array`
|
|
30
|
+
* version gets wrong: appending an item COPIES what it carries, so a later `set_label` on
|
|
31
|
+
* the same object does not reach the menu (`MENU_MODEL_DIVERGENCE_VECTORS`,
|
|
32
|
+
* `item-is-a-snapshot`). It is a builder for one position, not a view onto it.
|
|
33
|
+
*
|
|
34
|
+
* Both halves of the constructor are nullable, as they are in C: `g_menu_item_new(NULL,
|
|
35
|
+
* NULL)` is legal and produces an item carrying neither attribute.
|
|
12
36
|
*/
|
|
13
|
-
export declare class GioMenuItem
|
|
14
|
-
|
|
15
|
-
label?: string;
|
|
16
|
-
/** The DETAILED action name — `app.save-as`, `app.view::list` (ADR 0042 § divergence 2). */
|
|
17
|
-
action?: string;
|
|
37
|
+
export declare class GioMenuItem extends GObjectObject {
|
|
38
|
+
static [GIR_TYPE]: string;
|
|
18
39
|
constructor(label?: string | null, detailedAction?: string | null);
|
|
40
|
+
/** `g_menu_item_new_section` — an item whose whole content is the `section` link. */
|
|
41
|
+
static new_section(label: string | null, section: GioMenuModel): GioMenuItem;
|
|
42
|
+
/** `g_menu_item_new_submenu`. */
|
|
43
|
+
static new_submenu(label: string | null, submenu: GioMenuModel): GioMenuItem;
|
|
44
|
+
/**
|
|
45
|
+
* `g_menu_item_new_from_model` — a COPY of what the model holds at `itemIndex`.
|
|
46
|
+
*
|
|
47
|
+
* The copy is the point: this is how an item is edited at all, since a position is not
|
|
48
|
+
* addressable and {@link GioMenu.remove} plus an insert is the only way back in.
|
|
49
|
+
*/
|
|
50
|
+
static new_from_model(model: GioMenuModel, itemIndex: number): GioMenuItem;
|
|
19
51
|
/** `g_menu_item_set_label`. `null` REMOVES the attribute, which is what C does. */
|
|
20
52
|
set_label(label: string | null): void;
|
|
21
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* `g_menu_item_set_detailed_action` — the action NAME and its target, parsed apart.
|
|
55
|
+
*
|
|
56
|
+
* The parse is why the model carries one string: `app.view::list` becomes `action` plus
|
|
57
|
+
* a `target` of the target's own type, and {@link printDetailedName} puts it back
|
|
58
|
+
* together. A malformed name is REFUSED here rather than stored — see
|
|
59
|
+
* {@link parseDetailedName} for why that is the twin's own decision and not GIO's.
|
|
60
|
+
*/
|
|
22
61
|
set_detailed_action(detailedAction: string | null): void;
|
|
62
|
+
/** `g_menu_item_set_action_and_target_value`; a `null` action removes the target too. */
|
|
63
|
+
set_action_and_target_value(action: string | null, target: Variant | null): void;
|
|
64
|
+
/**
|
|
65
|
+
* `g_menu_item_set_attribute_value`. `null` is a DELETE, never a stored empty value.
|
|
66
|
+
*
|
|
67
|
+
* A bare JS string is refused in GJS's own words (measured): the convenience of passing
|
|
68
|
+
* text belongs to `g_menu_item_set_attribute`, which is varargs and therefore not part
|
|
69
|
+
* of the surface a port owes.
|
|
70
|
+
*/
|
|
71
|
+
set_attribute_value(name: string, value: Variant | null): void;
|
|
72
|
+
/** `g_menu_item_get_attribute_value` — see {@link GioMenuModel.get_item_attribute_value}. */
|
|
73
|
+
get_attribute_value(name: string, expectedType?: string | null): Variant | null;
|
|
74
|
+
/** `g_menu_item_set_link`. `null` removes it; any link name is legal, as in C. */
|
|
75
|
+
set_link(name: string, model: GioMenuModel | null): void;
|
|
76
|
+
/** `g_menu_item_get_link` — the INSTANCE, not a copy. */
|
|
77
|
+
get_link(name: string): GioMenuModel | null;
|
|
78
|
+
/** `g_menu_item_set_section`. */
|
|
79
|
+
set_section(section: GioMenuModel | null): void;
|
|
80
|
+
/** `g_menu_item_set_submenu`. */
|
|
81
|
+
set_submenu(submenu: GioMenuModel | null): void;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* `Gio.MenuAttributeIter` — the attributes of one item, in insertion order.
|
|
85
|
+
*
|
|
86
|
+
* `next()` BEFORE the first read, as in C: an iterator starts before the beginning, so a
|
|
87
|
+
* loop is `while (iter.next())` and `get_name()` is only valid inside it. Only the
|
|
88
|
+
* attributes actually SET are yielded (measured: a section item carrying a heading yields
|
|
89
|
+
* `label` alone, not both link names with one empty).
|
|
90
|
+
*/
|
|
91
|
+
export declare class GioMenuAttributeIter extends GObjectObject {
|
|
92
|
+
static [GIR_TYPE]: string;
|
|
93
|
+
constructor(entries?: ReadonlyArray<readonly [string, Variant]>);
|
|
94
|
+
/** `g_menu_attribute_iter_next`. */
|
|
95
|
+
next(): boolean;
|
|
96
|
+
/** `g_menu_attribute_iter_get_name` — `null` outside a successful `next()`. */
|
|
97
|
+
get_name(): string | null;
|
|
98
|
+
/** `g_menu_attribute_iter_get_value`. */
|
|
99
|
+
get_value(): Variant | null;
|
|
100
|
+
/** `g_menu_attribute_iter_get_next` — the three out-arguments GJS returns as a tuple. */
|
|
101
|
+
get_next(): [boolean, string | null, Variant | null];
|
|
102
|
+
}
|
|
103
|
+
/** `Gio.MenuLinkIter` — the same walk over an item's links, and the value is a MODEL. */
|
|
104
|
+
export declare class GioMenuLinkIter extends GObjectObject {
|
|
105
|
+
static [GIR_TYPE]: string;
|
|
106
|
+
constructor(entries?: ReadonlyArray<readonly [string, GioMenuModel]>);
|
|
107
|
+
/** `g_menu_link_iter_next`. */
|
|
108
|
+
next(): boolean;
|
|
109
|
+
/** `g_menu_link_iter_get_name`. */
|
|
110
|
+
get_name(): string | null;
|
|
111
|
+
/** `g_menu_link_iter_get_value` — the linked model itself. */
|
|
112
|
+
get_value(): GioMenuModel | null;
|
|
113
|
+
/** `g_menu_link_iter_get_next`. */
|
|
114
|
+
get_next(): [boolean, string | null, GioMenuModel | null];
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* `Gio.MenuModel` — what a `menu-model` property takes, and it cannot be constructed.
|
|
118
|
+
*
|
|
119
|
+
* `new Gio.MenuModel()` throws `Cannot instantiate abstract type GMenuModel` (measured), so
|
|
120
|
+
* this constructor refuses too: a base a caller can instantiate is a type GTK does not have,
|
|
121
|
+
* and a widget door accepting one would accept a model with no items and no way to get any.
|
|
122
|
+
*
|
|
123
|
+
* THE READS DELEGATE TO VFUNCS, as they do in C — `g_menu_model_get_n_items` calls
|
|
124
|
+
* `GMenuModelClass->get_n_items`. {@link GioMenu} is the only subclass the port ships, but a
|
|
125
|
+
* CALLER's subclass is the reason the indirection is here: a model backed by something else
|
|
126
|
+
* overrides `vfunc_get_n_items` and the public reads, `menuTree` and every renderer follow it.
|
|
127
|
+
*
|
|
128
|
+
* `items-changed` is declared HERE and inherited, which is where it is in GTK —
|
|
129
|
+
* `GObject.signal_lookup('items-changed', Gio.MenuModel.$gtype)` is non-zero (measured), and
|
|
130
|
+
* `findSignal` walks the static chain, so a `GioMenu` instance resolves it from this class.
|
|
131
|
+
*/
|
|
132
|
+
export declare abstract class GioMenuModel extends GObjectObject {
|
|
133
|
+
static [GIR_TYPE]: string;
|
|
134
|
+
constructor();
|
|
135
|
+
/** `g_menu_model_is_mutable`. */
|
|
136
|
+
is_mutable(): boolean;
|
|
137
|
+
/** `g_menu_model_get_n_items`. */
|
|
138
|
+
get_n_items(): number;
|
|
139
|
+
/**
|
|
140
|
+
* `g_menu_model_get_item_attribute_value`.
|
|
141
|
+
*
|
|
142
|
+
* `expectedType` is a type STRING and not a `GLib.VariantType`, which the variant subset
|
|
143
|
+
* does not have (`MENU_MODEL_DIVERGENCE_VECTORS`, `variant-type-is-a-string`). A
|
|
144
|
+
* mismatch answers `null` rather than converting or throwing, as GIO does.
|
|
145
|
+
*/
|
|
146
|
+
get_item_attribute_value(itemIndex: number, attribute: string, expectedType?: string | null): Variant | null;
|
|
147
|
+
/** `g_menu_model_get_item_link` — the linked model INSTANCE, or `null`. */
|
|
148
|
+
get_item_link(itemIndex: number, link: string): GioMenuModel | null;
|
|
149
|
+
/** `g_menu_model_iterate_item_attributes`. */
|
|
150
|
+
iterate_item_attributes(itemIndex: number): GioMenuAttributeIter;
|
|
151
|
+
/** `g_menu_model_iterate_item_links`. */
|
|
152
|
+
iterate_item_links(itemIndex: number): GioMenuLinkIter;
|
|
153
|
+
/**
|
|
154
|
+
* `g_menu_model_items_changed` — PUBLIC, and it changes nothing.
|
|
155
|
+
*
|
|
156
|
+
* Measured: `model.items_changed(3, 2, 1)` emits that triple and leaves the count alone,
|
|
157
|
+
* because it is how a SUBCLASS reports a splice it made in its own storage. A lying triple
|
|
158
|
+
* is not policed, here or in GIO.
|
|
159
|
+
*/
|
|
160
|
+
items_changed(position: number, removed: number, added: number): void;
|
|
161
|
+
/** `GMenuModelClass->is_mutable`; a model is immutable unless it says otherwise. */
|
|
162
|
+
vfunc_is_mutable(): boolean;
|
|
163
|
+
abstract vfunc_get_n_items(): number;
|
|
164
|
+
abstract vfunc_get_item_attribute_value(itemIndex: number, attribute: string, expectedType: string | null): Variant | null;
|
|
165
|
+
abstract vfunc_get_item_link(itemIndex: number, link: string): GioMenuModel | null;
|
|
166
|
+
abstract vfunc_iterate_item_attributes(itemIndex: number): GioMenuAttributeIter;
|
|
167
|
+
abstract vfunc_iterate_item_links(itemIndex: number): GioMenuLinkIter;
|
|
23
168
|
}
|
|
24
169
|
/**
|
|
25
|
-
*
|
|
170
|
+
* `Gio.Menu` — a mutable `Gio.MenuModel`, and what every menu in the port is.
|
|
26
171
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
172
|
+
* ONE `items-changed` PER MUTATOR, with the triple each one emits held by
|
|
173
|
+
* `MENU_MUTATOR_EMISSION_VECTORS`. The row that separates this from `Gtk.StringList`:
|
|
174
|
+
* `remove_all()` on an EMPTY menu STILL emits `(0, 0, 0)` (measured), so the no-op skip ADR
|
|
175
|
+
* 0122 § 3 is right about for a list store is wrong here, and neither {@link remove_all} nor
|
|
176
|
+
* {@link insertEntry} has one.
|
|
177
|
+
*
|
|
178
|
+
* An item is COPIED IN. `append_item(item)` takes what the item carries at that moment and a
|
|
179
|
+
* later `set_label` on the same object reaches nothing — see {@link GioMenuItem}.
|
|
29
180
|
*/
|
|
30
|
-
export declare class GioMenu extends
|
|
31
|
-
|
|
181
|
+
export declare class GioMenu extends GioMenuModel {
|
|
182
|
+
static [GIR_TYPE]: string;
|
|
183
|
+
constructor();
|
|
184
|
+
/** `g_menu_new`. */
|
|
185
|
+
static new(): GioMenu;
|
|
186
|
+
/** `g_menu_insert` — a plain item at `position`. */
|
|
187
|
+
insert(position: number, label: string | null, detailedAction?: string | null): void;
|
|
188
|
+
/** `g_menu_append`. */
|
|
32
189
|
append(label: string | null, detailedAction?: string | null): void;
|
|
190
|
+
/** `g_menu_prepend`. */
|
|
191
|
+
prepend(label: string | null, detailedAction?: string | null): void;
|
|
192
|
+
/** `g_menu_insert_item` — the item's attributes and links, copied. */
|
|
193
|
+
insert_item(position: number, item: GioMenuItem): void;
|
|
33
194
|
/** `g_menu_append_item`. */
|
|
34
195
|
append_item(item: GioMenuItem): void;
|
|
196
|
+
/** `g_menu_prepend_item`. */
|
|
197
|
+
prepend_item(item: GioMenuItem): void;
|
|
198
|
+
/** `g_menu_insert_section` — ONE item of this menu, however many the section holds. */
|
|
199
|
+
insert_section(position: number, label: string | null, section: GioMenuModel): void;
|
|
200
|
+
/** `g_menu_append_section`. */
|
|
201
|
+
append_section(label: string | null, section: GioMenuModel): void;
|
|
202
|
+
/** `g_menu_prepend_section`. */
|
|
203
|
+
prepend_section(label: string | null, section: GioMenuModel): void;
|
|
204
|
+
/** `g_menu_insert_submenu`. */
|
|
205
|
+
insert_submenu(position: number, label: string | null, submenu: GioMenuModel): void;
|
|
206
|
+
/** `g_menu_append_submenu`. */
|
|
207
|
+
append_submenu(label: string | null, submenu: GioMenuModel): void;
|
|
208
|
+
/** `g_menu_prepend_submenu`. */
|
|
209
|
+
prepend_submenu(label: string | null, submenu: GioMenuModel): void;
|
|
210
|
+
/** `g_menu_remove` — one item, reported where it was. */
|
|
211
|
+
remove(position: number): void;
|
|
212
|
+
/**
|
|
213
|
+
* `g_menu_remove_all`.
|
|
214
|
+
*
|
|
215
|
+
* It emits on an EMPTY menu too — `(0, 0, 0)`, measured. A renderer may therefore drop
|
|
216
|
+
* every row it holds on this one emission without reading the count first.
|
|
217
|
+
*/
|
|
218
|
+
remove_all(): void;
|
|
35
219
|
/**
|
|
36
|
-
* `
|
|
37
|
-
* separator rather than behind a further click.
|
|
220
|
+
* `g_menu_freeze` — a FLAG, not a lock.
|
|
38
221
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
222
|
+
* Measured both ways: `is_mutable()` flips to false and the mutators keep working, so a
|
|
223
|
+
* twin that refused a post-freeze append would break a caller GIO lets through
|
|
224
|
+
* (`MENU_MODEL_DIVERGENCE_VECTORS`, `freeze-does-not-lock`).
|
|
42
225
|
*/
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
226
|
+
freeze(): void;
|
|
227
|
+
vfunc_is_mutable(): boolean;
|
|
228
|
+
vfunc_get_n_items(): number;
|
|
229
|
+
vfunc_get_item_attribute_value(itemIndex: number, attribute: string, expectedType: string | null): Variant | null;
|
|
230
|
+
vfunc_get_item_link(itemIndex: number, link: string): GioMenuModel | null;
|
|
231
|
+
vfunc_iterate_item_attributes(itemIndex: number): GioMenuAttributeIter;
|
|
232
|
+
vfunc_iterate_item_links(itemIndex: number): GioMenuLinkIter;
|
|
233
|
+
/** The one insert, so the emission rule is written once. Out of range clamps, as C does. */
|
|
234
|
+
private insertEntry;
|
|
46
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* An authored or normalised menu TREE as a live {@link GioMenu} — the one-way street.
|
|
238
|
+
*
|
|
239
|
+
* It takes the AUTHORED form as well as the normalised one because `normalizeMenuModel` is
|
|
240
|
+
* idempotent, so a JSX attribute needs no conversion step of its own. This is the only way
|
|
241
|
+
* an array becomes a model now that `menuModel` refuses one: ADR 0128 § 4 closed the door
|
|
242
|
+
* and this is the door's replacement, named so a caller can find it.
|
|
243
|
+
*/
|
|
244
|
+
export declare function buildMenu(input: AdwMenuInput | AdwMenuTree): GioMenu;
|
|
245
|
+
/**
|
|
246
|
+
* A `Gio.MenuModel` as a portable TREE — the inverse of {@link buildMenu}.
|
|
247
|
+
*
|
|
248
|
+
* THIS IS THE ONE BRIDGE every renderer crosses, and it crosses it ONCE PER RENDER. The
|
|
249
|
+
* tree walkers (`menuNodeAt`, `flattenMenu`, `menuRefusals`, `assertMenuRenderable`) all take
|
|
250
|
+
* an `AdwMenuTree` rather than a model, because a walker reading through the model would make
|
|
251
|
+
* every path lookup a chain of `get_item_link` calls and every renderer's loop a different
|
|
252
|
+
* number of them. One snapshot, then plain data.
|
|
253
|
+
*
|
|
254
|
+
* IT IS A DEEP SNAPSHOT, which is the measured behaviour and not a convenience: an item read
|
|
255
|
+
* out of a `Gio.Menu` is a copy (`MENU_MODEL_DIVERGENCE_VECTORS`, `item-is-a-snapshot`), so a
|
|
256
|
+
* tree that aliased the model would promise a sharing GIO does not do. A mutation arrives
|
|
257
|
+
* through `items-changed` and the renderer takes a new snapshot — see {@link watchMenuModel}.
|
|
258
|
+
*
|
|
259
|
+
* It reads what GTK reads plus `id`, so an application's own extra attributes do not survive
|
|
260
|
+
* the trip. Stated rather than implied: this is the inverse of the builder above, not a
|
|
261
|
+
* general `GMenuModel` serialiser. Both edges a hand-built menu can reach are GTK's own: an
|
|
262
|
+
* item carrying BOTH links reads as a SECTION (`gtkmenutracker.c:317-352` decides the same
|
|
263
|
+
* way), and a non-string `label` reads as `''` (so does `g_menu_item_get_attribute(…, "&s")`).
|
|
264
|
+
*/
|
|
265
|
+
export declare function menuTree(model: GioMenuModel): AdwMenuTree;
|
|
266
|
+
/**
|
|
267
|
+
* Connect `handler` to `model` and to every model it LINKS TO, recursively.
|
|
268
|
+
*
|
|
269
|
+
* THIS IS WHY IT EXISTS: a section's own `items-changed` does NOT bubble to the menu holding
|
|
270
|
+
* it (measured — `MENU_LINK_VECTORS`, `link-emission-does-not-bubble`), while the link read
|
|
271
|
+
* reflects the change at once. A renderer connected to the root alone therefore shows a stale
|
|
272
|
+
* section for ever. The defect was unreachable while a menu was an array, because every
|
|
273
|
+
* mutation went through a re-parse of the whole tree; it arrives WITH the real model, so the
|
|
274
|
+
* watcher arrives with it.
|
|
275
|
+
*
|
|
276
|
+
* The returned function disconnects every handler it made. It is RE-RUN on each emission by
|
|
277
|
+
* its caller — a renderer calls `watchMenuModel` again after it re-snapshots — because a
|
|
278
|
+
* mutation can add a link that was not there to connect to.
|
|
279
|
+
*/
|
|
280
|
+
export declare function watchMenuModel(model: GioMenuModel, handler: () => void): () => void;
|
|
281
|
+
/**
|
|
282
|
+
* The menu a SURFACE owns, so an authored `menuModel` attribute keeps its identity.
|
|
283
|
+
*
|
|
284
|
+
* ONE instance per element, re-parsed INTO rather than replaced: a `menu-model` write notifies
|
|
285
|
+
* and rebuilds the popover, while an edit to the same `menu='[…]'` attribute is a content
|
|
286
|
+
* change the popover already open should follow. Mirrors `GjsifyOptionList` (ADR 0122 § 5),
|
|
287
|
+
* and it is the same reason — the authored door is the one place the port, not GIO, decides.
|
|
288
|
+
*/
|
|
289
|
+
export declare class GjsifyMenu extends GioMenu {
|
|
290
|
+
/**
|
|
291
|
+
* Replace the contents with `next` IN PLACE, keeping this menu's identity.
|
|
292
|
+
*
|
|
293
|
+
* EQUAL CONTENT EMITS NOTHING, so re-rendering an unchanged attribute does not reopen a
|
|
294
|
+
* popover; anything else is ONE `items-changed(0, old, new)`. Not the minimal splice
|
|
295
|
+
* `GjsifyOptionList` computes: a menu is a TREE, so "the one splice that turns one into
|
|
296
|
+
* the other" is not a position and a length, and a renderer re-snapshots the whole tree
|
|
297
|
+
* on any emission anyway ({@link menuTree}).
|
|
298
|
+
*/
|
|
299
|
+
reconcile(next: AdwMenuInput | AdwMenuTree | null | undefined): void;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* What a write to a `menu-model` property reads as — the ONE door, for all four surfaces.
|
|
303
|
+
*
|
|
304
|
+
* ADR 0128 § 4 makes `menu-model` an object property over `Gio.MenuModel` and § 7 leaves the
|
|
305
|
+
* JSON markup attribute open, so every `menuModel` setter in this repository has the same
|
|
306
|
+
* four-way answer to give. It is written here once because it was about to be written fifteen
|
|
307
|
+
* times, and it mirrors `readModelWrite` (`option-list.ts`) deliberately — the two doors
|
|
308
|
+
* answer the same question about two different models, and a reader who knows one knows this.
|
|
309
|
+
*
|
|
310
|
+
* - `null` / `undefined` is the "no menu" write, which clears the popover;
|
|
311
|
+
* - a STRING is the markup attribute, parsed and reconciled into `authored` — the surface's
|
|
312
|
+
* OWN menu, whose identity survives the edit;
|
|
313
|
+
* - a real model is handed through by IDENTITY, so `widget.menuModel === model` holds as it
|
|
314
|
+
* is measured to in libadwaita;
|
|
315
|
+
* - anything else, an ARRAY above all, is a `TypeError`.
|
|
316
|
+
*
|
|
317
|
+
* THE DUCK TEST, and not `instanceof` alone, because a REAL `Gio.Menu` reached through node-gi
|
|
318
|
+
* (ADR 0104) is no registered class of this subset — and handing one to `Gtk.MenuButton`
|
|
319
|
+
* is the whole point of having the property.
|
|
320
|
+
*
|
|
321
|
+
* THE TYPE REFUSAL IS THE PORT'S OWN, which is the one place this door is wider than
|
|
322
|
+
* `checkPropertyValue`. A `TYPE_OBJECT` spec catches a non-object and an unregistered object,
|
|
323
|
+
* and that is all it can catch: `G_TYPE_OBJECT` accepts ANY GObject, so a registered
|
|
324
|
+
* `Gtk.StringList` passes the value check and still cannot be a menu. GJS raises
|
|
325
|
+
* `Object is of type … - cannot convert to GMenuModel` at the GValue conversion that follows
|
|
326
|
+
* (measured with a `Gtk.Label`); the subset has no such conversion, so the message is raised
|
|
327
|
+
* here, with the GType found by walking the constructor chain.
|
|
328
|
+
*/
|
|
329
|
+
export declare function readMenuModelWrite(value: unknown, authored: GjsifyMenu): GioMenuModel | null;
|
package/lib/types/index.d.ts
CHANGED
|
@@ -97,14 +97,14 @@ export { ADW_SWIPE_BORDER, DEFAULT_MAX_SIDEBAR_WIDTH, DEFAULT_MIN_SIDEBAR_WIDTH,
|
|
|
97
97
|
export type { AdwPackType, AdwTextDirection, NavigationActionInput, NavigationActionResult, NavigationPageRef, NavigationSplitViewChange, NavigationSplitViewHandlers, NavigationSplitViewLayout, NavigationSplitViewListener, NavigationSplitViewOptions, NavigationSplitViewProperty, NavigationStackPlan, OverlaySplitViewChange, OverlaySplitViewLayout, OverlaySplitViewListener, OverlaySplitViewOptions, OverlaySplitViewProperty, SidebarBounds, SidebarWidthInput, SidebarWidthSpec, SplitViewAnimation, SplitViewAnimationRequest, SplitViewAnimator, SplitViewMeasureInput, SplitViewPane, SplitViewPaneRect, SwipeReleasePlan, } from './split-view.js';
|
|
98
98
|
export { DEFAULT_DROPDOWN_TOOLTIP, SPLIT_BUTTON_DISABLED_OPACITY, SplitButtonState, isSplitButtonDirection, menuButtonArrowIcon, menuButtonPopupDirection, resolveDropdownTooltip, splitButtonArrowIcon, splitButtonPopupDirection, splitButtonRootState, splitButtonStyleClasses, } from './split-button.js';
|
|
99
99
|
export type { AdwArrowIcon, SplitButtonChange, SplitButtonContentMode, SplitButtonDirection, SplitButtonHalfState, SplitButtonListener, SplitButtonProperty, SplitButtonStyleClass, } from './split-button.js';
|
|
100
|
-
export { GioMenu, GioMenuItem } from './gio-menu.js';
|
|
100
|
+
export { GioMenu, GioMenuAttributeIter, GioMenuItem, GioMenuLinkIter, GioMenuModel, GjsifyMenu, MENU_ATTRIBUTE_ACTION, MENU_ATTRIBUTE_ACTION_NAMESPACE, MENU_ATTRIBUTE_ICON, MENU_ATTRIBUTE_LABEL, MENU_ATTRIBUTE_TARGET, MENU_EXPORTER_MAX_SECTION_SIZE, MENU_LINK_SECTION, MENU_LINK_SUBMENU, buildMenu, menuTree, readMenuModelWrite, watchMenuModel, } from './gio-menu.js';
|
|
101
101
|
export { activateMenuItem, menuActionsFor } from './menu-actions.js';
|
|
102
102
|
export { assertPopupMenuPlan, planPopupMenu } from './popup-menu-plan.js';
|
|
103
103
|
export type { PopupMenuEntryPlan, PopupMenuGroupPlan, PopupMenuItemPlan, PopupMenuLevelPlan, PopupMenuPlan, PopupMenuRefusal, PopupMenuSubmenuPlan, } from './popup-menu-plan.js';
|
|
104
104
|
export { menuAssignments } from './menu-tree.js';
|
|
105
105
|
export type { MenuTreeNode } from './menu-tree.js';
|
|
106
106
|
export { ADW_MENU_SURFACE_NATIVESCRIPT, ADW_MENU_SURFACE_WEB, assertMenuRenderable, flattenMenu, menuItemAt, menuLabelText, menuNodeAt, menuRefusals, normalizeMenuModel, parseDetailedAction, parseMenuModel, resolveMenuItemState, } from './menu.js';
|
|
107
|
-
export type { AdwDetailedAction, AdwMenuAction, AdwMenuActions, AdwMenuDisplayHint, AdwMenuEntryInput, AdwMenuFlatRow, AdwMenuHiddenWhen, AdwMenuInput, AdwMenuItem, AdwMenuItemInput, AdwMenuItemRole, AdwMenuItemState, AdwMenuModel, AdwMenuNode, AdwMenuPath, AdwMenuRefusal, AdwMenuSection, AdwMenuSectionInput, AdwMenuSubmenu, AdwMenuSubmenuInput, AdwMenuSurface, AdwMenuTextDirection, } from './menu.js';
|
|
107
|
+
export type { AdwDetailedAction, AdwMenuAction, AdwMenuActions, AdwMenuDisplayHint, AdwMenuEntryInput, AdwMenuFlatRow, AdwMenuHiddenWhen, AdwMenuInput, AdwMenuItem, AdwMenuItemInput, AdwMenuItemRole, AdwMenuItemState, AdwMenuModel, AdwMenuNode, AdwMenuPath, AdwMenuRefusal, AdwMenuSection, AdwMenuSectionInput, AdwMenuSubmenu, AdwMenuSubmenuInput, AdwMenuSurface, AdwMenuTextDirection, AdwMenuTree, } from './menu.js';
|
|
108
108
|
export { DEFAULT_INDICATOR_DESCRIPTION_STRINGS, INLINE_VIEW_SWITCHER_DISPLAY_MODES, VIEW_SWITCHER_BADGE_LIMIT, VIEW_SWITCHER_DRAG_SWITCH_DELAY, VIEW_SWITCHER_FALLBACK_ICON, VIEW_SWITCHER_NO_SELECTION, VIEW_SWITCHER_POLICIES, ViewSwitcherBarState, ViewSwitcherDragSwitch, ViewSwitcherState, buildInlineToggles, buildViewSwitcherButtons, createViewSwitcherPage, inlineToggleTooltip, isInlineViewSwitcherDisplayMode, isViewSwitcherButtonVisible, isViewSwitcherPolicy, pageIndexForToggle, shouldRevealViewSwitcherBar, stripMnemonic, toggleIndexForPage, viewSwitcherBadgeLabel, viewSwitcherButtonOrientation, viewSwitcherIconName, viewSwitcherIndicatorDescription, viewSwitcherLabel, viewSwitcherPageFromStackPage, viewSwitcherPagesFromStack, viewSwitcherSidebarSections, } from './view-switcher.js';
|
|
109
109
|
export type { AdwInlineViewSwitcherDisplayMode, AdwViewSwitcherPage, AdwViewSwitcherPageInit, AdwViewSwitcherPolicy, IndicatorDescriptionStrings, InlineToggleModel, ViewSwitcherBarChange, ViewSwitcherBarListener, ViewSwitcherButtonModel, ViewSwitcherDragSwitchOptions, ViewSwitcherScheduler, ViewSwitcherSidebarSection, ViewSwitcherStateChange, ViewSwitcherStateListener, ViewSwitcherStateOptions, ViewSwitcherTimerHandle, } from './view-switcher.js';
|
|
110
110
|
export { DEFAULT_TAB_AUTOHIDE, TabViewState, isDescendantOfPage, successorAfterClose, tabCloseVisible, tabIconState, tabSearchMatches, tabTooltip, tabTooltipIsMarkup, tabViewItemsChanged, tabsRevealed, } from './tab-view.js';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import type { AdwMenuActions,
|
|
1
|
+
import type { AdwMenuActions, AdwMenuItem, AdwMenuTree } from './menu.js';
|
|
2
2
|
type Parent = (node: object) => object | null | undefined;
|
|
3
3
|
/**
|
|
4
|
-
* The actions the
|
|
4
|
+
* The actions the tree's items name, as `widget` resolves them. An action the walk does not find,
|
|
5
5
|
* because no group has its prefix or the group lacks it, is left out, which is "missing" and makes
|
|
6
6
|
* the item insensitive. That is GTK's answer, measured on GJS (`menu-actions.gjs.spec.ts`), and it
|
|
7
7
|
* overrules ADR 0097 § 3's "no group dims nothing": an application that dispatches an action
|
|
8
8
|
* itself declares it, or passes `actions` to say what it knows.
|
|
9
9
|
*/
|
|
10
|
-
export declare function menuActionsFor(
|
|
10
|
+
export declare function menuActionsFor(tree: AdwMenuTree, widget: object, parent: Parent): AdwMenuActions;
|
|
11
11
|
/**
|
|
12
12
|
* Fire the action an item names, the way `GtkMenuTrackerItem` does on activation. A target is
|
|
13
13
|
* passed as its text: `GLib.Variant` is outside the subset until stage 3.
|
package/lib/types/menu-tree.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AdwMenuTree } from './menu.js';
|
|
2
2
|
/** The slice of a tree node this reads. */
|
|
3
3
|
export interface MenuTreeNode {
|
|
4
4
|
readonly tag: string;
|
|
@@ -6,7 +6,7 @@ export interface MenuTreeNode {
|
|
|
6
6
|
readonly menuModels?: Readonly<Record<string, readonly unknown[]>>;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
* The menus a node assigns, as `[property,
|
|
10
|
-
*
|
|
9
|
+
* The menus a node assigns, as `[property, tree]`: the root menu `menu-model: id` names, and each
|
|
10
|
+
* tree written at a property. An id with no root menu is refused by name.
|
|
11
11
|
*/
|
|
12
|
-
export declare function menuAssignments(node: MenuTreeNode, menus: Readonly<Record<string, readonly unknown[]>> | undefined): Array<[string,
|
|
12
|
+
export declare function menuAssignments(node: MenuTreeNode, menus: Readonly<Record<string, readonly unknown[]>> | undefined): Array<[string, AdwMenuTree]>;
|
package/lib/types/menu.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { GioMenuModel } from './gio-menu.js';
|
|
1
2
|
/**
|
|
2
3
|
* The values `hidden-when` is documented to take.
|
|
3
4
|
*
|
|
@@ -91,12 +92,28 @@ export interface AdwMenuSubmenu {
|
|
|
91
92
|
/** Any node of a normalised model. */
|
|
92
93
|
export type AdwMenuNode = AdwMenuItem | AdwMenuSection | AdwMenuSubmenu;
|
|
93
94
|
/**
|
|
94
|
-
* A normalised menu: the value a renderer walks and the GTK host converts.
|
|
95
|
+
* A normalised menu TREE: the value a renderer walks and the GTK host converts.
|
|
95
96
|
*
|
|
96
97
|
* `readonly` throughout, because every renderer holds one across a render and a shared
|
|
97
98
|
* mutable tree is how two widgets showing the same menu would diverge.
|
|
99
|
+
*
|
|
100
|
+
* IT IS NOT {@link AdwMenuModel} ANY MORE, and that split is ADR 0128. A menu MODEL is a
|
|
101
|
+
* `Gio.MenuModel` — the object a `menu-model` property takes, which emits `items-changed`
|
|
102
|
+
* and which the two widgets declare `value_type=GMenuModel` for. A menu TREE is the plain
|
|
103
|
+
* data the model is built from and snapshotted back into: `normalizeMenuModel` produces
|
|
104
|
+
* one, `buildMenu` turns one into a model, `menuTree` takes one out of a model, and every
|
|
105
|
+
* walker below takes one. The old name meant both, which is exactly what made
|
|
106
|
+
* `menuModel: [...]` and `menuModel: menu` look like the same write.
|
|
107
|
+
*/
|
|
108
|
+
export type AdwMenuTree = readonly AdwMenuNode[];
|
|
109
|
+
/**
|
|
110
|
+
* A menu model — `Gio.MenuModel`, re-exported under the name the port's surfaces use.
|
|
111
|
+
*
|
|
112
|
+
* The alias and not a direct import, because `menuModel` is the PROPERTY on fifteen
|
|
113
|
+
* widgets and `AdwMenuModel` is the name their signatures have always read; what changed
|
|
114
|
+
* is what the name means. See {@link AdwMenuTree} for the half that is still plain data.
|
|
98
115
|
*/
|
|
99
|
-
export type AdwMenuModel =
|
|
116
|
+
export type AdwMenuModel = GioMenuModel;
|
|
100
117
|
/** An item as authored — `kind` is implied by the absence of a link. */
|
|
101
118
|
export interface AdwMenuItemInput {
|
|
102
119
|
label?: unknown;
|
|
@@ -151,7 +168,7 @@ export type AdwMenuInput = readonly AdwMenuEntryInput[];
|
|
|
151
168
|
* submenu with a label, never an item that happens to carry a list, because that is how
|
|
152
169
|
* `g_menu_item_get_link` reads the same object.
|
|
153
170
|
*/
|
|
154
|
-
export declare function normalizeMenuModel(input: AdwMenuInput | null | undefined):
|
|
171
|
+
export declare function normalizeMenuModel(input: AdwMenuInput | null | undefined): AdwMenuTree;
|
|
155
172
|
/**
|
|
156
173
|
* A `menu` ATTRIBUTE — a JSON array — as a model.
|
|
157
174
|
*
|
|
@@ -159,7 +176,7 @@ export declare function normalizeMenuModel(input: AdwMenuInput | null | undefine
|
|
|
159
176
|
* markup can produce that a JS value cannot: `JSON.parse` genuinely throws on a typo,
|
|
160
177
|
* and the widget must degrade to "no menu" rather than fail to upgrade.
|
|
161
178
|
*/
|
|
162
|
-
export declare function parseMenuModel(json: string | null | undefined):
|
|
179
|
+
export declare function parseMenuModel(json: string | null | undefined): AdwMenuTree;
|
|
163
180
|
/**
|
|
164
181
|
* Where a node sits: the index chain from the model's root.
|
|
165
182
|
*
|
|
@@ -171,9 +188,9 @@ export declare function parseMenuModel(json: string | null | undefined): AdwMenu
|
|
|
171
188
|
*/
|
|
172
189
|
export type AdwMenuPath = readonly number[];
|
|
173
190
|
/** The node at a path, or `null` when the path names none. */
|
|
174
|
-
export declare function menuNodeAt(
|
|
191
|
+
export declare function menuNodeAt(tree: AdwMenuTree, path: AdwMenuPath): AdwMenuNode | null;
|
|
175
192
|
/** The item at a path — `null` for a path that names a section, a submenu or nothing. */
|
|
176
|
-
export declare function menuItemAt(
|
|
193
|
+
export declare function menuItemAt(tree: AdwMenuTree, path: AdwMenuPath): AdwMenuItem | null;
|
|
177
194
|
/** One row of a {@link flattenMenu} walk. */
|
|
178
195
|
export interface AdwMenuFlatRow {
|
|
179
196
|
/** The node this row draws. Sections never appear — they become {@link separated}. */
|
|
@@ -204,7 +221,7 @@ export interface AdwMenuFlatRow {
|
|
|
204
221
|
* `separated` marks the FIRST row after a boundary and is never set on the first row of
|
|
205
222
|
* all, because a separator above nothing is a line at the top of the menu.
|
|
206
223
|
*/
|
|
207
|
-
export declare function flattenMenu(
|
|
224
|
+
export declare function flattenMenu(tree: AdwMenuTree, path?: AdwMenuPath): readonly AdwMenuFlatRow[];
|
|
208
225
|
/** What a `GActionGroup` publishes about one action, in portable form. */
|
|
209
226
|
export interface AdwMenuAction {
|
|
210
227
|
/** `g_action_group_get_action_enabled`. Absent counts as enabled. */
|
|
@@ -366,9 +383,9 @@ export interface AdwMenuRefusal {
|
|
|
366
383
|
* would be useless: NativeScript renders no icon and no accelerator on any menu, so a
|
|
367
384
|
* refusal per decoration would fire on every well-formed menu and be switched off.
|
|
368
385
|
*/
|
|
369
|
-
export declare function menuRefusals(
|
|
386
|
+
export declare function menuRefusals(tree: AdwMenuTree, surface: AdwMenuSurface, path?: AdwMenuPath): AdwMenuRefusal[];
|
|
370
387
|
/**
|
|
371
|
-
* Throw if the surface cannot render the
|
|
388
|
+
* Throw if the surface cannot render the menu TREE.
|
|
372
389
|
*
|
|
373
390
|
* Called by a renderer when a menu is SET, so the throw names the assignment rather than
|
|
374
391
|
* arriving as a missing row three interactions later. The message carries every refusal,
|
|
@@ -376,4 +393,4 @@ export declare function menuRefusals(model: AdwMenuModel, surface: AdwMenuSurfac
|
|
|
376
393
|
* and reporting them one run at a time is how a port becomes a series of identical bug
|
|
377
394
|
* reports.
|
|
378
395
|
*/
|
|
379
|
-
export declare function assertMenuRenderable(
|
|
396
|
+
export declare function assertMenuRenderable(tree: AdwMenuTree, surface: AdwMenuSurface): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AdwMenuActions,
|
|
1
|
+
import type { AdwMenuActions, AdwMenuPath, AdwMenuTree } from './menu.js';
|
|
2
2
|
/** An item of the plan; `path` maps a tap back to the model. */
|
|
3
3
|
export interface PopupMenuItemPlan {
|
|
4
4
|
readonly kind: 'item';
|
|
@@ -41,7 +41,7 @@ export interface PopupMenuPlan {
|
|
|
41
41
|
readonly level: PopupMenuLevelPlan;
|
|
42
42
|
readonly refusals: readonly PopupMenuRefusal[];
|
|
43
43
|
}
|
|
44
|
-
/** Lower `
|
|
45
|
-
export declare function planPopupMenu(
|
|
44
|
+
/** Lower `tree` for `PopupMenu`. `actions` is what {@link resolveMenuItemState} reads. */
|
|
45
|
+
export declare function planPopupMenu(tree: AdwMenuTree, actions?: AdwMenuActions): PopupMenuPlan;
|
|
46
46
|
/** Throw naming every refusal, as `assertMenuRenderable` does for the sheet. */
|
|
47
47
|
export declare function assertPopupMenuPlan(plan: PopupMenuPlan): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AdwMenuItem, AdwMenuModel, AdwMenuPath } from './menu.js';
|
|
2
2
|
/**
|
|
3
3
|
* The four mutually exclusive content slots of the action half. `'empty'` is the
|
|
4
4
|
* initial state — `label`, `icon-name` and `child` are all `NULL`.
|
|
@@ -190,28 +190,23 @@ export declare class SplitButtonState {
|
|
|
190
190
|
* PROPERTY lives here; the `_S` → underlined-S derivation belongs to `GtkLabel`.
|
|
191
191
|
*/
|
|
192
192
|
setUseUnderline(value: boolean): boolean;
|
|
193
|
-
/** The menu model, or `null` when none is set.
|
|
193
|
+
/** The menu model, or `null` when none is set. */
|
|
194
194
|
get menuModel(): AdwMenuModel | null;
|
|
195
195
|
/**
|
|
196
196
|
* Set the menu model, dissociating any popover and replacing it with the model-derived
|
|
197
197
|
* one.
|
|
198
198
|
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
205
|
-
* non-`NULL` but empty `GMenu`, which leaves the dropdown live and pops up an empty
|
|
206
|
-
* popover; collapsing the two is what makes "no menu ⇒ insensitive dropdown" hold
|
|
207
|
-
* from a renderer's point of view. A model that is non-empty but draws nothing — one
|
|
208
|
-
* empty section — is NOT collapsed: it has a node, so it is a menu, which is the
|
|
209
|
-
* answer GTK gives for the same `GMenu`.
|
|
199
|
+
* `null` is the ONLY spelling of "no menu" (ADR 0128). MEASURED: an empty but
|
|
200
|
+
* non-`NULL` `Gio.Menu` written at `Adw.SplitButton.menu-model` still builds a
|
|
201
|
+
* `GtkPopoverMenu`, so the dropdown is live and pops up an empty popover. While the
|
|
202
|
+
* port's menu was an array this class had to collapse `[]` onto "no menu" — an array
|
|
203
|
+
* cannot be both empty and present — and that collapse was a divergence. A real model
|
|
204
|
+
* can be empty, so the collapse is gone.
|
|
210
205
|
*
|
|
211
206
|
* Notifies both properties per {@link DROPDOWN_NOTIFY_ORDER}; the guard is on the
|
|
212
207
|
* menu model ALONE, so clearing it on a popover-only button emits nothing.
|
|
213
208
|
*/
|
|
214
|
-
setMenuModel(
|
|
209
|
+
setMenuModel(next: AdwMenuModel | null): boolean;
|
|
215
210
|
/** The popover: the one the app set, or the model-derived stand-in, or `null`. */
|
|
216
211
|
get popover(): object | null;
|
|
217
212
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/adwaita-core",
|
|
3
|
-
"version": "0.64.
|
|
3
|
+
"version": "0.64.14",
|
|
4
4
|
"description": "Headless Adwaita widget behavior (breakpoint condition grammar + apply/unapply state machine, color-scheme observable, avatar derivation) shared by the web and NativeScript Adwaita renderers — pure TS, no platform imports",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -67,9 +67,9 @@
|
|
|
67
67
|
"headless"
|
|
68
68
|
],
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@gjsify/cli": "^0.64.
|
|
70
|
+
"@gjsify/cli": "^0.64.14",
|
|
71
71
|
"@gjsify/node-gi": "file:../../../packages/node-gi/node-gi",
|
|
72
|
-
"@gjsify/unit": "^0.64.
|
|
72
|
+
"@gjsify/unit": "^0.64.14",
|
|
73
73
|
"@types/node": "^25.9.2",
|
|
74
74
|
"typescript": "^6.0.3"
|
|
75
75
|
},
|