@dereekb/dbx-web 13.10.7 → 13.10.8
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.
- package/docs/README.md +10 -0
- package/fesm2022/dereekb-dbx-web-calendar.mjs +9 -9
- package/fesm2022/dereekb-dbx-web-docs.mjs +146 -0
- package/fesm2022/dereekb-dbx-web-docs.mjs.map +1 -0
- package/fesm2022/dereekb-dbx-web-mapbox.mjs +52 -52
- package/fesm2022/dereekb-dbx-web-table.mjs +77 -77
- package/fesm2022/dereekb-dbx-web.mjs +1438 -914
- package/fesm2022/dereekb-dbx-web.mjs.map +1 -1
- package/lib/action/snackbar/_snackbar.scss +5 -0
- package/lib/button/_button.scss +27 -0
- package/lib/error/_error.scss +5 -0
- package/lib/extension/pdf/_pdf.scss +19 -59
- package/lib/interaction/dialog/_dialog.scss +5 -0
- package/lib/interaction/popover/_popover.scss +5 -0
- package/lib/interaction/popup/_popup.scss +5 -0
- package/lib/interaction/prompt/_prompt.scss +4 -0
- package/lib/interaction/upload/_upload.scss +15 -2
- package/lib/layout/avatar/_avatar.scss +26 -0
- package/lib/layout/bar/_bar.scss +27 -0
- package/lib/layout/block/_block.scss +4 -0
- package/lib/layout/column/_column.scss +3 -0
- package/lib/layout/content/_content.scss +29 -0
- package/lib/layout/flex/_flex.scss +37 -0
- package/lib/layout/list/_list.scss +99 -0
- package/lib/layout/section/_section.scss +7 -0
- package/lib/layout/style/_style.scss +49 -0
- package/lib/layout/text/_text.scss +298 -14
- package/lib/loading/_loading.scss +6 -0
- package/package.json +27 -14
- package/types/dereekb-dbx-web-docs.d.ts +73 -0
- package/types/dereekb-dbx-web.d.ts +521 -147
|
@@ -12,7 +12,7 @@ $dbx-detail-block-bottom-padding: 12px;
|
|
|
12
12
|
$dbx-detail-block-content-offset: 30px;
|
|
13
13
|
$click-to-copy-icon-size: 18px;
|
|
14
14
|
$dbx-detail-block-big-header-icon-size: 18px;
|
|
15
|
-
|
|
15
|
+
$dbx-icon-tile-default-icon-size: 24px;
|
|
16
16
|
$dbx-step-block-badge-size: 32px;
|
|
17
17
|
$dbx-step-block-gap: 16px;
|
|
18
18
|
$dbx-step-block-padding: 16px;
|
|
@@ -23,20 +23,33 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
23
23
|
|
|
24
24
|
// MARK: Mixin
|
|
25
25
|
@mixin core() {
|
|
26
|
+
/// @dbx-utility small
|
|
27
|
+
/// @intent reduced font-size text — 0.8em of inherited size
|
|
28
|
+
/// @role text
|
|
26
29
|
.dbx-small,
|
|
27
30
|
.dbx-clear-hint {
|
|
28
31
|
font-size: 0.8em;
|
|
29
32
|
}
|
|
30
33
|
|
|
34
|
+
/// @dbx-utility label-padded
|
|
35
|
+
/// @intent padded label — adds 6px bottom padding under a label header
|
|
36
|
+
/// @role spacing
|
|
37
|
+
/// @see-also label-block
|
|
31
38
|
.dbx-label-padded {
|
|
32
39
|
padding-bottom: $dbx-label-padded-padding;
|
|
33
40
|
}
|
|
34
41
|
|
|
42
|
+
/// @dbx-utility text-center
|
|
43
|
+
/// @intent horizontally centered text
|
|
44
|
+
/// @role text
|
|
35
45
|
.text-center,
|
|
36
46
|
.dbx-text-center {
|
|
37
47
|
text-align: center;
|
|
38
48
|
}
|
|
39
49
|
|
|
50
|
+
/// @dbx-utility u
|
|
51
|
+
/// @intent underlined text decoration
|
|
52
|
+
/// @role text
|
|
40
53
|
.dbx-u {
|
|
41
54
|
text-decoration: underline;
|
|
42
55
|
}
|
|
@@ -54,12 +67,21 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
54
67
|
white-space: pre-wrap;
|
|
55
68
|
}
|
|
56
69
|
|
|
70
|
+
/// @dbx-utility iframe
|
|
71
|
+
/// @intent fill-parent iframe with no border — `height: 100%; width: 100%; border: none`
|
|
72
|
+
/// @role layout
|
|
57
73
|
.dbx-iframe {
|
|
58
74
|
height: 100%;
|
|
59
75
|
width: 100%;
|
|
60
76
|
border: none;
|
|
61
77
|
}
|
|
62
78
|
|
|
79
|
+
/// @dbx-utility label-block
|
|
80
|
+
/// @intent block-level label wrapper — `<dbx-label-block>` body that emits a header line with 3px vertical padding
|
|
81
|
+
/// @role layout
|
|
82
|
+
/// @component DbxLabelBlockComponent
|
|
83
|
+
/// @scope component-class
|
|
84
|
+
/// @see-also detail-block, label-padded
|
|
63
85
|
.dbx-label-block {
|
|
64
86
|
display: block;
|
|
65
87
|
padding: 3px 0;
|
|
@@ -100,6 +122,12 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
100
122
|
}
|
|
101
123
|
}
|
|
102
124
|
|
|
125
|
+
/// @dbx-utility detail-block
|
|
126
|
+
/// @intent labeled detail surface — `<dbx-detail-block>` body that places an icon + header above offset content (`.dbx-detail-block-header` + `.dbx-detail-block-content`). Compose with `.dbx-detail-block-big-header` for a larger title and `.dbx-detail-block-header-align` to wrap the header content (e.g. when an aligned `[header]` slot is supplied).
|
|
127
|
+
/// @role layout
|
|
128
|
+
/// @component DbxDetailBlockComponent
|
|
129
|
+
/// @scope component-class
|
|
130
|
+
/// @see-also label-block, step-block
|
|
103
131
|
.dbx-detail-block {
|
|
104
132
|
display: block;
|
|
105
133
|
|
|
@@ -133,6 +161,12 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
133
161
|
}
|
|
134
162
|
}
|
|
135
163
|
|
|
164
|
+
/// @dbx-utility step-block
|
|
165
|
+
/// @intent step row — `<dbx-step-block>` body that lays out a numbered/iconic badge alongside content with a configurable `--dbx-step-block-gap` and `--dbx-step-block-padding`
|
|
166
|
+
/// @role layout
|
|
167
|
+
/// @component DbxStepBlockComponent
|
|
168
|
+
/// @scope component-class
|
|
169
|
+
/// @see-also step-block-badge, detail-block
|
|
136
170
|
.dbx-step-block {
|
|
137
171
|
display: flex;
|
|
138
172
|
flex-direction: row;
|
|
@@ -145,27 +179,73 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
145
179
|
align-items: center;
|
|
146
180
|
}
|
|
147
181
|
|
|
148
|
-
.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
182
|
+
// Reusable rounded, padded icon container. Composable with any leading-icon
|
|
183
|
+
// slot and works with `[dbxColor]` for tinted backgrounds. Decoupled from
|
|
184
|
+
// the list layout — usable wherever a leading icon tile is wanted.
|
|
185
|
+
// Also exposed via the `<dbx-icon-tile>` component (DbxIconTileComponent)
|
|
186
|
+
// and the `[dbxIconTile]` directive (DbxIconTileDirective). All sizing,
|
|
187
|
+
// padding, radius, font, and inner icon size are exposed as CSS variables
|
|
188
|
+
// so consumer surfaces (e.g. `.dbx-step-block-badge`) can compose by
|
|
189
|
+
// setting variables instead of rewriting rules. Host-level vars (width /
|
|
190
|
+
// height / min-width / font-size / font-weight) have no fallback so an
|
|
191
|
+
// unset variable produces an invalid declaration the browser ignores —
|
|
192
|
+
// the tile then falls back to natural (auto / inherited) sizing. The
|
|
193
|
+
// inner `.mat-icon` falls back to Material's own 24px default so
|
|
194
|
+
// overriding our selector doesn't shrink the glyph.
|
|
195
|
+
/// @dbx-utility icon-tile
|
|
196
|
+
/// @intent rounded, padded icon container — the visible body of `<dbx-icon-tile>` / `[dbxIconTile]`. Customize via the `--dbx-icon-tile-*` CSS variables.
|
|
197
|
+
/// @role layout
|
|
198
|
+
/// @component DbxIconTileComponent
|
|
199
|
+
/// @scope component-class
|
|
200
|
+
.dbx-icon-tile {
|
|
153
201
|
display: flex;
|
|
154
202
|
align-items: center;
|
|
155
203
|
justify-content: center;
|
|
156
|
-
|
|
157
|
-
|
|
204
|
+
border-radius: var(--dbx-icon-tile-border-radius, 12px);
|
|
205
|
+
padding: var(--dbx-icon-tile-padding, 8px);
|
|
206
|
+
width: var(--dbx-icon-tile-width);
|
|
207
|
+
height: var(--dbx-icon-tile-height);
|
|
208
|
+
min-width: var(--dbx-icon-tile-min-width);
|
|
209
|
+
font-size: var(--dbx-icon-tile-font-size);
|
|
210
|
+
font-weight: var(--dbx-icon-tile-font-weight);
|
|
158
211
|
|
|
159
212
|
.mat-icon {
|
|
160
|
-
width: var(--dbx-
|
|
161
|
-
height: var(--dbx-
|
|
162
|
-
font-size: var(--dbx-
|
|
213
|
+
width: var(--dbx-icon-tile-icon-size, $dbx-icon-tile-default-icon-size);
|
|
214
|
+
height: var(--dbx-icon-tile-icon-size, $dbx-icon-tile-default-icon-size);
|
|
215
|
+
font-size: var(--dbx-icon-tile-icon-size, $dbx-icon-tile-default-icon-size);
|
|
163
216
|
}
|
|
164
217
|
}
|
|
165
218
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
219
|
+
// Round modifier — turns the rounded-square tile into a circle. Pair
|
|
220
|
+
// with explicit width/height (or square content) to keep it true round.
|
|
221
|
+
/// @dbx-utility icon-tile-round
|
|
222
|
+
/// @intent round modifier — turns `.dbx-icon-tile` into a circle (pair with explicit width/height to keep it true round)
|
|
223
|
+
/// @role layout
|
|
224
|
+
/// @parent icon-tile
|
|
225
|
+
/// @see-also icon-tile
|
|
226
|
+
.dbx-icon-tile-round {
|
|
227
|
+
border-radius: 50%;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Composes `.dbx-icon-tile` — the badge is a fixed-size circle (or
|
|
231
|
+
// square via `--dbx-step-block-badge-shape`) sized through the tile's
|
|
232
|
+
// CSS variables. Padding is reset to 0 because the badge sizes by
|
|
233
|
+
// explicit width/height, not by content + padding.
|
|
234
|
+
/// @dbx-utility step-block-badge
|
|
235
|
+
/// @intent fixed-size badge inside `<dbx-step-block>` — composes `.dbx-icon-tile` and exposes the `--dbx-step-block-badge-*` CSS variables for shape, size, font-size, font-weight, and inner icon size.
|
|
236
|
+
/// @role layout
|
|
237
|
+
/// @component DbxStepBlockComponent
|
|
238
|
+
/// @scope component-class
|
|
239
|
+
/// @see-also icon-tile
|
|
240
|
+
.dbx-step-block-badge {
|
|
241
|
+
--dbx-icon-tile-padding: 0;
|
|
242
|
+
--dbx-icon-tile-border-radius: var(--dbx-step-block-badge-shape, 50%);
|
|
243
|
+
--dbx-icon-tile-width: var(--dbx-step-block-badge-size, #{$dbx-step-block-badge-size});
|
|
244
|
+
--dbx-icon-tile-height: var(--dbx-step-block-badge-size, #{$dbx-step-block-badge-size});
|
|
245
|
+
--dbx-icon-tile-min-width: var(--dbx-step-block-badge-size, #{$dbx-step-block-badge-size});
|
|
246
|
+
--dbx-icon-tile-font-size: var(--dbx-step-block-badge-font-size, #{$dbx-step-block-badge-font-size});
|
|
247
|
+
--dbx-icon-tile-font-weight: var(--dbx-step-block-badge-font-weight, #{$dbx-step-block-badge-font-weight});
|
|
248
|
+
--dbx-icon-tile-icon-size: var(--dbx-step-block-badge-icon-size, #{$dbx-step-block-badge-icon-size});
|
|
169
249
|
}
|
|
170
250
|
|
|
171
251
|
.dbx-step-block-header {
|
|
@@ -184,21 +264,52 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
184
264
|
opacity: var(--dbx-step-block-hint-opacity, #{$hint-opacity});
|
|
185
265
|
}
|
|
186
266
|
|
|
267
|
+
/// @dbx-utility text-no-overflow
|
|
268
|
+
/// @intent opt out of single-line truncation — wrap content and show overflow
|
|
269
|
+
/// @role text
|
|
270
|
+
/// @see-also dbx-text-truncate
|
|
187
271
|
.dbx-text-no-overflow {
|
|
188
272
|
white-space: pre-wrap !important;
|
|
189
273
|
overflow: visible !important;
|
|
190
274
|
text-overflow: unset !important;
|
|
191
275
|
}
|
|
192
276
|
|
|
277
|
+
/// @dbx-utility text-truncate
|
|
278
|
+
/// @intent single-line truncation with ellipsis on any block-level element
|
|
279
|
+
/// @role text
|
|
280
|
+
/// @see-also dbx-flex-fill-0
|
|
281
|
+
/// @anti-use Inside a flex item, pair with .dbx-flex-fill-0 — a default flex item won't shrink below its content's intrinsic width.
|
|
282
|
+
// Single-line truncation with ellipsis. Composable on any block-level
|
|
283
|
+
// element. The flex-child variant requires `min-width: 0` on the
|
|
284
|
+
// truncating element (the default `min-width: auto` prevents a flex item
|
|
285
|
+
// from shrinking below its content width).
|
|
286
|
+
.dbx-text-truncate {
|
|
287
|
+
@include theming.limit-text();
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/// @dbx-utility icon-spacer
|
|
291
|
+
/// @intent right-margin spacer beside an icon — 6px right margin to separate a leading `mat-icon` from text
|
|
292
|
+
/// @role spacing
|
|
293
|
+
/// @see-also chip-spacer, button-spacer
|
|
193
294
|
.dbx-icon-spacer {
|
|
194
295
|
margin-right: $icon-spacing;
|
|
195
296
|
}
|
|
196
297
|
|
|
298
|
+
/// @dbx-utility form-description
|
|
299
|
+
/// @intent helper-text styling for a form field description — 75% font size with the standard `mat-form-field` top spacing
|
|
300
|
+
/// @role text
|
|
301
|
+
/// @see-also dbx-hint, dbx-label
|
|
197
302
|
.dbx-form-description {
|
|
198
303
|
font-size: 75%;
|
|
199
304
|
margin-top: 0.6666666667em;
|
|
200
305
|
}
|
|
201
306
|
|
|
307
|
+
/// @dbx-utility chip
|
|
308
|
+
/// @intent chip label — `<dbx-chip>` body that lays out a 14px/500 inline chip; compose with `.dbx-chip-small`, `.dbx-chip-block`, or `.dbx-chip-small-text` for size variants
|
|
309
|
+
/// @role layout
|
|
310
|
+
/// @component DbxChipDirective
|
|
311
|
+
/// @scope component-class
|
|
312
|
+
/// @see-also chip-spacer, chip-margin
|
|
202
313
|
.dbx-chip {
|
|
203
314
|
font-size: 14px;
|
|
204
315
|
font-weight: 500;
|
|
@@ -207,6 +318,10 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
207
318
|
white-space: nowrap;
|
|
208
319
|
}
|
|
209
320
|
|
|
321
|
+
/// @dbx-utility chip-spacer
|
|
322
|
+
/// @intent right-margin spacer between adjacent chips — 2px right margin
|
|
323
|
+
/// @role spacing
|
|
324
|
+
/// @see-also chip-margin, icon-spacer
|
|
210
325
|
.dbx-chip-spacer {
|
|
211
326
|
margin-right: $chip-spacing;
|
|
212
327
|
}
|
|
@@ -240,6 +355,10 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
240
355
|
border-radius: 0;
|
|
241
356
|
}
|
|
242
357
|
|
|
358
|
+
/// @dbx-utility chip-margin
|
|
359
|
+
/// @intent uniform 4px margin around a chip — use when chips wrap onto multiple rows
|
|
360
|
+
/// @role spacing
|
|
361
|
+
/// @see-also chip-spacer
|
|
243
362
|
.dbx-chip-margin {
|
|
244
363
|
margin: 4px;
|
|
245
364
|
}
|
|
@@ -248,11 +367,17 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
248
367
|
margin-left: $icon-spacing;
|
|
249
368
|
}
|
|
250
369
|
|
|
370
|
+
/// @dbx-utility us-address
|
|
371
|
+
/// @intent pre-wrapped, line-tightened US-address text — paint the styling on a `<p>` rendered from `unitedStatesAddressString()` (or use the `<dbx-us-address>` component)
|
|
372
|
+
/// @role text
|
|
251
373
|
.dbx-us-address {
|
|
252
374
|
white-space: pre-wrap !important;
|
|
253
375
|
line-height: 1.4;
|
|
254
376
|
}
|
|
255
377
|
|
|
378
|
+
/// @dbx-utility modelkey
|
|
379
|
+
/// @intent allow line breaks inside long opaque keys/IDs — `line-break: anywhere`
|
|
380
|
+
/// @role text
|
|
256
381
|
.dbx-modelkey {
|
|
257
382
|
line-break: anywhere;
|
|
258
383
|
}
|
|
@@ -272,15 +397,27 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
272
397
|
--mat-chip-with-icon-icon-color: #{theming.$dbx-color};
|
|
273
398
|
}
|
|
274
399
|
|
|
400
|
+
/// @dbx-utility hint
|
|
401
|
+
/// @intent muted hint text — 80% opacity (mirrors mat-form-field hint emphasis)
|
|
402
|
+
/// @role text
|
|
403
|
+
/// @see-also dbx-faint, dbx-note
|
|
275
404
|
.dbx-hint,
|
|
276
405
|
.dbx-clear-hint {
|
|
277
406
|
opacity: $hint-opacity;
|
|
278
407
|
}
|
|
279
408
|
|
|
409
|
+
/// @dbx-utility faint
|
|
410
|
+
/// @intent very faint text — 54% opacity (matches mat-hint baseline)
|
|
411
|
+
/// @role text
|
|
412
|
+
/// @see-also dbx-hint, dbx-note
|
|
280
413
|
.dbx-faint {
|
|
281
414
|
opacity: $faint-opacity;
|
|
282
415
|
}
|
|
283
416
|
|
|
417
|
+
/// @dbx-utility label
|
|
418
|
+
/// @intent muted form-field label text — 54% opacity (matches `mat-hint`); pair with `<dbx-label-block>` for the standard label-over-content layout
|
|
419
|
+
/// @role text
|
|
420
|
+
/// @see-also label-block, dbx-hint, dbx-form-description
|
|
284
421
|
.dbx-label,
|
|
285
422
|
.dbx-sublabel,
|
|
286
423
|
.dbx-chip-sublabel,
|
|
@@ -288,10 +425,17 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
288
425
|
opacity: $mat-hint-opacity;
|
|
289
426
|
}
|
|
290
427
|
|
|
428
|
+
/// @dbx-utility note
|
|
429
|
+
/// @intent secondary note text — 70% opacity (between hint and faint)
|
|
430
|
+
/// @role text
|
|
431
|
+
/// @see-also dbx-hint, dbx-faint
|
|
291
432
|
.dbx-note {
|
|
292
433
|
opacity: $note-opacity;
|
|
293
434
|
}
|
|
294
435
|
|
|
436
|
+
/// @dbx-utility outlined-text
|
|
437
|
+
/// @intent on-surface-variant text with a thin surface-tinted outline for legibility over imagery
|
|
438
|
+
/// @role text
|
|
295
439
|
.dbx-outlined-text {
|
|
296
440
|
color: var(--mat-sys-on-surface-variant);
|
|
297
441
|
text-shadow:
|
|
@@ -301,6 +445,9 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
301
445
|
1px 1px 0 color-mix(in srgb, var(--mat-sys-surface) 40%, transparent);
|
|
302
446
|
}
|
|
303
447
|
|
|
448
|
+
/// @dbx-utility nowrap
|
|
449
|
+
/// @intent prevent whitespace wrapping (white-space: nowrap)
|
|
450
|
+
/// @role text
|
|
304
451
|
.dbx-nowrap {
|
|
305
452
|
white-space: nowrap;
|
|
306
453
|
}
|
|
@@ -327,6 +474,143 @@ $dbx-step-block-badge-font-weight: 600;
|
|
|
327
474
|
font-size: var(--mat-sys-body-small-size);
|
|
328
475
|
}
|
|
329
476
|
|
|
477
|
+
// MARK: M3 type-role utilities
|
|
478
|
+
// Apply the full Material 3 `font` shorthand (size + weight + line-height +
|
|
479
|
+
// tracking + family) for a single type role. Compose with .dbx-uppercase /
|
|
480
|
+
// .dbx-tracked-wide for eyebrow-style chrome.
|
|
481
|
+
/// @dbx-utility text-display-large
|
|
482
|
+
/// @intent Material 3 display-large type role — largest hero/expressive headline
|
|
483
|
+
/// @role text
|
|
484
|
+
.dbx-text-display-large {
|
|
485
|
+
font: var(--mat-sys-display-large);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/// @dbx-utility text-display-medium
|
|
489
|
+
/// @intent Material 3 display-medium type role — secondary hero headline
|
|
490
|
+
/// @role text
|
|
491
|
+
.dbx-text-display-medium {
|
|
492
|
+
font: var(--mat-sys-display-medium);
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
/// @dbx-utility text-display-small
|
|
496
|
+
/// @intent Material 3 display-small type role — compact hero headline
|
|
497
|
+
/// @role text
|
|
498
|
+
.dbx-text-display-small {
|
|
499
|
+
font: var(--mat-sys-display-small);
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/// @dbx-utility text-headline-large
|
|
503
|
+
/// @intent Material 3 headline-large type role — primary section heading
|
|
504
|
+
/// @role text
|
|
505
|
+
.dbx-text-headline-large {
|
|
506
|
+
font: var(--mat-sys-headline-large);
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
/// @dbx-utility text-headline-medium
|
|
510
|
+
/// @intent Material 3 headline-medium type role — secondary section heading
|
|
511
|
+
/// @role text
|
|
512
|
+
.dbx-text-headline-medium {
|
|
513
|
+
font: var(--mat-sys-headline-medium);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/// @dbx-utility text-headline-small
|
|
517
|
+
/// @intent Material 3 headline-small type role — tertiary section heading
|
|
518
|
+
/// @role text
|
|
519
|
+
.dbx-text-headline-small {
|
|
520
|
+
font: var(--mat-sys-headline-small);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/// @dbx-utility text-title-large
|
|
524
|
+
/// @intent Material 3 title-large type role — prominent UI title
|
|
525
|
+
/// @role text
|
|
526
|
+
.dbx-text-title-large {
|
|
527
|
+
font: var(--mat-sys-title-large);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/// @dbx-utility text-title-medium
|
|
531
|
+
/// @intent Material 3 title-medium type role — standard UI title
|
|
532
|
+
/// @role text
|
|
533
|
+
.dbx-text-title-medium {
|
|
534
|
+
font: var(--mat-sys-title-medium);
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/// @dbx-utility text-title-small
|
|
538
|
+
/// @intent Material 3 title-small type role — small UI title
|
|
539
|
+
/// @role text
|
|
540
|
+
.dbx-text-title-small {
|
|
541
|
+
font: var(--mat-sys-title-small);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
/// @dbx-utility text-body-large
|
|
545
|
+
/// @intent Material 3 body-large type role — long-form body text
|
|
546
|
+
/// @role text
|
|
547
|
+
.dbx-text-body-large {
|
|
548
|
+
font: var(--mat-sys-body-large);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/// @dbx-utility text-body-medium
|
|
552
|
+
/// @intent Material 3 body-medium type role — default body text
|
|
553
|
+
/// @role text
|
|
554
|
+
.dbx-text-body-medium {
|
|
555
|
+
font: var(--mat-sys-body-medium);
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
/// @dbx-utility text-body-small
|
|
559
|
+
/// @intent Material 3 body-small type role — supporting body text (captions, hints)
|
|
560
|
+
/// @role text
|
|
561
|
+
.dbx-text-body-small {
|
|
562
|
+
font: var(--mat-sys-body-small);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
/// @dbx-utility text-label-large
|
|
566
|
+
/// @intent Material 3 label-large type role — button and tab text
|
|
567
|
+
/// @role text
|
|
568
|
+
.dbx-text-label-large {
|
|
569
|
+
font: var(--mat-sys-label-large);
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/// @dbx-utility text-label-medium
|
|
573
|
+
/// @intent Material 3 label-medium type role — small label text (eyebrows, chips)
|
|
574
|
+
/// @role text
|
|
575
|
+
/// @see-also dbx-uppercase, dbx-tracked-wide
|
|
576
|
+
.dbx-text-label-medium {
|
|
577
|
+
font: var(--mat-sys-label-medium);
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
/// @dbx-utility text-label-small
|
|
581
|
+
/// @intent Material 3 label-small type role — smallest label text
|
|
582
|
+
/// @role text
|
|
583
|
+
.dbx-text-label-small {
|
|
584
|
+
font: var(--mat-sys-label-small);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
// MARK: Text transforms
|
|
588
|
+
/// @dbx-utility uppercase
|
|
589
|
+
/// @intent uppercase text transform
|
|
590
|
+
/// @role text
|
|
591
|
+
/// @see-also dbx-lowercase, dbx-tracked-wide
|
|
592
|
+
.dbx-uppercase {
|
|
593
|
+
text-transform: uppercase;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
/// @dbx-utility lowercase
|
|
597
|
+
/// @intent lowercase text transform
|
|
598
|
+
/// @role text
|
|
599
|
+
/// @see-also dbx-uppercase
|
|
600
|
+
.dbx-lowercase {
|
|
601
|
+
text-transform: lowercase;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
// Eyebrow-style letter-spacing — pairs with .dbx-text-label-medium /
|
|
605
|
+
// .dbx-uppercase to render the M3 "overline" pattern (e.g. card eyebrows).
|
|
606
|
+
/// @dbx-utility tracked-wide
|
|
607
|
+
/// @intent eyebrow letter-spacing (0.08em) — pair with dbx-text-label-medium + dbx-uppercase for the M3 overline pattern
|
|
608
|
+
/// @role text
|
|
609
|
+
/// @see-also dbx-uppercase, dbx-text-label-medium
|
|
610
|
+
.dbx-tracked-wide {
|
|
611
|
+
letter-spacing: 0.08em;
|
|
612
|
+
}
|
|
613
|
+
|
|
330
614
|
.dbx-click-to-copy-text-icon.mat-icon {
|
|
331
615
|
width: $click-to-copy-icon-size;
|
|
332
616
|
height: $click-to-copy-icon-size;
|
|
@@ -7,10 +7,16 @@ $linear-line-height: 4px;
|
|
|
7
7
|
|
|
8
8
|
// MARK: Mixin
|
|
9
9
|
@mixin core() {
|
|
10
|
+
/// @dbx-utility loading-linear-done-padding
|
|
11
|
+
/// @intent reserve the 4px height of a linear progress bar after it finishes — top-padding placeholder so siblings don't shift when the bar is hidden
|
|
12
|
+
/// @role spacing
|
|
10
13
|
.dbx-loading-linear-done-padding {
|
|
11
14
|
padding-top: $linear-line-height;
|
|
12
15
|
}
|
|
13
16
|
|
|
17
|
+
/// @dbx-utility loading-progress-hint
|
|
18
|
+
/// @intent 4px top padding for the hint message below a `<dbx-loading-progress>` indicator
|
|
19
|
+
/// @role spacing
|
|
14
20
|
.dbx-loading-progress-hint {
|
|
15
21
|
padding-top: 4px;
|
|
16
22
|
}
|
package/package.json
CHANGED
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-web",
|
|
3
|
-
"version": "13.10.
|
|
3
|
+
"version": "13.10.8",
|
|
4
|
+
"sideEffects": [
|
|
5
|
+
"*.scss",
|
|
6
|
+
"*.css"
|
|
7
|
+
],
|
|
4
8
|
"peerDependencies": {
|
|
5
|
-
"@angular/cdk": "^21.2.
|
|
6
|
-
"@angular/common": "21.2.
|
|
7
|
-
"@angular/core": "21.2.
|
|
8
|
-
"@angular/forms": "21.2.
|
|
9
|
-
"@angular/material": "^21.2.
|
|
10
|
-
"@angular/platform-browser": "21.2.
|
|
9
|
+
"@angular/cdk": "^21.2.9",
|
|
10
|
+
"@angular/common": "21.2.11",
|
|
11
|
+
"@angular/core": "21.2.11",
|
|
12
|
+
"@angular/forms": "21.2.11",
|
|
13
|
+
"@angular/material": "^21.2.9",
|
|
14
|
+
"@angular/platform-browser": "21.2.11",
|
|
11
15
|
"@cantoo/pdf-lib": "^2.6.5",
|
|
12
|
-
"@dereekb/browser": "13.10.
|
|
13
|
-
"@dereekb/date": "13.10.
|
|
14
|
-
"@dereekb/dbx-core": "13.10.
|
|
15
|
-
"@dereekb/rxjs": "13.10.
|
|
16
|
-
"@dereekb/util": "13.10.
|
|
17
|
-
"@dereekb/vitest": "13.10.
|
|
16
|
+
"@dereekb/browser": "13.10.8",
|
|
17
|
+
"@dereekb/date": "13.10.8",
|
|
18
|
+
"@dereekb/dbx-core": "13.10.8",
|
|
19
|
+
"@dereekb/rxjs": "13.10.8",
|
|
20
|
+
"@dereekb/util": "13.10.8",
|
|
21
|
+
"@dereekb/vitest": "13.10.8",
|
|
18
22
|
"@ngbracket/ngx-layout": "^21.0.0",
|
|
19
23
|
"@ngrx/component-store": "^21.1.0",
|
|
20
24
|
"@ngrx/effects": "^21.1.0",
|
|
@@ -47,17 +51,26 @@
|
|
|
47
51
|
"types": "./types/dereekb-dbx-web-calendar.d.ts",
|
|
48
52
|
"default": "./fesm2022/dereekb-dbx-web-calendar.mjs"
|
|
49
53
|
},
|
|
54
|
+
"./docs": {
|
|
55
|
+
"types": "./types/dereekb-dbx-web-docs.d.ts",
|
|
56
|
+
"default": "./fesm2022/dereekb-dbx-web-docs.mjs"
|
|
57
|
+
},
|
|
50
58
|
"./table": {
|
|
51
59
|
"types": "./types/dereekb-dbx-web-table.d.ts",
|
|
52
60
|
"default": "./fesm2022/dereekb-dbx-web-table.mjs"
|
|
53
61
|
},
|
|
62
|
+
"./eslint": {
|
|
63
|
+
"module": "./eslint/index.esm.js",
|
|
64
|
+
"types": "./eslint/index.d.ts",
|
|
65
|
+
"import": "./eslint/index.cjs.mjs",
|
|
66
|
+
"default": "./eslint/index.cjs.js"
|
|
67
|
+
},
|
|
54
68
|
"./package.json": {
|
|
55
69
|
"default": "./package.json"
|
|
56
70
|
}
|
|
57
71
|
},
|
|
58
72
|
"module": "fesm2022/dereekb-dbx-web.mjs",
|
|
59
73
|
"typings": "types/dereekb-dbx-web.d.ts",
|
|
60
|
-
"sideEffects": false,
|
|
61
74
|
"type": "module",
|
|
62
75
|
"dependencies": {
|
|
63
76
|
"tslib": "^2.3.0"
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wrapper for a single self-contained documentation UI example.
|
|
5
|
+
*
|
|
6
|
+
* The `<dbx-docs-ui-example>` element is the parser contract for the
|
|
7
|
+
* `@dereekb/dbx-components-mcp` UI examples scanner: every example component
|
|
8
|
+
* tagged with `@dbxDocsUiExample` must render exactly one of these as the
|
|
9
|
+
* template root, with the runnable snippet placed inside
|
|
10
|
+
* `<dbx-docs-ui-example-content>` and descriptive prose inside
|
|
11
|
+
* `<dbx-docs-ui-example-info>`. Optional `<dbx-docs-ui-example-imports>` and
|
|
12
|
+
* `<dbx-docs-ui-example-notes>` slots are also picked up by the scanner.
|
|
13
|
+
*
|
|
14
|
+
* Selector and child element names are stable — renaming them would break
|
|
15
|
+
* the scanner's deterministic anchors, so treat the names as a public
|
|
16
|
+
* contract on par with a JSDoc tag vocabulary.
|
|
17
|
+
*/
|
|
18
|
+
declare class DbxDocsUiExampleComponent {
|
|
19
|
+
readonly header: i0.InputSignal<string>;
|
|
20
|
+
readonly hint: i0.InputSignal<string | undefined>;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DbxDocsUiExampleComponent, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DbxDocsUiExampleComponent, "dbx-docs-ui-example", never, { "header": { "alias": "header"; "required": true; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Descriptive prose slot inside a `<dbx-docs-ui-example>`.
|
|
27
|
+
*
|
|
28
|
+
* The MCP scanner extracts the projected content as the example entry's
|
|
29
|
+
* `info` field. Multiple `<dbx-docs-ui-example-info>` children are joined in
|
|
30
|
+
* source order. Free-form HTML / inline markdown is allowed.
|
|
31
|
+
*/
|
|
32
|
+
declare class DbxDocsUiExampleInfoComponent {
|
|
33
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DbxDocsUiExampleInfoComponent, never>;
|
|
34
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DbxDocsUiExampleInfoComponent, "dbx-docs-ui-example-info", never, {}, {}, never, ["*"], true, never>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Runnable-snippet slot inside a `<dbx-docs-ui-example>`.
|
|
39
|
+
*
|
|
40
|
+
* The MCP scanner extracts the projected HTML body as the example entry's
|
|
41
|
+
* `snippet` field. Whatever is inside this element is treated as the literal
|
|
42
|
+
* code shown to LLM consumers — keep it minimal, copy-paste-ready, and free of
|
|
43
|
+
* documentation-only chrome.
|
|
44
|
+
*/
|
|
45
|
+
declare class DbxDocsUiExampleContentComponent {
|
|
46
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DbxDocsUiExampleContentComponent, never>;
|
|
47
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DbxDocsUiExampleContentComponent, "dbx-docs-ui-example-content", never, {}, {}, never, ["*"], true, never>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Optional `import { … }` block slot inside a `<dbx-docs-ui-example>`.
|
|
52
|
+
*
|
|
53
|
+
* The MCP scanner extracts the projected text as the example entry's optional
|
|
54
|
+
* `imports` field. Use this for the import lines a consumer would copy along
|
|
55
|
+
* with the runnable snippet.
|
|
56
|
+
*/
|
|
57
|
+
declare class DbxDocsUiExampleImportsComponent {
|
|
58
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DbxDocsUiExampleImportsComponent, never>;
|
|
59
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DbxDocsUiExampleImportsComponent, "dbx-docs-ui-example-imports", never, {}, {}, never, ["*"], true, never>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Optional footnotes slot inside a `<dbx-docs-ui-example>`.
|
|
64
|
+
*
|
|
65
|
+
* The MCP scanner extracts the projected content as the example entry's
|
|
66
|
+
* optional `notes` field, appended to `full`-depth output.
|
|
67
|
+
*/
|
|
68
|
+
declare class DbxDocsUiExampleNotesComponent {
|
|
69
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DbxDocsUiExampleNotesComponent, never>;
|
|
70
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DbxDocsUiExampleNotesComponent, "dbx-docs-ui-example-notes", never, {}, {}, never, ["*"], true, never>;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { DbxDocsUiExampleComponent, DbxDocsUiExampleContentComponent, DbxDocsUiExampleImportsComponent, DbxDocsUiExampleInfoComponent, DbxDocsUiExampleNotesComponent };
|