@gjsify/adwaita-web 0.11.0 → 0.13.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 (120) hide show
  1. package/README.md +5 -5
  2. package/dist/adwaita-web.css +2742 -263
  3. package/dist/adwaita-web.css.map +1 -1
  4. package/lib/types/elements/adw-about-dialog.d.ts +77 -0
  5. package/lib/types/elements/adw-action-row.d.ts +15 -0
  6. package/lib/types/elements/adw-alert-dialog.d.ts +80 -0
  7. package/lib/types/elements/adw-avatar.d.ts +9 -0
  8. package/lib/types/elements/adw-banner.d.ts +9 -0
  9. package/lib/types/elements/adw-bottom-sheet.d.ts +35 -0
  10. package/lib/types/elements/adw-button-content.d.ts +10 -0
  11. package/lib/types/elements/adw-button-row.d.ts +11 -0
  12. package/lib/types/elements/adw-button.d.ts +11 -0
  13. package/lib/types/elements/adw-carousel.d.ts +64 -0
  14. package/lib/types/elements/adw-clamp.d.ts +6 -0
  15. package/lib/types/elements/adw-combo-row.d.ts +3 -0
  16. package/lib/types/elements/adw-entry-row.d.ts +10 -0
  17. package/lib/types/elements/adw-entry.d.ts +11 -0
  18. package/lib/types/elements/adw-expander-row.d.ts +26 -0
  19. package/lib/types/elements/adw-header-bar.d.ts +4 -0
  20. package/lib/types/elements/adw-inline-view-switcher.d.ts +30 -0
  21. package/lib/types/elements/adw-navigation-split-view.d.ts +15 -0
  22. package/lib/types/elements/adw-navigation-view.d.ts +66 -0
  23. package/lib/types/elements/adw-password-entry-row.d.ts +16 -0
  24. package/lib/types/elements/adw-preferences-dialog.d.ts +36 -0
  25. package/lib/types/elements/adw-preferences-group.d.ts +8 -0
  26. package/lib/types/elements/adw-sidebar.d.ts +29 -0
  27. package/lib/types/elements/adw-spin-row.d.ts +3 -0
  28. package/lib/types/elements/adw-spinner.d.ts +6 -0
  29. package/lib/types/elements/adw-split-button.d.ts +18 -0
  30. package/lib/types/elements/adw-status-page.d.ts +11 -0
  31. package/lib/types/elements/adw-switch-row.d.ts +3 -0
  32. package/lib/types/elements/adw-tab-view.d.ts +24 -0
  33. package/lib/types/elements/adw-toast-overlay.d.ts +19 -4
  34. package/lib/types/elements/adw-toggle-group.d.ts +19 -0
  35. package/lib/types/elements/adw-toolbar-view.d.ts +13 -0
  36. package/lib/types/elements/adw-view-switcher.d.ts +29 -0
  37. package/lib/types/elements/adw-window-title.d.ts +9 -0
  38. package/lib/types/elements/adw-wrap-box.d.ts +13 -0
  39. package/lib/types/index.d.ts +29 -0
  40. package/lib/types/styles.generated.d.ts +1 -0
  41. package/package.json +5 -5
  42. package/scss/_about_dialog.scss +257 -0
  43. package/scss/_action_row.scss +65 -0
  44. package/scss/_alert_dialog.scss +151 -0
  45. package/scss/_avatar.scss +31 -0
  46. package/scss/_banner.scss +46 -0
  47. package/scss/_bottom_sheet.scss +113 -0
  48. package/scss/_button.scss +168 -0
  49. package/scss/_button_content.scss +48 -0
  50. package/scss/_button_row.scss +100 -0
  51. package/scss/_carousel.scss +130 -0
  52. package/scss/_clamp.scss +11 -0
  53. package/scss/_entry.scss +49 -0
  54. package/scss/_entry_row.scss +54 -0
  55. package/scss/_expander_row.scss +150 -0
  56. package/scss/_headerbar.scss +1 -1
  57. package/scss/_inline_view_switcher.scss +174 -0
  58. package/scss/_navigation_split_view.scss +48 -0
  59. package/scss/_navigation_view.scss +80 -0
  60. package/scss/_overlay_split_view.scss +19 -0
  61. package/scss/_password_entry_row.scss +67 -0
  62. package/scss/_preferences.scss +26 -3
  63. package/scss/_preferences_dialog.scss +154 -0
  64. package/scss/_row.scss +31 -0
  65. package/scss/_sidebar.scss +213 -0
  66. package/scss/_spin_row.scss +0 -1
  67. package/scss/_spinner.scss +28 -0
  68. package/scss/_split_button.scss +222 -0
  69. package/scss/_status_page.scss +40 -0
  70. package/scss/_switch_row.scss +0 -1
  71. package/scss/_tab_view.scss +193 -0
  72. package/scss/_theme.scss +12 -0
  73. package/scss/_toast.scss +122 -12
  74. package/scss/_toggle_group.scss +124 -0
  75. package/scss/_toolbar_view.scss +31 -0
  76. package/scss/_variables.scss +19 -0
  77. package/scss/_view_switcher.scss +133 -0
  78. package/scss/_window_title.scss +33 -0
  79. package/scss/_wrap_box.scss +20 -0
  80. package/scss/adwaita-skin.scss +38 -0
  81. package/src/elements/adw-about-dialog.ts +629 -0
  82. package/src/elements/adw-action-row.ts +82 -0
  83. package/src/elements/adw-alert-dialog.ts +385 -0
  84. package/src/elements/adw-avatar.ts +108 -0
  85. package/src/elements/adw-banner.ts +57 -0
  86. package/src/elements/adw-bottom-sheet.ts +205 -0
  87. package/src/elements/adw-button-content.ts +69 -0
  88. package/src/elements/adw-button-row.ts +75 -0
  89. package/src/elements/adw-button.ts +81 -0
  90. package/src/elements/adw-carousel.ts +321 -0
  91. package/src/elements/adw-clamp.ts +28 -0
  92. package/src/elements/adw-combo-row.ts +32 -20
  93. package/src/elements/adw-entry-row.ts +69 -0
  94. package/src/elements/adw-entry.ts +61 -0
  95. package/src/elements/adw-expander-row.ts +167 -0
  96. package/src/elements/adw-header-bar.ts +21 -8
  97. package/src/elements/adw-inline-view-switcher.ts +222 -0
  98. package/src/elements/adw-navigation-split-view.ts +89 -0
  99. package/src/elements/adw-navigation-view.ts +344 -0
  100. package/src/elements/adw-password-entry-row.ts +121 -0
  101. package/src/elements/adw-preferences-dialog.ts +240 -0
  102. package/src/elements/adw-preferences-group.ts +79 -12
  103. package/src/elements/adw-sidebar.ts +238 -0
  104. package/src/elements/adw-spin-row.ts +28 -14
  105. package/src/elements/adw-spinner.ts +31 -0
  106. package/src/elements/adw-split-button.ts +206 -0
  107. package/src/elements/adw-status-page.ts +66 -0
  108. package/src/elements/adw-switch-row.ts +29 -23
  109. package/src/elements/adw-tab-view.ts +184 -0
  110. package/src/elements/adw-toast-overlay.ts +98 -19
  111. package/src/elements/adw-toggle-group.ts +126 -0
  112. package/src/elements/adw-toolbar-view.ts +60 -0
  113. package/src/elements/adw-view-switcher.ts +200 -0
  114. package/src/elements/adw-window-title.ts +48 -0
  115. package/src/elements/adw-wrap-box.ts +139 -0
  116. package/src/index.js +1 -1
  117. package/src/index.ts +46 -3
  118. package/src/styles.generated.js +2976 -0
  119. package/src/styles2.generated.js +2976 -0
  120. package/style.css.d.ts +17 -4
