@gjsify/adwaita-nativescript 0.31.0 → 0.33.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 (147) hide show
  1. package/lib/esm/index.js +1 -1
  2. package/lib/esm/widgets/adw-action-row.js +1 -1
  3. package/lib/esm/widgets/adw-avatar.js +1 -1
  4. package/lib/esm/widgets/adw-banner.js +1 -1
  5. package/lib/esm/widgets/adw-bottom-sheet.js +1 -1
  6. package/lib/esm/widgets/adw-button-content.js +1 -1
  7. package/lib/esm/widgets/adw-button-row.js +1 -1
  8. package/lib/esm/widgets/adw-carousel.js +1 -1
  9. package/lib/esm/widgets/adw-clamp.js +1 -1
  10. package/lib/esm/widgets/adw-combo-row.js +1 -1
  11. package/lib/esm/widgets/adw-data-grid.js +1 -0
  12. package/lib/esm/widgets/adw-drop-down.js +1 -0
  13. package/lib/esm/widgets/adw-entry-row.js +1 -1
  14. package/lib/esm/widgets/adw-entry.js +1 -0
  15. package/lib/esm/widgets/adw-expander-row.js +1 -1
  16. package/lib/esm/widgets/adw-header-bar.js +1 -1
  17. package/lib/esm/widgets/adw-inline-view-switcher.js +1 -1
  18. package/lib/esm/widgets/adw-navigation-split-view.js +1 -1
  19. package/lib/esm/widgets/adw-navigation-view.js +1 -1
  20. package/lib/esm/widgets/adw-overlay-split-view.js +1 -1
  21. package/lib/esm/widgets/adw-password-entry-row.js +1 -1
  22. package/lib/esm/widgets/adw-preferences-dialog.js +1 -1
  23. package/lib/esm/widgets/adw-preferences-group.js +1 -1
  24. package/lib/esm/widgets/adw-preferences-page.js +1 -1
  25. package/lib/esm/widgets/adw-sidebar.js +1 -1
  26. package/lib/esm/widgets/adw-spin-row.js +1 -1
  27. package/lib/esm/widgets/adw-spinner.js +1 -1
  28. package/lib/esm/widgets/adw-split-button.js +1 -1
  29. package/lib/esm/widgets/adw-status-page.js +1 -1
  30. package/lib/esm/widgets/adw-switch-row.js +1 -1
  31. package/lib/esm/widgets/adw-tab-view.js +1 -1
  32. package/lib/esm/widgets/adw-toolbar-view.js +1 -1
  33. package/lib/esm/widgets/adw-view-stack.js +1 -1
  34. package/lib/esm/widgets/adw-view-switcher-bar.js +1 -1
  35. package/lib/esm/widgets/adw-window-title.js +1 -1
  36. package/lib/esm/widgets/adw-wrap-box.js +1 -1
  37. package/lib/esm/widgets/avatar-color.js +1 -0
  38. package/lib/esm/widgets/bottom-sheet-state.js +1 -0
  39. package/lib/esm/widgets/button-content.js +1 -0
  40. package/lib/esm/widgets/carousel-state.js +1 -0
  41. package/lib/esm/widgets/chrome.js +1 -0
  42. package/lib/esm/widgets/data-grid-model.js +1 -0
  43. package/lib/esm/widgets/entry-row-view.js +1 -0
  44. package/lib/esm/widgets/icon-path.js +2 -2
  45. package/lib/esm/widgets/icons.ios.js +1 -0
  46. package/lib/esm/widgets/index.js +1 -1
  47. package/lib/esm/widgets/navigation-stack.js +1 -0
  48. package/lib/esm/widgets/preferences-group-state.js +1 -0
  49. package/lib/esm/widgets/preferences-search.js +1 -0
  50. package/lib/esm/widgets/row-state.js +1 -0
  51. package/lib/esm/widgets/sidebar-model.js +1 -0
  52. package/lib/esm/widgets/split-button.js +1 -0
  53. package/lib/esm/widgets/split-view-base.js +1 -1
  54. package/lib/esm/widgets/split-view-state.js +1 -0
  55. package/lib/esm/widgets/split-view-width.js +1 -0
  56. package/lib/esm/widgets/status-page-content.js +1 -0
  57. package/lib/esm/widgets/svg-path.js +2 -0
  58. package/lib/esm/widgets/tab-view-state.js +1 -0
  59. package/lib/esm/widgets/view-stack-state.js +1 -0
  60. package/lib/esm/widgets/view-switcher-base.js +1 -1
  61. package/lib/esm/widgets/view-switcher-model.js +1 -0
  62. package/lib/esm/widgets/wrap-box-layout.js +1 -0
  63. package/lib/types/banner.spec.d.ts +2 -0
  64. package/lib/types/bottom-sheet.spec.d.ts +2 -0
  65. package/lib/types/button-content.spec.d.ts +2 -0
  66. package/lib/types/carousel.spec.d.ts +1 -0
  67. package/lib/types/chrome.spec.d.ts +2 -0
  68. package/lib/types/data-grid.spec.d.ts +2 -0
  69. package/lib/types/drop-down.spec.d.ts +2 -0
  70. package/lib/types/entry-rows.spec.d.ts +2 -0
  71. package/lib/types/entry.spec.d.ts +2 -0
  72. package/lib/types/index.d.ts +2 -2
  73. package/lib/types/navigation-view.spec.d.ts +2 -0
  74. package/lib/types/preferences.spec.d.ts +2 -0
  75. package/lib/types/row-state.spec.d.ts +2 -0
  76. package/lib/types/sidebar.spec.d.ts +1 -0
  77. package/lib/types/split-button.spec.d.ts +1 -0
  78. package/lib/types/split-view-state.spec.d.ts +2 -0
  79. package/lib/types/split-view-width.spec.d.ts +2 -0
  80. package/lib/types/status-page.spec.d.ts +2 -0
  81. package/lib/types/svg-path.spec.d.ts +2 -0
  82. package/lib/types/tab-view.spec.d.ts +2 -0
  83. package/lib/types/view-stack.spec.d.ts +2 -0
  84. package/lib/types/view-switcher.spec.d.ts +1 -0
  85. package/lib/types/widgets/adw-action-row.d.ts +63 -7
  86. package/lib/types/widgets/adw-avatar.d.ts +2 -7
  87. package/lib/types/widgets/adw-banner.d.ts +26 -7
  88. package/lib/types/widgets/adw-bottom-sheet.d.ts +29 -11
  89. package/lib/types/widgets/adw-button-content.d.ts +41 -6
  90. package/lib/types/widgets/adw-button-row.d.ts +31 -9
  91. package/lib/types/widgets/adw-carousel.d.ts +70 -15
  92. package/lib/types/widgets/adw-clamp.d.ts +21 -4
  93. package/lib/types/widgets/adw-combo-row.d.ts +9 -0
  94. package/lib/types/widgets/adw-data-grid.d.ts +73 -0
  95. package/lib/types/widgets/adw-drop-down.d.ts +45 -0
  96. package/lib/types/widgets/adw-entry-row.d.ts +98 -2
  97. package/lib/types/widgets/adw-entry.d.ts +43 -0
  98. package/lib/types/widgets/adw-expander-row.d.ts +3 -0
  99. package/lib/types/widgets/adw-header-bar.d.ts +11 -2
  100. package/lib/types/widgets/adw-inline-view-switcher.d.ts +26 -0
  101. package/lib/types/widgets/adw-navigation-split-view.d.ts +23 -1
  102. package/lib/types/widgets/adw-navigation-view.d.ts +71 -16
  103. package/lib/types/widgets/adw-overlay-split-view.d.ts +29 -2
  104. package/lib/types/widgets/adw-password-entry-row.d.ts +33 -3
  105. package/lib/types/widgets/adw-preferences-dialog.d.ts +18 -0
  106. package/lib/types/widgets/adw-preferences-group.d.ts +56 -8
  107. package/lib/types/widgets/adw-preferences-page.d.ts +32 -1
  108. package/lib/types/widgets/adw-sidebar.d.ts +49 -7
  109. package/lib/types/widgets/adw-spinner.d.ts +22 -6
  110. package/lib/types/widgets/adw-split-button.d.ts +48 -13
  111. package/lib/types/widgets/adw-status-page.d.ts +5 -10
  112. package/lib/types/widgets/adw-switch-row.d.ts +21 -1
  113. package/lib/types/widgets/adw-tab-view.d.ts +129 -15
  114. package/lib/types/widgets/adw-toolbar-view.d.ts +39 -0
  115. package/lib/types/widgets/adw-view-stack.d.ts +30 -27
  116. package/lib/types/widgets/adw-view-switcher-bar.d.ts +22 -10
  117. package/lib/types/widgets/adw-window-title.d.ts +12 -8
  118. package/lib/types/widgets/adw-wrap-box.d.ts +93 -7
  119. package/lib/types/widgets/avatar-color.d.ts +14 -0
  120. package/lib/types/widgets/bottom-sheet-state.d.ts +73 -0
  121. package/lib/types/widgets/button-content.d.ts +43 -0
  122. package/lib/types/widgets/carousel-state.d.ts +85 -0
  123. package/lib/types/widgets/chrome.d.ts +161 -0
  124. package/lib/types/widgets/data-grid-model.d.ts +104 -0
  125. package/lib/types/widgets/entry-row-view.d.ts +88 -0
  126. package/lib/types/widgets/icon-path.d.ts +20 -0
  127. package/lib/types/widgets/icons.ios.d.ts +13 -0
  128. package/lib/types/widgets/index.d.ts +20 -5
  129. package/lib/types/widgets/navigation-stack.d.ts +153 -0
  130. package/lib/types/widgets/preferences-group-state.d.ts +52 -0
  131. package/lib/types/widgets/preferences-search.d.ts +68 -0
  132. package/lib/types/widgets/row-state.d.ts +71 -0
  133. package/lib/types/widgets/sidebar-model.d.ts +18 -0
  134. package/lib/types/widgets/split-button.d.ts +55 -0
  135. package/lib/types/widgets/split-view-base.d.ts +72 -12
  136. package/lib/types/widgets/split-view-state.d.ts +228 -0
  137. package/lib/types/widgets/split-view-width.d.ts +76 -0
  138. package/lib/types/widgets/status-page-content.d.ts +23 -0
  139. package/lib/types/widgets/svg-path.d.ts +28 -0
  140. package/lib/types/widgets/tab-view-state.d.ts +74 -0
  141. package/lib/types/widgets/view-stack-state.d.ts +35 -0
  142. package/lib/types/widgets/view-switcher-base.d.ts +75 -33
  143. package/lib/types/widgets/view-switcher-model.d.ts +114 -0
  144. package/lib/types/widgets/wrap-box-layout.d.ts +97 -0
  145. package/lib/types/wrap-box.spec.d.ts +2 -0
  146. package/package.json +7 -7
  147. package/src/theme/adwaita.css +413 -8
