@gjsify/adwaita-web 0.41.0 → 0.43.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 (97) hide show
  1. package/README.md +98 -3
  2. package/dist/adwaita-web.css +30 -23
  3. package/dist/adwaita-web.css.map +1 -1
  4. package/lib/types/adw-fonts.spec.d.ts +2 -0
  5. package/lib/types/breakpoints.d.ts +10 -1
  6. package/lib/types/connect-lifecycle.spec.d.ts +1 -0
  7. package/lib/types/elements/adw-about-dialog.d.ts +1 -0
  8. package/lib/types/elements/adw-action-row.d.ts +2 -0
  9. package/lib/types/elements/adw-alert-dialog.d.ts +14 -2
  10. package/lib/types/elements/adw-carousel.d.ts +8 -0
  11. package/lib/types/elements/adw-dialog.d.ts +2 -7
  12. package/lib/types/elements/adw-icon.d.ts +17 -1
  13. package/lib/types/elements/adw-navigation-split-view.d.ts +7 -0
  14. package/lib/types/elements/adw-overlay-split-view.d.ts +6 -0
  15. package/lib/types/elements/adw-popover.d.ts +1 -0
  16. package/lib/types/elements/adw-preferences-dialog.d.ts +1 -0
  17. package/lib/types/elements/adw-switch.d.ts +10 -0
  18. package/lib/types/elements/adw-toggle-group.d.ts +2 -0
  19. package/lib/types/elements/modal-surface.d.ts +59 -0
  20. package/lib/types/elements/roving-focus.d.ts +26 -0
  21. package/lib/types/elements/row-activation.d.ts +26 -0
  22. package/lib/types/elements/swipe-drag.d.ts +63 -0
  23. package/lib/types/empty-sections.d.ts +15 -0
  24. package/lib/types/empty-sections.spec.d.ts +1 -0
  25. package/lib/types/fonts.d.ts +1 -0
  26. package/lib/types/icon-registry.d.ts +35 -0
  27. package/lib/types/icon-registry.spec.d.ts +18 -0
  28. package/lib/types/index.d.ts +1 -1
  29. package/lib/types/keyboard-operable.spec.d.ts +1 -0
  30. package/lib/types/styles.generated.d.ts +1 -1
  31. package/package.json +10 -6
  32. package/scss/_banner.scss +1 -1
  33. package/scss/_checks.scss +8 -8
  34. package/scss/_combo_row.scss +1 -1
  35. package/scss/_drop_down.scss +1 -1
  36. package/scss/_expander_row.scss +1 -1
  37. package/scss/_icon.scss +47 -0
  38. package/scss/_icons.generated.scss +18 -6
  39. package/scss/_password_entry_row.scss +1 -1
  40. package/scss/_preferences_dialog.scss +3 -2
  41. package/scss/_progress_bar.scss +1 -1
  42. package/scss/_row.scss +1 -1
  43. package/scss/_status_page.scss +1 -1
  44. package/scss/_tab_view.scss +1 -1
  45. package/scss/_toast.scss +6 -24
  46. package/scss/_variables.scss +23 -3
  47. package/src/adw-action-rows.spec.ts +21 -9
  48. package/src/adw-button-content.spec.ts +11 -6
  49. package/src/adw-fonts.spec.ts +188 -0
  50. package/src/adw-icon.spec.ts +17 -8
  51. package/src/adw-row-state.spec.ts +11 -1
  52. package/src/breakpoints.ts +18 -4
  53. package/src/connect-lifecycle.spec.ts +351 -0
  54. package/src/elements/adw-about-dialog.ts +24 -18
  55. package/src/elements/adw-action-row.ts +14 -2
  56. package/src/elements/adw-alert-dialog.ts +39 -20
  57. package/src/elements/adw-button-row.ts +3 -0
  58. package/src/elements/adw-carousel.ts +86 -5
  59. package/src/elements/adw-clamp.ts +3 -2
  60. package/src/elements/adw-data-grid.ts +5 -2
  61. package/src/elements/adw-dialog.ts +16 -63
  62. package/src/elements/adw-expander-row.ts +18 -4
  63. package/src/elements/adw-header-bar.ts +2 -0
  64. package/src/elements/adw-icon.ts +32 -6
  65. package/src/elements/adw-inline-view-switcher.ts +12 -0
  66. package/src/elements/adw-menu-button.ts +17 -10
  67. package/src/elements/adw-navigation-split-view.ts +30 -7
  68. package/src/elements/adw-overlay-split-view.ts +15 -3
  69. package/src/elements/adw-popover.ts +11 -0
  70. package/src/elements/adw-preferences-dialog.ts +18 -16
  71. package/src/elements/adw-preferences-group.ts +7 -0
  72. package/src/elements/adw-sidebar.ts +15 -0
  73. package/src/elements/adw-status-page.ts +12 -4
  74. package/src/elements/adw-switch-row.ts +7 -0
  75. package/src/elements/adw-switch.ts +19 -1
  76. package/src/elements/adw-tab-view.ts +7 -4
  77. package/src/elements/adw-toast-overlay.ts +8 -1
  78. package/src/elements/adw-toggle-group.ts +94 -2
  79. package/src/elements/adw-toolbar-view.ts +6 -2
  80. package/src/elements/adw-view-switcher-bar.ts +18 -0
  81. package/src/elements/adw-view-switcher.ts +14 -0
  82. package/src/elements/modal-surface.ts +180 -0
  83. package/src/elements/roving-focus.ts +154 -0
  84. package/src/elements/row-activation.ts +92 -0
  85. package/src/elements/swipe-drag.ts +450 -0
  86. package/src/empty-sections.spec.ts +81 -0
  87. package/src/empty-sections.ts +54 -0
  88. package/src/fonts.ts +25 -0
  89. package/src/icon-registry.spec.ts +240 -0
  90. package/src/icon-registry.ts +157 -0
  91. package/src/index.ts +24 -1
  92. package/src/keyboard-operable.spec.ts +755 -0
  93. package/src/source-view/theme.ts +15 -3
  94. package/src/split-button.spec.ts +6 -2
  95. package/src/style-classes.spec.ts +6 -0
  96. package/src/styles.generated.ts +1 -1
  97. package/src/test.browser.mts +14 -0
