@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,4 +1,5 @@
|
|
|
1
|
-
import { css } from "lit";
|
|
1
|
+
import { css, unsafeCSS } from "lit";
|
|
2
|
+
import { below } from "../shared/token-scales.js";
|
|
2
3
|
|
|
3
4
|
export const awardsFlexCSS = css`
|
|
4
5
|
.bd-awardsflex-root {
|
|
@@ -8,22 +9,57 @@ export const awardsFlexCSS = css`
|
|
|
8
9
|
gap: var(--spacing-8);
|
|
9
10
|
width: 100%;
|
|
10
11
|
box-sizing: border-box;
|
|
11
|
-
padding: var(--spacing-32);
|
|
12
|
-
border-radius: var(--radius-2xl
|
|
12
|
+
padding-block: var(--spacing-32);
|
|
13
|
+
border-radius: var(--radius-2xl);
|
|
13
14
|
text-align: center;
|
|
14
15
|
font-family: var(--typography-fontFamily-sans);
|
|
15
16
|
min-height: var(--bd-awardsflex-min-height, 320px);
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
.bd-awardsflex-root--white {
|
|
19
|
-
background: var(--color-
|
|
20
|
-
border
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
background: var(--color-surface-default);
|
|
21
|
+
/* --border-width-2, not --spacing-2. Same 2px at a 16px root and not the
|
|
22
|
+
same thing: --spacing-* is rem and --border-width-* is px, so this edge
|
|
23
|
+
measured 3px for a reader at a 24px root while every other border in the
|
|
24
|
+
package held still. A border width is a fixed optical weight, not a
|
|
25
|
+
distance that should grow with the text it surrounds -- the same
|
|
26
|
+
argument CLAUDE.md makes for the carousel arrow, running the other way.
|
|
27
|
+
|
|
28
|
+
--color-border-container for the colour, and --color-blue-50 was the
|
|
29
|
+
second half of the same problem: a primitive doing a border role's job.
|
|
30
|
+
No border role resolves to blue-50 -- the three roles that carry that
|
|
31
|
+
value are all SURFACES, so adopting one would have been the category
|
|
32
|
+
error CLAUDE.md names outright. This is the role five other
|
|
33
|
+
edge-drawing objects in the package already use.
|
|
34
|
+
|
|
35
|
+
Measured against the page ground this section sits on:
|
|
36
|
+
|
|
37
|
+
--color-blue-50 1.080:1 the primitive, today
|
|
38
|
+
--color-border-container 1.287:1 the role, and the smallest change
|
|
39
|
+
--color-border-subtle 1.664:1
|
|
40
|
+
--status-brand-border 1.727:1 a real BRAND border role
|
|
41
|
+
--color-border-brand 4.534:1
|
|
42
|
+
|
|
43
|
+
--status-brand-border was the interesting alternative, because it keeps
|
|
44
|
+
the blue and is a legitimate border role. Rejected on two counts: it
|
|
45
|
+
would make this the only section in the package with a brand-coloured
|
|
46
|
+
frame, a fresh divergence rather than a fix, and at 1.727:1 it is a far
|
|
47
|
+
larger visible change than the defect warrants.
|
|
48
|
+
|
|
49
|
+
The blue was probably meant to echo the tint variant, whose ground is
|
|
50
|
+
this same blue-50 -- but that echo does no perceptual work. Looked at on
|
|
51
|
+
screen, a 1.080:1 edge on white reads as a faint neutral hairline with no
|
|
52
|
+
blue in it, so what is lost is a relationship nobody can see and what is
|
|
53
|
+
gained is a line that means something. Visible: the hairline becomes
|
|
54
|
+
slightly more definite. */
|
|
55
|
+
border: var(--border-width-2) solid var(--color-border-container);
|
|
56
|
+
border-radius: var(--radius-2xl);
|
|
57
|
+
padding-block: var(--spacing-64);
|
|
23
58
|
}
|
|
24
59
|
|
|
25
|
-
|
|
26
|
-
|
|
60
|
+
/* the tint runs full-bleed on the host; the root inside it is the column */
|
|
61
|
+
:host([background="tint"]) {
|
|
62
|
+
background: var(--status-brand-surface);
|
|
27
63
|
}
|
|
28
64
|
|
|
29
65
|
/* === LAUREL ICON (always centered, above the headline) === */
|
|
@@ -31,6 +67,19 @@ export const awardsFlexCSS = css`
|
|
|
31
67
|
display: flex;
|
|
32
68
|
align-items: center;
|
|
33
69
|
justify-content: center;
|
|
70
|
+
/* no role: the laurel wreath, same decision as awards.css.js's laurel and
|
|
71
|
+
as highlight.css.js's deco shapes -- ornament, so an ink role is the
|
|
72
|
+
wrong family. This div is a currentColor carrier for bd-laurel-icon or a
|
|
73
|
+
slotted mark.
|
|
74
|
+
.
|
|
75
|
+
--color-blue-500 is the brand blue, and a primitive because no blue-500
|
|
76
|
+
role means ink: they are all surfaces, borders, actions, the indicator
|
|
77
|
+
underline, or status fills.
|
|
78
|
+
.
|
|
79
|
+
This one sits on both grounds the component has. Against the white root,
|
|
80
|
+
6.18:1 -> 4.53:1; against the tint variant's blue-50 host, 5.72:1 ->
|
|
81
|
+
4.20:1. Both clear the 3:1 non-text minimum, and a decorative graphic
|
|
82
|
+
has no minimum at all. */
|
|
34
83
|
color: var(--color-blue-500);
|
|
35
84
|
margin-bottom: var(--spacing-8);
|
|
36
85
|
}
|
|
@@ -44,12 +93,11 @@ export const awardsFlexCSS = css`
|
|
|
44
93
|
}
|
|
45
94
|
|
|
46
95
|
.bd-awardsflex-headline {
|
|
47
|
-
color: var(--color-neutral-1000);
|
|
48
96
|
margin: 0;
|
|
49
97
|
}
|
|
50
98
|
|
|
51
99
|
.bd-awardsflex-subtext {
|
|
52
|
-
color: var(--color-
|
|
100
|
+
color: var(--color-text-muted);
|
|
53
101
|
max-width: 640px;
|
|
54
102
|
margin: 0; /* was: margin: 0 0 var(--spacing-8); */
|
|
55
103
|
}
|
|
@@ -114,44 +162,182 @@ export const awardsFlexCSS = css`
|
|
|
114
162
|
}
|
|
115
163
|
|
|
116
164
|
.bd-awardsflex-quote-text {
|
|
117
|
-
|
|
165
|
+
/* A pull quote is supporting body copy, and it wraps -- three lines at the
|
|
166
|
+
widths this renders at. It was asking for the 14px primitive and taking
|
|
167
|
+
its leading from whatever it sat inside, which was the browser's own. */
|
|
168
|
+
font-size: var(--typography-body-small-fontSize);
|
|
169
|
+
font-weight: var(--typography-body-small-fontWeight);
|
|
170
|
+
line-height: var(--typography-body-small-lineHeight);
|
|
171
|
+
letter-spacing: var(--typography-body-small-letterSpacing);
|
|
172
|
+
font-family: var(--typography-body-small-fontFamily);
|
|
118
173
|
font-style: italic;
|
|
119
|
-
|
|
174
|
+
/* Pull quote: supporting, not primary. */
|
|
175
|
+
color: var(--color-text-secondary);
|
|
120
176
|
margin: 0;
|
|
121
177
|
}
|
|
122
178
|
|
|
123
179
|
.bd-awardsflex-quote-source {
|
|
180
|
+
/* no role: 12px text that no role in the vocabulary describes. The checker
|
|
181
|
+
recommends body-xsmall here and that recommendation is wrong, which is
|
|
182
|
+
worth writing down because it has recurred through the NEEDS_ROLE and
|
|
183
|
+
HAS_ROLE batches: body-xsmall declares fontSize and nothing else, so it
|
|
184
|
+
matches ANY one-axis 12px declaration trivially, on size alone. It is not
|
|
185
|
+
an incomplete role waiting to be finished -- tokens.js says it is
|
|
186
|
+
deliberately size-only, and it exists for bd-p variant="xsmall", which
|
|
187
|
+
composes it with body-small's weight, leading and tracking. This element
|
|
188
|
+
is not a bd-p, so borrowing that token would claim a composition it has
|
|
189
|
+
no half of.
|
|
190
|
+
.
|
|
191
|
+
The complete roles at this step do not fit either. label-small,
|
|
192
|
+
caption-default and caption-small all declare fontFamily-sans, and four
|
|
193
|
+
of the five sites this argument covers are IBM Plex Mono -- adopting one
|
|
194
|
+
would change the face. caption-default additionally declares a colour,
|
|
195
|
+
the only role in the vocabulary that does.
|
|
196
|
+
.
|
|
197
|
+
So: the size stays a primitive and says why. The other four sites are
|
|
198
|
+
.bd-headercode-breadcrumb, .bd-headercode-badge,
|
|
199
|
+
.bd-terminalmsg-panel-label and .bd-terminalmsg-hint. */
|
|
124
200
|
font-size: var(--typography-fontSize-xs);
|
|
125
|
-
|
|
201
|
+
/* same as the quick-answer labels: subtle reads at 4.33:1 on this tint. */
|
|
202
|
+
color: var(--color-text-muted);
|
|
126
203
|
margin: 0;
|
|
127
204
|
}
|
|
128
205
|
|
|
129
206
|
/* === DOTS === */
|
|
207
|
+
/* Dots and the pause control share one row; the dots keep their own spacing
|
|
208
|
+
so the treatment is unchanged when no control is shown. */
|
|
209
|
+
.bd-awardsflex-controls {
|
|
210
|
+
display: flex;
|
|
211
|
+
align-items: center;
|
|
212
|
+
gap: var(--spacing-16);
|
|
213
|
+
}
|
|
214
|
+
|
|
130
215
|
.bd-awardsflex-dots {
|
|
131
216
|
display: flex;
|
|
132
|
-
|
|
217
|
+
/* The buttons below carry their own 24px of target, so the space between
|
|
218
|
+
two dots now comes from the boxes rather than from a gap. Adding one on
|
|
219
|
+
top would push them apart without making either easier to hit. */
|
|
220
|
+
gap: 0;
|
|
221
|
+
margin-top: var(--spacing-8);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.bd-awardsflex-autoplay-toggle {
|
|
133
225
|
margin-top: var(--spacing-8);
|
|
226
|
+
padding: var(--spacing-2) var(--spacing-8);
|
|
227
|
+
background: transparent;
|
|
228
|
+
border: var(--border-width-1) solid var(--color-border-default);
|
|
229
|
+
border-radius: var(--radius-full);
|
|
230
|
+
color: var(--color-text-muted);
|
|
231
|
+
font-family: var(--typography-fontFamily-sans);
|
|
232
|
+
/* no role: four roles sit at this size and each fails differently, so the
|
|
233
|
+
size stays a primitive. Note the weight is not declared here at all --
|
|
234
|
+
it inherits 400 -- which is why two of these are about what adopting a
|
|
235
|
+
role would ADD.
|
|
236
|
+
.
|
|
237
|
+
caption-default matches every value exactly, including the colour token:
|
|
238
|
+
xs / 400 / 1.5 / tracking 0 / sans, and its own colour axis is
|
|
239
|
+
--color-text-muted, which is what this rule already declares two lines
|
|
240
|
+
up. It renders as the same pixels. It is declined anyway, because
|
|
241
|
+
vertical-rhythm.stories.js documents it as "text under an image or a
|
|
242
|
+
figure" and this is the visible label of a toggle button. A
|
|
243
|
+
five-axis-plus-colour identity is the most seductive form of choosing a
|
|
244
|
+
role by its value rather than its meaning -- not an exemption from
|
|
245
|
+
CLAUDE.md's rule against that, but the case the rule is for.
|
|
246
|
+
.
|
|
247
|
+
caption-small carries the same wrong meaning and adds
|
|
248
|
+
letterSpacing-wide, which has no job on a five-letter word.
|
|
249
|
+
.
|
|
250
|
+
label-small is the right family -- "a small label: a badge, a tag, a
|
|
251
|
+
field hint" -- but the wrong result: it would declare a weight of 500
|
|
252
|
+
where nothing is declared today, and add wide tracking, making the
|
|
253
|
+
control bolder and 2.2px wider. This control is deliberately recessive:
|
|
254
|
+
muted, 2px of vertical padding, sitting beside the carousel dots as
|
|
255
|
+
chrome whose job is not to compete with the quote cards. Adopting a role
|
|
256
|
+
should not invert that.
|
|
257
|
+
.
|
|
258
|
+
control-label-small is the right meaning -- built for the name of a
|
|
259
|
+
control -- and fails on the leading. See the line below. */
|
|
260
|
+
font-size: var(--typography-fontSize-xs);
|
|
261
|
+
/* no role: and this leading in particular cannot move. The line box is
|
|
262
|
+
18px, which with 2px of padding and a 1px border makes the button
|
|
263
|
+
exactly 24px -- the same 24px as the .bd-awardsflex-dot buttons it shares
|
|
264
|
+
a row with, which are 24 square deliberately for the WCAG 2.5.8 target
|
|
265
|
+
size the comment further down explains.
|
|
266
|
+
.
|
|
267
|
+
control-label-small would take the line box to 15px and the button to
|
|
268
|
+
21px, misaligning it from the dots. Its tight leading exists for controls
|
|
269
|
+
whose height is DERIVED from padding + fontSize x lineHeight, the way
|
|
270
|
+
form-field computes one. This button's height is not derived -- it is
|
|
271
|
+
matched to a sibling. So the constraint is a pixel alignment between two
|
|
272
|
+
controls in one row, and nothing else in this file says so: a later pass
|
|
273
|
+
adopting control-label-small on meaning alone would quietly break the
|
|
274
|
+
row. */
|
|
275
|
+
line-height: var(--typography-lineHeight-normal);
|
|
276
|
+
cursor: pointer;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.bd-awardsflex-autoplay-toggle:hover {
|
|
280
|
+
color: var(--color-text-primary);
|
|
281
|
+
border-color: var(--color-border-strong);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.bd-awardsflex-autoplay-toggle:focus-visible {
|
|
285
|
+
/* the one focus ring — see Foundations/Focus */
|
|
286
|
+
outline: none;
|
|
287
|
+
box-shadow: var(--focus-outline-primary);
|
|
288
|
+
border-radius: var(--focus-outline-radius);
|
|
134
289
|
}
|
|
135
290
|
|
|
291
|
+
/* An 8px dot was an 8px target, which is a third of what WCAG 2.5.8 asks and
|
|
292
|
+
close enough to its neighbour that the 24px circles would have overlapped
|
|
293
|
+
as well. The button is the target and the dot is only what you see, so the
|
|
294
|
+
button is 24 square and the dot is drawn inside it at the size it always
|
|
295
|
+
was. Nothing about the component looks bigger; the part you can hit does. */
|
|
136
296
|
.bd-awardsflex-dot {
|
|
297
|
+
width: var(--dimension-24);
|
|
298
|
+
height: var(--dimension-24);
|
|
299
|
+
display: grid;
|
|
300
|
+
place-items: center;
|
|
301
|
+
border: none;
|
|
302
|
+
background: transparent;
|
|
303
|
+
padding: 0;
|
|
304
|
+
cursor: pointer;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.bd-awardsflex-dot::before {
|
|
308
|
+
content: "";
|
|
137
309
|
width: var(--spacing-8);
|
|
138
310
|
height: var(--spacing-8);
|
|
139
311
|
border-radius: 50%;
|
|
140
|
-
border: none;
|
|
141
312
|
background: var(--color-neutral-300);
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
transition: background 0.2s ease, transform 0.2s ease;
|
|
313
|
+
transition: background var(--transition-duration-normal) var(--transition-easing-ease),
|
|
314
|
+
transform var(--transition-duration-normal) var(--transition-easing-ease);
|
|
145
315
|
}
|
|
146
316
|
|
|
147
|
-
.bd-awardsflex-dot.active {
|
|
148
|
-
|
|
317
|
+
.bd-awardsflex-dot.active::before {
|
|
318
|
+
/* The current slide's mark, and it takes the indicator role now that the
|
|
319
|
+
role is not named for a shape. --indicator-color IS blue-500, so nothing
|
|
320
|
+
moves; what changes is that this dot and the tab/nav underlines can no
|
|
321
|
+
longer drift apart, which is the reason the role exists.
|
|
322
|
+
.
|
|
323
|
+
The geometry stays local on purpose: an underline slides its width, a dot
|
|
324
|
+
scales, so --indicator-underline-height and its transition are not this
|
|
325
|
+
component's to borrow. */
|
|
326
|
+
background: var(--indicator-color);
|
|
149
327
|
transform: scale(1.2);
|
|
150
328
|
}
|
|
151
329
|
|
|
152
|
-
|
|
330
|
+
.bd-awardsflex-dot:focus-visible {
|
|
331
|
+
/* the one focus ring — see Foundations/Focus. It follows the target, not
|
|
332
|
+
the dot, so keyboard focus is visible at the size the button really is. */
|
|
333
|
+
outline: none;
|
|
334
|
+
box-shadow: var(--focus-outline-primary);
|
|
335
|
+
border-radius: var(--radius-full);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
@media ${unsafeCSS(below('sm'))} {
|
|
153
339
|
.bd-awardsflex-root {
|
|
154
|
-
padding: var(--spacing-24);
|
|
340
|
+
padding-block: var(--spacing-24);
|
|
155
341
|
gap: var(--spacing-8);
|
|
156
342
|
min-height: var(--bd-awardsflex-min-height-mobile, 280px);
|
|
157
343
|
}
|
|
@@ -8,14 +8,17 @@ import "../icons/pc-mag-business-icon.js";
|
|
|
8
8
|
import "../icons/pc-mag-icon.js";
|
|
9
9
|
import "../icons/pc-mag-readers-icon.js";
|
|
10
10
|
import "../icons/top-product-icon.js";
|
|
11
|
+
import "../heading/heading.js";
|
|
12
|
+
import "../paragraph/paragraph.js";
|
|
11
13
|
import { awardsFlexCSS } from "./awards-flex.css.js";
|
|
14
|
+
import { ensembleCSS } from "../shared/ensemble.css.js";
|
|
12
15
|
|
|
13
16
|
|
|
14
17
|
const GROUP_SIZE = 3; // how many quote cards are visible per carousel page
|
|
15
18
|
|
|
16
19
|
export class AwardsFlex extends LitElement {
|
|
17
20
|
static properties = {
|
|
18
|
-
background : { type: String },
|
|
21
|
+
background : { type: String, reflect: true },
|
|
19
22
|
layout : { type: String },
|
|
20
23
|
carousel : { type: Boolean },
|
|
21
24
|
autoplay : { type: Boolean },
|
|
@@ -24,10 +27,12 @@ export class AwardsFlex extends LitElement {
|
|
|
24
27
|
subtext : { type: String },
|
|
25
28
|
badges : { type: Array },
|
|
26
29
|
_slide : { state: true },
|
|
27
|
-
_paused : { state: true }
|
|
30
|
+
_paused : { state: true },
|
|
31
|
+
_userStopped : { state: true },
|
|
32
|
+
_reduceMotion: { state: true }
|
|
28
33
|
};
|
|
29
34
|
|
|
30
|
-
static styles = [tokens, awardsFlexCSS];
|
|
35
|
+
static styles = [tokens, ensembleCSS, awardsFlexCSS];
|
|
31
36
|
|
|
32
37
|
constructor() {
|
|
33
38
|
super();
|
|
@@ -41,16 +46,31 @@ export class AwardsFlex extends LitElement {
|
|
|
41
46
|
this.badges = [];
|
|
42
47
|
this._slide = 0;
|
|
43
48
|
this._paused = false;
|
|
49
|
+
/* Hover/focus pause is transient. A user who presses Stop means it, and
|
|
50
|
+
must not have it undone by the pointer leaving the carousel — so the two
|
|
51
|
+
are separate pieces of state. */
|
|
52
|
+
this._userStopped = false;
|
|
53
|
+
this._reduceMotion = false;
|
|
44
54
|
this._timer = null;
|
|
45
55
|
}
|
|
46
56
|
|
|
47
57
|
connectedCallback() {
|
|
48
58
|
super.connectedCallback();
|
|
59
|
+
/* WCAG 2.2.2: content that moves on its own must be pausable, and under
|
|
60
|
+
prefers-reduced-motion it should not start at all. Watched rather than
|
|
61
|
+
read once, so a reader who changes the setting is honoured live. */
|
|
62
|
+
if (typeof window !== "undefined" && window.matchMedia) {
|
|
63
|
+
this._motionQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
64
|
+
this._reduceMotion = this._motionQuery.matches;
|
|
65
|
+
this._onMotionChange = () => { this._reduceMotion = this._motionQuery.matches; };
|
|
66
|
+
this._motionQuery.addEventListener("change", this._onMotionChange);
|
|
67
|
+
}
|
|
49
68
|
this._maybeStartAutoplay();
|
|
50
69
|
}
|
|
51
70
|
|
|
52
71
|
disconnectedCallback() {
|
|
53
72
|
super.disconnectedCallback();
|
|
73
|
+
this._motionQuery?.removeEventListener("change", this._onMotionChange);
|
|
54
74
|
this._stopAutoplay();
|
|
55
75
|
}
|
|
56
76
|
|
|
@@ -60,7 +80,9 @@ export class AwardsFlex extends LitElement {
|
|
|
60
80
|
changed.has("carousel") ||
|
|
61
81
|
changed.has("layout") ||
|
|
62
82
|
changed.has("badges") ||
|
|
63
|
-
changed.has("_paused")
|
|
83
|
+
changed.has("_paused") ||
|
|
84
|
+
changed.has("_userStopped") ||
|
|
85
|
+
changed.has("_reduceMotion")
|
|
64
86
|
) {
|
|
65
87
|
// if the badge set shrank, make sure the current slide index is still valid
|
|
66
88
|
if (this._slide >= this._slidesCount) {
|
|
@@ -90,7 +112,9 @@ export class AwardsFlex extends LitElement {
|
|
|
90
112
|
this.carousel &&
|
|
91
113
|
this.layout === "quotes" &&
|
|
92
114
|
this._slidesCount > 1 &&
|
|
93
|
-
!this._paused
|
|
115
|
+
!this._paused &&
|
|
116
|
+
!this._userStopped &&
|
|
117
|
+
!this._reduceMotion;
|
|
94
118
|
|
|
95
119
|
if (!canAutoplay) return;
|
|
96
120
|
|
|
@@ -114,6 +138,15 @@ export class AwardsFlex extends LitElement {
|
|
|
114
138
|
if (this.autoplay) this._paused = false;
|
|
115
139
|
}
|
|
116
140
|
|
|
141
|
+
_toggleAutoplay() {
|
|
142
|
+
this._userStopped = !this._userStopped;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** True when the carousel is actually able to move on its own. */
|
|
146
|
+
get _autoplayOffered() {
|
|
147
|
+
return this.autoplay && this.carousel && this.layout === "quotes" && this._slidesCount > 1;
|
|
148
|
+
}
|
|
149
|
+
|
|
117
150
|
_goTo(i) {
|
|
118
151
|
this._slide = i;
|
|
119
152
|
}
|
|
@@ -169,9 +202,33 @@ export class AwardsFlex extends LitElement {
|
|
|
169
202
|
`;
|
|
170
203
|
}
|
|
171
204
|
|
|
205
|
+
/**
|
|
206
|
+
* The pause/stop control WCAG 2.2.2 requires of anything that starts moving
|
|
207
|
+
* on its own and keeps going. Hovering or focusing the carousel already
|
|
208
|
+
* paused it, but that is not a mechanism a keyboard or touch user can rely
|
|
209
|
+
* on, and it cannot express "leave it stopped".
|
|
210
|
+
*
|
|
211
|
+
* Its name states the action it performs, which is what a screen reader
|
|
212
|
+
* announces on focus. It sits beside the dots rather than inside them: that
|
|
213
|
+
* container is a tablist and a plain button is not a valid child of one.
|
|
214
|
+
*/
|
|
215
|
+
_renderAutoplayToggle() {
|
|
216
|
+
if (!this._autoplayOffered) return nothing;
|
|
217
|
+
const stopped = this._userStopped || this._reduceMotion;
|
|
218
|
+
return html`
|
|
219
|
+
<button
|
|
220
|
+
type="button"
|
|
221
|
+
class="bd-awardsflex-autoplay-toggle"
|
|
222
|
+
@click=${this._toggleAutoplay}
|
|
223
|
+
aria-label=${stopped ? "Play slideshow" : "Pause slideshow"}
|
|
224
|
+
>${stopped ? "Play" : "Pause"}</button>
|
|
225
|
+
`;
|
|
226
|
+
}
|
|
227
|
+
|
|
172
228
|
_renderDots() {
|
|
173
229
|
if (!this.carousel || this._slidesCount < 2) return nothing;
|
|
174
230
|
return html`
|
|
231
|
+
<div class="bd-awardsflex-controls">
|
|
175
232
|
<div class="bd-awardsflex-dots" role="tablist" aria-label="Slide navigation">
|
|
176
233
|
${this._groups.map(
|
|
177
234
|
(_, i) => html`
|
|
@@ -185,6 +242,8 @@ export class AwardsFlex extends LitElement {
|
|
|
185
242
|
`
|
|
186
243
|
)}
|
|
187
244
|
</div>
|
|
245
|
+
${this._renderAutoplayToggle()}
|
|
246
|
+
</div>
|
|
188
247
|
`;
|
|
189
248
|
}
|
|
190
249
|
|
|
@@ -227,7 +286,7 @@ export class AwardsFlex extends LitElement {
|
|
|
227
286
|
}
|
|
228
287
|
|
|
229
288
|
render() {
|
|
230
|
-
const rootClasses = `bd-awardsflex-root bd-awardsflex-root--${this.background} bd-awardsflex-root--${this.layout}`;
|
|
289
|
+
const rootClasses = `bd-ensemble bd-awardsflex-root bd-awardsflex-root--${this.background} bd-awardsflex-root--${this.layout}`;
|
|
231
290
|
|
|
232
291
|
return html`
|
|
233
292
|
<section class="${rootClasses}" aria-label="Awards and recognition">
|
|
@@ -239,7 +298,7 @@ export class AwardsFlex extends LitElement {
|
|
|
239
298
|
? html`<bd-h as="h3" class="bd-awardsflex-headline">${this.headline}</bd-h>`
|
|
240
299
|
: nothing}
|
|
241
300
|
${this.subtext
|
|
242
|
-
? html`<bd-p
|
|
301
|
+
? html`<bd-p variant="large" class="bd-awardsflex-subtext">${this.subtext}</bd-p>`
|
|
243
302
|
: nothing}
|
|
244
303
|
</div>
|
|
245
304
|
`
|
|
@@ -3,23 +3,24 @@ import "../heading/heading.js";
|
|
|
3
3
|
import "../image/image.js";
|
|
4
4
|
import "../link/link.js";
|
|
5
5
|
import "../paragraph/paragraph.js";
|
|
6
|
-
import "./awards-light.js";
|
|
7
6
|
import "./awards.js";
|
|
8
7
|
|
|
9
8
|
export default {
|
|
10
|
-
title : "
|
|
11
|
-
component : "bd-awards-section
|
|
9
|
+
title : "Modules/Awards Section — Summary",
|
|
10
|
+
component : "bd-awards-section",
|
|
12
11
|
tags : ["autodocs"],
|
|
13
12
|
parameters: {
|
|
14
13
|
layout: "fullscreen",
|
|
15
14
|
docs : {
|
|
16
15
|
description: {
|
|
17
16
|
component: `
|
|
18
|
-
|
|
17
|
+
\`bd-awards-section\` with \`content="summary"\`: the trust banner and award badges only, without the "What's our secret" section or the feature cards.
|
|
18
|
+
|
|
19
|
+
This was a separate element, \`bd-awards-section-light\`, until P6E.1B. It was a fork of the same component with the same responsibility, so the difference is now stated as content scope rather than as a second custom element.
|
|
19
20
|
|
|
20
21
|
### Usage
|
|
21
22
|
\`\`\`html
|
|
22
|
-
<bd-awards-section
|
|
23
|
+
<bd-awards-section content="summary"></bd-awards-section>
|
|
23
24
|
\`\`\`
|
|
24
25
|
|
|
25
26
|
### Attributes
|
|
@@ -32,7 +33,7 @@ export default {
|
|
|
32
33
|
|
|
33
34
|
### Badge object shape
|
|
34
35
|
\`\`\`js
|
|
35
|
-
{ id: string, label: string, type: "red" | "dark"
|
|
36
|
+
{ tag: string, id: string, label: string, type: "red" | "dark" }
|
|
36
37
|
\`\`\`
|
|
37
38
|
`
|
|
38
39
|
}
|
|
@@ -58,7 +59,7 @@ export default {
|
|
|
58
59
|
control : "object",
|
|
59
60
|
description: "Array of award badge objects",
|
|
60
61
|
table : {
|
|
61
|
-
type : { summary: "Array<{ id, label, type
|
|
62
|
+
type : { summary: "Array<{ tag, id, label, type }>" },
|
|
62
63
|
category: "Badges"
|
|
63
64
|
}
|
|
64
65
|
}
|
|
@@ -74,64 +75,57 @@ const defaultArgs = {
|
|
|
74
75
|
subtext : "We've added 25 new accolades in the past two years to the hundreds we have won since we started in 2001 - so you know you are in good hands.",
|
|
75
76
|
desktopAwards: [
|
|
76
77
|
{
|
|
77
|
-
label
|
|
78
|
-
type
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
id : "pc-mag"
|
|
78
|
+
label: "PC MAG\nEDITORS' CHOICE",
|
|
79
|
+
type : "red",
|
|
80
|
+
tag : "bd-pc-mag-icon",
|
|
81
|
+
id : "pc-mag"
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
|
-
label
|
|
85
|
-
type
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
id : "av-comparatives"
|
|
84
|
+
label: "AV\ncomparatives",
|
|
85
|
+
type : "dark",
|
|
86
|
+
tag : "bd-av-comparatives-icon",
|
|
87
|
+
id : "av-comparatives"
|
|
89
88
|
},
|
|
90
89
|
{
|
|
91
|
-
label
|
|
92
|
-
type
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
id : "best-brands"
|
|
90
|
+
label: "Best\nBrands\n2024",
|
|
91
|
+
type : "dark",
|
|
92
|
+
tag : "bd-best-brands-icon",
|
|
93
|
+
id : "best-brands"
|
|
96
94
|
},
|
|
97
95
|
{
|
|
98
|
-
label
|
|
99
|
-
type
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
id : "pc-mag-2024"
|
|
96
|
+
label: "PC\nChoice\n2024",
|
|
97
|
+
type : "red",
|
|
98
|
+
tag : "bd-pc-mag-2024-icon",
|
|
99
|
+
id : "pc-mag-2024"
|
|
103
100
|
},
|
|
104
101
|
{
|
|
105
|
-
label
|
|
106
|
-
type
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
id : "pc-mag-readers"
|
|
102
|
+
label: "PC MAG\nREADERS'\nCHOICE",
|
|
103
|
+
type : "red",
|
|
104
|
+
tag : "bd-pc-mag-readers-icon",
|
|
105
|
+
id : "pc-mag-readers"
|
|
110
106
|
},
|
|
111
107
|
{
|
|
112
|
-
label
|
|
113
|
-
type
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
id : "pc-mag-business"
|
|
108
|
+
label: "PC\nBusiness\nChoice",
|
|
109
|
+
type : "red",
|
|
110
|
+
tag : "bd-pc-mag-business-icon",
|
|
111
|
+
id : "pc-mag-business"
|
|
117
112
|
},
|
|
118
113
|
{
|
|
119
|
-
label
|
|
120
|
-
type
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
id : "top-product"
|
|
114
|
+
label: "AV\nTEST\nTOP\nPRODUCT",
|
|
115
|
+
type : "red",
|
|
116
|
+
tag : "bd-top-product-icon",
|
|
117
|
+
id : "top-product"
|
|
124
118
|
}
|
|
125
119
|
]
|
|
126
120
|
};
|
|
127
121
|
|
|
128
122
|
const render = (args) => html`
|
|
129
|
-
<bd-awards-section
|
|
123
|
+
<bd-awards-section content="summary"
|
|
130
124
|
.tagline=${args.tagline}
|
|
131
125
|
.headline=${args.headline}
|
|
132
126
|
.subtext=${args.subtext}
|
|
133
127
|
.desktopAwards=${args.desktopAwards}
|
|
134
|
-
></bd-awards-section
|
|
128
|
+
></bd-awards-section>
|
|
135
129
|
`;
|
|
136
130
|
|
|
137
131
|
|
|
@@ -215,25 +209,22 @@ export const FewBadges = {
|
|
|
215
209
|
...defaultArgs,
|
|
216
210
|
desktopAwards: [
|
|
217
211
|
{
|
|
218
|
-
label
|
|
219
|
-
type
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
id : "pc-mag"
|
|
212
|
+
label: "PC MAG\nEDITORS' CHOICE",
|
|
213
|
+
type : "red",
|
|
214
|
+
tag : "bd-pc-mag-icon",
|
|
215
|
+
id : "pc-mag"
|
|
223
216
|
},
|
|
224
217
|
{
|
|
225
|
-
label
|
|
226
|
-
type
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
id : "av-comparatives"
|
|
218
|
+
label: "AV\ncomparatives",
|
|
219
|
+
type : "dark",
|
|
220
|
+
tag : "bd-av-comparatives-icon",
|
|
221
|
+
id : "av-comparatives"
|
|
230
222
|
},
|
|
231
223
|
{
|
|
232
|
-
label
|
|
233
|
-
type
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
id : "top-product"
|
|
224
|
+
label: "AV\nTEST\nTOP\nPRODUCT",
|
|
225
|
+
type : "red",
|
|
226
|
+
tag : "bd-top-product-icon",
|
|
227
|
+
id : "top-product"
|
|
237
228
|
}
|
|
238
229
|
]
|
|
239
230
|
},
|
|
@@ -256,11 +247,10 @@ export const SingleBadge = {
|
|
|
256
247
|
...defaultArgs,
|
|
257
248
|
desktopAwards: [
|
|
258
249
|
{
|
|
259
|
-
label
|
|
260
|
-
type
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
id : "pc-mag"
|
|
250
|
+
label: "PC MAG\nEDITORS' CHOICE",
|
|
251
|
+
type : "red",
|
|
252
|
+
tag : "bd-pc-mag-icon",
|
|
253
|
+
id : "pc-mag"
|
|
264
254
|
}
|
|
265
255
|
]
|
|
266
256
|
},
|