@gjsify/adwaita-core 0.36.0 → 0.38.0

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 (66) hide show
  1. package/lib/esm/accent.js +1 -0
  2. package/lib/esm/conformance/accent.js +1 -0
  3. package/lib/esm/conformance/index.js +1 -1
  4. package/lib/esm/conformance/shortcut-label.js +1 -0
  5. package/lib/esm/index.js +1 -1
  6. package/lib/esm/shortcut-label.js +1 -0
  7. package/lib/types/about-dialog.d.ts +92 -98
  8. package/lib/types/accent.d.ts +36 -0
  9. package/lib/types/accent.spec.d.ts +2 -0
  10. package/lib/types/action-row.d.ts +95 -125
  11. package/lib/types/avatar.d.ts +30 -37
  12. package/lib/types/banner.d.ts +25 -53
  13. package/lib/types/breakpoint.d.ts +6 -7
  14. package/lib/types/button-content.d.ts +41 -80
  15. package/lib/types/carousel.d.ts +175 -252
  16. package/lib/types/checks.d.ts +13 -30
  17. package/lib/types/chrome.d.ts +90 -136
  18. package/lib/types/color-scheme.d.ts +5 -6
  19. package/lib/types/conformance/about-dialog.d.ts +64 -91
  20. package/lib/types/conformance/accent.d.ts +20 -0
  21. package/lib/types/conformance/action-row.d.ts +26 -46
  22. package/lib/types/conformance/avatar.d.ts +8 -10
  23. package/lib/types/conformance/banner.d.ts +17 -37
  24. package/lib/types/conformance/button-content.d.ts +24 -46
  25. package/lib/types/conformance/carousel.d.ts +35 -75
  26. package/lib/types/conformance/checks.d.ts +0 -4
  27. package/lib/types/conformance/chrome.d.ts +28 -36
  28. package/lib/types/conformance/data-grid.d.ts +28 -47
  29. package/lib/types/conformance/dialog.d.ts +4 -9
  30. package/lib/types/conformance/entry-row.d.ts +20 -39
  31. package/lib/types/conformance/index.d.ts +4 -0
  32. package/lib/types/conformance/navigation-view.d.ts +0 -4
  33. package/lib/types/conformance/popover.d.ts +4 -9
  34. package/lib/types/conformance/preferences.d.ts +15 -28
  35. package/lib/types/conformance/rows.d.ts +5 -12
  36. package/lib/types/conformance/shortcut-label.d.ts +34 -0
  37. package/lib/types/conformance/sidebar.d.ts +28 -49
  38. package/lib/types/conformance/spinner.d.ts +21 -27
  39. package/lib/types/conformance/split-button.d.ts +21 -43
  40. package/lib/types/conformance/split-view.d.ts +29 -36
  41. package/lib/types/conformance/tab-view.d.ts +32 -73
  42. package/lib/types/conformance/view-stack.d.ts +0 -12
  43. package/lib/types/conformance/view-switcher.d.ts +46 -114
  44. package/lib/types/conformance/wrap-box.d.ts +40 -63
  45. package/lib/types/data-grid.d.ts +38 -48
  46. package/lib/types/dialog.d.ts +39 -51
  47. package/lib/types/easing.d.ts +6 -12
  48. package/lib/types/entry-row.d.ts +94 -123
  49. package/lib/types/glib.d.ts +17 -25
  50. package/lib/types/index.d.ts +4 -0
  51. package/lib/types/length-unit.d.ts +7 -12
  52. package/lib/types/navigation-view.d.ts +62 -68
  53. package/lib/types/popover.d.ts +39 -66
  54. package/lib/types/preferences.d.ts +83 -100
  55. package/lib/types/rows.d.ts +45 -63
  56. package/lib/types/shortcut-label.d.ts +79 -0
  57. package/lib/types/shortcut-label.spec.d.ts +2 -0
  58. package/lib/types/sidebar.d.ts +95 -121
  59. package/lib/types/spinner.d.ts +39 -61
  60. package/lib/types/split-button.d.ts +78 -134
  61. package/lib/types/split-view.d.ts +74 -89
  62. package/lib/types/tab-view.d.ts +174 -256
  63. package/lib/types/view-stack.d.ts +87 -129
  64. package/lib/types/view-switcher.d.ts +126 -211
  65. package/lib/types/wrap-box.d.ts +62 -123
  66. package/package.json +3 -3