@@ -0,0 +1,257 @@
1
+ // _about_dialog.scss — adw-about-dialog styling (a modal AdwDialog floating
2
+ // sheet hosting the About navigation view: a full-cover scrim + a centred,
3
+ // rounded, scrollable sheet box). Mirrors libadwaita's AdwDialog floating-sheet
4
+ // node tree (dimming + rounded sheet with the outline + layered shadow) and the
5
+ // AdwAboutDialog main page layout (large icon, title-1 name, dimmed developer
6
+ // line, the version pill, then the navigation rows).
7
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_dialogs.scss
8
+ // (floating-sheet > dimming / > sheet radius + box-shadow + outline)
9
+ // Reference: refs/libadwaita/src/adw-about-dialog.ui (page tree, content-width 360)
10
+ // Reference: refs/adwaita-web/adwaita-web/scss/_about_dialog.scss (web layout)
11
+ // Copyright (c) 2022-2024 GNOME Foundation Inc. / Purism SPC (libadwaita). LGPLv2.1+.
12
+ // Copyright (c) 2025 csm (adwaita-web). MIT License.
13
+ // Modifications: Adapted for @gjsify/adwaita-web Web Components.
14
+
15
+ adw-about-dialog {
16
+ // The host is inert until presented; `.open` reveals the scrim + sheet.
17
+ display: none;
18
+
19
+ &.open {
20
+ display: block;
21
+ }
22
+
23
+ // --- Full-cover modal scrim ---
24
+ // libadwaita: floating-sheet > dimming { background shade-color × 2 }.
25
+ .adw-about-dialog-scrim {
26
+ position: fixed;
27
+ inset: 0;
28
+ z-index: 1000;
29
+ background-color: rgba(0, 0, 6, 0.32);
30
+ animation: adw-about-dialog-scrim-in 200ms ease;
31
+ }
32
+
33
+ // --- Centred floating sheet ---
34
+ // libadwaita: floating-sheet > sheet { dialog radius; layered shadow; 1px
35
+ // outline -1px offset }. content-width 360 → a comfortable ~360px sheet.
36
+ .adw-about-dialog-sheet {
37
+ position: fixed;
38
+ top: 50%;
39
+ left: 50%;
40
+ transform: translate(-50%, -50%);
41
+ z-index: 1001;
42
+ display: flex;
43
+ flex-direction: column;
44
+ box-sizing: border-box;
45
+ width: 360px;
46
+ max-width: calc(100vw - 48px);
47
+ max-height: calc(100vh - 48px);
48
+ overflow: hidden;
49
+ background-color: var(--window-bg-color);
50
+ color: var(--window-fg-color);
51
+ border-radius: var(--window-radius);
52
+ outline: 1px solid var(--separator-color);
53
+ outline-offset: -1px;
54
+ box-shadow:
55
+ 0 0 14px 2px rgba(0, 0, 6, 0.03),
56
+ 0 0 5px 2px rgba(0, 0, 6, 0.1),
57
+ 0 0 0 1px rgba(0, 0, 0, 0.05);
58
+ animation: adw-about-dialog-sheet-in 200ms cubic-bezier(0, 0, 0.2, 1);
59
+
60
+ &:focus {
61
+ outline: 1px solid var(--separator-color);
62
+ outline-offset: -1px;
63
+ }
64
+ }
65
+
66
+ // The navigation view fills the sheet; each page is a column.
67
+ adw-navigation-view,
68
+ .adw-navigation-view-pages,
69
+ .adw-navigation-page {
70
+ display: flex;
71
+ flex-direction: column;
72
+ flex: 1 1 auto;
73
+ min-height: 0;
74
+ }
75
+
76
+ // --- Toolbar view (flat header bar over the window background + scroller) ---
77
+ .adw-about-dialog-toolbar-view {
78
+ display: flex;
79
+ flex-direction: column;
80
+ flex: 1 1 auto;
81
+ min-height: 0;
82
+ }
83
+
84
+ // The dialog header bar is flat: transparent over the window background, no
85
+ // bottom separator (libadwaita: window.about headerbar.titlebar { flat }).
86
+ adw-header-bar {
87
+ background-color: transparent;
88
+ box-shadow: none;
89
+ min-height: 47px;
90
+ }
91
+
92
+ // The close button — a flat circular button drawing a "×" glyph (no
93
+ // window-close symbolic icon ships in @gjsify/adwaita-icons).
94
+ .adw-about-dialog-close {
95
+ width: 34px;
96
+ height: 34px;
97
+ padding: 0;
98
+ display: inline-flex;
99
+ align-items: center;
100
+ justify-content: center;
101
+ font-size: 18px;
102
+ line-height: 1;
103
+
104
+ &::before {
105
+ content: '\00d7'; // ×
106
+ }
107
+ }
108
+
109
+ // --- Scrolling content area ---
110
+ .adw-about-dialog-scroll {
111
+ flex: 1 1 auto;
112
+ min-height: 0;
113
+ overflow-y: auto;
114
+ overflow-x: hidden;
115
+ }
116
+
117
+ .adw-about-dialog-clamp {
118
+ width: 100%;
119
+ max-width: 360px;
120
+ margin-inline: auto;
121
+ box-sizing: border-box;
122
+ }
123
+
124
+ .adw-about-dialog-page-body {
125
+ display: flex;
126
+ flex-direction: column;
127
+ box-sizing: border-box;
128
+ padding: 0 var(--spacing-m) var(--spacing-l);
129
+ }
130
+
131
+ // --- Main page header title: hidden until the content scrolls ---
132
+ // Mirrors AdwAboutDialog's update_headerbar_cb (show title once scrolled > 0).
133
+ .main-page {
134
+ adw-header-bar .adw-header-bar-title {
135
+ opacity: 0;
136
+ transition: opacity 150ms ease;
137
+ }
138
+
139
+ &.scrolled adw-header-bar .adw-header-bar-title {
140
+ opacity: 1;
141
+ }
142
+ }
143
+
144
+ // --- App icon (the large recessed glyph) ---
145
+ .adw-about-dialog-icon {
146
+ align-self: center;
147
+ width: 96px;
148
+ height: 96px;
149
+ margin-top: var(--spacing-s);
150
+ margin-bottom: var(--spacing-m);
151
+ // Mask-driven adw-icon scaled up to the about-dialog app-icon size.
152
+ -webkit-mask-size: contain;
153
+ mask-size: contain;
154
+ background-color: currentColor;
155
+ }
156
+
157
+ // --- App name (title-1) ---
158
+ .adw-about-dialog-name {
159
+ align-self: center;
160
+ text-align: center;
161
+ font-size: 18pt;
162
+ font-weight: 800;
163
+ line-height: 1.2;
164
+ margin-bottom: var(--spacing-xs);
165
+ }
166
+
167
+ // --- Developer / vendor line ---
168
+ .adw-about-dialog-developer {
169
+ align-self: center;
170
+ text-align: center;
171
+ font-size: var(--font-size-base);
172
+ opacity: var(--dim-opacity);
173
+ margin-bottom: var(--spacing-m);
174
+ }
175
+
176
+ // --- Version pill ---
177
+ // libadwaita: .app-version { small accent chip }.
178
+ .adw-about-dialog-version {
179
+ align-self: center;
180
+ padding: 2px 12px;
181
+ margin-bottom: var(--spacing-l);
182
+ border-radius: 99px;
183
+ font-size: var(--font-size-small);
184
+ line-height: 1.4;
185
+ background-color: color-mix(in srgb, var(--accent-bg-color) 14%, transparent);
186
+ color: var(--accent-color);
187
+ }
188
+
189
+ // --- Row groups (Details / Credits / Legal navigation, link rows) ---
190
+ .adw-about-dialog-rows {
191
+ width: 100%;
192
+ margin-top: var(--spacing-m);
193
+
194
+ & + .adw-about-dialog-rows {
195
+ margin-top: var(--spacing-l);
196
+ }
197
+ }
198
+
199
+ // The trailing chevron / link affordance on a navigation or link row.
200
+ .adw-about-dialog-chevron {
201
+ width: 16px;
202
+ height: 16px;
203
+ opacity: var(--dim-opacity);
204
+ }
205
+
206
+ // --- Subpage content (Details / Credits / Legal) ---
207
+ .adw-about-dialog-comments {
208
+ margin: var(--spacing-s) 0 0;
209
+ font-size: var(--font-size-base);
210
+ line-height: 1.5;
211
+ text-align: start;
212
+ white-space: pre-wrap;
213
+ }
214
+
215
+ .adw-about-dialog-copyright {
216
+ margin: var(--spacing-s) 0 0;
217
+ font-size: var(--font-size-small);
218
+ opacity: var(--dim-opacity);
219
+ text-align: center;
220
+ }
221
+
222
+ .adw-about-dialog-license {
223
+ margin: var(--spacing-s) 0 0;
224
+ font-size: var(--font-size-small);
225
+ opacity: var(--dim-opacity);
226
+ text-align: center;
227
+
228
+ a {
229
+ color: var(--accent-color);
230
+ text-decoration: none;
231
+
232
+ &:hover {
233
+ text-decoration: underline;
234
+ }
235
+ }
236
+ }
237
+ }
238
+
239
+ @keyframes adw-about-dialog-scrim-in {
240
+ from {
241
+ opacity: 0;
242
+ }
243
+ to {
244
+ opacity: 1;
245
+ }
246
+ }
247
+
248
+ @keyframes adw-about-dialog-sheet-in {
249
+ from {
250
+ opacity: 0;
251
+ transform: translate(-50%, -50%) scale(0.95);
252
+ }
253
+ to {
254
+ opacity: 1;
255
+ transform: translate(-50%, -50%) scale(1);
256
+ }
257
+ }
@@ -0,0 +1,65 @@
1
+ // _action_row.scss — adw-action-row styling (title/subtitle + prefix/suffix).
2
+ // Reference: refs/adwaita-web/adwaita-web/scss/_action_row.scss
3
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss
4
+ // Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.
5
+ // Copyright (c) 2025 csm (adwaita-web). MIT License.
6
+ // Modifications: Adapted for @gjsify/adwaita-web Web Components.
7
+
8
+ adw-action-row {
9
+ display: flex;
10
+ align-items: center;
11
+ gap: var(--spacing-m);
12
+ min-height: 50px;
13
+ padding: var(--spacing-s) var(--spacing-m);
14
+ border-bottom: 1px solid var(--card-shade-color);
15
+ color: var(--card-fg-color);
16
+
17
+ &:last-child {
18
+ border-bottom: none;
19
+ }
20
+
21
+ &.activatable {
22
+ cursor: pointer;
23
+
24
+ &:hover {
25
+ background-color: var(--button-bg-color);
26
+ }
27
+
28
+ &:active {
29
+ background-color: var(--button-active-color);
30
+ }
31
+ }
32
+
33
+ .adw-action-row-prefix,
34
+ .adw-action-row-suffix {
35
+ display: flex;
36
+ align-items: center;
37
+ gap: var(--spacing-xs);
38
+ flex-shrink: 0;
39
+ }
40
+
41
+ .adw-action-row-text {
42
+ display: flex;
43
+ flex-direction: column;
44
+ justify-content: center;
45
+ flex: 1 1 auto;
46
+ min-width: 0;
47
+ }
48
+
49
+ .adw-row-title {
50
+ font-size: var(--font-size-base);
51
+ color: var(--card-fg-color);
52
+ white-space: nowrap;
53
+ overflow: hidden;
54
+ text-overflow: ellipsis;
55
+ }
56
+
57
+ .adw-row-subtitle {
58
+ font-size: var(--font-size-small);
59
+ opacity: var(--dim-opacity);
60
+ color: var(--card-fg-color);
61
+ white-space: nowrap;
62
+ overflow: hidden;
63
+ text-overflow: ellipsis;
64
+ }
65
+ }
@@ -0,0 +1,151 @@
1
+ // _alert_dialog.scss — adw-alert-dialog: a modal scrim + centred dialog box with
2
+ // a bold heading, body text and a row/column of response buttons.
3
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_dialogs.scss (floating-sheet,
4
+ // AdwDialog sheet shadow + radius)
5
+ // Reference: refs/adwaita-web/adwaita-web/scss/_dialog.scss (alert layout)
6
+ // Reference: refs/libadwaita/src/adw-alert-dialog.c (response button layout)
7
+ // Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.
8
+ // Modifications: Implemented for @gjsify/adwaita-web Web Components.
9
+
10
+ // Host: lay the scrim + box out as a full-cover overlay only while open.
11
+ adw-alert-dialog {
12
+ display: none;
13
+
14
+ &.open {
15
+ display: block;
16
+ }
17
+ }
18
+
19
+ // The scrim — a fixed full-cover dimming layer behind the dialog box.
20
+ .adw-alert-dialog-scrim {
21
+ position: fixed;
22
+ inset: 0;
23
+ z-index: 1050;
24
+ background-color: rgba(0, 0, 6, 0.32);
25
+ // Centre the dialog box (the box is the scrim's flex child).
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: center;
29
+ padding: var(--spacing-l);
30
+ // Mirror the AdwDialog present transition (a quick fade + scale).
31
+ animation: adw-alert-dialog-fade-in 0.2s cubic-bezier(0, 0, 0.2, 1);
32
+ }
33
+
34
+ // The dialog box — the AdwDialog "sheet": rounded window-colored surface with a
35
+ // soft shadow + hairline outline, centred above the scrim.
36
+ .adw-alert-dialog-box {
37
+ position: fixed;
38
+ top: 50%;
39
+ left: 50%;
40
+ z-index: 1051;
41
+ transform: translate(-50%, -50%);
42
+
43
+ display: flex;
44
+ flex-direction: column;
45
+
46
+ box-sizing: border-box;
47
+ width: 100%;
48
+ max-width: 300px;
49
+ max-height: calc(100vh - 2 * var(--spacing-xl));
50
+ overflow: hidden;
51
+
52
+ background-color: var(--window-bg-color);
53
+ color: var(--window-fg-color);
54
+ border-radius: var(--window-radius);
55
+ outline: 1px solid var(--separator-color);
56
+ outline-offset: -1px;
57
+ box-shadow:
58
+ 0 0 14px 2px rgba(0, 0, 6, 0.03),
59
+ 0 0 5px 2px rgba(0, 0, 6, 0.1),
60
+ 0 0 0 1px rgba(0, 0, 0, 0.05);
61
+
62
+ font-family: var(--font-family);
63
+
64
+ animation: adw-alert-dialog-pop-in 0.2s cubic-bezier(0, 0, 0.2, 1);
65
+ }
66
+
67
+ // Wider layout when responses are laid out horizontally (prefer-wide-layout).
68
+ .adw-alert-dialog-box:has(.adw-alert-dialog-responses.horizontal) {
69
+ max-width: 360px;
70
+ }
71
+
72
+ // The scrollable message area: heading + body + optional extra child.
73
+ .adw-alert-dialog-message {
74
+ display: flex;
75
+ flex-direction: column;
76
+ padding: var(--spacing-xl) var(--spacing-xl) var(--spacing-l);
77
+ overflow-y: auto;
78
+ }
79
+
80
+ .adw-alert-dialog-heading {
81
+ margin: 0;
82
+ // Matches the GTK .title-2 typography style (bold heading).
83
+ font-size: 15pt;
84
+ font-weight: 800;
85
+ line-height: 1.3;
86
+ text-align: center;
87
+ }
88
+
89
+ .adw-alert-dialog-body {
90
+ margin: var(--spacing-s) 0 0;
91
+ font-size: var(--font-size-base);
92
+ line-height: 1.4;
93
+ text-align: center;
94
+ }
95
+
96
+ // Extra child slot, displayed below the body.
97
+ .adw-alert-dialog-child {
98
+ margin-top: var(--spacing-m);
99
+
100
+ &:empty {
101
+ display: none;
102
+ }
103
+ }
104
+
105
+ // Response button area. Vertical (stacked) by default; horizontal when the
106
+ // dialog opts into the wide layout.
107
+ .adw-alert-dialog-responses {
108
+ display: flex;
109
+ flex-direction: column;
110
+ gap: var(--spacing-s);
111
+ padding: var(--spacing-m) var(--spacing-l) var(--spacing-l);
112
+
113
+ &.horizontal {
114
+ flex-direction: row;
115
+ justify-content: stretch;
116
+
117
+ .adw-alert-dialog-response {
118
+ flex: 1 1 0;
119
+ }
120
+ }
121
+ }
122
+
123
+ // The response buttons — full-width pills within the stacked layout. They reuse
124
+ // the .adw-button skin (incl. .suggested-action / .destructive-action), so only
125
+ // the full width needs adding here. The default response is NOT accent-tinted —
126
+ // libadwaita only colours suggested/destructive responses; the default one is
127
+ // just the Enter-activated button and keeps the neutral button style.
128
+ .adw-alert-dialog-response.adw-button {
129
+ width: 100%;
130
+ justify-content: center;
131
+ }
132
+
133
+ @keyframes adw-alert-dialog-fade-in {
134
+ from {
135
+ opacity: 0;
136
+ }
137
+ to {
138
+ opacity: 1;
139
+ }
140
+ }
141
+
142
+ @keyframes adw-alert-dialog-pop-in {
143
+ from {
144
+ opacity: 0;
145
+ transform: translate(-50%, -50%) scale(0.95);
146
+ }
147
+ to {
148
+ opacity: 1;
149
+ transform: translate(-50%, -50%) scale(1);
150
+ }
151
+ }
@@ -0,0 +1,31 @@
1
+ // _avatar.scss — adw-avatar styling (round, initials or fallback icon).
2
+ // Reference: refs/adwaita-web/adwaita-web/scss/_avatar.scss
3
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_avatar.scss
4
+ // Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.
5
+ // Modifications: Adapted for @gjsify/adwaita-web Web Components.
6
+
7
+ adw-avatar {
8
+ display: inline-flex;
9
+ align-items: center;
10
+ justify-content: center;
11
+ flex-shrink: 0;
12
+ border-radius: 50%;
13
+ overflow: hidden;
14
+ box-sizing: border-box;
15
+ font-weight: 700;
16
+ user-select: none;
17
+ background-color: rgba(127, 127, 127, 0.25);
18
+ color: var(--window-fg-color);
19
+
20
+ .adw-avatar-text {
21
+ line-height: 1;
22
+ text-align: center;
23
+ }
24
+
25
+ .adw-avatar-icon {
26
+ background-color: currentColor;
27
+ opacity: 0.7;
28
+ -webkit-mask-size: contain;
29
+ mask-size: contain;
30
+ }
31
+ }
@@ -0,0 +1,46 @@
1
+ // _banner.scss — adw-banner styling (full-width accent message strip).
2
+ // Reference: refs/adwaita-web/adwaita-web/scss/_banner.scss
3
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_banner.scss
4
+ // Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.
5
+ // Modifications: Adapted for @gjsify/adwaita-web Web Components.
6
+
7
+ adw-banner {
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: space-between;
11
+ gap: var(--spacing-m);
12
+ padding: var(--spacing-xs) var(--spacing-m);
13
+ width: 100%;
14
+ box-sizing: border-box;
15
+ // Adw.Banner uses a neutral elevated surface, not the accent colour.
16
+ background-color: var(--sidebar-bg-color);
17
+ color: var(--window-fg-color);
18
+
19
+ // Adw.Banner stays hidden until revealed.
20
+ &:not(.revealed) {
21
+ display: none;
22
+ }
23
+
24
+ .adw-banner-title {
25
+ flex: 1 1 auto;
26
+ min-width: 0;
27
+ font-size: var(--font-size-base);
28
+ }
29
+
30
+ .adw-banner-button {
31
+ flex-shrink: 0;
32
+ border: none;
33
+ border-radius: var(--button-radius);
34
+ padding: 4px 14px;
35
+ background: var(--button-bg-color);
36
+ color: var(--window-fg-color);
37
+ font-family: var(--font-family);
38
+ font-size: var(--font-size-base);
39
+ font-weight: 700;
40
+ cursor: pointer;
41
+
42
+ &:hover {
43
+ background: var(--button-hover-color);
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,113 @@
1
+ // _bottom_sheet.scss — adw-bottom-sheet styling (a content area with a sheet
2
+ // that slides up from the bottom edge over the content, with an overlaid drag
3
+ // handle). Mirrors libadwaita's AdwBottomSheet CSS node tree: a persistent
4
+ // content layer, a dimming layer that fades in over it while open (modal), and
5
+ // the sheet itself anchored to the bottom edge with rounded top corners + the
6
+ // pill-shaped drag handle.
7
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_bottom-sheet.scss
8
+ // (dimming / sheet box-shadow / drag-handle pill / dialog top radius)
9
+ // Reference: refs/libadwaita/src/adw-bottom-sheet.c (open / modal / can-close)
10
+ // Copyright (c) 2023-2024 GNOME Foundation Inc. (libadwaita). LGPLv2.1+.
11
+ // Modifications: Adapted for @gjsify/adwaita-web Web Components.
12
+
13
+ adw-bottom-sheet {
14
+ display: block;
15
+ position: relative;
16
+ box-sizing: border-box;
17
+ overflow: hidden;
18
+ background-color: var(--window-bg-color);
19
+ color: var(--window-fg-color);
20
+
21
+ // --- Persistent content layer ---
22
+ .adw-bottom-sheet-content {
23
+ box-sizing: border-box;
24
+ width: 100%;
25
+ height: 100%;
26
+ }
27
+
28
+ // --- Dimming layer (modal scrim over the content) ---
29
+ // libadwaita: > dimming { background: shade-color × 2 }. Non-interactive +
30
+ // transparent when the sheet is closed.
31
+ .adw-bottom-sheet-dimming {
32
+ position: absolute;
33
+ inset: 0;
34
+ box-sizing: border-box;
35
+ background-color: rgba(0, 0, 6, 0.32);
36
+ opacity: 0;
37
+ visibility: hidden;
38
+ pointer-events: none;
39
+ transition:
40
+ opacity 200ms ease,
41
+ visibility 0s linear 200ms;
42
+
43
+ &.visible {
44
+ opacity: 1;
45
+ visibility: visible;
46
+ pointer-events: auto;
47
+ transition:
48
+ opacity 200ms ease,
49
+ visibility 0s;
50
+ }
51
+ }
52
+
53
+ // --- The slide-up sheet ---
54
+ // Anchored to the bottom edge, full-width, rounded top corners (dialog
55
+ // radius), slid off-screen when closed. The spring-driven AdwBottomSheet uses
56
+ // a translate; the web port uses an eased transform for the same effect.
57
+ .adw-bottom-sheet-sheet {
58
+ position: absolute;
59
+ left: 0;
60
+ right: 0;
61
+ bottom: 0;
62
+ box-sizing: border-box;
63
+ max-height: 100%;
64
+ overflow: auto;
65
+ background-color: var(--view-bg-color);
66
+ color: var(--view-fg-color);
67
+ border-top-left-radius: var(--window-radius);
68
+ border-top-right-radius: var(--window-radius);
69
+ box-shadow:
70
+ 0 0 14px 2px rgba(0, 0, 6, 0.03),
71
+ 0 0 5px 2px rgba(0, 0, 6, 0.1),
72
+ 0 0 0 1px rgba(0, 0, 0, 0.05);
73
+ transform: translateY(100%);
74
+ transition:
75
+ transform 250ms ease,
76
+ box-shadow 250ms ease;
77
+ will-change: transform;
78
+ }
79
+
80
+ // --- Drag handle (overlaid pill at the top of the sheet) ---
81
+ // libadwaita: > drag-handle { min-width 54px; min-height 6px; margin 15px;
82
+ // border-radius 99px; background currentColor @ 25% }.
83
+ .adw-bottom-sheet-drag-handle {
84
+ flex-shrink: 0;
85
+ box-sizing: border-box;
86
+ width: 54px;
87
+ min-height: 6px;
88
+ height: 6px;
89
+ margin: 15px auto;
90
+ border-radius: 99px;
91
+ background-color: color-mix(in srgb, currentColor 25%, transparent);
92
+ cursor: pointer;
93
+
94
+ &:focus-visible {
95
+ outline: 2px solid var(--accent-color);
96
+ outline-offset: 4px;
97
+ }
98
+ }
99
+
100
+ .adw-bottom-sheet-sheet-body {
101
+ box-sizing: border-box;
102
+ }
103
+
104
+ // --- Open state ---
105
+ &.open .adw-bottom-sheet-sheet {
106
+ transform: translateY(0);
107
+ }
108
+
109
+ // A non-modal sheet must not block the content beneath it.
110
+ &:not(.modal) .adw-bottom-sheet-dimming {
111
+ display: none;
112
+ }
113
+ }