@dereekb/dbx-web 13.10.7 → 13.10.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.
Files changed (33) hide show
  1. package/docs/README.md +10 -0
  2. package/eslint/index.cjs.js +8 -1
  3. package/eslint/index.esm.js +8 -1
  4. package/fesm2022/dereekb-dbx-web-calendar.mjs +9 -9
  5. package/fesm2022/dereekb-dbx-web-docs.mjs +146 -0
  6. package/fesm2022/dereekb-dbx-web-docs.mjs.map +1 -0
  7. package/fesm2022/dereekb-dbx-web-mapbox.mjs +52 -52
  8. package/fesm2022/dereekb-dbx-web-table.mjs +77 -77
  9. package/fesm2022/dereekb-dbx-web.mjs +1438 -914
  10. package/fesm2022/dereekb-dbx-web.mjs.map +1 -1
  11. package/lib/action/snackbar/_snackbar.scss +5 -0
  12. package/lib/button/_button.scss +27 -0
  13. package/lib/error/_error.scss +5 -0
  14. package/lib/extension/pdf/_pdf.scss +21 -59
  15. package/lib/interaction/dialog/_dialog.scss +5 -0
  16. package/lib/interaction/popover/_popover.scss +5 -0
  17. package/lib/interaction/popup/_popup.scss +5 -0
  18. package/lib/interaction/prompt/_prompt.scss +4 -0
  19. package/lib/interaction/upload/_upload.scss +15 -2
  20. package/lib/layout/avatar/_avatar.scss +26 -0
  21. package/lib/layout/bar/_bar.scss +27 -0
  22. package/lib/layout/block/_block.scss +4 -0
  23. package/lib/layout/column/_column.scss +3 -0
  24. package/lib/layout/content/_content.scss +29 -0
  25. package/lib/layout/flex/_flex.scss +37 -0
  26. package/lib/layout/list/_list.scss +99 -0
  27. package/lib/layout/section/_section.scss +7 -0
  28. package/lib/layout/style/_style.scss +49 -0
  29. package/lib/layout/text/_text.scss +298 -14
  30. package/lib/loading/_loading.scss +6 -0
  31. package/package.json +27 -14
  32. package/types/dereekb-dbx-web-docs.d.ts +73 -0
  33. package/types/dereekb-dbx-web.d.ts +521 -147
@@ -4,6 +4,11 @@
4
4
 
5
5
  // MARK: Mixin