@@ -32,14 +32,36 @@ Page.adw-window {
32
32
  margin: 12 12 6 12;
33
33
  }
34
34
 
35
+ /* The header box: title + description column, optional trailing suffix. The two
36
+ * metric rules below are libadwaita's, keyed off `is_single_line`
37
+ * (stylesheet/widgets/_preferences.scss:6-13): a header carrying a description
38
+ * is two lines and takes a 6 bottom gap, a title-only or suffix-only header is
39
+ * one line and takes a 34 height floor instead. Spelled as base + override
40
+ * rather than with `:not(.single-line)` — the NS CSS subset has no `:not()`. */
41
+ .adw-preferences-group-header {
42
+ margin: 6 2 6 2;
43
+ }
44
+
45
+ .adw-preferences-group-header.single-line {
46
+ margin: 6 2 0 2;
47
+ min-height: 34;
48
+ }
49
+
35
50
  .adw-preferences-group-title {
36
51
  font-size: 11;
37
52
  font-weight: 700;
38
53
  color: rgba(0, 0, 0, 0.55);
39
- margin: 6 2 6 2;
54
+ margin: 0;
40
55
  /* NS has no text-transform; author titles in upper-case in markup if desired. */
41
56
  }
42
57
 
58
+ /* Dimmed description line below the title. */
59
+ .adw-preferences-group-description {
60
+ font-size: 12;
61
+ color: rgba(0, 0, 0, 0.55);
62
+ margin: 2 0 0 0;
63
+ }
64
+
43
65
  /* The boxed list: rounded card holding the rows. */
