@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
@@ -13,28 +13,24 @@ export interface PreferencesGroupHeaderVector {
13
13
  * markup-rendering gap is what retires the flag.
14
14
  */
15
15
  dependsOnMarkup?: boolean;
16
- /** Why this row exists — the rule or the regression it pins down. */
17
16
  rule: string;
18
17
  }
19
18
  /**
20
19
  * `update_title_visibility` / `update_description_visibility` /
21
- * `update_listbox_visibility` / `is_single_line` / `update_header_visibility`
22
- * (adw-preferences-group.c:91-156).
20
+ * `update_listbox_visibility` / `is_single_line` / `update_header_visibility`.
23
21
  */
24
22
  export declare const PREFERENCES_GROUP_HEADER_VECTORS: ReadonlyArray<PreferencesGroupHeaderVector>;
25
23
  /** One `defaultCaseFolder` expectation. */
26
24
  export interface CaseFoldVector {
27
- /** The string being folded. */
28
25
  text: string;
29
26
  /** `g_utf8_casefold(text)` — Unicode FULL case folding. */
30
27
  folded: string;
31
28
  /** What a bare `toLowerCase()` returns, kept in the table as the trap. */
32
29
  naiveLowerCase: string;
33
- /** Why this row exists. */
34
30
  rule: string;
35
31
  }
36
32
  /**
37
- * `g_utf8_casefold` (adw-preferences-dialog.c:101, :133).
33
+ * `g_utf8_casefold`.
38
34
  *
39
35
  * Every row where `folded !== naiveLowerCase` is a query a `toLowerCase()` port
40
36
  * silently fails to match — in German, Greek and any text with a typographic
@@ -50,12 +46,10 @@ export interface StripMarkupVector {
50
46
  markup: string;
51
47
  /** The plain text, or `null` when `pango_parse_markup` fails. */
52
48
  plain: string | null;
53
- /** Why this row exists. */
54
49
  rule: string;
55
50
  }
56
51
  /**
57
- * `pango_parse_markup (…, accel_marker 0, …)` as `make_comparable` calls it
58
- * (adw-preferences-dialog.c:104-114).
52
+ * `pango_parse_markup (…, accel_marker 0, …)` as `make_comparable` calls it.
59
53
  *
60
54
  * `null` is not an error case to be smoothed over: it is the branch where C
61
55
  * logs a `g_critical` and KEEPS the unparsed string, so every `null` row below
@@ -70,11 +64,10 @@ export interface StripMnemonicVector {
70
64
  text: string;
71
65
  /** What `adw_strip_mnemonic` returns. */
72
66
  stripped: string;
73
- /** Why this row exists. */
74
67
  rule: string;
75
68
  }
76
69
  /**
77
- * `adw_strip_mnemonic` (adw-widget-utils.c:685-703) — `g_markup_escape_text`
70
+ * `adw_strip_mnemonic` — `g_markup_escape_text`
78
71
  * followed by `pango_parse_markup` with `accel_marker = '_'`.
79
72
  *
80
73
  * CORE-ONLY: an internal step of a pipeline whose COMPOSED result is renderer-driven — driving it separately would assert the same thing twice (PREFERENCES_SEARCH_VECTORS)
@@ -88,14 +81,13 @@ export interface MakeComparableVector {
88
81
  options: MakeComparableOptions;
89
82
  /** What the search compares against. */
90
83
  comparable: string;
91
- /** Why this row exists. */
92
84
  rule: string;
93
85
  }
94
86
  /**
95
- * `make_comparable` (adw-preferences-dialog.c:96-123).
87
+ * `make_comparable`.
96
88
  *
97
89
  * The defaults matter as much as the rows: `use-markup` defaults to TRUE
98
- * (adw-preferences-row.c:185-188) and `use-underline` to FALSE (:155-158), so
90
+ * and `use-underline` to FALSE, so
99
91
  * an ordinary row's title IS markup-parsed and is NOT mnemonic-stripped.
100
92
  *
101
93
  * CORE-ONLY: an internal step of a pipeline whose COMPOSED result is renderer-driven — driving it separately would assert the same thing twice (PREFERENCES_SEARCH_VECTORS)
@@ -103,33 +95,30 @@ export interface MakeComparableVector {
103
95
  export declare const MAKE_COMPARABLE_VECTORS: ReadonlyArray<MakeComparableVector>;
104
96
  /** One `rowMatchesQuery` expectation. */
