@gjsify/adwaita-web 0.1.7 → 0.1.9

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.
@@ -1,70 +1,34 @@
1
- // Adwaita CSS subset for browser targets.
2
- // Colors from refs/libadwaita/src/stylesheet/_colors.scss (canonical).
3
- // Component styles adapted from Adwaita Web UI Framework (https://github.com/mclellac/adwaita-web).
4
- // Copyright (c) GNOME contributors (libadwaita), LGPLv2.1+.
5
- // Copyright (c) 2025 csm (adwaita-web). MIT License.
6
- // Modifications: Extracted as CSS-in-JS for @gjsify/adwaita-web.
7
-
8
- import { editPasteSymbolic, goDownSymbolic, sidebarShowSymbolic } from '@gjsify/adwaita-icons/actions';
9
- import { toDataUri } from '@gjsify/adwaita-icons/utils';
10
-
11
- const goDownDataUri = toDataUri(goDownSymbolic);
12
- const editPasteDataUri = toDataUri(editPasteSymbolic);
13
- const sidebarShowDataUri = toDataUri(sidebarShowSymbolic);
14
-
15
- export const adwaitaCSS = `
16
- /* ═══════════════════════════════════════════════════════════════
17
- Adwaita CSS Custom Properties — Light Theme (default)
18
- ═══════════════════════════════════════════════════════════════ */
19
1
  :root {
20
- /* Icons (Adwaita symbolic, encoded as data-URIs) */
21
- --icon-edit-paste: ${editPasteDataUri};
22
- --icon-go-down: ${goDownDataUri};
23
- --icon-sidebar-show: ${sidebarShowDataUri};
2
+ --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");
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");
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");
5
+ }
24
6
 
25
- /* Window */
7
+ :root {
26
8
  --window-bg-color: #fafafb;
27
9
  --window-fg-color: rgba(0, 0, 6, 0.8);
28
-
29
- /* Views */
30
10
  --view-bg-color: #ffffff;
31
11
  --view-fg-color: rgba(0, 0, 6, 0.8);
32
-
33
- /* Header bar */
34
12
  --headerbar-bg-color: #ffffff;
35
13
  --headerbar-fg-color: rgba(0, 0, 6, 0.8);
36
14
  --headerbar-shade-color: rgba(0, 0, 6, 0.12);
37
-
38
- /* Sidebar */
39
15
  --sidebar-bg-color: #ebebed;
40
-
41
- /* Cards / boxed lists */
42
16
  --card-bg-color: #ffffff;
43
17
  --card-fg-color: rgba(0, 0, 6, 0.8);
44
18
  --card-shade-color: rgba(0, 0, 6, 0.07);
45
-
46
- /* Accent */
47
19
  --accent-bg-color: #3584e4;
48
20
  --accent-fg-color: #ffffff;
49
21
  --accent-color: #1c71d8;
50
-
51
- /* Switch */
52
22
  --switch-off-bg: rgba(0, 0, 0, 0.2);
53
23
  --switch-knob-bg: #ffffff;
54
-
55
- /* Layout */
56
24
  --window-radius: 15px;
57
25
  --card-radius: 12px;
58
26
  --button-radius: 9px;
59
-
60
- /* Spacing */
61
27
  --spacing-xs: 6px;
62
28
  --spacing-s: 9px;
63
29
  --spacing-m: 12px;
64
30
  --spacing-l: 18px;
65
31
  --spacing-xl: 24px;
66
-
67
- /* Typography — GNOME default: Adwaita Sans 11 */
68
32
  --font-family: 'Adwaita Sans', 'Cantarell', 'Inter', 'Segoe UI', sans-serif;
69
33
  --font-size-base: 11pt;
70
34
  --font-size-small: 9pt;
@@ -72,9 +36,6 @@ export const adwaitaCSS = `
72
36
  --dim-opacity: 0.55;
73
37
  }
74
38
 