@@ -2,43 +2,40 @@
2
2
  export interface CreditPersonVector {
3
3
  /** The raw credit line, as an app puts it in `developers` etc. */
4
4
  input: string;
5
- /** `*name` after `g_strstrip` (:520, :528, :533). */
5
+ /** `*name` after `g_strstrip`. */
6
6
  name: string;
7
7
  /** `*link` — `null` is "no link", `''` is an EMPTY link and still a link. */
8
8
  link: string | null;
9
- /** `*is_email`, i.e. `*q1 == '<'` (:521). */
9
+ /** `*is_email`, i.e. `*q1 == '<'`. */
10
10
  isEmail: boolean;
11
- /** The URI the row gets (`add_credits_section` :571-580). */
11
+ /** The URI the row gets, per `add_credits_section`. */
12
12
  uri: string | null;
13
- /** Why this row exists — the rule or edge case it pins down. */
14
13
  rule: string;
15
14
  }
16
15
  /**
17
- * `parse_person` (adw-about-dialog.c:490-534), verified against real GLib.
16
+ * `parse_person`, verified against real GLib.
18
17
  *
19
- * Seven of these rows are the browser renderer's divergences, and each was a
20
- * plausible-looking simplification: anchoring the angle pair at the end of the
21
- * string, testing the link for `@`, requiring whitespace before a bare URL,
22
- * accepting `mailto:` as a scheme, `String.trim()` instead of `g_strstrip`,
23
- * treating index 0 as falsy, and never reaching the `r1 <= q1 + 1` branch.
18
+ * Seven rows pin the plausible-looking simplifications a re-implementation reaches for:
19
+ * anchoring the angle pair at the end of the string, testing the link for `@`, requiring
20
+ * whitespace before a bare URL, accepting `mailto:` as a scheme, `String.trim()` instead
21
+ * of `g_strstrip`, treating index 0 as falsy, and never reaching the `r1 <= q1 + 1`
22
+ * branch.
24
23
  */
25
24
  export declare const CREDIT_PERSON_VECTORS: ReadonlyArray<CreditPersonVector>;
26
25
  /** One `translator-credits` split expectation. */
27
26
  export interface TranslatorCreditsVector {
28
- /** The raw `translator-credits` property value. */
29
27
  value: string | null;
30
28
  /** The names the "Translated by" section is built from. */
31
29
  people: ReadonlyArray<string>;
32
- /** Why this row exists. */
33
30
  rule: string;
34
31
  }
35
32
  /**
36
- * The sentinel guard + split (adw-about-dialog.c:603-608), with `g_strsplit`'s
33
+ * The sentinel guard + split, with `g_strsplit`'s
37
34
  * token behaviour verified against GLib 2.88.
38
35
  *
39
36
  * The empty-string row is the one a port gets wrong: `g_strsplit ("", "\n", 0)`
40
37
  * is a ZERO-length vector, so `add_credits_section` bails at `!*people`
41
- * (:545-546) and no section is drawn; JS `''.split('\n')` is `['']`, which
38
+ * and no section is drawn, where JS `''.split('\n')` is `['']` and
42
39
  * draws the section with one blank row.
43
40
  *
44
41
  * CORE-ONLY: an internal step of a pipeline whose COMPOSED result is renderer-driven — driving it separately would assert the same thing twice (ABOUT_DIALOG_CREDITS_LEGAL_VECTORS)
@@ -46,7 +43,6 @@ export interface TranslatorCreditsVector {
46
43
  export declare const TRANSLATOR_CREDITS_VECTORS: ReadonlyArray<TranslatorCreditsVector>;
47
44
  /** One assembled credits-page expectation. */
48
45
  export interface CreditsSectionsVector {
49
- /** The credit properties, as an app sets them. */
50
46
  input: {
51
47
  developers?: ReadonlyArray<string>;
52
48
  designers?: ReadonlyArray<string>;
@@ -66,26 +62,25 @@ export interface CreditsSectionsVector {
66
62
  uri: string | null;
67
63
  }>;
68
64
  }>;
69
- /** Why this row exists. */
70
65
  rule: string;
71
66
  }
72
67
  /**
73
- * `update_credits` (:593-627) — which groups exist, in which order.
68
+ * `update_credits` — which groups exist, in which order.
74
69
  *
75
- * The order is fixed by the five `add_credits_section` calls (:611-619) followed
76
- * by the app's own sections in insertion order (:621-625). An empty property is
77
- * not an empty group, it is no group (:545-546).
70
+ * The order is fixed by the five `add_credits_section` calls then the
71
+ * app's own sections in insertion order. An empty property is not an
72
+ * empty group, it is no group.
78
73
  */
79
74
  export declare const CREDITS_SECTIONS_VECTORS: ReadonlyArray<CreditsSectionsVector>;