6
6
  @mixin core() {
7
+ /// @dbx-utility action-snackbar
8
+ /// @intent action-snackbar layout — flex row used by the `<dbx-action-snackbar>` host so the message and trailing button sit on one line
9
+ /// @role layout
10
+ /// @component DbxActionSnackbarComponent
11
+ /// @scope component-class
7
12
  .dbx-action-snackbar {
8
13
  display: flex;
9
14
  align-items: center;
@@ -10,6 +10,10 @@ $big-button-height: 46px; // 33% bigger
10
10
  // MARK: Mixin
11
11
  @mixin core() {
12
12
  // increases the height of the mat-mdc-button
13
+ /// @dbx-utility button-big
14
+ /// @intent enlarge the inner `mat-mdc-button` height to 46px (33% taller than default)
15
+ /// @role layout
16
+ /// @see-also button-wide
13
17
  .dbx-button-big,
14
18
  .dbx-button-large {
15
19
  .mdc-button.mat-mdc-button {
@@ -19,6 +23,9 @@ $big-button-height: 46px; // 33% bigger
19
23
 
20
24
  // Neutral hover/pressed/focus state layer instead of the primary-colored default.
21
25
  // Apply to buttons with custom background colors where the primary tint looks wrong.
26
+ /// @dbx-utility button-neutral-interaction-color
27
+ /// @intent neutralize Material's hover/pressed/focus/ripple state layer to `--mat-sys-on-surface` — use on buttons with a custom background where the primary-tinted state-layer would clash
28
+ /// @role state
22
29
  .dbx-button-neutral-interaction-color {
23
30
  .mdc-button,
24
31
  &.mdc-button {
@@ -41,6 +48,10 @@ $big-button-height: 46px; // 33% bigger
41
48
  }
42
49
  }
43
50
 
51
+ /// @dbx-utility button-wide
52
+ /// @intent stretch the inner `.dbx-button` to a 120px minimum width (still capped by parent)
53
+ /// @role layout
54
+ /// @see-also button-grow
44
55
  .dbx-button-wide {
45
56
  .dbx-button {
46
57
  min-width: 120px;
@@ -48,6 +59,10 @@ $big-button-height: 46px; // 33% bigger
48
59
  }
49
60
  }
50
61
 
62
+ /// @dbx-utility button-wrap-group
63
+ /// @intent group of buttons that wrap onto multiple rows — adds 6px right + bottom spacing between `<dbx-button>` / `<dbx-anchor>` / `<button>` / `<dbx-icon-button>` siblings
64
+ /// @role layout
65
+ /// @see-also button-column, dbx-flex-bar
51
66
  .dbx-button-wrap-group {
52
67
  > dbx-button,
53
68
  > dbx-anchor {
@@ -84,6 +99,10 @@ $big-button-height: 46px; // 33% bigger
84
99
  }
85
100
  }
86
101
 
102
+ /// @dbx-utility grow-button
103
+ /// @intent stretch the `<dbx-button>` (and its inner `.dbx-button`) to the full width of its parent
104
+ /// @role layout
105
+ /// @see-also button-wide, dbx-w100
87
106
  .dbx-grow-button {
88
107
  width: 100%;
89
108
 
@@ -92,6 +111,10 @@ $big-button-height: 46px; // 33% bigger
92
111
  }
93
112
  }
94
113
 
114
+ /// @dbx-utility button-spacer
115
+ /// @intent right-padding spacer between buttons or beside a button — 6px right padding (use `<dbx-button-spacer>` to insert one inline)
116
+ /// @role spacing
117
+ /// @see-also chip-spacer, icon-spacer
95
118
  .dbx-button-spacer {
96
119
  padding-right: $button-spacer-width;
97
120
  }
@@ -100,6 +123,10 @@ $big-button-height: 46px; // 33% bigger
100
123
  margin-right: $button-spacer-width;
101
124
  }
102
125
 
126
+ /// @dbx-utility button-column
127
+ /// @intent vertical button stack — flex column with 6px bottom spacing between children, left-aligned by default (compose with `.dbx-button-column-center` to center)
128
+ /// @role flex
129
+ /// @see-also button-wrap-group, dbx-flex-column
103
130
  .dbx-button-column {
104
131
  display: flex;
105
132
  flex-direction: column;
@@ -6,6 +6,11 @@ $error-message-button-margin: 12px;
6
6
 
7
7
  // MARK: Mixin
8
8
  @mixin core() {
9
+ /// @dbx-utility error
10
+ /// @intent error row — `<dbx-error>` body that lays out an icon + message in a centered flex row with an 8px top inset
11
+ /// @role layout
12
+ /// @component DbxErrorComponent
13
+ /// @scope component-class
9
14
  .dbx-error {
10
15
  padding-top: $error-padding;
11
16
  display: flex;
@@ -3,21 +3,6 @@
3
3
 
4
4
  // MARK: Mixin
5
5
  @mixin core() {
6
- .dbx-pdf-merge-editor {
7
- display: block;
8
- }
9
-
10
- .dbx-pdf-merge-editor-upload {
11
- display: block;
12
- margin-bottom: 12px;
13
- }
14
-
15
- .dbx-pdf-merge-editor-error {
16
- margin: 8px 0;
17
- padding: 8px 12px;
18
- border-radius: var(--mat-sys-corner-small);
19
- }
20
-
21
6
  .dbx-pdf-merge-editor-actions {
22
7
  display: flex;
23
8
  align-items: center;
@@ -25,33 +10,34 @@
25
10
  margin-top: 12px;
26
11
  }
27
12
 
28
- .dbx-pdf-merge-editor-spacer {
29
- flex: 1;
13
+ // Slot upload
14
+ .dbx-pdf-merge-editor-file-upload-header {
15
+ display: flex;
16
+ align-items: center;
17
+ gap: 8px;
18
+ min-height: 0;
19
+ }
20
+
21
+ .dbx-pdf-merge-editor-file-upload-header:not(:empty) {
22
+ margin-bottom: 6px;
30
23
  }
31
24
 
32
- .dbx-pdf-merge-editor-count {
33
- margin-right: 8px;
25
+ .dbx-pdf-merge-editor-file-upload-label {
26
+ font-weight: 500;
34
27
  }
35
28
 
36
- .dbx-pdf-preview {
37
- display: block;
38
- width: 100%;
39
- height: 100%;
29
+ .dbx-pdf-merge-editor-file-upload-entries {
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: 4px;
33
+ margin-top: 6px;
40
34
  }
41
35
 
42
36
  .dbx-pdf-preview-frame {
43
- display: block;
44
- width: 100%;
45
- height: 100%;
46
37
  min-height: 480px;
47
38
  }
48
39
 
49
40
  // List
50
- .dbx-pdf-merge-list-empty {
51
- padding: 16px;
52
- text-align: center;
53
- }
54
-
55
41
  .dbx-pdf-merge-list-items {
56
42
  display: flex;
57
43
  flex-direction: column;
@@ -59,10 +45,6 @@
59
45
  }
60
46
 
61
47
  // Entry
62
- .dbx-pdf-merge-entry {
63
- display: block;
64
- }
65
-
66
48
  .dbx-pdf-merge-entry-row {
67
49
  display: flex;
68
50
  align-items: center;
@@ -95,38 +77,16 @@
95
77
  cursor: grabbing;
96
78
  }
97
79
 
98
- .dbx-pdf-merge-entry-icon {
80
+ .dbx-pdf-merge-entry-icon,
81
+ .dbx-pdf-merge-entry-remove {
99
82
  flex-shrink: 0;
100
83
  }
101
84
 
102
- .dbx-pdf-merge-entry-icon-error {
103
- color: var(--mat-sys-error);
104
- }
105
-
106
- .dbx-pdf-merge-entry-info {
107
- flex: 1;
108
- min-width: 0;
109
- }
110
-
111
- .dbx-pdf-merge-entry-name {
112
- overflow: hidden;
113
- white-space: nowrap;
114
- text-overflow: ellipsis;
115
- }
116
-
117
85
  .dbx-pdf-merge-entry-meta {
118
86
  display: flex;
119
87
  gap: 8px;
120
88
  }
121
89
 
122
- .dbx-pdf-merge-entry--error .dbx-pdf-merge-entry-status {
123
- color: var(--mat-sys-error);
124
- }
125
-
126
- .dbx-pdf-merge-entry-remove {
127
- flex-shrink: 0;
128
- }
129
-
130
90
  // CDK animations
131
91
  .cdk-drop-list-dragging .dbx-pdf-merge-entry-row:not(.cdk-drag-placeholder) {
132
92
  transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
@@ -134,4 +94,6 @@
134
94
  }
135
95
 
136
96
  @mixin theme($theme-config) {
97
+ // No theme-driven styles yet; mixin is kept so the extension theme barrel can
98
+ // include @include pdf.theme($theme-config); without conditional checks.
137
99
  }
@@ -16,6 +16,11 @@ $dbx-dialog-content-close-right-offset: $dbx-dialog-content-close-edge-padding;
16
16
  color: var(--mat-sys-on-surface);
17
17
  }
18
18
 
19
+ /// @dbx-utility dialog-content
20
+ /// @intent dialog body — `<dbx-dialog-content>` host that wraps mat-dialog content with the standard 18px inset; compose with `.dbx-dialog-content-with-header` to reserve room for a sticky header, `.dbx-dialog-content-100` to fill the dialog height, or `.dbx-p0` to strip the inset
21
+ /// @role layout
22
+ /// @component DbxDialogContentComponent
23
+ /// @scope component-class
19
24
  .dbx-dialog-content {
20
25
  display: block;
21
26
  padding: $mat-dialog-container-padding;
@@ -7,6 +7,11 @@ $dbx-popover-header-height: 48px;
7
7
 
8
8
  // MARK: Mixin
9
9
  @mixin core() {
10
+ /// @dbx-utility popover-container
11
+ /// @intent popover surface — `<dbx-popover>` host that paints the `--mat-sys-surface` background with the `--mat-sys-corner-medium` border-radius
12
+ /// @role layout
13
+ /// @component DbxPopoverComponent
14
+ /// @scope component-class
10
15
  .dbx-popover-container {
11
16
  background: var(--mat-sys-surface);
12
17
  border-radius: var(--mat-sys-corner-medium, 12px);
@@ -11,6 +11,11 @@ $dbx-popup-border-radius: 4px;
11
11
 
12
12
  // MARK: Mixin
13
13
  @mixin core() {
14
+ /// @dbx-utility popup-content
15
+ /// @intent popup body — `<dbx-popup-content>` host that caps the inner content at `app-height` and clips overflow; pair with `.dbx-popup-content-container` for the inner scroll region and `.dbx-popup-controls` for the header strip
16
+ /// @role layout
17
+ /// @component DbxPopupContentComponent
18
+ /// @scope component-class
14
19
  .dbx-popup-content {
15
20
  box-sizing: border-box;
16
21
  overflow: hidden;
@@ -12,6 +12,10 @@ $dbx-popup-controls-height: 33px;
12
12
  }
13
13
  }
14
14
 
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)
17
+ /// @role layout
18
+ /// @see-also content-box, content-elevate
15
19
  .dbx-prompt-box {
16
20
  margin: auto;
17
21
  padding: 40px;
@@ -2,6 +2,10 @@
2
2
 
3
3
  // Sections
4
4
  @mixin core() {
5
+ .dbx-file-upload-area {
6
+ position: relative;
7
+ }
8
+
5
9
  .dbx-file-upload-area-content {
6
10
  display: flex;
7
11
  flex-direction: column;
@@ -18,10 +22,18 @@
18
22
  align-items: center;
19
23
  }
20
24
 
25
+ /// @dbx-utility file-upload-area-rounded
26
+ /// @intent circle modifier for `.dbx-file-upload-area` — `border-radius: 50%`
27
+ /// @role layout
28
+ /// @see-also file-upload-area-square
21
29
  .dbx-file-upload-area-rounded {
22
30
  border-radius: 50%;
23
31
  }
24
32
 
33
+ /// @dbx-utility file-upload-area-square
34
+ /// @intent rounded-square modifier for `.dbx-file-upload-area` — uses `--mat-sys-corner-medium` (override via `--dbx-file-upload-square-container-shape`)
35
+ /// @role layout
36
+ /// @see-also file-upload-area-rounded
25
37
  .dbx-file-upload-area-square {
26
38
  border-radius: var(--dbx-file-upload-square-container-shape, var(--mat-sys-corner-medium));
27
39
  }
@@ -31,12 +43,13 @@
31
43
  }
32
44
 
33
45
  .dbx-file-upload-area-content-hint {
34
- position: relative;
35
- top: -24px;
46
+ position: absolute;
47
+ bottom: 8px;
36
48
  left: 0;
37
49
  right: 0;
38
50
  text-align: center;
39
51
  user-select: none;
52
+ pointer-events: none;
40
53
  }
41
54
 
42
55
  .dbx-file-upload-area-content {
@@ -5,6 +5,12 @@ $icon-to-avatar-size-ratio: 0.65;
5
5
 
6
6
  // MARK: Mixin
7
7
  @mixin core() {
8
+ /// @dbx-utility avatar-view
9
+ /// @intent fixed-size avatar surface — `<dbx-avatar-view>` body that shows a square 64px avatar (configurable via `--dbx-avatar-size`) and scales the inner `mat-icon` to 65% of that size
10
+ /// @role layout
11
+ /// @component DbxAvatarViewComponent
12
+ /// @scope component-class
13
+ /// @see-also avatar-small, avatar-large, avatar-view-circle, avatar-view-square
8
14
  .dbx-avatar-view {
9
15
  position: relative;
10
16
  display: inline-flex;
@@ -25,6 +31,11 @@ $icon-to-avatar-size-ratio: 0.65;
25
31
  display: none;
26
32
  }
27
33
 
34
+ /// @dbx-utility avatar-small
35
+ /// @intent small avatar wrapper — overrides the inner `.dbx-avatar-view` size to 32px (configurable via `--dbx-avatar-small-size`)
36
+ /// @role layout
37
+ /// @parent avatar-view
38
+ /// @see-also avatar-view, avatar-large
28
39
  .dbx-avatar-small .dbx-avatar-view {
29
40
  width: var(#{theming.$dbx-avatar-small-size-var}, 32px);
30
41
  height: var(#{theming.$dbx-avatar-small-size-var}, 32px);
@@ -36,6 +47,11 @@ $icon-to-avatar-size-ratio: 0.65;
36
47
  }
37
48
  }
38
49
 
50
+ /// @dbx-utility avatar-large
51
+ /// @intent large avatar wrapper — overrides the inner `.dbx-avatar-view` size to 128px (configurable via `--dbx-avatar-large-size`)
52
+ /// @role layout
53
+ /// @parent avatar-view
54
+ /// @see-also avatar-view, avatar-small
39
55
  .dbx-avatar-large .dbx-avatar-view {
40
56
  width: var(#{theming.$dbx-avatar-large-size-var}, 128px);
41
57
  height: var(#{theming.$dbx-avatar-large-size-var}, 128px);
@@ -62,10 +78,20 @@ $icon-to-avatar-size-ratio: 0.65;
62
78
  height: 100%;
63
79
  }
64
80
 
81
+ /// @dbx-utility avatar-view-circle
82
+ /// @intent circle modifier for `.dbx-avatar-view` — `border-radius: 50%`
83
+ /// @role layout
84
+ /// @parent avatar-view
85
+ /// @see-also avatar-view, avatar-view-square
65
86
  .dbx-avatar-view-circle {
66
87
  border-radius: 50%;
67
88
  }
68
89
 
90
+ /// @dbx-utility avatar-view-square
91
+ /// @intent rounded-square modifier for `.dbx-avatar-view` — uses `--mat-sys-corner-medium` (override via `--dbx-avatar-square-container-shape`)
92
+ /// @role layout
93
+ /// @parent avatar-view
94
+ /// @see-also avatar-view, avatar-view-circle
69
95
  .dbx-avatar-view-square {
70
96
  border-radius: var(--dbx-avatar-square-container-shape, var(--mat-sys-corner-medium));
71
97
  }
@@ -19,6 +19,10 @@ $bar-fixed-height: 40px;
19
19
  max-height: $content-navbar-height;
20
20
  }
21
21
 
22
+ /// @dbx-utility bar
23
+ /// @intent compact horizontal bar — centered flex row with body-small typography (used for status/info strips)
24
+ /// @role layout
25
+ /// @see-also dbx-bar-background, dbx-bar-fixed-height, dbx-flex-bar
22
26
  .dbx-bar {
23
27
  box-sizing: border-box;
24
28
  padding: $bar-vertical-padding;
@@ -32,11 +36,19 @@ $bar-fixed-height: 40px;
32
36
  color: var(--mat-sys-on-surface);
33
37
  }
34
38
 
39
+ /// @dbx-utility bar-background
40
+ /// @intent paint a `.dbx-bar` with the `--mat-sys-surface-container` background
41
+ /// @role layout
42
+ /// @see-also dbx-bar
35
43
  .dbx-bar-background {
36
44
  background: var(--mat-sys-surface-container);
37
45
  color: var(--mat-sys-on-surface);
38
46
  }
39
47
 
48
+ /// @dbx-utility bar-fixed-height
49
+ /// @intent pin a `.dbx-bar` to a fixed 40px height with overflow clipped
50
+ /// @role layout
51
+ /// @see-also dbx-bar
40
52
  .dbx-bar-fixed-height {
41
53
  height: $bar-fixed-height;
42
54
  overflow: hidden;
@@ -46,21 +58,36 @@ $bar-fixed-height: 40px;
46
58
  // Color classes applied by DbxPagebarComponent based on the color input.
47
59
  // Uses Material toolbar CSS tokens for background and text color.
48
60
  // Background uses color-mix with surface-container for consistent dark-mode contrast.
61
+ /// @dbx-utility bar-primary
62
+ /// @intent paint a `mat-toolbar`/`.dbx-pagebar` with the `--dbx-primary-color` palette via Material's toolbar tokens
63
+ /// @role layout
64
+ /// @see-also dbx-bar-accent, dbx-bar-warn
49
65
  .dbx-bar-primary {
50
66
  --mat-toolbar-container-background-color: var(--dbx-primary-color);
51
67
  --mat-toolbar-container-text-color: var(--dbx-primary-color-contrast);
52
68
  }
53
69
 
70
+ /// @dbx-utility bar-accent
71
+ /// @intent paint a `mat-toolbar`/`.dbx-pagebar` with the `--dbx-accent-color` palette via Material's toolbar tokens
72
+ /// @role layout
73
+ /// @see-also dbx-bar-primary, dbx-bar-warn
54
74
  .dbx-bar-accent {
55
75
  --mat-toolbar-container-background-color: var(--dbx-accent-color);
56
76
  --mat-toolbar-container-text-color: var(--dbx-accent-color-contrast);
57
77
  }
58
78
 
79
+ /// @dbx-utility bar-warn
80
+ /// @intent paint a `mat-toolbar`/`.dbx-pagebar` with the `--dbx-warn-color` palette via Material's toolbar tokens
81
+ /// @role layout
82
+ /// @see-also dbx-bar-primary, dbx-bar-accent
59
83
  .dbx-bar-warn {
60
84
  --mat-toolbar-container-background-color: var(--dbx-warn-color);
61
85
  --mat-toolbar-container-text-color: var(--dbx-warn-color-contrast);
62
86
  }
63
87
 
88
+ /// @dbx-utility pagebar-hide
89
+ /// @intent hide the direct-child `.dbx-pagebar` and reset the `--dbx-pagebar-height` layout token to `0px` so child sidenav heights recalculate (nested sidenav pagebars are restored)
90
+ /// @role state
64
91
  .dbx-pagebar-hide {
65
92
  // Reset pagebar height for layout calculations (page height = app height - navbar height)
66
93
  #{$pagebar-height-var}: 0px;
@@ -10,6 +10,10 @@ $two-block-top-height-var: --dbx-two-block-top-height;
10
10
  height: 100%;
11
11
  }
12
12
 
13
+ /// @dbx-utility two-block-content
14
+ /// @intent two-block stack content area — fixed-height region whose `.dbx-two-block-bottom` child fills the remaining height after a 50px (default) `.dbx-two-block-top`. Override the top height via `--dbx-two-block-top-height`.
15
+ /// @role layout
16
+ /// @see-also two-column
13
17
  .dbx-two-block-content {
14
18
  height: 100%;
15
19
  #{$two-block-top-height-var}: $two-block-top-height-init-height;
@@ -8,6 +8,9 @@ $two-columns-right-padding-size: 6px;
8
8
 
9
9
  // MARK: Mixin
10
10
  @mixin core() {
11
+ /// @dbx-utility two-column
12
+ /// @intent two-column page layout — fixed-width left column with elevated right content area
13
+ /// @role layout
11
14
  .dbx-two-column {
12
15
  height: 100%;
13
16
  max-width: 100%;
@@ -24,15 +24,27 @@ $dbx-content-pit-floating-button-margin: 8px;
24
24
  $dbx-border-opacity-default: 20%;
25
25
 
26
26
  @mixin core() {
27
+ /// @dbx-utility content-border
28
+ /// @intent dashed-border content frame — pads the inner content and draws a 3px dashed border via `--dbx-border-color` / `--dbx-border-opacity`
29
+ /// @role layout
30
+ /// @see-also dbx-content-elevate, dbx-content-pit
27
31
  .dbx-content-border {
28
32
  padding: $content-border-inner-padding;
29
33
  }
30
34
 
35
+ /// @dbx-utility content-elevate
36
+ /// @intent padded content surface lifted with elevation 2 — combines inner padding with a Material elevation shadow
37
+ /// @role layout
38
+ /// @see-also dbx-content-border, dbx-content-pit
31
39
  .dbx-content-elevate {
32
40
  padding: $content-border-inner-padding;
33
41
  @include theming.elevation(2);
34
42
  }
35
43
 
44
+ /// @dbx-utility content-box
45
+ /// @intent centered box — auto-margined max-width content surface with a `padding-4` inset and `2vh` bottom margin (compose with `.dbx-content-box-wide` to remove the max-width)
46
+ /// @role layout
47
+ /// @see-also dbx-content-container, dbx-prompt-box
36
48
  .dbx-content-box {
37
49
  margin: auto;
38
50
  padding: $box-padding;
@@ -44,10 +56,19 @@ $dbx-border-opacity-default: 20%;
44
56
  }
45
57
  }
46
58
 
59
+ /// @dbx-utility content-pit
60
+ /// @intent recessed surface pit — `--mat-sys-surface-container` background with a `padding-4` inset, used to visually nest content (e.g. logs, JSON, quoted blocks)
61
+ /// @role layout
62
+ /// @see-also dbx-content-pit-rounded, dbx-content-pit-scrollable, dbx-content-border, dbx-content-elevate
47
63
  .dbx-content-pit {
48
64
  padding: $pit-padding;
49
65
  }
50
66
 
67
+ /// @dbx-utility content-pit-rounded
68
+ /// @intent rounded modifier for `.dbx-content-pit` — applies the `theming.$dbx-content-pit-rounded-border-radius` corner radius
69
+ /// @role layout
70
+ /// @parent content-pit
71
+ /// @see-also dbx-content-pit
51
72
  .dbx-content-pit-rounded {
52
73
  border-radius: theming.$dbx-content-pit-rounded-border-radius;
53
74
  }
@@ -56,6 +77,11 @@ $dbx-border-opacity-default: 20%;
56
77
  opacity: 0.66; // increase opacity slightly to make it easier to read against background
57
78
  }
58
79
 
80
+ /// @dbx-utility content-pit-scrollable
81
+ /// @intent scrollable modifier for `.dbx-content-pit` — caps height at `theming.$dbx-content-pit-scrollable-max-height` and forces `overflow-y: scroll` for long inner content
82
+ /// @role layout
83
+ /// @parent content-pit
84
+ /// @see-also dbx-content-pit
59
85
  .dbx-content-pit-scrollable {
60
86
  max-height: theming.$dbx-content-pit-scrollable-max-height;
61
87
  max-width: 100%;
@@ -103,6 +129,9 @@ $dbx-border-opacity-default: 20%;
103
129
  padding: 0 2px; // Override padding
104
130
  }
105
131
 
132
+ /// @dbx-utility content-container
133
+ /// @intent centered, padded content container with width-class and padding-class modifiers
134
+ /// @role layout
106
135
  .dbx-content-container {
107
136
  margin: auto;
108
137
  padding: 0 $content-container-padding;
@@ -6,6 +6,10 @@ $dbx-flex-group-columns-count: 6;
6
6
 
7
7
  // MARK: Mixin
8
8
  @mixin core() {
9
+ /// @dbx-utility flex-bar
10
+ /// @intent horizontal action bar — flex row that scrolls horizontally before wrapping
11
+ /// @role flex
12
+ /// @see-also dbx-flex-center, dbx-flex-fill
9
13
  .dbx-flex-bar {
10
14
  display: flex;
11
15
  align-items: center;
@@ -23,17 +27,50 @@ $dbx-flex-group-columns-count: 6;
23
27
  --mat-fab-small-touch-target-size: 40px;
24
28
  }
25
29
 
30
+ /// @dbx-utility flex-center
31
+ /// @intent center children both axes via flex
32
+ /// @role flex
33
+ /// @see-also dbx-flex-bar, dbx-flex-column
26
34
  .dbx-flex-center {
27
35
  display: flex;
28
36
  align-items: center;
29
37
  justify-content: center;
30
38
  }
31
39
 
40
+ /// @dbx-utility flex-column
41
+ /// @intent vertical flex stack — children laid out top-to-bottom
42
+ /// @role flex
43
+ /// @see-also dbx-flex-bar
32
44
  .dbx-flex-column {
33
45
  display: flex;
34
46
  flex-direction: column;
35
47
  }
36
48
 
49
+ /// @dbx-utility flex-fill
50
+ /// @intent fill remaining space inside a flex container
51
+ /// @role flex
52
+ /// @see-also dbx-flex-fill-0
53
+ /// @anti-use Use dbx-flex-fill-0 when the fill child must also truncate or otherwise shrink below its intrinsic width.
54
+ .dbx-flex-fill {
55
+ flex: 1;
56
+ }
57
+
58
+ /// @dbx-utility flex-fill-0
59
+ /// @intent fill remaining flex space and allow the child to truncate (`min-width: 0` overrides the default flex-item `min-width: auto`)
60
+ /// @role flex
61
+ /// @see-also dbx-flex-fill, dbx-text-truncate
62
+ // `min-width: 0` lets the flex item shrink below its content's intrinsic
63
+ // width — required for child truncation (e.g. `.dbx-text-truncate`) to
64
+ // actually clip inside the fill region.
65
+ .dbx-flex-fill-0 {
66
+ flex: 1;
67
+ min-width: 0;
68
+ }
69
+
70
+ /// @dbx-utility flex-group
71
+ /// @intent responsive flex grid — children opt into widths via .dbx-flex-1 ... .dbx-flex-6
72
+ /// @role flex
73
+ /// @see-also dbx-flex-bar
37
74
  .dbx-flex-group {
38
75
  display: flex;
39
76
  flex-wrap: wrap;