75
- /* ═══════════════════════════════════════════════════════════════
76
- Dark Theme — auto via prefers-color-scheme
77
- ═══════════════════════════════════════════════════════════════ */
78
39
  @media (prefers-color-scheme: dark) {
79
40
  :root:not(.theme-light) {
80
41
  --window-bg-color: #222226;
@@ -93,8 +54,6 @@ export const adwaitaCSS = `
93
54
  --switch-knob-bg: #deddda;
94
55
  }
95
56
  }
96
-
97
- /* Dark theme manual override */
98
57
  :root.theme-dark {
99
58
  --window-bg-color: #222226;
100
59
  --window-fg-color: #ffffff;
@@ -112,11 +71,6 @@ export const adwaitaCSS = `
112
71
  --switch-knob-bg: #deddda;
113
72
  }
114
73
 
115
- /* ═══════════════════════════════════════════════════════════════
116
- Component Styles
117
- ═══════════════════════════════════════════════════════════════ */
118
-
119
- /* --- adw-window --- */
120
74
  adw-window {
121
75
  display: flex;
122
76
  flex-direction: column;
@@ -125,16 +79,12 @@ adw-window {
125
79
  font-family: var(--font-family);
126
80
  font-size: var(--font-size-base);
127
81
  border-radius: var(--window-radius);
128
- box-shadow:
129
- 0 0 14px 5px rgb(0 0 0 / 15%),
130
- 0 0 5px 2px rgb(0 0 0 / 10%),
131
- 0 0 0 1px rgb(0 0 0 / 5%);
82
+ box-shadow: 0 0 14px 5px rgba(0, 0, 0, 0.15), 0 0 5px 2px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.05);
132
83
  overflow: hidden;
133
- outline: 1px solid rgb(255 255 255 / 7%);
84
+ outline: 1px solid rgba(255, 255, 255, 0.07);
134
85
  outline-offset: -1px;
135
86
  }
136
87
 
137
- /* --- adw-header-bar --- */
138
88
  adw-header-bar {
139
89
  display: flex;
140
90
  align-items: center;
@@ -145,13 +95,11 @@ adw-header-bar {
145
95
  box-shadow: inset 0 -1px var(--headerbar-shade-color);
146
96
  flex-shrink: 0;
147
97
  }
148
-
149
98
  adw-header-bar .adw-header-bar-center {
150
99
  flex: 1;
151
100
  display: flex;
152
101
  justify-content: center;
153
102
  }
154
-
155
103
  adw-header-bar .adw-header-bar-title {
156
104
  font-weight: bold;
157
105
  font-size: var(--font-size-base);
@@ -159,21 +107,18 @@ adw-header-bar .adw-header-bar-title {
159
107
  overflow: hidden;
160
108
  text-overflow: ellipsis;
161
109
  }
162
-
163
110
  adw-header-bar .adw-header-bar-start {
164
111
  display: flex;
165
112
  align-items: center;
166
113
  padding: 0 6px;
167
114
  gap: 4px;
168
115
  }
169
-
170
116
  adw-header-bar .adw-header-bar-end {
171
117
  display: flex;
172
118
  align-items: center;
173
119
  padding: 0 6px;
174
120
  gap: 4px;
175
121
  }
176
-
177
122
  adw-header-bar .adw-header-btn {
178
123
  position: relative;
179
124
  width: 34px;
@@ -187,24 +132,19 @@ adw-header-bar .adw-header-btn {
187
132
  margin: 0;
188
133
  flex-shrink: 0;
189
134
  }
190
-
191
135
  adw-header-bar .adw-header-btn:hover {
192
136
  background: rgba(128, 128, 128, 0.12);
193
137
  }
194
-
195
138
  adw-header-bar .adw-header-btn:active {
196
139
  background: rgba(128, 128, 128, 0.22);
197
140
  }
198
141
 
199
- /* --- adw-preferences-group --- */
200
142
  adw-preferences-group {
201
143
  display: block;
202
144
  }
203
-
204
145
  adw-preferences-group .adw-preferences-group-header {
205
146
  padding: var(--spacing-xs) 2px;
206
147
  }
207
-
208
148
  adw-preferences-group .adw-preferences-group-title {
209
149
  font-size: var(--font-size-small);
210
150
  font-weight: 700;
@@ -214,19 +154,25 @@ adw-preferences-group .adw-preferences-group-title {
214
154
  margin: 0;
215
155
  color: var(--window-fg-color);
216
156
  }
217
-
218
157
  adw-preferences-group .adw-preferences-group-listbox {
219
158
  background-color: var(--card-bg-color);
220
159
  color: var(--card-fg-color);
221
160
  border-radius: var(--card-radius);
222
- box-shadow:
223
- 0 0 0 1px rgb(0 0 6 / 3%),
224
- 0 1px 3px 1px rgb(0 0 6 / 7%),
225
- 0 2px 6px 2px rgb(0 0 6 / 3%);
161
+ box-shadow: 0 0 0 1px rgba(0, 0, 6, 0.03), 0 1px 3px 1px rgba(0, 0, 6, 0.07), 0 2px 6px 2px rgba(0, 0, 6, 0.03);
162
+ overflow: hidden;
163
+ }
164
+
165
+ adw-card,
166
+ .adw-card {
167
+ display: block;
168
+ background-color: var(--card-bg-color);
169
+ color: var(--card-fg-color);
170
+ border-radius: var(--card-radius);
171
+ padding: var(--spacing-l);
172
+ box-shadow: 0 0 0 1px rgba(0, 0, 6, 0.03), 0 1px 3px 1px rgba(0, 0, 6, 0.07), 0 2px 6px 2px rgba(0, 0, 6, 0.03);
226
173
  overflow: hidden;
227
174
  }
228
175
 
229
- /* --- Row base (shared by switch-row, combo-row) --- */
230
176
  adw-switch-row,
231
177
  adw-combo-row {
232
178
  display: flex;
@@ -237,19 +183,23 @@ adw-combo-row {
237
183
  gap: var(--spacing-m);
238
184
  border-bottom: 1px solid var(--card-shade-color);
239
185
  }
240
-
241
186
  adw-switch-row:last-child,
242
187
  adw-combo-row:last-child {
243
188
  border-bottom: none;
244
189
  }
245
190
 
246
- /* --- adw-switch-row --- */
191
+ .adw-separator-vertical {
192
+ width: 1px;
193
+ align-self: stretch;
194
+ background-color: var(--card-shade-color);
195
+ flex-shrink: 0;
196
+ }
197
+
247
198
  adw-switch-row .adw-row-title {
248
199
  flex: 1;
249
200
  font-size: var(--font-size-base);
250
201
  color: var(--card-fg-color);
251
202
  }
252
-
253
203
  adw-switch-row .adw-switch {
254
204
  position: relative;
255
205
  display: inline-block;
@@ -257,14 +207,12 @@ adw-switch-row .adw-switch {
257
207
  height: 24px;
258
208
  flex-shrink: 0;
259
209
  }
260
-
261
210
  adw-switch-row .adw-switch input {
262
211
  opacity: 0;
263
212
  width: 0;
264
213
  height: 0;
265
214
  position: absolute;
266
215
  }
267
-
268
216
  adw-switch-row .adw-switch-slider {
269
217
  position: absolute;
270
218
  cursor: pointer;
@@ -273,7 +221,6 @@ adw-switch-row .adw-switch-slider {
273
221
  border-radius: 12px;
274
222
  transition: background-color 0.15s ease-out;
275
223
  }
276
-
277
224
  adw-switch-row .adw-switch-slider::before {
278
225
  content: "";
279
226
  position: absolute;
@@ -284,34 +231,28 @@ adw-switch-row .adw-switch-slider::before {
284
231
  background-color: var(--switch-knob-bg);
285
232
  border-radius: 50%;
286
233
  transition: transform 0.15s ease-out;
287
- box-shadow: 0 1px 2px rgb(0 0 0 / 20%);
234
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
288
235
  }
289
-
290
236
  adw-switch-row .adw-switch input:checked + .adw-switch-slider {
291
237
  background-color: var(--accent-bg-color);
292
238
  }
293
-
294
239
  adw-switch-row .adw-switch input:checked + .adw-switch-slider::before {
295
240
  transform: translateX(20px);
296
241
  }
297
-
298
242
  adw-switch-row .adw-switch input:focus-visible + .adw-switch-slider {
299
243
  outline: 2px solid var(--accent-color);
300
244
  outline-offset: 2px;
301
245
  }
302
246
 
303
- /* --- adw-combo-row --- */
304
247
  adw-combo-row {
305
248
  position: relative;
306
249
  cursor: pointer;
307
250
  }
308
-
309
251
  adw-combo-row .adw-row-title {
310
252
  font-size: var(--font-size-base);
311
253
  color: var(--card-fg-color);
312
254
  pointer-events: none;
313
255
  }
314
-
315
256
  adw-combo-row select {
316
257
  appearance: none;
317
258
  -webkit-appearance: none;
@@ -323,11 +264,6 @@ adw-combo-row select {
323
264
  color: var(--card-fg-color);
324
265
  cursor: pointer;
325
266
  text-align: right;
326
- background-image: ${goDownDataUri};
327
- background-repeat: no-repeat;
328
- background-position: right 4px center;
329
- background-size: 12px 12px;
330
- /* Stretch select over the entire row to make it clickable anywhere */
331
267
  position: absolute;
332
268
  inset: 0;
333
269
  opacity: 0;
@@ -335,7 +271,14 @@ adw-combo-row select {
335
271
  height: 100%;
336
272
  z-index: 1;
337
273
  }
338
-
274
+ adw-combo-row select:focus-visible {
275
+ outline: 2px solid var(--accent-color);
276
+ outline-offset: -1px;
277
+ }
278
+ adw-combo-row select option {
279
+ background-color: var(--window-bg-color);
280
+ color: var(--window-fg-color);
281
+ }
339
282
  adw-combo-row .adw-row-value {
340
283
  font-size: var(--font-size-base);
341
284
  color: var(--card-fg-color);
@@ -344,36 +287,22 @@ adw-combo-row .adw-row-value {
344
287
  align-items: center;
345
288
  gap: 4px;
346
289
  }
347
-
348
290
  adw-combo-row .adw-row-value::after {
349
291
  content: "";
350
292
  display: inline-block;
351
293
  width: 12px;
352
294
  height: 12px;
353
- background-image: ${goDownDataUri};
354
- background-repeat: no-repeat;
355
- background-size: contain;
356
- }
357
-
358
- adw-combo-row select:focus-visible {
359
- outline: 2px solid var(--accent-color);
360
- outline-offset: -1px;
361
- }
362
-
363
- adw-combo-row select option {
364
- background-color: var(--window-bg-color);
365
- color: var(--window-fg-color);
366
- }
367
-
368
- /* --- Utility: separator --- */
369
- .adw-separator-vertical {
370
- width: 1px;
371
- align-self: stretch;
372
- background-color: var(--card-shade-color);
373
- flex-shrink: 0;
295
+ background-color: currentColor;
296
+ -webkit-mask-image: var(--icon-go-down);
297
+ mask-image: var(--icon-go-down);
298
+ -webkit-mask-repeat: no-repeat;
299
+ mask-repeat: no-repeat;
300
+ -webkit-mask-size: contain;
301
+ mask-size: contain;
302
+ -webkit-mask-position: center;
303
+ mask-position: center;
374
304
  }
375
305
 
376
- /* --- adw-spin-row --- */
377
306
  adw-spin-row {
378
307
  display: flex;
379
308
  align-items: center;
@@ -383,11 +312,9 @@ adw-spin-row {
383
312
  gap: var(--spacing-m);
384
313
  border-bottom: 1px solid var(--card-shade-color);
385
314
  }
386
-
387
315
  adw-spin-row:last-child {
388
316
  border-bottom: none;
389
317
  }
390
-
391
318
  adw-spin-row .adw-row-title {
392
319
  flex: 1;
393
320
  font-size: var(--font-size-base);
@@ -399,7 +326,6 @@ adw-spin-row .adw-row-title {
399
326
  align-items: center;
400
327
  gap: 2px;
401
328
  }
402
-
403
329
  .adw-spin-control button {
404
330
  width: 32px;
405
331
  height: 32px;
@@ -414,11 +340,9 @@ adw-spin-row .adw-row-title {
414
340
  justify-content: center;
415
341
  flex-shrink: 0;
416
342
  }
417
-
418
343
  .adw-spin-control button:hover {
419
344
  background: rgba(128, 128, 128, 0.15);
420
345
  }
421
-
422
346
  .adw-spin-control input {
423
347
  width: 56px;
424
348
  text-align: center;
@@ -430,14 +354,11 @@ adw-spin-row .adw-row-title {
430
354
  font-size: var(--font-size-base);
431
355
  padding: 4px 2px;
432
356
  }
433
-
434
357
  .adw-spin-control input:focus {
435
358
  outline: 2px solid var(--accent-color);
436
359
  outline-offset: -1px;
437
360
  }
438
361
 
439
- /* --- adw-toast-overlay ---
440
- Reference: refs/adwaita-web/adwaita-web/scss/_toast_overlay.scss */
441
362
  adw-toast-overlay {
442
363
  position: fixed;
443
364
  bottom: 24px;
@@ -451,8 +372,6 @@ adw-toast-overlay {
451
372
  pointer-events: none;
452
373
  }
453
374
 
454
- /* --- adw-toast ---
455
- Reference: refs/adwaita-web/adwaita-web/scss/_toast.scss */
456
375
  .adw-toast {
457
376
  background-color: #3d3846;
458
377
  color: #ffffff;
@@ -468,35 +387,26 @@ adw-toast-overlay {
468
387
  pointer-events: auto;
469
388
  font-family: var(--font-family);
470
389
  font-size: var(--font-size-base);
471
-
472
390
  opacity: 0;
473
391
  transform: translateY(100%) scale(0.9);
474
- transition: opacity 0.2s cubic-bezier(0, 0, 0.2, 1),
475
- transform 0.2s cubic-bezier(0, 0, 0.2, 1);
392
+ transition: opacity 0.2s cubic-bezier(0, 0, 0.2, 1), transform 0.2s cubic-bezier(0, 0, 0.2, 1);
476
393
  will-change: transform, opacity;
477
394
  }
478
-
479
395
  .adw-toast.visible {
480
396
  opacity: 1;
481
397
  transform: translateY(0) scale(1);
482
398
  }
483
-
484
399
  .adw-toast.hiding {
485
400
  opacity: 0;
486
401
  transform: translateY(100%) scale(0.9);
487
402
  transition-duration: 0.15s;
488
403
  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
489
404
  }
490
-
491
405
  .adw-toast .adw-toast-title {
492
406
  font-weight: normal;
493
407
  line-height: 1.3;
494
408
  }
495
409
 
496
- /* ═══════════════════════════════════════════════════════════════
497
- adw-overlay-split-view
498
- Reference: Adw.OverlaySplitView from libadwaita
499
- ═══════════════════════════════════════════════════════════════ */
500
410
  adw-overlay-split-view {
501
411
  display: flex;
502
412
  flex-direction: row;
@@ -505,7 +415,6 @@ adw-overlay-split-view {
505
415
  position: relative;
506
416
  overflow: hidden;
507
417
  }
508
-
509
418
  adw-overlay-split-view .adw-osv-sidebar {
510
419
  background-color: var(--sidebar-bg-color);
511
420
  overflow-y: auto;
@@ -514,7 +423,6 @@ adw-overlay-split-view .adw-osv-sidebar {
514
423
  z-index: 10;
515
424
  align-self: stretch;
516
425
  }
517
-
518
426
  adw-overlay-split-view .adw-osv-content {
519
427
  flex: 1;
520
428
  min-width: 0;
@@ -523,21 +431,14 @@ adw-overlay-split-view .adw-osv-content {
523
431
  flex-direction: column;
524
432
  align-self: stretch;
525
433
  }
526
-
527
- /* Docked mode (not collapsed) — sidebar beside content */
528
434
  adw-overlay-split-view:not(.collapsed) .adw-osv-sidebar {
529
435
  position: relative;
530
436
  }
531
-
532
- /* Docked hide: slide left and collapse space via negative margin.
533
- Sidebar keeps its intrinsic width so internal elements don't reflow. */
534
437
  adw-overlay-split-view:not(.collapsed):not(.show-sidebar) .adw-osv-sidebar {
535
438
  transform: translateX(-100%);
536
439
  opacity: 0;
537
440
  pointer-events: none;
538
441
  }
539
-
540
- /* Overlay mode (collapsed) — sidebar on top of content */
541
442
  adw-overlay-split-view.collapsed .adw-osv-sidebar {
542
443
  position: absolute;
543
444
  top: 0;
@@ -547,24 +448,19 @@ adw-overlay-split-view.collapsed .adw-osv-sidebar {
547
448
  opacity: 0;
548
449
  pointer-events: none;
549
450
  }
550
-
551
451
  adw-overlay-split-view.collapsed.sidebar-end .adw-osv-sidebar {
552
452
  left: auto;
553
453
  right: 0;
554
454
  transform: translateX(100%);
555
455
  }
556
-
557
456
  adw-overlay-split-view.collapsed.show-sidebar .adw-osv-sidebar {
558
457
  transform: translateX(0);
559
458
  opacity: 1;
560
459
  pointer-events: auto;
561
460
  }
562
-
563
- /* Backdrop — visible only in overlay mode when sidebar is open */
564
461
  adw-overlay-split-view .adw-osv-backdrop {
565
462
  display: none;
566
463
  }
567
-
568
464
  adw-overlay-split-view.collapsed.show-sidebar .adw-osv-backdrop {
569
465
  display: block;
570
466
  position: absolute;
@@ -573,9 +469,15 @@ adw-overlay-split-view.collapsed.show-sidebar .adw-osv-backdrop {
573
469
  z-index: 9;
574
470
  }
575
471
 
576
- /* Sidebar toggle button — sidebar-show-symbolic icon via CSS mask */
472
+ .adw-sidebar-content {
473
+ padding: var(--spacing-m);
474
+ display: flex;
475
+ flex-direction: column;
476
+ gap: var(--spacing-m);
477
+ }
478
+
577
479
  .adw-sidebar-toggle-icon::after {
578
- content: '';
480
+ content: "";
579
481
  position: absolute;
580
482
  inset: 0;
581
483
  background-color: currentColor;
@@ -589,4 +491,4 @@ adw-overlay-split-view.collapsed.show-sidebar .adw-osv-backdrop {
589
491
  mask-position: center;
590
492
  pointer-events: none;
591
493
  }
592
- `;
494
+ /*# sourceMappingURL=adwaita-web.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_icons.generated.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_variables.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_theme.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_window.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_headerbar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_preferences.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_card.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_switch_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_combo_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_spin_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_toast.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_overlay_split_view.scss"],"names":[],"mappings":"AAGA;EACE;EACA;EACA;;;ACCF;EAEE;EACA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;;;AC/BF;EACE;IAlBA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;AAWF;EAxBE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACbF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAGF;EACA;EACA;;;ACdF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;;ACxDN;EACE;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA,YACE;EAGF;;;ACzBJ;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA,YACE;EAGF;;;ACXF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;;;AAKJ;EACE;EACA;EACA;EACA;;;AClBA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;;AAEA;EACE;;AAIJ;EACE;EACA;;;ACvDJ;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAMA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACnEN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACxDN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;;ACpDJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;;AAKF;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAIF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAMJ;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","sourcesContent":["// _icons.generated.scss — auto-generated by scripts/build-scss.mjs\n// DO NOT EDIT — regenerated on every build from @gjsify/adwaita-icons.\n\n:root {\n --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\");\n --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\");\n --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\");\n}\n","// _variables.scss — Adwaita CSS custom properties (light theme defaults).\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss (canonical color palette)\n// Reference: refs/adwaita-web/adwaita-web/scss/_variables.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Subset adapted for @gjsify/adwaita-web Web Components.\n\n:root {\n // Window\n --window-bg-color: #fafafb;\n --window-fg-color: rgba(0, 0, 6, 0.8);\n\n // Views\n --view-bg-color: #ffffff;\n --view-fg-color: rgba(0, 0, 6, 0.8);\n\n // Header bar\n --headerbar-bg-color: #ffffff;\n --headerbar-fg-color: rgba(0, 0, 6, 0.8);\n --headerbar-shade-color: rgba(0, 0, 6, 0.12);\n\n // Sidebar\n --sidebar-bg-color: #ebebed;\n\n // Cards / boxed lists\n --card-bg-color: #ffffff;\n --card-fg-color: rgba(0, 0, 6, 0.8);\n --card-shade-color: rgba(0, 0, 6, 0.07);\n\n // Accent\n --accent-bg-color: #3584e4;\n --accent-fg-color: #ffffff;\n --accent-color: #1c71d8;\n\n // Switch\n --switch-off-bg: rgba(0, 0, 0, 0.2);\n --switch-knob-bg: #ffffff;\n\n // Layout radii\n --window-radius: 15px;\n --card-radius: 12px;\n --button-radius: 9px;\n\n // Spacing scale\n --spacing-xs: 6px;\n --spacing-s: 9px;\n --spacing-m: 12px;\n --spacing-l: 18px;\n --spacing-xl: 24px;\n\n // Typography — GNOME default: Adwaita Sans 11\n --font-family: 'Adwaita Sans', 'Cantarell', 'Inter', 'Segoe UI', sans-serif;\n --font-size-base: 11pt;\n --font-size-small: 9pt;\n --font-size-heading: 12pt;\n --dim-opacity: 0.55;\n}\n","// _theme.scss — Light/dark theme switching.\n// Auto via prefers-color-scheme + manual .theme-dark / .theme-light overrides.\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n@mixin dark-theme {\n --window-bg-color: #222226;\n --window-fg-color: #ffffff;\n --view-bg-color: #1d1d20;\n --view-fg-color: #ffffff;\n --headerbar-bg-color: #2e2e32;\n --headerbar-fg-color: #ffffff;\n --headerbar-shade-color: rgba(0, 0, 6, 0.36);\n --sidebar-bg-color: #2e2e32;\n --card-bg-color: rgba(255, 255, 255, 0.08);\n --card-fg-color: #ffffff;\n --card-shade-color: rgba(0, 0, 6, 0.36);\n --accent-color: #78aeed;\n --switch-off-bg: rgba(255, 255, 255, 0.2);\n --switch-knob-bg: #deddda;\n}\n\n// Auto dark theme via prefers-color-scheme — opt out with .theme-light\n@media (prefers-color-scheme: dark) {\n :root:not(.theme-light) {\n @include dark-theme;\n }\n}\n\n// Manual override\n:root.theme-dark {\n @include dark-theme;\n}\n","// _window.scss — adw-window styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_window.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_window.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-window {\n display: flex;\n flex-direction: column;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n border-radius: var(--window-radius);\n box-shadow:\n 0 0 14px 5px rgb(0 0 0 / 15%),\n 0 0 5px 2px rgb(0 0 0 / 10%),\n 0 0 0 1px rgb(0 0 0 / 5%);\n overflow: hidden;\n outline: 1px solid rgb(255 255 255 / 7%);\n outline-offset: -1px;\n}\n","// _headerbar.scss — adw-header-bar styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_headerbar.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_header-bar.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-header-bar {\n display: flex;\n align-items: center;\n min-height: 47px;\n padding: 0 6px;\n background-color: var(--headerbar-bg-color);\n color: var(--headerbar-fg-color);\n box-shadow: inset 0 -1px var(--headerbar-shade-color);\n flex-shrink: 0;\n\n .adw-header-bar-center {\n flex: 1;\n display: flex;\n justify-content: center;\n }\n\n .adw-header-bar-title {\n font-weight: bold;\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .adw-header-bar-start {\n display: flex;\n align-items: center;\n padding: 0 6px;\n gap: 4px;\n }\n\n .adw-header-bar-end {\n display: flex;\n align-items: center;\n padding: 0 6px;\n gap: 4px;\n }\n\n .adw-header-btn {\n position: relative;\n width: 34px;\n height: 34px;\n border: none;\n border-radius: var(--button-radius);\n background: transparent;\n color: var(--headerbar-fg-color);\n cursor: pointer;\n padding: 0;\n margin: 0;\n flex-shrink: 0;\n\n &:hover {\n background: rgba(128, 128, 128, 0.12);\n }\n\n &:active {\n background: rgba(128, 128, 128, 0.22);\n }\n }\n}\n","// _preferences.scss — adw-preferences-group styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_preferences.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_preferences.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-preferences-group {\n display: block;\n\n .adw-preferences-group-header {\n padding: var(--spacing-xs) 2px;\n }\n\n .adw-preferences-group-title {\n font-size: var(--font-size-small);\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n opacity: var(--dim-opacity);\n margin: 0;\n color: var(--window-fg-color);\n }\n\n .adw-preferences-group-listbox {\n background-color: var(--card-bg-color);\n color: var(--card-fg-color);\n border-radius: var(--card-radius);\n box-shadow:\n 0 0 0 1px rgb(0 0 6 / 3%),\n 0 1px 3px 1px rgb(0 0 6 / 7%),\n 0 2px 6px 2px rgb(0 0 6 / 3%);\n overflow: hidden;\n }\n}\n","// _card.scss — adw-card styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_card.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-card,\n.adw-card {\n display: block;\n background-color: var(--card-bg-color);\n color: var(--card-fg-color);\n border-radius: var(--card-radius);\n padding: var(--spacing-l);\n box-shadow:\n 0 0 0 1px rgb(0 0 6 / 3%),\n 0 1px 3px 1px rgb(0 0 6 / 7%),\n 0 2px 6px 2px rgb(0 0 6 / 3%);\n overflow: hidden;\n}\n","// _row.scss — Shared base styling for rows in preferences groups.\n// Reference: refs/adwaita-web/adwaita-web/scss/_row_types.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_action-row.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-switch-row,\nadw-combo-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 50px;\n padding: var(--spacing-s) var(--spacing-m);\n gap: var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n}\n\n// Utility separator (used by content layouts)\n.adw-separator-vertical {\n width: 1px;\n align-self: stretch;\n background-color: var(--card-shade-color);\n flex-shrink: 0;\n}\n","// _switch_row.scss — adw-switch-row styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_switch_row.scss\n// Reference: refs/adwaita-web/adwaita-web/scss/_switch.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_switch.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-switch-row {\n .adw-row-title {\n flex: 1;\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n }\n\n .adw-switch {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n\n input {\n opacity: 0;\n width: 0;\n height: 0;\n position: absolute;\n }\n }\n\n .adw-switch-slider {\n position: absolute;\n cursor: pointer;\n inset: 0;\n background-color: var(--switch-off-bg);\n border-radius: 12px;\n transition: background-color 0.15s ease-out;\n\n &::before {\n content: \"\";\n position: absolute;\n height: 20px;\n width: 20px;\n left: 2px;\n bottom: 2px;\n background-color: var(--switch-knob-bg);\n border-radius: 50%;\n transition: transform 0.15s ease-out;\n box-shadow: 0 1px 2px rgb(0 0 0 / 20%);\n }\n }\n\n .adw-switch input:checked + .adw-switch-slider {\n background-color: var(--accent-bg-color);\n\n &::before {\n transform: translateX(20px);\n }\n }\n\n .adw-switch input:focus-visible + .adw-switch-slider {\n outline: 2px solid var(--accent-color);\n outline-offset: 2px;\n }\n}\n","// _combo_row.scss — adw-combo-row styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_combo_row.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_combo-row.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-combo-row {\n position: relative;\n cursor: pointer;\n\n .adw-row-title {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n pointer-events: none;\n }\n\n // Hidden <select> overlay — stretches across the row to capture clicks\n // anywhere. The visual dropdown arrow is rendered by .adw-row-value::after\n // below, so the select itself doesn't need a background image.\n select {\n appearance: none;\n -webkit-appearance: none;\n background-color: transparent;\n border: none;\n padding: 6px 24px 6px 8px;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n cursor: pointer;\n text-align: right;\n position: absolute;\n inset: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -1px;\n }\n\n option {\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n }\n }\n\n .adw-row-value {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n opacity: var(--dim-opacity);\n display: flex;\n align-items: center;\n gap: 4px;\n\n // Dropdown arrow — rendered via CSS mask so `currentColor` drives the\n // fill, making the icon theme-aware (matches libadwaita's dark theme).\n // Using background-image with a data-URI SVG would NOT resolve\n // `currentColor` in most browsers.\n &::after {\n content: \"\";\n display: inline-block;\n width: 12px;\n height: 12px;\n background-color: currentColor;\n -webkit-mask-image: var(--icon-go-down);\n mask-image: var(--icon-go-down);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: contain;\n mask-size: contain;\n -webkit-mask-position: center;\n mask-position: center;\n }\n }\n}\n","// _spin_row.scss — adw-spin-row styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_spin_button.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_spin-button.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-spin-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 50px;\n padding: var(--spacing-s) var(--spacing-m);\n gap: var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n .adw-row-title {\n flex: 1;\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n }\n}\n\n.adw-spin-control {\n display: flex;\n align-items: center;\n gap: 2px;\n\n button {\n width: 32px;\n height: 32px;\n border: none;\n border-radius: var(--button-radius);\n background: transparent;\n color: var(--card-fg-color);\n cursor: pointer;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n &:hover {\n background: rgba(128, 128, 128, 0.15);\n }\n }\n\n input {\n width: 56px;\n text-align: center;\n border: none;\n border-radius: var(--button-radius);\n background: rgba(128, 128, 128, 0.1);\n color: var(--card-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n padding: 4px 2px;\n\n &:focus {\n outline: 2px solid var(--accent-color);\n outline-offset: -1px;\n }\n }\n}\n","// _toast.scss — adw-toast and adw-toast-overlay styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_toast.scss\n// Reference: refs/adwaita-web/adwaita-web/scss/_toast_overlay.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toast.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-toast-overlay {\n position: fixed;\n bottom: 24px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 9999;\n display: flex;\n flex-direction: column-reverse;\n gap: 9px;\n align-items: center;\n pointer-events: none;\n}\n\n.adw-toast {\n background-color: #3d3846;\n color: #ffffff;\n padding: 9px 12px;\n border-radius: var(--card-radius);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.25);\n display: flex;\n align-items: center;\n gap: 9px;\n width: max-content;\n max-width: 400px;\n min-height: 36px;\n pointer-events: auto;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n\n opacity: 0;\n transform: translateY(100%) scale(0.9);\n transition: opacity 0.2s cubic-bezier(0, 0, 0.2, 1),\n transform 0.2s cubic-bezier(0, 0, 0.2, 1);\n will-change: transform, opacity;\n\n &.visible {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n\n &.hiding {\n opacity: 0;\n transform: translateY(100%) scale(0.9);\n transition-duration: 0.15s;\n transition-timing-function: cubic-bezier(0.4, 0, 1, 1);\n }\n\n .adw-toast-title {\n font-weight: normal;\n line-height: 1.3;\n }\n}\n","// _overlay_split_view.scss — adw-overlay-split-view styling.\n// Reference: refs/libadwaita/src/adw-overlay-split-view.c\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Implemented as Web Component for @gjsify/adwaita-web.\n\nadw-overlay-split-view {\n display: flex;\n flex-direction: row;\n flex: 1;\n min-height: 0;\n position: relative;\n overflow: hidden;\n\n .adw-osv-sidebar {\n background-color: var(--sidebar-bg-color);\n overflow-y: auto;\n flex-shrink: 0;\n transition: transform 0.2s ease, opacity 0.2s ease, margin 0.2s ease;\n z-index: 10;\n align-self: stretch;\n }\n\n .adw-osv-content {\n flex: 1;\n min-width: 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n align-self: stretch;\n }\n\n // Docked mode (not collapsed) — sidebar beside content\n &:not(.collapsed) .adw-osv-sidebar {\n position: relative;\n }\n\n // Docked hide: slide left and collapse via opacity. Sidebar keeps its\n // intrinsic width so internal elements don't reflow.\n &:not(.collapsed):not(.show-sidebar) .adw-osv-sidebar {\n transform: translateX(-100%);\n opacity: 0;\n pointer-events: none;\n }\n\n // Overlay mode (collapsed) — sidebar on top of content\n &.collapsed .adw-osv-sidebar {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n transform: translateX(-100%);\n opacity: 0;\n pointer-events: none;\n }\n\n &.collapsed.sidebar-end .adw-osv-sidebar {\n left: auto;\n right: 0;\n transform: translateX(100%);\n }\n\n &.collapsed.show-sidebar .adw-osv-sidebar {\n transform: translateX(0);\n opacity: 1;\n pointer-events: auto;\n }\n\n // Backdrop — visible only in overlay mode when sidebar is open\n .adw-osv-backdrop {\n display: none;\n }\n\n &.collapsed.show-sidebar .adw-osv-backdrop {\n display: block;\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 9;\n }\n}\n\n// Sidebar content layout helper — wraps the sidebar's children with the\n// standard Adwaita spacing scale (12px padding, 12px gap between groups).\n.adw-sidebar-content {\n padding: var(--spacing-m);\n display: flex;\n flex-direction: column;\n gap: var(--spacing-m);\n}\n\n// Sidebar toggle button — sidebar-show-symbolic icon via CSS mask\n.adw-sidebar-toggle-icon::after {\n content: '';\n position: absolute;\n inset: 0;\n background-color: currentColor;\n -webkit-mask-image: var(--icon-sidebar-show);\n mask-image: var(--icon-sidebar-show);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 16px 16px;\n mask-size: 16px 16px;\n -webkit-mask-position: center;\n mask-position: center;\n pointer-events: none;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export declare class AdwCard extends HTMLElement {
2
+ connectedCallback(): void;
3
+ }
@@ -1,4 +1,5 @@
1
1
  import '@gjsify/adwaita-fonts';
2
+ export { AdwCard } from './elements/adw-card.js';
2
3
  export { AdwWindow } from './elements/adw-window.js';
3
4
  export { AdwHeaderBar } from './elements/adw-header-bar.js';
4
5
  export { AdwPreferencesGroup } from './elements/adw-preferences-group.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjsify/adwaita-web",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "Adwaita/Libadwaita web components for browser targets",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -9,21 +9,36 @@
9
9
  ".": {
10
10
  "types": "./src/index.ts",
11
11
  "default": "./src/index.ts"
12
- }
12
+ },
13
+ "./style.css": {
14
+ "types": "./style.css.d.ts",
15
+ "default": "./dist/adwaita-web.css"
16
+ },
17
+ "./scss": "./scss/adwaita-skin.scss",
18
+ "./scss/*": "./scss/*"
13
19
  },
20
+ "files": [
21
+ "src",
22
+ "scss",
23
+ "dist",
24
+ "lib",
25
+ "style.css.d.ts"
26
+ ],
14
27
  "scripts": {
15
- "clear": "rm -rf lib tsconfig.tsbuildinfo || exit 0",
28
+ "clear": "rm -rf lib dist tsconfig.tsbuildinfo scss/_icons.generated.scss || exit 0",
16
29
  "check": "tsc --noEmit",
17
- "build": "yarn build:gjsify && yarn build:types",
30
+ "build": "yarn build:scss && yarn build:gjsify && yarn build:types",
31
+ "build:scss": "node scripts/build-scss.mjs",
18
32
  "build:gjsify": "gjsify build --library 'src/**/*.ts' --exclude 'src/**/*.spec.ts'",
19
33
  "build:types": "tsc"
20
34
  },
21
35
  "dependencies": {
22
- "@gjsify/adwaita-fonts": "^0.1.7",
23
- "@gjsify/adwaita-icons": "^0.1.7"
36
+ "@gjsify/adwaita-fonts": "^0.1.9",
37
+ "@gjsify/adwaita-icons": "^0.1.9"
24
38
  },
25
39
  "devDependencies": {
26
- "@gjsify/cli": "^0.1.7",
40
+ "@gjsify/cli": "^0.1.9",
41
+ "sass": "^1.99.0",
27
42
  "typescript": "^6.0.2"
28
43
  }
29
44
  }