80
- /** The `update_details` half of the truth table (:1102-1119). */
75
+ /** The `update_details` half of the truth table. */
81
76
  export interface AboutDialogDetailsVector {
82
77
  /** `website` non-empty. */
83
78
  website: boolean;
84
79
  /** `comments` non-empty. */
85
80
  comments: boolean;
86
- /** `add_link` was called at least once (:2820). */
81
+ /** `add_link` was called at least once. */
87
82
  customLinks: boolean;
88
- /** `release-notes` non-empty (:1020-1021). */
83
+ /** `release-notes` non-empty. */
89
84
  releaseNotes: boolean;
90
85
  /** The seven widgets `update_details` decides. */
91
86
  visible: {
@@ -97,21 +92,19 @@ export interface AboutDialogDetailsVector {
97
92
  linksGroup: boolean;
98
93
  detailsWebsiteRow: boolean;
99
94
  };
100
- /** Why this row exists. */
101
95
  rule: string;
102
96
  }
103
97
  /**
104
- * `update_details` (:1102-1119), exhaustive over (website, comments,
98
+ * `update_details`, exhaustive over (website, comments,
105
99
  * custom links) plus the two rows that show what release notes add.
106
100
  *
107
- * The row that matters most is `website only`: it is the ONE combination where
108
- * the website link stays on the main page and no Details row is offered, and it
109
- * is the combination a port reproduces incorrectly by folding `website` into
110
- * its "has details" predicate. `show_details` is `has_comments ||
111
- * has_custom_links` — website is deliberately not in it (:1108).
101
+ * `website only` matters most: the ONE combination where the website link stays
102
+ * on the main page and no Details row is offered, and the one a port gets wrong by
103
+ * folding `website` into its "has details" predicate. `show_details` is
104
+ * `has_comments || has_custom_links` — website is deliberately not in it.
112
105
  */
113
106
  export declare const ABOUT_DIALOG_DETAILS_VECTORS: ReadonlyArray<AboutDialogDetailsVector>;
114
- /** The `update_support` half of the truth table (:1121-1133). */
107
+ /** The `update_support` half of the truth table. */
115
108
  export interface AboutDialogSupportVector {
116
109
  /** `support-url` non-empty. */
117
110
  supportUrl: boolean;
@@ -126,27 +119,25 @@ export interface AboutDialogSupportVector {
126
119
  issueRow: boolean;
127
120
  troubleshootingRow: boolean;
128
121
  };
129
- /** Why this row exists. */
130
122
  rule: string;
131
123
  }
132
124
  /**
133
- * `update_support` (:1121-1133), exhaustive.
125
+ * `update_support`, exhaustive.
134
126
  *
135
- * Every widget here is a child of `support_group`, which the template puts on
136
- * the MAIN page (adw-about-dialog.ui:146-186) — the class docs say so outright
137
- * ("displays the following two links on the main page", :87-90). The browser
138
- * renderer put Support Questions and Report an Issue on the Details page
139
- * instead, which hid the issue tracker behind a navigation step AND made the
140
- * Details page appear for a dialog that has no Details content in GTK terms.
127
+ * Every widget here is a child of `support_group`, which the template puts on the
128
+ * MAIN page, as both the template and the class docs say. The
129
+ * browser renderer put Support Questions and Report an Issue on the Details page,
130
+ * hiding the issue tracker behind a navigation step AND making the Details page
131
+ * appear for a dialog with no Details content in GTK terms.
141
132
  */
142
133
  export declare const ABOUT_DIALOG_SUPPORT_VECTORS: ReadonlyArray<AboutDialogSupportVector>;
143
- /** The `update_credits_legal_group` half of the truth table (:480-487). */
134
+ /** The `update_credits_legal_group` half of the truth table. */
144
135
  export interface AboutDialogCreditsLegalVector {
145
- /** `credits_box` has children (:629-630). */
136
+ /** `credits_box` has children. */
146
137
  hasCredits: boolean;
147
- /** `legal_box` has children (:745-746). */
138
+ /** `legal_box` has children. */
148
139
  hasLegal: boolean;
149
- /** `add_acknowledgement_section` was called (:3297). */
140
+ /** `add_acknowledgement_section` was called. */
150
141
  hasAcknowledgements: boolean;
151
142
  /** The four widgets, all on the main page. */
152
143
  visible: {
@@ -155,12 +146,11 @@ export interface AboutDialogCreditsLegalVector {
155
146
  legalRow: boolean;
156
147
  acknowledgementsRow: boolean;
157
148
  };
158
- /** Why this row exists. */
159
149
  rule: string;
160
150
  }
161
151
  /**
162
- * `update_credits_legal_group` (:480-487) with the three template bindings
163
- * (adw-about-dialog.ui:198, :215, :233), exhaustive.
152
+ * `update_credits_legal_group` with the three template bindings,
153
+ * exhaustive.
164
154
  *
165
155
  * Each row's visibility is bound directly to its page's box, so the group is
166
156
  * the OR of the three and never appears empty.
@@ -168,46 +158,37 @@ export interface AboutDialogCreditsLegalVector {
168
158
  export declare const ABOUT_DIALOG_CREDITS_LEGAL_VECTORS: ReadonlyArray<AboutDialogCreditsLegalVector>;
169
159
  /** One main-page header-field visibility expectation. */
170
160
  export interface AboutDialogHeaderVector {
171
- /** The property being set. */
172
161
  property: 'application-icon' | 'application-name' | 'developer-name' | 'version';
173
- /** Its value. */
174
162
  value: string;
175
- /** Whether the corresponding widget is shown. */
176
163
  visible: boolean;
177
- /** Why this row exists. */
178
164
  rule: string;
179
165
  }
180
166
  /**
181
- * The four `x && *x` visibility tests on the main page (:2313-2314, :2376-2377,
182
- * :2426-2427, :2476).
167
+ * The four `x && *x` visibility tests on the main page.
183
168
  *
184
- * All four are FIRST-CHARACTER tests, so a single space is content. There is no
185
- * fallback anywhere: an unset application name shows NO label, it does not show
186
- * the word "Application", and an unset icon shows NO image, not a generic
187
- * executable glyph. The browser renderer invented both.
169
+ * All four are FIRST-CHARACTER tests, so a single space is content, and there is no fallback
170
+ * anywhere: an unset application name shows NO label, an unset icon NO image.
188
171
  */
189
172
  export declare const ABOUT_DIALOG_HEADER_VECTORS: ReadonlyArray<AboutDialogHeaderVector>;
190
173
  /** One template-label expectation. */
191
174
  export interface AboutDialogLabelVector {
192
- /** Which label. */
193
175
  label: 'dialogTitle' | 'detailsRow' | 'websiteRow' | 'supportRow' | 'issueRow' | 'troubleshootingRow' | 'creditsRow' | 'legalRow' | 'acknowledgementsRow' | 'whatsNewRow' | 'detailsPage' | 'creditsPage' | 'legalPage';
194
176
  /** The template string, mnemonic marker included. */
195
177
  text: string;
196
178
  /** What a renderer with no accelerator layer paints (`stripMnemonic`). */
197
179
  plain: string;
198
- /** Why this row exists. */
199
180
  rule: string;
200
181
  }
201
182
  /**
202
183
  * The template labels (adw-about-dialog.ui), with and without their mnemonic
203
184
  * markers.
204
185
  *
205
- * `dialogTitle` is the row that catches the invented one: the main navigation
206
- * page binds its title to `AdwDialog:title`, whose template default is the bare
207
- * word "About" (.ui:6, :19). The application name is NOT part of it — it appears
208
- * on its own in the header revealer that fades in on scroll (.ui:29-31). A
209
- * renderer that titles the page "About <app>" AND labels the dialog "About
210
- * <app>" says the app's name three times on one screen.
186
+ * `dialogTitle` catches the invented one: the main navigation page binds its
187
+ * title to `AdwDialog:title`, whose template default is the bare word "About"
188
+ * from the template. The application name is NOT part of it — it appears on its own in the
189
+ * header revealer that fades in on scroll. A renderer titling the
190
+ * page "About <app>" AND labelling the dialog "About <app>" says the app's name
191
+ * three times on one screen.
211
192
  *
212
193
  * CORE-ONLY: a string table the renderers read THROUGH ADW_ABOUT_DIALOG_LABELS; the rendered text is asserted by ABOUT_DIALOG_HEADER/DETAILS_VECTORS
213
194
  */
@@ -220,16 +201,15 @@ export interface LicenseInfoVector {
220
201
  spdxId: string | null;
221
202
  /** `gtk_license_info[i].url`. */
222
203
  url: string | null;
223
- /** Why this row exists. */
224
204
  rule: string;
225
205
  }
226
206
  /**
227
- * Spot rows from `gtk_license_info` (:215-252) — the ends and the boundaries,
207
+ * Spot rows from `gtk_license_info` — the ends and the boundaries,
228
208
  * not a second copy of the whole table.
229
209
  *
230
210
  * Index 18 is pinned because `G_STATIC_ASSERT (G_N_ELEMENTS (gtk_license_info)
231
- * - 1 == GTK_LICENSE_0BSD)` (:253-256) is the C's own check that the table and
232
- * the enum have not drifted; this is that assertion, ported.
211
+ * - 1 == GTK_LICENSE_0BSD)` is the C's own drift check; this is that
212
+ * assertion, ported.
233
213
  *
234
214
  * CORE-ONLY: an internal step of a pipeline whose COMPOSED result is renderer-driven — driving it separately would assert the same thing twice (ABOUT_DIALOG_CREDITS_LEGAL_VECTORS)
235
215
  */
@@ -240,56 +220,51 @@ export interface LicenseSpdxVector {
240
220
  spdxId: string;
241
221
  /** The `GtkLicense` it resolves to, or `null` for no match. */
242
222
  licenseType: number | null;
243
- /** Why this row exists. */
244
223
  rule: string;
245
224
  }
246
- /** The two lookup loops in `populate_from_appdata` (:1226-1239). *
225
+ /**
226
+ * The two lookup loops in `populate_from_appdata`.
227
+ *
247
228
  * CORE-ONLY: an internal step of a pipeline whose COMPOSED result is renderer-driven — driving it separately would assert the same thing twice (LICENSE_INFO_VECTORS → the legal section)
248
229
  */
249
230
  export declare const LICENSE_SPDX_VECTORS: ReadonlyArray<LicenseSpdxVector>;
250
231
  /** One `get_license_text` expectation. */
251
232
  export interface LicenseTextVector {
252
- /** The `GtkLicense` value. */
253
233
  licenseType: number;
254
- /** The `license` property. */
255
234
  license: string;
256
235
  /** What the Legal page shows, `null` meaning "no licence text at all". */
257
236
  text: string | null;
258
- /** Why this row exists. */
259
237
  rule: string;
260
238
  }
261
- /** `get_license_text` (:635-651). *
239
+ /**
240
+ * `get_license_text`.
241
+ *
262
242
  * CORE-ONLY: an internal step of a pipeline whose COMPOSED result is renderer-driven — driving it separately would assert the same thing twice (ABOUT_DIALOG_CREDITS_LEGAL_VECTORS)
263
243
  */
264
244
  export declare const LICENSE_TEXT_VECTORS: ReadonlyArray<LicenseTextVector>;
265
245
  /** One licence-setter step. */
266
246
  export interface LicenseSetterStep {
267
- /** Which setter is called. */
268
247
  property: 'license' | 'license-type';
269
- /** The argument. */
270
248
  value: string | number;
271
249
  }
272
250
  /** One licence-setter sequence expectation. */
273
251
  export interface LicenseSetterVector {
274
252
  /** The calls, in order, starting from the property defaults. */
275
253
  steps: ReadonlyArray<LicenseSetterStep>;
276
- /** `license` afterwards. */
277
254
  license: string;
278
- /** `license-type` afterwards. */
279
255
  licenseType: number;
280
256
  /** Every `g_object_notify_by_pspec` from every step, concatenated in order. */
281
257
  notify: ReadonlyArray<'license' | 'license-type'>;
282
- /** Why this row exists. */
283
258
  rule: string;
284
259
  }
285
260
  /**
286
- * The two setters (:3396-3416, :3459-3480), which are ONE state machine.
261
+ * The two setters, which are ONE state machine.
287
262
  *
288
- * Each notifies BOTH properties whenever it does anything (:3414-3415,
289
- * :3476-3477), because setting either can move the other. The asymmetry in the
290
- * early-outs is the trap: `set_license` bails on an unchanged STRING before it
291
- * would have set the type to custom, so re-assigning the same text after a
292
- * licence-type change does switch the type, while assigning `""` to an already
263
+ * Each notifies BOTH properties whenever it does anything, so setting either can move the
264
+ * other. The trap is the
265
+ * asymmetry in the early-outs: `set_license` bails on an unchanged STRING before
266
+ * it would have set the type to custom, so re-assigning the same text after a
267
+ * licence-type change DOES switch the type, while assigning `""` to an already
293
268
  * empty licence does not.
294
269
  *
295
270
  * CORE-ONLY: a property-ordering table with no rendered surface — the RESULT is ABOUT_DIALOG_CREDITS_LEGAL_VECTORS, which both renderers drive
@@ -297,18 +272,16 @@ export interface LicenseSetterVector {
297
272
  export declare const LICENSE_SETTER_VECTORS: ReadonlyArray<LicenseSetterVector>;
298
273
  /** One Legal-page visibility expectation. */
299
274
  export interface LegalSectionVector {
300
- /** The `copyright` property. */
301
275
  copyright: string;
302
- /** The `license-type`. */
303
276
  licenseType: number;
304
- /** The `license` text. */
305
277
  license: string;
306
- /** Whether the app's own legal section is drawn at all (:666-671). */
278
+ /** Whether the app's own legal section is drawn at all. */
307
279
  visible: boolean;
308
- /** Why this row exists. */
309
280
  rule: string;
310
281
  }
311
- /** `append_legal_section`'s early-outs for the default section (:666-671, :740). *
282
+ /**
283
+ * `append_legal_section`'s early-outs for the default section.
284
+ *
312
285
  * CORE-ONLY: an internal step of a pipeline whose COMPOSED result is renderer-driven — driving it separately would assert the same thing twice (ABOUT_DIALOG_CREDITS_LEGAL_VECTORS)
313
286
  */
314
287
  export declare const LEGAL_SECTION_VECTORS: ReadonlyArray<LegalSectionVector>;
@@ -0,0 +1,20 @@
1
+ import type { AdwAccentColorName } from '../accent.js';
2
+ /** One accent → its background and both standalone colours. */
3
+ export interface AccentColorVector {
4
+ /** The `AdwAccentColor` member, lowercased. */
5
+ name: AdwAccentColorName;
6
+ /** `adw_accent_color_to_rgba` — the background colour. */
7
+ background: string;
8
+ /** `adw_accent_color_to_standalone_rgba (…, FALSE)` — for a light surface. */
9
+ standaloneLight: string;
10
+ /** `adw_accent_color_to_standalone_rgba (…, TRUE)` — for a dark surface. */
11
+ standaloneDark: string;
12
+ }
13
+ /**
14
+ * The nine accents of `AdwAccentColor`, measured against libadwaita 1.9.2.
15
+ *
16
+ * The background colours also appear in the C as literals; the standalone ones
17
+ * appear NOWHERE as literals — they are what `min(l, 0.5)` / `max(l, 0.85)`
18
+ * produce, which is why this table is the only place they are written down.
19
+ */
20
+ export declare const ACCENT_COLOR_VECTORS: ReadonlyArray<AccentColorVector>;
@@ -2,24 +2,21 @@
2
2
  export interface LabelVisibilityVector {
3
3
  /** The label's text — `null` stands for "property unset / attribute absent". */
4
4
  text: string | null;
5
- /** Whether the bound label is visible. */
6
5
  visible: boolean;
7
- /** Why this row exists — the rule or edge case it pins down. */
8
6
  rule: string;
9
7
  }
10
8
  /**
11
- * `string_is_not_empty` (adw-action-row.c:112-117 ≡ adw-button-row.c:92-97,
12
- * inlined at adw-window-title.c:208 and :249).
9
+ * `string_is_not_empty`, declared identically in `adw-action-row.c` and
10
+ * `adw-button-row.c`.
13
11
  *
14
- * Applies to the TITLE and to the subtitle alike — the bindings are two copies
15
- * of the same closure (adw-action-row.ui:49-53 and :71-75). The title half is
16
- * what every port dropped: a row with `title=""` kept a zero-height but
17
- * line-height-consuming label, and `<adw-window-title>` reserved a title line in
18
- * every header bar that only had a subtitle.
12
+ * Applies to the TITLE and the subtitle alike — the `.ui` bindings are two copies of the
13
+ * same closure. The title half is the one a port drops: a row with `title=""` keeps a
14
+ * zero-height but line-height-consuming label, and `<adw-window-title>` reserves a title
15
+ * line in a header bar that only has a subtitle.
19
16
  *
20
- * `' '` is the canary row. The C never trims — `string && string[0]` reads ONE
21
- * byte — so a single space is a VISIBLE label. A port reaching for
22
- * `value.trim().length` passes every other row here and fails this one.
17
+ * `' '` is the canary row. The C never trims — `string && string[0]` reads ONE byte — so
18
+ * a single space is a VISIBLE label, and a port reaching for `value.trim().length` passes
19
+ * every other row here and fails this one.
23
20
  */
24
21
  export declare const LABEL_VISIBILITY_VECTORS: ReadonlyArray<LabelVisibilityVector>;
25
22
  /** One step of an {@link ActionRowActivationVector}. */
@@ -47,25 +44,22 @@ export type ActionRowStep =
47
44
  };
48
45
  /** One `activatable-widget` ↔ `activatable` expectation. */
49
46
  export interface ActionRowActivationVector {
50
- /** What the scenario is called. */
51
47
  name: string;
52
- /** The steps to run against a fresh row, in order. */
53
48
  steps: readonly ActionRowStep[];
54
49
  /** `GtkListBoxRow:activatable` afterwards. */
55
50
  activatable: boolean;
56
51
  /** `AdwActionRow:activatable-widget` afterwards, by id. */
57
52
  activatableWidget: string | null;
58
- /** Why this row exists. */
59
53
  rule: string;
60
54
  }
61
55
  /**
62
- * `adw_action_row_set_activatable_widget` (adw-action-row.c:696-741).
56
+ * `adw_action_row_set_activatable_widget`.
63
57
  *
64
58
  * The two rows that decide whether a port read the C or guessed it:
65
59
  * `insensitive-widget-does-not-activate` (the binding is `sensitive` →
66
- * `activatable` with `G_BINDING_SYNC_CREATE`, C:729-732 — NOT a constant TRUE),
67
- * and `unsetting-keeps-activatable` (clearing only unbinds, C:709, so the flag
68
- * stays where the binding last left it — stated outright at C:28-30).
60
+ * `activatable` with `G_BINDING_SYNC_CREATE`, NOT a constant TRUE), and
61
+ * `unsetting-keeps-activatable` (clearing only unbinds, so the flag stays where the binding
62
+ * last left it — the class docs say so outright).
69
63
  */
70
64
  export declare const ACTION_ROW_ACTIVATION_VECTORS: ReadonlyArray<ActionRowActivationVector>;
71
65
  /** One step of a {@link SwitchRowNotifyVector}. */
@@ -81,26 +75,23 @@ export type SwitchRowStep =
81
75
  };
