@gjsify/adwaita-web 0.36.0 → 0.37.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 (146) hide show
  1. package/dist/adwaita-web.css +433 -33
  2. package/dist/adwaita-web.css.map +1 -1
  3. package/lib/types/adw-shortcut-label.spec.d.ts +2 -0
  4. package/lib/types/breakpoints.d.ts +10 -12
  5. package/lib/types/elements/adw-about-dialog.d.ts +19 -36
  6. package/lib/types/elements/adw-action-row.d.ts +9 -12
  7. package/lib/types/elements/adw-alert-dialog.d.ts +0 -12
  8. package/lib/types/elements/adw-avatar.d.ts +1 -0
  9. package/lib/types/elements/adw-bottom-sheet.d.ts +7 -12
  10. package/lib/types/elements/adw-button-content.d.ts +3 -4
  11. package/lib/types/elements/adw-button-row.d.ts +1 -1
  12. package/lib/types/elements/adw-carousel.d.ts +28 -49
  13. package/lib/types/elements/adw-checks.d.ts +2 -8
  14. package/lib/types/elements/adw-combo-row.d.ts +6 -6
  15. package/lib/types/elements/adw-data-grid.d.ts +5 -10
  16. package/lib/types/elements/adw-drop-down.d.ts +3 -11
  17. package/lib/types/elements/adw-entry-row.d.ts +20 -23
  18. package/lib/types/elements/adw-icon.d.ts +2 -4
  19. package/lib/types/elements/adw-inline-view-switcher.d.ts +18 -31
  20. package/lib/types/elements/adw-navigation-split-view.d.ts +7 -12
  21. package/lib/types/elements/adw-navigation-view.d.ts +2 -10
  22. package/lib/types/elements/adw-overlay-split-view.d.ts +28 -52
  23. package/lib/types/elements/adw-password-entry-row.d.ts +4 -5
  24. package/lib/types/elements/adw-popover.d.ts +2 -7
  25. package/lib/types/elements/adw-preferences-dialog.d.ts +21 -34
  26. package/lib/types/elements/adw-preferences-group.d.ts +12 -14
  27. package/lib/types/elements/adw-progress-bar.d.ts +3 -4
  28. package/lib/types/elements/adw-shortcut-label.d.ts +20 -0
  29. package/lib/types/elements/adw-sidebar.d.ts +5 -10
  30. package/lib/types/elements/adw-spinner.d.ts +3 -5
  31. package/lib/types/elements/adw-split-button.d.ts +6 -16
  32. package/lib/types/elements/adw-switch-row.d.ts +3 -3
  33. package/lib/types/elements/adw-tab-view.d.ts +16 -26
  34. package/lib/types/elements/adw-toast-overlay.d.ts +8 -13
  35. package/lib/types/elements/adw-view-stack.d.ts +7 -17
  36. package/lib/types/elements/adw-view-switcher-bar.d.ts +4 -8
  37. package/lib/types/elements/adw-view-switcher.d.ts +18 -38
  38. package/lib/types/elements/adw-wrap-box.d.ts +7 -17
  39. package/lib/types/elements/view-switcher-dom.d.ts +10 -13
  40. package/lib/types/index.d.ts +1 -0
  41. package/lib/types/source-view/hex.d.ts +7 -13
  42. package/lib/types/style-classes.spec.d.ts +11 -0
  43. package/lib/types/styles.generated.d.ts +1 -1
  44. package/package.json +6 -6
  45. package/scss/_about_dialog.scss +3 -2
  46. package/scss/_action_row.scss +33 -0
  47. package/scss/_avatar.scss +12 -0
  48. package/scss/_button.scss +44 -22
  49. package/scss/_card.scss +11 -8
  50. package/scss/_checks.scss +2 -4
  51. package/scss/_dialog.scss +3 -2
  52. package/scss/_headerbar.scss +23 -0
  53. package/scss/_popover.scss +8 -4
  54. package/scss/_preferences.scss +7 -7
  55. package/scss/_progress_bar.scss +9 -6
  56. package/scss/_reset.scss +1 -1
  57. package/scss/_shortcut_label.scss +80 -0
  58. package/scss/_sidebar.scss +57 -0
  59. package/scss/_status_page.scss +20 -0
  60. package/scss/_style_classes.scss +407 -0
  61. package/scss/_switch.scss +4 -3
  62. package/scss/_variables.scss +25 -0
  63. package/scss/adwaita-skin.scss +12 -0
  64. package/src/adw-about-dialog.spec.ts +34 -49
  65. package/src/adw-action-rows.spec.ts +25 -33
  66. package/src/adw-avatar.spec.ts +51 -20
  67. package/src/adw-banner.spec.ts +5 -8
  68. package/src/adw-button-content.spec.ts +9 -12
  69. package/src/adw-button-row.spec.ts +2 -4
  70. package/src/adw-carousel.spec.ts +40 -53
  71. package/src/adw-checks.spec.ts +36 -47
  72. package/src/adw-drop-down.spec.ts +25 -32
  73. package/src/adw-header-bar.spec.ts +5 -7
  74. package/src/adw-icon.spec.ts +23 -32
  75. package/src/adw-progress-bar.spec.ts +10 -12
  76. package/src/adw-row-state.spec.ts +9 -10
  77. package/src/adw-shortcut-label.spec.ts +112 -0
  78. package/src/adw-sidebar.spec.ts +17 -24
  79. package/src/adw-switch.spec.ts +11 -17
  80. package/src/adw-tab-view.spec.ts +7 -10
  81. package/src/adw-toast-overlay.spec.ts +7 -11
  82. package/src/adw-view-switcher-bar.spec.ts +10 -14
  83. package/src/adw-wrap-box.spec.ts +25 -36
  84. package/src/bottom-sheet.spec.ts +30 -36
  85. package/src/breakpoints.ts +15 -18
  86. package/src/chrome.spec.ts +13 -21
  87. package/src/elements/adw-about-dialog.ts +71 -114
  88. package/src/elements/adw-action-row.ts +22 -37
  89. package/src/elements/adw-alert-dialog.ts +25 -50
  90. package/src/elements/adw-avatar.ts +40 -15
  91. package/src/elements/adw-banner.ts +14 -18
  92. package/src/elements/adw-bottom-sheet.ts +31 -52
  93. package/src/elements/adw-button-content.ts +30 -37
  94. package/src/elements/adw-button-row.ts +14 -24
  95. package/src/elements/adw-carousel.ts +87 -148
  96. package/src/elements/adw-checks.ts +43 -56
  97. package/src/elements/adw-clamp.ts +8 -9
  98. package/src/elements/adw-combo-row.ts +17 -25
  99. package/src/elements/adw-data-grid.ts +26 -38
  100. package/src/elements/adw-dialog.ts +25 -56
  101. package/src/elements/adw-drop-down.ts +31 -51
  102. package/src/elements/adw-entry-row.ts +39 -46
  103. package/src/elements/adw-expander-row.ts +30 -53
  104. package/src/elements/adw-icon.ts +30 -53
  105. package/src/elements/adw-inline-view-switcher.ts +38 -67
  106. package/src/elements/adw-menu-button.ts +28 -58
  107. package/src/elements/adw-navigation-split-view.ts +35 -47
  108. package/src/elements/adw-navigation-view.ts +12 -28
  109. package/src/elements/adw-overlay-split-view.ts +100 -175
  110. package/src/elements/adw-password-entry-row.ts +18 -28
  111. package/src/elements/adw-popover.ts +28 -44
  112. package/src/elements/adw-preferences-dialog.ts +41 -66
  113. package/src/elements/adw-preferences-group.ts +33 -46
  114. package/src/elements/adw-progress-bar.ts +27 -47
  115. package/src/elements/adw-shortcut-label.ts +138 -0
  116. package/src/elements/adw-sidebar.ts +31 -39
  117. package/src/elements/adw-spin-row.ts +7 -14
  118. package/src/elements/adw-spinner.ts +31 -43
  119. package/src/elements/adw-split-button.ts +45 -75
  120. package/src/elements/adw-switch-row.ts +29 -46
  121. package/src/elements/adw-switch.ts +28 -47
  122. package/src/elements/adw-tab-view.ts +62 -103
  123. package/src/elements/adw-toast-overlay.ts +28 -35
  124. package/src/elements/adw-toggle-group.ts +9 -16
  125. package/src/elements/adw-view-stack.ts +32 -51
  126. package/src/elements/adw-view-switcher-bar.ts +26 -50
  127. package/src/elements/adw-view-switcher.ts +60 -110
  128. package/src/elements/adw-window-title.ts +4 -4
  129. package/src/elements/adw-wrap-box.ts +33 -59
  130. package/src/elements/view-switcher-dom.ts +15 -22
  131. package/src/entry-rows.spec.ts +18 -24
  132. package/src/index.ts +13 -15
  133. package/src/navigation-view.spec.ts +7 -10
  134. package/src/preferences-search.ts +11 -15
  135. package/src/preferences.spec.ts +13 -15
  136. package/src/source-view/adw-source-view.ts +6 -19
  137. package/src/source-view/hex.ts +7 -13
  138. package/src/split-button.spec.ts +32 -44
  139. package/src/split-views.spec.ts +83 -149
  140. package/src/style-classes.spec.ts +181 -0
  141. package/src/style-isolation.spec.ts +3 -6
  142. package/src/styles.generated.ts +1 -1
  143. package/src/tab-view.spec.ts +26 -35
  144. package/src/test.browser.mts +4 -0
  145. package/src/view-stack.spec.ts +23 -34
  146. package/src/view-switcher.spec.ts +56 -84
