@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
|
@@ -53,14 +53,14 @@ Toate elementele sunt sloturi pentru consistență maximă.
|
|
|
53
53
|
};
|
|
54
54
|
|
|
55
55
|
const heading = html`
|
|
56
|
-
<bd-h as="h4" slot="heading" color="
|
|
56
|
+
<bd-h as="h4" slot="heading" color="primary">
|
|
57
57
|
Keep your loved ones protected.
|
|
58
58
|
</bd-h>
|
|
59
59
|
`;
|
|
60
60
|
|
|
61
61
|
const content = html`
|
|
62
62
|
<div slot="content">
|
|
63
|
-
<bd-p
|
|
63
|
+
<bd-p variant="regular">
|
|
64
64
|
As the Subscription Manager, you can oversee and adjust online safety
|
|
65
65
|
through an intuitive dashboard. Effortlessly manage settings, monitor
|
|
66
66
|
real-time alerts, and maintain control without compromising simplicity
|
|
@@ -69,7 +69,7 @@ const content = html`
|
|
|
69
69
|
</div>
|
|
70
70
|
`;
|
|
71
71
|
|
|
72
|
-
const mediaStyle = "width:100%;max-width:520px;height:auto;border-radius:var(--radius-lg
|
|
72
|
+
const mediaStyle = "width:100%;max-width:520px;height:auto;border-radius:var(--radius-lg);object-fit:cover;display:block;";
|
|
73
73
|
|
|
74
74
|
// ─── Imagine ──────────────────────────────────────────────────────────────────
|
|
75
75
|
|
|
@@ -107,7 +107,7 @@ export const WithPicture = {
|
|
|
107
107
|
${content}
|
|
108
108
|
<picture slot="media" style="display:block;width:100%;max-width:520px;">
|
|
109
109
|
<source type="image/webp" srcset="/assets/tabs-img1.png?width=2000&format=webp&optimize=medium" media="(min-width: 600px)" />
|
|
110
|
-
<img src="/assets/tabs-img1.png" alt="Admin using laptop" loading="lazy" style="width:100%;height:auto;border-radius:var(--radius-lg
|
|
110
|
+
<img src="/assets/tabs-img1.png" alt="Admin using laptop" loading="lazy" style="width:100%;height:auto;border-radius:var(--radius-lg);object-fit:cover;display:block;" />
|
|
111
111
|
</picture>
|
|
112
112
|
</bd-features-tab>
|
|
113
113
|
`,
|
|
@@ -122,7 +122,7 @@ export const WithYouTube = {
|
|
|
122
122
|
<bd-features-tab cta-label="Learn more" cta-href="#" cta-kind="danger">
|
|
123
123
|
${heading}
|
|
124
124
|
${content}
|
|
125
|
-
<div slot="media" style="position:relative;width:100%;max-width:520px;padding-bottom:56.25%;border-radius:var(--radius-lg
|
|
125
|
+
<div slot="media" style="position:relative;width:100%;max-width:520px;padding-bottom:56.25%;border-radius:var(--radius-lg);overflow:hidden;">
|
|
126
126
|
<iframe
|
|
127
127
|
style="position:absolute;top:0;left:0;width:100%;height:100%;border:none;"
|
|
128
128
|
src="https://www.youtube.com/embed/zal9Mt02ErM"
|
|
@@ -189,7 +189,7 @@ export const WithVideoNative = {
|
|
|
189
189
|
src="https://www.bitdefender.com/content/dam/bitdefender/consumers/solutions/ultimate-small-business-security/Bitdefender_Final_1080p_V.webm"
|
|
190
190
|
controls
|
|
191
191
|
playsinline
|
|
192
|
-
style="width:100%;max-width:520px;height:auto;border-radius:var(--radius-lg
|
|
192
|
+
style="width:100%;max-width:520px;height:auto;border-radius:var(--radius-lg);display:block;"
|
|
193
193
|
></video>
|
|
194
194
|
</bd-features-tab>
|
|
195
195
|
`,
|
|
@@ -257,7 +257,7 @@ export const WithCTASlot = {
|
|
|
257
257
|
${heading}
|
|
258
258
|
${content}
|
|
259
259
|
<img slot="media" src="/assets/tabs-img1.png" alt="Admin" loading="lazy" style="${mediaStyle}" />
|
|
260
|
-
<bd-button-link slot="cta" href="#"
|
|
260
|
+
<bd-button-link slot="cta" href="#" variant="primary" size="md">Custom CTA button</bd-button-link>
|
|
261
261
|
</bd-features-tab>
|
|
262
262
|
`,
|
|
263
263
|
parameters: { docs: { description: { story: 'Buton CTA custom via `slot="cta"`.' } } }
|
|
@@ -275,9 +275,9 @@ export const WithTabs = {
|
|
|
275
275
|
>
|
|
276
276
|
<bd-tab-panel title="Imagine">
|
|
277
277
|
<bd-features-tab cta-label="Stay worry free" cta-href="#" cta-kind="danger">
|
|
278
|
-
<bd-h as="h4" slot="heading" color="
|
|
278
|
+
<bd-h as="h4" slot="heading" color="primary">Keep your loved ones protected.</bd-h>
|
|
279
279
|
<div slot="content">
|
|
280
|
-
<bd-p
|
|
280
|
+
<bd-p variant="regular">As the Subscription Manager, you can oversee and adjust online safety.</bd-p>
|
|
281
281
|
</div>
|
|
282
282
|
<img slot="media" src="/assets/tabs-img1.png" alt="Admin using laptop" loading="lazy" style="${mediaStyle}" />
|
|
283
283
|
</bd-features-tab>
|
|
@@ -285,9 +285,9 @@ export const WithTabs = {
|
|
|
285
285
|
|
|
286
286
|
<bd-tab-panel title="YouTube">
|
|
287
287
|
<bd-features-tab cta-label="Learn more" cta-href="#" cta-kind="danger">
|
|
288
|
-
<bd-h as="h4" slot="heading" color="
|
|
288
|
+
<bd-h as="h4" slot="heading" color="primary">Watch how it works.</bd-h>
|
|
289
289
|
<div slot="content">
|
|
290
|
-
<bd-p
|
|
290
|
+
<bd-p variant="regular">See Bitdefender in action with our video walkthrough.</bd-p>
|
|
291
291
|
</div>
|
|
292
292
|
<bd-video-player
|
|
293
293
|
slot="media"
|
|
@@ -301,9 +301,9 @@ export const WithTabs = {
|
|
|
301
301
|
|
|
302
302
|
<bd-tab-panel title="Video">
|
|
303
303
|
<bd-features-tab cta-label="Get started" cta-href="#" cta-kind="danger">
|
|
304
|
-
<bd-h as="h4" slot="heading" color="
|
|
304
|
+
<bd-h as="h4" slot="heading" color="primary">See the full demo.</bd-h>
|
|
305
305
|
<div slot="content">
|
|
306
|
-
<bd-p
|
|
306
|
+
<bd-p variant="regular">Watch our full product demo and discover all features.</bd-p>
|
|
307
307
|
</div>
|
|
308
308
|
<bd-video-player
|
|
309
309
|
slot="media"
|
|
@@ -366,25 +366,25 @@ export const WithFeaturesTabVideo = {
|
|
|
366
366
|
>
|
|
367
367
|
<bd-tab-panel title="Admin">
|
|
368
368
|
<bd-features-tab cta-label="Stay worry free" cta-href="#" cta-kind="danger">
|
|
369
|
-
<bd-h as="h4" slot="heading" color="
|
|
369
|
+
<bd-h as="h4" slot="heading" color="primary">Keep your loved ones protected.</bd-h>
|
|
370
370
|
<div slot="content">
|
|
371
|
-
<bd-p
|
|
371
|
+
<bd-p variant="regular">As the Subscription Manager, you can oversee and adjust online safety through an intuitive dashboard.</bd-p>
|
|
372
372
|
</div>
|
|
373
373
|
<img
|
|
374
374
|
slot="media"
|
|
375
375
|
src="/assets/tabs-img1.png"
|
|
376
376
|
alt="Admin using laptop"
|
|
377
377
|
loading="lazy"
|
|
378
|
-
style="width:100%;max-width:520px;height:auto;border-radius:var(--radius-lg
|
|
378
|
+
style="width:100%;max-width:520px;height:auto;border-radius:var(--radius-lg);object-fit:cover;display:block;"
|
|
379
379
|
/>
|
|
380
380
|
</bd-features-tab>
|
|
381
381
|
</bd-tab-panel>
|
|
382
382
|
|
|
383
383
|
<bd-tab-panel title="YouTube">
|
|
384
384
|
<bd-features-tab cta-label="Learn more" cta-href="#" cta-kind="danger">
|
|
385
|
-
<bd-h as="h4" slot="heading" color="
|
|
385
|
+
<bd-h as="h4" slot="heading" color="primary">Watch how it works.</bd-h>
|
|
386
386
|
<div slot="content">
|
|
387
|
-
<bd-p
|
|
387
|
+
<bd-p variant="regular">See Bitdefender in action with our full video walkthrough.</bd-p>
|
|
388
388
|
</div>
|
|
389
389
|
<bd-video-player
|
|
390
390
|
slot="media"
|
|
@@ -398,9 +398,9 @@ export const WithFeaturesTabVideo = {
|
|
|
398
398
|
|
|
399
399
|
<bd-tab-panel title="Video">
|
|
400
400
|
<bd-features-tab cta-label="Get started" cta-href="#" cta-kind="danger">
|
|
401
|
-
<bd-h as="h4" slot="heading" color="
|
|
401
|
+
<bd-h as="h4" slot="heading" color="primary">See the full demo.</bd-h>
|
|
402
402
|
<div slot="content">
|
|
403
|
-
<bd-p
|
|
403
|
+
<bd-p variant="regular">Watch our full product demo and discover all the features available.</bd-p>
|
|
404
404
|
</div>
|
|
405
405
|
<bd-video-player
|
|
406
406
|
slot="media"
|
|
@@ -414,16 +414,16 @@ export const WithFeaturesTabVideo = {
|
|
|
414
414
|
|
|
415
415
|
<bd-tab-panel title="Teen">
|
|
416
416
|
<bd-features-tab cta-label="Explore features" cta-href="#" cta-kind="danger">
|
|
417
|
-
<bd-h as="h4" slot="heading" color="
|
|
417
|
+
<bd-h as="h4" slot="heading" color="primary">Safe browsing for teens.</bd-h>
|
|
418
418
|
<div slot="content">
|
|
419
|
-
<bd-p
|
|
419
|
+
<bd-p variant="regular">Give teens the freedom to explore online while keeping them protected from threats.</bd-p>
|
|
420
420
|
</div>
|
|
421
421
|
<img
|
|
422
422
|
slot="media"
|
|
423
423
|
src="/assets/tabs-img3.png"
|
|
424
424
|
alt="Teen protection"
|
|
425
425
|
loading="lazy"
|
|
426
|
-
style="width:100%;max-width:520px;height:auto;border-radius:var(--radius-lg
|
|
426
|
+
style="width:100%;max-width:520px;height:auto;border-radius:var(--radius-lg);object-fit:cover;display:block;"
|
|
427
427
|
/>
|
|
428
428
|
</bd-features-tab>
|
|
429
429
|
</bd-tab-panel>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { css } from 'lit';
|
|
2
|
+
|
|
3
|
+
/** Styled entirely from design tokens — see npm run lint:tokens. */
|
|
4
|
+
export const fieldsetCSS = css`
|
|
5
|
+
:host { display: block; }
|
|
6
|
+
|
|
7
|
+
fieldset {
|
|
8
|
+
margin: 0;
|
|
9
|
+
padding: var(--spacing-16);
|
|
10
|
+
border: var(--border-width-1) solid var(--color-border-subtle);
|
|
11
|
+
border-radius: var(--radius-md);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
legend {
|
|
15
|
+
padding: 0 var(--spacing-8);
|
|
16
|
+
font-family: var(--form-label-large-fontFamily);
|
|
17
|
+
font-size: var(--form-label-large-fontSize);
|
|
18
|
+
font-weight: var(--form-label-large-fontWeight);
|
|
19
|
+
line-height: var(--form-label-large-lineHeight);
|
|
20
|
+
color: var(--form-label-large-color);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.fields {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
gap: var(--form-fieldSpacing);
|
|
27
|
+
}
|
|
28
|
+
`;
|
|
29
|
+
|
|
30
|
+
export default fieldsetCSS;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { LitElement, html, nothing } from 'lit';
|
|
2
|
+
// Installs the design tokens into document scope; see src/tokens/tokens.js
|
|
3
|
+
import '../../tokens/tokens.js';
|
|
4
|
+
import { fieldsetCSS } from './fieldset.css.js';
|
|
5
|
+
|
|
6
|
+
export class BdFieldset extends LitElement {
|
|
7
|
+
static styles = [fieldsetCSS];
|
|
8
|
+
|
|
9
|
+
static properties = {
|
|
10
|
+
legend: { type: String }
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
constructor() {
|
|
14
|
+
super();
|
|
15
|
+
this.legend = '';
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
render() {
|
|
19
|
+
return html`
|
|
20
|
+
<fieldset>
|
|
21
|
+
${this.legend ? html`<legend>${this.legend}</legend>` : nothing}
|
|
22
|
+
<div class="fields"><slot></slot></div>
|
|
23
|
+
</fieldset>
|
|
24
|
+
`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
customElements.define('bd-fieldset', BdFieldset);
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import './fieldset.js';
|
|
3
|
+
import '../switch/switch.js';
|
|
4
|
+
import '../label/label.js';
|
|
5
|
+
import '../help-text/help-text.js';
|
|
6
|
+
import '../input/input.js';
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
title : 'Atoms/Fieldset',
|
|
10
|
+
tags : ['autodocs'],
|
|
11
|
+
parameters: {
|
|
12
|
+
docs: {
|
|
13
|
+
description: {
|
|
14
|
+
component: `
|
|
15
|
+
**BdFieldset** groups related form controls under a shared caption.
|
|
16
|
+
|
|
17
|
+
### Usage
|
|
18
|
+
\`\`\`html
|
|
19
|
+
<bd-fieldset legend="Choose your plan">
|
|
20
|
+
<bd-radio name="plan" value="basic" label="Basic"></bd-radio>
|
|
21
|
+
<bd-radio name="plan" value="premium" label="Premium"></bd-radio>
|
|
22
|
+
</bd-fieldset>
|
|
23
|
+
\`\`\`
|
|
24
|
+
|
|
25
|
+
### Props
|
|
26
|
+
| Prop | Values | Default |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| \`legend\` | the group caption — omit for an unlabelled group | \`''\` |
|
|
29
|
+
|
|
30
|
+
The controls go in the default slot.
|
|
31
|
+
|
|
32
|
+
### Why group at all
|
|
33
|
+
A screen reader reads a control's own label, not the question above it. Without
|
|
34
|
+
a group caption, "Basic" and "Premium" are announced with no indication of what
|
|
35
|
+
they are choosing between. The \`legend\` is what supplies that.
|
|
36
|
+
|
|
37
|
+
Because slotted controls sit inside the \`<fieldset>\` in the flattened tree, the
|
|
38
|
+
native grouping does apply here — unlike a \`for\` reference, which cannot cross
|
|
39
|
+
the shadow boundary.
|
|
40
|
+
`
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
argTypes: {
|
|
45
|
+
legend: {
|
|
46
|
+
control : 'text',
|
|
47
|
+
description: 'The group caption. Omit for an unlabelled group, though a group without one is rarely useful.',
|
|
48
|
+
table : { type: { summary: 'string' }, defaultValue: { summary: "" }, category: 'Content' }
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const Default = () => html`
|
|
54
|
+
<bd-fieldset legend="Notifications">
|
|
55
|
+
<bd-switch label="Email"></bd-switch>
|
|
56
|
+
<bd-switch label="SMS"></bd-switch>
|
|
57
|
+
</bd-fieldset>
|
|
58
|
+
`;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The gap between fields comes from `--form-fieldSpacing`, and the gap inside
|
|
62
|
+
* each field from `--form-label-default-marginBottom` and
|
|
63
|
+
* `--form-help-text-default-marginTop`. None of those three is visible in a
|
|
64
|
+
* fieldset of bare switches, so this story is the one that shows them — it is
|
|
65
|
+
* where a change to the form spacing tokens actually appears.
|
|
66
|
+
*/
|
|
67
|
+
export const FieldStack = () => html`
|
|
68
|
+
<bd-fieldset legend="Billing address">
|
|
69
|
+
<div>
|
|
70
|
+
<bd-label for="line1" required>Street</bd-label>
|
|
71
|
+
<bd-custom-input label="" size="md" placeholder="221B Baker Street"></bd-custom-input>
|
|
72
|
+
<bd-help-text>Include the building number.</bd-help-text>
|
|
73
|
+
</div>
|
|
74
|
+
<div>
|
|
75
|
+
<bd-label for="city" required>City</bd-label>
|
|
76
|
+
<bd-custom-input label="" size="md" placeholder="London"></bd-custom-input>
|
|
77
|
+
</div>
|
|
78
|
+
<div>
|
|
79
|
+
<bd-label for="post">Postcode</bd-label>
|
|
80
|
+
<bd-custom-input label="" size="md" placeholder="NW1 6XE"></bd-custom-input>
|
|
81
|
+
<bd-help-text tone="error">We could not find that postcode.</bd-help-text>
|
|
82
|
+
</div>
|
|
83
|
+
</bd-fieldset>
|
|
84
|
+
`;
|
|
@@ -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 default css`
|
|
4
5
|
:host {
|
|
@@ -8,28 +9,23 @@ export default css`
|
|
|
8
9
|
padding-right: var(--spacing-64);
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
12
|
+
/* No type here: this needs a directly-slotted raw anchor, and every consumer
|
|
13
|
+
slots bd-link -- measured, 2 instances, assigned [bd-link], 0 raw anchors.
|
|
14
|
+
The fourth rule in this component family to name the anchor tag where the
|
|
15
|
+
markup is bd-link. The remaining two declarations are dead by the same
|
|
16
|
+
proof and are left for a follow-up. */
|
|
18
17
|
::slotted(a) {
|
|
19
|
-
color:
|
|
18
|
+
color: var(--color-text-inverse);
|
|
20
19
|
text-decoration: none;
|
|
21
|
-
font-size: var(--typography-body-regular-fontSize);
|
|
22
|
-
line-height: 1.8;
|
|
23
20
|
}
|
|
24
21
|
|
|
25
22
|
.group-title {
|
|
26
23
|
font-size: var(--typography-body-regular-fontSize);
|
|
27
|
-
font-family: var(--typography-fontFamily-sans
|
|
24
|
+
font-family: var(--typography-fontFamily-sans);
|
|
28
25
|
font-weight: var(--typography-heading-h1-fontWeight);
|
|
29
|
-
color: #ffffff;
|
|
30
26
|
}
|
|
31
27
|
|
|
32
|
-
@media (
|
|
28
|
+
@media ${unsafeCSS(below('md'))} {
|
|
33
29
|
|
|
34
30
|
:host(:nth-of-type(2)) .group-title {
|
|
35
31
|
display: none !important;
|
|
@@ -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 footerCSS from './footer-links-group.css.js';
|
|
5
6
|
|
|
@@ -15,11 +16,11 @@ export class BdFooterLinksGroup extends LitElement {
|
|
|
15
16
|
|
|
16
17
|
render() {
|
|
17
18
|
return html`
|
|
18
|
-
${this.title ? html`<bd-h as="h6" fontWeight="
|
|
19
|
+
${this.title ? html`<bd-h as="h6" fontWeight="bold" color="inverse" class="group-title">${this.title}</bd-h>` : html` `}
|
|
19
20
|
<slot></slot>
|
|
20
21
|
`;
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
|
-
BdFooterLinksGroup.styles = [
|
|
24
|
+
BdFooterLinksGroup.styles = [footerCSS];
|
|
24
25
|
|
|
25
26
|
customElements.define('bd-footer-links-group', BdFooterLinksGroup);
|
|
@@ -1,32 +1,51 @@
|
|
|
1
|
-
import { css } from 'lit';
|
|
1
|
+
import { css, unsafeCSS } from 'lit';
|
|
2
|
+
import { below } from '../shared/token-scales.js';
|
|
2
3
|
|
|
3
4
|
export default css`
|
|
4
5
|
:host {
|
|
5
6
|
display: block;
|
|
7
|
+
/* no role: the masthead's ground, and it stays a primitive on purpose.
|
|
8
|
+
blue-600 is this system's brand INK step -- six roles resolve to it
|
|
9
|
+
(--color-text-brand, --status-brand-text, --status-brand-accent,
|
|
10
|
+
--status-info-text, --color-action-primary-hover and
|
|
11
|
+
--citation-reference-color) and every one of them is ink or an action,
|
|
12
|
+
not a surface.
|
|
13
|
+
.
|
|
14
|
+
So a --color-surface-brand-strong at this value would not be a missing
|
|
15
|
+
role, it would be a trap: brand ink on a brand-strong surface measures
|
|
16
|
+
1.00:1 -- identical colours, invisible text -- and the primary action
|
|
17
|
+
colour on it is 1.36:1, which is where a button in a footer sits. The
|
|
18
|
+
role that reads here is --color-text-inverse at 6.18:1, which is what
|
|
19
|
+
the next line uses.
|
|
20
|
+
.
|
|
21
|
+
Two consumers, both footers, against the twelve that justified
|
|
22
|
+
--color-surface-container. See plans/reports/phase-2-vocab-e-has-role-pass.md
|
|
23
|
+
question E2. */
|
|
6
24
|
background-color: var(--color-blue-600);
|
|
7
|
-
color: var(--color-
|
|
8
|
-
font-family:
|
|
25
|
+
color: var(--color-text-inverse);
|
|
26
|
+
font-family: var(--typography-fontFamily-sans);
|
|
9
27
|
font-size: var(--typography-body-small-fontSize);
|
|
10
|
-
|
|
28
|
+
/* The role's own leading -- see footer.css.js's :host. Deleting it was
|
|
29
|
+
measured to drop this footer to the font metric too. */
|
|
30
|
+
line-height: var(--typography-body-small-lineHeight);
|
|
11
31
|
}
|
|
12
32
|
|
|
13
33
|
bd-divider-vertical {
|
|
14
34
|
display: inline-block;
|
|
15
35
|
width: var(--form-input-default-borderWidth);
|
|
16
|
-
height: var(--dimension-
|
|
17
|
-
background-color: var(--color-
|
|
36
|
+
height: var(--dimension-20);
|
|
37
|
+
background-color: var(--color-surface-default);
|
|
18
38
|
}
|
|
19
39
|
|
|
20
40
|
bd-divider-horizontal {
|
|
21
41
|
display: block;
|
|
22
|
-
background-color: var(--color-
|
|
42
|
+
background-color: var(--color-surface-default);
|
|
23
43
|
opacity: 0.25;
|
|
24
44
|
margin: var(--spacing-16) 0;
|
|
25
45
|
}
|
|
26
46
|
|
|
27
47
|
footer {
|
|
28
48
|
padding: var(--spacing-32) var(--spacing-16);
|
|
29
|
-
max-width: 1200px;
|
|
30
49
|
margin: auto;
|
|
31
50
|
}
|
|
32
51
|
|
|
@@ -34,7 +53,7 @@ export default css`
|
|
|
34
53
|
display: flex;
|
|
35
54
|
justify-content: space-between;
|
|
36
55
|
align-items: center;
|
|
37
|
-
background-color: var(--color-
|
|
56
|
+
background-color: var(--color-surface-brand);
|
|
38
57
|
padding: var(--spacing-24) 0;
|
|
39
58
|
}
|
|
40
59
|
|
|
@@ -64,8 +83,20 @@ export default css`
|
|
|
64
83
|
}
|
|
65
84
|
|
|
66
85
|
.footer-copy {
|
|
67
|
-
font-size:
|
|
68
|
-
|
|
86
|
+
/* No font-size: as footer.css.js's twin of this rule -- :host already
|
|
87
|
+
resolves --typography-body-small-fontSize and this restated the same
|
|
88
|
+
14px as the primitive. The colour stays. */
|
|
89
|
+
/* no role: --color-text-muted-inverse is the role for this job -- dimmed ink
|
|
90
|
+
on a dark ground -- and it CANNOT be used here. Measured against the
|
|
91
|
+
host's blue-600: neutral-100 is 4.80:1 and passes body text; the role's
|
|
92
|
+
neutral-300 is 2.72:1 and fails. The role was built against
|
|
93
|
+
surface-inverse (neutral-900), where neutral-300 reaches 7.92:1; on a
|
|
94
|
+
brand ground two steps lighter it runs out of room.
|
|
95
|
+
.
|
|
96
|
+
So the value stays a primitive deliberately. Adopting the role here would
|
|
97
|
+
be a category-correct, job-correct, ACCESSIBILITY-BREAKING change, which
|
|
98
|
+
is the case worth a marker rather than a silent primitive. */
|
|
99
|
+
color: var(--color-neutral-100);
|
|
69
100
|
}
|
|
70
101
|
|
|
71
102
|
.footer-anpc-lp {
|
|
@@ -74,32 +105,28 @@ export default css`
|
|
|
74
105
|
}
|
|
75
106
|
|
|
76
107
|
.container {
|
|
77
|
-
max-width: 1600px;
|
|
78
108
|
margin: 0 auto;
|
|
79
|
-
padding: 0 var(--spacing-16);
|
|
80
109
|
}
|
|
81
110
|
|
|
82
111
|
.footer-top-bleed {
|
|
83
|
-
background: var(--color-
|
|
112
|
+
background: var(--color-surface-brand);
|
|
84
113
|
}
|
|
85
114
|
|
|
86
|
-
a
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
text-decoration: underline;
|
|
93
|
-
}
|
|
115
|
+
/* No a, a:hover, a:focus or .footer-nav-main rules. This template renders no
|
|
116
|
+
anchor of its own -- the links are slotted, and bd-footer-nav renders
|
|
117
|
+
.footer-nav-main into its own shadow root -- so none of the four could
|
|
118
|
+
match: measured 0 across the 22 built footer stories in 11 bd-footer-lp
|
|
119
|
+
roots. The secondary nav's ink and focus ring are footer-nav-menu.css.js',
|
|
120
|
+
which is the sheet in the same tree as the anchors.
|
|
94
121
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
122
|
+
One of them expressed an intent worth recording rather than resurrecting:
|
|
123
|
+
the mobile query dropped .footer-nav-main to gap 8, where the live sheet
|
|
124
|
+
keeps 16 at both. So the composed rhythm today is 16px stacked and 33px in
|
|
125
|
+
a row -- 16 either side of a 1px divider -- and tightening stacked tap
|
|
126
|
+
targets from 40px of pitch to 32 is a decision, not a repair. */
|
|
101
127
|
|
|
102
|
-
|
|
128
|
+
/* Responsive styles */
|
|
129
|
+
@media ${unsafeCSS(below('md'))} {
|
|
103
130
|
.footer-top {
|
|
104
131
|
flex-direction: column;
|
|
105
132
|
gap: var(--spacing-16);
|
|
@@ -117,13 +144,15 @@ export default css`
|
|
|
117
144
|
margin-bottom: var(--spacing-16);
|
|
118
145
|
}
|
|
119
146
|
|
|
147
|
+
/* Stacked on a phone. The slot is display: contents, so the slotted
|
|
148
|
+
links are this flex box's items -- and only ::slotted reaches them. */
|
|
120
149
|
.footer-secondary-nav {
|
|
121
150
|
flex-direction: column;
|
|
122
151
|
align-items: flex-start;
|
|
123
152
|
gap: var(--spacing-8);
|
|
124
153
|
}
|
|
125
154
|
|
|
126
|
-
.footer-secondary-nav bd-divider-vertical {
|
|
155
|
+
.footer-secondary-nav ::slotted(bd-divider-vertical) {
|
|
127
156
|
display: none !important;
|
|
128
157
|
}
|
|
129
158
|
}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import { LitElement, html } from 'lit';
|
|
2
|
+
// Installs the design tokens into document scope; see src/tokens/tokens.js
|
|
3
|
+
import "../../tokens/tokens.js";
|
|
4
|
+
/* The md boundary comes from the shared breakpoint source so the CSS and the
|
|
5
|
+
JS cannot drift apart again: bd-footer switched at 767 while bd-footer-lp,
|
|
6
|
+
sharing footer-nav-menu.css.js, switched at 768 — so at exactly 768px the
|
|
7
|
+
LP footer rendered its mobile markup under the desktop stylesheet. */
|
|
8
|
+
import { matchesBelow } from '../shared/token-scales.js';
|
|
2
9
|
import '../../components/divider/divider-horizontal.js';
|
|
3
10
|
import '../../components/divider/divider-vertical.js';
|
|
4
11
|
import '../../components/footer/footer-links-group.js';
|
|
5
12
|
import '../../components/footer/footer-nav-menu.js';
|
|
6
13
|
import '../../components/grid/grid.js';
|
|
7
|
-
import { tokens } from "../../tokens/tokens.js";
|
|
8
14
|
import footerCSS from './footer.css.js';
|
|
15
|
+
import { ensembleCSS } from '../shared/ensemble.css.js';
|
|
9
16
|
import { localeMap } from './localeMap.js';
|
|
10
17
|
|
|
11
18
|
export class BdFooterLP extends LitElement {
|
|
@@ -17,7 +24,7 @@ export class BdFooterLP extends LitElement {
|
|
|
17
24
|
constructor() {
|
|
18
25
|
super();
|
|
19
26
|
this.currentLocale = 'en';
|
|
20
|
-
this._isMobile =
|
|
27
|
+
this._isMobile = matchesBelow('md');
|
|
21
28
|
}
|
|
22
29
|
|
|
23
30
|
connectedCallback() {
|
|
@@ -75,13 +82,11 @@ export class BdFooterLP extends LitElement {
|
|
|
75
82
|
});
|
|
76
83
|
|
|
77
84
|
if (exactRegionMatch) {
|
|
78
|
-
country = exactRegionMatch[1];
|
|
79
85
|
const originalKey = Object.keys(localeMap).find(k =>
|
|
80
86
|
k.toLowerCase() === exactRegionMatch[0]
|
|
81
87
|
);
|
|
82
88
|
this.currentLocale = originalKey || exactRegionMatch[0];
|
|
83
89
|
} else {
|
|
84
|
-
country = possibleMatches[0][1];
|
|
85
90
|
const originalKey = Object.keys(localeMap).find(k =>
|
|
86
91
|
k.toLowerCase() === possibleMatches[0][0]
|
|
87
92
|
);
|
|
@@ -111,9 +116,9 @@ export class BdFooterLP extends LitElement {
|
|
|
111
116
|
if (impressumLink) {
|
|
112
117
|
impressumDivider = impressumLink.previousElementSibling;
|
|
113
118
|
|
|
114
|
-
if
|
|
115
|
-
|
|
116
|
-
|
|
119
|
+
// Keep it only if it is the divider immediately before the link
|
|
120
|
+
if (!(impressumDivider && impressumDivider.tagName === 'BD-DIVIDER-VERTICAL' &&
|
|
121
|
+
impressumDivider.nextElementSibling === impressumLink)) {
|
|
117
122
|
impressumDivider = null;
|
|
118
123
|
}
|
|
119
124
|
}
|
|
@@ -129,7 +134,7 @@ export class BdFooterLP extends LitElement {
|
|
|
129
134
|
}
|
|
130
135
|
|
|
131
136
|
_handleResize() {
|
|
132
|
-
this._isMobile =
|
|
137
|
+
this._isMobile = matchesBelow('md');
|
|
133
138
|
}
|
|
134
139
|
|
|
135
140
|
get locale() {
|
|
@@ -152,7 +157,7 @@ export class BdFooterLP extends LitElement {
|
|
|
152
157
|
|
|
153
158
|
return html`
|
|
154
159
|
<div class="footer-top-bleed">
|
|
155
|
-
<div class="container">
|
|
160
|
+
<div class="bd-ensemble container">
|
|
156
161
|
<div class="footer-top">
|
|
157
162
|
<div class="footer-logo">
|
|
158
163
|
<slot name="logo">
|
|
@@ -172,7 +177,7 @@ export class BdFooterLP extends LitElement {
|
|
|
172
177
|
</div>
|
|
173
178
|
</div>
|
|
174
179
|
|
|
175
|
-
<footer class="container">
|
|
180
|
+
<footer class="bd-ensemble container">
|
|
176
181
|
<div class="footer-main-content">
|
|
177
182
|
<slot name="content"></slot>
|
|
178
183
|
</div>
|
|
@@ -180,7 +185,7 @@ export class BdFooterLP extends LitElement {
|
|
|
180
185
|
<div class="footer-secondary-nav">
|
|
181
186
|
<slot name="secondary-nav"></slot>
|
|
182
187
|
</div>
|
|
183
|
-
<bd-divider-horizontal width="100%" color="
|
|
188
|
+
<bd-divider-horizontal width="100%" color="inverse" opacity="0.25"></bd-divider-horizontal>
|
|
184
189
|
<div class="footer-extra">
|
|
185
190
|
<div class="footer-copy">
|
|
186
191
|
<slot name="copyright">
|
|
@@ -230,7 +235,7 @@ export class BdFooterLP extends LitElement {
|
|
|
230
235
|
!(assignedNodes.length === 1 && assignedNodes[0].nodeType === Node.TEXT_NODE && assignedNodes[0].textContent.trim() === '');
|
|
231
236
|
}
|
|
232
237
|
|
|
233
|
-
static styles = [
|
|
238
|
+
static styles = [ensembleCSS, footerCSS];
|
|
234
239
|
}
|
|
235
240
|
|
|
236
241
|
customElements.define('bd-footer-lp', BdFooterLP);
|