package/README.md CHANGED
@@ -17,11 +17,23 @@ yarn add @gjsify/adwaita-web
17
17
  ## Usage
18
18
 
19
19
  ```typescript
20
- // Registers all custom elements, loads Adwaita fonts, and self-applies the
21
- // compiled stylesheet — this one import is all you need.
20
+ // Registers all custom elements and self-applies the compiled stylesheet.
22
21
  import '@gjsify/adwaita-web';
23
22
  ```
24
23
 
24
+ It does **not** register the Adwaita Sans `@font-face`, and that is a size
25
+ decision rather than an omission: the two faces inlined are 2.39 MB / 1.18 MB
26
+ gzip against a 190 KB / 26 KB stylesheet, and `gjsify build --app browser` has no
27
+ code splitting, so a lazy face costs the same bytes as an eager one. The
28
+ stylesheet names the family; on a GNOME host the system install resolves it.
29
+ Where that is not good enough — an app served to arbitrary browsers — opt in:
30
+
31
+ ```typescript
32
+ import { applyAdwaitaFonts } from '@gjsify/adwaita-web/fonts';
33
+
34
+ applyAdwaitaFonts(); // idempotent; injects both faces as `data:` URIs
35
+ ```
36
+
25
37
  > The stylesheet is injected on import, so a separate `import '@gjsify/adwaita-web/style.css'` is not required (and under a bundler with its own CSS pipeline it injects the same rules twice). The compiled CSS is still exported at `@gjsify/adwaita-web/style.css` if you prefer a static `<link>` with no JS injection.
26
38
 