105
97
  export interface RowMatchVector {
106
- /** The row being tested. */
107
98
  row: PreferencesSearchRow;
108
- /** What the user typed into the search entry. */
109
99
  query: string;
110
100
  /** Whether `filter_search_results` keeps the row. */
111
101
  matches: boolean;
112
- /** Why this row exists. */
113
102
  rule: string;
114
103
  }
115
- /** `filter_search_results` (adw-preferences-dialog.c:125-153). *
104
+ /**
105
+ * `filter_search_results`.
106
+ *
116
107
  * CORE-ONLY: an internal step of a pipeline whose COMPOSED result is renderer-driven — driving it separately would assert the same thing twice (PREFERENCES_SEARCH_VECTORS)
117
108
  */
118
109
  export declare const ROW_MATCH_VECTORS: ReadonlyArray<RowMatchVector>;
119
110
  /** One `collectSearchRows` expectation. */
120
111
  export interface SearchCorpusVector {
121
- /** The page tree being indexed. */
122
112
  pages: readonly PreferencesSearchPage[];
123
113
  /** The row titles the corpus contains, in order. */
124
114
  titles: readonly string[];
125
- /** Why this row exists. */
126
115
  rule: string;
127
116
  }
128
117
  /**
129
118
  * The three-filter chain: `adw_preferences_dialog_init`'s visible-page filter
130
- * (:632-641) over `adw_preferences_page_get_rows`' `is_visible_group`
131
- * (adw-preferences-page.c:831-834) over `adw_preferences_group_get_rows`'
132
- * `row_has_title` (adw-preferences-group.c:736-740).
119
+ * over `adw_preferences_page_get_rows`' `is_visible_group`
120
+ * over `adw_preferences_group_get_rows`'
121
+ * `row_has_title`.
133
122
  *
134
123
  * Dropping any clause is invisible — nothing errors, the search just quietly
135
124
  * indexes the wrong set — which is why these rows are separate from the
@@ -144,10 +133,11 @@ export interface SearchRowSubtitleVector {
144
133
  input: SearchRowSubtitleInput;
145
134
  /** The second line of the result row, `null` for none. */
146
135
  subtitle: string | null;
147
- /** Why this row exists. */
148
136
  rule: string;
149
137
  }
150
- /** `create_search_row_subtitle` (adw-preferences-dialog.c:168-234). *
138
+ /**
139
+ * `create_search_row_subtitle`.
140
+ *
151
141
  * CORE-ONLY: an internal step of a pipeline whose COMPOSED result is renderer-driven — driving it separately would assert the same thing twice (PREFERENCES_SEARCH_VECTORS)
152
142
  */
153
143
  export declare const SEARCH_ROW_SUBTITLE_VECTORS: ReadonlyArray<SearchRowSubtitleVector>;
@@ -165,16 +155,13 @@ export declare const PREFERENCES_SEARCH_PAGES: ReadonlyArray<PreferencesSearchPa
165
155
  export interface PreferencesSearchExpectation {
166
156
  /** The result row's title — copied verbatim from the matched row. */
167
157
  title: string;
168
- /** The result row's subtitle. */
169
158
  subtitle: string | null;
170
159
  }
171
160
  /** One end-to-end `searchPreferences` expectation over {@link PREFERENCES_SEARCH_PAGES}. */
172
161
  export interface PreferencesSearchVector {
173
- /** What the user typed. */
174
162
  query: string;
175
163
  /** The results, in corpus order. */
176
164
  results: readonly PreferencesSearchExpectation[];
177
- /** Why this row exists. */
178
165
  rule: string;
179
166
  }
180
167
  /**
@@ -19,9 +19,7 @@ export type ComboSelectionStep = {
19
19
  };
20
20
  /** One combo-selection scenario. */
