@repobit/dex-system-design 0.25.12 → 1.0.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.
- package/CHANGELOG.md +204 -0
- package/README.md +131 -8
- package/package.json +96 -13
- package/schemas/component-manifest.json +3294 -405
- package/schemas/manifest-omissions.json +173 -0
- package/src/blog/src/breakpoints.js +6 -6
- package/src/blog/src/content/blog-atoms-showcase.js +1 -1
- package/src/blog/src/content/blog-page-layout.js +2 -2
- package/src/blog/src/lib/article-toc.js +7 -7
- package/src/blog/src/shell/blog-shell.js +1 -1
- package/src/blog/src/tokens/blog.js +2 -2
- package/src/blog/src/tokens/core.js +34 -35
- package/src/blog/src/tokens/legacy.js +0 -9
- package/src/blog/tokens/blog.js +2 -2
- package/src/blog/tokens/core.js +34 -35
- package/src/blog/tokens/legacy.js +0 -9
- package/src/blog/tokens.css +36 -46
- package/src/components/accordion/accordion-bg.css.js +83 -59
- package/src/components/accordion/accordion-bg.js +29 -10
- package/src/components/accordion/accordion-bg.stories.js +67 -67
- package/src/components/accordion/accordion-keyboard.js +80 -0
- package/src/components/accordion/accordion.css.js +142 -80
- package/src/components/accordion/accordion.js +37 -10
- package/src/components/accordion/accordion.stories.js +7 -7
- package/src/components/agent-endpoints/agent-endpoints.css.js +36 -39
- package/src/components/agent-endpoints/agent-endpoints.js +30 -20
- package/src/components/agent-endpoints/agent-endpoints.stories.js +1 -1
- package/src/components/ai-guardian-demo.stories.js +91 -91
- package/src/components/alert/alert.css.js +198 -0
- package/src/components/alert/alert.js +103 -0
- package/src/components/alert/alert.stories.js +206 -0
- package/src/components/anchor/anchor-nav.css.js +213 -101
- package/src/components/anchor/anchor-nav.js +26 -40
- package/src/components/anchor/anchor.stories.js +22 -12
- package/src/components/annotation/annotation.css.js +58 -0
- package/src/components/annotation/annotation.js +67 -0
- package/src/components/annotation/annotation.stories.js +63 -0
- package/src/components/architecture.stories.js +285 -0
- package/src/components/atoms.stories.js +342 -0
- package/src/components/avatar/avatar.css.js +67 -0
- package/src/components/avatar/avatar.js +42 -0
- package/src/components/avatar/avatar.stories.js +95 -0
- package/src/components/awards/awards-flex.css.js +209 -23
- package/src/components/awards/awards-flex.js +66 -7
- package/src/components/awards/awards-flex.stories.js +1 -1
- package/src/components/awards/{awards-light.stories.js → awards-summary.stories.js} +54 -64
- package/src/components/awards/awards.css.js +116 -58
- package/src/components/awards/awards.js +102 -28
- package/src/components/awards/awards.stories.js +1 -1
- package/src/components/back/back.css.js +51 -22
- package/src/components/back/back.js +28 -7
- package/src/components/back/back.stories.js +9 -3
- package/src/components/badge/badge.css.js +158 -46
- package/src/components/badge/badge.js +62 -74
- package/src/components/badge/badge.stories.js +176 -248
- package/src/components/bento-grid/bento-grid.css.js +21 -16
- package/src/components/bento-grid/bento-grid.js +16 -4
- package/src/components/bento-grid/bento-grid.stories.js +19 -18
- package/src/components/bento-grid/bento-item.css.js +52 -28
- package/src/components/bento-grid/bento-item.js +2 -2
- package/src/components/blockquote/blockquote.css.js +47 -0
- package/src/components/blockquote/blockquote.js +29 -0
- package/src/components/blockquote/blockquote.stories.js +62 -0
- package/src/components/breadcrumb/breadcrumb.css.js +92 -22
- package/src/components/breadcrumb/breadcrumb.js +56 -11
- package/src/components/button/button.css.js +531 -161
- package/src/components/button/button.js +206 -214
- package/src/components/button/button.stories.js +322 -174
- package/src/components/caption/caption.css.js +21 -0
- package/src/components/caption/caption.js +31 -0
- package/src/components/caption/caption.stories.js +62 -0
- package/src/components/card-features/card-features.css.js +14 -22
- package/src/components/card-features/card-features.js +68 -9
- package/src/components/card-features/card-features.stories.js +11 -11
- package/src/components/cards/card.css.js +60 -81
- package/src/components/cards/card.js +56 -25
- package/src/components/cards/card.stories.js +39 -39
- package/src/components/carousel/carousel.css.js +93 -99
- package/src/components/carousel/carousel.js +32 -4
- package/src/components/checkbox/checkbox.css.js +111 -93
- package/src/components/checkbox/checkbox.js +64 -90
- package/src/components/checkbox/checkbox.stories.js +96 -29
- package/src/components/code/code.css.js +70 -0
- package/src/components/code/code.js +40 -0
- package/src/components/code/code.stories.js +73 -0
- package/src/components/compare/compare.css.js +179 -43
- package/src/components/compare/compare.js +52 -25
- package/src/components/compare/compare.stories.js +61 -4
- package/src/components/comparison-panel/comparison-panel.css.js +38 -51
- package/src/components/comparison-panel/comparison-panel.js +5 -4
- package/src/components/comparison-panel/comparison-panel.stories.js +1 -1
- package/src/components/compatibility-table/compatibility-table.css.js +180 -80
- package/src/components/compatibility-table/compatibility-table.js +37 -9
- package/src/components/control-alignment.stories.js +393 -0
- package/src/components/cta-banner/cta-banner.css.js +41 -13
- package/src/components/cta-banner/cta-banner.js +6 -5
- package/src/components/cta-banner/cta-banner.stories.js +43 -98
- package/src/components/display/display.css.js +25 -1
- package/src/components/display/display.js +46 -13
- package/src/components/display/display.stories.js +270 -40
- package/src/components/divider/divider-horizontal.js +21 -5
- package/src/components/divider/divider-vertical.js +15 -7
- package/src/components/divider/divider.css.js +2 -2
- package/src/components/divider/divider.stories.js +38 -34
- package/src/components/dropdown/dropdown.css.js +93 -126
- package/src/components/dropdown/dropdown.js +114 -34
- package/src/components/dropdown/dropdown.stories.js +56 -24
- package/src/components/features/features.css.js +24 -11
- package/src/components/features/features.js +7 -3
- package/src/components/features/features.stories.js +37 -37
- package/src/components/features-tab/features-tab.css.js +19 -8
- package/src/components/features-tab/features-tab.js +6 -5
- package/src/components/features-tab/features-tab.stories.js +23 -23
- package/src/components/fieldset/fieldset.css.js +30 -0
- package/src/components/fieldset/fieldset.js +28 -0
- package/src/components/fieldset/fieldset.stories.js +84 -0
- package/src/components/footer/footer-links-group.css.js +10 -14
- package/src/components/footer/footer-links-group.js +4 -3
- package/src/components/footer/footer-lp.css.js +59 -30
- package/src/components/footer/footer-lp.js +17 -12
- package/src/components/footer/footer-lp.stories.js +63 -75
- package/src/components/footer/footer-nav-menu.css.js +26 -4
- package/src/components/footer/footer-nav-menu.js +3 -2
- package/src/components/footer/footer.css.js +146 -264
- package/src/components/footer/footer.js +176 -106
- package/src/components/footer/footer.stories.js +9 -9
- package/src/components/footer/localeMap.js +1 -1
- package/src/components/grid/grid.css.js +1 -1
- package/src/components/grid/grid.js +49 -7
- package/src/components/grid/grid.stories.js +111 -0
- package/src/components/header/header-code.css.js +61 -51
- package/src/components/header/header-code.js +28 -14
- package/src/components/header/header-code.stories.js +5 -5
- package/src/components/header/header.css.js +655 -176
- package/src/components/header/header.js +269 -36
- package/src/components/header/header.stories.js +841 -18
- package/src/components/heading/heading.css.js +14 -17
- package/src/components/heading/heading.js +48 -33
- package/src/components/heading/heading.stories.js +27 -25
- package/src/components/help-text/help-text.css.js +21 -0
- package/src/components/help-text/help-text.js +25 -0
- package/src/components/help-text/help-text.stories.js +66 -0
- package/src/components/highlight/highlight.css.js +86 -64
- package/src/components/highlight/highlight.js +18 -27
- package/src/components/highlight/highlight.stories.js +14 -3
- package/src/components/icons/analysis-icon.js +6 -16
- package/src/components/icons/arrow-down-icon.js +6 -19
- package/src/components/icons/arrow-icon.js +44 -0
- package/src/components/icons/arrow-right-icon.js +30 -23
- package/src/components/icons/arrow-up-icon.js +19 -18
- package/src/components/icons/bd-ai-icon.js +1 -1
- package/src/components/icons/brand-marks.stories.js +279 -0
- package/src/components/icons/brand-signature-icon.js +42 -0
- package/src/components/icons/check-icon.js +27 -0
- package/src/components/icons/circle-info-icon.js +33 -0
- package/src/components/icons/close-icon.js +6 -18
- package/src/components/icons/family-icon.js +8 -20
- package/src/components/icons/globe-icon.js +6 -18
- package/src/components/icons/guide-icon.js +6 -18
- package/src/components/icons/icon-element.js +99 -0
- package/src/components/icons/icons.js +36 -0
- package/src/components/icons/icons.stories.js +184 -52
- package/src/components/icons/individual-icon.js +6 -18
- package/src/components/icons/laurel-icon.js +9 -19
- package/src/components/icons/machine-learning-icon.js +6 -17
- package/src/components/icons/marks.js +41 -0
- package/src/components/icons/minus-icon.js +7 -21
- package/src/components/icons/missing-icon.js +52 -0
- package/src/components/icons/plus-icon.js +7 -21
- package/src/components/icons/quote-icon.js +19 -19
- package/src/components/image/image.css.js +72 -25
- package/src/components/image/image.js +11 -6
- package/src/components/image/image.stories.js +2 -2
- package/src/components/input/custom-form.stories.js +214 -62
- package/src/components/input/input-clipboard.css.js +51 -144
- package/src/components/input/input-clipboard.js +31 -15
- package/src/components/input/input.css.js +8 -146
- package/src/components/input/input.js +93 -38
- package/src/components/install-options/install-options.css.js +84 -77
- package/src/components/install-options/install-options.js +33 -30
- package/src/components/install-options/install-options.stories.js +3 -3
- package/src/components/label/label.css.js +35 -0
- package/src/components/label/label.js +38 -0
- package/src/components/label/label.stories.js +82 -0
- package/src/components/light-carousel/light-carousel.css.js +111 -63
- package/src/components/light-carousel/light-carousel.js +85 -11
- package/src/components/light-carousel/light-carousel.stories.js +126 -82
- package/src/components/link/link.css.js +150 -99
- package/src/components/link/link.js +86 -11
- package/src/components/link/link.stories.js +124 -30
- package/src/components/list/list-item/list-item.css.js +74 -22
- package/src/components/list/list-item/list-item.js +32 -10
- package/src/components/list/list-item/list-item.stories.js +23 -23
- package/src/components/list/list.css.js +8 -2
- package/src/components/list/list.js +3 -2
- package/src/components/list/list.stories.js +222 -0
- package/src/components/modal/modal.css.js +114 -24
- package/src/components/modal/modal.js +83 -7
- package/src/components/modal/modal.stories.js +9 -9
- package/src/components/overview/overview.css.js +19 -14
- package/src/components/overview/overview.js +6 -5
- package/src/components/overview/overview.stories.js +10 -10
- package/src/components/page-switcher/page-switcher.css.js +97 -40
- package/src/components/page-switcher/page-switcher.js +28 -5
- package/src/components/page-switcher/page-switcher.stories.js +95 -0
- package/src/components/paragraph/paragraph.css.js +15 -10
- package/src/components/paragraph/paragraph.js +41 -44
- package/src/components/paragraph/paragraph.stories.js +56 -21
- package/src/components/picture/picture.css.js +103 -44
- package/src/components/picture/picture.js +100 -30
- package/src/components/picture/picture.stories.js +1 -1
- package/src/components/pricing-cards/new-pricing-card.js +3 -3
- package/src/components/pricing-cards/new-pricing.css.js +24 -15
- package/src/components/pricing-cards/pricing-card-actions.css.js +1 -1
- package/src/components/pricing-cards/pricing-card-actions.js +3 -4
- package/src/components/pricing-cards/pricing-card-container.css.js +3 -3
- package/src/components/pricing-cards/pricing-card-container.js +3 -2
- package/src/components/pricing-cards/pricing-card-header.css.js +10 -8
- package/src/components/pricing-cards/pricing-card-header.js +6 -7
- package/src/components/pricing-cards/pricing-card-pricing.css.js +16 -9
- package/src/components/pricing-cards/pricing-card-pricing.js +8 -6
- package/src/components/pricing-cards/pricing-card-show-more.css.js +11 -3
- package/src/components/pricing-cards/pricing-card-show-more.js +8 -3
- package/src/components/pricing-cards/pricing-card.css.js +244 -190
- package/src/components/pricing-cards/pricing-card.js +54 -70
- package/src/components/pricing-cards/pricing-feature-item.css.js +25 -8
- package/src/components/pricing-cards/pricing-feature-item.js +8 -3
- package/src/components/process-steps/process-steps.css.js +26 -14
- package/src/components/process-steps/process-steps.js +23 -6
- package/src/components/process-steps/process-steps.stories.js +1 -1
- package/src/components/progress/progress.css.js +80 -0
- package/src/components/progress/progress.js +42 -0
- package/src/components/progress/progress.stories.js +79 -0
- package/src/components/quick-answer/quick-answer.css.js +75 -13
- package/src/components/quick-answer/quick-answer.js +8 -3
- package/src/components/radio/radio.css.js +92 -128
- package/src/components/radio/radio.js +106 -127
- package/src/components/radio/radio.stories.js +54 -19
- package/src/components/review/review-grid.css.js +5 -6
- package/src/components/review/review-grid.js +14 -11
- package/src/components/review/review.css.js +11 -6
- package/src/components/review/review.js +3 -8
- package/src/components/shared/ensemble.css.js +93 -0
- package/src/components/shared/form-field.css.js +206 -0
- package/src/components/shared/prop-vocabulary.js +48 -0
- package/src/components/shared/token-scales.js +306 -0
- package/src/components/skeleton/skeleton.css.js +34 -0
- package/src/components/skeleton/skeleton.js +32 -0
- package/src/components/skeleton/skeleton.stories.js +70 -0
- package/src/components/spinner/spinner.css.js +62 -0
- package/src/components/spinner/spinner.js +38 -0
- package/src/components/spinner/spinner.stories.js +92 -0
- package/src/components/spotlight-section/spotlight-section.css.js +14 -13
- package/src/components/spotlight-section/spotlight-section.js +42 -39
- package/src/components/switch/switch.css.js +103 -0
- package/src/components/switch/switch.js +44 -0
- package/src/components/switch/switch.stories.js +86 -0
- package/src/components/tab-list/content-switcher.stories.js +189 -0
- package/src/components/tab-list/tab-list.css.js +250 -0
- package/src/components/tab-list/tab-list.js +184 -0
- package/src/components/tab-list/tab-list.stories.js +221 -0
- package/src/components/tabs/tabs.css.js +14 -123
- package/src/components/tabs/tabs.js +16 -19
- package/src/components/tabs/tabs.stories.js +95 -95
- package/src/components/tag/tag.css.js +54 -0
- package/src/components/tag/tag.js +32 -0
- package/src/components/tag/tag.stories.js +126 -0
- package/src/components/terminal/terminal-message.css.js +164 -60
- package/src/components/terminal/terminal-message.js +5 -5
- package/src/components/terminal/terminal-message.stories.js +70 -1
- package/src/components/termsOfUse/terms.css.js +25 -20
- package/src/components/termsOfUse/terms.js +13 -9
- package/src/components/termsOfUse/terms.stories.js +1 -1
- package/src/components/textarea/textarea.css.js +51 -0
- package/src/components/textarea/textarea.js +136 -0
- package/src/components/textarea/textarea.stories.js +191 -0
- package/src/components/tooltip/tooltip.css.js +75 -0
- package/src/components/tooltip/tooltip.js +156 -0
- package/src/components/tooltip/tooltip.stories.js +161 -0
- package/src/components/trust-panel/trust-panel.css.js +85 -33
- package/src/components/trust-panel/trust-panel.js +18 -10
- package/src/components/trust-panel/trust-panel.stories.js +1 -1
- package/src/components/ultimate-security-demo.stories.js +431 -0
- package/src/components/video/video.css.js +17 -0
- package/src/components/video/video.js +40 -0
- package/src/components/video/video.stories.js +106 -0
- package/src/components/video-player/video-player.css.js +67 -11
- package/src/components/video-player/video-player.js +35 -4
- package/src/components/video-player/video-player.stories.js +1 -1
- package/src/components/visual-alignment.stories.js +411 -0
- package/src/components/visually-hidden/visually-hidden.css.js +24 -0
- package/src/components/visually-hidden/visually-hidden.js +16 -0
- package/src/components/visually-hidden/visually-hidden.stories.js +56 -0
- package/src/stories/Button.stories.js +17 -17
- package/src/stories/Header.stories.js +10 -10
- package/src/stories/Page.js +1 -1
- package/src/stories/Page.stories.js +6 -6
- package/src/tokens/borders.stories.js +339 -0
- package/src/tokens/color-responsibilities.stories.js +227 -0
- package/src/tokens/dark-derivation.js +309 -0
- package/src/tokens/dark-findings.js +197 -0
- package/src/tokens/dark-mode.stories.js +207 -0
- package/src/tokens/dimension.stories.js +251 -0
- package/src/tokens/elevation.stories.js +143 -0
- package/src/tokens/focus.stories.js +276 -0
- package/src/tokens/fonts.css +20 -20
- package/src/tokens/fonts.stories.js +354 -374
- package/src/tokens/layout.css +25 -11
- package/src/tokens/motion.stories.js +231 -0
- package/src/tokens/shape.stories.js +272 -0
- package/src/tokens/spacing-rhythm.stories.js +359 -0
- package/src/tokens/spacing.stories.js +208 -703
- package/src/tokens/story-chrome.js +503 -0
- package/src/tokens/surfaces.stories.js +224 -0
- package/src/tokens/text-on-surface.stories.js +164 -0
- package/src/tokens/token-map.js +220 -0
- package/src/tokens/token-map.stories.js +257 -0
- package/src/tokens/token-purposes.js +266 -0
- package/src/tokens/tokens-grid.stories.js +388 -900
- package/src/tokens/tokens.css +1633 -1045
- package/src/tokens/tokens.js +1130 -492
- package/src/tokens/tokens.stories.js +137 -47
- package/src/tokens/type-ceiling-words.js +299 -0
- package/src/tokens/typography.stories.js +1003 -965
- package/src/tokens/vertical-rhythm.stories.js +224 -0
- package/src/components/awards/awards-icon.js +0 -56
- package/src/components/awards/awards-light.js +0 -240
- package/src/components/banner/banner.js +0 -60
- package/src/components/banner/banner.stories.js +0 -51
- package/src/components/button/icons.js +0 -24
- package/src/components/input/index.js +0 -0
- package/src/components/light-carousel/light-carousel-simple.css.js +0 -183
- package/src/components/light-carousel/light-carousel-simple.js +0 -74
- package/src/tokens/colors.js +0 -121
- package/src/tokens/typography.css.js +0 -207
- package/src/tokens/typography.js +0 -0
|
@@ -12,9 +12,7 @@ export default css`
|
|
|
12
12
|
grid-template-rows: auto auto;
|
|
13
13
|
column-gap: var(--spacing-48);
|
|
14
14
|
row-gap: 0;
|
|
15
|
-
|
|
16
|
-
margin: 0 auto;
|
|
17
|
-
padding: var(--spacing-48) var(--layout-ensemble-inline-padding, var(--spacing-24));
|
|
15
|
+
padding-block: var(--spacing-48);
|
|
18
16
|
box-sizing: border-box;
|
|
19
17
|
}
|
|
20
18
|
|
|
@@ -23,8 +21,6 @@ export default css`
|
|
|
23
21
|
grid-column: 1 / -1;
|
|
24
22
|
grid-row: 1;
|
|
25
23
|
margin: 0;
|
|
26
|
-
color: var(--color-neutral-1000);
|
|
27
|
-
line-height: var(--typography-lineHeight-tight, 1.1);
|
|
28
24
|
margin-bottom: var(--spacing-48);
|
|
29
25
|
}
|
|
30
26
|
|
|
@@ -39,9 +35,11 @@ export default css`
|
|
|
39
35
|
|
|
40
36
|
.bd-infopanel-description {
|
|
41
37
|
margin: 0;
|
|
42
|
-
color: var(--color-
|
|
38
|
+
color: var(--color-text-primary);
|
|
43
39
|
max-width: 46ch;
|
|
44
|
-
|
|
40
|
+
/* Keep: the max-width above is in ch, and ch resolves against THIS
|
|
41
|
+
element's font. Stating the family here is what pins the measure;
|
|
42
|
+
removing it would leave 46ch depending on whatever is inherited. */
|
|
45
43
|
font-family: var(--typography-fontFamily-sans);
|
|
46
44
|
}
|
|
47
45
|
|
|
@@ -69,24 +67,31 @@ export default css`
|
|
|
69
67
|
padding-bottom: 0;
|
|
70
68
|
}
|
|
71
69
|
|
|
70
|
+
/* --border-width-2, not a 2px literal. The 2px rule itself is deliberate --
|
|
71
|
+
it is the blue brand rule that separates each label/value pair, and
|
|
72
|
+
bd-trust-panel uses the same visual language for its statistics -- so this
|
|
73
|
+
is a token-category fix, not a design change. --border-width-2 is 2px, so
|
|
74
|
+
nothing moves. Removes the one baselined finding recorded against this
|
|
75
|
+
file, border-width-literal|overview.css.js|border-top: 2px. */
|
|
72
76
|
.bd-infopanel-divider {
|
|
73
|
-
border-top:
|
|
77
|
+
border-top: var(--border-width-2) solid var(--color-border-brand);
|
|
74
78
|
margin-bottom: var(--spacing-16);
|
|
75
79
|
}
|
|
76
80
|
|
|
77
81
|
.bd-infopanel-label {
|
|
78
82
|
margin: 0;
|
|
79
|
-
color: var(--color-
|
|
83
|
+
color: var(--color-text-muted);
|
|
84
|
+
/* Load-bearing, despite sitting on a bd-p host where the type axes are
|
|
85
|
+
inert. Those axes are dead because bd-p sets them on its own inner p;
|
|
86
|
+
text-transform it never sets, so this value inherits down to the
|
|
87
|
+
rendered text like any inherited property would. Deleting it
|
|
88
|
+
un-uppercases the label. See scripts/atom-inert-properties.json. */
|
|
80
89
|
text-transform: uppercase;
|
|
81
|
-
letter-spacing: .1em;
|
|
82
|
-
font-family: var(--typography-fontFamily-mono, monospace);
|
|
83
|
-
font-size: var(--typography-fontSize-xxs);
|
|
84
90
|
}
|
|
85
91
|
|
|
86
92
|
.bd-infopanel-value {
|
|
87
93
|
margin: 0;
|
|
88
|
-
color: var(--color-
|
|
89
|
-
font-weight: var(--typography-fontWeight-bold, 700);
|
|
94
|
+
color: var(--color-text-primary);
|
|
90
95
|
}
|
|
91
96
|
|
|
92
97
|
/* === RESPONSIVE === */
|
|
@@ -3,6 +3,7 @@ import { tokens } from "../../tokens/tokens.js";
|
|
|
3
3
|
import "../heading/heading.js";
|
|
4
4
|
import "../paragraph/paragraph.js";
|
|
5
5
|
import infoPanelCSS from "./overview.css.js";
|
|
6
|
+
import { ensembleCSS } from "../shared/ensemble.css.js";
|
|
6
7
|
|
|
7
8
|
class Overview extends LitElement {
|
|
8
9
|
static properties = {
|
|
@@ -11,7 +12,7 @@ class Overview extends LitElement {
|
|
|
11
12
|
facts : { type: Array } // [{ label: String, value: String }]
|
|
12
13
|
};
|
|
13
14
|
|
|
14
|
-
static styles = [tokens, infoPanelCSS];
|
|
15
|
+
static styles = [tokens, ensembleCSS, infoPanelCSS];
|
|
15
16
|
|
|
16
17
|
constructor() {
|
|
17
18
|
super();
|
|
@@ -22,7 +23,7 @@ class Overview extends LitElement {
|
|
|
22
23
|
|
|
23
24
|
render() {
|
|
24
25
|
return html`
|
|
25
|
-
<div class="bd-infopanel-container">
|
|
26
|
+
<div class="bd-ensemble bd-infopanel-container">
|
|
26
27
|
${this.title
|
|
27
28
|
? html`
|
|
28
29
|
<bd-h as="h2" class="bd-infopanel-title">
|
|
@@ -34,7 +35,7 @@ class Overview extends LitElement {
|
|
|
34
35
|
<div class="bd-infopanel-left">
|
|
35
36
|
${this.description
|
|
36
37
|
? html`
|
|
37
|
-
<bd-p
|
|
38
|
+
<bd-p variant="large" class="bd-infopanel-description">
|
|
38
39
|
<slot name="description">${this.description}</slot>
|
|
39
40
|
</bd-p>
|
|
40
41
|
`
|
|
@@ -48,8 +49,8 @@ class Overview extends LitElement {
|
|
|
48
49
|
(fact) => html`
|
|
49
50
|
<div class="bd-infopanel-row">
|
|
50
51
|
<div class="bd-infopanel-divider"></div>
|
|
51
|
-
<bd-p
|
|
52
|
-
<bd-p
|
|
52
|
+
<bd-p variant="xsmall" class="bd-infopanel-label">${fact.label}</bd-p>
|
|
53
|
+
<bd-p variant="regular" class="bd-infopanel-value">${fact.value}</bd-p>
|
|
53
54
|
</div>
|
|
54
55
|
`
|
|
55
56
|
)}
|
|
@@ -2,8 +2,8 @@ import { html } from "lit";
|
|
|
2
2
|
import "./overview.js";
|
|
3
3
|
|
|
4
4
|
export default {
|
|
5
|
-
title : "
|
|
6
|
-
component : "bd-
|
|
5
|
+
title : "Modules/Overview",
|
|
6
|
+
component : "bd-overview",
|
|
7
7
|
tags : ["autodocs"],
|
|
8
8
|
parameters: {
|
|
9
9
|
layout: "fullscreen",
|
|
@@ -16,7 +16,7 @@ labeled facts on the right, each row separated by a thin top border line — a
|
|
|
16
16
|
|
|
17
17
|
### Usage
|
|
18
18
|
\`\`\`html
|
|
19
|
-
<bd-
|
|
19
|
+
<bd-overview
|
|
20
20
|
title="What is AI Guardian?"
|
|
21
21
|
description="AI Guardian is a Bitdefender security product that helps protect people and organisations from the risks of autonomous AI agents — prompt injection, unsafe tool use, data leakage, and unauthorised actions. It adds a baseline security model of policies, permissions, and auditing, guardrails for tool execution, and monitoring and response workflows."
|
|
22
22
|
.facts=\${[
|
|
@@ -25,7 +25,7 @@ labeled facts on the right, each row separated by a thin top border line — a
|
|
|
25
25
|
{ label: "RUNS AS", value: "Background service" },
|
|
26
26
|
{ label: "VERDICTS", value: "Allowed / Flagged / Blocked" }
|
|
27
27
|
]}
|
|
28
|
-
></bd-
|
|
28
|
+
></bd-overview>
|
|
29
29
|
\`\`\`
|
|
30
30
|
|
|
31
31
|
### Attributes
|
|
@@ -54,11 +54,11 @@ labeled facts on the right, each row separated by a thin top border line — a
|
|
|
54
54
|
};
|
|
55
55
|
|
|
56
56
|
const render = (args) => html`
|
|
57
|
-
<bd-
|
|
57
|
+
<bd-overview
|
|
58
58
|
title=${args.title}
|
|
59
59
|
description=${args.description}
|
|
60
60
|
.facts=${args.facts}
|
|
61
|
-
></bd-
|
|
61
|
+
></bd-overview>
|
|
62
62
|
`;
|
|
63
63
|
|
|
64
64
|
export const Default = {
|
|
@@ -150,16 +150,16 @@ export const NoDescription = {
|
|
|
150
150
|
export const SlottedContent = {
|
|
151
151
|
name : "Slotted Title, Description, and Extra Facts",
|
|
152
152
|
render: () => html`
|
|
153
|
-
<bd-
|
|
153
|
+
<bd-overview>
|
|
154
154
|
<span slot="title">Custom <em>slotted</em> title</span>
|
|
155
155
|
<span slot="description">Custom slotted description with <strong>inline markup</strong>.</span>
|
|
156
156
|
|
|
157
157
|
<div slot="facts" class="bd-infopanel-row" style="display:flex; flex-direction:column; gap:4px; padding-top:16px;">
|
|
158
|
-
<div style="border-top: 1px solid
|
|
159
|
-
<span style="text-transform:uppercase; letter-spacing:0.06em; font-size:12px; color
|
|
158
|
+
<div style="border-top: 1px solid var(--color-border-brand); margin-bottom:16px;"></div>
|
|
159
|
+
<span style="text-transform:uppercase; letter-spacing:0.06em; font-size:12px; color:var(--color-text-brand);">EXTRA</span>
|
|
160
160
|
<strong>A manually slotted fact row</strong>
|
|
161
161
|
</div>
|
|
162
|
-
</bd-
|
|
162
|
+
</bd-overview>
|
|
163
163
|
`,
|
|
164
164
|
parameters: {
|
|
165
165
|
docs: {
|
|
@@ -5,92 +5,149 @@ export const pageSwitcherStyles = css`
|
|
|
5
5
|
display: block;
|
|
6
6
|
position: sticky;
|
|
7
7
|
top: 0;
|
|
8
|
-
z-index:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
z-index: var(--z-sticky);
|
|
9
|
+
/* --color-surface-default, the role, not --color-neutral-0, the primitive
|
|
10
|
+
it resolves to. Same value; the category is the point, and CLAUDE.md's
|
|
11
|
+
"same primitive value is not same semantic meaning" section exists for
|
|
12
|
+
exactly this. Found by check:color-coverage once the background shorthand came into
|
|
13
|
+
its scope -- it had been invisible because the check counted
|
|
14
|
+
background-color: and this package almost never writes that. */
|
|
15
|
+
background: var(--color-surface-default);
|
|
16
|
+
border-bottom: var(--border-width-1) solid var(--color-border-container);
|
|
12
17
|
}
|
|
13
18
|
|
|
14
19
|
.inner {
|
|
15
|
-
max-width: 1200px;
|
|
16
|
-
margin-inline: auto;
|
|
17
20
|
padding-block: var(--spacing-16);
|
|
18
|
-
padding-inline: var(--spacing-24);
|
|
19
21
|
box-sizing: border-box;
|
|
20
22
|
display: flex;
|
|
21
23
|
align-items: center;
|
|
22
24
|
justify-content: space-between;
|
|
23
|
-
|
|
25
|
+
/* The logo is a fixed 126px and the row could not give way, so on a 320px
|
|
26
|
+
screen the nav simply carried on past the edge. Letting the row wrap puts
|
|
27
|
+
the navigation under the brand when there is no room for both, and does
|
|
28
|
+
nothing at any width where they fit -- which is why there is no media
|
|
29
|
+
query here: the layout can tell when it has run out of room. */
|
|
30
|
+
flex-wrap: wrap;
|
|
31
|
+
gap: var(--spacing-16) var(--spacing-32);
|
|
24
32
|
}
|
|
25
33
|
|
|
26
34
|
.logo {
|
|
35
|
+
/* no role: a wordmark, not running text. Picking a text role for it would
|
|
36
|
+
assert a relationship to the type scale that a brand mark does not
|
|
37
|
+
have. The nearest role by value is heading-h6, which is a heading. */
|
|
27
38
|
font-size: var(--typography-fontSize-lg);
|
|
39
|
+
/* no role: a wordmark, not running text. Picking a text role for it would
|
|
40
|
+
assert a relationship to the type scale that a brand mark does not
|
|
41
|
+
have. The nearest role by value is heading-h6, which is a heading. */
|
|
28
42
|
font-weight: var(--typography-fontWeight-semibold);
|
|
29
|
-
color: var(--color-
|
|
43
|
+
color: var(--color-text-primary);
|
|
30
44
|
}
|
|
31
45
|
|
|
32
|
-
.logo span
|
|
33
|
-
|
|
34
|
-
|
|
46
|
+
/* No ".logo span" rule. .logo is the class this component puts on a
|
|
47
|
+
bd-ai-icon, and that element renders a single svg in its own shadow root --
|
|
48
|
+
there is no span for a descendant selector to reach, and it never matched
|
|
49
|
+
in 4 shadow roots across 556 stories. The mark colours itself from the
|
|
50
|
+
token in its own path fill. */
|
|
35
51
|
|
|
36
52
|
nav {
|
|
37
53
|
display: flex;
|
|
38
54
|
align-items: center;
|
|
55
|
+
/* This row gap was already declared for two lines of links and could never
|
|
56
|
+
apply, because nothing was allowed to wrap. Now it can. */
|
|
57
|
+
flex-wrap: wrap;
|
|
39
58
|
gap: var(--spacing-16) var(--spacing-32);
|
|
40
59
|
}
|
|
41
60
|
|
|
61
|
+
/* .page-link is the class this component puts on a bd-link HOST, so it can
|
|
62
|
+
style the host's box and nothing inside it. The ink is bd-link's, and the
|
|
63
|
+
six colour declarations that used to stand here were all overridden by the
|
|
64
|
+
atom's own variant rules on the anchor one level down. Measured at 1440,
|
|
65
|
+
rest and hover, current and not, after the family review moved every item
|
|
66
|
+
to variant="primary":
|
|
67
|
+
|
|
68
|
+
not current, rest --color-text-brand rgb(0, 89, 214)
|
|
69
|
+
not current, hover --color-action-primary-active rgb(0, 69, 173)
|
|
70
|
+
current, rest --color-text-primary rgb(21, 23, 25), weight 700
|
|
71
|
+
current, hover --color-text-primary rgb(21, 23, 25), weight 700
|
|
72
|
+
|
|
73
|
+
The last row is the one that changed behaviour rather than value: the
|
|
74
|
+
current item used to turn blue under the pointer, because
|
|
75
|
+
.bd-link--primary:hover outweighed .bd-link--active. bd-link now declares
|
|
76
|
+
.bd-link--active:hover and it holds.
|
|
77
|
+
|
|
78
|
+
None of those was what this sheet declared: the host went to
|
|
79
|
+
--color-action-primary-hover on hover and no text ever read it, and the
|
|
80
|
+
semibold on .page-link.active lost to the atom's .bd-link--active bold.
|
|
81
|
+
What is left here is the box -- position, padding, the indicator -- and the
|
|
82
|
+
ink is asked for through the atom's API, which is where it renders. */
|
|
42
83
|
.page-link {
|
|
43
84
|
position: relative;
|
|
44
85
|
text-decoration: none !important;
|
|
45
|
-
color: var(--color-neutral-900);
|
|
46
|
-
font-weight: var(--typography-fontWeight-normal);
|
|
47
|
-
padding: var(--spacing-10) var(--spacing-0);
|
|
48
86
|
display: inline-block;
|
|
49
87
|
font-size: var(--typography-body-regular-fontSize);
|
|
50
88
|
font-family: var(--typography-body-regular-fontFamily);
|
|
51
|
-
transition: color var(--transition-duration-fast) var(--transition-easing-smooth);
|
|
52
89
|
}
|
|
53
90
|
|
|
54
|
-
.
|
|
55
|
-
font-weight: var(--typography-fontWeight-semibold);
|
|
56
|
-
color: var(--color-neutral-900);
|
|
57
|
-
}
|
|
91
|
+
/* The padding belongs to the PART, not to the host.
|
|
58
92
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
93
|
+
A host's padding does not extend the anchor inside it, so this rule used
|
|
94
|
+
to build a 44px-tall row around a 24px-tall target: measured 93x44 on the
|
|
95
|
+
host with a 93x24 <a> inside it, and elementsFromPoint 4px below the top
|
|
96
|
+
edge came back bd-page-switcher > bd-root > div with no <a> in the stack at
|
|
97
|
+
all. The top and bottom 10px of every item were dead, 45% of the height a
|
|
98
|
+
reader aims at.
|
|
64
99
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
100
|
+
It is also why the focus ring wrapped the glyphs rather than the item: the
|
|
101
|
+
ring is drawn on whatever element is focusable, and that was the 24px
|
|
102
|
+
anchor. One boundary, two symptoms.
|
|
69
103
|
|
|
70
|
-
|
|
71
|
-
|
|
104
|
+
bd-breadcrumb already fixed exactly this by moving its padding onto
|
|
105
|
+
::part(link) -- its comment records a 343x40 row whose focusable anchor
|
|
106
|
+
was 43x24 -- and this is the same move. Layout is unchanged: the host has
|
|
107
|
+
no padding now but wraps an anchor that does, so it still measures 44px
|
|
108
|
+
and the indicator's offset still lands on the bar's bottom edge. */
|
|
109
|
+
.page-link::part(link) {
|
|
110
|
+
padding: var(--spacing-10) var(--spacing-0);
|
|
72
111
|
}
|
|
73
112
|
|
|
113
|
+
/* The selected-item underline, through the role that names it. This was the
|
|
114
|
+
third spelling of the same line -- Components/Tab List and the anchor nav are
|
|
115
|
+
the two the --indicator-* comment already names -- and it is the one the
|
|
116
|
+
token comment says the role exists to end. Height, colour and duration
|
|
117
|
+
resolve to the same values it declared by hand; the easing does not, and
|
|
118
|
+
that drift is the reason the role was named.
|
|
119
|
+
|
|
120
|
+
The offset is the inner's padding-bottom, so the indicator lands on the
|
|
121
|
+
bar's bottom edge. This inner pads 16, and the 14 that stood here was
|
|
122
|
+
close enough to look right -- the indicator sat 2px shy of the edge --
|
|
123
|
+
which is how the number survived being copied into bd-anchor-nav, which
|
|
124
|
+
pads 10, and put the indicator outside that bar entirely.
|
|
125
|
+
|
|
126
|
+
Measured: link box bottom at 60, indicator was 71-74 against an inner
|
|
127
|
+
bottom edge of 76; now 73-76. */
|
|
74
128
|
.page-link::after {
|
|
75
129
|
content: "";
|
|
76
130
|
position: absolute;
|
|
77
131
|
left: var(--spacing-0);
|
|
78
|
-
bottom: calc(-1 * var(--spacing-
|
|
132
|
+
bottom: calc(-1 * var(--spacing-16));
|
|
79
133
|
width: 0%;
|
|
80
|
-
height: var(--
|
|
81
|
-
background-color: var(--color
|
|
82
|
-
transition: width var(--
|
|
134
|
+
height: var(--indicator-underline-height);
|
|
135
|
+
background-color: var(--indicator-color);
|
|
136
|
+
transition: width var(--indicator-underline-duration) var(--indicator-underline-easing);
|
|
83
137
|
}
|
|
84
138
|
|
|
85
139
|
.page-link.active::after {
|
|
86
140
|
width: 100%;
|
|
87
141
|
}
|
|
88
142
|
|
|
89
|
-
.page-link:focus-visible
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
143
|
+
/* No .page-link:focus-visible rule. .page-link is the class this component
|
|
144
|
+
puts on a bd-link HOST, and the focusable anchor lives inside bd-link's own
|
|
145
|
+
shadow root -- measured: 2 .page-link elements, both bd-link, neither
|
|
146
|
+
focusable, each with its own shadow root. The rule that stood here could
|
|
147
|
+
never match, so the outline it declared, the misspelled
|
|
148
|
+
--bd-accesibility-focus alias behind it and the two spacing steps it used
|
|
149
|
+
as an outline width and offset never rendered at all. bd-link already
|
|
150
|
+
carries the one focus ring, verified here by keyboard. */
|
|
94
151
|
|
|
95
152
|
@media (prefers-reduced-motion: reduce) {
|
|
96
153
|
.page-link::after {
|
|
@@ -3,13 +3,37 @@ import { tokens } from "../../tokens/tokens.js";
|
|
|
3
3
|
import "../icons/bd-ai-icon.js";
|
|
4
4
|
import "../link/link.js";
|
|
5
5
|
import { pageSwitcherStyles } from "./page-switcher.css.js";
|
|
6
|
+
import { ensembleCSS } from "../shared/ensemble.css.js";
|
|
6
7
|
|
|
8
|
+
/**
|
|
9
|
+
* The product-level page navigation: a brand mark and one link per page, with
|
|
10
|
+
* the page you are on marked.
|
|
11
|
+
*
|
|
12
|
+
* Two notes on the markup below, both measured rather than assumed.
|
|
13
|
+
*
|
|
14
|
+
* The ink is Position 2 of the wayfinding family review: colour means
|
|
15
|
+
* AVAILABLE and neutral means current. Every item is variant="primary", so a
|
|
16
|
+
* resting item is --color-text-brand and hovers to --color-action-primary-active;
|
|
17
|
+
* the current one carries `active`, which drops it to --color-text-primary at
|
|
18
|
+
* weight 700 and takes the 3px indicator. bd-link's new .bd-link--active:hover
|
|
19
|
+
* keeps it there under the pointer.
|
|
20
|
+
*
|
|
21
|
+
* The variant is no longer switched per item. It used to be primary for the
|
|
22
|
+
* current one and secondary for the rest, which made the current item the only
|
|
23
|
+
* blue one -- the inverse of what the indicator says -- and left the resting
|
|
24
|
+
* items on the muted ramp. One variant plus `active` is the same information
|
|
25
|
+
* with one fewer thing to keep in step.
|
|
26
|
+
*
|
|
27
|
+
* `aria-current` is `page`, not the generic `true`. These items are pages; the
|
|
28
|
+
* anchor nav's items are positions inside one page and say `location`. Both are
|
|
29
|
+
* current-location markers and they are not the same claim.
|
|
30
|
+
*/
|
|
7
31
|
class BdPageSwitcher extends LitElement {
|
|
8
32
|
static properties = {
|
|
9
33
|
items: { type: Array } // [{ title, href, active }]
|
|
10
34
|
};
|
|
11
35
|
|
|
12
|
-
static styles = [tokens, pageSwitcherStyles];
|
|
36
|
+
static styles = [tokens, ensembleCSS, pageSwitcherStyles];
|
|
13
37
|
|
|
14
38
|
constructor() {
|
|
15
39
|
super();
|
|
@@ -18,18 +42,17 @@ class BdPageSwitcher extends LitElement {
|
|
|
18
42
|
|
|
19
43
|
render() {
|
|
20
44
|
return html`
|
|
21
|
-
<div class="inner">
|
|
45
|
+
<div class="bd-ensemble inner">
|
|
22
46
|
<bd-ai-icon class="logo" width="200" height="24"></bd-ai-icon>
|
|
23
47
|
|
|
24
48
|
<nav aria-label="Product navigation">
|
|
25
49
|
${this.items.map(({ title, href, active }) => html`
|
|
26
50
|
<bd-link
|
|
27
51
|
href=${href}
|
|
28
|
-
|
|
52
|
+
variant="primary"
|
|
29
53
|
no-underline
|
|
30
|
-
color="var(--color-neutral-900)"
|
|
31
54
|
?active=${active}
|
|
32
|
-
aria-current=${active ? "
|
|
55
|
+
aria-current=${active ? "page" : nothing}
|
|
33
56
|
class="page-link ${active ? "active" : ""}"
|
|
34
57
|
>${title || nothing}</bd-link>
|
|
35
58
|
`)}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import './page-switcher.js';
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title : 'Components/Page Switcher',
|
|
6
|
+
tags : ['autodocs'],
|
|
7
|
+
parameters: {
|
|
8
|
+
docs: {
|
|
9
|
+
description: {
|
|
10
|
+
component: `
|
|
11
|
+
**Page Switcher** is the sticky product bar that carries the brand mark and a
|
|
12
|
+
short set of sibling pages. One of them is current.
|
|
13
|
+
|
|
14
|
+
\`\`\`html
|
|
15
|
+
<bd-page-switcher
|
|
16
|
+
.items=\${[
|
|
17
|
+
{ title: 'AI Guardian', href: '/ai-guardian', active: true },
|
|
18
|
+
{ title: 'Skill Scanner', href: '/skill-scanner' }
|
|
19
|
+
]}
|
|
20
|
+
></bd-page-switcher>
|
|
21
|
+
\`\`\`
|
|
22
|
+
|
|
23
|
+
### Layout
|
|
24
|
+
|
|
25
|
+
The brand mark is a fixed width and the row wraps when the two cannot sit side
|
|
26
|
+
by side, which puts the navigation under the brand rather than off the side of
|
|
27
|
+
the screen. There is no breakpoint involved: the row wraps when it runs out of
|
|
28
|
+
room, so the same rule holds for a long label on a wide screen as for a short
|
|
29
|
+
one on a narrow screen.
|
|
30
|
+
|
|
31
|
+
Until P5D.1 the row could not wrap, and the component ran 22px off a 320px
|
|
32
|
+
viewport. It had no story of its own, so the only place that was visible was
|
|
33
|
+
inside a demo — which is why these stories exist.
|
|
34
|
+
`
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const ITEMS = [
|
|
41
|
+
{ title: 'AI Guardian', href: '#ai-guardian', active: true },
|
|
42
|
+
{ title: 'Skill Scanner', href: '#skill-scanner' }
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
const render = items => html`<bd-page-switcher .items=${items}></bd-page-switcher>`;
|
|
46
|
+
|
|
47
|
+
export const Default = {
|
|
48
|
+
name : 'Default',
|
|
49
|
+
render : () => render(ITEMS),
|
|
50
|
+
parameters: {
|
|
51
|
+
docs: { description: { story: 'Brand and navigation on one row, which is what fits at any usual width.' } }
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export const Narrow = {
|
|
56
|
+
name : 'Narrow (320px)',
|
|
57
|
+
render : () => render(ITEMS),
|
|
58
|
+
parameters: {
|
|
59
|
+
viewport: { defaultViewport: 'mobile1' },
|
|
60
|
+
docs : {
|
|
61
|
+
description: {
|
|
62
|
+
story: 'The width the component used to overflow at. The row wraps instead, and nothing leaves the viewport.'
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export const ThreePages = {
|
|
69
|
+
name : 'Three pages',
|
|
70
|
+
render: () => render([
|
|
71
|
+
{ title: 'AI Guardian', href: '#ai-guardian', active: true },
|
|
72
|
+
{ title: 'Skill Scanner', href: '#skill-scanner' },
|
|
73
|
+
{ title: 'Threat Map', href: '#threat-map' }
|
|
74
|
+
]),
|
|
75
|
+
parameters: {
|
|
76
|
+
docs: { description: { story: 'More siblings than the demo carries, so the wrap is exercised earlier.' } }
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export const LongLabels = {
|
|
81
|
+
name : 'Long labels',
|
|
82
|
+
render: () => render([
|
|
83
|
+
{ title: 'Bitdefender AI Guardian for Home', href: '#one', active: true },
|
|
84
|
+
{ title: 'Agentic Skill Scanner and Report', href: '#two' }
|
|
85
|
+
]),
|
|
86
|
+
parameters: {
|
|
87
|
+
docs: {
|
|
88
|
+
description: {
|
|
89
|
+
story: `Labels long enough to overflow a wide screen if the row could not give
|
|
90
|
+
way. This is the case a breakpoint would have missed, because the width
|
|
91
|
+
that matters is the content's, not the window's.`
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
@@ -1,47 +1,52 @@
|
|
|
1
1
|
import { css } from "lit";
|
|
2
2
|
|
|
3
3
|
export default css`
|
|
4
|
+
/* --color-text-primary, not --color-neutral-1000. Body copy was set in pure
|
|
5
|
+
black while bd-display used neutral-900 and bd-li neutral-700, so a
|
|
6
|
+
heading, its paragraph and its list rendered in three different inks. The
|
|
7
|
+
line below the font-family used to carry the intended value as
|
|
8
|
+
a // prefix, which CSS does not treat as a comment — the parser dropped
|
|
9
|
+
it, and the pure black above won by default. */
|
|
4
10
|
:host {
|
|
5
11
|
display: block;
|
|
6
|
-
color: var(--bd-paragraph-color, var(--color-
|
|
12
|
+
color: var(--bd-paragraph-color, var(--color-text-primary));
|
|
7
13
|
}
|
|
8
14
|
|
|
9
15
|
p {
|
|
10
16
|
all: unset;
|
|
11
17
|
display: block;
|
|
12
|
-
font-family: var(--typography-body-regular-fontFamily
|
|
13
|
-
|
|
14
|
-
margin-bottom: var(--spacing-md);
|
|
18
|
+
font-family: var(--typography-body-regular-fontFamily);
|
|
19
|
+
margin-bottom: var(--spacing-16);
|
|
15
20
|
}
|
|
16
21
|
|
|
17
22
|
/* === Font Size Variants === */
|
|
18
|
-
:host([
|
|
23
|
+
:host([variant="large"]) p {
|
|
19
24
|
font-size: var(--typography-body-large-fontSize);
|
|
20
25
|
font-weight: var(--typography-body-large-fontWeight);
|
|
21
26
|
line-height: var(--typography-body-large-lineHeight);
|
|
22
27
|
letter-spacing: var(--typography-body-large-letterSpacing);
|
|
23
28
|
}
|
|
24
29
|
|
|
25
|
-
:host([
|
|
30
|
+
:host([variant="regular"]) p {
|
|
26
31
|
font-size: var(--typography-body-regular-fontSize);
|
|
27
32
|
font-weight: var(--typography-body-regular-fontWeight);
|
|
28
33
|
line-height: var(--typography-body-regular-lineHeight);
|
|
29
34
|
letter-spacing: var(--typography-body-regular-letterSpacing);
|
|
30
35
|
}
|
|
31
36
|
|
|
32
|
-
:host([
|
|
37
|
+
:host([variant="small"]) p {
|
|
33
38
|
font-size: var(--typography-body-small-fontSize);
|
|
34
39
|
font-weight: var(--typography-body-small-fontWeight);
|
|
35
40
|
line-height: var(--typography-body-small-lineHeight);
|
|
36
41
|
letter-spacing: var(--typography-body-small-letterSpacing);
|
|
37
42
|
}
|
|
38
|
-
:host([
|
|
39
|
-
font-size: var(--typography-
|
|
43
|
+
:host([variant="xsmall"]) p {
|
|
44
|
+
font-size: var(--typography-body-xsmall-fontSize);
|
|
40
45
|
font-weight: var(--typography-body-small-fontWeight);
|
|
41
46
|
line-height: var(--typography-body-small-lineHeight);
|
|
42
47
|
letter-spacing: var(--typography-body-small-letterSpacing);
|
|
43
48
|
}
|
|
44
|
-
:host([
|
|
49
|
+
:host([variant="lead"]) p {
|
|
45
50
|
font-size: var(--typography-body-lead-fontSize);
|
|
46
51
|
font-weight: var(--typography-body-lead-fontWeight);
|
|
47
52
|
line-height: var(--typography-body-lead-lineHeight);
|