@dereekb/dbx-web 13.17.0 → 13.18.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 (40) hide show
  1. package/_index.scss +4 -1
  2. package/eslint/package.json +4 -4
  3. package/fesm2022/dereekb-dbx-web-mapbox.mjs +2 -2
  4. package/fesm2022/dereekb-dbx-web-mapbox.mjs.map +1 -1
  5. package/fesm2022/dereekb-dbx-web-style-demo.mjs +1698 -0
  6. package/fesm2022/dereekb-dbx-web-style-demo.mjs.map +1 -0
  7. package/fesm2022/dereekb-dbx-web-table.mjs +1 -1
  8. package/fesm2022/dereekb-dbx-web-table.mjs.map +1 -1
  9. package/fesm2022/dereekb-dbx-web.mjs +460 -333
  10. package/fesm2022/dereekb-dbx-web.mjs.map +1 -1
  11. package/lib/button/_button.scss +74 -98
  12. package/lib/extension/pdf/_pdf.scss +5 -5
  13. package/lib/extension/table/_table.scss +2 -2
  14. package/lib/interaction/detach/_detach.scss +22 -2
  15. package/lib/interaction/dialog/_dialog.scss +4 -8
  16. package/lib/interaction/popup/_popup.scss +1 -2
  17. package/lib/interaction/prompt/_prompt.scss +7 -2
  18. package/lib/layout/avatar/_avatar.scss +8 -0
  19. package/lib/layout/bar/_bar.scss +41 -2
  20. package/lib/layout/card/_card.scss +191 -3
  21. package/lib/layout/column/_column.scss +3 -3
  22. package/lib/layout/content/_content.scss +24 -9
  23. package/lib/layout/list/_list.scss +83 -6
  24. package/lib/layout/section/_section.scss +7 -8
  25. package/lib/layout/style/_style.scss +44 -9
  26. package/lib/layout/text/_text.scss +73 -29
  27. package/lib/loading/_loading.scss +9 -2
  28. package/lib/router/layout/navbar/_navbar.scss +14 -0
  29. package/lib/router/layout/sidenav/_sidenav.scss +2 -2
  30. package/lib/style/_core.scss +4 -0
  31. package/lib/style/_corners.scss +79 -0
  32. package/lib/style/_root-variables.scss +17 -0
  33. package/lib/style/_shapes.scss +56 -0
  34. package/lib/style/_style-demo.scss +183 -0
  35. package/lib/style/_variables.scss +8 -1
  36. package/package.json +11 -7
  37. package/style-demo/README.md +12 -0
  38. package/types/dereekb-dbx-web-style-demo.d.ts +883 -0
  39. package/types/dereekb-dbx-web.d.ts +170 -79
  40. package/lib/style/_m2-visual-compat.scss +0 -120
@@ -4,7 +4,7 @@
4
4
  @use '../style/theming';
5
5
 
6
6
  // MARK: Variables
7
- $button-spacer-width: 6px;
7
+ $button-spacer-width: var(--dbx-padding-2);
8
8
  $big-button-height: 46px; // 33% bigger
9
9
 
10
10
  // MARK: Mixin
@@ -16,11 +16,11 @@ $big-button-height: 46px; // 33% bigger
16
16
  /// @see-also button-wide
17
17
  .dbx-button-big,