21
21
  export interface ComboSelectionVector {
22
- /** Short scenario name. */
23
22
  name: string;
24
- /** The mutations, applied in order to a fresh state. */
25
23
  steps: readonly ComboSelectionStep[];
26
24
  /** `selectedIndex` afterwards. */
27
25
  selected: number;
@@ -35,12 +33,11 @@ export interface ComboSelectionVector {
35
33
  * gated on `interactive`.
36
34
  */
37
35
  emitted: ReadonlyArray<ComboStateChange>;
38
- /** Why this row exists — the rule or edge case it pins down. */
39
36
  rule: string;
40
37
  }
41
38
  /**
42
- * `adw_combo_row_set_selected` (adw-combo-row.c:772-789) and the notify chain it
43
- * drives (:136-155, :157-185), plus the two port answers the C leaves open (see
39
+ * `adw_combo_row_set_selected` and the notify chain it
40
+ * drives, plus the two port answers the C leaves open (see
44
41
  * the module header).
45
42
  *
46
43
  * Note that EVERY scenario starts with a `setOptions`, which is itself an
@@ -51,22 +48,18 @@ export interface ComboSelectionVector {
51
48
  export declare const COMBO_SELECTION_VECTORS: ReadonlyArray<ComboSelectionVector>;
52
49
  /** One `presentsChooser` expectation. */
53
50
  export interface ComboChooserVector {
54
- /** How many options the model holds. */
55
51
  count: number;
56
52
  /** Whether the arrow is drawn and the row is activatable. */
57
53
  presentsChooser: boolean;
58
- /** The rule this row pins down. */
59
54
  rule: string;
60
55
  }
61
56
  /**
62
- * `model_changed` (adw-combo-row.c:187-195) — one predicate, `n_items > 1`,
57
+ * `model_changed` — one predicate, `n_items > 1`,
63
58
  * driving BOTH `gtk_widget_set_visible (arrow_box, …)` and
64
59
  * `gtk_list_box_row_set_activatable (row, …)`.
65
60
  *
66
- * A row with one option or none has nothing to choose, so it stops presenting
67
- * itself as a chooser. Neither port did this: a NativeScript `AdwComboRow` with
68
- * a single option still showed its chevron and opened an `action()` sheet with
69
- * one entry, and the browser element behaved the same way.
61
+ * A row with one option or none has nothing to choose, so it stops presenting itself as a
62
+ * chooser: no chevron, and no sheet with a single entry in it.
70
63
  *
71
64
  * `Gtk.DropDown` is deliberately NOT covered — it keeps its arrow at any count,
72
65
  * which is why this lives on the combo ROW rather than in the shared chooser.
@@ -0,0 +1,34 @@
1
+ import type { ShortcutLabelNode } from '../shortcut-label.js';
2
+ /**
3
+ * The compact form of a parse, so the CORE suite compares the same strings the
4
+ * renderer suites serialise their DOM into.
5
+ *
6
+ * It lives here rather than in a spec file for exactly that reason: two
7
+ * serialisers would be two definitions of "the same rendering", and the
8
+ * divergence would show up as a passing test on both sides.
9
+ */
10
+ export declare function formatShortcutLabelNodes(nodes: readonly ShortcutLabelNode[]): string;
11
+ /** One accelerator → rendering expectation. */
12
+ export interface ShortcutLabelVector {
13
+ /** The `accelerator` property value. */
14
+ accelerator: string;
15
+ /** Compact rendering — see the header. */
16
+ expected: string;
17
+ /** `platform`, when the vector is about the Apple glyph set (:153-182). */
18
+ platform?: 'default' | 'apple';
19
+ /** `direction`, when the vector is about the sequence arrow (:439, :447). */
20
+ direction?: 'ltr' | 'rtl';
21
+ /** `disabled-text`, for the empty-accelerator vector (:513-520). */
22
+ disabledText?: string;
23
+ /** The accessible string — structure pinned, per-accelerator text is ours. */
24
+ accessibleLabel?: string;
25
+ /** The fragment that must fail to parse, if any (:531-534). */
26
+ error?: string;
27
+ /** Why this row exists. */
28
+ rule: string;
29
+ }
30
+ /**
31
+ * `AdwShortcutLabel`'s parse, across the four grammar levels and the label
32
+ * lookup (adw-shortcut-label.c:115-544).
33
+ */
34
+ export declare const SHORTCUT_LABEL_VECTORS: ReadonlyArray<ShortcutLabelVector>;
@@ -7,19 +7,17 @@ export interface SidebarClampVector {
7
7
  count: number;
8
8
  /** What `selected` reads back as: the index itself, or `-1` for no selection. */
9
9
  selected: number;
10
- /** Why this row exists. */
11
10
  rule: string;
12
11
  }
13
12
  /**
14
- * `adw_sidebar_set_selected` (adw-sidebar.c:3028-3029):
13
+ * `adw_sidebar_set_selected`:
15
14
  * `if (selected >= self->n_items) selected = GTK_INVALID_LIST_POSITION;`
16
15
  *
17
- * The negative rows are not a TS invention — `selected` is a `guint`, so `-7`
18
- * arrives as `4294967289`, which is `>= n_items`. The fractional/`NaN` rows are
19
- * the generalisation to values C cannot express: not a valid position is no
20
- * position. They are the inputs that used to be wrong — the web port truncated
21
- * `"1.5"` to row 1 and the NativeScript port stored `1.5` verbatim, highlighting
22
- * no row while reporting a selection.
16
+ * The negative rows are not a TS invention — `selected` is a `guint`, so `-7` arrives as
17
+ * `4294967289`, which is `>= n_items`. The fractional/`NaN` rows generalise to values C
18
+ * cannot express: not a valid position is no position. Both are the inputs a port gets
19
+ * wrong by truncating `"1.5"` to row 1, or by storing `1.5` verbatim and then reporting a
20
+ * selection while highlighting no row.
23
21
  */
24
22
  export declare const SIDEBAR_CLAMP_VECTORS: ReadonlyArray<SidebarClampVector>;
25
23
  /** One `adjustSidebarSelection` expectation — an `items-changed` splice. */
@@ -38,11 +36,10 @@ export interface SidebarItemsChangedVector {
38
36
  added: number;
39
37
  /** `selected` after `items_changed_cb` has run. */
40
38
  expected: number;
41
- /** Why this row exists. */
42
39
  rule: string;
43
40
  }
44
41
  /**
45
- * `items_changed_cb` (adw-sidebar.c:2246-2284) — the derivation NEITHER port had.
42
+ * `items_changed_cb`.
46
43
  *
47
44
  * The last row documents libadwaita's unsigned wraparound: with no selection,
48
45
  * `selected` is `G_MAXUINT`, so the "splice covers the selection" test can never
@@ -53,9 +50,7 @@ export interface SidebarItemsChangedVector {
53
50
  export declare const SIDEBAR_ITEMS_CHANGED_VECTORS: ReadonlyArray<SidebarItemsChangedVector>;
54
51
  /** One flattened-model expectation for a whole section list. */
55
52
  export interface SidebarModelVector {
56
- /** Human-readable name, used as the test title. */
57
53
  name: string;
58
- /** The declared sections. */
59
54
  sections: ReadonlyArray<AdwSidebarSectionSpec>;
60
55
  /** `n_items` — the size of the selection index space. */
61
56
  count: number;
@@ -70,31 +65,28 @@ export interface SidebarModelVector {
70
65
  }>;
71
66
  /** The headers that get drawn, in render order. */
72
67
  headers: ReadonlyArray<SidebarHeaderSpec>;
73
- /** Why this row exists. */
74
68
  rule: string;
75
69
  }
76
70
  /**
77
- * The flat index space (`items_changed_cb`'s section walk, adw-sidebar.c:2261-2267
78
- * + `adw_sidebar_item_get_index`, adw-sidebar-item.c:1040) and the header
79
- * derivation (`set_header_cb`/`create_header`, adw-sidebar.c:1532-1563, :1483-1530).
71
+ * The flat index space (`items_changed_cb`'s section walk plus
72
+ * `adw_sidebar_item_get_index`) and the header derivation
73
+ * (`set_header_cb`/`create_header`).
80
74
  *
81
- * The empty-leading-section rows are the ones the web port got wrong: it keyed
82
- * `.first` and the hidden-separator case off the DECLARATION index, so an empty
83
- * or fully-filtered first section drew a stray separator and cost section 1 the
84
- * flush-to-top padding `.header.first > .heading` prescribes.
75
+ * The empty-leading-section rows pin the trap: keying `.first` and the hidden-separator
76
+ * case off the DECLARATION index makes an empty or fully-filtered first section draw a
77
+ * stray separator and costs section 1 the flush-to-top padding
78
+ * `.header.first > .heading` prescribes.
85
79
  */
86
80
  export declare const SIDEBAR_MODEL_VECTORS: ReadonlyArray<SidebarModelVector>;
87
81
  /** One item-label-visibility expectation. */
88
82
  export interface SidebarItemFlagsVector {
89
- /** The declared item. */
90
83
  item: AdwSidebarItemSpec;
91
- /** `string_is_not_empty(title)` (adw-sidebar.c:1411-1412). */
84
+ /** `string_is_not_empty(title)`. */
92
85
  titleVisible: boolean;
93
- /** `string_is_not_empty(subtitle)` (adw-sidebar.c:1420-1421). */
86
+ /** `string_is_not_empty(subtitle)`. */
94
87
  subtitleVisible: boolean;
95
- /** `notify_icon_cb`'s `icon_name && *icon_name` (adw-sidebar.c:1303). */
88
+ /** `notify_icon_cb`'s `icon_name && *icon_name`. */
96
89
  iconVisible: boolean;
97
- /** Why this row exists. */
98
90
  rule: string;
99
91
  }
100
92
  /**
@@ -105,13 +97,10 @@ export interface SidebarItemFlagsVector {
105
97
  export declare const SIDEBAR_ITEM_FLAG_VECTORS: ReadonlyArray<SidebarItemFlagsVector>;
106
98
  /** One activation (row click) expectation. */
107
99
  export interface SidebarActivationVector {
108
- /** Human-readable name, used as the test title. */
109
100
  name: string;
110
- /** The declared sections. */
111
101
  sections: ReadonlyArray<AdwSidebarSectionSpec>;
112
102
  /** The selection to establish before clicking, applied through `setSelected`. */
113
103
  initialSelected: number;
114
- /** The flat index that is clicked. */
115
104
  activate: number;
116
105
  /** Whether a row was actually activated — the `activated` signal. */
117
106
  activated: boolean;
@@ -119,25 +108,21 @@ export interface SidebarActivationVector {
119
108
  selectionChanged: boolean;
120
109
  /** `selected` afterwards. */
121
110
  selected: number;
122
- /** Why this row exists. */
123
111
  rule: string;
124
112
  }
125
113
  /**
126
114
  * The selection/activation split: `row-selected` fires only on a real change,
127
- * `row-activated` fires on EVERY click (adw-sidebar.c:1585-1612), and page mode
128
- * does the same thing in one callback (`boxed_row_activated_cb`, :1662-1674).
115
+ * `row-activated` fires on EVERY click, and page mode
116
+ * does the same thing in one callback (`boxed_row_activated_cb`).
129
117
  *
130
- * The re-click row is the one that matters: it is the documented way to reveal
131
- * the content pane of a split view (adw-sidebar.c:73-75), and the NativeScript
132
- * port could not express it at all — its setter early-returned on an unchanged
133
- * index and it emitted no activation signal.
118
+ * The re-click row is the one that matters: it is the documented way to reveal the content
119
+ * pane of a split view, and a setter that early-returns on an unchanged index cannot
120
+ * express it.
134
121
  */
135
122
  export declare const SIDEBAR_ACTIVATION_VECTORS: ReadonlyArray<SidebarActivationVector>;
136
123
  /** One filter / empty-state expectation. */
137
124
  export interface SidebarFilterVector {
138
- /** Human-readable name, used as the test title. */
139
125
  name: string;
140
- /** The declared sections. */
141
126
  sections: ReadonlyArray<AdwSidebarSectionSpec>;
142
127
  /** Item titles the filter keeps; the suites build `(item) => keepTitles.includes(item.title)`. */
143
128
  keepTitles: ReadonlyArray<string>;
@@ -149,34 +134,28 @@ export interface SidebarFilterVector {
149
134
  headers: ReadonlyArray<SidebarHeaderSpec>;
150
135
  /** The `.empty` / placeholder state — computed from the FILTERED count. */
151
136
  isEmpty: boolean;
152
- /** Why this row exists. */
153
137
  rule: string;
154
138
  }
155
139
  /**
156
- * `adw_sidebar_set_filter` (adw-sidebar.c:3127-3139) feeds a `GtkFilterListModel`
157
- * that only the row list and the placeholder see; the selection index space stays
158
- * on the unfiltered `items_model` (adw-sidebar.c:2866 vs :2177-2180), and
159
- * `update_placeholder` counts the filtered one (adw-sidebar.c:1828, :1839-1842).
160
- *
161
- * Neither port had a filter or a placeholder at all.
140
+ * `adw_sidebar_set_filter` feeds a `GtkFilterListModel` that only the row list and the
141
+ * placeholder see: the selection index space stays on the UNFILTERED `items_model` while
142
+ * `update_placeholder` counts the filtered one.
162
143
  */
163
144
  export declare const SIDEBAR_FILTER_VECTORS: ReadonlyArray<SidebarFilterVector>;
164
145
  /** One mode expectation. */
165
146
  export interface SidebarModeVector {
166
- /** The mode being set. */
167
147
  mode: 'sidebar' | 'page';
168
148
  /** Whether the selection is PAINTED in that mode. */
169
149
  selectionVisible: boolean;
170
- /** Why this row exists. */
171
150
  rule: string;
172
151
  }
173
152
  /**
174
- * `adw_sidebar_set_mode` (adw-sidebar.c:2960-2981) never touches `selected`:
153
+ * `adw_sidebar_set_mode` never touches `selected`:
175
154
  * "In this mode, the selection is invisible and only tracked to determine the
176
- * initially selected item once switched back to sidebar mode" (adw-sidebar.c:2948-2951).
155
+ * initially selected item once switched back to sidebar mode".
177
156
  *
178
157
  * The web port painted its `.selected` highlight in BOTH modes; page mode builds
179
- * plain `AdwActionRow`s in a boxed list (`create_boxed_row`, adw-sidebar.c:1676)
158
+ * plain `AdwActionRow`s in a boxed list (`create_boxed_row`)
180
159
  * and shows no selected row at all.
181
160
  */
182
161
  export declare const SIDEBAR_MODE_VECTORS: ReadonlyArray<SidebarModeVector>;
@@ -4,16 +4,12 @@ export declare const SPINNER_ARC_TOLERANCE = 1e-9;
4
4
  * The arc lengths actually DRAWN, in radians — measured over one cycle at 200k
5
5
  * samples, not read off the constants.
6
6
  *
7
- * The distinction matters and is easy to get wrong: `MAX_ARC_LENGTH` is
8
- * `pi * 0.9` (162 degrees), and both `get_arc_start` and `get_arc_end` lerp
9
- * TOWARDS it — but each then subtracts the drift term
10
- * `angle * MAX_ARC_LENGTH / cycle_length`, which is what makes the figure
11
- * advance around the circle. The two ends drift together, so the visible arc
12
- * peaks at **102.8 degrees**, not 162. Reading the constant as the drawn length
13
- * is the obvious mistake; issue #1066 made it in its own summary table.
14
- *
15
- * The MINIMUM is exactly `MIN_ARC_LENGTH`, because the drift is zero at the
16
- * cycle boundary where the arc is shortest.
7
+ * `MAX_ARC_LENGTH` is `pi * 0.9` (162 degrees) and both `get_arc_start` and
8
+ * `get_arc_end` lerp TOWARDS it, but each then subtracts the drift term
9
+ * `angle * MAX_ARC_LENGTH / cycle_length` that advances the figure around the circle.
10
+ * The two ends drift together, so the visible arc peaks at 102.8 degrees, not 162 —
11
+ * reading the constant as the drawn length is the obvious mistake. The minimum is
12
+ * exactly `MIN_ARC_LENGTH`, the drift being zero at the cycle boundary.
17
13
  */
18
14
  export declare const SPINNER_ARC_ENVELOPE: {
19
15
  /** Exactly `MIN_ARC_LENGTH` — 2.7 degrees, at the cycle boundary. */
@@ -24,24 +20,23 @@ export declare const SPINNER_ARC_ENVELOPE: {
24
20
  readonly tolerance: 0.0001;
25
21
  };
26
22
  /**
27
- * `get_arc_start` / `get_arc_end` (adw-spinner-paintable.c:109-145) at the four
28
- * corners of one cycle, plus the resting pose.
23
+ * One named moment of `get_arc_start` / `get_arc_end` within a cycle.
29
24
  *
30
- * The lengths are DERIVED from the C's own constants rather than typed in: the
31
- * point of the rows is which MOMENT each is, and a hand-copied radian would be a
32
- * second reading of the same arithmetic the implementation does. What they pin
33
- * is the shape — that the arc is shortest at the cycle boundary, longest around
34
- * the extend/contract handover, and never leaves `[MIN_ARC_LENGTH,
35
- * MAX_ARC_LENGTH]`.
25
+ * The rows name the MOMENT, not the length: lengths are derived from the C's own
26
+ * constants rather than typed in, so what they pin is the shape — arc shortest at the
27
+ * cycle boundary, longest around the extend/contract handover, never outside
28
+ * `[MIN_ARC_LENGTH, MAX_ARC_LENGTH]`.
36
29
  */
37
30
  export interface SpinnerArcShapeVector {
38
31
  /** Fraction of one arc cycle, 0..1. */
39
32
  phase: number;
40
- /** What happens here. */
41
33
  rule: string;
42
34
  }
43
- /** The moments worth naming in one arc cycle. *
44
- * CORE-ONLY: the arc is drawn per frame from `spinnerArc`, and a renderer can only show the RESULT — the browser suite asserts the drawn envelope and the round caps, which is the observable half
35
+ /**
36
+ * The moments worth naming in one arc cycle.
37
+ *
38
+ * CORE-ONLY: the arc is drawn per frame from `spinnerArc` and a renderer can only show
39
+ * the RESULT — the browser suite asserts the drawn envelope and the round caps.
45
40
  */
46
41
  export declare const SPINNER_ARC_PHASE_VECTORS: ReadonlyArray<SpinnerArcShapeVector>;
47
42
  /** One "is this constant what the C says" expectation. */
@@ -54,13 +49,12 @@ export interface SpinnerConstantVector {
54
49
  rule: string;
55
50
  }
56
51
  /**
57
- * The `#define`s at adw-spinner-paintable.c:18-33 and adw-spinner.c:14-15.
52
+ * The animation `#define`s plus `adw-spinner.c`'s own size constants.
58
53
  *
59
- * A constant table looks redundant next to the implementation until you read the
60
- * `rule` column: five of these seven were WRONG or absent in a shipping port,
61
- * and a table is what makes "the port picked its own number" fail a test rather
62
- * than look like a design choice.
54
+ * Four of these seven were wrong or absent in a shipping port; as a table, "the port
55
+ * picked its own number" fails a test instead of reading as a design choice.
63
56
  *
64
- * CORE-ONLY: a table OF constants: what a renderer can show is the geometry they produce, which the browser suite asserts through SPINNER_GEOMETRY/SIZE_VECTORS
57
+ * CORE-ONLY: a table OF constants — what a renderer can show is the geometry they
58
+ * produce, asserted by the browser suite through SPINNER_GEOMETRY/SIZE_VECTORS.
65
59
  */
66
60
  export declare const SPINNER_CONSTANT_VECTORS: ReadonlyArray<SpinnerConstantVector>;