82
76
  /** One `notify::active` expectation. */
83
77
  export interface SwitchRowNotifyVector {
84
- /** What the scenario is called. */
85
78
  name: string;
86
- /** The steps to run against a fresh row, in order. */
87
79
  steps: readonly SwitchRowStep[];
88
80
  /** `Adw.SwitchRow:active` afterwards. */
89
81
  active: boolean;
90
82
  /** The `active` value carried by each `notify::active`, in emission order. */
91
83
  emitted: readonly boolean[];
92
- /** Why this row exists. */
93
84
  rule: string;
94
85
  }
95
86
  /**
96
- * `adw_switch_row_set_active` (C:216-228) → `slider_notify_active_cb` (C:66-77).
87
+ * `adw_switch_row_set_active` → `slider_notify_active_cb`.
97
88
  *
98
89
  * `programmatic-set-notifies` is the row the two renderers answered differently:
99
90
  * the notify is emitted by the SLIDER's own `notify::active`, which fires
100
91
  * whatever wrote it, so there is no programmatic-vs-interactive split to model.
101
92
  * `activate-row-toggles` is the row NEITHER had: `adw_switch_row_init` points
102
- * the activatable-widget at the slider (C:160-162) and the class docs spell out
103
- * the result (C:23-27).
93
+ * the activatable-widget at the slider and the class docs spell out
94
+ * the result.
104
95
  */