18
18
  .dbx-button-large {
19
- --mat-button-text-container-height: #{$big-button-height};
20
- --mat-button-filled-container-height: #{$big-button-height};
21
- --mat-button-protected-container-height: #{$big-button-height};
22
- --mat-button-outlined-container-height: #{$big-button-height};
23
- --mat-button-tonal-container-height: #{$big-button-height};
19
+ --mat-button-text-container-height: var(--dbx-button-big-height, #{$big-button-height});
20
+ --mat-button-filled-container-height: var(--dbx-button-big-height, #{$big-button-height});
21
+ --mat-button-protected-container-height: var(--dbx-button-big-height, #{$big-button-height});
22
+ --mat-button-outlined-container-height: var(--dbx-button-big-height, #{$big-button-height});
23
+ --mat-button-tonal-container-height: var(--dbx-button-big-height, #{$big-button-height});
24
24
  }
25
25
 
26
26
  /// @dbx-utility button-form-field-height
@@ -68,7 +68,7 @@ $big-button-height: 46px; // 33% bigger
68
68
  /// @see-also button-grow
69
69
  .dbx-button-wide {
70
70
  .dbx-button {
71
- min-width: 120px;
71
+ min-width: var(--dbx-button-wide-min-width, 120px);
72
72
  max-width: 100%;
73
73
  }
74
74
  }
@@ -81,12 +81,12 @@ $big-button-height: 46px; // 33% bigger
81
81
  > dbx-button,
82
82
  > dbx-anchor {
83
83
  display: inline-block;
84
- padding: 0 6px 6px 0;
84
+ padding: 0 var(--dbx-padding-2) var(--dbx-padding-2) 0;
85
85
  }
86
86
 
87
87
  > button,
88
88
  > dbx-icon-button {
89
- margin: 0 6px 6px 0;
89
+ margin: 0 var(--dbx-padding-2) var(--dbx-padding-2) 0;
90
90
  }
91
91
  }
92
92
 
@@ -138,7 +138,7 @@ $big-button-height: 46px; // 33% bigger
138
138
 
139
139
  .dbx-button-text-option-button {
140
140
  .dbx-button {
141
- margin-bottom: 6px;
141
+ margin-bottom: var(--dbx-padding-2);
142
142
  }
143
143
 
144
144
  .dbx-base-button .mdc-button__label {
@@ -180,7 +180,7 @@ $big-button-height: 46px; // 33% bigger
180
180
  align-items: flex-start;
181
181
 
182
182
  > * {
183
- margin-bottom: 6px !important;
183
+ margin-bottom: var(--dbx-padding-2) !important;
184
184
  }
185
185
  }
186
186
 
@@ -190,23 +190,30 @@ $big-button-height: 46px; // 33% bigger
190
190
  }
191
191
 
192
192
  // dbx-color interactions
193
+ // `DbxColorDirective` is a pure token provider — it sets `--dbx-bg-color-current` /
194
+ // `--dbx-color-current` and adds the `.dbx-color` marker, but never paints the
195
+ // host itself; the named `.dbx-{color}-bg` classes it applies are token-only too.
196
+ // `<dbx-button>` hosts the directive (via `hostDirectives`) and pushes its
197
+ // resolved color (active echo > `color` input > `buttonStyle.color`) into it —
198
+ // so use the button's `color` input, never `[dbxColor]`, on a `dbx-button`. The
199
+ // standalone `<dbx-progress-spinner-button>` / `<dbx-progress-bar-button>` take
200
+ // `[dbxColor]` directly. The rules below map the host tokens onto the Material
201
+ // button vars per variant on the inner `.mdc-button.dbx-base-button`. Scoped on
202
+ // the host marker so a button inside a `[dbxColor]` section doesn't repaint from
203
+ // inherited tokens — only a directly-colored button host reacts. `:not(.dbx-default)`
204
+ // guard: the host directive always adds the `.dbx-color` marker, so an uncolored
205
+ // button (marked `dbx-default`) keeps native Material styling. `buttonColor` on
206
+ // `DbxProgressButtonConfig` was removed.
193
207
  $color-value: theming.$dbx-bg-color;
194
208
  $contrast-value: theming.$dbx-color;
195
- $disabled-color-value: theming.$dbx-disabled-color;
196
- $disabled-contrast-value: theming.$dbx-disabled-color-contrast;
197
209
 
198
- .mdc-button.dbx-base-button.dbx-color {
199
- // default button
200
- &.dbx-default {
201
- color: var(--mat-button-text-label-text-color, var(--mat-sys-primary));
202
-
203
- &.mat-mdc-button-disabled {
204
- color: var(--mat-button-text-disabled-label-text-color, var(--mat-sys-on-surface));
205
- }
206
- }
207
-
208
- // default button
209
- &:not(.dbx-default) {
210
+ dbx-button.dbx-color:not(.dbx-default),
211
+ dbx-progress-spinner-button.dbx-color:not(.dbx-default),
212
+ dbx-spinner-button.dbx-color:not(.dbx-default),
213
+ dbx-progress-bar-button.dbx-color:not(.dbx-default),
214
+ dbx-bar-button.dbx-color:not(.dbx-default) {
215
+ .mdc-button.dbx-base-button {
216
+ // text/basic buttons
210
217
  background: none;
211
218
  --mat-button-text-label-text-color: #{$color-value};
212
219
  --mat-button-text-ripple-color: color-mix(in srgb, #{$color-value} 12%, transparent);
@@ -216,93 +223,62 @@ $big-button-height: 46px; // 33% bigger
216
223
  .mat-mdc-progress-bar {
217
224
  --mat-progress-bar-active-indicator-color: #{$color-value};
218
225
  }
219
- }
220
-
221
- // raised buttons
222
- &.mat-mdc-raised-button.dbx-default {
223
- color: var(--mat-button-protected-label-text-color, var(--mat-sys-primary));
224
- }
225
226
 
226
- &.mat-mdc-raised-button:not(.dbx-default) {
227
- background: var(--mat-button-protected-container-color);
227
+ // raised buttons
228
+ &.mat-mdc-raised-button {
229
+ background: var(--mat-button-protected-container-color);
228
230
 
229
- --mat-button-protected-container-color: #{$color-value};
230
- --mat-button-protected-label-text-color: #{$contrast-value};
231
- --mat-button-protected-state-layer-color: #{$contrast-value};
232
- --mat-button-protected-ripple-color: color-mix(in srgb, #{$contrast-value} 12%, transparent);
231
+ --mat-button-protected-container-color: #{$color-value};
232
+ --mat-button-protected-label-text-color: #{$contrast-value};
233
+ --mat-button-protected-state-layer-color: #{$contrast-value};
234
+ --mat-button-protected-ripple-color: color-mix(in srgb, #{$contrast-value} 12%, transparent);
233
235
 
234
- &.mat-mdc-button-disabled {
235
- background-color: var(--mat-button-protected-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
236
+ &.mat-mdc-button-disabled {
237
+ background-color: var(--mat-button-protected-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
238
+ }
236
239
  }
237
- }
238
-
239
- // stroked/outlined buttons
240
- &.mat-mdc-outlined-button.dbx-default {
241
- color: var(--mat-button-outlined-label-text-color, var(--mat-sys-primary));
242
- }
243
240
 
244
- &.mat-mdc-outlined-button:not(.dbx-default) {
245
- --mat-button-outlined-container-color: #{$contrast-value};
246
- --mat-button-outlined-label-text-color: #{$color-value};
247
- --mat-button-outlined-state-layer-color: #{$color-value};
248
- --mat-button-outlined-ripple-color: color-mix(in srgb, #{$color-value} 12%, transparent);
241
+ // stroked/outlined buttons
242
+ &.mat-mdc-outlined-button {
243
+ --mat-button-outlined-container-color: #{$contrast-value};
244
+ --mat-button-outlined-label-text-color: #{$color-value};
245
+ --mat-button-outlined-state-layer-color: #{$color-value};
246
+ --mat-button-outlined-ripple-color: color-mix(in srgb, #{$color-value} 12%, transparent);
249
247
 
250
- --mat-progress-spinner-active-indicator-color: #{$color-value};
251
- }
252
-
253
- // flat buttons
254
- &.mat-mdc-unelevated-button.dbx-default {
255
- color: var(--mat-button-filled-label-text-color, var(--mat-sys-primary));
256
- }
257
-
258
- &.mat-mdc-unelevated-button:not(.dbx-default) {
259
- background: var(--mat-button-filled-container-color);
260
-
261
- --mat-button-filled-container-color: #{$color-value};
262
- --mat-button-filled-label-text-color: #{$contrast-value};
263
- --mat-button-filled-state-layer-color: #{$contrast-value};
264
- --mat-button-filled-ripple-color: color-mix(in srgb, #{$contrast-value} 12%, transparent);
265
-
266
- &.mat-mdc-button-disabled {
267
- background-color: var(--mat-button-protected-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
248
+ --mat-progress-spinner-active-indicator-color: #{$color-value};
268
249
  }
269
- }
270
250
 
271
- // icon buttons
272
- &.mat-mdc-icon-button.dbx-default {
273
- --mat-icon-button-icon-color: var(--dbx-button-icon-color, currentColor);
274
- color: var(--mat-icon-button-icon-color);
275
- }
251
+ // flat buttons
252
+ &.mat-mdc-unelevated-button {
253
+ background: var(--mat-button-filled-container-color);
276
254
 
277
- &.mat-mdc-icon-button:not(.dbx-default) {
278
- background: none;
255
+ --mat-button-filled-container-color: #{$color-value};
256
+ --mat-button-filled-label-text-color: #{$contrast-value};
257
+ --mat-button-filled-state-layer-color: #{$contrast-value};
258
+ --mat-button-filled-ripple-color: color-mix(in srgb, #{$contrast-value} 12%, transparent);
279
259
 
280
- --mat-icon-button-icon-color: var(--dbx-button-icon-color, #{$color-value});
281
- --mat-icon-button-ripple-color: color-mix(in srgb, #{$color-value} 12%, transparent);
282
- --mat-icon-button-state-layer-color: #{$color-value};
283
- }
284
-
285
- // tonal buttons
286
- &.mat-mdc-tonal-button.dbx-default {
287
- color: var(--mat-button-tonal-label-text-color, var(--mat-sys-primary));
288
- background: rgb(from var(--mat-button-tonal-label-text-color) r g b / calc(alpha * 0.06));
289
- }
260
+ &.mat-mdc-button-disabled {
261
+ background-color: var(--mat-button-protected-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent));
262
+ }
263
+ }
290
264
 
291
- &.mat-mdc-tonal-button:not(.dbx-default) {
292
- background: rgb(from #{$color-value} r g b / calc(alpha * 0.12));
265
+ // icon buttons
266
+ &.mat-mdc-icon-button {
267
+ background: none;
293
268
 
294
- --mat-button-tonal-container-color: color-mix(in srgb, #{$color-value} 12%, transparent);
295
- --mat-button-tonal-label-text-color: #{$contrast-value};
296
- --mat-button-tonal-ripple-color: color-mix(in srgb, #{$contrast-value} 12%, transparent);
297
- --mat-button-tonal-state-layer-color: #{$contrast-value};
298
- }
269
+ --mat-icon-button-icon-color: var(--dbx-button-icon-color, #{$color-value});
270
+ --mat-icon-button-ripple-color: color-mix(in srgb, #{$color-value} 12%, transparent);
271
+ --mat-icon-button-state-layer-color: #{$color-value};
272
+ }
299
273
 
300
- &.dbx-default.mat-mdc-button-disabled {
301
- &.mat-mdc-raised-button,
302
- &.mat-mdc-unelevated-button,
303
- &.mat-mdc-outlined-button,
274
+ // tonal buttons
304
275
  &.mat-mdc-tonal-button {
305
- color: var(--mat-button-text-disabled-label-text-color, var(--mat-sys-on-surface));
276
+ background: rgb(from #{$color-value} r g b / calc(alpha * 0.12));
277
+
278
+ --mat-button-tonal-container-color: color-mix(in srgb, #{$color-value} 12%, transparent);
279
+ --mat-button-tonal-label-text-color: #{$contrast-value};
280
+ --mat-button-tonal-ripple-color: color-mix(in srgb, #{$contrast-value} 12%, transparent);
281
+ --mat-button-tonal-state-layer-color: #{$contrast-value};
306
282
  }
307
283
  }
308
284
  }
@@ -7,7 +7,7 @@
7
7
  display: flex;
8
8
  align-items: center;
9
9
  gap: 8px;
10
- margin-top: 12px;
10
+ margin-top: var(--dbx-padding-3);
11
11
  }
12
12
 
13
13
  .dbx-pdf-merge-editor-size-warning,
@@ -17,7 +17,7 @@
17
17
  align-items: center;
18
18
  gap: 8px;
19
19
  padding: 8px 12px;
20
- margin-top: 12px;
20
+ margin-top: var(--dbx-padding-3);
21
21
  border-radius: var(--mat-sys-corner-small);
22
22
  font: var(--mat-sys-body-medium);
23
23
  }
@@ -46,7 +46,7 @@
46
46
  }
47
47
 
48
48
  .dbx-pdf-merge-editor-file-upload-header:not(:empty) {
49
- margin-bottom: 6px;
49
+ margin-bottom: var(--dbx-padding-2);
50
50
  }
51
51
 
52
52
  .dbx-pdf-merge-editor-file-upload-label {
@@ -57,7 +57,7 @@
57
57
  display: flex;
58
58
  flex-direction: column;
59
59
  gap: 4px;
60
- margin-top: 6px;
60
+ margin-top: var(--dbx-padding-2);
61
61
  }
62
62
 
63
63
  .dbx-pdf-preview-frame {
@@ -120,7 +120,7 @@
120
120
  border-radius: var(--mat-sys-corner-extra-small);
121
121
  background-color: var(--mat-sys-secondary-container);
122
122
  color: var(--mat-sys-on-secondary-container);
123
- font-size: 11px;
123
+ font-size: var(--mat-sys-label-small-size);
124
124
  }
125
125
 
126
126
  .dbx-pdf-merge-entry-encrypted-chip {
@@ -7,7 +7,7 @@
7
7
  @mixin core() {
8
8
  .dbx-table-view {
9
9
  .dbx-table-view-table-wrapper {
10
- max-height: 600px;
10
+ max-height: var(--dbx-table-view-max-height, 600px);
11
11
  overflow: auto;
12
12
  }
13
13
 
@@ -45,7 +45,7 @@
45
45
 
46
46
  // MARK: Full summary row
47
47
  .dbx-table-view-full-summary-row-container > .mat-mdc-row {
48
- border-top-color: var(--mat-table-row-item-outline-color, var(--mat-app-outline, rgba(0, 0, 0, 0.12)));
48
+ border-top-color: var(--mat-table-row-item-outline-color, var(--mat-sys-outline-variant));
49
49
  border-top-width: var(--mat-table-row-item-outline-width, 1px);
50
50
  border-top-style: solid;
51
51
  }
@@ -5,7 +5,6 @@ $dbx-detach-controls-height: 33px;
5
5
  $dbx-detach-content-padding: 8px;
6
6
  $dbx-detach-content-padding-top: 2px;
7
7
  $dbx-detach-controls-vertical-padding: 4px;
8
- $dbx-detach-border-radius: 4px;
9
8
 
10
9
  // MARK: Mixin
11
10
  @mixin core() {
@@ -29,7 +28,7 @@ $dbx-detach-border-radius: 4px;
29
28
  display: flex;
30
29
  align-items: center;
31
30
  padding: $dbx-detach-controls-vertical-padding $dbx-detach-content-padding;
32
- border-bottom: 1px solid rgba(0, 0, 0, 0.15);
31
+ border-bottom: 1px solid var(--mat-sys-outline-variant);
33
32
  box-sizing: border-box;
34
33
  color: var(--mat-sys-on-surface);
35
34
  background: var(--mat-sys-surface);
@@ -52,6 +51,27 @@ $dbx-detach-border-radius: 4px;
52
51
  .dbx-detach-overlay {
53
52
  height: 100%;
54
53
  overflow: hidden;
54
+
55
+ // The moved component host element (an arbitrary tag that defaults to inline) needs to fill
56
+ // the fixed-height overlay pane so its content chain can establish a flex column that scrolls.
57
+ > * {
58
+ display: block;
59
+ height: 100%;
60
+ }
61
+
62
+ // Inside the fixed-height overlay (vs. the viewport-based in-page mode), the content fills the
63
+ // pane and the container flexes to scroll within it rather than against the viewport height.
64
+ .dbx-detach-content {
65
+ height: 100%;
66
+ display: flex;
67
+ flex-direction: column;
68
+ }
69
+
70
+ .dbx-detach-content-container {
71
+ flex: 1 1 auto;
72
+ min-height: 0;
73
+ max-height: none;
74
+ }
55
75
  }
56
76
 
57
77
  .dbx-detach-overlay-host {
@@ -2,10 +2,6 @@
2
2
 
3
3
  // MARK: Variables
4
4
  $max-dialog-width: 90vw;
5
- $mat-dialog-close-icon-size: 48px;
6
- $mat-dialog-close-icon-half-size: $mat-dialog-close-icon-size / 2;
7
- $mat-dialog-container-padding: 18px;
8
- $mat-dialog-container-close-button-padding: $mat-dialog-container-padding;
9
5
  $dbx-dialog-content-close-edge-padding: 4px;
10
6
  $dbx-dialog-content-close-top-offset: $dbx-dialog-content-close-edge-padding;
11
7
  $dbx-dialog-content-close-right-offset: $dbx-dialog-content-close-edge-padding;
@@ -23,7 +19,7 @@ $dbx-dialog-content-close-right-offset: $dbx-dialog-content-close-edge-padding;
23
19
  /// @scope component-class
24
20
  .dbx-dialog-content {
25
21
  display: block;
26
- padding: $mat-dialog-container-padding;
22
+ padding: var(--dbx-dialog-content-padding, var(--dbx-padding-4));
27
23
  }
28
24
 
29
25
  .dbx-dialog-content-with-header {
@@ -32,7 +28,7 @@ $dbx-dialog-content-close-right-offset: $dbx-dialog-content-close-edge-padding;
32
28
  $dbx-dialog-content-header-padding: 18px;
33
29
 
34
30
  .dbx-dialog-content-close.dbx-dialog-content-close-padding {
35
- padding-bottom: 12px;
31
+ padding-bottom: var(--dbx-padding-3);
36
32
  }
37
33
 
38
34
  .dbx-dialog-content-header {
@@ -79,7 +75,7 @@ $dbx-dialog-content-close-right-offset: $dbx-dialog-content-close-edge-padding;
79
75
  }
80
76
 
81
77
  .dbx-dialog-content-close.dbx-dialog-content-close-padding {
82
- padding-bottom: $mat-dialog-container-close-button-padding;
78
+ padding-bottom: var(--dbx-dialog-content-padding, var(--dbx-padding-4));
83
79
 
84
80
  > .dbx-dialog-content-close-button {
85
81
  top: $dbx-dialog-content-close-edge-padding;
@@ -98,7 +94,7 @@ $dbx-dialog-content-close-right-offset: $dbx-dialog-content-close-edge-padding;
98
94
  }
99
95
 
100
96
  .dbx-dialog-content-100.dbx-dialog-content-100-padded-closed.dbx-dialog-content {
101
- height: calc(100% - #{$mat-dialog-container-close-button-padding + ($mat-dialog-container-padding * 2)});
97
+ height: calc(100% - (var(--dbx-dialog-content-padding, var(--dbx-padding-4)) * 3));
102
98
  }
103
99
  }
104
100
 
@@ -7,7 +7,6 @@ $dbx-popup-content-padding-top: 2px;
7
7
 
8
8
  $dbx-popup-container-margin: 16px;
9
9
  $dbx-popup-controls-vertical-padding: 4px;
10
- $dbx-popup-border-radius: 4px;
11
10
 
12
11
  // MARK: Mixin
13
12
  @mixin core() {
@@ -36,7 +35,7 @@ $dbx-popup-border-radius: 4px;
36
35
  display: flex;
37
36
  align-items: center;
38
37
  padding: $dbx-popup-controls-vertical-padding $dbx-popup-content-padding;
39
- border-bottom: 1px solid rgba(0, 0, 0, 0.15);
38
+ border-bottom: 1px solid var(--mat-sys-outline-variant);
40
39
  box-sizing: border-box;
41
40
  }
42
41
 
@@ -13,13 +13,18 @@ $dbx-popup-controls-height: 33px;
13
13
  }
14
14
 
15
15
  /// @dbx-utility prompt-box
16
- /// @intent centered prompt panel — auto-margined max-width box with a 40px inset (compose with `.elevate` to lift it with elevation 2)
16
+ /// @intent centered prompt panel — auto-margined max-width box with a 40px inset (override via `--dbx-prompt-box-padding`) and a "medium" corner radius (override via `--dbx-prompt-box-border-radius`); compose with `.elevate` to lift it with elevation 2
17
17
  /// @role layout
18
18
  /// @see-also content-box, content-elevate
19
19
  .dbx-prompt-box {
20
20
  margin: auto;
21
- padding: 40px;
21
+ padding: var(--dbx-prompt-box-padding, 40px);
22
22
  max-width: $box-max-width;
23
+ // Visible via the `.elevate` shadow (default) or any app-supplied background;
24
+ // the box itself intentionally has no background. Deliberately NOT chained
25
+ // through `--mat-dialog-container-shape` — a prompt box is a page surface,
26
+ // not a dialog.
27
+ border-radius: var(--dbx-prompt-box-border-radius, var(--mat-sys-corner-medium, 12px));
23
28
 
24
29
  &.elevate {
25
30
  @include theming.elevation(2);
@@ -1,4 +1,5 @@
1
1
  @use '../../style/theming';
2
+ @use '../style/style';
2
3
 
3
4
  // MARK: Variables
4
5
  $icon-to-avatar-size-ratio: 0.65;
@@ -109,6 +110,13 @@ $initials-to-avatar-size-ratio: 0.4;
109
110
  user-select: none;
110
111
  }
111
112
 
113
+ // `<dbx-avatar-view>` applies a curated `[dbxColor]` config to the initials
114
+ // surface; paint its background/text from those tokens. The `:not(.dbx-default)`
115
+ // guard keeps a blank-name (uncolored) avatar from painting.
116
+ .dbx-avatar-view-initials.dbx-color:not(.dbx-default) {
117
+ @include style.dbx-color-surface();
118
+ }
119
+
112
120
  /// @dbx-utility avatar-view-circle
113
121
  /// @intent circle modifier for `.dbx-avatar-view` — `border-radius: 50%`
114
122
  /// @role layout
@@ -1,4 +1,5 @@
1
1
  @use '../../style/theming';
2
+ @use '../style/style';
2
3
 
3
4
  // MARK: Variables
4
5
  $pagebar-height-var: theming.$page-navbar-height-var;
@@ -36,6 +37,33 @@ $bar-fixed-height: 40px;
36
37
  color: var(--mat-sys-on-surface);
37
38
  }
38
39
 
40
+ // Colored bar surface. `[dbxColor]` on the host provides the tokens + the
41
+ // `.dbx-color` marker; the bar paints from them here, scoped on the marker so
42
+ // a bar nested inside a `[dbxColor]` section doesn't repaint from inherited
43
+ // tokens. Mirrors the `mat-card.dbx-color` model.
44
+ // `:not(.dbx-default)` guard: `[dbxColor]` always adds the `.dbx-color` marker,
45
+ // and a nullish color resolves to the `dbx-default` token class (no
46
+ // `--dbx-bg-color-current`), so the guard keeps an uncolored bar from painting.
47
+ .dbx-bar.dbx-color:not(.dbx-default) {
48
+ @include style.dbx-color-surface();
49
+
50
+ &.dbx-color-tonal {
51
+ color: var(#{theming.$dbx-bg-color-var});
52
+ }
53
+ }
54
+
55
+ // `<dbx-bar-header>` forwards a host-level `[dbxColor]` down to its inner
56
+ // `<dbx-bar>`: the `.dbx-color` marker + tokens land on the header host (tokens
57
+ // inherit), so paint the inner bar here. Scoped on the header marker so only a
58
+ // directly-colored header paints.
59
+ .dbx-bar-header.dbx-color:not(.dbx-default) .dbx-bar {
60
+ @include style.dbx-color-surface();
61
+ }
62
+
63
+ .dbx-bar-header.dbx-color.dbx-color-tonal:not(.dbx-default) .dbx-bar {
64
+ color: var(#{theming.$dbx-bg-color-var});
65
+ }
66
+
39
67
  /// @dbx-utility bar-background
40
68
  /// @intent paint a `.dbx-bar` with the `--mat-sys-surface-container` background
41
69
  /// @role layout
@@ -55,9 +83,20 @@ $bar-fixed-height: 40px;
55
83
  }
56
84
 
57
85
  // MARK: Bar Colors
58
- // Color classes applied by DbxPagebarComponent based on the color input.
86
+ // Colored pagebar surface. `[dbxColor]` on the `<dbx-pagebar>` /
87
+ // `<dbx-sidenav-pagebar>` host provides the tokens + the `.dbx-color` marker
88
+ // (tokens inherit); map the inner `mat-toolbar`'s Material color tokens to them.
89
+ // Scoped on the host marker so only a directly-colored pagebar paints.
90
+ dbx-pagebar.dbx-color mat-toolbar,
91
+ dbx-sidenav-pagebar.dbx-color mat-toolbar {
92
+ --mat-toolbar-container-background-color: color-mix(in srgb, var(#{theming.$dbx-bg-color-var}) var(#{theming.$dbx-bg-tone-var}, 100%), transparent);
93
+ --mat-toolbar-container-text-color: var(#{theming.$dbx-color-var});
94
+ }
95
+
96
+ // DEPRECATED back-compat: the `.dbx-bar-{color}` classes were previously applied
97
+ // by `DbxPagebarComponent`'s `color` input (now removed in favor of `[dbxColor]`).
98
+ // Kept for downstream templates that still apply them directly.
59
99
  // Uses Material toolbar CSS tokens for background and text color.
60
- // Background uses color-mix with surface-container for consistent dark-mode contrast.
61
100
  /// @dbx-utility bar-primary
62
101
  /// @intent paint a `mat-toolbar`/`.dbx-pagebar` with the `--dbx-primary-color` palette via Material's toolbar tokens
63
102
  /// @role layout