@@ -17,12 +17,10 @@ export declare class AdwSidebar extends HTMLElement {
17
17
  /** Guards the `selected` attribute write we make ourselves from re-entering. */
18
18
  private _reflecting;
19
19
  static get observedAttributes(): string[];
20
- /** Zero-based flat index of the selected item, or -1 for no selection. */
21
20
  get selected(): number;
22
21
  set selected(value: number);
23
22
  /** The selected item's spec, or undefined — Adw.Sidebar:selected-item. */
24
23
  get selectedItem(): AdwSidebarItemSpec | undefined;
25
- /** 'sidebar' (flat navigation list) or 'page' (boxed lists). */
26
24
  get mode(): 'sidebar' | 'page';
27
25
  set mode(value: 'sidebar' | 'page');
28
26
  /** The section/item model. Assigning replaces it, the way adw_sidebar_remove_all + append would. */
@@ -34,25 +32,22 @@ export declare class AdwSidebar extends HTMLElement {
34
32
  connectedCallback(): void;
35
33
  attributeChangedCallback(name: string): void;
36
34
  /**
37
- * Re-derive after a declared `<adw-sidebar-item>` / `<adw-sidebar-section>`
38
- * attribute changed. The item model keeps its shape, so the selection cannot
39
- * move — exactly like the GObject property bindings this stands in for.
35
+ * Re-derive after a declared `<adw-sidebar-item>` / `<adw-sidebar-section>` attribute
36
+ * changed. The item model keeps its shape, so the selection cannot move — exactly
37
+ * like the GObject property bindings this stands in for.
40
38
  */
41
39
  refresh(): void;
42
- /** Snapshot the declared children into specs, and bind them for live updates. */
43
40
  private _readDeclaredSections;
44
41
  private _readModeAttr;
45
42
  /**
46
43
  * `parseFloat`, not `parseInt`: the core rejects a fractional position, and
47
- * truncating `"1.5"` to row 1 here would hide that from it. An unparseable
48
- * value is NaN, which the core turns into "no selection".
44
+ * truncating `"1.5"` to row 1 here would hide that from it. An unparseable value is
45
+ * NaN, which the core turns into "no selection".
49
46
  */
50
47
  private _readSelectedAttr;
51
48
  private _reflectSelected;
52
49
  private _onSelectionChanged;
53
- /** Click handler — the core applies the selection, then `activated` fires. */
54
50
  private _activate;
55
- /** Rebuild the rendered rows + headers from the core's derived model. */
56
51
  private _rebuild;
57
52
  private _createHeader;
58
53
  private _createRow;
@@ -13,11 +13,9 @@ export declare class AdwSpinner extends HTMLElement {
13
13
  disconnectedCallback(): void;
14
14
  attributeChangedCallback(): void;
15
15
  /**
16
- * Draw the frame for `now`, in `requestAnimationFrame` timebase.
17
- *
18
- * Public because the shared ticker is a module-level function rather than a
19
- * method — and because a test needs to place the spinner at a known moment
20
- * without waiting for real frames.
16
+ * Draw the frame for `now`, in `requestAnimationFrame` timebase. Public because the
17
+ * shared ticker is a module-level function, and because a test needs to place the
18
+ * spinner at a known moment without waiting for real frames.
21
19
  */
22
20
  drawAt(now: number): void;
23
21
  private _build;
@@ -12,7 +12,6 @@ export declare class AdwSplitButton extends HTMLElement {
12
12
  private _openReflected;
13
13
  private _initialized;
14
14
  static get observedAttributes(): string[];
15
- /** Whether the dropdown menu is currently open. */
16
15
  get active(): boolean;
17
16
  /** Whether the dropdown half is live (there is a menu to show). */
18
17
  get dropdownEnabled(): boolean;
@@ -22,16 +21,13 @@ export declare class AdwSplitButton extends HTMLElement {
22
21
  /** The symbolic icon name, or `null` when the action half shows a label or nothing. */
23
22
  get iconName(): string | null;
24
23
  set iconName(value: string);
25
- /** The dropdown menu entries. */
26
24
  get menuItems(): readonly AdwMenuEntry[];
27
25
  set menuItems(value: readonly AdwMenuEntry[]);
28
26
  /** The dropdown tooltip as set — `''` while unset. */
29
27
  get dropdownTooltip(): string;
30
28
  set dropdownTooltip(value: string);
31
- /** The direction the popup opens in, and the arrow points. */
32
29
  get direction(): SplitButtonDirection;
33
30
  set direction(value: SplitButtonDirection);
34
- /** Whether an underline in the label marks a mnemonic. */
35
31
  get useUnderline(): boolean;
36
32
  set useUnderline(value: boolean);
37
33
  /** Pop the menu up — `adw_split_button_popup()`. */
@@ -40,25 +36,19 @@ export declare class AdwSplitButton extends HTMLElement {
40
36
  popdown(): void;
41
37
  connectedCallback(): void;
42
38
  attributeChangedCallback(name: string, _previous: string | null, value: string | null): void;
43
- /** Seed label/icon/menu/direction/tooltip from the attributes present at connect time. */
44
39
  private _syncStateFromAttributes;
45
40
  /**
46
- * Route a `label` / `icon-name` attribute mutation into the content machine.
47
- *
48
- * C has no independent "unset" for either slot — clearing one is a side
49
- * effect of setting another — so a REMOVED attribute falls back to whichever
50
- * sibling is still present, and to the empty child otherwise. That fallback
51
- * is what makes `removeAttribute('label')` actually drop the label; it used
52
- * to be a silent no-op, so the storybook's icon-only mode rendered the icon
53
- * next to a stale "Save".
41
+ * Route a `label` / `icon-name` attribute mutation into the content machine. C has no
42
+ * independent "unset" for either slot — clearing one is a side effect of setting
43
+ * another — so a REMOVED attribute falls back to whichever sibling is still present,
44
+ * and to the empty child otherwise. Without that fallback
45
+ * `removeAttribute('label')` is a silent no-op and an icon-only button keeps a stale
46
+ * label beside its icon.
54
47
  */
55
48
  private _applyContentAttribute;
56
49
  private _onStateChange;
57
50
  private _render;
58
- /** The action half + the root style classes libadwaita derives from it. */
59
51
  private _renderContent;
60
- /** The dropdown half: arrow glyph, tooltip/accessible name, expanded state. */
61
52
  private _renderDropdown;
62
- /** The popover contents, one button per menu entry, dispatched BY POSITION. */
63
53
  private _renderMenu;
64
54
  }
@@ -12,9 +12,9 @@ export declare class AdwSwitchRow extends HTMLElement {
12
12
  connectedCallback(): void;
13
13
  attributeChangedCallback(name: string): void;
14
14
  /**
15
- * Push a state transition out to the DOM and emit `notify::active` — but
16
- * only when something actually changed, which is the `g_object_notify`
17
- * gate libadwaita puts on the same transition (C:224-225 → :76).
15
+ * Push a state transition out to the DOM and emit `notify::active`, but only when
16
+ * something actually changed — the `g_object_notify` gate libadwaita puts on the same
17
+ * transition.
18
18
  */
19
19
  private _apply;
20
20
  private _renderText;
@@ -1,13 +1,11 @@
1
1
  import type { AdwTabPageSpec, AdwTabPageState } from '@gjsify/adwaita-core';
2
- /** A page descriptor as `pages` exposes it. */
3
2
  export type AdwTabViewPage = AdwTabPageState<HTMLElement>;
4
- /** The page spec the imperative insertion methods take. */
5
3
  export type AdwTabViewPageSpec = AdwTabPageSpec<HTMLElement>;
6
4
  /**
7
- * A single page. Declared as a child of <adw-tab-view>; the element itself
8
- * becomes the page panel, so its attributes keep driving the tab after connect —
9
- * the old implementation moved the children out and discarded the element, which
10
- * is why its `observedAttributes` declaration had nothing to act on.
5
+ * A single page. Declared as a child of <adw-tab-view>; the element itself becomes the
6
+ * page panel, so its attributes keep driving the tab after connect — a renderer that
7
+ * moves the children out and discards the element leaves `observedAttributes` with
8
+ * nothing to act on.
11
9
  */
12
10
  export declare class AdwTabPage extends HTMLElement {
13
11
  static get observedAttributes(): string[];
@@ -38,7 +36,6 @@ export declare class AdwTabView extends HTMLElement {
38
36
  */
39
37
  get autohide(): boolean;
40
38
  set autohide(value: boolean);
41
- /** Whether tabs stretch to fill the bar evenly (Adw.TabBar `expand-tabs`). */
42
39
  get expandTabs(): boolean;
43
40
  set expandTabs(value: boolean);
44
41
  /** Whether the close affordance is omitted (static tab sets). */
@@ -51,17 +48,13 @@ export declare class AdwTabView extends HTMLElement {
51
48
  * {@link AdwTabPage.attributeChangedCallback}; not part of the public API.
52
49
  */
53
50
  syncDeclaredPage(pageEl: AdwTabPage, name: string, value: string | null): void;
54
- /** All pages in order. */
55
51
  get pages(): readonly AdwTabViewPage[];
56
- /** Number of pages. */
57
52
  get nPages(): number;
58
- /** Length of the pinned prefix. */
59
53
  get nPinnedPages(): number;
60
54
  /** Id of the selected page, `null` when the view is empty. */
61
55
  get selectedId(): string | null;
62
56
  /** Index of the selected page, `-1` when the view is empty. */
63
57
  get selectedIndex(): number;
64
- /** The selected page's panel element, or `null`. */
65
58
  get selectedContent(): HTMLElement | null;
66
59
  isClosing(id: string): boolean;
67
60
  setSelectedPage(id: string | null): boolean;
@@ -113,14 +106,13 @@ export declare class AdwTabView extends HTMLElement {
113
106
  private _nextId;
114
107
  private _onPagesChange;
115
108
  private _insertTab;
116
- /** Remove-then-insert, the same shape the model's own reorder has. */
117
109
  private _moveTab;
118
110
  private _refreshTab;
119
111
  /**
120
- * `tabCloseVisible` (adw-tab.c:124 + the pinned gate at :645-650). `dragging`
121
- * is constantly false — tab drag-and-drop is compositor work and is not
122
- * modelled — and `fullyVisible` is measured against the bar's scroll window,
123
- * which is exactly what the C term means for a horizontally scrolled bar.
112
+ * `tabCloseVisible`, with its pinned gate. `dragging` is constantly false — tab
113
+ * drag-and-drop is compositor work and is not modelled — and `fullyVisible` is
114
+ * measured against the bar's scroll window, which is what the C term means for a
115
+ * horizontally scrolled bar.
124
116
  */
125
117
  private _refreshCloseVisibility;
126
118
  private _onSelectionChange;
@@ -129,19 +121,17 @@ export declare class AdwTabView extends HTMLElement {
129
121
  private _reflectSelected;
130
122
  private _applySelectedAttribute;
131
123
  /**
132
- * The `Adw.TabView` shortcut table (`init_shortcuts`, adw-tab-view.c:2192+),
133
- * plus the ArrowLeft/ArrowRight movement `role=tablist` promises.
134
- *
135
- * Ctrl+Tab WRAPS and Ctrl+Page-Up/Down does not — the same `last` flag that
136
- * separates them in `select_page_cb` (:2017-2041). Alt+0 is page index 9,
137
- * because pages count from 0 (:2149-2150).
124
+ * The `Adw.TabView` shortcut table (`init_shortcuts`), plus the ArrowLeft/ArrowRight
125
+ * movement `role=tablist` promises. Ctrl+Tab WRAPS and Ctrl+Page-Up/Down does not —
126
+ * the same `last` flag that separates them in `select_page_cb`. Alt+0 is page index
127
+ * 9, because pages count from 0.
138
128
  */
139
129
  private _onKeyDown;
140
130
  /**
141
- * The `close-page` seam. A CANCELABLE DOM event is the idiomatic spelling of
142
- * the C signal's return value: letting it through takes libadwaita's default
143
- * (`!pinned`, adw-tab-view.c:1990-1991), and `preventDefault()` defers the
144
- * close until the app calls {@link closePageFinish}.
131
+ * The `close-page` seam. A CANCELABLE DOM event is the idiomatic spelling of the C
132
+ * signal's return value: letting it through takes libadwaita's default (`!pinned`),
133
+ * and `preventDefault()` defers the close until the app calls
134
+ * {@link closePageFinish}.
145
135
  */
146
136
  private _requestClose;
147
137
  }
@@ -36,16 +36,12 @@ export declare class AdwToastOverlay extends HTMLElement {
36
36
  /** Number of toasts queued behind the visible one. */
37
37
  get pendingToasts(): number;
38
38
  /**
39
- * Show a toast notification — the web equivalent of Adw.ToastOverlay.add_toast()
40
- * with a freshly-built Adw.Toast.
39
+ * Show a toast — the web equivalent of Adw.ToastOverlay.add_toast() with a
40
+ * freshly-built Adw.Toast. Only ONE toast is visible at a time; this one shows
41
+ * immediately when the slot is free, otherwise it waits its turn.
41
42
  *
42
- * Like Adw.ToastOverlay, only ONE toast is visible at a time: this one shows
43
- * immediately when the slot is free, otherwise it waits its turn behind the
44
- * toasts already queued.
45
- *
46
- * @param title The text to display.
47
- * @param options Either a timeout in milliseconds (legacy shorthand) or an
48
- * {@link AdwToastOptions} bag (title text already supplied here).
43
+ * `options` is either an {@link AdwToastOptions} bag or, as a legacy shorthand, a
44
+ * timeout in MILLISECONDS.
49
45
  */
50
46
  addToast(title: string, options?: number | AdwToastOptions): void;
51
47
  /** Dismiss the visible toast early; the next queued toast takes its place. */
@@ -55,10 +51,9 @@ export declare class AdwToastOverlay extends HTMLElement {
55
51
  /** Build + attach the strip for `toast` — the DOM half of the queue's `onShow`. */
56
52
  private _mountToast;
57
53
  /**
58
- * Detach the mounted strip — the DOM half of the queue's `onHide`.
59
- *
60
- * @param immediate Skip the exit transition because the next queued toast is
61
- * about to take this slot (keeps exactly one strip mounted).
54
+ * Detach the mounted strip — the DOM half of the queue's `onHide`. `immediate`
55
+ * skips the exit transition because the next queued toast is about to take this
56
+ * slot, which is what keeps exactly one strip mounted.
62
57
  */
63
58
  private _unmountToast;
64
59
  }
@@ -1,54 +1,44 @@
1
1
  import type { AdwViewStackPageInfo as CorePageInfo } from '@gjsify/adwaita-core';
2
- /** A page descriptor exposed via `pages` (consumed by a bound switcher bar). */
3
2
  export type AdwViewStackPageInfo = CorePageInfo<HTMLElement>;
4
3
  export declare class AdwViewStack extends HTMLElement {
5
4
  private readonly _state;
6
5
  private _initialized;
7
6
  static get observedAttributes(): string[];
8
7
  constructor();
9
- /** All pages in declaration/add order. A bound switcher reads this. */
10
8
  get pages(): readonly AdwViewStackPageInfo[];
11
9
  /** Zero-based index of the visible page, `-1` when nothing is selected. */
12
10
  get visibleChildIndex(): number;
13
11
  set visibleChildIndex(value: number);
14
- /** Name of the visible page, or '' when nothing is selected. */
15
12
  get visibleChildName(): string;
16
13
  set visibleChildName(name: string | null | undefined);
17
- /** The visible page's content element, or null when nothing is selected. */
18
14
  get visibleChild(): HTMLElement | null;
19
15
  connectedCallback(): void;
20
16
  attributeChangedCallback(name: string, _old: string | null, value: string | null): void;
21
17
  /**
22
18
  * Append a page. It becomes visible when nothing is selected yet, matching
23
- * `Adw.ViewStack.add()` — and, unlike before, that auto-pick NOTIFIES.
19
+ * `Adw.ViewStack.add()`, and that auto-pick NOTIFIES.
24
20
  */
25
21
  add(content: HTMLElement, name: string, title?: string, icon?: string): AdwViewStackPageInfo;
26
- /** Convenience alias mirroring Adw.ViewStack.add_titled() (no icon). */
27
22
  addTitled(content: HTMLElement, name: string, title: string): AdwViewStackPageInfo;
28
23
  /**
29
24
  * Remove the first page named `name` and detach its content. Returns whether
30
25
  * anything was removed. When the removed page was the visible one the stack
31
26
  * ends up showing NOTHING and emits no event — `stack_remove` clears
32
- * `visible_child` without re-picking (adw-view-stack.c:1202-1203).
27
+ * `visible_child` without re-picking.
33
28
  */
34
29
  removePage(name: string): boolean;
35
30
  /**
36
31
  * Show or hide a page (`AdwViewStackPage:visible`). Returns whether the
37
32
  * SELECTION moved: hiding the visible page falls back to the next visible
38
33
  * one, and making a page visible while nothing is selected selects it
39
- * (`update_child_visible`, adw-view-stack.c:1061-1082).
34
+ * (`update_child_visible`).
40
35
  */
41
36
  setPageVisible(name: string, visible: boolean): boolean;
42
37
  /**
43
- * The pages model's `items-changed`, which the DOM stack had no counterpart
44
- * for at all.
45
- *
46
- * `AdwViewSwitcherBar` re-runs `update_bar_revealed` on it
47
- * (adw-view-switcher-bar.c:340) and `AdwViewSwitcher` rebinds its buttons
48
- * (adw-view-switcher.c:258-263). Both ports listened only on
49
- * `notify::visible-child`, so adding a page or hiding a non-selected one
50
- * left `revealed` — and the button row — stale, with a manual `refresh()`
51
- * as the documented workaround.
38
+ * The pages model's `items-changed`: `AdwViewSwitcherBar` re-runs
39
+ * `update_bar_revealed` on it and `AdwViewSwitcher` rebinds its buttons. A listener
40
+ * on `notify::visible-child` alone leaves `revealed` and the button row stale when a
41
+ * page is added or a non-selected one hidden.
52
42
  */
53
43
  private _emitItemsChanged;
54
44
  private _onStateChange;
@@ -16,7 +16,7 @@ export declare class AdwViewSwitcherBar extends HTMLElement {
16
16
  set reveal(value: boolean);
17
17
  /**
18
18
  * Whether the bar is actually shown. READ-ONLY: a one-page stack keeps it
19
- * collapsed however loudly the layout asks (adw-view-switcher-bar.c:125).
19
+ * collapsed however loudly the layout asks.
20
20
  * Write {@link reveal} to make the request.
21
21
  */
22
22
  get revealed(): boolean;
@@ -26,13 +26,9 @@ export declare class AdwViewSwitcherBar extends HTMLElement {
26
26
  /** Bind to a stack element (or null). Unbinds the previous one and rebuilds. */
27
27
  setStack(stack: AdwViewStack | null): void;
28
28
  /**
29
- * Rebuild the buttons by hand.
30
- *
31
- * Kept as public API — a consumer that mutates a page in place still has a
32
- * way to say so — but no longer the ONLY way: the stack emits
33
- * `items-changed` now and this bar binds it, which is the mechanism
34
- * libadwaita uses (adw-view-switcher-bar.c:340,
35
- * adw-view-switcher.c:258-263).
29
+ * Rebuild the buttons by hand — public API for a consumer that mutated a page in
30
+ * place. Not the only path: the stack emits `items-changed` and this bar binds it,
31
+ * which is the mechanism libadwaita uses.
36
32
  */
37
33
  refresh(): void;
38
34
  private _readReveal;
@@ -3,29 +3,19 @@ import type { AdwViewSwitcherPage as AdwViewSwitcherPageInfo, AdwViewSwitcherPol
3
3
  /**
4
4
  * A single page. Children of `<adw-view-switcher>`; consumed at connect time.
5
5
  *
6
- * Deliberately carries NO `observedAttributes`. It used to declare six of them
7
- * and no `attributeChangedCallback`, which is a dead declaration — the browser
8
- * computes the list and has nowhere to deliver to — so changing `badge-number`,
9
- * `title`, `icon-name` or `needs-attention` after connect did nothing at all,
10
- * where C rebinds on every page `notify` (adw-view-switcher.c:184-193, :223).
11
- *
12
- * A callback could not fix it either: the switcher consumes these elements at
13
- * connect and `replaceChildren`s them away, so a detached page has no `closest`
14
- * to reach its owner through. The switcher watches them with a `MutationObserver`
15
- * instead, which keeps working after the detach and needs nothing from this class.
6
+ * Deliberately carries NO `observedAttributes` and no `attributeChangedCallback`:
7
+ * the switcher consumes these elements at connect and `replaceChildren`s them
8
+ * away, so a detached page has no `closest` to reach its owner through. The
9
+ * switcher watches them with a `MutationObserver` instead — the DOM stand-in for
10
+ * the per-page `notify` C rebinds on.
16
11
  */
17
12
  export declare class AdwViewSwitcherPage extends HTMLElement {
18
13
  }
19
14
  export declare class AdwViewSwitcher extends HTMLElement {
20
15
  /**
21
- * The dwell timer, injectable.
22
- *
23
- * It used to be `new ViewSwitcherState({ scheduler: domViewSwitcherScheduler })`
24
- * inline, which left NOWHERE to hand a clock in — so
25
- * `VIEW_SWITCHER_DRAG_VECTORS` was driven by the core suite alone, and the
26
- * conformance header claimed all three suites drove it. `scheduler` is a
27
- * property so a test can replace it before the element connects; the DOM one
28
- * is the default, exactly as before.
16
+ * The dwell timer, injectable so a test can hand in a clock and drive
17
+ * `VIEW_SWITCHER_DRAG_VECTORS` against the real element. Replace it before the
18
+ * element connects.
29
19
  */
30
20
  scheduler: ViewSwitcherScheduler;
31
21
  private _stateInstance;
@@ -41,46 +31,36 @@ export declare class AdwViewSwitcher extends HTMLElement {
41
31
  private _initialized;
42
32
  static get observedAttributes(): string[];
43
33
  constructor();
44
- /** The policy controlling the button layout ('wide' | 'narrow'). */
45
34
  get policy(): AdwViewSwitcherPolicy;
46
35
  set policy(value: AdwViewSwitcherPolicy);
47
36
  /** Zero-based index of the selected page, `-1` when nothing is selected. */
48
37
  get active(): number;
49
38
  set active(value: number);
50
- /** Name of the selected page, `''` when nothing is selected. */
51
39
  get visibleChildName(): string;
52
40
  set visibleChildName(name: string | null | undefined);
53
- /** The resolved page records a bound layout can read. */
54
41
  get pages(): readonly AdwViewSwitcherPageInfo[];
55
42
  /**
56
43
  * Show or hide a page (`AdwViewStackPage:visible`). Returns whether the
57
44
  * SELECTION moved — hiding the selected page falls back to the first still
58
- * visible one (adw-view-stack.c:1061-1082).
45
+ * visible one.
59
46
  */
60
47
  setPageVisible(name: string, visible: boolean): boolean;
61
48
  connectedCallback(): void;
62
49
  disconnectedCallback(): void;
63
50
  /**
64
- * Re-read every declared page and push it into the state.
65
- *
66
- * Called by `AdwViewSwitcherPage.attributeChangedCallback`, which is what
67
- * makes a runtime `badge-number` change reach the button. `setPages` keeps
68
- * the selection where it can, so this is a repaint and not a reset.
51
+ * Re-read every declared page and push it into the state. Driven by the
52
+ * `MutationObserver` in {@link _watchPages}, which is what makes a runtime
53
+ * `badge-number` change reach the button. `setPages` keeps the selection where it
54
+ * can, so this is a repaint and not a reset.
69
55
  */
70
56
  refreshPages(): void;
71
57
  /**
72
- * Watch the declared pages for attribute changes.
73
- *
74
- * A `MutationObserver` rather than an `attributeChangedCallback` on the page:
75
- * the switcher consumes those elements at connect and `replaceChildren`s them
76
- * out of the tree, so a detached page cannot find its owner — but an observer
77
- * bound to it keeps firing. This is the DOM's `notify::` on
78
- * `AdwViewStackPage`, which the C's `update_button` handler binds per page
79
- * (adw-view-switcher.c:184-193).
58
+ * Watch the declared pages for attribute changes — the DOM's `notify::` on
59
+ * `AdwViewStackPage`, which C's `update_button` binds per page. See
60
+ * {@link AdwViewSwitcherPage} for why an observer and not a callback.
80
61
  *
81
- * It delivers on a MICROTASK where GTK's notify is synchronous. That is the
82
- * DOM's contract for watching a node, it is invisible to a user, and nothing
83
- * in this element reads the button back inside the setter.
62
+ * MODIFICATION: delivers on a MICROTASK where GTK's notify is synchronous —
63
+ * invisible to a user, and nothing here reads the button back inside a setter.
84
64
  */
85
65
  private _watchPages;
86
66
  attributeChangedCallback(name: string): void;
@@ -1,23 +1,20 @@
1
1
  import { type AdwLengthUnit } from '@gjsify/adwaita-core';
2
2
  export declare class AdwWrapBox extends HTMLElement {
3
3
  private _initialized;
4
- static get observedAttributes(): ("align" | "justify" | "justify-last-line" | "child-spacing" | "line-spacing" | "orientation" | "wrap-policy" | "child-spacing-unit" | "natural-line-length" | "pack-direction" | "wrap-reverse" | "line-spacing-unit" | "line-homogeneous" | "natural-line-length-unit")[];
4
+ static get observedAttributes(): ("align" | "child-spacing" | "child-spacing-unit" | "pack-direction" | "justify" | "justify-last-line" | "line-spacing" | "line-spacing-unit" | "line-homogeneous" | "natural-line-length" | "natural-line-length-unit" | "wrap-reverse" | "wrap-policy" | "orientation")[];
5
5
  /** Spacing between children on the same line, in `child-spacing-unit`. */
6
6
  get childSpacing(): number;
7
7
  set childSpacing(value: number);
8
- /** The unit `child-spacing` is written in. Defaults to `px`, as in C. */
9
8
  get childSpacingUnit(): AdwLengthUnit;
10
9
  set childSpacingUnit(value: AdwLengthUnit);
11
10
  /** Spacing between lines, in `line-spacing-unit`. */
12
11
  get lineSpacing(): number;
13
12
  set lineSpacing(value: number);
14
- /** The unit `line-spacing` is written in. Defaults to `px`, as in C. */
15
13
  get lineSpacingUnit(): AdwLengthUnit;
16
14
  set lineSpacingUnit(value: AdwLengthUnit);
17
15
  /** Where the children sit ALONG the line (main axis): 0 start, 0.5 middle, 1 end. */
18
16
  get align(): number;
19
17
  set align(value: number);
20
- /** Whether and how each line is stretched to fill the widget. */
21
18
  get justify(): 'none' | 'fill' | 'spread';
22
19
  set justify(value: 'none' | 'fill' | 'spread');
23
20
  /** Whether the FINAL line is justified too. Default false, as in C. */
@@ -26,38 +23,31 @@ export declare class AdwWrapBox extends HTMLElement {
26
23
  /** Whether an overflowing line squeezes its children or lets them spill. */
27
24
  get wrapPolicy(): 'minimum' | 'natural';
28
25
  set wrapPolicy(value: 'minimum' | 'natural');
29
- /** The direction children are packed in each line. */
30
26
  get packDirection(): 'start-to-end' | 'end-to-start';
31
27
  set packDirection(value: 'start-to-end' | 'end-to-start');
32
28
  /** Whether lines wrap upwards (horizontal) / towards the start (vertical). */
33
29
  get wrapReverse(): boolean;
34
30
  set wrapReverse(value: boolean);
35
- /** Whether every line takes the same amount of space. */
36
31
  get lineHomogeneous(): boolean;
37
32
  set lineHomogeneous(value: boolean);
38
33
  /** The natural line length in `natural-line-length-unit`, or `-1` when unset. */
39
34
  get naturalLineLength(): number;
40
35
  set naturalLineLength(value: number);
41
- /** The unit `natural-line-length` is written in. Defaults to `px`, as in C. */
42
36
  get naturalLineLengthUnit(): AdwLengthUnit;
43
37
  set naturalLineLengthUnit(value: AdwLengthUnit);
44
- /** The axis children are packed along. */
45
38
  get orientation(): 'horizontal' | 'vertical';
46
39
  set orientation(value: 'horizontal' | 'vertical');
47
- /** The element children, which are what the layout actually lays out. */
48
40
  private get _children();
49
41
  /**
50
- * `adw_wrap_box_insert_child_after` (adw-wrap-box.c:1283-1300).
51
- *
52
- * A NULL/absent `sibling` inserts at the FIRST position, not the last —
53
- * `gtk_widget_insert_after`'s documented rule, pinned by
54
- * `WRAP_BOX_CHILD_ORDER_VECTORS`. Returns whether the insert happened; a
55
- * refusal is where C would have hit a `g_return_if_fail`.
42
+ * `adw_wrap_box_insert_child_after`. A NULL/absent `sibling` inserts at the FIRST
43
+ * position, not the last — `gtk_widget_insert_after`'s documented rule, pinned by
44
+ * `WRAP_BOX_CHILD_ORDER_VECTORS`. Returns whether the insert happened; a refusal is
45
+ * where C would have hit a `g_return_if_fail`.
56
46
  */
57
47
  insertChildAfter(child: Element, sibling?: Element | null): boolean;
58
- /** `adw_wrap_box_reorder_child_after` (adw-wrap-box.c:1315-1332). Same NULL rule. */
48
+ /** `adw_wrap_box_reorder_child_after`. Same NULL rule. */
59
49
  reorderChildAfter(child: Element, sibling?: Element | null): boolean;
60
- /** `adw_wrap_box_remove_all` (adw-wrap-box.c:1406-1414). */
50
+ /** `adw_wrap_box_remove_all`. */
61
51
  removeAll(): void;
62
52
  private _applyOrder;
63
53
  connectedCallback(): void;
@@ -1,11 +1,9 @@
1
1
  import type { AdwViewSwitcherPageInit, ViewSwitcherScheduler } from '@gjsify/adwaita-core';
2
2
  import { type AdwIcon } from './adw-icon.js';
3
3
  /**
4
- * The browser's timer behind the core's scheduler seam.
5
- *
6
- * One shared instance rather than one per element: it holds no state, and the
7
- * seam exists so the CORE stays free of a global timer, not so each element
8
- * invents its own.
4
+ * The browser's timer behind the core's scheduler seam. One shared instance rather than
5
+ * one per element: it holds no state, and the seam exists so the CORE stays free of a
6
+ * global timer, not so each element invents its own.
9
7
  */
10
8
  export declare const domViewSwitcherScheduler: ViewSwitcherScheduler;
11
9
  /**
@@ -23,22 +21,21 @@ export declare function applySwitcherIcon(icon: AdwIcon, iconName: string): void
23
21
  /**
24
22
  * Read a declared page element into the core's page init.
25
23
  *
26
- * `getAttribute` returns `null` for an absent attribute, which is EXACTLY C's
27
- * NULL — so the values are passed through unchanged rather than defaulted to
28
- * `''`. That `?? ''` is what made the button-visibility rule unimplementable in
29
- * the old code: once an absent title has become the empty string, "the page has
30
- * no title" is no longer expressible.
24
+ * `getAttribute` returns `null` for an absent attribute, which is EXACTLY C's NULL, so
25
+ * values are passed through unchanged rather than defaulted to `''`. Do not add a
26
+ * `?? ''`: once an absent title has become the empty string, "the page has no title" is
27
+ * no longer expressible and the button-visibility rule cannot be implemented.
31
28
  */
32
29
  export declare function readSwitcherPage(element: Element): AdwViewSwitcherPageInit;
33
30
  /**
34
31
  * Paint `AdwIndicatorBin`'s badge/dot onto a span: the badge text when there is
35
- * one, a bare dot when only `needs-attention` is set, nothing otherwise
36
- * (adw-indicator-bin.c:58-68 + the `.needs-attention` style class).
32
+ * one, a bare dot when only `needs-attention` is set, nothing otherwise — C's
33
+ * `AdwIndicatorBin` plus the `.needs-attention` style class.
37
34
  */
38
35
  export declare function applyIndicator(indicator: HTMLElement, badgeLabel: string, needsAttention: boolean): void;
39
36
  /**
40
37
  * Mirror the derived screen-reader description onto the element, REMOVING the
41
38
  * attribute when there is none — `update_description_cb` resets the accessible
42
- * property rather than setting it to `""` (adw-view-switcher-button.c:104-113).
39
+ * property rather than setting it to `""`.
43
40
  */
44
41
  export declare function applyDescription(element: HTMLElement, description: string): void;
@@ -17,6 +17,7 @@ export { AdwIcon, createAdwIcon } from './elements/adw-icon.js';
17
17
  export { AdwSwitch } from './elements/adw-switch.js';
18
18
  export { AdwCheckbox, AdwRadio } from './elements/adw-checks.js';
19
19
  export { AdwProgressBar } from './elements/adw-progress-bar.js';
20
+ export { AdwShortcutLabel } from './elements/adw-shortcut-label.js';
20
21
  export { AdwPopover } from './elements/adw-popover.js';
21
22
  export type { AdwPopoverAlign, AdwPopoverPosition, AdwPopoverRole } from './elements/adw-popover.js';
22
23
  export { AdwSplitButton } from './elements/adw-split-button.js';
@@ -1,22 +1,16 @@
1
1
  /** Bytes represented per visual line in the hex monitor / hexdump gutter. */
2
2
  export declare const HEX_ADDRESS_STRIDE = 16;
3
3
  /**
4
- * Format a 1-based CodeMirror line number as a 4-digit uppercase hex address,
5
- * the way the native GtkSourceView hex gutter renders monitor/hexdump rows:
6
- * each row advances the address by `stride` bytes from `start`.
7
- *
8
- * @param lineNo 1-based line number (CodeMirror's `formatNumber` contract).
9
- * @param start base address of the first row (e.g. 0x0600 for a 6502 program).
10
- * @param stride bytes per row (default 16 — one hexdump row).
4
+ * Format a 1-based CodeMirror line number as a 4-digit uppercase hex address, the way the
5
+ * native GtkSourceView hex gutter renders monitor/hexdump rows: each row advances the
6
+ * address by `stride` bytes from `start` (the base address of the first row, e.g. 0x0600
7
+ * for a 6502 program). `lineNo` is 1-based, per CodeMirror's `formatNumber` contract.
11
8
  */
12
9
  export declare function formatHexAddress(lineNo: number, start: number, stride?: number): string;
13
10
  /**
14
- * Format a 1-based CodeMirror line number for the normal (decimal) gutter,
15
- * offset by `start` so a pane can begin numbering at an arbitrary value —
16
- * the web twin of the native renderer's `line + startValue`.
17
- *
18
- * @param lineNo 1-based line number.
19
- * @param start value shown on the first line (default 1 → identity).
11
+ * Format a 1-based CodeMirror line number for the normal (decimal) gutter, offset so
12
+ * `start` is the value shown on the first line — the web twin of the native renderer's
13
+ * `line + startValue`.
20
14
  */
21
15
  export declare function formatLineNumber(lineNo: number, start?: number): string;
22
16
  /**
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Every class `style-classes.md` documents, and what this package does about it.
3
+ *
4
+ * Keys are the bare class names, in the document's own spelling. The order is
5
+ * the document's, so the two can be read side by side.
6
+ */
7
+ export declare const DOCUMENTED_STYLE_CLASSES: Record<string, {
8
+ shipped: boolean;
9
+ reason?: string;
10
+ }>;
11
+ export declare const AdwStyleClassesTest: () => Promise<void>;