27
39
  ```html
@@ -110,13 +122,96 @@ surface + light/dark `color-scheme` by adding the `adw-root` class to `<body>`
110
122
  `--window-fg-color` + `color-scheme: light dark` to the page and changes nothing
111
123
  about the individual components.
112
124
 
125
+ ## Icons, and the ones the stylesheet does not ship
126
+
127
+ An `<adw-icon icon-name="go-next">` is a CSS mask: the box takes its colour from
128
+ `currentColor` and a generated `.adw-icon--<name>` class supplies the `mask-image`, so the
129
+ glyph re-themes with whatever contains it. The names that resolve are a **chosen subset** of
130
+ [`@gjsify/adwaita-icons`](../adwaita-icons) — a few dozen of them, plus one glyph drawn
131
+ locally — because inlining the whole set as data-URIs costs about 1.07 MB, roughly five
132
+ times the stylesheet it would sit in.
133
+
134
+ A name outside that subset draws **`image-missing`**, the broken-image glyph libadwaita
135
+ itself substitutes when it has no icon to draw. So does a name that could never be a mask
136
+ class at all — a space, a quote, a reverse-DNS application id — because
137
+ `gtk_icon_theme_lookup_icon` has no "found nothing" answer either. It is deliberately
138
+ visible: the icon has not silently disappeared, and nothing throws — an icon is decorative,
139
+ and neither of the other two Adwaita renderers takes an application down over a glyph. Only
140
+ an **absent or empty** name draws nothing, which is the host declining an icon.
141
+
142
+ ### Registering your own
143
+
144
+ ```typescript
145
+ import { registerIcon, isIconAvailable } from '@gjsify/adwaita-web';
146
+ import { dialogErrorSymbolic } from '@gjsify/adwaita-icons/status';
147
+
148
+ if (!isIconAvailable('dialog-error')) {
149
+ registerIcon('dialog-error-symbolic', dialogErrorSymbolic);
150
+ }
151
+ ```
152
+
153
+ ```html
154
+ <adw-icon icon-name="dialog-error"></adw-icon>
155
+ <!-- …or any widget attribute that takes an icon name -->
156
+ <adw-status-page icon="dialog-error" title="Could not connect"></adw-status-page>
157
+ ```
158
+
159
+ `registerIcon(name, svg)` takes the icon's **SVG source** — exactly what
160
+ `@gjsify/adwaita-icons` exports, and equally any symbolic SVG of your own drawn on the 16px
161
+ Adwaita grid with `fill="currentColor"`. It writes the same pair the build writes: a
162
+ `--icon-<name>` custom property on the document element and a `.adw-icon--<name>` mask rule,
163
+ so from then on the name is indistinguishable from a compiled one — in `<adw-icon>`, in a
164
+ widget attribute, in a hand-written `class="adw-icon adw-icon--dialog-error"`, and in your
165
+ own CSS as `var(--icon-dialog-error)`.
166
+
167
+ Notes worth having:
168
+
169
+ - **Register before you mount, where you can.** An icon already in the document shows the
170
+ fallback until the registration lands. The CSS is live, so it corrects itself on the next
171
+ style recalculation with no re-render — but there is a visible frame in between.
172
+ - **`registerIcon` needs a live document.** It writes to `document.documentElement` and
173
+ `document.head`, so calling it at module top level in an SSR/SSG build (an Astro component
174
+ module, for instance) throws a `ReferenceError` before any page renders. Call it from
175
+ client-side code — an `onMount`, a `client:load` boundary, a `DOMContentLoaded` handler.
176
+ - **The name is normalized the same way the attribute is**: one optional `-symbolic` suffix
177
+ comes off, and what is left has to be a single CSS token. `registerIcon` *throws* on a name
178
+ that is not (`org.gnome.Builder`, `a b`), because a call that silently registers nothing is
179
+ the failure this whole area exists to end — and because there is no mask class such a name
180
+ could be given. `<adw-icon>` stays lenient with the same input: the name came from markup,
181
+ so it draws `image-missing` rather than taking the page down.
182
+ - **Re-registering replaces the glyph** rather than adding a second rule, so a runtime theme
183
+ switch can call it as often as it likes.
184
+ - `isIconAvailable(name)` reads the live cascade, not a generated list, so it also answers
185
+ `true` for a glyph you supplied through your own stylesheet's `--icon-<name>`.
186
+
187
+ ### Why this is a web-only concern
188
+
189
+ The three Adwaita renderers resolve an icon name three different ways, and it is worth
190
+ knowing which one you are on:
191
+
192
+ | Renderer | How a name resolves | An unknown name |
193
+ | --- | --- | --- |
194
+ | GTK (`@gjsify/adwaita-app`) | `GtkIconTheme` looks it up in the **system** icon theme at runtime | draws the theme's `image-missing` |
195
+ | NativeScript (`@gjsify/adwaita-nativescript`) | `AdwIcon` is handed the **SVG source**, not a name | cannot happen — a missing icon is a missing import |
196
+ | Web (this package) | a **compile-time** subset, plus `registerIcon` | draws `image-missing` |
197
+
198
+ All three therefore end on ONE glyph for a name they cannot draw. The web reaches it by two
199
+ routes — no mask class for a known-shaped name, or no usable class for a name like
200
+ `org.gnome.Builder` — and a dotted name has no registration path, so that second route is
201
+ where it stays.
202
+
203
+ Only the web renderer has a set that can be missing something at runtime, which is why only
204
+ it needs a registration path. `scripts/check-adwaita-icon-masks.mjs` holds the compiled
205
+ subset against every name this repository's SHIPPING surfaces emit, in both directions, and
206
+ fails on a compiled glyph that did not come from `@gjsify/adwaita-icons`.
207
+
113
208
  ## Source-code editor (`adw-source-view`)
114
209
 
115
210
  An Adwaita-styled source editor — the web twin of GtkSourceView — is available as
116
211
  an **opt-in subpath** so its CodeMirror dependency never bloats the core bundle:
117
212
 
118
213
  ```typescript