105
96
  export declare const SWITCH_ROW_NOTIFY_VECTORS: ReadonlyArray<SwitchRowNotifyVector>;
106
97
  /** One `Adw.ButtonRow` icon expectation. */
@@ -109,15 +100,14 @@ export interface ButtonRowIconVector {
109
100
  startIconName: string | null;
110
101
  /** `AdwButtonRow:end-icon-name`. */
111
102
  endIconName: string | null;
112
- /** Whether the leading `image.icon.start` shows (adw-button-row.ui:20-24). */
103
+ /** Whether the leading `image.icon.start` shows. */
113
104
  startIconVisible: boolean;
114
- /** Whether the trailing `image.icon.end` shows (adw-button-row.ui:55-59). */
105
+ /** Whether the trailing `image.icon.end` shows. */
115
106
  endIconVisible: boolean;
116
- /** Why this row exists. */
117
107
  rule: string;
118
108
  }
119
109
  /**
120
- * The two icons of `Adw.ButtonRow` (C:201-223), each bound through the same
110
+ * The two icons of `Adw.ButtonRow`, each bound through the same
121
111
  * `string_is_not_empty` closure as the title.
122
112
  *
123
113
  * `end-icon-name` has existed since 1.6 and was missing from BOTH renderers, so
@@ -131,20 +121,16 @@ export interface ButtonRowActivatableVector {
131
121
  declared: string | null;
132
122
  /** Whether the row activates. Always `true`. */
