@repobit/dex-system-design 0.25.11 → 0.26.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 +195 -0
- package/README.md +131 -8
- package/package.json +95 -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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LitElement, html } from "lit";
|
|
2
|
-
|
|
2
|
+
// Installs the design tokens into document scope; see src/tokens/tokens.js
|
|
3
|
+
import "../../tokens/tokens.js";
|
|
3
4
|
import "../heading/heading.js";
|
|
4
5
|
import "../paragraph/paragraph.js";
|
|
5
6
|
import highlightCSS from "./highlight.css.js";
|
|
@@ -11,7 +12,7 @@ class BdHighlightSection extends LitElement {
|
|
|
11
12
|
as : { type: String }
|
|
12
13
|
};
|
|
13
14
|
|
|
14
|
-
static styles = [
|
|
15
|
+
static styles = [highlightCSS];
|
|
15
16
|
|
|
16
17
|
constructor() {
|
|
17
18
|
super();
|
|
@@ -25,7 +26,7 @@ class BdHighlightSection extends LitElement {
|
|
|
25
26
|
const highlightText = this.highlightText || "";
|
|
26
27
|
|
|
27
28
|
const subtitleTemplate = this.subTitle
|
|
28
|
-
? html`<bd-p
|
|
29
|
+
? html`<bd-p variant="small" class="sub-title">${this.subTitle}</bd-p>`
|
|
29
30
|
: null;
|
|
30
31
|
|
|
31
32
|
if (!highlightText || !fullText.includes(highlightText)) {
|
|
@@ -43,39 +44,29 @@ class BdHighlightSection extends LitElement {
|
|
|
43
44
|
${subtitleTemplate}
|
|
44
45
|
<bd-h as="${this.as}" class="headline">
|
|
45
46
|
${before}
|
|
46
|
-
<span class="highlight"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
<span class="highlight-deco left">
|
|
50
|
-
<svg class="highlight-svg-ellipse-top" viewBox="0 0 8 8">
|
|
47
|
+
<span class="highlight"><span class="highlight-anchor"
|
|
48
|
+
><span class="highlight-deco left"
|
|
49
|
+
><svg class="highlight-svg-ellipse-top" viewBox="0 0 8 8">
|
|
51
50
|
<ellipse cx="4" cy="4" rx="4" ry="4" />
|
|
52
51
|
</svg>
|
|
53
|
-
<svg class="highlight-svg-rect" viewBox="0 0 2 42">
|
|
52
|
+
<svg class="highlight-svg-rect" viewBox="0 0 2 42" preserveAspectRatio="none">
|
|
53
|
+
<rect x="0" y="0" width="2" height="42" />
|
|
54
|
+
</svg></span
|
|
55
|
+
></span
|
|
56
|
+
><span class="highlight-text">${highlightText}</span><span class="highlight-anchor"
|
|
57
|
+
><span class="highlight-deco right"
|
|
58
|
+
><svg class="highlight-svg-rect" viewBox="0 0 2 42" preserveAspectRatio="none">
|
|
54
59
|
<rect x="0" y="0" width="2" height="42" />
|
|
55
60
|
</svg>
|
|
56
|
-
|
|
57
|
-
|
|
61
|
+
<svg class="highlight-svg-ellipse-bottom" viewBox="0 0 8 8">
|
|
62
|
+
<ellipse cx="4" cy="4" rx="4" ry="4" />
|
|
63
|
+
</svg></span
|
|
64
|
+
></span></span>
|
|
58
65
|
${after}
|
|
59
66
|
</bd-h>
|
|
60
67
|
`;
|
|
61
68
|
}
|
|
62
69
|
|
|
63
|
-
updated() {
|
|
64
|
-
const anchor = this.renderRoot.querySelector(".highlight-right-anchor");
|
|
65
|
-
if (!anchor) return;
|
|
66
|
-
|
|
67
|
-
const deco = document.createElement("span");
|
|
68
|
-
deco.classList.add("highlight-deco", "right");
|
|
69
|
-
deco.innerHTML = `
|
|
70
|
-
<svg class="highlight-svg-rect" viewBox="0 0 2 42">
|
|
71
|
-
<rect x="0" y="0" width="2" height="42" />
|
|
72
|
-
</svg>
|
|
73
|
-
<svg class="highlight-svg-ellipse-bottom" viewBox="0 0 8 8">
|
|
74
|
-
<ellipse cx="4" cy="4" rx="4" ry="4" />
|
|
75
|
-
</svg>
|
|
76
|
-
`;
|
|
77
|
-
anchor.appendChild(deco);
|
|
78
|
-
}
|
|
79
70
|
}
|
|
80
71
|
|
|
81
72
|
customElements.define("bd-highlight", BdHighlightSection);
|
|
@@ -2,7 +2,7 @@ import { html } from 'lit';
|
|
|
2
2
|
import './highlight.js';
|
|
3
3
|
|
|
4
4
|
export default {
|
|
5
|
-
title : '
|
|
5
|
+
title : 'Atoms/Highlight',
|
|
6
6
|
tags : ['autodocs'],
|
|
7
7
|
parameters: {
|
|
8
8
|
docs: {
|
|
@@ -28,7 +28,12 @@ export default {
|
|
|
28
28
|
- The right-side decoration is injected via \`updated()\` using direct DOM manipulation
|
|
29
29
|
|
|
30
30
|
### Notes
|
|
31
|
-
- \`sub-title\` renders
|
|
31
|
+
- \`sub-title\` renders a \`bd-p kind="small"\` above the headline, **not** a heading
|
|
32
|
+
- \`as\` sets the heading level of the headline, defaulting to \`h3\`. Choose it so
|
|
33
|
+
the page's heading order stays correct — it is not a size control
|
|
34
|
+
- the component reads \`this.textContent\` during render, so the highlight is
|
|
35
|
+
resolved from the light DOM at first paint and does not follow later edits to
|
|
36
|
+
the slotted text
|
|
32
37
|
- SVG decorations are injected via \`anchor.appendChild()\` in \`updated()\` — not re-injected on re-render if already present
|
|
33
38
|
`
|
|
34
39
|
}
|
|
@@ -42,8 +47,14 @@ export default {
|
|
|
42
47
|
},
|
|
43
48
|
subTitle: {
|
|
44
49
|
control : 'text',
|
|
45
|
-
description: 'Optional
|
|
50
|
+
description: 'Optional line above the headline, rendered as a `bd-p kind="small"` — not a heading.',
|
|
46
51
|
table : { type: { summary: 'string' }, defaultValue: { summary: '' }, category: 'Content' }
|
|
52
|
+
},
|
|
53
|
+
as: {
|
|
54
|
+
control : { type: 'select' },
|
|
55
|
+
options : ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
|
|
56
|
+
description: 'Heading level of the headline, passed to the inner `bd-h`. Choose it for document structure, not for size.',
|
|
57
|
+
table : { type: { summary: 'string' }, defaultValue: { summary: 'h3' }, category: 'Semantic' }
|
|
47
58
|
}
|
|
48
59
|
}
|
|
49
60
|
};
|
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
// icons/analysis-icon.js
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { html } from "lit";
|
|
3
|
+
import { BdIconElement } from "./icon-element.js";
|
|
4
|
+
class AnalysisIcon extends BdIconElement {
|
|
5
|
+
static defaultSize = "2xl";
|
|
4
6
|
|
|
5
|
-
static properties = { size : { type: Number },
|
|
6
|
-
color : { type: String },
|
|
7
|
-
width : { type: Number },
|
|
8
|
-
height: { type: Number } };
|
|
9
|
-
|
|
10
|
-
constructor() {
|
|
11
|
-
super();
|
|
12
|
-
this.width = 48;
|
|
13
|
-
this.height = 49;
|
|
14
|
-
this.color = "#006DFF"; }
|
|
15
|
-
|
|
16
|
-
static styles = css`:host { display: inline-flex; }`;
|
|
17
7
|
render() {
|
|
18
8
|
return html`
|
|
19
|
-
<svg
|
|
20
|
-
<path d="M19.5 3C13.5938 3 8.15625 6.1875 5.15625 11.25C2.25 16.4062 2.25 22.6875 5.15625 27.75C8.15625 32.9062 13.5938 36 19.5 36C25.3125 36 30.75 32.9062 33.75 27.75C36.6562 22.6875 36.6562 16.4062 33.75 11.25C30.75 6.1875 25.3125 3 19.5 3ZM19.5 39C8.71875 39 0 30.2812 0 19.5C0 8.8125 8.71875 0 19.5 0C30.1875 0 39 8.8125 39 19.5C39 24.375 37.2188 28.7812 34.3125 32.25L47.5312 45.4688C48.0938 46.0312 48.0938 47.0625 47.5312 47.625C46.9688 48.1875 45.9375 48.1875 45.375 47.625L32.1562 34.3125C28.7812 37.3125 24.2812 39 19.5 39ZM12 21C12 20.25 12.6562 19.5 13.5 19.5C14.25 19.5 15 20.25 15 21V27C15 27.8438 14.25 28.5 13.5 28.5C12.6562 28.5 12 27.8438 12 27V21ZM18 12C18 11.25 18.6562 10.5 19.5 10.5C20.25 10.5 21 11.25 21 12V27C21 27.8438 20.25 28.5 19.5 28.5C18.6562 28.5 18 27.8438 18 27V12ZM24 18C24 17.25 24.6562 16.5 25.5 16.5C26.25 16.5 27 17.25 27 18V27C27 27.8438 26.25 28.5 25.5 28.5C24.6562 28.5 24 27.8438 24 27V18Z" fill="
|
|
9
|
+
<svg viewBox="0 0 48 49" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
10
|
+
<path d="M19.5 3C13.5938 3 8.15625 6.1875 5.15625 11.25C2.25 16.4062 2.25 22.6875 5.15625 27.75C8.15625 32.9062 13.5938 36 19.5 36C25.3125 36 30.75 32.9062 33.75 27.75C36.6562 22.6875 36.6562 16.4062 33.75 11.25C30.75 6.1875 25.3125 3 19.5 3ZM19.5 39C8.71875 39 0 30.2812 0 19.5C0 8.8125 8.71875 0 19.5 0C30.1875 0 39 8.8125 39 19.5C39 24.375 37.2188 28.7812 34.3125 32.25L47.5312 45.4688C48.0938 46.0312 48.0938 47.0625 47.5312 47.625C46.9688 48.1875 45.9375 48.1875 45.375 47.625L32.1562 34.3125C28.7812 37.3125 24.2812 39 19.5 39ZM12 21C12 20.25 12.6562 19.5 13.5 19.5C14.25 19.5 15 20.25 15 21V27C15 27.8438 14.25 28.5 13.5 28.5C12.6562 28.5 12 27.8438 12 27V21ZM18 12C18 11.25 18.6562 10.5 19.5 10.5C20.25 10.5 21 11.25 21 12V27C21 27.8438 20.25 28.5 19.5 28.5C18.6562 28.5 18 27.8438 18 27V12ZM24 18C24 17.25 24.6562 16.5 25.5 16.5C26.25 16.5 27 17.25 27 18V27C27 27.8438 26.25 28.5 25.5 28.5C24.6562 28.5 24 27.8438 24 27V18Z" fill="currentColor"/>
|
|
21
11
|
</svg>
|
|
22
12
|
`;
|
|
23
13
|
}
|
|
@@ -1,26 +1,13 @@
|
|
|
1
1
|
// icons/arrow-down-icon.js
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { html } from "lit";
|
|
3
|
+
import { BdIconElement } from "./icon-element.js";
|
|
4
|
+
class ArrowDownIcon extends BdIconElement {
|
|
5
|
+
static defaultSize = "md";
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
static properties = {
|
|
7
|
-
width : { type: Number },
|
|
8
|
-
height: { type: Number },
|
|
9
|
-
color : { type: String }
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
constructor() {
|
|
13
|
-
super();
|
|
14
|
-
this.width = 20;
|
|
15
|
-
this.height = 20;
|
|
16
|
-
this.color = "white"; }
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
static styles = css`:host { display: inline-flex; }`;
|
|
20
7
|
render() {
|
|
21
8
|
return html`
|
|
22
|
-
<svg xmlns="http://www.w3.org/2000/svg"
|
|
23
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.
|
|
9
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none" aria-hidden="true">
|
|
10
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.99999 11.9823L3.56693 5.54919L1.79916 7.31696L9.11611 14.6339C9.60426 15.1221 10.3957 15.1221 10.8839 14.6339L18.2008 7.31696L16.433 5.54919L9.99999 11.9823Z" fill="currentColor"/>
|
|
24
11
|
</svg>
|
|
25
12
|
`;
|
|
26
13
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// icons/arrow-icon.js
|
|
2
|
+
import { html } from "lit";
|
|
3
|
+
import { BdIconElement } from "./icon-element.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The trailing arrow on bd-contact-button.
|
|
7
|
+
*
|
|
8
|
+
* Moved here from src/components/button/icons.js, which was the only place in
|
|
9
|
+
* the package registering an icon element outside this directory, and the only
|
|
10
|
+
* icon not extending BdIconElement. It carried its own :host and .arrow-icon
|
|
11
|
+
* rules -- inline-flex, height from --icon-sm-size, fill: currentColor -- which
|
|
12
|
+
* are exactly what the base class does, so the move deletes them rather than
|
|
13
|
+
* moving them. It now takes `size` from the icon scale like every sibling,
|
|
14
|
+
* where before it was fixed at sm whatever a consumer asked for.
|
|
15
|
+
*
|
|
16
|
+
* ARTWORK. Eclipse `arrow right fill`, exported from the Icon inventory table in the
|
|
17
|
+
* foundation Figma file. It replaces a 512x404.39 drawing of our own, and that
|
|
18
|
+
* changed the aspect ratio: the old box was 1.266 wide per unit of height, the
|
|
19
|
+
* new one is square. icon-element.js sizes by height with width auto, so at sm
|
|
20
|
+
* this arrow went from 20.26x16 to 16x16 -- narrower beside the same label.
|
|
21
|
+
*
|
|
22
|
+
* NAMING, WHICH IS THE CONFUSING PART. This is the only TRUE arrow in the set:
|
|
23
|
+
* a shaft with a head. bd-arrow-up-icon,
|
|
24
|
+
* bd-arrow-down-icon and bd-arrow-right-icon are CHEVRONS despite the name --
|
|
25
|
+
* carets with no shaft, on a 20x20 box. So "arrow" means two different drawings
|
|
26
|
+
* here, and a caller reaching for bd-arrow-right-icon expecting this one gets a
|
|
27
|
+
* chevron. Renaming is a public-API change and is not done here; it is recorded
|
|
28
|
+
* so the next person meets it in the file rather than in a review.
|
|
29
|
+
*/
|
|
30
|
+
class BdArrowIcon extends BdIconElement {
|
|
31
|
+
static defaultSize = "sm";
|
|
32
|
+
|
|
33
|
+
render() {
|
|
34
|
+
return html`
|
|
35
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none" aria-hidden="true">
|
|
36
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.482 11.2501L10.9327 14.7993L12.7005 16.5671L19.2675 10L12.7005 3.43298L10.9327 5.20075L14.482 8.75006L1.875 8.75006V11.2501L14.482 11.2501Z" fill="currentColor"/>
|
|
37
|
+
</svg>
|
|
38
|
+
`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
customElements.define("bd-arrow-icon", BdArrowIcon);
|
|
43
|
+
|
|
44
|
+
export { BdArrowIcon };
|
|
@@ -1,31 +1,38 @@
|
|
|
1
|
-
|
|
1
|
+
// icons/arrow-right-icon.js
|
|
2
|
+
import { html } from "lit";
|
|
3
|
+
import { BdIconElement } from "./icon-element.js";
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
5
|
+
/**
|
|
6
|
+
* The third direction of the arrow family, and it is the same drawing as the
|
|
7
|
+
* other two rather than a new one.
|
|
8
|
+
*
|
|
9
|
+
* Note what this family actually is: bd-arrow-up-icon and bd-arrow-down-icon
|
|
10
|
+
* are CHEVRONS, not shafted arrows. This one keeps that, so "Learn more" gets a
|
|
11
|
+
* chevron affordance rather than the "→" character it replaces. That is a
|
|
12
|
+
* visible change and a deliberate one -- a shafted arrow would have been a new
|
|
13
|
+
* shape sitting beside two carets already called "arrow".
|
|
14
|
+
*
|
|
15
|
+
* ARTWORK. Eclipse `chevron right fill`. This used to be arrow-up's path under
|
|
16
|
+
* a rotate(90) transform, which guaranteed the two were the same drawing;
|
|
17
|
+
* Eclipse ships a chevron-right of its own, so the transform is gone and the
|
|
18
|
+
* three directions are now three separate paths that the library keeps in step.
|
|
19
|
+
*
|
|
20
|
+
* WEIGHT. Fill, which is what the other two chevrons are. It was briefly the
|
|
21
|
+
* light weight while arrow-up and arrow-down were on fill -- measured, the
|
|
22
|
+
* light edge offset is 1.250 against fill's 2.500 on a 20x20 box, so it read
|
|
23
|
+
* visibly thinner than its own family. Unlike the up/down pair it is not the
|
|
24
|
+
* other state of one control, so it never flickered; it was simply a family
|
|
25
|
+
* that did not agree. All three move together or not at all.
|
|
26
|
+
*/
|
|
27
|
+
class ArrowRightIcon extends BdIconElement {
|
|
28
|
+
static defaultSize = "md";
|
|
21
29
|
|
|
22
30
|
render() {
|
|
23
31
|
return html`
|
|
24
|
-
<svg xmlns="http://www.w3.org/2000/svg"
|
|
25
|
-
<path d="
|
|
32
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none" aria-hidden="true">
|
|
33
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.6339 9.11614L7.31692 1.79919L5.54915 3.56696L11.9822 10L5.54915 16.4331L7.31691 18.2008L14.6339 10.8839C15.122 10.3958 15.122 9.60429 14.6339 9.11614Z" fill="currentColor"/>
|
|
26
34
|
</svg>
|
|
27
35
|
`;
|
|
28
36
|
}
|
|
29
37
|
}
|
|
30
|
-
|
|
31
|
-
customElements.define("bd-arrow-right-icon", ArrowRightIcon);
|
|
38
|
+
customElements.define("bd-arrow-right-icon", ArrowRightIcon);
|
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
// icons/arrow-up-icon.js
|
|
2
|
-
import {
|
|
2
|
+
import { html } from "lit";
|
|
3
|
+
import { BdIconElement } from "./icon-element.js";
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
/**
|
|
6
|
+
* ARTWORK. Eclipse `chevron up fill`, and the weight is the point.
|
|
7
|
+
*
|
|
8
|
+
* This briefly shipped as Eclipse `chevron up` -- the LIGHT weight -- while
|
|
9
|
+
* bd-arrow-down-icon was on fill. The two are the two states of one control:
|
|
10
|
+
* accordion.js renders up when open and down when closed, and bd-footer's
|
|
11
|
+
* country toggle does the same. Measured off the paths, fill is exactly 2.00x
|
|
12
|
+
* the light edge offset (2.500 against 1.250 on a 20x20 box), so the chevron
|
|
13
|
+
* visibly doubled in weight every time someone collapsed an accordion. Two
|
|
14
|
+
* legitimate library weights, wrong together.
|
|
15
|
+
*
|
|
16
|
+
* If this is ever moved back to light, bd-arrow-down-icon has to move with it.
|
|
17
|
+
*/
|
|
18
|
+
class ArrowUpIcon extends BdIconElement {
|
|
19
|
+
static defaultSize = "md";
|
|
5
20
|
|
|
6
|
-
static properties = {
|
|
7
|
-
width : { type: Number },
|
|
8
|
-
height: { type: Number },
|
|
9
|
-
color : { type: String }
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
constructor() {
|
|
13
|
-
super();
|
|
14
|
-
this.width = 20;
|
|
15
|
-
this.height = 20;
|
|
16
|
-
this.color = "white";
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
static styles = css`:host { display: inline-flex; }`;
|
|
20
21
|
render() {
|
|
21
22
|
return html`
|
|
22
|
-
<svg xmlns="http://www.w3.org/2000/svg"
|
|
23
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.
|
|
23
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none" aria-hidden="true">
|
|
24
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.99999 8.01777L16.433 14.4508L18.2008 12.6831L10.8839 5.36612C10.3957 4.87796 9.60426 4.87796 9.1161 5.36612L1.79916 12.6831L3.56693 14.4508L9.99999 8.01777Z" fill="currentColor"/>
|
|
24
25
|
</svg>
|
|
25
26
|
`;
|
|
26
27
|
}
|
|
@@ -18,7 +18,7 @@ class BdAiIcon extends LitElement {
|
|
|
18
18
|
render() {
|
|
19
19
|
return html`
|
|
20
20
|
<svg width="${this.width}" height="${this.height}" viewBox="0 0 524.8 62.6" xmlns="http://www.w3.org/2000/svg">
|
|
21
|
-
<path fill="
|
|
21
|
+
<path fill="var(--color-blue-500)" d="M89.8,48.5v-17.8h10.5v-8.3h-10.5v-11.4h-6.2l-3.6,11.4h-9.5v.5l3.6,3.1c5.5,4.5,5.9,4.4,5.9,6.9v-2.2s0,18,0,18c0,12.8,9,15.1,17,13l4.9-7.8-.3-.2c-6.8,2-11.7,1.8-11.7-5.2ZM62.8,3.2c-3.6,0-6.2,2.8-6.2,5.9s2.6,5.9,6.2,5.9,6.4-2.5,6.4-5.9-2.8-5.9-6.4-5.9ZM37.2,31.2v-.2c6-1.8,10-6.1,10-12.7,0-10.5-9-14.5-17.7-14.5H8.4s-8.4,0-8.4,0v.9l3,2.5c3.6,2.9,4,3.5,4,6.1v48.4h20.8c10.9,0,21.9-3.9,21.9-16.5s-5.2-13.2-12.5-14ZM17.3,12.6h8.5c5.7,0,7.5.8,9.3,2.5,1.3,1.2,1.9,3,1.9,5s-.6,3.5-2,4.8c-1.7,1.6-4,2.4-8.3,2.4h-9.4v-14.7ZM26.8,52.8h-9.5v-16.7h9.9c8.3,0,12.2,2.1,12.2,8.2s-7.3,8.5-12.7,8.5ZM130.8,2.1l3.1,2c2.8,1.8,3.2,2.6,3.2,5.1v18.2h-.2c-2-2.5-6-6-13.3-6-11.2,0-19,9-19,20.6s7.3,20.6,19.4,20.6,10.6-2.1,13.5-6.9h.2l1,5.9h8.3V1.4h-16.1v.7ZM125.9,53.8c-7.2,0-11.5-5.6-11.5-11.8s4.3-11.8,11.5-11.8,11.5,5.6,11.5,11.8-4.3,11.8-11.5,11.8ZM52.7,23.1l1.6,1.3c3.5,2.7,3.7,3.2,3.7,6.5h0v30.8h9.8V22.4h-15.1v.6ZM376.8,21.4c-11.8,0-20.5,8.3-20.5,20.6s9.1,20.6,22.2,20.6,7.4-.7,10.5-1.9l5.6-9.3-.7-.4c-4.8,2.5-9.9,3.8-14.4,3.8-6.8,0-12.6-3.4-13.3-9.3h29.9c1.3-15.4-7-24-19.2-24ZM366.1,38.1c.7-5.6,4.3-9.3,10.1-9.3s9.9,3.6,10,9.3h-20.1ZM412.3,28.6h-.2v-6.2h-16.5v.4s2.5,1.6,2.5,1.6c4,2.5,4.2,3.3,4.2,8.2v29h9.8v-21c0-2.1,1.3-9.9,10.5-9.9s3.1.3,4.7.7v-9.5c-1.1-.3-2.3-.6-3.5-.6-5.2,0-9.5,2.7-11.6,7.2ZM334.1,2.1l1.4.9c4.7,3,5.3,3.9,5.3,9v15.4h-.3c-2-2.5-6-6-13.3-6-11.2,0-19,9-19,20.6s7.3,20.6,19.4,20.6,10.6-2.1,13.5-6.9h.2l1,5.9h8.3V1.4h-16.5v.7ZM329.6,53.8c-7.2,0-11.5-5.6-11.5-11.8s4.3-11.8,11.5-11.8,11.5,5.6,11.5,11.8-4.3,11.8-11.5,11.8ZM288.1,21.4c-4.4,0-9.3,2.2-12.5,7h-.2v-6h-8.4s-7.7,0-7.7,0v.4l2.4,1.6c4,2.5,4.3,3.3,4.3,8.2v29h9.8v-21.4c0-5.2,2.5-10,9-10s8,5.2,8,9.6v21.8h9.8v-24.8c0-9.1-5.3-15.4-14.6-15.4ZM239.8,21.4c-11.9,0-20.5,8.3-20.5,20.6s9.1,20.6,22.2,20.6,7.4-.7,10.5-1.9l5.6-9.3-.8-.4c-4.8,2.5-9.9,3.8-14.4,3.8-6.8,0-12.6-3.4-13.3-9.3h29.9c1.3-15.4-7-24-19.2-24ZM229.1,38.1c.7-5.6,4.3-9.3,10.1-9.3s9.9,3.6,10,9.3h-20.1ZM173.1,21.4c-11.9,0-20.5,8.3-20.5,20.6s9.1,20.6,22.2,20.6,7.4-.7,10.5-1.9l5.6-9.3-.7-.4c-4.8,2.5-9.9,3.8-14.4,3.8-6.8,0-12.6-3.4-13.3-9.3h29.9v-2.7c0-13.6-8.3-21.3-19.2-21.3ZM162.4,38.1c.7-5.6,4.3-9.3,10.1-9.3s9.9,3.6,10,9.3h-20.1ZM209.8,15.1c0-6.9,6.1-8.8,13.9-5.7l.5-.4-2.3-8.3c-15-3-22,3.7-22,14.4v7.2h-9.6v.6l5,4.1c3.9,3.1,4.6,3.8,4.6,7.1v27.6h9.8v-31h9.1v-8.4h-9.1v-7.1ZM524.8,9.6V3.9h-23.2v5.8h8.1v46.2h-8.1v5.8h23.2v-5.8h-8.1V9.6h8.1ZM467.4,3.9l-20.2,57.7h7l5.8-17h23.3l5.8,17h7.3l-20.2-57.7h-8.9ZM461.7,38.4l9.8-28.1h.4l9.8,28.1h-19.9Z"/>
|
|
22
22
|
</svg>
|
|
23
23
|
`;
|
|
24
24
|
}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
// icons/brand-marks.stories.js
|
|
2
|
+
import { html } from "lit";
|
|
3
|
+
import "./av-comparatives-icon.js";
|
|
4
|
+
import "./bd-ai-icon.js";
|
|
5
|
+
import "./best-brands-icon.js";
|
|
6
|
+
import "./brand-signature-icon.js";
|
|
7
|
+
import "./pc-mag-2024-icon.js";
|
|
8
|
+
import "./pc-mag-business-icon.js";
|
|
9
|
+
import "./pc-mag-icon.js";
|
|
10
|
+
import "./pc-mag-readers-icon.js";
|
|
11
|
+
import "./top-product-icon.js";
|
|
12
|
+
|
|
13
|
+
export default {
|
|
14
|
+
title : 'Atoms/Brand mark',
|
|
15
|
+
tags : ['autodocs'],
|
|
16
|
+
parameters: {
|
|
17
|
+
docs: {
|
|
18
|
+
description: {
|
|
19
|
+
component: `
|
|
20
|
+
Nine wordmarks and award badges. They sat under **Atoms/Icon** and are not
|
|
21
|
+
icons, which is why that section read as eight exceptions to its own rules.
|
|
22
|
+
|
|
23
|
+
### Why they are separate
|
|
24
|
+
An interface icon is a shape on a square grid: it takes a \`size\` step from
|
|
25
|
+
\`--icon-*-size\`, it is drawn in \`currentColor\`, and it follows the text beside
|
|
26
|
+
it. None of that is true here, and none of it should be.
|
|
27
|
+
|
|
28
|
+
| | Interface icon | Brand mark |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| Size | \`size\` step on the icon scale | \`width\` / \`height\`, own aspect ratio |
|
|
31
|
+
| Colour | \`currentColor\` | fixed — the mark's own |
|
|
32
|
+
| Grid | square, 12–64px | 52×48, 68×37, 126×15 — whatever it was drawn at |
|
|
33
|
+
| Renders into | shadow DOM | light DOM |
|
|
34
|
+
|
|
35
|
+
A PC Mag badge is not a 24px glyph and must not be recoloured — retinting a
|
|
36
|
+
third party's award mark misrepresents it. Forcing these onto the icon scale
|
|
37
|
+
would make the system tidier and the marks wrong.
|
|
38
|
+
|
|
39
|
+
### The two of ours behave differently from the other seven
|
|
40
|
+
|
|
41
|
+
\`bd-ai-icon\` is the Bitdefender wordmark, and it is the first exception to
|
|
42
|
+
"fixed colour": it is our own mark, so its fill is \`var(--color-blue-500)\` —
|
|
43
|
+
the brand blue as a token, not a hex value baked into the artwork.
|
|
44
|
+
|
|
45
|
+
\`bd-brand-signature-icon\` is the ninth and it is the *whole* right-hand column
|
|
46
|
+
of that table, not just the colour cell. It is a \`BdIconElement\` like any
|
|
47
|
+
interface icon: \`size\` from \`--icon-*-size\`, artwork in \`currentColor\`, both
|
|
48
|
+
deprecated \`width\`/\`height\` props still honoured. Nothing about it needed an
|
|
49
|
+
exception, because neither reason for the rules above applies to it — choosing
|
|
50
|
+
the ink is not misrepresentation when the mark is your own, and a single path
|
|
51
|
+
has no PNG to stop it scaling. It is filed here because it is a brand mark;
|
|
52
|
+
it is used like an icon.
|
|
53
|
+
|
|
54
|
+
So the table above describes the seven. Read it as "what a third party's raster
|
|
55
|
+
badge needs", not as what this section is.
|
|
56
|
+
|
|
57
|
+
### Usage
|
|
58
|
+
\`\`\`html
|
|
59
|
+
<bd-pc-mag-icon width="189" height="64"></bd-pc-mag-icon>
|
|
60
|
+
<bd-top-product-icon width="48" height="52"></bd-top-product-icon>
|
|
61
|
+
<bd-ai-icon width="126" height="15"></bd-ai-icon>
|
|
62
|
+
\`\`\`
|
|
63
|
+
|
|
64
|
+
Always set \`width\` and \`height\`: the defaults differ per mark, because each
|
|
65
|
+
one is a different shape.
|
|
66
|
+
|
|
67
|
+
### Accessibility
|
|
68
|
+
These render \`aria-hidden="true"\` like the icons do, so they are decorative by
|
|
69
|
+
default. An award badge usually *is* meaningful — it is a claim about the
|
|
70
|
+
product — so when one carries information rather than decoration, put the text
|
|
71
|
+
next to it or in a \`<bd-visually-hidden>\`, e.g. "PC Mag Editors' Choice 2024".
|
|
72
|
+
`
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
argTypes: {
|
|
77
|
+
width: {
|
|
78
|
+
control : { type: 'number', min: 8, max: 400, step: 1 },
|
|
79
|
+
description: 'Rendered width in pixels. Defaults differ per mark, so set it explicitly.',
|
|
80
|
+
table : { type: { summary: 'number' }, defaultValue: { summary: 'varies' }, category: 'Size' }
|
|
81
|
+
},
|
|
82
|
+
height: {
|
|
83
|
+
control : { type: 'number', min: 8, max: 400, step: 1 },
|
|
84
|
+
description: 'Rendered height in pixels. Defaults differ per mark, so set it explicitly.',
|
|
85
|
+
table : { type: { summary: 'number' }, defaultValue: { summary: 'varies' }, category: 'Size' }
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const AllMarks = {
|
|
91
|
+
name : 'All marks',
|
|
92
|
+
parameters: {
|
|
93
|
+
controls: { disable: true },
|
|
94
|
+
docs : {
|
|
95
|
+
description: {
|
|
96
|
+
story: `Each mark at its intrinsic size. The sizes have nothing in common
|
|
97
|
+
because the artwork has nothing in common — that is the point of keeping them
|
|
98
|
+
off the icon scale. The signature is the one that sets no size here, because
|
|
99
|
+
it is the one that has a scale to take one from.`
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
render: () => html`
|
|
104
|
+
<style>
|
|
105
|
+
.marks-grid {
|
|
106
|
+
display: grid;
|
|
107
|
+
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
|
108
|
+
gap: var(--spacing-24);
|
|
109
|
+
}
|
|
110
|
+
.mark-item {
|
|
111
|
+
display: flex;
|
|
112
|
+
flex-direction: column;
|
|
113
|
+
align-items: center;
|
|
114
|
+
justify-content: space-between;
|
|
115
|
+
gap: var(--spacing-8);
|
|
116
|
+
padding: var(--spacing-16);
|
|
117
|
+
min-height: var(--spacing-128);
|
|
118
|
+
border: var(--border-width-1) solid var(--color-border-subtle);
|
|
119
|
+
border-radius: var(--radius-md);
|
|
120
|
+
}
|
|
121
|
+
.mark-item span {
|
|
122
|
+
font-family: var(--typography-fontFamily-mono);
|
|
123
|
+
font-size: var(--typography-fontSize-xxs);
|
|
124
|
+
color: var(--color-text-muted);
|
|
125
|
+
text-align: center;
|
|
126
|
+
}
|
|
127
|
+
</style>
|
|
128
|
+
<div class="marks-grid">
|
|
129
|
+
<div class="mark-item">
|
|
130
|
+
<bd-ai-icon width="126" height="15"></bd-ai-icon>
|
|
131
|
+
<span>bd-ai-icon · 126×15</span>
|
|
132
|
+
</div>
|
|
133
|
+
<div class="mark-item">
|
|
134
|
+
<bd-brand-signature-icon></bd-brand-signature-icon>
|
|
135
|
+
<span>bd-brand-signature-icon · 182×24 (size="lg")</span>
|
|
136
|
+
</div>
|
|
137
|
+
<div class="mark-item">
|
|
138
|
+
<bd-av-comparatives-icon width="126" height="64"></bd-av-comparatives-icon>
|
|
139
|
+
<span>bd-av-comparatives-icon · 126×64</span>
|
|
140
|
+
</div>
|
|
141
|
+
<div class="mark-item">
|
|
142
|
+
<bd-best-brands-icon width="48" height="52"></bd-best-brands-icon>
|
|
143
|
+
<span>bd-best-brands-icon · 48×52</span>
|
|
144
|
+
</div>
|
|
145
|
+
<div class="mark-item">
|
|
146
|
+
<bd-pc-mag-icon width="189" height="64"></bd-pc-mag-icon>
|
|
147
|
+
<span>bd-pc-mag-icon · 189×64</span>
|
|
148
|
+
</div>
|
|
149
|
+
<div class="mark-item">
|
|
150
|
+
<bd-pc-mag-2024-icon width="48" height="52"></bd-pc-mag-2024-icon>
|
|
151
|
+
<span>bd-pc-mag-2024-icon · 48×52</span>
|
|
152
|
+
</div>
|
|
153
|
+
<div class="mark-item">
|
|
154
|
+
<bd-pc-mag-business-icon width="48" height="52"></bd-pc-mag-business-icon>
|
|
155
|
+
<span>bd-pc-mag-business-icon · 48×52</span>
|
|
156
|
+
</div>
|
|
157
|
+
<div class="mark-item">
|
|
158
|
+
<bd-pc-mag-readers-icon width="37" height="68"></bd-pc-mag-readers-icon>
|
|
159
|
+
<span>bd-pc-mag-readers-icon · 37×68</span>
|
|
160
|
+
</div>
|
|
161
|
+
<div class="mark-item">
|
|
162
|
+
<bd-top-product-icon width="48" height="52"></bd-top-product-icon>
|
|
163
|
+
<span>bd-top-product-icon · 48×52</span>
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
`
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export const Wordmark = {
|
|
170
|
+
name : 'Bitdefender wordmark',
|
|
171
|
+
args : { width: 252, height: 30 },
|
|
172
|
+
render: ({ width, height }) => html`
|
|
173
|
+
<bd-ai-icon width="${width}" height="${height}"></bd-ai-icon>
|
|
174
|
+
`,
|
|
175
|
+
parameters: {
|
|
176
|
+
docs: {
|
|
177
|
+
description: {
|
|
178
|
+
story: `Our own mark, so it is the one here drawn from a token —
|
|
179
|
+
\`var(--color-blue-500)\`. The third-party marks keep their own colours.`
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
export const AwardRow = {
|
|
186
|
+
name : 'Awards in a row',
|
|
187
|
+
parameters: {
|
|
188
|
+
controls: { disable: true },
|
|
189
|
+
docs : {
|
|
190
|
+
description: {
|
|
191
|
+
story: `How they actually appear on a page. They do not line up on a common
|
|
192
|
+
grid and should be baseline- or bottom-aligned rather than centred on a shared
|
|
193
|
+
box height.`
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
render: () => html`
|
|
198
|
+
<div style="display: flex; align-items: flex-end; gap: var(--spacing-24); flex-wrap: wrap">
|
|
199
|
+
<bd-av-comparatives-icon width="126" height="64"></bd-av-comparatives-icon>
|
|
200
|
+
<bd-best-brands-icon width="48" height="52"></bd-best-brands-icon>
|
|
201
|
+
<bd-pc-mag-2024-icon width="48" height="52"></bd-pc-mag-2024-icon>
|
|
202
|
+
<bd-top-product-icon width="48" height="52"></bd-top-product-icon>
|
|
203
|
+
</div>
|
|
204
|
+
`
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
export const BrandSignature = {
|
|
208
|
+
name : 'Brand signature',
|
|
209
|
+
parameters: {
|
|
210
|
+
controls: { disable: true },
|
|
211
|
+
docs : {
|
|
212
|
+
description: {
|
|
213
|
+
story: `The signature the hero lays over its image — Figma
|
|
214
|
+
\`Mark/brand-signature\`, node 357:62.
|
|
215
|
+
|
|
216
|
+
It takes its ink from whatever it sits in, which is the whole reason it is not
|
|
217
|
+
drawn white: a baked white mark is invisible the moment somebody puts it on a
|
|
218
|
+
light ground, which is exactly how \`bd-close-icon\` came to be invisible on a
|
|
219
|
+
white page before the icon base class existed. The three rows below are the
|
|
220
|
+
same element three times with no \`color\` prop set.
|
|
221
|
+
|
|
222
|
+
Over an image it is white, and the contrast is the **scrim's** job rather than
|
|
223
|
+
the mark's — \`bd-header\` paints a \`--color-blue-950\` band from 0% to 60%
|
|
224
|
+
behind it. Without one, measured against a real product photo, the worst
|
|
225
|
+
neighbourhood under the mark was **1.00:1** with a third of its area under the
|
|
226
|
+
3:1 that WCAG 1.4.11 asks of a non-text graphic. With it: worst **8.64:1**. The
|
|
227
|
+
band, its stops and why blue-950 rather than the brand blue are all written up
|
|
228
|
+
in \`header.css.js\`.`
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
render: () => html`
|
|
233
|
+
<style>
|
|
234
|
+
.sig-row {
|
|
235
|
+
display: flex;
|
|
236
|
+
align-items: center;
|
|
237
|
+
gap: var(--spacing-16);
|
|
238
|
+
padding: var(--spacing-24);
|
|
239
|
+
border-radius: var(--radius-lg);
|
|
240
|
+
font-family: var(--typography-fontFamily-mono);
|
|
241
|
+
font-size: var(--typography-fontSize-xxs);
|
|
242
|
+
}
|
|
243
|
+
.sig-rows { display: grid; gap: var(--spacing-16); }
|
|
244
|
+
.sig-on-page {
|
|
245
|
+
background: var(--color-surface-default);
|
|
246
|
+
color: var(--color-text-primary);
|
|
247
|
+
border: var(--border-width-1) solid var(--color-border-subtle);
|
|
248
|
+
}
|
|
249
|
+
.sig-on-brand {
|
|
250
|
+
background: var(--color-action-primary);
|
|
251
|
+
color: var(--color-text-inverse);
|
|
252
|
+
}
|
|
253
|
+
.sig-on-scrim {
|
|
254
|
+
color: var(--color-text-inverse);
|
|
255
|
+
background:
|
|
256
|
+
linear-gradient(
|
|
257
|
+
to right,
|
|
258
|
+
color-mix(in srgb, var(--color-blue-950) 60%, transparent),
|
|
259
|
+
color-mix(in srgb, var(--color-blue-950) 60%, transparent)
|
|
260
|
+
),
|
|
261
|
+
linear-gradient(120deg, var(--color-neutral-0), var(--color-blue-200));
|
|
262
|
+
}
|
|
263
|
+
</style>
|
|
264
|
+
<div class="sig-rows">
|
|
265
|
+
<div class="sig-row sig-on-page">
|
|
266
|
+
<bd-brand-signature-icon></bd-brand-signature-icon>
|
|
267
|
+
<span>on the page ground — text/primary</span>
|
|
268
|
+
</div>
|
|
269
|
+
<div class="sig-row sig-on-brand">
|
|
270
|
+
<bd-brand-signature-icon></bd-brand-signature-icon>
|
|
271
|
+
<span>on action/primary — text/inverse</span>
|
|
272
|
+
</div>
|
|
273
|
+
<div class="sig-row sig-on-scrim">
|
|
274
|
+
<bd-brand-signature-icon></bd-brand-signature-icon>
|
|
275
|
+
<span>white over the hero scrim — blue-950 at 60% on a pale image</span>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
`
|
|
279
|
+
};
|