119
- import '@gjsify/adwaita-web'; // app chrome (theme variables, fonts)
214
+ import '@gjsify/adwaita-web'; // app chrome (theme variables, components)
120
215
  import '@gjsify/adwaita-web/source-view'; // registers <adw-source-view>
121
216
  ```
122
217
 
@@ -1,6 +1,5 @@
1
1
  @charset "UTF-8";
2
2
  :root {
3
- --icon-edit-paste: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%207%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20h%20-2%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%209%20c%200%201.644531%201.355469%203%203%203%20h%208%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-9%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20h%20-2%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%20-3%203%20h%201%20v%201%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-1%20h%201%20c%200.570312%200%201%200.429688%201%201%20v%209%20c%200%200.570312%20-0.429688%201%20-1%201%20h%20-8%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20v%20-9%20c%200%20-0.570312%200.429688%20-1%201%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
4
3
  --icon-go-down: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%201%205%20c%200%20-0.265625%200.105469%20-0.519531%200.292969%20-0.707031%20c%200.390625%20-0.390625%201.023437%20-0.390625%201.414062%200%20l%205.292969%205.292969%20l%205.292969%20-5.292969%20c%200.390625%20-0.390625%201.023437%20-0.390625%201.414062%200%20c%200.1875%200.1875%200.292969%200.441406%200.292969%200.707031%20s%20-0.105469%200.519531%20-0.292969%200.707031%20l%20-6%206%20c%20-0.390625%200.390625%20-1.023437%200.390625%20-1.414062%200%20l%20-6%20-6%20c%20-0.1875%20-0.1875%20-0.292969%20-0.441406%20-0.292969%20-0.707031%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
5
4
  --icon-sidebar-show: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%206%2013%20v%20-10%20h%20-3%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208%20c%200%200.550781%200.449219%201%201%201%20z%20m%200%200'%20fill-opacity%3D'0.34902'%2F%3E%20%3Cpath%20d%3D'm%203%201%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%208%20c%200%201.644531%201.355469%203%203%203%20h%2010%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-8%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%200%202%20h%203%20v%2010%20h%20-3%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20v%20-8%20c%200%20-0.570312%200.429688%20-1%201%20-1%20z%20m%204%200%20h%206%20c%200.570312%200%201%200.429688%201%201%20v%208%20c%200%200.570312%20-0.429688%201%20-1%201%20h%20-6%20z%20m%200%200'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E");
6
5
  --icon-go-previous: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%2012%202%20c%200%20-0.265625%20-0.105469%20-0.519531%20-0.292969%20-0.707031%20c%20-0.390625%20-0.390625%20-1.023437%20-0.390625%20-1.414062%200%20l%20-6%206%20c%20-0.1875%200.1875%20-0.292969%200.441406%20-0.292969%200.707031%20s%200.105469%200.519531%200.292969%200.707031%20l%206%206%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20c%200.1875%20-0.1875%200.292969%20-0.441406%200.292969%20-0.707031%20s%20-0.105469%20-0.519531%20-0.292969%20-0.707031%20l%20-5.292969%20-5.292969%20l%205.292969%20-5.292969%20c%200.1875%20-0.1875%200.292969%20-0.441406%200.292969%20-0.707031%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
@@ -25,9 +24,12 @@
25
24
  --icon-document-save: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208.585938%20l%20-1.292969%20-1.292969%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20s%20-0.519531%200.105469%20-0.707031%200.292969%20c%20-0.390625%200.390625%20-0.390625%201.023437%200%201.414062%20l%203%203%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20l%203%20-3%20c%200.390625%20-0.390625%200.390625%20-1.023437%200%20-1.414062%20s%20-1.023437%20-0.390625%20-1.414062%200%20l%20-1.292969%201.292969%20v%20-8.585938%20c%200%20-0.550781%20-0.449219%20-1%20-1%20-1%20z%20m%20-7%2014%20v%202%20h%2014%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
26
25
  --icon-mail-send: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.257812%200%20-0.511719%200.0976562%20-0.707031%200.292969%20l%20-1.25%201.25%20l%20-1.761719%201.730469%20c%20-0.191406%200.199218%20-0.28125%200.441406%20-0.28125%200.75%20c%200%200.976562%201%201%201%201%20c%200.257812%200%200.527344%20-0.128907%200.71875%20-0.3125%20l%201.28125%20-1.28125%20v%203.570312%20s%200%201%201%201%20s%201%20-1%201%20-1%20v%20-3.570312%20l%201.28125%201.28125%20c%200.191406%200.183593%200.410156%200.3125%200.71875%200.3125%20c%200%200%201%20-0.023438%201%20-1%20c%200%20-0.308594%20-0.089844%20-0.550782%20-0.28125%20-0.75%20l%20-1.761719%20-1.730469%20l%20-1.25%20-1.25%20c%20-0.195312%20-0.1953128%20-0.449219%20-0.292969%20-0.707031%20-0.292969%20z%20m%20-5%209%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%204%20h%202%20v%20-3.800781%20l%204.613281%203.078125%20c%200.835938%200.558594%201.9375%200.558594%202.773438%200%20l%204.613281%20-3.078125%20v%203.800781%20h%202%20v%20-4%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%200.800781%202%20h%208.398438%20l%20-3.921875%202.613281%20c%20-0.171875%200.113281%20-0.382813%200.113281%20-0.554688%200%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
27
26
  --icon-mail-reply-sender: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%205%202%20c%20-0.265625%200%20-0.519531%200.105469%20-0.707031%200.292969%20l%20-4%204%20c%20-0.3906252%200.390625%20-0.3906252%201.023437%200%201.414062%20l%204%204%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20s%200.390625%20-1.023437%200%20-1.414062%20l%20-2.292969%20-2.292969%20h%208.585938%20c%201.117188%200%202%200.882812%202%202%20v%203%20c%200%200.550781%200.449219%201%201%201%20s%201%20-0.449219%201%20-1%20v%20-3%20c%200%20-0.023438%200%20-0.046875%20-0.003906%20-0.070312%20c%20-0.035156%20-2.164063%20-1.820313%20-3.929688%20-3.996094%20-3.929688%20h%20-8.585938%20l%202.292969%20-2.292969%20c%200.390625%20-0.390625%200.390625%20-1.023437%200%20-1.414062%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
27
+ --icon-folder-documents: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204.96875%201.003906%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%209%20c%200%201.644532%201.355469%203%203%203%20h%206%20c%201.644531%200%203%20-1.355468%203%20-3%20v%20-7.5%20c%200%20-0.265625%20-0.105469%20-0.519531%20-0.292969%20-0.707031%20l%20-3.5%20-3.5%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200%202%20h%204%20v%201.5%20c%200%201%200.5%201.5%201.5%201.5%20h%201.5%20v%207%20c%200%200.570313%20-0.429688%201%20-1%201%20h%20-6%20c%20-0.570312%200%20-1%20-0.429687%20-1%20-1%20v%20-9%20c%200%20-0.570312%200.429688%20-1%201%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
28
28
  --icon-folder-download: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%207.984375%200%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208.585938%20l%20-2.292969%20-2.292969%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20s%20-0.519531%200.105469%20-0.707031%200.292969%20c%20-0.390625%200.390625%20-0.390625%201.023437%200%201.414062%20l%204%204%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20l%204%20-4%20c%200.390625%20-0.390625%200.390625%20-1.023437%200%20-1.414062%20s%20-1.023437%20-0.390625%20-1.414062%200%20l%20-2.292969%202.292969%20v%20-8.585938%20c%200%20-0.550781%20-0.449219%20-1%20-1%20-1%20z%20m%20-6%2014%20v%202%20h%2012%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
29
29
  --icon-view-grid: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%202%201%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%208%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%20-8%208%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%208%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
30
30
  --icon-view-list: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%202%201%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%202%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-2%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%201%20v%202%20h%208%20v%20-2%20z%20m%20-5%204.015625%20c%20-0.554688%200%20-1%200.445313%20-1%201%20v%201.980469%20c%200%200.550781%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.449219%201%20-1%20v%20-1.980469%20c%200%20-0.554687%20-0.445312%20-1%20-1%20-1%20z%20m%205%200.984375%20v%202%20h%208%20v%20-2%20z%20m%20-5%204%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%201.980469%20c%200%200.550781%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.449219%201%20-1%20v%20-1.980469%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%200.984375%20v%202%20h%208%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
31
+ --icon-view-more: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%207.996094%200%20c%20-1.105469%200%20-2%200.894531%20-2%202%20s%200.894531%202%202%202%20c%201.101562%200%202%20-0.894531%202%20-2%20s%20-0.898438%20-2%20-2%20-2%20z%20m%200%206%20c%20-1.105469%200%20-2%200.894531%20-2%202%20s%200.894531%202%202%202%20c%201.101562%200%202%20-0.894531%202%20-2%20s%20-0.898438%20-2%20-2%20-2%20z%20m%200%206%20c%20-1.105469%200%20-2%200.894531%20-2%202%20s%200.894531%202%202%202%20c%201.101562%200%202%20-0.894531%202%20-2%20s%20-0.898438%20-2%20-2%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
32
+ --icon-view-paged: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%209%205.5%20v%20-1%20c%200%20-0.277344%20-0.222656%20-0.5%20-0.5%20-0.5%20h%20-3%20c%20-0.277344%200%20-0.5%200.222656%20-0.5%200.5%20v%201%20c%200%200.277344%200.222656%200.5%200.5%200.5%20h%203%20c%200.277344%200%200.5%20-0.222656%200.5%20-0.5%20z%20m%200%200'%20fill-opacity%3D'0.34902'%2F%3E%20%3Cpath%20d%3D'm%204%200%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%207%20c%200%201.644531%201.355469%203%203%203%20h%206%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-7%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%200%202%20h%206%20c%200.570312%200%201%200.429688%201%201%20v%207%20c%200%200.570312%20-0.429688%201%20-1%201%20h%20-6%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20v%20-7%20c%200%20-0.570312%200.429688%20-1%201%20-1%20z%20m%2011%202%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208%20c%200%200.550781%20-0.449219%201%20-1%201%20h%20-7%20c%20-0.550781%200%20-1%200.449219%20-1%201%20s%200.449219%201%201%201%20h%207%20c%201.65625%200%203%20-1.34375%203%20-3%20v%20-8%20c%200%20-0.550781%20-0.449219%20-1%20-1%20-1%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%209%208.5%20v%20-1%20c%200%20-0.277344%20-0.222656%20-0.5%20-0.5%20-0.5%20h%20-3%20c%20-0.277344%200%20-0.5%200.222656%20-0.5%200.5%20v%201%20c%200%200.277344%200.222656%200.5%200.5%200.5%20h%203%20c%200.277344%200%200.5%20-0.222656%200.5%20-0.5%20z%20m%200%200'%20fill-opacity%3D'0.34902'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E");
31
33
  --icon-view-columns: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%202%201%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%2012%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-12%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%2012%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-12%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%2012%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-12%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
32
34
  --icon-list-remove: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%201%207%20h%2014%20v%202%20h%20-14%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
33
35
  --icon-send-to: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.257812%200%20-0.511719%200.0976562%20-0.707031%200.292969%20l%20-1.246094%201.25%20l%20-1.765625%201.730469%20c%20-0.191406%200.199218%20-0.28125%200.441406%20-0.28125%200.75%20c%200%200.976562%201%201%201%201%20c%200.257812%200%200.527344%20-0.128907%200.71875%20-0.3125%20l%201.28125%20-1.28125%20v%207.570312%20s%200%201%201%201%20s%201%20-1%201%20-1%20v%20-7.570312%20l%201.28125%201.28125%20c%200.191406%200.183593%200.410156%200.3125%200.71875%200.3125%20c%200%200%201%20-0.023438%201%20-1%20c%200%20-0.308594%20-0.089844%20-0.550782%20-0.28125%20-0.75%20l%20-1.765625%20-1.730469%20l%20-1.246094%20-1.25%20c%20-0.195312%20-0.1953128%20-0.449219%20-0.292969%20-0.707031%20-0.292969%20z%20m%20-3.96875%206.964844%20c%20-1.660156%20-0.027344%20-3.03125%201.371094%20-3.03125%203.035156%20v%202.972656%20c%200%201.664063%201.371094%203.035156%203.03125%203.035156%20h%207.9375%20c%201.664062%200%203.03125%20-1.371093%203.03125%20-3.035156%20v%20-2.972656%20c%200%20-1.664062%20-1.367188%20-3.0625%20-3.03125%20-3.035156%20l%20-1.96875%200.035156%20v%202%20l%201.96875%20-0.035156%20c%200.589844%20-0.007813%201.03125%200.445312%201.03125%201.035156%20v%202.972656%20c%200%200.589844%20-0.441406%201.035156%20-1.03125%201.035156%20h%20-7.9375%20c%20-0.585938%200%20-1.03125%20-0.445312%20-1.03125%20-1.035156%20v%20-2.972656%20c%200%20-0.589844%200.445312%20-1.042969%201.03125%20-1.035156%20l%201.96875%200.035156%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E");
@@ -42,11 +44,6 @@
42
44
  --icon-image-missing: url("data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204.015625%201.03125%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%201%20h%201%20v%20-1%20c%200%20-1.109375%200.890625%20-2%202%20-2%20h%201%20v%20-1%20z%20m%202%200%20v%201%20h%204%20v%20-1%20z%20m%205%200%20v%201%20h%201%20c%201.109375%200%202%200.890625%202%202%20v%201%20h%201%20v%20-1%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%20-5%204%20c%20-0.550781%200%20-1%200.449219%20-1%201%20s%200.449219%201%201%201%20s%201%20-0.449219%201%20-1%20s%20-0.449219%20-1%20-1%20-1%20z%20m%20-5%201%20v%204%20h%201%20v%20-4%20z%20m%2013%200%20v%204%20h%201%20v%20-4%20z%20m%20-4.5%202%20l%20-2%202%20l%20-1.5%20-1%20l%20-2%202%20v%200.5%20c%200%200.5%200.5%200.5%200.5%200.5%20h%207%20s%200.472656%20-0.035156%200.5%20-0.5%20v%20-1%20z%20m%20-8.5%203%20v%201%20c%200%201.644531%201.355469%203%203%203%20h%201%20v%20-1%20h%20-1%20c%20-1.109375%200%20-2%20-0.890625%20-2%20-2%20v%20-1%20z%20m%2013%200%20v%201%20c%200%201.109375%20-0.890625%202%20-2%202%20h%20-1%20v%201%20h%201%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-1%20z%20m%20-8%203%20v%201%20h%204%20v%20-1%20z%20m%200%200'%20fill%3D'currentColor'%20fill-opacity%3D'0.34902'%2F%3E%20%3C%2Fsvg%3E");
43
45
  }
44
46
 
45
- .adw-icon--edit-paste {
46
- mask-image: var(--icon-edit-paste);
47
- -webkit-mask-image: var(--icon-edit-paste);
48
- }
49
-
50
47
  .adw-icon--go-down {
51
48
  mask-image: var(--icon-go-down);
52
49
  -webkit-mask-image: var(--icon-go-down);
@@ -167,6 +164,11 @@
167
164
  -webkit-mask-image: var(--icon-mail-reply-sender);
168
165
  }
169
166
 
167
+ .adw-icon--folder-documents {
168
+ mask-image: var(--icon-folder-documents);
169
+ -webkit-mask-image: var(--icon-folder-documents);
170
+ }
171
+
170
172
  .adw-icon--folder-download {
171
173
  mask-image: var(--icon-folder-download);
172
174
  -webkit-mask-image: var(--icon-folder-download);
@@ -182,6 +184,16 @@
182
184
  -webkit-mask-image: var(--icon-view-list);
183
185
  }
184
186
 
187
+ .adw-icon--view-more {
188
+ mask-image: var(--icon-view-more);
189
+ -webkit-mask-image: var(--icon-view-more);
190
+ }
191
+
192
+ .adw-icon--view-paged {
193
+ mask-image: var(--icon-view-paged);
194
+ -webkit-mask-image: var(--icon-view-paged);
195
+ }
196
+
185
197
  .adw-icon--view-columns {
186
198
  mask-image: var(--icon-view-columns);
187
199
  -webkit-mask-image: var(--icon-view-columns);
@@ -919,6 +931,15 @@ adw-wrap-box *::after {
919
931
  display: none;
920
932
  }
921
933
 
934
+ :where(.adw-icon) {
935
+ mask-image: var(--icon-image-missing);
936
+ -webkit-mask-image: var(--icon-image-missing);
937
+ }
938
+
939
+ .adw-icon:not([class*=adw-icon--]) {
940
+ background-color: transparent;
941
+ }
942
+
922
943
  .dimmed, .adw-data-grid .adw-data-grid-row.header .adw-data-grid-cell, adw-progress-bar .adw-progress-bar-text {
923
944
  opacity: var(--dim-opacity);
924
945
  }
@@ -3176,7 +3197,9 @@ adw-toast-overlay .adw-toast-overlay-toasts {
3176
3197
  .adw-toast .adw-toast-close-button {
3177
3198
  box-sizing: border-box;
3178
3199
  flex-shrink: 0;
3179
- position: relative;
3200
+ display: flex;
3201
+ align-items: center;
3202
+ justify-content: center;
3180
3203
  width: 24px;
3181
3204
  height: 24px;
3182
3205
  margin: 0;
@@ -3197,22 +3220,6 @@ adw-toast-overlay .adw-toast-overlay-toasts {
3197
3220
  outline: 2px solid var(--accent-color);
3198
3221
  outline-offset: 1px;
3199
3222
  }
3200
- .adw-toast .adw-toast-close-button::before, .adw-toast .adw-toast-close-button::after {
3201
- content: "";
3202
- position: absolute;
3203
- top: 50%;
3204
- left: 50%;
3205
- width: 11px;
3206
- height: 1.5px;
3207
- background-color: currentColor;
3208
- border-radius: 1px;
3209
- }
3210
- .adw-toast .adw-toast-close-button::before {
3211
- transform: translate(-50%, -50%) rotate(45deg);
3212
- }
3213
- .adw-toast .adw-toast-close-button::after {
3214
- transform: translate(-50%, -50%) rotate(-45deg);
3215
- }
3216
3223
 
3217
3224
  adw-toolbar-view {
3218
3225
  display: flex;