133
123
  activatable: boolean;
134
- /** Why this row exists. */
135
124
  rule: string;
136
125
  }
137
126
  /**
138
- * `Adw.ButtonRow` is always activatable — `adw-button-row.ui:5` sets it TRUE in
139
- * the template, `adw-button-row.c:31` documents it in one line, and the class
140
- * exposes no property, no setter and no getter for it (the whole public surface
141
- * is C:270-352: `new`, and the two icon-name pairs).
127
+ * `Adw.ButtonRow` is always activatable — the template sets it TRUE and the class exposes
128
+ * no property, no setter and no getter for it; the whole public surface is `new` plus the
129
+ * two icon-name pairs.
142
130
  *
143
- * The vector exists because the browser renderer had invented an
144
- * `activatable="false"` opt-out — and `adw-button-row.spec.ts` PINNED the
145
- * invention with a passing test, which is worse than not testing it: it made the
146
- * divergence look like a decision. A row that reads its own attribute is a row
147
- * that has to be told to ignore it.
131
+ * The vector exists because a renderer had invented an `activatable="false"` opt-out and
132
+ * its own spec PINNED the invention with a passing test, which made the divergence look
133
+ * like a decision.
148
134
  */
149
135
  export declare const BUTTON_ROW_ACTIVATABLE_VECTORS: ReadonlyArray<ButtonRowActivatableVector>;