44
66
  .boxed-list,
45
67
  .adw-preferences-group-listbox {
@@ -143,13 +165,23 @@ Page.adw-window {
143
165
  margin: 0;
144
166
  }
145
167
 
146
- .adw-entry-field {
168
+ /* The text input itself, in BOTH entries: never any chrome of its own. Whatever
169
+ * surrounds it paints the Adwaita surface — the row for `.adw-entry-field`, the
170
+ * `.adw-entry` box for `.adw-entry-input`. (The widgets also set these two
171
+ * inline, which is the only thing that removes Android's Material underline;
172
+ * they are restated here so the rule is readable from the stylesheet.) */
173
+ .adw-entry-field,
174
+ .adw-entry-input {
147
175
  font-size: 15;
148
176
  color: rgba(0, 0, 0, 0.8);
149
177
  background-color: transparent;
150
- /* No Material underline — Adwaita EntryRow has no field border. */
178
+ /* No Material underline — no Adwaita entry has a field border. */
151
179
  border-width: 0;
152
180
  padding: 0;
181
+ }
182
+
183
+ /* Row only: the gap between the shrunken floating title and the value. */
184
+ .adw-entry-field {
153
185
  margin: 2 0 0 0;
154
186
  }
155
187
 
@@ -158,6 +190,23 @@ Page.adw-window {
158
190
  color: rgba(0, 0, 0, 0.8);
159
191
  }
160
192
 
193
+ /* ===== Entry (STANDALONE — the filled, rounded field, not a row) ===== */
194
+
195
+ /* The BOX carries the surface, because the field cannot: an entry's fill has to
196
+ * answer the light/dark question, and the inline `backgroundColor` that strips
197
+ * the Material underline is not overridable from CSS. Metrics are `entry`'s own
198
+ * — 34 min-height and 9px horizontal padding (_entries.scss:4-6) — over
199
+ * `$button_color`, i.e. currentColor at 10% (_entries.scss:9 with
200
+ * _buttons.scss:1), the same fill `.adw-button` carries, at `$button_radius`
201
+ * 9px (_common.scss:8). */
202
+ .adw-entry {
203
+ background-color: rgba(0, 0, 0, 0.08);
204
+ border-radius: 9;
205
+ min-height: 34;
206
+ padding: 0 9 0 9;
207
+ margin: 0;
208
+ }
209
+
161
210
  /* ===== Combo row (inline value + chevron) ===== */
162
211
 
163
212
  .adw-combo-suffix {
@@ -177,6 +226,47 @@ Page.adw-window {
177
226
  vertical-align: middle;
178
227
  }
179
228
 
229
+ /* ===== Drop down (STANDALONE — the toolbar twin of the combo row) ===== */
230
+
231
+ /* A plain Adwaita button carrying a label and an arrow. `_dropdowns.scss`
232
+ * declares no padding for it, and which of `.text-button` / `.image-text-button`
233
+ * GTK stamps on a dropdown's button is NOT verifiable in this tree (`refs/gtk`
234
+ * is empty), so these are the BASE `button` metrics: `padding: 5px 10px` over
235
+ * `min-height: 24px` — 34 in total, the same height as an entry — at
236
+ * `$button_radius` 9px with the `$button_color` fill (_buttons.scss:19-30). */
237
+ .adw-drop-down {
238
+ background-color: rgba(0, 0, 0, 0.08);
239
+ border-radius: 9;
240
+ min-height: 34;
241
+ padding: 5 10 5 10;
242
+ margin: 0;
243
+ }
244
+
245
+ /* `button { font-weight: bold }` (_buttons.scss:24). The label carries the
246
+ * colour because NS does not inherit `color` to a child Label. */
247
+ .adw-drop-down-label {
248
+ font-size: 15;
249
+ font-weight: 700;
250
+ color: rgba(0, 0, 0, 0.8);
251
+ vertical-align: center;
252
+ }
253
+
254
+ /* `dropdown > button > box { border-spacing: 6px }` (_dropdowns.scss:2-3) — the
255
+ * gap between label and arrow. The arrow's 16px size (_dropdowns.scss:10-13) is
256
+ * the AdwIcon default, and its colour follows the light/dark scheme, so neither
257
+ * is set anywhere. */
258
+ .adw-drop-down-chevron {
259
+ margin: 0 0 0 6;
260
+ vertical-align: middle;
261
+ }
262
+
263
+ /* Pressed — `$button_active_color`, in the shade `.adw-button:highlighted`
264
+ * already uses. Wired by `attachRowPressFeedback()` (NS only auto-highlights a
265
+ * Button, and this one is a StackLayout). */
266
+ .adw-drop-down:highlighted {
267
+ background-color: rgba(0, 0, 0, 0.19);
268
+ }
269
+
180
270
  /* ===== Spin row (− value + stepper) ===== */
181
271
 
182
272
  .adw-spin-control {
@@ -368,6 +458,14 @@ Page.adw-window {
368
458
  margin: 0 0 0 8;
369
459
  }
370
460
 
461
+ /* `button-style` (Since 1.7). ADW_BANNER_BUTTON_SUGGESTED adds `.suggested-action`
462
+ * to the banner button (adw-banner.c:769) — the accent appearance, restated here
463
+ * because the banner button is not an `.adw-button`. */
464
+ .adw-banner-button.suggested-action {
465
+ background-color: #3584e4;
466
+ color: #ffffff;
467
+ }
468
+
371
469
  /* ===== Avatar (circular initials) ===== */
372
470
 
373
471
  .adw-avatar {
@@ -457,6 +555,30 @@ Page.adw-window {
457
555
  padding-bottom: var(--safeAreaInsetBottom, 0);
458
556
  }
459
557
 
558
+ /* top-bar-style / bottom-bar-style = raised: an opaque background with a
559
+ * persistent separator. Adwaita uses a shadow there and swaps it for a subtler
560
+ * hairline under `.border` (adw-toolbar-view.c:1011-1024); the NS CSS subset has
561
+ * no shadow, so `raised` carries the hairline and `.border` darkens it — the same
562
+ * ordering of emphasis, in the vocabulary the platform has. */
563
+ .adw-toolbar-view-top.raised {
564
+ background-color: #ffffff;
565
+ border-bottom-width: 1;
566
+ border-bottom-color: rgba(0, 0, 0, 0.1);
567
+ }
568
+
569
+ .adw-toolbar-view-top.raised.border {
570
+ border-bottom-color: rgba(0, 0, 0, 0.24);
571
+ }
572
+
573
+ .adw-toolbar-view-bottom.raised {
574
+ background-color: #ffffff;
575
+ border-top-color: rgba(0, 0, 0, 0.1);
576
+ }
577
+
578
+ .adw-toolbar-view-bottom.raised.border {
579
+ border-top-color: rgba(0, 0, 0, 0.24);
580
+ }
581
+
460
582
  /* ===== View stack (page container) ===== */
461
583
 
462
584
  .adw-view-stack {
@@ -506,16 +628,153 @@ Page.adw-window {
506
628
  color: #3584e4;
507
629
  }
508
630
 
631
+ /* AdwIndicatorBin's badge — the unread count, or (with .needs-attention and no
632
+ * count) a bare dot. Reference: refs/libadwaita/src/adw-indicator-bin.c */
633
+ .adw-viewswitcherbar-button-badge {
634
+ font-size: 10;
635
+ font-weight: 700;
636
+ color: #ffffff;
637
+ background-color: #3584e4;
638
+ border-radius: 8;
639
+ padding: 0 4 0 4;
640
+ horizontal-align: center;
641
+ text-align: center;
642
+ }
643
+
644
+ .adw-viewswitcherbar-button-badge.needs-attention {
645
+ width: 6;
646
+ height: 6;
647
+ padding: 0;
648
+ border-radius: 3;
649
+ }
650
+
509
651
  /* ===== Wrap box ===== */
510
652
 
511
- .adw-wrap-box {
512
- margin: 6;
653
+ /* Adw.WrapBox has NO margin of its own — it is a bare layout container whose
654
+ * only spacing is `child-spacing` / `line-spacing`, both defaulting to 0
655
+ * (adw-wrap-box.c:285-287, :393-395). The 6 DIP margin that used to sit here was
656
+ * invented, and stacked on top of the port's equally invented 6 DIP spacing
657
+ * default, so an EMPTY wrap box occupied 12 DIPs. Spacing comes from the child
658
+ * margins the widget applies (widgets/wrap-box-layout.ts), never from here. */
659
+
660
+ /* ===== Data grid (an aligned numeric grid — a financial statement) ===== */
661
+
662
+ /* ONE GridLayout with the CELLS as direct children, because NativeScript has no
663
+ * subgrid: a per-row grid would resolve its own `auto` tracks from its own row's
664
+ * content and stagger the columns. So everything the browser paints on a row
665
+ * ELEMENT is painted here on a full-width StackLayout that sits UNDER that row's
666
+ * cells and spans every column — which is also why the two are styled by SIBLING
667
+ * selectors below rather than by a descendant one. */
668
+ .adw-data-grid {
669
+ background-color: transparent;
670
+ }
671
+
672
+ /* Airy Adwaita cell density, matching the boxed-list row rhythm (the browser's
673
+ * --spacing-s / --spacing-m, 9 and 12). Single-line is set on the widget: a
674
+ * wrapped figure column stops being a column of figures. */
675
+ .adw-data-grid-cell {
676
+ font-size: 15;
677
+ color: rgba(0, 0, 0, 0.8);
678
+ padding: 9 12 9 12;
679
+ vertical-align: center;
680
+ }
681
+
682
+ /* Alignment. NS has no logical `start`/`end` text alignment, so the two ends are
683
+ * spelled left/right — this port lays out LTR throughout (widgets/split-view-state.ts
684
+ * records the same limitation for the split views). */
685
+ .adw-data-grid-cell.align-start {
686
+ text-align: left;
687
+ }
688
+
689
+ .adw-data-grid-cell.align-end {
690
+ text-align: right;
691
+ }
692
+
693
+ .adw-data-grid-cell.align-center {
694
+ text-align: center;
695
+ }
696
+
697
+ /* `.numeric` is `font-variant-numeric: tabular-nums` in libadwaita
698
+ * (_labels.scss:86-88) and the NS CSS subset has NO font-feature property at all,
699
+ * so a numeric column gets its right EDGE from the shared track and proportional
700
+ * digits INSIDE the number. `.mono` is the way to real tabular figures here,
701
+ * because a fixed-pitch face is tabular by construction. `@gjsify/adwaita-fonts`
702
+ * ships no mono TTF today, so unless the app installs one the generic tail is
703
+ * what resolves. */
704
+ .adw-data-grid-cell.mono {
705
+ font-family: 'Adwaita Mono', 'AdwaitaMono-Regular', monospace;
706
+ }
707
+
708
+ /* Header row — dim and small with a hairline underline (the Adwaita list-column
709
+ * heading), never sortable. NS has no text-transform, so the labels are NOT
710
+ * upper-cased here; author them as you want them read. */
711
+ .adw-data-grid-row.header {
712
+ border-bottom-width: 1;
713
+ border-bottom-color: rgba(0, 0, 0, 0.1);
714
+ }
715
+
716
+ .adw-data-grid-cell.header-cell {
717
+ font-size: 12;
718
+ font-weight: 700;
719
+ color: rgba(0, 0, 0, 0.55);
720
+ }
721
+
722
+ /* A section header spans all columns as a bold group title (a BWA's sections),
723
+ * with extra space above it to open the group. */
724
+ .adw-data-grid-cell.section-cell {
725
+ font-weight: 700;
726
+ padding: 15 12 9 12;
727
+ }
728
+
729
+ /* A subtotal is bold with a hairline rule above it (Gesamtleistung, Rohertrag…).
730
+ * The rule is on the row background, the weight on the cells: siblings. */
731
+ .adw-data-grid-row.variant-subtotal {
732
+ border-top-width: 1;
733
+ border-top-color: rgba(0, 0, 0, 0.1);
734
+ }
735
+
736
+ .adw-data-grid-cell.variant-subtotal {
737
+ font-weight: 700;
738
+ }
739
+
740
+ /* The final total is bold with a STRONGER rule above (the accounting result —
741
+ * Betriebsergebnis) plus a thin one below, evoking the ruled grand-total line. */
742
+ .adw-data-grid-row.variant-total {
743
+ border-top-width: 2;
744
+ border-top-color: rgba(0, 0, 0, 0.1);
745
+ border-bottom-width: 1;
746
+ border-bottom-color: rgba(0, 0, 0, 0.1);
747
+ }
748
+
749
+ .adw-data-grid-cell.variant-total {
750
+ font-weight: 800;
751
+ }
752
+
753
+ /* Optional interactive rows (master-detail). Hairline separators only where
754
+ * Adwaita would — NOT zebra striping — so no default row borders. NS has no
755
+ * hover, so the pressed shade is the whole affordance. */
756
+ .adw-data-grid-row.interactive {
757
+ border-radius: 9;
758
+ }
759
+
760
+ /* Pressed — `$button_active_color`, the shade `.adw-button:highlighted` uses.
761
+ * `attachRowPressFeedback()` is wired on EVERY data row's background and gated
762
+ * HERE: a non-interactive row gets the `highlighted` pseudo-class and no rule
763
+ * claims it, so nothing lights up under a finger that cannot activate anything. */
764
+ .adw-data-grid-row.interactive:highlighted {
765
+ background-color: rgba(0, 0, 0, 0.19);
513
766
  }
514
767
 
515
768
  /* ===== Spinner ===== */
516
769
 
770
+ /* Adw.Spinner is a NEUTRAL indicator, not an accent-coloured one: the paintable
771
+ strokes with `gtk_widget_get_color()` — the widget's TEXT colour
772
+ (adw-spinner-paintable.c:432). This carried the Adwaita accent blue, which put
773
+ the two ports in open disagreement: adwaita-web's `_spinner.scss` uses
774
+ `currentColor` and says so in a comment. Nothing compared them, because no
775
+ conformance vector covers colour. */
517
776
  .adw-spinner {
518
- color: #3584e4;
777
+ color: rgba(0, 0, 0, 0.8);
519
778
  }
520
779
 
521
780
  /* ===== Status page (empty state) ===== */
@@ -585,6 +844,23 @@ Page.adw-window {
585
844
 
586
845
  /* ===== Button content (icon + label) ===== */
587
846
 
847
+ /* The class AdwButtonContent stamps on the button hosting it
848
+ * (adw-button-content.c:115), removed again on unroot (:126).
849
+ *
850
+ * libadwaita: `button.image-text-button { padding-left: 9px; padding-right: 9px }`
851
+ * (_buttons.scss:77-80) — against the 17px a plain `.text-button` gets (:72-75),
852
+ * which this theme approximates as the 16 on `.adw-button` above. The rule lived
853
+ * in NEITHER renderer, so every icon+label button was drawn with the wrong
854
+ * horizontal padding.
855
+ *
856
+ * Only the PADDING half of that block applies: the same selector also declares
857
+ * `> box, > box > box { border-spacing: 4px }` (:82-84) and neither matches
858
+ * through the `buttoncontent` node (:47-52). The icon↔label gap stays the 6 from
859
+ * `buttoncontent > box` (:626-628), which is the icon's right margin below. */
860
+ .adw-button.image-text-button {
861
+ padding: 5 9 5 9;
862
+ }
863
+
588
864
  .adw-button-content {
589
865
  margin: 0;
590
866
  }
@@ -751,6 +1027,25 @@ Page.adw-window {
751
1027
  vertical-align: center;
752
1028
  }
753
1029
 
1030
+ /* AdwIndicatorBin's badge on the classic switcher's buttons. */
1031
+ .adw-view-switcher-button-badge {
1032
+ font-size: 10;
1033
+ font-weight: 700;
1034
+ color: #ffffff;
1035
+ background-color: #3584e4;
1036
+ border-radius: 8;
1037
+ padding: 0 4 0 4;
1038
+ margin: 0 0 0 5;
1039
+ vertical-align: center;
1040
+ }
1041
+
1042
+ .adw-view-switcher-button-badge.needs-attention {
1043
+ width: 6;
1044
+ height: 6;
1045
+ padding: 0;
1046
+ border-radius: 3;
1047
+ }
1048
+
754
1049
  /* ===== Inline view switcher (compact pill bar) ===== */
755
1050
 
756
1051
  .adw-inline-view-switcher-bar {
@@ -786,6 +1081,25 @@ Page.adw-window {
786
1081
  vertical-align: center;
787
1082
  }
788
1083
 
1084
+ /* AdwIndicatorBin's badge on the inline switcher's toggles. */
1085
+ .adw-inline-view-switcher-button-badge {
1086
+ font-size: 10;
1087
+ font-weight: 700;
1088
+ color: #ffffff;
1089
+ background-color: #3584e4;
1090
+ border-radius: 8;
1091
+ padding: 0 4 0 4;
1092
+ margin: 0 0 0 5;
1093
+ vertical-align: center;
1094
+ }
1095
+
1096
+ .adw-inline-view-switcher-button-badge.needs-attention {
1097
+ width: 6;
1098
+ height: 6;
1099
+ padding: 0;
1100
+ border-radius: 3;
1101
+ }
1102
+
789
1103
  /* ===== Tab view (top tab strip) ===== */
790
1104
 
791
1105
  .adw-tab-view-bar {
@@ -868,12 +1182,25 @@ Page.adw-window {
868
1182
  background-color: #fafafb;
869
1183
  }
870
1184
 
1185
+ /* The divider is on the side the sidebar is DRAWN on, which is `:dir()` x `.end`
1186
+ * in _sidebars.scss:21-39 — not a fixed right edge. The widget adds
1187
+ * `.adw-sidebar-at-visual-start` when the pane leads, so an `end` sidebar, and a
1188
+ * `start` one under RTL, get their divider on the correct edge instead of
1189
+ * drawing it inside the content. */
871
1190
  .adw-split-view-sidebar {
872
1191
  background-color: #ebebed;
1192
+ }
1193
+
1194
+ .adw-split-view-sidebar.adw-sidebar-at-visual-start {
873
1195
  border-right-width: 1;
874
1196
  border-right-color: rgba(0, 0, 0, 0.1);
875
1197
  }
876
1198
 
1199
+ .adw-split-view-sidebar.adw-sidebar-at-visual-end {
1200
+ border-left-width: 1;
1201
+ border-left-color: rgba(0, 0, 0, 0.1);
1202
+ }
1203
+
877
1204
  .adw-split-view-content {
878
1205
  background-color: #fafafb;
879
1206
  }
@@ -1053,7 +1380,8 @@ Page.ns-dark.adw-window {
1053
1380
  color: #ffffff;
1054
1381
  }
1055
1382
 
1056
- .ns-dark .adw-preferences-group-title {
1383
+ .ns-dark .adw-preferences-group-title,
1384
+ .ns-dark .adw-preferences-group-description {
1057
1385
  color: rgba(255, 255, 255, 0.55);
1058
1386
  }
1059
1387
 
@@ -1101,10 +1429,18 @@ Page.ns-dark.adw-window {
1101
1429
  }
1102
1430
 
1103
1431
  .ns-dark .adw-entry-field,
1432
+ .ns-dark .adw-entry-input,
1104
1433
  .ns-dark .adw-password-field {
1105
1434
  color: #ffffff;
1106
1435
  }
1107
1436
 
1437
+ /* ===== Dark: entry (standalone) ===== */
1438
+
1439
+ /* The dark `$button_color`: currentColor at 10% over a white foreground. */
1440
+ .ns-dark .adw-entry {
1441
+ background-color: rgba(255, 255, 255, 0.1);
1442
+ }
1443
+
1108
1444
  /* ===== Dark: combo row ===== */
1109
1445
 
1110
1446
  .ns-dark .adw-combo-value {
@@ -1115,6 +1451,20 @@ Page.ns-dark.adw-window {
1115
1451
  color: rgba(255, 255, 255, 0.45);
1116
1452
  }
1117
1453
 
1454
+ /* ===== Dark: drop down ===== */
1455
+
1456
+ .ns-dark .adw-drop-down {
1457
+ background-color: rgba(255, 255, 255, 0.1);
1458
+ }
1459
+
1460
+ .ns-dark .adw-drop-down-label {
1461
+ color: #ffffff;
1462
+ }
1463
+
1464
+ .ns-dark .adw-drop-down:highlighted {
1465
+ background-color: rgba(255, 255, 255, 0.22);
1466
+ }
1467
+
1118
1468
  /* ===== Dark: spin row ===== */
1119
1469
 
1120
1470
  .ns-dark .adw-spin-button {
@@ -1259,6 +1609,24 @@ Page.ns-dark.adw-window {
1259
1609
  border-top-color: rgba(255, 255, 255, 0.12);
1260
1610
  }
1261
1611
 
1612
+ .ns-dark .adw-toolbar-view-top.raised {
1613
+ background-color: #2e2e32;
1614
+ border-bottom-color: rgba(255, 255, 255, 0.12);
1615
+ }
1616
+
1617
+ .ns-dark .adw-toolbar-view-top.raised.border {
1618
+ border-bottom-color: rgba(255, 255, 255, 0.28);
1619
+ }
1620
+
1621
+ .ns-dark .adw-toolbar-view-bottom.raised {
1622
+ background-color: #2e2e32;
1623
+ border-top-color: rgba(255, 255, 255, 0.12);
1624
+ }
1625
+
1626
+ .ns-dark .adw-toolbar-view-bottom.raised.border {
1627
+ border-top-color: rgba(255, 255, 255, 0.28);
1628
+ }
1629
+
1262
1630
  /* ===== Dark: view switcher bar ===== */
1263
1631
 
1264
1632
  .ns-dark .adw-viewswitcherbar {
@@ -1278,10 +1646,40 @@ Page.ns-dark.adw-window {
1278
1646
  color: #78aeed;
1279
1647
  }
1280
1648
 
1649
+ /* ===== Dark: data grid ===== */
1650
+
1651
+ .ns-dark .adw-data-grid-cell {
1652
+ color: #ffffff;
1653
+ }
1654
+
1655
+ /* Restated at three classes so it beats the two-class rule above — the light
1656
+ * `.adw-data-grid-cell.header-cell` and this one would otherwise tie, and the
1657
+ * later (dark) rule would repaint the dim heading in full white. */
1658
+ .ns-dark .adw-data-grid-cell.header-cell {
1659
+ color: rgba(255, 255, 255, 0.55);
1660
+ }
1661
+
1662
+ .ns-dark .adw-data-grid-row.header {
1663
+ border-bottom-color: rgba(255, 255, 255, 0.1);
1664
+ }
1665
+
1666
+ .ns-dark .adw-data-grid-row.variant-subtotal {
1667
+ border-top-color: rgba(255, 255, 255, 0.1);
1668
+ }
1669
+
1670
+ .ns-dark .adw-data-grid-row.variant-total {
1671
+ border-top-color: rgba(255, 255, 255, 0.1);
1672
+ border-bottom-color: rgba(255, 255, 255, 0.1);
1673
+ }
1674
+
1675
+ .ns-dark .adw-data-grid-row.interactive:highlighted {
1676
+ background-color: rgba(255, 255, 255, 0.22);
1677
+ }
1678
+
1281
1679
  /* ===== Dark: spinner ===== */
1282
1680
 
1283
1681
  .ns-dark .adw-spinner {
1284
- color: #78aeed;
1682
+ color: #ffffff;
1285
1683
  }
1286
1684
 
1287
1685
  /* ===== Dark: status page ===== */
@@ -1405,9 +1803,16 @@ Page.ns-dark.adw-window {
1405
1803
  .ns-dark .adw-split-view-sidebar,
1406
1804
  .ns-dark .adw-overlay-active {
1407
1805
  background-color: #2a2a2e;
1806
+ }
1807
+
1808
+ .ns-dark .adw-split-view-sidebar.adw-sidebar-at-visual-start {
1408
1809
  border-right-color: rgba(255, 255, 255, 0.12);
1409
1810
  }
1410
1811
 
1812
+ .ns-dark .adw-split-view-sidebar.adw-sidebar-at-visual-end {
1813
+ border-left-color: rgba(255, 255, 255, 0.12);
1814
+ }
1815
+
1411
1816
  .ns-dark .adw-split-view-content {
1412
1817
  background-color: #222226;
1413
1818
  }