150
136
  /** One step of a {@link WindowTitleVector}. */
@@ -157,25 +143,19 @@ export type WindowTitleStep = {
157
143
  };
158
144
  /** One `Adw.WindowTitle` expectation. */
159
145
  export interface WindowTitleVector {
160
- /** What the scenario is called. */
161
146
  name: string;
162
147
  /** The steps to run against a fresh window title, in order. */
163
148
  steps: readonly WindowTitleStep[];
164
- /** The title text afterwards. */
165
149
  title: string;
166
- /** Whether the title label is visible (C:207-208). */
167
150
  titleVisible: boolean;
168
- /** The subtitle text afterwards. */
169
151
  subtitle: string;
170
- /** Whether the subtitle label is visible (C:248-249). */
171
152
  subtitleVisible: boolean;
172
153
  /** Which property each `notify::*` named, in emission order. */
173
154
  notified: readonly ('title' | 'subtitle')[];
174
- /** Why this row exists. */
175
155
  rule: string;
176
156
  }
177
157
  /**
178
- * `adw_window_title_set_title` / `_set_subtitle` (C:197-211, C:238-252).
158
+ * `adw_window_title_set_title` / `_set_subtitle`.
179
159
  *
180
160
  * `null-over-empty-is-silent` is the one DIVERGENCE in this file, and it is
181
161
  * deliberate: libadwaita would notify there, because its guard compares a
@@ -4,11 +4,10 @@ export interface AvatarInitialsVector {
4
4
  text: string;
5
5
  /** What `extract_initials_from_text` produces for it. */
6
6
  initials: string;
7
- /** Why this row exists — the rule or edge case it pins down. */
8
7
  rule: string;
9
8
  }
10
9
  /**
11
- * `extract_initials_from_text` (adw-avatar.c:85) — the first character, plus the
10
+ * `extract_initials_from_text` — the first character, plus the
12
11
  * character after the LAST ASCII space when there is one.
13
12
  */
14
13
  export declare const AVATAR_INITIALS_VECTORS: ReadonlyArray<AvatarInitialsVector>;
@@ -27,17 +26,16 @@ export interface AvatarFontSizeVector {
27
26
  size: number;
28
27
  /** `sqr_size - padding` for that diameter, rounded to 2dp for the table. */
29
28
  maxFontSize: number;
30
- /** What the browser renderer's old heuristic asked for, before this landed. */
29
+ /** The pre-lift browser heuristic, kept as the counter-example. */
31
30
  legacyWebGuess: number;
32
31
  }
33
32
  /**
34
- * `update_font_size`'s cap (adw-avatar.c:221-227) — the inscribed square
33
+ * `update_font_size`'s cap — the inscribed square
35
34
  * `size / 1.4142` less `max(size * 0.4 - 5, 0)`.
36
35
  *
37
- * `legacyWebGuess` is kept in the table on purpose: it is `size * (size < 32 ?
38
- * 0.5 : 0.4)`, which OVERFLOWS the cap at 28, 30, 31 and every size from 64 up
39
- * (the initials spilled out of the circle), and is not even monotonic — it asked
40
- * for 16px at size 31 and 13px at size 32.
36
+ * `legacyWebGuess` is kept in the table on purpose: `size * (size < 32 ? 0.5 : 0.4)`
37
+ * OVERFLOWS the cap at 28, 30, 31 and every size from 64 up (the initials spill out of the
38
+ * circle), and is not even monotonic — 16px at size 31, 13px at size 32.
41
39
  */
42
40
  export declare const AVATAR_FONT_SIZE_VECTORS: ReadonlyArray<AvatarFontSizeVector>;
43
41
  /** One `avatarMode` expectation. */
@@ -48,10 +46,10 @@ export interface AvatarModeVector {
48
46
  mode: 'image' | 'initials' | 'icon';
49
47
  rule: string;
50
48
  }
51
- /** `update_visibility` (adw-avatar.c:117). */
49
+ /** `update_visibility`. */
52
50
  export declare const AVATAR_MODE_VECTORS: ReadonlyArray<AvatarModeVector>;
53
51
  /**
54
- * `g_str_hash` + `set_class_color` (adw-avatar.c:143).
52
+ * `g_str_hash` + `set_class_color`.
55
53
  *
56
54
  * The non-ASCII rows are the ones that matter: GLib hashes the UTF-8 bytes as
57
55
  * `signed char`, so a port reading UTF-16 code units picks a different colour